forge-sql-orm 1.0.25 → 1.0.26

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/dist-cli/cli.js CHANGED
@@ -337,6 +337,17 @@ const PATCHES = [
337
337
  ],
338
338
  description: "Removing unused dialects from MonkeyPatchable.d.ts"
339
339
  },
340
+ {
341
+ file: "node_modules/@mikro-orm/mysql/node_modules/@mikro-orm/knex/MonkeyPatchable.d.ts",
342
+ deleteLines: [
343
+ /^.*mssql.*$/gim,
344
+ /^.*MsSql.*$/gim,
345
+ /^\s*Postgres.*$/gm,
346
+ /^.*Sqlite3.*$/gm,
347
+ /^.*BetterSqlite3.*$/gim
348
+ ],
349
+ description: "Removing unused dialects from MonkeyPatchable.d.ts"
350
+ },
340
351
  {
341
352
  file: "node_modules/@mikro-orm/knex/MonkeyPatchable.js",
342
353
  deleteLines: [
@@ -348,23 +359,51 @@ const PATCHES = [
348
359
  ],
349
360
  description: "Removing unused dialects from MonkeyPatchable.js"
350
361
  },
362
+ {
363
+ file: "node_modules/@mikro-orm/mysql/node_modules/@mikro-orm/knex/MonkeyPatchable.js",
364
+ deleteLines: [
365
+ /^.*mssql.*$/gim,
366
+ /^.*MsSql.*$/gim,
367
+ /^.*postgres.*$/gim,
368
+ /^.*sqlite.*$/gim,
369
+ /^.*Sqlite.*$/gim
370
+ ],
371
+ description: "Removing unused dialects from MonkeyPatchable.js"
372
+ },
351
373
  {
352
374
  file: "node_modules/@mikro-orm/knex/dialects/index.js",
353
375
  deleteLines: [/^.*mssql.*$/gim, /^.*MsSql.*$/gim, /^.*postgresql.*$/gim, /^.*sqlite.*$/gim],
354
376
  description: "Removing unused dialects from @mikro-orm/knex/dialects/index.js"
355
377
  },
378
+ {
379
+ file: "node_modules/@mikro-orm/mysql/node_modules/@mikro-orm/knex/dialects/index.js",
380
+ deleteLines: [/^.*mssql.*$/gim, /^.*MsSql.*$/gim, /^.*postgresql.*$/gim, /^.*sqlite.*$/gim],
381
+ description: "Removing unused dialects from @mikro-orm/knex/dialects/index.js"
382
+ },
356
383
  {
357
384
  deleteFolder: "node_modules/@mikro-orm/knex/dialects/mssql",
358
385
  description: "Removing mssql dialect from MikroORM"
359
386
  },
387
+ {
388
+ deleteFolder: "node_modules/@mikro-orm/mysql/node_modules/@mikro-orm/knex/dialects/mssql",
389
+ description: "Removing mssql dialect from MikroORM"
390
+ },
360
391
  {
361
392
  deleteFolder: "node_modules/@mikro-orm/knex/dialects/postgresql",
362
393
  description: "Removing postgresql dialect from MikroORM"
363
394
  },
395
+ {
396
+ deleteFolder: "node_modules/@mikro-orm/mysql/node_modules/@mikro-orm/knex/dialects/postgresql",
397
+ description: "Removing postgresql dialect from MikroORM"
398
+ },
364
399
  {
365
400
  deleteFolder: "node_modules/@mikro-orm/knex/dialects/sqlite",
366
401
  description: "Removing sqlite dialect from MikroORM"
367
402
  },
403
+ {
404
+ deleteFolder: "node_modules/@mikro-orm/mysql/node_modules/@mikro-orm/knex/dialects/sqlite",
405
+ description: "Removing sqlite dialect from MikroORM"
406
+ },
368
407
  // 🔄 Fix Webpack `Critical dependency: the request of a dependency is an expression`
369
408
  {
370
409
  file: "node_modules/@mikro-orm/core/utils/Configuration.js",
@@ -455,6 +494,11 @@ const PATCHES = [
455
494
  file: "node_modules/@mikro-orm/knex/dialects/mysql/index.js",
456
495
  deleteLines: [/^.*MariaDbKnexDialect.*$/gim],
457
496
  description: "Removing MariaDbKnexDialect"
497
+ },
498
+ {
499
+ file: "node_modules/@mikro-orm/mysql/node_modules/@mikro-orm/knex/dialects/mysql/index.js",
500
+ deleteLines: [/^.*MariaDbKnexDialect.*$/gim],
501
+ description: "Removing MariaDbKnexDialect"
458
502
  }
459
503
  ];
460
504
  function runPostInstallPatch() {
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sources":["../scripts/actions/generate-models.ts","../scripts/actions/migrations-create.ts","../scripts/actions/migrations-update.ts","../scripts/actions/PatchPostinstall.ts","../scripts/cli.ts"],"sourcesContent":["import \"reflect-metadata\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport { defineConfig, MikroORM, MongoNamingStrategy } from \"@mikro-orm/mysql\";\nimport { EntityGenerator } from \"@mikro-orm/entity-generator\";\nimport { EntityMetadata } from \"@mikro-orm/core/typings\";\n\nconst regenerateIndexFile = (outputPath: string) => {\n const entitiesDir = path.resolve(outputPath);\n const indexPath = path.join(entitiesDir, \"index.ts\");\n\n const entityFiles = fs\n .readdirSync(entitiesDir)\n .filter((file) => file.endsWith(\".ts\") && file !== \"index.ts\");\n\n const imports = entityFiles.map((file) => {\n const entityName = path.basename(file, \".ts\");\n return `import { ${entityName} } from \"./${entityName}\";`;\n });\n\n const indexContent = `${imports.join(\"\\n\")}\\n\\nexport default [${entityFiles.map((file) => path.basename(file, \".ts\")).join(\", \")}];\\n`;\n\n fs.writeFileSync(indexPath, indexContent, \"utf8\");\n console.log(`✅ Updated index.ts with ${entityFiles.length} entities.`);\n};\n\nexport const generateModels = async (options: any) => {\n try {\n const ormConfig = defineConfig({\n host: options.host,\n port: options.port,\n user: options.user,\n password: options.password,\n dbName: options.dbName,\n namingStrategy: MongoNamingStrategy,\n discovery: { warnWhenNoEntities: false },\n extensions: [EntityGenerator],\n debug: true,\n }) as Parameters<typeof MikroORM.initSync>[0];\n\n const orm = MikroORM.initSync(ormConfig);\n console.log(`✅ Connected to ${options.dbName} at ${options.host}:${options.port}`);\n\n const onCreatingVersionField = async (metadatas: EntityMetadata[]) => {\n metadatas.forEach((m) => {\n if (options.versionField) {\n const versionFieldName = Object.keys(m.properties).find((p) => {\n return (\n p === options.versionField ||\n m.properties[p]?.name === options.versionField ||\n m.properties[p]?.fieldNames?.find((f) => f === options.versionField)\n );\n });\n if (versionFieldName) {\n const property = m.properties[versionFieldName];\n if (\n property.type !== \"datetime\" &&\n property.type !== \"integer\" &&\n property.type !== \"decimal\"\n ) {\n console.warn(\n `Version field \"${property.name}\" can be only datetime or integer Table ${m.tableName} but now is \"${property.type}\"`,\n );\n return;\n }\n if (property.primary) {\n console.warn(\n `Version field \"${property.name}\" can not be primary key Table ${m.tableName}`,\n );\n return;\n }\n if (property.nullable) {\n console.warn(\n `Version field \"${property.name}\" should not be nullable Table ${m.tableName}`,\n );\n return;\n }\n property.version = true;\n }\n }\n });\n };\n await orm.entityGenerator.generate({\n entitySchema: true,\n bidirectionalRelations: true,\n identifiedReferences: false,\n forceUndefined: true,\n undefinedDefaults: true,\n useCoreBaseEntity: false,\n onlyPurePivotTables: false,\n outputPurePivotTables: false,\n scalarPropertiesForRelations: \"always\",\n save: true,\n path: options.output,\n onInitialMetadata: onCreatingVersionField,\n });\n\n regenerateIndexFile(options.output);\n\n console.log(`✅ Entities generated at: ${options.output}`);\n process.exit(0);\n } catch (error) {\n console.error(`❌ Error generating entities:`, error);\n process.exit(1);\n }\n};\n","import \"reflect-metadata\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport { MikroORM } from \"@mikro-orm/mysql\";\nimport { execSync } from \"child_process\";\nimport { rmSync } from \"fs\";\n\n/**\n * Cleans SQL statements by removing unnecessary database options.\n * @param sql - The raw SQL statement.\n * @returns The cleaned SQL statement.\n */\nfunction cleanSQLStatement(sql: string): string {\n return sql.replace(/\\s+default\\s+character\\s+set\\s+utf8mb4\\s+engine\\s*=\\s*InnoDB;?/gi, \"\").trim();\n}\n\n/**\n * Generates a migration file using the provided SQL statements.\n * @param createStatements - Array of SQL statements.\n * @param version - Migration version number.\n * @returns TypeScript migration file content.\n */\nfunction generateMigrationFile(createStatements: string[], version: number): string {\n const versionPrefix = `v${version}_MIGRATION`;\n\n // Clean each SQL statement and generate migration lines with .enqueue()\n const migrationLines = createStatements\n .map(\n (stmt, index) =>\n ` .enqueue(\"${versionPrefix}${index}\", \\\"${cleanSQLStatement(stmt)}\\\")`, // eslint-disable-line no-useless-escape\n )\n .join(\"\\n\");\n\n // Migration template\n return `import { MigrationRunner } from \"@forge/sql/out/migration\";\n\nexport default (migrationRunner: MigrationRunner): MigrationRunner => {\n return migrationRunner\n${migrationLines};\n};`;\n}\n\n/**\n * Saves the generated migration file along with `migrationCount.ts` and `index.ts`.\n * @param migrationCode - The migration code to be written to the file.\n * @param version - Migration version number.\n * @param outputDir - Directory where the migration files will be saved.\n */\nfunction saveMigrationFiles(migrationCode: string, version: number, outputDir: string) {\n if (!fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, { recursive: true });\n }\n\n const migrationFilePath = path.join(outputDir, `migrationV${version}.ts`);\n const migrationCountPath = path.join(outputDir, `migrationCount.ts`);\n const indexFilePath = path.join(outputDir, `index.ts`);\n\n // Write the migration file\n fs.writeFileSync(migrationFilePath, migrationCode);\n\n // Write the migration count file\n fs.writeFileSync(migrationCountPath, `export const MIGRATION_VERSION = ${version};`);\n\n // Generate the migration index file\n const indexFileContent = `import { MigrationRunner } from \"@forge/sql/out/migration\";\nimport { MIGRATION_VERSION } from \"./migrationCount\";\n\nexport type MigrationType = (\n migrationRunner: MigrationRunner,\n) => MigrationRunner;\n\nexport default async (\n migrationRunner: MigrationRunner,\n): Promise<MigrationRunner> => {\n for (let i = 1; i <= MIGRATION_VERSION; i++) {\n const migrations = (await import(\\`./migrationV\\${i}\\`)) as {\n default: MigrationType;\n };\n migrations.default(migrationRunner);\n }\n return migrationRunner;\n};`;\n\n fs.writeFileSync(indexFilePath, indexFileContent);\n\n console.log(`✅ Migration file created: ${migrationFilePath}`);\n console.log(`✅ Migration count file updated: ${migrationCountPath}`);\n console.log(`✅ Migration index file created: ${indexFilePath}`);\n}\n\n/**\n * Extracts only the relevant SQL statements for migration.\n * @param schema - The full database schema as SQL.\n * @returns Filtered list of SQL statements.\n */\nconst extractCreateStatements = (schema: string): string[] => {\n const statements = schema.split(\";\").map((s) => s.trim());\n\n return statements.filter(\n (stmt) =>\n stmt.startsWith(\"create table\") ||\n (stmt.startsWith(\"alter table\") && stmt.includes(\"add index\")) ||\n stmt.startsWith(\"primary\"),\n );\n};\n\n/**\n * Dynamically loads `entities` from `index.ts` in the specified directory.\n * @param entitiesPath - Path to the directory containing `index.ts`.\n * @returns Array of entity classes.\n */\nconst loadEntities = async (entitiesPath: string) => {\n try {\n const indexFilePath = path.resolve(path.join(entitiesPath, \"index.ts\"));\n if (!fs.existsSync(indexFilePath)) {\n console.error(`❌ Error: index.ts not found in ${indexFilePath}`);\n process.exit(1);\n }\n\n const { default: entities } = await import(indexFilePath);\n console.log(`✅ Loaded ${entities.length} entities from ${entitiesPath}`);\n return entities;\n } catch (error) {\n console.error(`❌ Error loading index.ts from ${entitiesPath}:`, error);\n process.exit(1);\n }\n};\n\n/**\n * Loads the current migration version from `migrationCount.ts`.\n * @param migrationPath - Path to the migration folder.\n * @returns The latest migration version.\n */\nconst loadMigrationVersion = async (migrationPath: string): Promise<number> => {\n try {\n const migrationCountFilePath = path.resolve(path.join(migrationPath, \"migrationCount.ts\"));\n if (!fs.existsSync(migrationCountFilePath)) {\n return 0;\n }\n\n const { MIGRATION_VERSION } = await import(migrationCountFilePath);\n console.log(`✅ Current migration version: ${MIGRATION_VERSION}`);\n return MIGRATION_VERSION as number;\n } catch (error) {\n console.error(`❌ Error loading migrationCount:`, error);\n process.exit(1);\n }\n};\n\n/**\n * Creates a full database migration.\n * @param options - Database connection settings and output paths.\n */\nexport const createMigration = async (options: any) => {\n try {\n let version = await loadMigrationVersion(options.output);\n\n if (version > 0) {\n console.error(`❌ Error: Migration has already been created.`);\n process.exit(1);\n }\n\n // Start from version 1 if no previous migrations exist\n version = 1;\n\n // Load entities dynamically from index.ts\n const entities = await loadEntities(options.entitiesPath);\n\n // Initialize MikroORM\n const orm = MikroORM.initSync({\n host: options.host,\n port: options.port,\n user: options.user,\n password: options.password,\n dbName: options.dbName,\n entities: entities,\n });\n\n // Generate SQL schema\n const createSchemaSQL = await orm.schema.getCreateSchemaSQL({ wrap: true });\n const statements = extractCreateStatements(createSchemaSQL);\n\n // Generate and save migration files\n const migrationFile = generateMigrationFile(statements, version);\n saveMigrationFiles(migrationFile, version, options.output);\n\n console.log(`✅ Migration successfully created!`);\n process.exit(0);\n } catch (error) {\n console.error(`❌ Error during migration creation:`, error);\n process.exit(1);\n }\n};\n","import \"reflect-metadata\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport { MikroORM } from \"@mikro-orm/mysql\";\n\n/**\n * Cleans SQL statements by removing unnecessary database options.\n * @param sql - The raw SQL statement.\n * @returns The cleaned SQL statement.\n */\nfunction cleanSQLStatement(sql: string): string {\n return sql.replace(/\\s+default\\s+character\\s+set\\s+utf8mb4\\s+engine\\s*=\\s*InnoDB;?/gi, \"\").trim();\n}\n\n/**\n * Generates a migration file using the provided SQL statements.\n * @param createStatements - Array of SQL statements.\n * @param version - Migration version number.\n * @returns TypeScript migration file content.\n */\nfunction generateMigrationFile(createStatements: string[], version: number): string {\n const versionPrefix = `v${version}_MIGRATION`;\n\n // Clean each SQL statement and generate migration lines with .enqueue()\n const migrationLines = createStatements\n .map(\n (stmt, index) =>\n ` .enqueue(\"${versionPrefix}${index}\", \\\"${cleanSQLStatement(stmt)}\\\")`, // eslint-disable-line no-useless-escape\n )\n .join(\"\\n\");\n\n // Migration template\n return `import { MigrationRunner } from \"@forge/sql/out/migration\";\n\nexport default (migrationRunner: MigrationRunner): MigrationRunner => {\n return migrationRunner\n${migrationLines};\n};`;\n}\n\n/**\n * Saves the generated migration file along with `migrationCount.ts` and `index.ts`.\n * @param migrationCode - The migration code to be written to the file.\n * @param version - Migration version number.\n * @param outputDir - Directory where the migration files will be saved.\n */\nfunction saveMigrationFiles(migrationCode: string, version: number, outputDir: string) {\n if (!fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, { recursive: true });\n }\n\n const migrationFilePath = path.join(outputDir, `migrationV${version}.ts`);\n const migrationCountPath = path.join(outputDir, `migrationCount.ts`);\n const indexFilePath = path.join(outputDir, `index.ts`);\n\n // Write the migration file\n fs.writeFileSync(migrationFilePath, migrationCode);\n\n // Write the migration count file\n fs.writeFileSync(migrationCountPath, `export const MIGRATION_VERSION = ${version};`);\n\n // Generate the migration index file\n const indexFileContent = `import { MigrationRunner } from \"@forge/sql/out/migration\";\nimport { MIGRATION_VERSION } from \"./migrationCount\";\n\nexport type MigrationType = (\n migrationRunner: MigrationRunner,\n) => MigrationRunner;\n\nexport default async (\n migrationRunner: MigrationRunner,\n): Promise<MigrationRunner> => {\n for (let i = 1; i <= MIGRATION_VERSION; i++) {\n const migrations = (await import(\\`./migrationV\\${i}\\`)) as {\n default: MigrationType;\n };\n migrations.default(migrationRunner);\n }\n return migrationRunner;\n};`;\n\n fs.writeFileSync(indexFilePath, indexFileContent);\n\n console.log(`✅ Migration file created: ${migrationFilePath}`);\n console.log(`✅ Migration count file updated: ${migrationCountPath}`);\n console.log(`✅ Migration index file created: ${indexFilePath}`);\n}\n\n/**\n * Extracts only the relevant SQL statements for migration.\n * @param schema - The full database schema as SQL.\n * @returns Filtered list of SQL statements.\n */\nconst extractCreateStatements = (schema: string): string[] => {\n const statements = schema.split(\";\").map((s) => s.trim());\n\n return statements.filter(\n (stmt) =>\n stmt.startsWith(\"create table\") ||\n (stmt.startsWith(\"alter table\") && stmt.includes(\"add index\")) ||\n (stmt.startsWith(\"alter table\") && stmt.includes(\"add\") && !stmt.includes(\"foreign\")) ||\n (stmt.startsWith(\"alter table\") && stmt.includes(\"modify\") && !stmt.includes(\"foreign\")),\n );\n};\n\n/**\n * Dynamically loads `entities` from `index.ts` in the specified directory.\n * @param entitiesPath - Path to the directory containing `index.ts`.\n * @returns Array of entity classes.\n */\nconst loadEntities = async (entitiesPath: string) => {\n try {\n const indexFilePath = path.resolve(path.join(entitiesPath, \"index.ts\"));\n if (!fs.existsSync(indexFilePath)) {\n console.error(`❌ Error: index.ts not found in ${entitiesPath}`);\n process.exit(1);\n }\n\n const { default: entities } = await import(indexFilePath);\n console.log(`✅ Loaded ${entities.length} entities from ${entitiesPath}`);\n return entities;\n } catch (error) {\n console.error(`❌ Error loading index.ts from ${entitiesPath}:`, error);\n process.exit(1);\n }\n};\n\n/**\n * Loads the current migration version from `migrationCount.ts`.\n * @param migrationPath - Path to the migration folder.\n * @returns The latest migration version.\n */\nconst loadMigrationVersion = async (migrationPath: string): Promise<number> => {\n try {\n const migrationCountFilePath = path.resolve(path.join(migrationPath, \"migrationCount.ts\"));\n if (!fs.existsSync(migrationCountFilePath)) {\n console.warn(\n `⚠️ Warning: migrationCount.ts not found in ${migrationCountFilePath}, assuming no previous migrations.`,\n );\n return 0;\n }\n\n const { MIGRATION_VERSION } = await import(migrationCountFilePath);\n console.log(`✅ Current migration version: ${MIGRATION_VERSION}`);\n return MIGRATION_VERSION as number;\n } catch (error) {\n console.error(`❌ Error loading migrationCount:`, error);\n process.exit(1);\n }\n};\n\n/**\n * Updates an existing database migration by generating schema modifications.\n * @param options - Database connection settings and output paths.\n */\nexport const updateMigration = async (options: any) => {\n try {\n let version = await loadMigrationVersion(options.output);\n\n if (version < 1) {\n console.log(\n `⚠️ Initial migration not found. Run \"npx forge-sql-orm migrations:create\" first.`,\n );\n process.exit(0);\n }\n version += 1;\n\n // Load entities dynamically from index.ts\n const entities = await loadEntities(options.entitiesPath);\n\n // Initialize MikroORM\n const orm = MikroORM.initSync({\n host: options.host,\n port: options.port,\n user: options.user,\n password: options.password,\n dbName: options.dbName,\n entities,\n debug: true,\n });\n\n // Generate SQL schema updates\n const createSchemaSQL = await orm.schema.getUpdateSchemaMigrationSQL({ wrap: true });\n const statements = extractCreateStatements(createSchemaSQL?.down || \"\");\n\n if (statements.length) {\n const migrationFile = generateMigrationFile(statements, version);\n saveMigrationFiles(migrationFile, version, options.output);\n\n console.log(`✅ Migration successfully updated!`);\n process.exit(0);\n } else {\n console.log(`⚠️ No new migration changes detected.`);\n process.exit(0);\n }\n } catch (error) {\n console.error(`❌ Error during migration update:`, error);\n process.exit(1);\n }\n};\n","import fs from \"fs\";\nimport path from \"path\";\n\n/**\n * Automates patches for MikroORM and Knex to fix Webpack issues.\n * - Removes problematic `require()` calls.\n * - Deletes unnecessary files and folders.\n * - Fixes dynamic imports (`import(id)`) in MikroORM.\n */\n\ninterface Patch {\n file?: string; // File to modify (optional)\n search?: RegExp; // Regex pattern to find problematic code\n replace?: string; // Replacement string for problematic code\n deleteLines?: RegExp[]; // List of regex patterns to remove specific lines\n description: string; // Description of the patch\n deleteFile?: string; // Path of the file to delete (optional)\n deleteFolder?: string; // Path of the folder to delete (optional)\n}\n\nconst PATCHES: Patch[] = [\n // 🗑️ Remove unused dialects (mssql, postgres, sqlite) in MikroORM\n {\n file: \"node_modules/@mikro-orm/knex/MonkeyPatchable.d.ts\",\n deleteLines: [\n /^.*mssql.*$/gim,\n /^.*MsSql.*$/gim,\n /^\\s*Postgres.*$/gm,\n /^.*Sqlite3.*$/gm,\n /^.*BetterSqlite3.*$/gim,\n ],\n description: \"Removing unused dialects from MonkeyPatchable.d.ts\",\n },\n {\n file: \"node_modules/@mikro-orm/knex/MonkeyPatchable.js\",\n deleteLines: [\n /^.*mssql.*$/gim,\n /^.*MsSql.*$/gim,\n /^.*postgres.*$/gim,\n /^.*sqlite.*$/gim,\n /^.*Sqlite.*$/gim,\n ],\n description: \"Removing unused dialects from MonkeyPatchable.js\",\n },\n {\n file: \"node_modules/@mikro-orm/knex/dialects/index.js\",\n deleteLines: [/^.*mssql.*$/gim, /^.*MsSql.*$/gim, /^.*postgresql.*$/gim, /^.*sqlite.*$/gim],\n description: \"Removing unused dialects from @mikro-orm/knex/dialects/index.js\",\n },\n {\n deleteFolder: \"node_modules/@mikro-orm/knex/dialects/mssql\",\n description: \"Removing mssql dialect from MikroORM\",\n },\n {\n deleteFolder: \"node_modules/@mikro-orm/knex/dialects/postgresql\",\n description: \"Removing postgresql dialect from MikroORM\",\n },\n {\n deleteFolder: \"node_modules/@mikro-orm/knex/dialects/sqlite\",\n description: \"Removing sqlite dialect from MikroORM\",\n },\n\n // 🔄 Fix Webpack `Critical dependency: the request of a dependency is an expression`\n {\n file: \"node_modules/@mikro-orm/core/utils/Configuration.js\",\n search: /dynamicImportProvider:\\s*\\/\\* istanbul ignore next \\*\\/\\s*\\(id\\) => import\\(id\\),/g,\n replace: \"dynamicImportProvider: /* istanbul ignore next */ () => Promise.resolve({}),\",\n description: \"Fixing dynamic imports in MikroORM Configuration\",\n },\n {\n file: \"node_modules/@mikro-orm/core/utils/Utils.js\",\n search: /static dynamicImportProvider = \\(id\\) => import\\(id\\);/g,\n replace: \"static dynamicImportProvider = () => Promise.resolve({});\",\n description: \"Fixing dynamic imports in MikroORM Utils.js\",\n },\n\n // 🛑 Remove deprecated `require.extensions` usage\n {\n file: \"node_modules/@mikro-orm/core/utils/Utils.js\",\n search: /\\s\\|\\|\\s*\\(require\\.extensions\\s*&&\\s*!!require\\.extensions\\['\\.ts'\\]\\);\\s*/g,\n replace: \";\",\n description: \"Removing deprecated `require.extensions` check in MikroORM\",\n },\n\n // 🛠️ Patch Knex to remove `Migrator` and `Seeder`\n {\n file: \"node_modules/knex/lib/knex-builder/make-knex.js\",\n deleteLines: [\n /^const \\{ Migrator \\} = require\\('\\.\\.\\/migrations\\/migrate\\/Migrator'\\);$/gm,\n /^const Seeder = require\\('\\.\\.\\/migrations\\/seed\\/Seeder'\\);$/gm,\n ],\n description: \"Removing `Migrator` and `Seeder` requires from make-knex.js\",\n },\n {\n file: \"node_modules/knex/lib/knex-builder/make-knex.js\",\n search: /\\sreturn new Migrator\\(this\\);/g,\n replace: \"return null;\",\n description: \"Replacing `return new Migrator(this);` with `return null;`\",\n },\n {\n file: \"node_modules/knex/lib/knex-builder/make-knex.js\",\n search: /\\sreturn new Seeder\\(this\\);/g,\n replace: \"return null;\",\n description: \"Replacing `return new Seeder(this);` with `return null;`\",\n },\n // 🔄 Patch for MikroORM Entity Generator to use 'forge-sql-orm'\n // {\n // file: \"node_modules/@mikro-orm/entity-generator/SourceFile.js\",\n // search: /^.* from '@mikro-orm.*$/gim,\n // replace: \" }).join(', '))} } from 'forge-sql-orm';`);\",\n // description: \"Replacing entity generator imports with 'forge-sql-orm'\"\n // },\n {\n file: \"node_modules/knex/lib/dialects/index.js\",\n deleteLines: [\n /^.*mssql.*$/gim,\n /^.*MsSql.*$/gim,\n /^.*postgresql.*$/gim,\n /^.*sqlite.*$/gim,\n /^.*oracle.*$/gim,\n /^.*oracledb.*$/gim,\n /^.*pgnative.*$/gim,\n /^.*postgres.*$/gim,\n /^.*redshift.*$/gim,\n /^.*sqlite3.*$/gim,\n /^.*cockroachdb.*$/gim,\n ],\n description: \"Removing unused dialects from @mikro-orm/knex/dialects/index.js\",\n },\n {\n file: \"node_modules/@mikro-orm/core/utils/Utils.js\",\n search: /\\s\\|\\|\\s*\\(require\\.extensions\\s*&&\\s*!!require\\.extensions\\['\\.ts'\\]\\);\\s*/g,\n replace: \";\", // Replaces with semicolon to keep syntax valid\n description: \"Removing deprecated `require.extensions` check from MikroORM\",\n },\n {\n file: \"node_modules/@mikro-orm/core/utils/Utils.js\",\n search: /^.*extensions.*$/gim,\n replace: \"{\", // Replaces with semicolon to keep syntax valid\n description: \"Removing deprecated `require.extensions` check from MikroORM\",\n },\n {\n file: \"node_modules/@mikro-orm/core/utils/Utils.js\",\n search: /^.*package.json.*$/gim,\n replace: \"return 0;\", // Replaces with semicolon to keep syntax valid\n description: \"Removing deprecated `require.extensions` check from MikroORM\",\n },\n {\n file: \"node_modules/@mikro-orm/knex/dialects/mysql/index.js\",\n deleteLines: [/^.*MariaDbKnexDialect.*$/gim],\n description: \"Removing MariaDbKnexDialect\",\n },\n];\n\n/**\n * Runs the MikroORM & Knex patching logic.\n */\nexport function runPostInstallPatch() {\n console.log(\"🔧 Applying MikroORM & Knex patches...\");\n PATCHES.forEach(\n ({ file, search, replace, deleteLines, deleteFile, deleteFolder, description }) => {\n if (file) {\n const filePath = path.resolve(file);\n if (fs.existsSync(filePath)) {\n let content = fs.readFileSync(filePath, \"utf8\");\n let originalContent = content;\n\n // 🔄 Replace text\n if (search && replace) {\n if (typeof search === \"string\" ? content.includes(search) : search.test(content)) {\n content = content.replace(search, replace);\n console.log(`[PATCHED] ${description}`);\n }\n }\n\n // 🗑️ Remove matching lines\n if (deleteLines) {\n deleteLines.forEach((pattern) => {\n content = content\n .split(\"\\n\")\n .filter((line) => !pattern.test(line))\n .join(\"\\n\");\n });\n if (content !== originalContent) {\n console.log(`[CLEANED] Removed matching lines in ${file}`);\n }\n }\n\n // 💾 Save changes only if file was modified\n if (content !== originalContent) {\n fs.writeFileSync(filePath, content, \"utf8\");\n }\n\n // 🚮 Remove empty files\n if (content.trim() === \"\") {\n fs.unlinkSync(filePath);\n console.log(`[REMOVED] ${filePath} (file is now empty)`);\n }\n } else {\n console.warn(`[WARNING] File not found: ${file}`);\n }\n }\n\n // 🚮 Delete specific files\n if (deleteFile) {\n const deleteFilePath = path.resolve(__dirname, \"../\", deleteFile);\n if (fs.existsSync(deleteFilePath)) {\n fs.unlinkSync(deleteFilePath);\n console.log(`[DELETED] ${description}`);\n }\n }\n\n // 🚮 Delete entire folders\n if (deleteFolder) {\n const deleteFolderPath = path.resolve(__dirname, \"../\", deleteFolder);\n if (fs.existsSync(deleteFolderPath)) {\n fs.rmSync(deleteFolderPath, { recursive: true, force: true });\n console.log(`[DELETED] ${description}`);\n }\n }\n },\n );\n\n console.log(\"🎉 MikroORM & Knex patching completed!\");\n}\n","#!/usr/bin/env node\n\nimport { Command } from \"commander\";\nimport dotenv from \"dotenv\";\nimport inquirer from \"inquirer\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport { generateModels } from \"./actions/generate-models\";\nimport { createMigration } from \"./actions/migrations-create\";\nimport { updateMigration } from \"./actions/migrations-update\";\nimport { runPostInstallPatch } from \"./actions/PatchPostinstall\";\n\nconst ENV_PATH = path.resolve(process.cwd(), \".env\");\n// 🔄 Load environment variables from `.env` file\ndotenv.config({ path: ENV_PATH });\n\nconst saveEnvFile = (config: any) => {\n let envContent = \"\";\n const envFilePath = ENV_PATH;\n\n if (fs.existsSync(envFilePath)) {\n envContent = fs.readFileSync(envFilePath, \"utf8\");\n }\n\n const envVars = envContent\n .split(\"\\n\")\n .filter((line) => line.trim() !== \"\" && !line.startsWith(\"#\"))\n .reduce((acc: any, line) => {\n const [key, ...value] = line.split(\"=\");\n acc[key] = value.join(\"=\");\n return acc;\n }, {});\n\n Object.entries(config).forEach(([key, value]) => {\n envVars[`FORGE_SQL_ORM_${key.toUpperCase()}`] = value;\n });\n\n const updatedEnvContent = Object.entries(envVars)\n .map(([key, value]) => `${key}=${value}`)\n .join(\"\\n\");\n\n fs.writeFileSync(envFilePath, updatedEnvContent, { encoding: \"utf8\" });\n\n console.log(\"✅ Configuration saved to .env without overwriting other variables.\");\n};\n\n/**\n * Prompts the user for missing parameters using Inquirer.js.\n * @param config - The current configuration object.\n * @param defaultOutput - Default output path.\n * @param customAskMissingParams - Optional function for additional prompts.\n * @returns Updated configuration with user input.\n */\nconst askMissingParams = async (\n config: any,\n defaultOutput: string,\n customAskMissingParams?: (cfg: any, questions: unknown[]) => void,\n) => {\n const questions: unknown[] = [];\n\n if (!config.host)\n questions.push({\n type: \"input\",\n name: \"host\",\n message: \"Enter database host:\",\n default: \"localhost\",\n });\n\n if (!config.port)\n questions.push({\n type: \"input\",\n name: \"port\",\n message: \"Enter database port:\",\n default: \"3306\",\n validate: (input: string) => !isNaN(parseInt(input, 10)),\n });\n\n if (!config.user)\n questions.push({\n type: \"input\",\n name: \"user\",\n message: \"Enter database user:\",\n default: \"root\",\n });\n\n if (!config.password)\n questions.push({\n type: \"password\",\n name: \"password\",\n message: \"Enter database password:\",\n mask: \"*\",\n });\n\n if (!config.dbName)\n questions.push({\n type: \"input\",\n name: \"dbName\",\n message: \"Enter database name:\",\n });\n\n if (!config.output)\n questions.push({\n type: \"input\",\n name: \"output\",\n message: \"Enter output path:\",\n default: defaultOutput,\n });\n\n // Allow additional questions from the caller\n if (customAskMissingParams) {\n customAskMissingParams(config, questions);\n }\n\n // If there are missing parameters, prompt the user\n if (questions.length > 0) {\n // @ts-ignore - Ignore TypeScript warning for dynamic question type\n const answers = await inquirer.prompt(questions);\n return { ...config, ...answers, port: parseInt(config.port ?? answers.port, 10) };\n }\n\n return config;\n};\n\n/**\n * Retrieves configuration parameters from command-line arguments and environment variables.\n * If any required parameters are missing, prompts the user for input.\n * @param cmd - The command object containing CLI options.\n * @param defaultOutput - Default output directory.\n * @param customConfig - Optional function for additional configuration parameters.\n * @param customAskMissingParams - Optional function for additional prompts.\n * @returns A fully resolved configuration object.\n */\nconst getConfig = async (\n cmd: any,\n defaultOutput: string,\n customConfig?: () => any,\n customAskMissingParams?: (cfg: any, questions: unknown[]) => void,\n) => {\n let config = {\n host: cmd.host || process.env.FORGE_SQL_ORM_HOST,\n port: cmd.port\n ? parseInt(cmd.port, 10)\n : process.env.FORGE_SQL_ORM_PORT\n ? parseInt(process.env.FORGE_SQL_ORM_PORT, 10)\n : undefined,\n user: cmd.user || process.env.FORGE_SQL_ORM_USER,\n password: cmd.password || process.env.FORGE_SQL_ORM_PASSWORD,\n dbName: cmd.dbName || process.env.FORGE_SQL_ORM_DBNAME,\n output: cmd.output || process.env.FORGE_SQL_ORM_OUTPUT,\n };\n\n // Merge additional configurations if provided\n if (customConfig) {\n config = { ...config, ...customConfig() };\n }\n\n const conf = await askMissingParams(config, defaultOutput, customAskMissingParams);\n if (cmd.saveEnv) {\n saveEnvFile(conf);\n }\n return conf;\n};\n\n// 📌 Initialize CLI\nconst program = new Command();\nprogram.version(\"1.0.0\");\n\n// ✅ Command: Generate database models (Entities)\nprogram\n .command(\"generate:model\")\n .description(\"Generate MikroORM models from the database.\")\n .option(\"--host <string>\", \"Database host\")\n .option(\"--port <number>\", \"Database port\")\n .option(\"--user <string>\", \"Database user\")\n .option(\"--password <string>\", \"Database password\")\n .option(\"--dbName <string>\", \"Database name\")\n .option(\"--output <string>\", \"Output path for entities\")\n .option(\"--versionField <string>\", \"Field name for versioning\")\n .option(\"--saveEnv\", \"Save configuration to .env file\")\n .action(async (cmd) => {\n const config = await getConfig(\n cmd,\n \"./database/entities\",\n () => ({\n versionField: cmd.versionField || process.env.FORGE_SQL_ORM_VERSIONFIELD,\n }),\n (cfg, questions: unknown[]) => {\n if (!cfg.versionField) {\n questions.push({\n type: \"input\",\n name: \"versionField\",\n message: \"Enter the field name for versioning (leave empty to skip):\",\n default: \"\",\n });\n }\n },\n );\n await generateModels(config);\n });\n\n// ✅ Command: Create initial database migration\nprogram\n .command(\"migrations:create\")\n .description(\"Generate an initial migration for the entire database.\")\n .option(\"--host <string>\", \"Database host\")\n .option(\"--port <number>\", \"Database port\")\n .option(\"--user <string>\", \"Database user\")\n .option(\"--password <string>\", \"Database password\")\n .option(\"--dbName <string>\", \"Database name\")\n .option(\"--output <string>\", \"Output path for migrations\")\n .option(\"--entitiesPath <string>\", \"Path to the folder containing entities\")\n .option(\"--saveEnv\", \"Save configuration to .env file\")\n .action(async (cmd) => {\n const config = await getConfig(\n cmd,\n \"./database/migration\",\n () => ({\n entitiesPath: cmd.entitiesPath || process.env.FORGE_SQL_ORM_ENTITIESPATH,\n }),\n (cfg, questions: unknown[]) => {\n if (!cfg.entitiesPath)\n questions.push({\n type: \"input\",\n name: \"entitiesPath\",\n message: \"Enter the path to entities:\",\n default: \"./database/entities\",\n });\n },\n );\n await createMigration(config);\n });\n\n// ✅ Command: Update migration for schema changes\nprogram\n .command(\"migrations:update\")\n .description(\"Generate a migration to update the database schema.\")\n .option(\"--host <string>\", \"Database host\")\n .option(\"--port <number>\", \"Database port\")\n .option(\"--user <string>\", \"Database user\")\n .option(\"--password <string>\", \"Database password\")\n .option(\"--dbName <string>\", \"Database name\")\n .option(\"--output <string>\", \"Output path for migrations\")\n .option(\"--entitiesPath <string>\", \"Path to the folder containing entities\")\n .option(\"--saveEnv\", \"Save configuration to .env file\")\n .action(async (cmd) => {\n const config = await getConfig(\n cmd,\n \"./database/migration\",\n () => ({\n entitiesPath: cmd.entitiesPath || process.env.FORGE_SQL_ORM_ENTITIESPATH,\n }),\n (cfg, questions: unknown[]) => {\n if (!cfg.entitiesPath)\n questions.push({\n type: \"input\",\n name: \"entitiesPath\",\n message: \"Enter the path to entities:\",\n default: \"./database/entities\",\n });\n },\n );\n await updateMigration(config);\n });\n\n// Patch MikroORM and Knex\nprogram\n .command(\"patch:mikroorm\")\n .description(\"Patch MikroORM and Knex dependencies to work properly with Forge\")\n .action(async () => {\n console.log(\"Running MikroORM patch...\");\n await runPostInstallPatch();\n await runPostInstallPatch();\n await runPostInstallPatch();\n console.log(\"✅ MikroORM patch applied successfully!\");\n });\n\n// 🔥 Execute CLI\nprogram.parse(process.argv);\n"],"names":["defineConfig","MongoNamingStrategy","EntityGenerator","MikroORM","cleanSQLStatement","generateMigrationFile","saveMigrationFiles","extractCreateStatements","loadEntities","loadMigrationVersion","Command"],"mappings":";;;;;;;;;;AAOA,MAAM,sBAAsB,CAAC,eAAuB;AAC5C,QAAA,cAAc,KAAK,QAAQ,UAAU;AAC3C,QAAM,YAAY,KAAK,KAAK,aAAa,UAAU;AAEnD,QAAM,cAAc,GACjB,YAAY,WAAW,EACvB,OAAO,CAAC,SAAS,KAAK,SAAS,KAAK,KAAK,SAAS,UAAU;AAE/D,QAAM,UAAU,YAAY,IAAI,CAAC,SAAS;AACxC,UAAM,aAAa,KAAK,SAAS,MAAM,KAAK;AACrC,WAAA,YAAY,UAAU,cAAc,UAAU;AAAA,EAAA,CACtD;AAED,QAAM,eAAe,GAAG,QAAQ,KAAK,IAAI,CAAC;AAAA;AAAA,kBAAuB,YAAY,IAAI,CAAC,SAAS,KAAK,SAAS,MAAM,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC;AAAA;AAE9H,KAAA,cAAc,WAAW,cAAc,MAAM;AAChD,UAAQ,IAAI,2BAA2B,YAAY,MAAM,YAAY;AACvE;AAEa,MAAA,iBAAiB,OAAO,YAAiB;AAChD,MAAA;AACF,UAAM,YAAYA,MAAAA,aAAa;AAAA,MAC7B,MAAM,QAAQ;AAAA,MACd,MAAM,QAAQ;AAAA,MACd,MAAM,QAAQ;AAAA,MACd,UAAU,QAAQ;AAAA,MAClB,QAAQ,QAAQ;AAAA,MAChB,gBAAgBC,MAAA;AAAA,MAChB,WAAW,EAAE,oBAAoB,MAAM;AAAA,MACvC,YAAY,CAACC,gBAAAA,eAAe;AAAA,MAC5B,OAAO;AAAA,IAAA,CACR;AAEK,UAAA,MAAMC,MAAAA,SAAS,SAAS,SAAS;AAC/B,YAAA,IAAI,kBAAkB,QAAQ,MAAM,OAAO,QAAQ,IAAI,IAAI,QAAQ,IAAI,EAAE;AAE3E,UAAA,yBAAyB,OAAO,cAAgC;AAC1D,gBAAA,QAAQ,CAAC,MAAM;AACvB,YAAI,QAAQ,cAAc;AAClB,gBAAA,mBAAmB,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,MAAM;AAE3D,mBAAA,MAAM,QAAQ,gBACd,EAAE,WAAW,CAAC,GAAG,SAAS,QAAQ,gBAClC,EAAE,WAAW,CAAC,GAAG,YAAY,KAAK,CAAC,MAAM,MAAM,QAAQ,YAAY;AAAA,UAAA,CAEtE;AACD,cAAI,kBAAkB;AACd,kBAAA,WAAW,EAAE,WAAW,gBAAgB;AAE5C,gBAAA,SAAS,SAAS,cAClB,SAAS,SAAS,aAClB,SAAS,SAAS,WAClB;AACQ,sBAAA;AAAA,gBACN,kBAAkB,SAAS,IAAI,2CAA2C,EAAE,SAAS,gBAAgB,SAAS,IAAI;AAAA,cACpH;AACA;AAAA,YAAA;AAEF,gBAAI,SAAS,SAAS;AACZ,sBAAA;AAAA,gBACN,kBAAkB,SAAS,IAAI,kCAAkC,EAAE,SAAS;AAAA,cAC9E;AACA;AAAA,YAAA;AAEF,gBAAI,SAAS,UAAU;AACb,sBAAA;AAAA,gBACN,kBAAkB,SAAS,IAAI,mCAAmC,EAAE,SAAS;AAAA,cAC/E;AACA;AAAA,YAAA;AAEF,qBAAS,UAAU;AAAA,UAAA;AAAA,QACrB;AAAA,MACF,CACD;AAAA,IACH;AACM,UAAA,IAAI,gBAAgB,SAAS;AAAA,MACjC,cAAc;AAAA,MACd,wBAAwB;AAAA,MACxB,sBAAsB;AAAA,MACtB,gBAAgB;AAAA,MAChB,mBAAmB;AAAA,MACnB,mBAAmB;AAAA,MACnB,qBAAqB;AAAA,MACrB,uBAAuB;AAAA,MACvB,8BAA8B;AAAA,MAC9B,MAAM;AAAA,MACN,MAAM,QAAQ;AAAA,MACd,mBAAmB;AAAA,IAAA,CACpB;AAED,wBAAoB,QAAQ,MAAM;AAElC,YAAQ,IAAI,4BAA4B,QAAQ,MAAM,EAAE;AACxD,YAAQ,KAAK,CAAC;AAAA,WACP,OAAO;AACN,YAAA,MAAM,gCAAgC,KAAK;AACnD,YAAQ,KAAK,CAAC;AAAA,EAAA;AAElB;AC7FA,SAASC,oBAAkB,KAAqB;AAC9C,SAAO,IAAI,QAAQ,oEAAoE,EAAE,EAAE,KAAK;AAClG;AAQA,SAASC,wBAAsB,kBAA4B,SAAyB;AAC5E,QAAA,gBAAgB,IAAI,OAAO;AAGjC,QAAM,iBAAiB,iBACpB;AAAA,IACC,CAAC,MAAM,UACL,qBAAqB,aAAa,GAAG,KAAK,OAAQD,oBAAkB,IAAI,CAAC;AAAA;AAAA,EAAA,EAE5E,KAAK,IAAI;AAGL,SAAA;AAAA;AAAA;AAAA;AAAA,EAIP,cAAc;AAAA;AAEhB;AAQA,SAASE,qBAAmB,eAAuB,SAAiB,WAAmB;AACrF,MAAI,CAAC,GAAG,WAAW,SAAS,GAAG;AAC7B,OAAG,UAAU,WAAW,EAAE,WAAW,MAAM;AAAA,EAAA;AAG7C,QAAM,oBAAoB,KAAK,KAAK,WAAW,aAAa,OAAO,KAAK;AACxE,QAAM,qBAAqB,KAAK,KAAK,WAAW,mBAAmB;AACnE,QAAM,gBAAgB,KAAK,KAAK,WAAW,UAAU;AAGlD,KAAA,cAAc,mBAAmB,aAAa;AAGjD,KAAG,cAAc,oBAAoB,oCAAoC,OAAO,GAAG;AAGnF,QAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBtB,KAAA,cAAc,eAAe,gBAAgB;AAExC,UAAA,IAAI,6BAA6B,iBAAiB,EAAE;AACpD,UAAA,IAAI,mCAAmC,kBAAkB,EAAE;AAC3D,UAAA,IAAI,mCAAmC,aAAa,EAAE;AAChE;AAOA,MAAMC,4BAA0B,CAAC,WAA6B;AACtD,QAAA,aAAa,OAAO,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM;AAExD,SAAO,WAAW;AAAA,IAChB,CAAC,SACC,KAAK,WAAW,cAAc,KAC7B,KAAK,WAAW,aAAa,KAAK,KAAK,SAAS,WAAW,KAC5D,KAAK,WAAW,SAAS;AAAA,EAC7B;AACF;AAOA,MAAMC,iBAAe,OAAO,iBAAyB;AAC/C,MAAA;AACF,UAAM,gBAAgB,KAAK,QAAQ,KAAK,KAAK,cAAc,UAAU,CAAC;AACtE,QAAI,CAAC,GAAG,WAAW,aAAa,GAAG;AACzB,cAAA,MAAM,kCAAkC,aAAa,EAAE;AAC/D,cAAQ,KAAK,CAAC;AAAA,IAAA;AAGhB,UAAM,EAAE,SAAS,aAAa,MAAM,OAAO;AAC3C,YAAQ,IAAI,YAAY,SAAS,MAAM,kBAAkB,YAAY,EAAE;AAChE,WAAA;AAAA,WACA,OAAO;AACd,YAAQ,MAAM,iCAAiC,YAAY,KAAK,KAAK;AACrE,YAAQ,KAAK,CAAC;AAAA,EAAA;AAElB;AAOA,MAAMC,yBAAuB,OAAO,kBAA2C;AACzE,MAAA;AACF,UAAM,yBAAyB,KAAK,QAAQ,KAAK,KAAK,eAAe,mBAAmB,CAAC;AACzF,QAAI,CAAC,GAAG,WAAW,sBAAsB,GAAG;AACnC,aAAA;AAAA,IAAA;AAGT,UAAM,EAAE,kBAAA,IAAsB,MAAM,OAAO;AACnC,YAAA,IAAI,gCAAgC,iBAAiB,EAAE;AACxD,WAAA;AAAA,WACA,OAAO;AACN,YAAA,MAAM,mCAAmC,KAAK;AACtD,YAAQ,KAAK,CAAC;AAAA,EAAA;AAElB;AAMa,MAAA,kBAAkB,OAAO,YAAiB;AACjD,MAAA;AACF,QAAI,UAAU,MAAMA,uBAAqB,QAAQ,MAAM;AAEvD,QAAI,UAAU,GAAG;AACf,cAAQ,MAAM,8CAA8C;AAC5D,cAAQ,KAAK,CAAC;AAAA,IAAA;AAIN,cAAA;AAGV,UAAM,WAAW,MAAMD,eAAa,QAAQ,YAAY;AAGlD,UAAA,MAAML,eAAS,SAAS;AAAA,MAC5B,MAAM,QAAQ;AAAA,MACd,MAAM,QAAQ;AAAA,MACd,MAAM,QAAQ;AAAA,MACd,UAAU,QAAQ;AAAA,MAClB,QAAQ,QAAQ;AAAA,MAChB;AAAA,IAAA,CACD;AAGK,UAAA,kBAAkB,MAAM,IAAI,OAAO,mBAAmB,EAAE,MAAM,MAAM;AACpE,UAAA,aAAaI,0BAAwB,eAAe;AAGpD,UAAA,gBAAgBF,wBAAsB,YAAY,OAAO;AAC5CC,yBAAA,eAAe,SAAS,QAAQ,MAAM;AAEzD,YAAQ,IAAI,mCAAmC;AAC/C,YAAQ,KAAK,CAAC;AAAA,WACP,OAAO;AACN,YAAA,MAAM,sCAAsC,KAAK;AACzD,YAAQ,KAAK,CAAC;AAAA,EAAA;AAElB;ACtLA,SAAS,kBAAkB,KAAqB;AAC9C,SAAO,IAAI,QAAQ,oEAAoE,EAAE,EAAE,KAAK;AAClG;AAQA,SAAS,sBAAsB,kBAA4B,SAAyB;AAC5E,QAAA,gBAAgB,IAAI,OAAO;AAGjC,QAAM,iBAAiB,iBACpB;AAAA,IACC,CAAC,MAAM,UACL,qBAAqB,aAAa,GAAG,KAAK,OAAQ,kBAAkB,IAAI,CAAC;AAAA;AAAA,EAAA,EAE5E,KAAK,IAAI;AAGL,SAAA;AAAA;AAAA;AAAA;AAAA,EAIP,cAAc;AAAA;AAEhB;AAQA,SAAS,mBAAmB,eAAuB,SAAiB,WAAmB;AACrF,MAAI,CAAC,GAAG,WAAW,SAAS,GAAG;AAC7B,OAAG,UAAU,WAAW,EAAE,WAAW,MAAM;AAAA,EAAA;AAG7C,QAAM,oBAAoB,KAAK,KAAK,WAAW,aAAa,OAAO,KAAK;AACxE,QAAM,qBAAqB,KAAK,KAAK,WAAW,mBAAmB;AACnE,QAAM,gBAAgB,KAAK,KAAK,WAAW,UAAU;AAGlD,KAAA,cAAc,mBAAmB,aAAa;AAGjD,KAAG,cAAc,oBAAoB,oCAAoC,OAAO,GAAG;AAGnF,QAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBtB,KAAA,cAAc,eAAe,gBAAgB;AAExC,UAAA,IAAI,6BAA6B,iBAAiB,EAAE;AACpD,UAAA,IAAI,mCAAmC,kBAAkB,EAAE;AAC3D,UAAA,IAAI,mCAAmC,aAAa,EAAE;AAChE;AAOA,MAAM,0BAA0B,CAAC,WAA6B;AACtD,QAAA,aAAa,OAAO,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM;AAExD,SAAO,WAAW;AAAA,IAChB,CAAC,SACC,KAAK,WAAW,cAAc,KAC7B,KAAK,WAAW,aAAa,KAAK,KAAK,SAAS,WAAW,KAC3D,KAAK,WAAW,aAAa,KAAK,KAAK,SAAS,KAAK,KAAK,CAAC,KAAK,SAAS,SAAS,KAClF,KAAK,WAAW,aAAa,KAAK,KAAK,SAAS,QAAQ,KAAK,CAAC,KAAK,SAAS,SAAS;AAAA,EAC1F;AACF;AAOA,MAAM,eAAe,OAAO,iBAAyB;AAC/C,MAAA;AACF,UAAM,gBAAgB,KAAK,QAAQ,KAAK,KAAK,cAAc,UAAU,CAAC;AACtE,QAAI,CAAC,GAAG,WAAW,aAAa,GAAG;AACzB,cAAA,MAAM,kCAAkC,YAAY,EAAE;AAC9D,cAAQ,KAAK,CAAC;AAAA,IAAA;AAGhB,UAAM,EAAE,SAAS,aAAa,MAAM,OAAO;AAC3C,YAAQ,IAAI,YAAY,SAAS,MAAM,kBAAkB,YAAY,EAAE;AAChE,WAAA;AAAA,WACA,OAAO;AACd,YAAQ,MAAM,iCAAiC,YAAY,KAAK,KAAK;AACrE,YAAQ,KAAK,CAAC;AAAA,EAAA;AAElB;AAOA,MAAM,uBAAuB,OAAO,kBAA2C;AACzE,MAAA;AACF,UAAM,yBAAyB,KAAK,QAAQ,KAAK,KAAK,eAAe,mBAAmB,CAAC;AACzF,QAAI,CAAC,GAAG,WAAW,sBAAsB,GAAG;AAClC,cAAA;AAAA,QACN,8CAA8C,sBAAsB;AAAA,MACtE;AACO,aAAA;AAAA,IAAA;AAGT,UAAM,EAAE,kBAAA,IAAsB,MAAM,OAAO;AACnC,YAAA,IAAI,gCAAgC,iBAAiB,EAAE;AACxD,WAAA;AAAA,WACA,OAAO;AACN,YAAA,MAAM,mCAAmC,KAAK;AACtD,YAAQ,KAAK,CAAC;AAAA,EAAA;AAElB;AAMa,MAAA,kBAAkB,OAAO,YAAiB;AACjD,MAAA;AACF,QAAI,UAAU,MAAM,qBAAqB,QAAQ,MAAM;AAEvD,QAAI,UAAU,GAAG;AACP,cAAA;AAAA,QACN;AAAA,MACF;AACA,cAAQ,KAAK,CAAC;AAAA,IAAA;AAEL,eAAA;AAGX,UAAM,WAAW,MAAM,aAAa,QAAQ,YAAY;AAGlD,UAAA,MAAMH,eAAS,SAAS;AAAA,MAC5B,MAAM,QAAQ;AAAA,MACd,MAAM,QAAQ;AAAA,MACd,MAAM,QAAQ;AAAA,MACd,UAAU,QAAQ;AAAA,MAClB,QAAQ,QAAQ;AAAA,MAChB;AAAA,MACA,OAAO;AAAA,IAAA,CACR;AAGK,UAAA,kBAAkB,MAAM,IAAI,OAAO,4BAA4B,EAAE,MAAM,MAAM;AACnF,UAAM,aAAa,wBAAwB,iBAAiB,QAAQ,EAAE;AAEtE,QAAI,WAAW,QAAQ;AACf,YAAA,gBAAgB,sBAAsB,YAAY,OAAO;AAC5C,yBAAA,eAAe,SAAS,QAAQ,MAAM;AAEzD,cAAQ,IAAI,mCAAmC;AAC/C,cAAQ,KAAK,CAAC;AAAA,IAAA,OACT;AACL,cAAQ,IAAI,uCAAuC;AACnD,cAAQ,KAAK,CAAC;AAAA,IAAA;AAAA,WAET,OAAO;AACN,YAAA,MAAM,oCAAoC,KAAK;AACvD,YAAQ,KAAK,CAAC;AAAA,EAAA;AAElB;ACnLA,MAAM,UAAmB;AAAA;AAAA,EAEvB;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa,CAAC,kBAAkB,kBAAkB,uBAAuB,iBAAiB;AAAA,IAC1F,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,cAAc;AAAA,IACd,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,cAAc;AAAA,IACd,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,cAAc;AAAA,IACd,aAAa;AAAA,EACf;AAAA;AAAA,EAGA;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AAAA;AAAA,EAGA;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AAAA;AAAA,EAGA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,MACX;AAAA,MACA;AAAA,IACF;AAAA,IACA,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,SAAS;AAAA;AAAA,IACT,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,SAAS;AAAA;AAAA,IACT,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,SAAS;AAAA;AAAA,IACT,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa,CAAC,6BAA6B;AAAA,IAC3C,aAAa;AAAA,EAAA;AAEjB;AAKO,SAAS,sBAAsB;AACpC,UAAQ,IAAI,wCAAwC;AAC5C,UAAA;AAAA,IACN,CAAC,EAAE,MAAM,QAAQ,SAAS,aAAa,YAAY,cAAc,kBAAkB;AACjF,UAAI,MAAM;AACF,cAAA,WAAW,KAAK,QAAQ,IAAI;AAC9B,YAAA,GAAG,WAAW,QAAQ,GAAG;AAC3B,cAAI,UAAU,GAAG,aAAa,UAAU,MAAM;AAC9C,cAAI,kBAAkB;AAGtB,cAAI,UAAU,SAAS;AACjB,gBAAA,OAAO,WAAW,WAAW,QAAQ,SAAS,MAAM,IAAI,OAAO,KAAK,OAAO,GAAG;AACtE,wBAAA,QAAQ,QAAQ,QAAQ,OAAO;AACjC,sBAAA,IAAI,aAAa,WAAW,EAAE;AAAA,YAAA;AAAA,UACxC;AAIF,cAAI,aAAa;AACH,wBAAA,QAAQ,CAAC,YAAY;AAC/B,wBAAU,QACP,MAAM,IAAI,EACV,OAAO,CAAC,SAAS,CAAC,QAAQ,KAAK,IAAI,CAAC,EACpC,KAAK,IAAI;AAAA,YAAA,CACb;AACD,gBAAI,YAAY,iBAAiB;AACvB,sBAAA,IAAI,uCAAuC,IAAI,EAAE;AAAA,YAAA;AAAA,UAC3D;AAIF,cAAI,YAAY,iBAAiB;AAC5B,eAAA,cAAc,UAAU,SAAS,MAAM;AAAA,UAAA;AAIxC,cAAA,QAAQ,KAAK,MAAM,IAAI;AACzB,eAAG,WAAW,QAAQ;AACd,oBAAA,IAAI,aAAa,QAAQ,sBAAsB;AAAA,UAAA;AAAA,QACzD,OACK;AACG,kBAAA,KAAK,6BAA6B,IAAI,EAAE;AAAA,QAAA;AAAA,MAClD;AAIF,UAAI,YAAY;AACd,cAAM,iBAAiB,KAAK,QAAQ,WAAW,OAAO,UAAU;AAC5D,YAAA,GAAG,WAAW,cAAc,GAAG;AACjC,aAAG,WAAW,cAAc;AACpB,kBAAA,IAAI,aAAa,WAAW,EAAE;AAAA,QAAA;AAAA,MACxC;AAIF,UAAI,cAAc;AAChB,cAAM,mBAAmB,KAAK,QAAQ,WAAW,OAAO,YAAY;AAChE,YAAA,GAAG,WAAW,gBAAgB,GAAG;AACnC,aAAG,OAAO,kBAAkB,EAAE,WAAW,MAAM,OAAO,MAAM;AACpD,kBAAA,IAAI,aAAa,WAAW,EAAE;AAAA,QAAA;AAAA,MACxC;AAAA,IACF;AAAA,EAEJ;AAEA,UAAQ,IAAI,wCAAwC;AACtD;ACpNA,MAAM,WAAW,KAAK,QAAQ,QAAQ,IAAA,GAAO,MAAM;AAEnD,OAAO,OAAO,EAAE,MAAM,UAAU;AAEhC,MAAM,cAAc,CAAC,WAAgB;AACnC,MAAI,aAAa;AACjB,QAAM,cAAc;AAEhB,MAAA,GAAG,WAAW,WAAW,GAAG;AACjB,iBAAA,GAAG,aAAa,aAAa,MAAM;AAAA,EAAA;AAG5C,QAAA,UAAU,WACb,MAAM,IAAI,EACV,OAAO,CAAC,SAAS,KAAK,WAAW,MAAM,CAAC,KAAK,WAAW,GAAG,CAAC,EAC5D,OAAO,CAAC,KAAU,SAAS;AAC1B,UAAM,CAAC,KAAK,GAAG,KAAK,IAAI,KAAK,MAAM,GAAG;AACtC,QAAI,GAAG,IAAI,MAAM,KAAK,GAAG;AAClB,WAAA;AAAA,EACT,GAAG,EAAE;AAEA,SAAA,QAAQ,MAAM,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC/C,YAAQ,iBAAiB,IAAI,YAAa,CAAA,EAAE,IAAI;AAAA,EAAA,CACjD;AAED,QAAM,oBAAoB,OAAO,QAAQ,OAAO,EAC7C,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,EACvC,KAAK,IAAI;AAEZ,KAAG,cAAc,aAAa,mBAAmB,EAAE,UAAU,QAAQ;AAErE,UAAQ,IAAI,oEAAoE;AAClF;AASA,MAAM,mBAAmB,OACvB,QACA,eACA,2BACG;AACH,QAAM,YAAuB,CAAC;AAE9B,MAAI,CAAC,OAAO;AACV,cAAU,KAAK;AAAA,MACb,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,IAAA,CACV;AAEH,MAAI,CAAC,OAAO;AACV,cAAU,KAAK;AAAA,MACb,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,MACT,UAAU,CAAC,UAAkB,CAAC,MAAM,SAAS,OAAO,EAAE,CAAC;AAAA,IAAA,CACxD;AAEH,MAAI,CAAC,OAAO;AACV,cAAU,KAAK;AAAA,MACb,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,IAAA,CACV;AAEH,MAAI,CAAC,OAAO;AACV,cAAU,KAAK;AAAA,MACb,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,MAAM;AAAA,IAAA,CACP;AAEH,MAAI,CAAC,OAAO;AACV,cAAU,KAAK;AAAA,MACb,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IAAA,CACV;AAEH,MAAI,CAAC,OAAO;AACV,cAAU,KAAK;AAAA,MACb,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,IAAA,CACV;AAGH,MAAI,wBAAwB;AAC1B,2BAAuB,QAAQ,SAAS;AAAA,EAAA;AAItC,MAAA,UAAU,SAAS,GAAG;AAExB,UAAM,UAAU,MAAM,SAAS,OAAO,SAAS;AAC/C,WAAO,EAAE,GAAG,QAAQ,GAAG,SAAS,MAAM,SAAS,OAAO,QAAQ,QAAQ,MAAM,EAAE,EAAE;AAAA,EAAA;AAG3E,SAAA;AACT;AAWA,MAAM,YAAY,OAChB,KACA,eACA,cACA,2BACG;AACH,MAAI,SAAS;AAAA,IACX,MAAM,IAAI,QAAQ,QAAQ,IAAI;AAAA,IAC9B,MAAM,IAAI,OACN,SAAS,IAAI,MAAM,EAAE,IACrB,QAAQ,IAAI,qBACV,SAAS,QAAQ,IAAI,oBAAoB,EAAE,IAC3C;AAAA,IACN,MAAM,IAAI,QAAQ,QAAQ,IAAI;AAAA,IAC9B,UAAU,IAAI,YAAY,QAAQ,IAAI;AAAA,IACtC,QAAQ,IAAI,UAAU,QAAQ,IAAI;AAAA,IAClC,QAAQ,IAAI,UAAU,QAAQ,IAAI;AAAA,EACpC;AAGA,MAAI,cAAc;AAChB,aAAS,EAAE,GAAG,QAAQ,GAAG,eAAe;AAAA,EAAA;AAG1C,QAAM,OAAO,MAAM,iBAAiB,QAAQ,eAAe,sBAAsB;AACjF,MAAI,IAAI,SAAS;AACf,gBAAY,IAAI;AAAA,EAAA;AAEX,SAAA;AACT;AAGA,MAAM,UAAU,IAAIO,UAAAA,QAAQ;AAC5B,QAAQ,QAAQ,OAAO;AAGvB,QACG,QAAQ,gBAAgB,EACxB,YAAY,6CAA6C,EACzD,OAAO,mBAAmB,eAAe,EACzC,OAAO,mBAAmB,eAAe,EACzC,OAAO,mBAAmB,eAAe,EACzC,OAAO,uBAAuB,mBAAmB,EACjD,OAAO,qBAAqB,eAAe,EAC3C,OAAO,qBAAqB,0BAA0B,EACtD,OAAO,2BAA2B,2BAA2B,EAC7D,OAAO,aAAa,iCAAiC,EACrD,OAAO,OAAO,QAAQ;AACrB,QAAM,SAAS,MAAM;AAAA,IACnB;AAAA,IACA;AAAA,IACA,OAAO;AAAA,MACL,cAAc,IAAI,gBAAgB,QAAQ,IAAI;AAAA,IAAA;AAAA,IAEhD,CAAC,KAAK,cAAyB;AACzB,UAAA,CAAC,IAAI,cAAc;AACrB,kBAAU,KAAK;AAAA,UACb,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS;AAAA,UACT,SAAS;AAAA,QAAA,CACV;AAAA,MAAA;AAAA,IACH;AAAA,EAEJ;AACA,QAAM,eAAe,MAAM;AAC7B,CAAC;AAGH,QACG,QAAQ,mBAAmB,EAC3B,YAAY,wDAAwD,EACpE,OAAO,mBAAmB,eAAe,EACzC,OAAO,mBAAmB,eAAe,EACzC,OAAO,mBAAmB,eAAe,EACzC,OAAO,uBAAuB,mBAAmB,EACjD,OAAO,qBAAqB,eAAe,EAC3C,OAAO,qBAAqB,4BAA4B,EACxD,OAAO,2BAA2B,wCAAwC,EAC1E,OAAO,aAAa,iCAAiC,EACrD,OAAO,OAAO,QAAQ;AACrB,QAAM,SAAS,MAAM;AAAA,IACnB;AAAA,IACA;AAAA,IACA,OAAO;AAAA,MACL,cAAc,IAAI,gBAAgB,QAAQ,IAAI;AAAA,IAAA;AAAA,IAEhD,CAAC,KAAK,cAAyB;AAC7B,UAAI,CAAC,IAAI;AACP,kBAAU,KAAK;AAAA,UACb,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS;AAAA,UACT,SAAS;AAAA,QAAA,CACV;AAAA,IAAA;AAAA,EAEP;AACA,QAAM,gBAAgB,MAAM;AAC9B,CAAC;AAGH,QACG,QAAQ,mBAAmB,EAC3B,YAAY,qDAAqD,EACjE,OAAO,mBAAmB,eAAe,EACzC,OAAO,mBAAmB,eAAe,EACzC,OAAO,mBAAmB,eAAe,EACzC,OAAO,uBAAuB,mBAAmB,EACjD,OAAO,qBAAqB,eAAe,EAC3C,OAAO,qBAAqB,4BAA4B,EACxD,OAAO,2BAA2B,wCAAwC,EAC1E,OAAO,aAAa,iCAAiC,EACrD,OAAO,OAAO,QAAQ;AACrB,QAAM,SAAS,MAAM;AAAA,IACnB;AAAA,IACA;AAAA,IACA,OAAO;AAAA,MACL,cAAc,IAAI,gBAAgB,QAAQ,IAAI;AAAA,IAAA;AAAA,IAEhD,CAAC,KAAK,cAAyB;AAC7B,UAAI,CAAC,IAAI;AACP,kBAAU,KAAK;AAAA,UACb,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS;AAAA,UACT,SAAS;AAAA,QAAA,CACV;AAAA,IAAA;AAAA,EAEP;AACA,QAAM,gBAAgB,MAAM;AAC9B,CAAC;AAGH,QACG,QAAQ,gBAAgB,EACxB,YAAY,kEAAkE,EAC9E,OAAO,YAAY;AAClB,UAAQ,IAAI,2BAA2B;AACvC,QAAM,oBAAoB;AAC1B,QAAM,oBAAoB;AAC1B,QAAM,oBAAoB;AAC1B,UAAQ,IAAI,wCAAwC;AACtD,CAAC;AAGH,QAAQ,MAAM,QAAQ,IAAI;"}
1
+ {"version":3,"file":"cli.js","sources":["../scripts/actions/generate-models.ts","../scripts/actions/migrations-create.ts","../scripts/actions/migrations-update.ts","../scripts/actions/PatchPostinstall.ts","../scripts/cli.ts"],"sourcesContent":["import \"reflect-metadata\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport { defineConfig, MikroORM, MongoNamingStrategy } from \"@mikro-orm/mysql\";\nimport { EntityGenerator } from \"@mikro-orm/entity-generator\";\nimport { EntityMetadata } from \"@mikro-orm/core/typings\";\n\nconst regenerateIndexFile = (outputPath: string) => {\n const entitiesDir = path.resolve(outputPath);\n const indexPath = path.join(entitiesDir, \"index.ts\");\n\n const entityFiles = fs\n .readdirSync(entitiesDir)\n .filter((file) => file.endsWith(\".ts\") && file !== \"index.ts\");\n\n const imports = entityFiles.map((file) => {\n const entityName = path.basename(file, \".ts\");\n return `import { ${entityName} } from \"./${entityName}\";`;\n });\n\n const indexContent = `${imports.join(\"\\n\")}\\n\\nexport default [${entityFiles.map((file) => path.basename(file, \".ts\")).join(\", \")}];\\n`;\n\n fs.writeFileSync(indexPath, indexContent, \"utf8\");\n console.log(`✅ Updated index.ts with ${entityFiles.length} entities.`);\n};\n\nexport const generateModels = async (options: any) => {\n try {\n const ormConfig = defineConfig({\n host: options.host,\n port: options.port,\n user: options.user,\n password: options.password,\n dbName: options.dbName,\n namingStrategy: MongoNamingStrategy,\n discovery: { warnWhenNoEntities: false },\n extensions: [EntityGenerator],\n debug: true,\n }) as Parameters<typeof MikroORM.initSync>[0];\n\n const orm = MikroORM.initSync(ormConfig);\n console.log(`✅ Connected to ${options.dbName} at ${options.host}:${options.port}`);\n\n const onCreatingVersionField = async (metadatas: EntityMetadata[]) => {\n metadatas.forEach((m) => {\n if (options.versionField) {\n const versionFieldName = Object.keys(m.properties).find((p) => {\n return (\n p === options.versionField ||\n m.properties[p]?.name === options.versionField ||\n m.properties[p]?.fieldNames?.find((f) => f === options.versionField)\n );\n });\n if (versionFieldName) {\n const property = m.properties[versionFieldName];\n if (\n property.type !== \"datetime\" &&\n property.type !== \"integer\" &&\n property.type !== \"decimal\"\n ) {\n console.warn(\n `Version field \"${property.name}\" can be only datetime or integer Table ${m.tableName} but now is \"${property.type}\"`,\n );\n return;\n }\n if (property.primary) {\n console.warn(\n `Version field \"${property.name}\" can not be primary key Table ${m.tableName}`,\n );\n return;\n }\n if (property.nullable) {\n console.warn(\n `Version field \"${property.name}\" should not be nullable Table ${m.tableName}`,\n );\n return;\n }\n property.version = true;\n }\n }\n });\n };\n await orm.entityGenerator.generate({\n entitySchema: true,\n bidirectionalRelations: true,\n identifiedReferences: false,\n forceUndefined: true,\n undefinedDefaults: true,\n useCoreBaseEntity: false,\n onlyPurePivotTables: false,\n outputPurePivotTables: false,\n scalarPropertiesForRelations: \"always\",\n save: true,\n path: options.output,\n onInitialMetadata: onCreatingVersionField,\n });\n\n regenerateIndexFile(options.output);\n\n console.log(`✅ Entities generated at: ${options.output}`);\n process.exit(0);\n } catch (error) {\n console.error(`❌ Error generating entities:`, error);\n process.exit(1);\n }\n};\n","import \"reflect-metadata\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport { MikroORM } from \"@mikro-orm/mysql\";\nimport { execSync } from \"child_process\";\nimport { rmSync } from \"fs\";\n\n/**\n * Cleans SQL statements by removing unnecessary database options.\n * @param sql - The raw SQL statement.\n * @returns The cleaned SQL statement.\n */\nfunction cleanSQLStatement(sql: string): string {\n return sql.replace(/\\s+default\\s+character\\s+set\\s+utf8mb4\\s+engine\\s*=\\s*InnoDB;?/gi, \"\").trim();\n}\n\n/**\n * Generates a migration file using the provided SQL statements.\n * @param createStatements - Array of SQL statements.\n * @param version - Migration version number.\n * @returns TypeScript migration file content.\n */\nfunction generateMigrationFile(createStatements: string[], version: number): string {\n const versionPrefix = `v${version}_MIGRATION`;\n\n // Clean each SQL statement and generate migration lines with .enqueue()\n const migrationLines = createStatements\n .map(\n (stmt, index) =>\n ` .enqueue(\"${versionPrefix}${index}\", \\\"${cleanSQLStatement(stmt)}\\\")`, // eslint-disable-line no-useless-escape\n )\n .join(\"\\n\");\n\n // Migration template\n return `import { MigrationRunner } from \"@forge/sql/out/migration\";\n\nexport default (migrationRunner: MigrationRunner): MigrationRunner => {\n return migrationRunner\n${migrationLines};\n};`;\n}\n\n/**\n * Saves the generated migration file along with `migrationCount.ts` and `index.ts`.\n * @param migrationCode - The migration code to be written to the file.\n * @param version - Migration version number.\n * @param outputDir - Directory where the migration files will be saved.\n */\nfunction saveMigrationFiles(migrationCode: string, version: number, outputDir: string) {\n if (!fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, { recursive: true });\n }\n\n const migrationFilePath = path.join(outputDir, `migrationV${version}.ts`);\n const migrationCountPath = path.join(outputDir, `migrationCount.ts`);\n const indexFilePath = path.join(outputDir, `index.ts`);\n\n // Write the migration file\n fs.writeFileSync(migrationFilePath, migrationCode);\n\n // Write the migration count file\n fs.writeFileSync(migrationCountPath, `export const MIGRATION_VERSION = ${version};`);\n\n // Generate the migration index file\n const indexFileContent = `import { MigrationRunner } from \"@forge/sql/out/migration\";\nimport { MIGRATION_VERSION } from \"./migrationCount\";\n\nexport type MigrationType = (\n migrationRunner: MigrationRunner,\n) => MigrationRunner;\n\nexport default async (\n migrationRunner: MigrationRunner,\n): Promise<MigrationRunner> => {\n for (let i = 1; i <= MIGRATION_VERSION; i++) {\n const migrations = (await import(\\`./migrationV\\${i}\\`)) as {\n default: MigrationType;\n };\n migrations.default(migrationRunner);\n }\n return migrationRunner;\n};`;\n\n fs.writeFileSync(indexFilePath, indexFileContent);\n\n console.log(`✅ Migration file created: ${migrationFilePath}`);\n console.log(`✅ Migration count file updated: ${migrationCountPath}`);\n console.log(`✅ Migration index file created: ${indexFilePath}`);\n}\n\n/**\n * Extracts only the relevant SQL statements for migration.\n * @param schema - The full database schema as SQL.\n * @returns Filtered list of SQL statements.\n */\nconst extractCreateStatements = (schema: string): string[] => {\n const statements = schema.split(\";\").map((s) => s.trim());\n\n return statements.filter(\n (stmt) =>\n stmt.startsWith(\"create table\") ||\n (stmt.startsWith(\"alter table\") && stmt.includes(\"add index\")) ||\n stmt.startsWith(\"primary\"),\n );\n};\n\n/**\n * Dynamically loads `entities` from `index.ts` in the specified directory.\n * @param entitiesPath - Path to the directory containing `index.ts`.\n * @returns Array of entity classes.\n */\nconst loadEntities = async (entitiesPath: string) => {\n try {\n const indexFilePath = path.resolve(path.join(entitiesPath, \"index.ts\"));\n if (!fs.existsSync(indexFilePath)) {\n console.error(`❌ Error: index.ts not found in ${indexFilePath}`);\n process.exit(1);\n }\n\n const { default: entities } = await import(indexFilePath);\n console.log(`✅ Loaded ${entities.length} entities from ${entitiesPath}`);\n return entities;\n } catch (error) {\n console.error(`❌ Error loading index.ts from ${entitiesPath}:`, error);\n process.exit(1);\n }\n};\n\n/**\n * Loads the current migration version from `migrationCount.ts`.\n * @param migrationPath - Path to the migration folder.\n * @returns The latest migration version.\n */\nconst loadMigrationVersion = async (migrationPath: string): Promise<number> => {\n try {\n const migrationCountFilePath = path.resolve(path.join(migrationPath, \"migrationCount.ts\"));\n if (!fs.existsSync(migrationCountFilePath)) {\n return 0;\n }\n\n const { MIGRATION_VERSION } = await import(migrationCountFilePath);\n console.log(`✅ Current migration version: ${MIGRATION_VERSION}`);\n return MIGRATION_VERSION as number;\n } catch (error) {\n console.error(`❌ Error loading migrationCount:`, error);\n process.exit(1);\n }\n};\n\n/**\n * Creates a full database migration.\n * @param options - Database connection settings and output paths.\n */\nexport const createMigration = async (options: any) => {\n try {\n let version = await loadMigrationVersion(options.output);\n\n if (version > 0) {\n console.error(`❌ Error: Migration has already been created.`);\n process.exit(1);\n }\n\n // Start from version 1 if no previous migrations exist\n version = 1;\n\n // Load entities dynamically from index.ts\n const entities = await loadEntities(options.entitiesPath);\n\n // Initialize MikroORM\n const orm = MikroORM.initSync({\n host: options.host,\n port: options.port,\n user: options.user,\n password: options.password,\n dbName: options.dbName,\n entities: entities,\n });\n\n // Generate SQL schema\n const createSchemaSQL = await orm.schema.getCreateSchemaSQL({ wrap: true });\n const statements = extractCreateStatements(createSchemaSQL);\n\n // Generate and save migration files\n const migrationFile = generateMigrationFile(statements, version);\n saveMigrationFiles(migrationFile, version, options.output);\n\n console.log(`✅ Migration successfully created!`);\n process.exit(0);\n } catch (error) {\n console.error(`❌ Error during migration creation:`, error);\n process.exit(1);\n }\n};\n","import \"reflect-metadata\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport { MikroORM } from \"@mikro-orm/mysql\";\n\n/**\n * Cleans SQL statements by removing unnecessary database options.\n * @param sql - The raw SQL statement.\n * @returns The cleaned SQL statement.\n */\nfunction cleanSQLStatement(sql: string): string {\n return sql.replace(/\\s+default\\s+character\\s+set\\s+utf8mb4\\s+engine\\s*=\\s*InnoDB;?/gi, \"\").trim();\n}\n\n/**\n * Generates a migration file using the provided SQL statements.\n * @param createStatements - Array of SQL statements.\n * @param version - Migration version number.\n * @returns TypeScript migration file content.\n */\nfunction generateMigrationFile(createStatements: string[], version: number): string {\n const versionPrefix = `v${version}_MIGRATION`;\n\n // Clean each SQL statement and generate migration lines with .enqueue()\n const migrationLines = createStatements\n .map(\n (stmt, index) =>\n ` .enqueue(\"${versionPrefix}${index}\", \\\"${cleanSQLStatement(stmt)}\\\")`, // eslint-disable-line no-useless-escape\n )\n .join(\"\\n\");\n\n // Migration template\n return `import { MigrationRunner } from \"@forge/sql/out/migration\";\n\nexport default (migrationRunner: MigrationRunner): MigrationRunner => {\n return migrationRunner\n${migrationLines};\n};`;\n}\n\n/**\n * Saves the generated migration file along with `migrationCount.ts` and `index.ts`.\n * @param migrationCode - The migration code to be written to the file.\n * @param version - Migration version number.\n * @param outputDir - Directory where the migration files will be saved.\n */\nfunction saveMigrationFiles(migrationCode: string, version: number, outputDir: string) {\n if (!fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, { recursive: true });\n }\n\n const migrationFilePath = path.join(outputDir, `migrationV${version}.ts`);\n const migrationCountPath = path.join(outputDir, `migrationCount.ts`);\n const indexFilePath = path.join(outputDir, `index.ts`);\n\n // Write the migration file\n fs.writeFileSync(migrationFilePath, migrationCode);\n\n // Write the migration count file\n fs.writeFileSync(migrationCountPath, `export const MIGRATION_VERSION = ${version};`);\n\n // Generate the migration index file\n const indexFileContent = `import { MigrationRunner } from \"@forge/sql/out/migration\";\nimport { MIGRATION_VERSION } from \"./migrationCount\";\n\nexport type MigrationType = (\n migrationRunner: MigrationRunner,\n) => MigrationRunner;\n\nexport default async (\n migrationRunner: MigrationRunner,\n): Promise<MigrationRunner> => {\n for (let i = 1; i <= MIGRATION_VERSION; i++) {\n const migrations = (await import(\\`./migrationV\\${i}\\`)) as {\n default: MigrationType;\n };\n migrations.default(migrationRunner);\n }\n return migrationRunner;\n};`;\n\n fs.writeFileSync(indexFilePath, indexFileContent);\n\n console.log(`✅ Migration file created: ${migrationFilePath}`);\n console.log(`✅ Migration count file updated: ${migrationCountPath}`);\n console.log(`✅ Migration index file created: ${indexFilePath}`);\n}\n\n/**\n * Extracts only the relevant SQL statements for migration.\n * @param schema - The full database schema as SQL.\n * @returns Filtered list of SQL statements.\n */\nconst extractCreateStatements = (schema: string): string[] => {\n const statements = schema.split(\";\").map((s) => s.trim());\n\n return statements.filter(\n (stmt) =>\n stmt.startsWith(\"create table\") ||\n (stmt.startsWith(\"alter table\") && stmt.includes(\"add index\")) ||\n (stmt.startsWith(\"alter table\") && stmt.includes(\"add\") && !stmt.includes(\"foreign\")) ||\n (stmt.startsWith(\"alter table\") && stmt.includes(\"modify\") && !stmt.includes(\"foreign\")),\n );\n};\n\n/**\n * Dynamically loads `entities` from `index.ts` in the specified directory.\n * @param entitiesPath - Path to the directory containing `index.ts`.\n * @returns Array of entity classes.\n */\nconst loadEntities = async (entitiesPath: string) => {\n try {\n const indexFilePath = path.resolve(path.join(entitiesPath, \"index.ts\"));\n if (!fs.existsSync(indexFilePath)) {\n console.error(`❌ Error: index.ts not found in ${entitiesPath}`);\n process.exit(1);\n }\n\n const { default: entities } = await import(indexFilePath);\n console.log(`✅ Loaded ${entities.length} entities from ${entitiesPath}`);\n return entities;\n } catch (error) {\n console.error(`❌ Error loading index.ts from ${entitiesPath}:`, error);\n process.exit(1);\n }\n};\n\n/**\n * Loads the current migration version from `migrationCount.ts`.\n * @param migrationPath - Path to the migration folder.\n * @returns The latest migration version.\n */\nconst loadMigrationVersion = async (migrationPath: string): Promise<number> => {\n try {\n const migrationCountFilePath = path.resolve(path.join(migrationPath, \"migrationCount.ts\"));\n if (!fs.existsSync(migrationCountFilePath)) {\n console.warn(\n `⚠️ Warning: migrationCount.ts not found in ${migrationCountFilePath}, assuming no previous migrations.`,\n );\n return 0;\n }\n\n const { MIGRATION_VERSION } = await import(migrationCountFilePath);\n console.log(`✅ Current migration version: ${MIGRATION_VERSION}`);\n return MIGRATION_VERSION as number;\n } catch (error) {\n console.error(`❌ Error loading migrationCount:`, error);\n process.exit(1);\n }\n};\n\n/**\n * Updates an existing database migration by generating schema modifications.\n * @param options - Database connection settings and output paths.\n */\nexport const updateMigration = async (options: any) => {\n try {\n let version = await loadMigrationVersion(options.output);\n\n if (version < 1) {\n console.log(\n `⚠️ Initial migration not found. Run \"npx forge-sql-orm migrations:create\" first.`,\n );\n process.exit(0);\n }\n version += 1;\n\n // Load entities dynamically from index.ts\n const entities = await loadEntities(options.entitiesPath);\n\n // Initialize MikroORM\n const orm = MikroORM.initSync({\n host: options.host,\n port: options.port,\n user: options.user,\n password: options.password,\n dbName: options.dbName,\n entities,\n debug: true,\n });\n\n // Generate SQL schema updates\n const createSchemaSQL = await orm.schema.getUpdateSchemaMigrationSQL({ wrap: true });\n const statements = extractCreateStatements(createSchemaSQL?.down || \"\");\n\n if (statements.length) {\n const migrationFile = generateMigrationFile(statements, version);\n saveMigrationFiles(migrationFile, version, options.output);\n\n console.log(`✅ Migration successfully updated!`);\n process.exit(0);\n } else {\n console.log(`⚠️ No new migration changes detected.`);\n process.exit(0);\n }\n } catch (error) {\n console.error(`❌ Error during migration update:`, error);\n process.exit(1);\n }\n};\n","import fs from \"fs\";\nimport path from \"path\";\n\n/**\n * Automates patches for MikroORM and Knex to fix Webpack issues.\n * - Removes problematic `require()` calls.\n * - Deletes unnecessary files and folders.\n * - Fixes dynamic imports (`import(id)`) in MikroORM.\n */\n\ninterface Patch {\n file?: string; // File to modify (optional)\n search?: RegExp; // Regex pattern to find problematic code\n replace?: string; // Replacement string for problematic code\n deleteLines?: RegExp[]; // List of regex patterns to remove specific lines\n description: string; // Description of the patch\n deleteFile?: string; // Path of the file to delete (optional)\n deleteFolder?: string; // Path of the folder to delete (optional)\n}\n\nconst PATCHES: Patch[] = [\n // 🗑️ Remove unused dialects (mssql, postgres, sqlite) in MikroORM\n {\n file: \"node_modules/@mikro-orm/knex/MonkeyPatchable.d.ts\",\n deleteLines: [\n /^.*mssql.*$/gim,\n /^.*MsSql.*$/gim,\n /^\\s*Postgres.*$/gm,\n /^.*Sqlite3.*$/gm,\n /^.*BetterSqlite3.*$/gim,\n ],\n description: \"Removing unused dialects from MonkeyPatchable.d.ts\",\n },\n {\n file: \"node_modules/@mikro-orm/mysql/node_modules/@mikro-orm/knex/MonkeyPatchable.d.ts\",\n deleteLines: [\n /^.*mssql.*$/gim,\n /^.*MsSql.*$/gim,\n /^\\s*Postgres.*$/gm,\n /^.*Sqlite3.*$/gm,\n /^.*BetterSqlite3.*$/gim,\n ],\n description: \"Removing unused dialects from MonkeyPatchable.d.ts\",\n },\n {\n file: \"node_modules/@mikro-orm/knex/MonkeyPatchable.js\",\n deleteLines: [\n /^.*mssql.*$/gim,\n /^.*MsSql.*$/gim,\n /^.*postgres.*$/gim,\n /^.*sqlite.*$/gim,\n /^.*Sqlite.*$/gim,\n ],\n description: \"Removing unused dialects from MonkeyPatchable.js\",\n },\n {\n file: \"node_modules/@mikro-orm/mysql/node_modules/@mikro-orm/knex/MonkeyPatchable.js\",\n deleteLines: [\n /^.*mssql.*$/gim,\n /^.*MsSql.*$/gim,\n /^.*postgres.*$/gim,\n /^.*sqlite.*$/gim,\n /^.*Sqlite.*$/gim,\n ],\n description: \"Removing unused dialects from MonkeyPatchable.js\",\n },\n {\n file: \"node_modules/@mikro-orm/knex/dialects/index.js\",\n deleteLines: [/^.*mssql.*$/gim, /^.*MsSql.*$/gim, /^.*postgresql.*$/gim, /^.*sqlite.*$/gim],\n description: \"Removing unused dialects from @mikro-orm/knex/dialects/index.js\",\n },\n {\n file: \"node_modules/@mikro-orm/mysql/node_modules/@mikro-orm/knex/dialects/index.js\",\n deleteLines: [/^.*mssql.*$/gim, /^.*MsSql.*$/gim, /^.*postgresql.*$/gim, /^.*sqlite.*$/gim],\n description: \"Removing unused dialects from @mikro-orm/knex/dialects/index.js\",\n },\n {\n deleteFolder: \"node_modules/@mikro-orm/knex/dialects/mssql\",\n description: \"Removing mssql dialect from MikroORM\",\n },\n {\n deleteFolder: \"node_modules/@mikro-orm/mysql/node_modules/@mikro-orm/knex/dialects/mssql\",\n description: \"Removing mssql dialect from MikroORM\",\n },\n {\n deleteFolder: \"node_modules/@mikro-orm/knex/dialects/postgresql\",\n description: \"Removing postgresql dialect from MikroORM\",\n },\n {\n deleteFolder: \"node_modules/@mikro-orm/mysql/node_modules/@mikro-orm/knex/dialects/postgresql\",\n description: \"Removing postgresql dialect from MikroORM\",\n },\n {\n deleteFolder: \"node_modules/@mikro-orm/knex/dialects/sqlite\",\n description: \"Removing sqlite dialect from MikroORM\",\n },\n {\n deleteFolder: \"node_modules/@mikro-orm/mysql/node_modules/@mikro-orm/knex/dialects/sqlite\",\n description: \"Removing sqlite dialect from MikroORM\",\n },\n\n // 🔄 Fix Webpack `Critical dependency: the request of a dependency is an expression`\n {\n file: \"node_modules/@mikro-orm/core/utils/Configuration.js\",\n search: /dynamicImportProvider:\\s*\\/\\* istanbul ignore next \\*\\/\\s*\\(id\\) => import\\(id\\),/g,\n replace: \"dynamicImportProvider: /* istanbul ignore next */ () => Promise.resolve({}),\",\n description: \"Fixing dynamic imports in MikroORM Configuration\",\n },\n {\n file: \"node_modules/@mikro-orm/core/utils/Utils.js\",\n search: /static dynamicImportProvider = \\(id\\) => import\\(id\\);/g,\n replace: \"static dynamicImportProvider = () => Promise.resolve({});\",\n description: \"Fixing dynamic imports in MikroORM Utils.js\",\n },\n\n // 🛑 Remove deprecated `require.extensions` usage\n {\n file: \"node_modules/@mikro-orm/core/utils/Utils.js\",\n search: /\\s\\|\\|\\s*\\(require\\.extensions\\s*&&\\s*!!require\\.extensions\\['\\.ts'\\]\\);\\s*/g,\n replace: \";\",\n description: \"Removing deprecated `require.extensions` check in MikroORM\",\n },\n\n // 🛠️ Patch Knex to remove `Migrator` and `Seeder`\n {\n file: \"node_modules/knex/lib/knex-builder/make-knex.js\",\n deleteLines: [\n /^const \\{ Migrator \\} = require\\('\\.\\.\\/migrations\\/migrate\\/Migrator'\\);$/gm,\n /^const Seeder = require\\('\\.\\.\\/migrations\\/seed\\/Seeder'\\);$/gm,\n ],\n description: \"Removing `Migrator` and `Seeder` requires from make-knex.js\",\n },\n {\n file: \"node_modules/knex/lib/knex-builder/make-knex.js\",\n search: /\\sreturn new Migrator\\(this\\);/g,\n replace: \"return null;\",\n description: \"Replacing `return new Migrator(this);` with `return null;`\",\n },\n {\n file: \"node_modules/knex/lib/knex-builder/make-knex.js\",\n search: /\\sreturn new Seeder\\(this\\);/g,\n replace: \"return null;\",\n description: \"Replacing `return new Seeder(this);` with `return null;`\",\n },\n // 🔄 Patch for MikroORM Entity Generator to use 'forge-sql-orm'\n // {\n // file: \"node_modules/@mikro-orm/entity-generator/SourceFile.js\",\n // search: /^.* from '@mikro-orm.*$/gim,\n // replace: \" }).join(', '))} } from 'forge-sql-orm';`);\",\n // description: \"Replacing entity generator imports with 'forge-sql-orm'\"\n // },\n {\n file: \"node_modules/knex/lib/dialects/index.js\",\n deleteLines: [\n /^.*mssql.*$/gim,\n /^.*MsSql.*$/gim,\n /^.*postgresql.*$/gim,\n /^.*sqlite.*$/gim,\n /^.*oracle.*$/gim,\n /^.*oracledb.*$/gim,\n /^.*pgnative.*$/gim,\n /^.*postgres.*$/gim,\n /^.*redshift.*$/gim,\n /^.*sqlite3.*$/gim,\n /^.*cockroachdb.*$/gim,\n ],\n description: \"Removing unused dialects from @mikro-orm/knex/dialects/index.js\",\n },\n {\n file: \"node_modules/@mikro-orm/core/utils/Utils.js\",\n search: /\\s\\|\\|\\s*\\(require\\.extensions\\s*&&\\s*!!require\\.extensions\\['\\.ts'\\]\\);\\s*/g,\n replace: \";\", // Replaces with semicolon to keep syntax valid\n description: \"Removing deprecated `require.extensions` check from MikroORM\",\n },\n {\n file: \"node_modules/@mikro-orm/core/utils/Utils.js\",\n search: /^.*extensions.*$/gim,\n replace: \"{\", // Replaces with semicolon to keep syntax valid\n description: \"Removing deprecated `require.extensions` check from MikroORM\",\n },\n {\n file: \"node_modules/@mikro-orm/core/utils/Utils.js\",\n search: /^.*package.json.*$/gim,\n replace: \"return 0;\", // Replaces with semicolon to keep syntax valid\n description: \"Removing deprecated `require.extensions` check from MikroORM\",\n },\n {\n file: \"node_modules/@mikro-orm/knex/dialects/mysql/index.js\",\n deleteLines: [/^.*MariaDbKnexDialect.*$/gim],\n description: \"Removing MariaDbKnexDialect\",\n },\n {\n file: \"node_modules/@mikro-orm/mysql/node_modules/@mikro-orm/knex/dialects/mysql/index.js\",\n deleteLines: [/^.*MariaDbKnexDialect.*$/gim],\n description: \"Removing MariaDbKnexDialect\",\n },\n];\n\n/**\n * Runs the MikroORM & Knex patching logic.\n */\nexport function runPostInstallPatch() {\n console.log(\"🔧 Applying MikroORM & Knex patches...\");\n PATCHES.forEach(\n ({ file, search, replace, deleteLines, deleteFile, deleteFolder, description }) => {\n if (file) {\n const filePath = path.resolve(file);\n if (fs.existsSync(filePath)) {\n let content = fs.readFileSync(filePath, \"utf8\");\n let originalContent = content;\n\n // 🔄 Replace text\n if (search && replace) {\n if (typeof search === \"string\" ? content.includes(search) : search.test(content)) {\n content = content.replace(search, replace);\n console.log(`[PATCHED] ${description}`);\n }\n }\n\n // 🗑️ Remove matching lines\n if (deleteLines) {\n deleteLines.forEach((pattern) => {\n content = content\n .split(\"\\n\")\n .filter((line) => !pattern.test(line))\n .join(\"\\n\");\n });\n if (content !== originalContent) {\n console.log(`[CLEANED] Removed matching lines in ${file}`);\n }\n }\n\n // 💾 Save changes only if file was modified\n if (content !== originalContent) {\n fs.writeFileSync(filePath, content, \"utf8\");\n }\n\n // 🚮 Remove empty files\n if (content.trim() === \"\") {\n fs.unlinkSync(filePath);\n console.log(`[REMOVED] ${filePath} (file is now empty)`);\n }\n } else {\n console.warn(`[WARNING] File not found: ${file}`);\n }\n }\n\n // 🚮 Delete specific files\n if (deleteFile) {\n const deleteFilePath = path.resolve(__dirname, \"../\", deleteFile);\n if (fs.existsSync(deleteFilePath)) {\n fs.unlinkSync(deleteFilePath);\n console.log(`[DELETED] ${description}`);\n }\n }\n\n // 🚮 Delete entire folders\n if (deleteFolder) {\n const deleteFolderPath = path.resolve(__dirname, \"../\", deleteFolder);\n if (fs.existsSync(deleteFolderPath)) {\n fs.rmSync(deleteFolderPath, { recursive: true, force: true });\n console.log(`[DELETED] ${description}`);\n }\n }\n },\n );\n\n console.log(\"🎉 MikroORM & Knex patching completed!\");\n}\n","#!/usr/bin/env node\n\nimport { Command } from \"commander\";\nimport dotenv from \"dotenv\";\nimport inquirer from \"inquirer\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport { generateModels } from \"./actions/generate-models\";\nimport { createMigration } from \"./actions/migrations-create\";\nimport { updateMigration } from \"./actions/migrations-update\";\nimport { runPostInstallPatch } from \"./actions/PatchPostinstall\";\n\nconst ENV_PATH = path.resolve(process.cwd(), \".env\");\n// 🔄 Load environment variables from `.env` file\ndotenv.config({ path: ENV_PATH });\n\nconst saveEnvFile = (config: any) => {\n let envContent = \"\";\n const envFilePath = ENV_PATH;\n\n if (fs.existsSync(envFilePath)) {\n envContent = fs.readFileSync(envFilePath, \"utf8\");\n }\n\n const envVars = envContent\n .split(\"\\n\")\n .filter((line) => line.trim() !== \"\" && !line.startsWith(\"#\"))\n .reduce((acc: any, line) => {\n const [key, ...value] = line.split(\"=\");\n acc[key] = value.join(\"=\");\n return acc;\n }, {});\n\n Object.entries(config).forEach(([key, value]) => {\n envVars[`FORGE_SQL_ORM_${key.toUpperCase()}`] = value;\n });\n\n const updatedEnvContent = Object.entries(envVars)\n .map(([key, value]) => `${key}=${value}`)\n .join(\"\\n\");\n\n fs.writeFileSync(envFilePath, updatedEnvContent, { encoding: \"utf8\" });\n\n console.log(\"✅ Configuration saved to .env without overwriting other variables.\");\n};\n\n/**\n * Prompts the user for missing parameters using Inquirer.js.\n * @param config - The current configuration object.\n * @param defaultOutput - Default output path.\n * @param customAskMissingParams - Optional function for additional prompts.\n * @returns Updated configuration with user input.\n */\nconst askMissingParams = async (\n config: any,\n defaultOutput: string,\n customAskMissingParams?: (cfg: any, questions: unknown[]) => void,\n) => {\n const questions: unknown[] = [];\n\n if (!config.host)\n questions.push({\n type: \"input\",\n name: \"host\",\n message: \"Enter database host:\",\n default: \"localhost\",\n });\n\n if (!config.port)\n questions.push({\n type: \"input\",\n name: \"port\",\n message: \"Enter database port:\",\n default: \"3306\",\n validate: (input: string) => !isNaN(parseInt(input, 10)),\n });\n\n if (!config.user)\n questions.push({\n type: \"input\",\n name: \"user\",\n message: \"Enter database user:\",\n default: \"root\",\n });\n\n if (!config.password)\n questions.push({\n type: \"password\",\n name: \"password\",\n message: \"Enter database password:\",\n mask: \"*\",\n });\n\n if (!config.dbName)\n questions.push({\n type: \"input\",\n name: \"dbName\",\n message: \"Enter database name:\",\n });\n\n if (!config.output)\n questions.push({\n type: \"input\",\n name: \"output\",\n message: \"Enter output path:\",\n default: defaultOutput,\n });\n\n // Allow additional questions from the caller\n if (customAskMissingParams) {\n customAskMissingParams(config, questions);\n }\n\n // If there are missing parameters, prompt the user\n if (questions.length > 0) {\n // @ts-ignore - Ignore TypeScript warning for dynamic question type\n const answers = await inquirer.prompt(questions);\n return { ...config, ...answers, port: parseInt(config.port ?? answers.port, 10) };\n }\n\n return config;\n};\n\n/**\n * Retrieves configuration parameters from command-line arguments and environment variables.\n * If any required parameters are missing, prompts the user for input.\n * @param cmd - The command object containing CLI options.\n * @param defaultOutput - Default output directory.\n * @param customConfig - Optional function for additional configuration parameters.\n * @param customAskMissingParams - Optional function for additional prompts.\n * @returns A fully resolved configuration object.\n */\nconst getConfig = async (\n cmd: any,\n defaultOutput: string,\n customConfig?: () => any,\n customAskMissingParams?: (cfg: any, questions: unknown[]) => void,\n) => {\n let config = {\n host: cmd.host || process.env.FORGE_SQL_ORM_HOST,\n port: cmd.port\n ? parseInt(cmd.port, 10)\n : process.env.FORGE_SQL_ORM_PORT\n ? parseInt(process.env.FORGE_SQL_ORM_PORT, 10)\n : undefined,\n user: cmd.user || process.env.FORGE_SQL_ORM_USER,\n password: cmd.password || process.env.FORGE_SQL_ORM_PASSWORD,\n dbName: cmd.dbName || process.env.FORGE_SQL_ORM_DBNAME,\n output: cmd.output || process.env.FORGE_SQL_ORM_OUTPUT,\n };\n\n // Merge additional configurations if provided\n if (customConfig) {\n config = { ...config, ...customConfig() };\n }\n\n const conf = await askMissingParams(config, defaultOutput, customAskMissingParams);\n if (cmd.saveEnv) {\n saveEnvFile(conf);\n }\n return conf;\n};\n\n// 📌 Initialize CLI\nconst program = new Command();\nprogram.version(\"1.0.0\");\n\n// ✅ Command: Generate database models (Entities)\nprogram\n .command(\"generate:model\")\n .description(\"Generate MikroORM models from the database.\")\n .option(\"--host <string>\", \"Database host\")\n .option(\"--port <number>\", \"Database port\")\n .option(\"--user <string>\", \"Database user\")\n .option(\"--password <string>\", \"Database password\")\n .option(\"--dbName <string>\", \"Database name\")\n .option(\"--output <string>\", \"Output path for entities\")\n .option(\"--versionField <string>\", \"Field name for versioning\")\n .option(\"--saveEnv\", \"Save configuration to .env file\")\n .action(async (cmd) => {\n const config = await getConfig(\n cmd,\n \"./database/entities\",\n () => ({\n versionField: cmd.versionField || process.env.FORGE_SQL_ORM_VERSIONFIELD,\n }),\n (cfg, questions: unknown[]) => {\n if (!cfg.versionField) {\n questions.push({\n type: \"input\",\n name: \"versionField\",\n message: \"Enter the field name for versioning (leave empty to skip):\",\n default: \"\",\n });\n }\n },\n );\n await generateModels(config);\n });\n\n// ✅ Command: Create initial database migration\nprogram\n .command(\"migrations:create\")\n .description(\"Generate an initial migration for the entire database.\")\n .option(\"--host <string>\", \"Database host\")\n .option(\"--port <number>\", \"Database port\")\n .option(\"--user <string>\", \"Database user\")\n .option(\"--password <string>\", \"Database password\")\n .option(\"--dbName <string>\", \"Database name\")\n .option(\"--output <string>\", \"Output path for migrations\")\n .option(\"--entitiesPath <string>\", \"Path to the folder containing entities\")\n .option(\"--saveEnv\", \"Save configuration to .env file\")\n .action(async (cmd) => {\n const config = await getConfig(\n cmd,\n \"./database/migration\",\n () => ({\n entitiesPath: cmd.entitiesPath || process.env.FORGE_SQL_ORM_ENTITIESPATH,\n }),\n (cfg, questions: unknown[]) => {\n if (!cfg.entitiesPath)\n questions.push({\n type: \"input\",\n name: \"entitiesPath\",\n message: \"Enter the path to entities:\",\n default: \"./database/entities\",\n });\n },\n );\n await createMigration(config);\n });\n\n// ✅ Command: Update migration for schema changes\nprogram\n .command(\"migrations:update\")\n .description(\"Generate a migration to update the database schema.\")\n .option(\"--host <string>\", \"Database host\")\n .option(\"--port <number>\", \"Database port\")\n .option(\"--user <string>\", \"Database user\")\n .option(\"--password <string>\", \"Database password\")\n .option(\"--dbName <string>\", \"Database name\")\n .option(\"--output <string>\", \"Output path for migrations\")\n .option(\"--entitiesPath <string>\", \"Path to the folder containing entities\")\n .option(\"--saveEnv\", \"Save configuration to .env file\")\n .action(async (cmd) => {\n const config = await getConfig(\n cmd,\n \"./database/migration\",\n () => ({\n entitiesPath: cmd.entitiesPath || process.env.FORGE_SQL_ORM_ENTITIESPATH,\n }),\n (cfg, questions: unknown[]) => {\n if (!cfg.entitiesPath)\n questions.push({\n type: \"input\",\n name: \"entitiesPath\",\n message: \"Enter the path to entities:\",\n default: \"./database/entities\",\n });\n },\n );\n await updateMigration(config);\n });\n\n// Patch MikroORM and Knex\nprogram\n .command(\"patch:mikroorm\")\n .description(\"Patch MikroORM and Knex dependencies to work properly with Forge\")\n .action(async () => {\n console.log(\"Running MikroORM patch...\");\n await runPostInstallPatch();\n await runPostInstallPatch();\n await runPostInstallPatch();\n console.log(\"✅ MikroORM patch applied successfully!\");\n });\n\n// 🔥 Execute CLI\nprogram.parse(process.argv);\n"],"names":["defineConfig","MongoNamingStrategy","EntityGenerator","MikroORM","cleanSQLStatement","generateMigrationFile","saveMigrationFiles","extractCreateStatements","loadEntities","loadMigrationVersion","Command"],"mappings":"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"}
package/dist-cli/cli.mjs CHANGED
@@ -336,6 +336,17 @@ const PATCHES = [
336
336
  ],
337
337
  description: "Removing unused dialects from MonkeyPatchable.d.ts"
338
338
  },
339
+ {
340
+ file: "node_modules/@mikro-orm/mysql/node_modules/@mikro-orm/knex/MonkeyPatchable.d.ts",
341
+ deleteLines: [
342
+ /^.*mssql.*$/gim,
343
+ /^.*MsSql.*$/gim,
344
+ /^\s*Postgres.*$/gm,
345
+ /^.*Sqlite3.*$/gm,
346
+ /^.*BetterSqlite3.*$/gim
347
+ ],
348
+ description: "Removing unused dialects from MonkeyPatchable.d.ts"
349
+ },
339
350
  {
340
351
  file: "node_modules/@mikro-orm/knex/MonkeyPatchable.js",
341
352
  deleteLines: [
@@ -347,23 +358,51 @@ const PATCHES = [
347
358
  ],
348
359
  description: "Removing unused dialects from MonkeyPatchable.js"
349
360
  },
361
+ {
362
+ file: "node_modules/@mikro-orm/mysql/node_modules/@mikro-orm/knex/MonkeyPatchable.js",
363
+ deleteLines: [
364
+ /^.*mssql.*$/gim,
365
+ /^.*MsSql.*$/gim,
366
+ /^.*postgres.*$/gim,
367
+ /^.*sqlite.*$/gim,
368
+ /^.*Sqlite.*$/gim
369
+ ],
370
+ description: "Removing unused dialects from MonkeyPatchable.js"
371
+ },
350
372
  {
351
373
  file: "node_modules/@mikro-orm/knex/dialects/index.js",
352
374
  deleteLines: [/^.*mssql.*$/gim, /^.*MsSql.*$/gim, /^.*postgresql.*$/gim, /^.*sqlite.*$/gim],
353
375
  description: "Removing unused dialects from @mikro-orm/knex/dialects/index.js"
354
376
  },
377
+ {
378
+ file: "node_modules/@mikro-orm/mysql/node_modules/@mikro-orm/knex/dialects/index.js",
379
+ deleteLines: [/^.*mssql.*$/gim, /^.*MsSql.*$/gim, /^.*postgresql.*$/gim, /^.*sqlite.*$/gim],
380
+ description: "Removing unused dialects from @mikro-orm/knex/dialects/index.js"
381
+ },
355
382
  {
356
383
  deleteFolder: "node_modules/@mikro-orm/knex/dialects/mssql",
357
384
  description: "Removing mssql dialect from MikroORM"
358
385
  },
386
+ {
387
+ deleteFolder: "node_modules/@mikro-orm/mysql/node_modules/@mikro-orm/knex/dialects/mssql",
388
+ description: "Removing mssql dialect from MikroORM"
389
+ },
359
390
  {
360
391
  deleteFolder: "node_modules/@mikro-orm/knex/dialects/postgresql",
361
392
  description: "Removing postgresql dialect from MikroORM"
362
393
  },
394
+ {
395
+ deleteFolder: "node_modules/@mikro-orm/mysql/node_modules/@mikro-orm/knex/dialects/postgresql",
396
+ description: "Removing postgresql dialect from MikroORM"
397
+ },
363
398
  {
364
399
  deleteFolder: "node_modules/@mikro-orm/knex/dialects/sqlite",
365
400
  description: "Removing sqlite dialect from MikroORM"
366
401
  },
402
+ {
403
+ deleteFolder: "node_modules/@mikro-orm/mysql/node_modules/@mikro-orm/knex/dialects/sqlite",
404
+ description: "Removing sqlite dialect from MikroORM"
405
+ },
367
406
  // 🔄 Fix Webpack `Critical dependency: the request of a dependency is an expression`
368
407
  {
369
408
  file: "node_modules/@mikro-orm/core/utils/Configuration.js",
@@ -454,6 +493,11 @@ const PATCHES = [
454
493
  file: "node_modules/@mikro-orm/knex/dialects/mysql/index.js",
455
494
  deleteLines: [/^.*MariaDbKnexDialect.*$/gim],
456
495
  description: "Removing MariaDbKnexDialect"
496
+ },
497
+ {
498
+ file: "node_modules/@mikro-orm/mysql/node_modules/@mikro-orm/knex/dialects/mysql/index.js",
499
+ deleteLines: [/^.*MariaDbKnexDialect.*$/gim],
500
+ description: "Removing MariaDbKnexDialect"
457
501
  }
458
502
  ];
459
503
  function runPostInstallPatch() {
@@ -1 +1 @@
1
- {"version":3,"file":"cli.mjs","sources":["../scripts/actions/generate-models.ts","../scripts/actions/migrations-create.ts","../scripts/actions/migrations-update.ts","../scripts/actions/PatchPostinstall.ts","../scripts/cli.ts"],"sourcesContent":["import \"reflect-metadata\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport { defineConfig, MikroORM, MongoNamingStrategy } from \"@mikro-orm/mysql\";\nimport { EntityGenerator } from \"@mikro-orm/entity-generator\";\nimport { EntityMetadata } from \"@mikro-orm/core/typings\";\n\nconst regenerateIndexFile = (outputPath: string) => {\n const entitiesDir = path.resolve(outputPath);\n const indexPath = path.join(entitiesDir, \"index.ts\");\n\n const entityFiles = fs\n .readdirSync(entitiesDir)\n .filter((file) => file.endsWith(\".ts\") && file !== \"index.ts\");\n\n const imports = entityFiles.map((file) => {\n const entityName = path.basename(file, \".ts\");\n return `import { ${entityName} } from \"./${entityName}\";`;\n });\n\n const indexContent = `${imports.join(\"\\n\")}\\n\\nexport default [${entityFiles.map((file) => path.basename(file, \".ts\")).join(\", \")}];\\n`;\n\n fs.writeFileSync(indexPath, indexContent, \"utf8\");\n console.log(`✅ Updated index.ts with ${entityFiles.length} entities.`);\n};\n\nexport const generateModels = async (options: any) => {\n try {\n const ormConfig = defineConfig({\n host: options.host,\n port: options.port,\n user: options.user,\n password: options.password,\n dbName: options.dbName,\n namingStrategy: MongoNamingStrategy,\n discovery: { warnWhenNoEntities: false },\n extensions: [EntityGenerator],\n debug: true,\n }) as Parameters<typeof MikroORM.initSync>[0];\n\n const orm = MikroORM.initSync(ormConfig);\n console.log(`✅ Connected to ${options.dbName} at ${options.host}:${options.port}`);\n\n const onCreatingVersionField = async (metadatas: EntityMetadata[]) => {\n metadatas.forEach((m) => {\n if (options.versionField) {\n const versionFieldName = Object.keys(m.properties).find((p) => {\n return (\n p === options.versionField ||\n m.properties[p]?.name === options.versionField ||\n m.properties[p]?.fieldNames?.find((f) => f === options.versionField)\n );\n });\n if (versionFieldName) {\n const property = m.properties[versionFieldName];\n if (\n property.type !== \"datetime\" &&\n property.type !== \"integer\" &&\n property.type !== \"decimal\"\n ) {\n console.warn(\n `Version field \"${property.name}\" can be only datetime or integer Table ${m.tableName} but now is \"${property.type}\"`,\n );\n return;\n }\n if (property.primary) {\n console.warn(\n `Version field \"${property.name}\" can not be primary key Table ${m.tableName}`,\n );\n return;\n }\n if (property.nullable) {\n console.warn(\n `Version field \"${property.name}\" should not be nullable Table ${m.tableName}`,\n );\n return;\n }\n property.version = true;\n }\n }\n });\n };\n await orm.entityGenerator.generate({\n entitySchema: true,\n bidirectionalRelations: true,\n identifiedReferences: false,\n forceUndefined: true,\n undefinedDefaults: true,\n useCoreBaseEntity: false,\n onlyPurePivotTables: false,\n outputPurePivotTables: false,\n scalarPropertiesForRelations: \"always\",\n save: true,\n path: options.output,\n onInitialMetadata: onCreatingVersionField,\n });\n\n regenerateIndexFile(options.output);\n\n console.log(`✅ Entities generated at: ${options.output}`);\n process.exit(0);\n } catch (error) {\n console.error(`❌ Error generating entities:`, error);\n process.exit(1);\n }\n};\n","import \"reflect-metadata\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport { MikroORM } from \"@mikro-orm/mysql\";\nimport { execSync } from \"child_process\";\nimport { rmSync } from \"fs\";\n\n/**\n * Cleans SQL statements by removing unnecessary database options.\n * @param sql - The raw SQL statement.\n * @returns The cleaned SQL statement.\n */\nfunction cleanSQLStatement(sql: string): string {\n return sql.replace(/\\s+default\\s+character\\s+set\\s+utf8mb4\\s+engine\\s*=\\s*InnoDB;?/gi, \"\").trim();\n}\n\n/**\n * Generates a migration file using the provided SQL statements.\n * @param createStatements - Array of SQL statements.\n * @param version - Migration version number.\n * @returns TypeScript migration file content.\n */\nfunction generateMigrationFile(createStatements: string[], version: number): string {\n const versionPrefix = `v${version}_MIGRATION`;\n\n // Clean each SQL statement and generate migration lines with .enqueue()\n const migrationLines = createStatements\n .map(\n (stmt, index) =>\n ` .enqueue(\"${versionPrefix}${index}\", \\\"${cleanSQLStatement(stmt)}\\\")`, // eslint-disable-line no-useless-escape\n )\n .join(\"\\n\");\n\n // Migration template\n return `import { MigrationRunner } from \"@forge/sql/out/migration\";\n\nexport default (migrationRunner: MigrationRunner): MigrationRunner => {\n return migrationRunner\n${migrationLines};\n};`;\n}\n\n/**\n * Saves the generated migration file along with `migrationCount.ts` and `index.ts`.\n * @param migrationCode - The migration code to be written to the file.\n * @param version - Migration version number.\n * @param outputDir - Directory where the migration files will be saved.\n */\nfunction saveMigrationFiles(migrationCode: string, version: number, outputDir: string) {\n if (!fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, { recursive: true });\n }\n\n const migrationFilePath = path.join(outputDir, `migrationV${version}.ts`);\n const migrationCountPath = path.join(outputDir, `migrationCount.ts`);\n const indexFilePath = path.join(outputDir, `index.ts`);\n\n // Write the migration file\n fs.writeFileSync(migrationFilePath, migrationCode);\n\n // Write the migration count file\n fs.writeFileSync(migrationCountPath, `export const MIGRATION_VERSION = ${version};`);\n\n // Generate the migration index file\n const indexFileContent = `import { MigrationRunner } from \"@forge/sql/out/migration\";\nimport { MIGRATION_VERSION } from \"./migrationCount\";\n\nexport type MigrationType = (\n migrationRunner: MigrationRunner,\n) => MigrationRunner;\n\nexport default async (\n migrationRunner: MigrationRunner,\n): Promise<MigrationRunner> => {\n for (let i = 1; i <= MIGRATION_VERSION; i++) {\n const migrations = (await import(\\`./migrationV\\${i}\\`)) as {\n default: MigrationType;\n };\n migrations.default(migrationRunner);\n }\n return migrationRunner;\n};`;\n\n fs.writeFileSync(indexFilePath, indexFileContent);\n\n console.log(`✅ Migration file created: ${migrationFilePath}`);\n console.log(`✅ Migration count file updated: ${migrationCountPath}`);\n console.log(`✅ Migration index file created: ${indexFilePath}`);\n}\n\n/**\n * Extracts only the relevant SQL statements for migration.\n * @param schema - The full database schema as SQL.\n * @returns Filtered list of SQL statements.\n */\nconst extractCreateStatements = (schema: string): string[] => {\n const statements = schema.split(\";\").map((s) => s.trim());\n\n return statements.filter(\n (stmt) =>\n stmt.startsWith(\"create table\") ||\n (stmt.startsWith(\"alter table\") && stmt.includes(\"add index\")) ||\n stmt.startsWith(\"primary\"),\n );\n};\n\n/**\n * Dynamically loads `entities` from `index.ts` in the specified directory.\n * @param entitiesPath - Path to the directory containing `index.ts`.\n * @returns Array of entity classes.\n */\nconst loadEntities = async (entitiesPath: string) => {\n try {\n const indexFilePath = path.resolve(path.join(entitiesPath, \"index.ts\"));\n if (!fs.existsSync(indexFilePath)) {\n console.error(`❌ Error: index.ts not found in ${indexFilePath}`);\n process.exit(1);\n }\n\n const { default: entities } = await import(indexFilePath);\n console.log(`✅ Loaded ${entities.length} entities from ${entitiesPath}`);\n return entities;\n } catch (error) {\n console.error(`❌ Error loading index.ts from ${entitiesPath}:`, error);\n process.exit(1);\n }\n};\n\n/**\n * Loads the current migration version from `migrationCount.ts`.\n * @param migrationPath - Path to the migration folder.\n * @returns The latest migration version.\n */\nconst loadMigrationVersion = async (migrationPath: string): Promise<number> => {\n try {\n const migrationCountFilePath = path.resolve(path.join(migrationPath, \"migrationCount.ts\"));\n if (!fs.existsSync(migrationCountFilePath)) {\n return 0;\n }\n\n const { MIGRATION_VERSION } = await import(migrationCountFilePath);\n console.log(`✅ Current migration version: ${MIGRATION_VERSION}`);\n return MIGRATION_VERSION as number;\n } catch (error) {\n console.error(`❌ Error loading migrationCount:`, error);\n process.exit(1);\n }\n};\n\n/**\n * Creates a full database migration.\n * @param options - Database connection settings and output paths.\n */\nexport const createMigration = async (options: any) => {\n try {\n let version = await loadMigrationVersion(options.output);\n\n if (version > 0) {\n console.error(`❌ Error: Migration has already been created.`);\n process.exit(1);\n }\n\n // Start from version 1 if no previous migrations exist\n version = 1;\n\n // Load entities dynamically from index.ts\n const entities = await loadEntities(options.entitiesPath);\n\n // Initialize MikroORM\n const orm = MikroORM.initSync({\n host: options.host,\n port: options.port,\n user: options.user,\n password: options.password,\n dbName: options.dbName,\n entities: entities,\n });\n\n // Generate SQL schema\n const createSchemaSQL = await orm.schema.getCreateSchemaSQL({ wrap: true });\n const statements = extractCreateStatements(createSchemaSQL);\n\n // Generate and save migration files\n const migrationFile = generateMigrationFile(statements, version);\n saveMigrationFiles(migrationFile, version, options.output);\n\n console.log(`✅ Migration successfully created!`);\n process.exit(0);\n } catch (error) {\n console.error(`❌ Error during migration creation:`, error);\n process.exit(1);\n }\n};\n","import \"reflect-metadata\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport { MikroORM } from \"@mikro-orm/mysql\";\n\n/**\n * Cleans SQL statements by removing unnecessary database options.\n * @param sql - The raw SQL statement.\n * @returns The cleaned SQL statement.\n */\nfunction cleanSQLStatement(sql: string): string {\n return sql.replace(/\\s+default\\s+character\\s+set\\s+utf8mb4\\s+engine\\s*=\\s*InnoDB;?/gi, \"\").trim();\n}\n\n/**\n * Generates a migration file using the provided SQL statements.\n * @param createStatements - Array of SQL statements.\n * @param version - Migration version number.\n * @returns TypeScript migration file content.\n */\nfunction generateMigrationFile(createStatements: string[], version: number): string {\n const versionPrefix = `v${version}_MIGRATION`;\n\n // Clean each SQL statement and generate migration lines with .enqueue()\n const migrationLines = createStatements\n .map(\n (stmt, index) =>\n ` .enqueue(\"${versionPrefix}${index}\", \\\"${cleanSQLStatement(stmt)}\\\")`, // eslint-disable-line no-useless-escape\n )\n .join(\"\\n\");\n\n // Migration template\n return `import { MigrationRunner } from \"@forge/sql/out/migration\";\n\nexport default (migrationRunner: MigrationRunner): MigrationRunner => {\n return migrationRunner\n${migrationLines};\n};`;\n}\n\n/**\n * Saves the generated migration file along with `migrationCount.ts` and `index.ts`.\n * @param migrationCode - The migration code to be written to the file.\n * @param version - Migration version number.\n * @param outputDir - Directory where the migration files will be saved.\n */\nfunction saveMigrationFiles(migrationCode: string, version: number, outputDir: string) {\n if (!fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, { recursive: true });\n }\n\n const migrationFilePath = path.join(outputDir, `migrationV${version}.ts`);\n const migrationCountPath = path.join(outputDir, `migrationCount.ts`);\n const indexFilePath = path.join(outputDir, `index.ts`);\n\n // Write the migration file\n fs.writeFileSync(migrationFilePath, migrationCode);\n\n // Write the migration count file\n fs.writeFileSync(migrationCountPath, `export const MIGRATION_VERSION = ${version};`);\n\n // Generate the migration index file\n const indexFileContent = `import { MigrationRunner } from \"@forge/sql/out/migration\";\nimport { MIGRATION_VERSION } from \"./migrationCount\";\n\nexport type MigrationType = (\n migrationRunner: MigrationRunner,\n) => MigrationRunner;\n\nexport default async (\n migrationRunner: MigrationRunner,\n): Promise<MigrationRunner> => {\n for (let i = 1; i <= MIGRATION_VERSION; i++) {\n const migrations = (await import(\\`./migrationV\\${i}\\`)) as {\n default: MigrationType;\n };\n migrations.default(migrationRunner);\n }\n return migrationRunner;\n};`;\n\n fs.writeFileSync(indexFilePath, indexFileContent);\n\n console.log(`✅ Migration file created: ${migrationFilePath}`);\n console.log(`✅ Migration count file updated: ${migrationCountPath}`);\n console.log(`✅ Migration index file created: ${indexFilePath}`);\n}\n\n/**\n * Extracts only the relevant SQL statements for migration.\n * @param schema - The full database schema as SQL.\n * @returns Filtered list of SQL statements.\n */\nconst extractCreateStatements = (schema: string): string[] => {\n const statements = schema.split(\";\").map((s) => s.trim());\n\n return statements.filter(\n (stmt) =>\n stmt.startsWith(\"create table\") ||\n (stmt.startsWith(\"alter table\") && stmt.includes(\"add index\")) ||\n (stmt.startsWith(\"alter table\") && stmt.includes(\"add\") && !stmt.includes(\"foreign\")) ||\n (stmt.startsWith(\"alter table\") && stmt.includes(\"modify\") && !stmt.includes(\"foreign\")),\n );\n};\n\n/**\n * Dynamically loads `entities` from `index.ts` in the specified directory.\n * @param entitiesPath - Path to the directory containing `index.ts`.\n * @returns Array of entity classes.\n */\nconst loadEntities = async (entitiesPath: string) => {\n try {\n const indexFilePath = path.resolve(path.join(entitiesPath, \"index.ts\"));\n if (!fs.existsSync(indexFilePath)) {\n console.error(`❌ Error: index.ts not found in ${entitiesPath}`);\n process.exit(1);\n }\n\n const { default: entities } = await import(indexFilePath);\n console.log(`✅ Loaded ${entities.length} entities from ${entitiesPath}`);\n return entities;\n } catch (error) {\n console.error(`❌ Error loading index.ts from ${entitiesPath}:`, error);\n process.exit(1);\n }\n};\n\n/**\n * Loads the current migration version from `migrationCount.ts`.\n * @param migrationPath - Path to the migration folder.\n * @returns The latest migration version.\n */\nconst loadMigrationVersion = async (migrationPath: string): Promise<number> => {\n try {\n const migrationCountFilePath = path.resolve(path.join(migrationPath, \"migrationCount.ts\"));\n if (!fs.existsSync(migrationCountFilePath)) {\n console.warn(\n `⚠️ Warning: migrationCount.ts not found in ${migrationCountFilePath}, assuming no previous migrations.`,\n );\n return 0;\n }\n\n const { MIGRATION_VERSION } = await import(migrationCountFilePath);\n console.log(`✅ Current migration version: ${MIGRATION_VERSION}`);\n return MIGRATION_VERSION as number;\n } catch (error) {\n console.error(`❌ Error loading migrationCount:`, error);\n process.exit(1);\n }\n};\n\n/**\n * Updates an existing database migration by generating schema modifications.\n * @param options - Database connection settings and output paths.\n */\nexport const updateMigration = async (options: any) => {\n try {\n let version = await loadMigrationVersion(options.output);\n\n if (version < 1) {\n console.log(\n `⚠️ Initial migration not found. Run \"npx forge-sql-orm migrations:create\" first.`,\n );\n process.exit(0);\n }\n version += 1;\n\n // Load entities dynamically from index.ts\n const entities = await loadEntities(options.entitiesPath);\n\n // Initialize MikroORM\n const orm = MikroORM.initSync({\n host: options.host,\n port: options.port,\n user: options.user,\n password: options.password,\n dbName: options.dbName,\n entities,\n debug: true,\n });\n\n // Generate SQL schema updates\n const createSchemaSQL = await orm.schema.getUpdateSchemaMigrationSQL({ wrap: true });\n const statements = extractCreateStatements(createSchemaSQL?.down || \"\");\n\n if (statements.length) {\n const migrationFile = generateMigrationFile(statements, version);\n saveMigrationFiles(migrationFile, version, options.output);\n\n console.log(`✅ Migration successfully updated!`);\n process.exit(0);\n } else {\n console.log(`⚠️ No new migration changes detected.`);\n process.exit(0);\n }\n } catch (error) {\n console.error(`❌ Error during migration update:`, error);\n process.exit(1);\n }\n};\n","import fs from \"fs\";\nimport path from \"path\";\n\n/**\n * Automates patches for MikroORM and Knex to fix Webpack issues.\n * - Removes problematic `require()` calls.\n * - Deletes unnecessary files and folders.\n * - Fixes dynamic imports (`import(id)`) in MikroORM.\n */\n\ninterface Patch {\n file?: string; // File to modify (optional)\n search?: RegExp; // Regex pattern to find problematic code\n replace?: string; // Replacement string for problematic code\n deleteLines?: RegExp[]; // List of regex patterns to remove specific lines\n description: string; // Description of the patch\n deleteFile?: string; // Path of the file to delete (optional)\n deleteFolder?: string; // Path of the folder to delete (optional)\n}\n\nconst PATCHES: Patch[] = [\n // 🗑️ Remove unused dialects (mssql, postgres, sqlite) in MikroORM\n {\n file: \"node_modules/@mikro-orm/knex/MonkeyPatchable.d.ts\",\n deleteLines: [\n /^.*mssql.*$/gim,\n /^.*MsSql.*$/gim,\n /^\\s*Postgres.*$/gm,\n /^.*Sqlite3.*$/gm,\n /^.*BetterSqlite3.*$/gim,\n ],\n description: \"Removing unused dialects from MonkeyPatchable.d.ts\",\n },\n {\n file: \"node_modules/@mikro-orm/knex/MonkeyPatchable.js\",\n deleteLines: [\n /^.*mssql.*$/gim,\n /^.*MsSql.*$/gim,\n /^.*postgres.*$/gim,\n /^.*sqlite.*$/gim,\n /^.*Sqlite.*$/gim,\n ],\n description: \"Removing unused dialects from MonkeyPatchable.js\",\n },\n {\n file: \"node_modules/@mikro-orm/knex/dialects/index.js\",\n deleteLines: [/^.*mssql.*$/gim, /^.*MsSql.*$/gim, /^.*postgresql.*$/gim, /^.*sqlite.*$/gim],\n description: \"Removing unused dialects from @mikro-orm/knex/dialects/index.js\",\n },\n {\n deleteFolder: \"node_modules/@mikro-orm/knex/dialects/mssql\",\n description: \"Removing mssql dialect from MikroORM\",\n },\n {\n deleteFolder: \"node_modules/@mikro-orm/knex/dialects/postgresql\",\n description: \"Removing postgresql dialect from MikroORM\",\n },\n {\n deleteFolder: \"node_modules/@mikro-orm/knex/dialects/sqlite\",\n description: \"Removing sqlite dialect from MikroORM\",\n },\n\n // 🔄 Fix Webpack `Critical dependency: the request of a dependency is an expression`\n {\n file: \"node_modules/@mikro-orm/core/utils/Configuration.js\",\n search: /dynamicImportProvider:\\s*\\/\\* istanbul ignore next \\*\\/\\s*\\(id\\) => import\\(id\\),/g,\n replace: \"dynamicImportProvider: /* istanbul ignore next */ () => Promise.resolve({}),\",\n description: \"Fixing dynamic imports in MikroORM Configuration\",\n },\n {\n file: \"node_modules/@mikro-orm/core/utils/Utils.js\",\n search: /static dynamicImportProvider = \\(id\\) => import\\(id\\);/g,\n replace: \"static dynamicImportProvider = () => Promise.resolve({});\",\n description: \"Fixing dynamic imports in MikroORM Utils.js\",\n },\n\n // 🛑 Remove deprecated `require.extensions` usage\n {\n file: \"node_modules/@mikro-orm/core/utils/Utils.js\",\n search: /\\s\\|\\|\\s*\\(require\\.extensions\\s*&&\\s*!!require\\.extensions\\['\\.ts'\\]\\);\\s*/g,\n replace: \";\",\n description: \"Removing deprecated `require.extensions` check in MikroORM\",\n },\n\n // 🛠️ Patch Knex to remove `Migrator` and `Seeder`\n {\n file: \"node_modules/knex/lib/knex-builder/make-knex.js\",\n deleteLines: [\n /^const \\{ Migrator \\} = require\\('\\.\\.\\/migrations\\/migrate\\/Migrator'\\);$/gm,\n /^const Seeder = require\\('\\.\\.\\/migrations\\/seed\\/Seeder'\\);$/gm,\n ],\n description: \"Removing `Migrator` and `Seeder` requires from make-knex.js\",\n },\n {\n file: \"node_modules/knex/lib/knex-builder/make-knex.js\",\n search: /\\sreturn new Migrator\\(this\\);/g,\n replace: \"return null;\",\n description: \"Replacing `return new Migrator(this);` with `return null;`\",\n },\n {\n file: \"node_modules/knex/lib/knex-builder/make-knex.js\",\n search: /\\sreturn new Seeder\\(this\\);/g,\n replace: \"return null;\",\n description: \"Replacing `return new Seeder(this);` with `return null;`\",\n },\n // 🔄 Patch for MikroORM Entity Generator to use 'forge-sql-orm'\n // {\n // file: \"node_modules/@mikro-orm/entity-generator/SourceFile.js\",\n // search: /^.* from '@mikro-orm.*$/gim,\n // replace: \" }).join(', '))} } from 'forge-sql-orm';`);\",\n // description: \"Replacing entity generator imports with 'forge-sql-orm'\"\n // },\n {\n file: \"node_modules/knex/lib/dialects/index.js\",\n deleteLines: [\n /^.*mssql.*$/gim,\n /^.*MsSql.*$/gim,\n /^.*postgresql.*$/gim,\n /^.*sqlite.*$/gim,\n /^.*oracle.*$/gim,\n /^.*oracledb.*$/gim,\n /^.*pgnative.*$/gim,\n /^.*postgres.*$/gim,\n /^.*redshift.*$/gim,\n /^.*sqlite3.*$/gim,\n /^.*cockroachdb.*$/gim,\n ],\n description: \"Removing unused dialects from @mikro-orm/knex/dialects/index.js\",\n },\n {\n file: \"node_modules/@mikro-orm/core/utils/Utils.js\",\n search: /\\s\\|\\|\\s*\\(require\\.extensions\\s*&&\\s*!!require\\.extensions\\['\\.ts'\\]\\);\\s*/g,\n replace: \";\", // Replaces with semicolon to keep syntax valid\n description: \"Removing deprecated `require.extensions` check from MikroORM\",\n },\n {\n file: \"node_modules/@mikro-orm/core/utils/Utils.js\",\n search: /^.*extensions.*$/gim,\n replace: \"{\", // Replaces with semicolon to keep syntax valid\n description: \"Removing deprecated `require.extensions` check from MikroORM\",\n },\n {\n file: \"node_modules/@mikro-orm/core/utils/Utils.js\",\n search: /^.*package.json.*$/gim,\n replace: \"return 0;\", // Replaces with semicolon to keep syntax valid\n description: \"Removing deprecated `require.extensions` check from MikroORM\",\n },\n {\n file: \"node_modules/@mikro-orm/knex/dialects/mysql/index.js\",\n deleteLines: [/^.*MariaDbKnexDialect.*$/gim],\n description: \"Removing MariaDbKnexDialect\",\n },\n];\n\n/**\n * Runs the MikroORM & Knex patching logic.\n */\nexport function runPostInstallPatch() {\n console.log(\"🔧 Applying MikroORM & Knex patches...\");\n PATCHES.forEach(\n ({ file, search, replace, deleteLines, deleteFile, deleteFolder, description }) => {\n if (file) {\n const filePath = path.resolve(file);\n if (fs.existsSync(filePath)) {\n let content = fs.readFileSync(filePath, \"utf8\");\n let originalContent = content;\n\n // 🔄 Replace text\n if (search && replace) {\n if (typeof search === \"string\" ? content.includes(search) : search.test(content)) {\n content = content.replace(search, replace);\n console.log(`[PATCHED] ${description}`);\n }\n }\n\n // 🗑️ Remove matching lines\n if (deleteLines) {\n deleteLines.forEach((pattern) => {\n content = content\n .split(\"\\n\")\n .filter((line) => !pattern.test(line))\n .join(\"\\n\");\n });\n if (content !== originalContent) {\n console.log(`[CLEANED] Removed matching lines in ${file}`);\n }\n }\n\n // 💾 Save changes only if file was modified\n if (content !== originalContent) {\n fs.writeFileSync(filePath, content, \"utf8\");\n }\n\n // 🚮 Remove empty files\n if (content.trim() === \"\") {\n fs.unlinkSync(filePath);\n console.log(`[REMOVED] ${filePath} (file is now empty)`);\n }\n } else {\n console.warn(`[WARNING] File not found: ${file}`);\n }\n }\n\n // 🚮 Delete specific files\n if (deleteFile) {\n const deleteFilePath = path.resolve(__dirname, \"../\", deleteFile);\n if (fs.existsSync(deleteFilePath)) {\n fs.unlinkSync(deleteFilePath);\n console.log(`[DELETED] ${description}`);\n }\n }\n\n // 🚮 Delete entire folders\n if (deleteFolder) {\n const deleteFolderPath = path.resolve(__dirname, \"../\", deleteFolder);\n if (fs.existsSync(deleteFolderPath)) {\n fs.rmSync(deleteFolderPath, { recursive: true, force: true });\n console.log(`[DELETED] ${description}`);\n }\n }\n },\n );\n\n console.log(\"🎉 MikroORM & Knex patching completed!\");\n}\n","#!/usr/bin/env node\n\nimport { Command } from \"commander\";\nimport dotenv from \"dotenv\";\nimport inquirer from \"inquirer\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport { generateModels } from \"./actions/generate-models\";\nimport { createMigration } from \"./actions/migrations-create\";\nimport { updateMigration } from \"./actions/migrations-update\";\nimport { runPostInstallPatch } from \"./actions/PatchPostinstall\";\n\nconst ENV_PATH = path.resolve(process.cwd(), \".env\");\n// 🔄 Load environment variables from `.env` file\ndotenv.config({ path: ENV_PATH });\n\nconst saveEnvFile = (config: any) => {\n let envContent = \"\";\n const envFilePath = ENV_PATH;\n\n if (fs.existsSync(envFilePath)) {\n envContent = fs.readFileSync(envFilePath, \"utf8\");\n }\n\n const envVars = envContent\n .split(\"\\n\")\n .filter((line) => line.trim() !== \"\" && !line.startsWith(\"#\"))\n .reduce((acc: any, line) => {\n const [key, ...value] = line.split(\"=\");\n acc[key] = value.join(\"=\");\n return acc;\n }, {});\n\n Object.entries(config).forEach(([key, value]) => {\n envVars[`FORGE_SQL_ORM_${key.toUpperCase()}`] = value;\n });\n\n const updatedEnvContent = Object.entries(envVars)\n .map(([key, value]) => `${key}=${value}`)\n .join(\"\\n\");\n\n fs.writeFileSync(envFilePath, updatedEnvContent, { encoding: \"utf8\" });\n\n console.log(\"✅ Configuration saved to .env without overwriting other variables.\");\n};\n\n/**\n * Prompts the user for missing parameters using Inquirer.js.\n * @param config - The current configuration object.\n * @param defaultOutput - Default output path.\n * @param customAskMissingParams - Optional function for additional prompts.\n * @returns Updated configuration with user input.\n */\nconst askMissingParams = async (\n config: any,\n defaultOutput: string,\n customAskMissingParams?: (cfg: any, questions: unknown[]) => void,\n) => {\n const questions: unknown[] = [];\n\n if (!config.host)\n questions.push({\n type: \"input\",\n name: \"host\",\n message: \"Enter database host:\",\n default: \"localhost\",\n });\n\n if (!config.port)\n questions.push({\n type: \"input\",\n name: \"port\",\n message: \"Enter database port:\",\n default: \"3306\",\n validate: (input: string) => !isNaN(parseInt(input, 10)),\n });\n\n if (!config.user)\n questions.push({\n type: \"input\",\n name: \"user\",\n message: \"Enter database user:\",\n default: \"root\",\n });\n\n if (!config.password)\n questions.push({\n type: \"password\",\n name: \"password\",\n message: \"Enter database password:\",\n mask: \"*\",\n });\n\n if (!config.dbName)\n questions.push({\n type: \"input\",\n name: \"dbName\",\n message: \"Enter database name:\",\n });\n\n if (!config.output)\n questions.push({\n type: \"input\",\n name: \"output\",\n message: \"Enter output path:\",\n default: defaultOutput,\n });\n\n // Allow additional questions from the caller\n if (customAskMissingParams) {\n customAskMissingParams(config, questions);\n }\n\n // If there are missing parameters, prompt the user\n if (questions.length > 0) {\n // @ts-ignore - Ignore TypeScript warning for dynamic question type\n const answers = await inquirer.prompt(questions);\n return { ...config, ...answers, port: parseInt(config.port ?? answers.port, 10) };\n }\n\n return config;\n};\n\n/**\n * Retrieves configuration parameters from command-line arguments and environment variables.\n * If any required parameters are missing, prompts the user for input.\n * @param cmd - The command object containing CLI options.\n * @param defaultOutput - Default output directory.\n * @param customConfig - Optional function for additional configuration parameters.\n * @param customAskMissingParams - Optional function for additional prompts.\n * @returns A fully resolved configuration object.\n */\nconst getConfig = async (\n cmd: any,\n defaultOutput: string,\n customConfig?: () => any,\n customAskMissingParams?: (cfg: any, questions: unknown[]) => void,\n) => {\n let config = {\n host: cmd.host || process.env.FORGE_SQL_ORM_HOST,\n port: cmd.port\n ? parseInt(cmd.port, 10)\n : process.env.FORGE_SQL_ORM_PORT\n ? parseInt(process.env.FORGE_SQL_ORM_PORT, 10)\n : undefined,\n user: cmd.user || process.env.FORGE_SQL_ORM_USER,\n password: cmd.password || process.env.FORGE_SQL_ORM_PASSWORD,\n dbName: cmd.dbName || process.env.FORGE_SQL_ORM_DBNAME,\n output: cmd.output || process.env.FORGE_SQL_ORM_OUTPUT,\n };\n\n // Merge additional configurations if provided\n if (customConfig) {\n config = { ...config, ...customConfig() };\n }\n\n const conf = await askMissingParams(config, defaultOutput, customAskMissingParams);\n if (cmd.saveEnv) {\n saveEnvFile(conf);\n }\n return conf;\n};\n\n// 📌 Initialize CLI\nconst program = new Command();\nprogram.version(\"1.0.0\");\n\n// ✅ Command: Generate database models (Entities)\nprogram\n .command(\"generate:model\")\n .description(\"Generate MikroORM models from the database.\")\n .option(\"--host <string>\", \"Database host\")\n .option(\"--port <number>\", \"Database port\")\n .option(\"--user <string>\", \"Database user\")\n .option(\"--password <string>\", \"Database password\")\n .option(\"--dbName <string>\", \"Database name\")\n .option(\"--output <string>\", \"Output path for entities\")\n .option(\"--versionField <string>\", \"Field name for versioning\")\n .option(\"--saveEnv\", \"Save configuration to .env file\")\n .action(async (cmd) => {\n const config = await getConfig(\n cmd,\n \"./database/entities\",\n () => ({\n versionField: cmd.versionField || process.env.FORGE_SQL_ORM_VERSIONFIELD,\n }),\n (cfg, questions: unknown[]) => {\n if (!cfg.versionField) {\n questions.push({\n type: \"input\",\n name: \"versionField\",\n message: \"Enter the field name for versioning (leave empty to skip):\",\n default: \"\",\n });\n }\n },\n );\n await generateModels(config);\n });\n\n// ✅ Command: Create initial database migration\nprogram\n .command(\"migrations:create\")\n .description(\"Generate an initial migration for the entire database.\")\n .option(\"--host <string>\", \"Database host\")\n .option(\"--port <number>\", \"Database port\")\n .option(\"--user <string>\", \"Database user\")\n .option(\"--password <string>\", \"Database password\")\n .option(\"--dbName <string>\", \"Database name\")\n .option(\"--output <string>\", \"Output path for migrations\")\n .option(\"--entitiesPath <string>\", \"Path to the folder containing entities\")\n .option(\"--saveEnv\", \"Save configuration to .env file\")\n .action(async (cmd) => {\n const config = await getConfig(\n cmd,\n \"./database/migration\",\n () => ({\n entitiesPath: cmd.entitiesPath || process.env.FORGE_SQL_ORM_ENTITIESPATH,\n }),\n (cfg, questions: unknown[]) => {\n if (!cfg.entitiesPath)\n questions.push({\n type: \"input\",\n name: \"entitiesPath\",\n message: \"Enter the path to entities:\",\n default: \"./database/entities\",\n });\n },\n );\n await createMigration(config);\n });\n\n// ✅ Command: Update migration for schema changes\nprogram\n .command(\"migrations:update\")\n .description(\"Generate a migration to update the database schema.\")\n .option(\"--host <string>\", \"Database host\")\n .option(\"--port <number>\", \"Database port\")\n .option(\"--user <string>\", \"Database user\")\n .option(\"--password <string>\", \"Database password\")\n .option(\"--dbName <string>\", \"Database name\")\n .option(\"--output <string>\", \"Output path for migrations\")\n .option(\"--entitiesPath <string>\", \"Path to the folder containing entities\")\n .option(\"--saveEnv\", \"Save configuration to .env file\")\n .action(async (cmd) => {\n const config = await getConfig(\n cmd,\n \"./database/migration\",\n () => ({\n entitiesPath: cmd.entitiesPath || process.env.FORGE_SQL_ORM_ENTITIESPATH,\n }),\n (cfg, questions: unknown[]) => {\n if (!cfg.entitiesPath)\n questions.push({\n type: \"input\",\n name: \"entitiesPath\",\n message: \"Enter the path to entities:\",\n default: \"./database/entities\",\n });\n },\n );\n await updateMigration(config);\n });\n\n// Patch MikroORM and Knex\nprogram\n .command(\"patch:mikroorm\")\n .description(\"Patch MikroORM and Knex dependencies to work properly with Forge\")\n .action(async () => {\n console.log(\"Running MikroORM patch...\");\n await runPostInstallPatch();\n await runPostInstallPatch();\n await runPostInstallPatch();\n console.log(\"✅ MikroORM patch applied successfully!\");\n });\n\n// 🔥 Execute CLI\nprogram.parse(process.argv);\n"],"names":["cleanSQLStatement","generateMigrationFile","saveMigrationFiles","extractCreateStatements","loadEntities","loadMigrationVersion"],"mappings":"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"}
1
+ {"version":3,"file":"cli.mjs","sources":["../scripts/actions/generate-models.ts","../scripts/actions/migrations-create.ts","../scripts/actions/migrations-update.ts","../scripts/actions/PatchPostinstall.ts","../scripts/cli.ts"],"sourcesContent":["import \"reflect-metadata\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport { defineConfig, MikroORM, MongoNamingStrategy } from \"@mikro-orm/mysql\";\nimport { EntityGenerator } from \"@mikro-orm/entity-generator\";\nimport { EntityMetadata } from \"@mikro-orm/core/typings\";\n\nconst regenerateIndexFile = (outputPath: string) => {\n const entitiesDir = path.resolve(outputPath);\n const indexPath = path.join(entitiesDir, \"index.ts\");\n\n const entityFiles = fs\n .readdirSync(entitiesDir)\n .filter((file) => file.endsWith(\".ts\") && file !== \"index.ts\");\n\n const imports = entityFiles.map((file) => {\n const entityName = path.basename(file, \".ts\");\n return `import { ${entityName} } from \"./${entityName}\";`;\n });\n\n const indexContent = `${imports.join(\"\\n\")}\\n\\nexport default [${entityFiles.map((file) => path.basename(file, \".ts\")).join(\", \")}];\\n`;\n\n fs.writeFileSync(indexPath, indexContent, \"utf8\");\n console.log(`✅ Updated index.ts with ${entityFiles.length} entities.`);\n};\n\nexport const generateModels = async (options: any) => {\n try {\n const ormConfig = defineConfig({\n host: options.host,\n port: options.port,\n user: options.user,\n password: options.password,\n dbName: options.dbName,\n namingStrategy: MongoNamingStrategy,\n discovery: { warnWhenNoEntities: false },\n extensions: [EntityGenerator],\n debug: true,\n }) as Parameters<typeof MikroORM.initSync>[0];\n\n const orm = MikroORM.initSync(ormConfig);\n console.log(`✅ Connected to ${options.dbName} at ${options.host}:${options.port}`);\n\n const onCreatingVersionField = async (metadatas: EntityMetadata[]) => {\n metadatas.forEach((m) => {\n if (options.versionField) {\n const versionFieldName = Object.keys(m.properties).find((p) => {\n return (\n p === options.versionField ||\n m.properties[p]?.name === options.versionField ||\n m.properties[p]?.fieldNames?.find((f) => f === options.versionField)\n );\n });\n if (versionFieldName) {\n const property = m.properties[versionFieldName];\n if (\n property.type !== \"datetime\" &&\n property.type !== \"integer\" &&\n property.type !== \"decimal\"\n ) {\n console.warn(\n `Version field \"${property.name}\" can be only datetime or integer Table ${m.tableName} but now is \"${property.type}\"`,\n );\n return;\n }\n if (property.primary) {\n console.warn(\n `Version field \"${property.name}\" can not be primary key Table ${m.tableName}`,\n );\n return;\n }\n if (property.nullable) {\n console.warn(\n `Version field \"${property.name}\" should not be nullable Table ${m.tableName}`,\n );\n return;\n }\n property.version = true;\n }\n }\n });\n };\n await orm.entityGenerator.generate({\n entitySchema: true,\n bidirectionalRelations: true,\n identifiedReferences: false,\n forceUndefined: true,\n undefinedDefaults: true,\n useCoreBaseEntity: false,\n onlyPurePivotTables: false,\n outputPurePivotTables: false,\n scalarPropertiesForRelations: \"always\",\n save: true,\n path: options.output,\n onInitialMetadata: onCreatingVersionField,\n });\n\n regenerateIndexFile(options.output);\n\n console.log(`✅ Entities generated at: ${options.output}`);\n process.exit(0);\n } catch (error) {\n console.error(`❌ Error generating entities:`, error);\n process.exit(1);\n }\n};\n","import \"reflect-metadata\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport { MikroORM } from \"@mikro-orm/mysql\";\nimport { execSync } from \"child_process\";\nimport { rmSync } from \"fs\";\n\n/**\n * Cleans SQL statements by removing unnecessary database options.\n * @param sql - The raw SQL statement.\n * @returns The cleaned SQL statement.\n */\nfunction cleanSQLStatement(sql: string): string {\n return sql.replace(/\\s+default\\s+character\\s+set\\s+utf8mb4\\s+engine\\s*=\\s*InnoDB;?/gi, \"\").trim();\n}\n\n/**\n * Generates a migration file using the provided SQL statements.\n * @param createStatements - Array of SQL statements.\n * @param version - Migration version number.\n * @returns TypeScript migration file content.\n */\nfunction generateMigrationFile(createStatements: string[], version: number): string {\n const versionPrefix = `v${version}_MIGRATION`;\n\n // Clean each SQL statement and generate migration lines with .enqueue()\n const migrationLines = createStatements\n .map(\n (stmt, index) =>\n ` .enqueue(\"${versionPrefix}${index}\", \\\"${cleanSQLStatement(stmt)}\\\")`, // eslint-disable-line no-useless-escape\n )\n .join(\"\\n\");\n\n // Migration template\n return `import { MigrationRunner } from \"@forge/sql/out/migration\";\n\nexport default (migrationRunner: MigrationRunner): MigrationRunner => {\n return migrationRunner\n${migrationLines};\n};`;\n}\n\n/**\n * Saves the generated migration file along with `migrationCount.ts` and `index.ts`.\n * @param migrationCode - The migration code to be written to the file.\n * @param version - Migration version number.\n * @param outputDir - Directory where the migration files will be saved.\n */\nfunction saveMigrationFiles(migrationCode: string, version: number, outputDir: string) {\n if (!fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, { recursive: true });\n }\n\n const migrationFilePath = path.join(outputDir, `migrationV${version}.ts`);\n const migrationCountPath = path.join(outputDir, `migrationCount.ts`);\n const indexFilePath = path.join(outputDir, `index.ts`);\n\n // Write the migration file\n fs.writeFileSync(migrationFilePath, migrationCode);\n\n // Write the migration count file\n fs.writeFileSync(migrationCountPath, `export const MIGRATION_VERSION = ${version};`);\n\n // Generate the migration index file\n const indexFileContent = `import { MigrationRunner } from \"@forge/sql/out/migration\";\nimport { MIGRATION_VERSION } from \"./migrationCount\";\n\nexport type MigrationType = (\n migrationRunner: MigrationRunner,\n) => MigrationRunner;\n\nexport default async (\n migrationRunner: MigrationRunner,\n): Promise<MigrationRunner> => {\n for (let i = 1; i <= MIGRATION_VERSION; i++) {\n const migrations = (await import(\\`./migrationV\\${i}\\`)) as {\n default: MigrationType;\n };\n migrations.default(migrationRunner);\n }\n return migrationRunner;\n};`;\n\n fs.writeFileSync(indexFilePath, indexFileContent);\n\n console.log(`✅ Migration file created: ${migrationFilePath}`);\n console.log(`✅ Migration count file updated: ${migrationCountPath}`);\n console.log(`✅ Migration index file created: ${indexFilePath}`);\n}\n\n/**\n * Extracts only the relevant SQL statements for migration.\n * @param schema - The full database schema as SQL.\n * @returns Filtered list of SQL statements.\n */\nconst extractCreateStatements = (schema: string): string[] => {\n const statements = schema.split(\";\").map((s) => s.trim());\n\n return statements.filter(\n (stmt) =>\n stmt.startsWith(\"create table\") ||\n (stmt.startsWith(\"alter table\") && stmt.includes(\"add index\")) ||\n stmt.startsWith(\"primary\"),\n );\n};\n\n/**\n * Dynamically loads `entities` from `index.ts` in the specified directory.\n * @param entitiesPath - Path to the directory containing `index.ts`.\n * @returns Array of entity classes.\n */\nconst loadEntities = async (entitiesPath: string) => {\n try {\n const indexFilePath = path.resolve(path.join(entitiesPath, \"index.ts\"));\n if (!fs.existsSync(indexFilePath)) {\n console.error(`❌ Error: index.ts not found in ${indexFilePath}`);\n process.exit(1);\n }\n\n const { default: entities } = await import(indexFilePath);\n console.log(`✅ Loaded ${entities.length} entities from ${entitiesPath}`);\n return entities;\n } catch (error) {\n console.error(`❌ Error loading index.ts from ${entitiesPath}:`, error);\n process.exit(1);\n }\n};\n\n/**\n * Loads the current migration version from `migrationCount.ts`.\n * @param migrationPath - Path to the migration folder.\n * @returns The latest migration version.\n */\nconst loadMigrationVersion = async (migrationPath: string): Promise<number> => {\n try {\n const migrationCountFilePath = path.resolve(path.join(migrationPath, \"migrationCount.ts\"));\n if (!fs.existsSync(migrationCountFilePath)) {\n return 0;\n }\n\n const { MIGRATION_VERSION } = await import(migrationCountFilePath);\n console.log(`✅ Current migration version: ${MIGRATION_VERSION}`);\n return MIGRATION_VERSION as number;\n } catch (error) {\n console.error(`❌ Error loading migrationCount:`, error);\n process.exit(1);\n }\n};\n\n/**\n * Creates a full database migration.\n * @param options - Database connection settings and output paths.\n */\nexport const createMigration = async (options: any) => {\n try {\n let version = await loadMigrationVersion(options.output);\n\n if (version > 0) {\n console.error(`❌ Error: Migration has already been created.`);\n process.exit(1);\n }\n\n // Start from version 1 if no previous migrations exist\n version = 1;\n\n // Load entities dynamically from index.ts\n const entities = await loadEntities(options.entitiesPath);\n\n // Initialize MikroORM\n const orm = MikroORM.initSync({\n host: options.host,\n port: options.port,\n user: options.user,\n password: options.password,\n dbName: options.dbName,\n entities: entities,\n });\n\n // Generate SQL schema\n const createSchemaSQL = await orm.schema.getCreateSchemaSQL({ wrap: true });\n const statements = extractCreateStatements(createSchemaSQL);\n\n // Generate and save migration files\n const migrationFile = generateMigrationFile(statements, version);\n saveMigrationFiles(migrationFile, version, options.output);\n\n console.log(`✅ Migration successfully created!`);\n process.exit(0);\n } catch (error) {\n console.error(`❌ Error during migration creation:`, error);\n process.exit(1);\n }\n};\n","import \"reflect-metadata\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport { MikroORM } from \"@mikro-orm/mysql\";\n\n/**\n * Cleans SQL statements by removing unnecessary database options.\n * @param sql - The raw SQL statement.\n * @returns The cleaned SQL statement.\n */\nfunction cleanSQLStatement(sql: string): string {\n return sql.replace(/\\s+default\\s+character\\s+set\\s+utf8mb4\\s+engine\\s*=\\s*InnoDB;?/gi, \"\").trim();\n}\n\n/**\n * Generates a migration file using the provided SQL statements.\n * @param createStatements - Array of SQL statements.\n * @param version - Migration version number.\n * @returns TypeScript migration file content.\n */\nfunction generateMigrationFile(createStatements: string[], version: number): string {\n const versionPrefix = `v${version}_MIGRATION`;\n\n // Clean each SQL statement and generate migration lines with .enqueue()\n const migrationLines = createStatements\n .map(\n (stmt, index) =>\n ` .enqueue(\"${versionPrefix}${index}\", \\\"${cleanSQLStatement(stmt)}\\\")`, // eslint-disable-line no-useless-escape\n )\n .join(\"\\n\");\n\n // Migration template\n return `import { MigrationRunner } from \"@forge/sql/out/migration\";\n\nexport default (migrationRunner: MigrationRunner): MigrationRunner => {\n return migrationRunner\n${migrationLines};\n};`;\n}\n\n/**\n * Saves the generated migration file along with `migrationCount.ts` and `index.ts`.\n * @param migrationCode - The migration code to be written to the file.\n * @param version - Migration version number.\n * @param outputDir - Directory where the migration files will be saved.\n */\nfunction saveMigrationFiles(migrationCode: string, version: number, outputDir: string) {\n if (!fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, { recursive: true });\n }\n\n const migrationFilePath = path.join(outputDir, `migrationV${version}.ts`);\n const migrationCountPath = path.join(outputDir, `migrationCount.ts`);\n const indexFilePath = path.join(outputDir, `index.ts`);\n\n // Write the migration file\n fs.writeFileSync(migrationFilePath, migrationCode);\n\n // Write the migration count file\n fs.writeFileSync(migrationCountPath, `export const MIGRATION_VERSION = ${version};`);\n\n // Generate the migration index file\n const indexFileContent = `import { MigrationRunner } from \"@forge/sql/out/migration\";\nimport { MIGRATION_VERSION } from \"./migrationCount\";\n\nexport type MigrationType = (\n migrationRunner: MigrationRunner,\n) => MigrationRunner;\n\nexport default async (\n migrationRunner: MigrationRunner,\n): Promise<MigrationRunner> => {\n for (let i = 1; i <= MIGRATION_VERSION; i++) {\n const migrations = (await import(\\`./migrationV\\${i}\\`)) as {\n default: MigrationType;\n };\n migrations.default(migrationRunner);\n }\n return migrationRunner;\n};`;\n\n fs.writeFileSync(indexFilePath, indexFileContent);\n\n console.log(`✅ Migration file created: ${migrationFilePath}`);\n console.log(`✅ Migration count file updated: ${migrationCountPath}`);\n console.log(`✅ Migration index file created: ${indexFilePath}`);\n}\n\n/**\n * Extracts only the relevant SQL statements for migration.\n * @param schema - The full database schema as SQL.\n * @returns Filtered list of SQL statements.\n */\nconst extractCreateStatements = (schema: string): string[] => {\n const statements = schema.split(\";\").map((s) => s.trim());\n\n return statements.filter(\n (stmt) =>\n stmt.startsWith(\"create table\") ||\n (stmt.startsWith(\"alter table\") && stmt.includes(\"add index\")) ||\n (stmt.startsWith(\"alter table\") && stmt.includes(\"add\") && !stmt.includes(\"foreign\")) ||\n (stmt.startsWith(\"alter table\") && stmt.includes(\"modify\") && !stmt.includes(\"foreign\")),\n );\n};\n\n/**\n * Dynamically loads `entities` from `index.ts` in the specified directory.\n * @param entitiesPath - Path to the directory containing `index.ts`.\n * @returns Array of entity classes.\n */\nconst loadEntities = async (entitiesPath: string) => {\n try {\n const indexFilePath = path.resolve(path.join(entitiesPath, \"index.ts\"));\n if (!fs.existsSync(indexFilePath)) {\n console.error(`❌ Error: index.ts not found in ${entitiesPath}`);\n process.exit(1);\n }\n\n const { default: entities } = await import(indexFilePath);\n console.log(`✅ Loaded ${entities.length} entities from ${entitiesPath}`);\n return entities;\n } catch (error) {\n console.error(`❌ Error loading index.ts from ${entitiesPath}:`, error);\n process.exit(1);\n }\n};\n\n/**\n * Loads the current migration version from `migrationCount.ts`.\n * @param migrationPath - Path to the migration folder.\n * @returns The latest migration version.\n */\nconst loadMigrationVersion = async (migrationPath: string): Promise<number> => {\n try {\n const migrationCountFilePath = path.resolve(path.join(migrationPath, \"migrationCount.ts\"));\n if (!fs.existsSync(migrationCountFilePath)) {\n console.warn(\n `⚠️ Warning: migrationCount.ts not found in ${migrationCountFilePath}, assuming no previous migrations.`,\n );\n return 0;\n }\n\n const { MIGRATION_VERSION } = await import(migrationCountFilePath);\n console.log(`✅ Current migration version: ${MIGRATION_VERSION}`);\n return MIGRATION_VERSION as number;\n } catch (error) {\n console.error(`❌ Error loading migrationCount:`, error);\n process.exit(1);\n }\n};\n\n/**\n * Updates an existing database migration by generating schema modifications.\n * @param options - Database connection settings and output paths.\n */\nexport const updateMigration = async (options: any) => {\n try {\n let version = await loadMigrationVersion(options.output);\n\n if (version < 1) {\n console.log(\n `⚠️ Initial migration not found. Run \"npx forge-sql-orm migrations:create\" first.`,\n );\n process.exit(0);\n }\n version += 1;\n\n // Load entities dynamically from index.ts\n const entities = await loadEntities(options.entitiesPath);\n\n // Initialize MikroORM\n const orm = MikroORM.initSync({\n host: options.host,\n port: options.port,\n user: options.user,\n password: options.password,\n dbName: options.dbName,\n entities,\n debug: true,\n });\n\n // Generate SQL schema updates\n const createSchemaSQL = await orm.schema.getUpdateSchemaMigrationSQL({ wrap: true });\n const statements = extractCreateStatements(createSchemaSQL?.down || \"\");\n\n if (statements.length) {\n const migrationFile = generateMigrationFile(statements, version);\n saveMigrationFiles(migrationFile, version, options.output);\n\n console.log(`✅ Migration successfully updated!`);\n process.exit(0);\n } else {\n console.log(`⚠️ No new migration changes detected.`);\n process.exit(0);\n }\n } catch (error) {\n console.error(`❌ Error during migration update:`, error);\n process.exit(1);\n }\n};\n","import fs from \"fs\";\nimport path from \"path\";\n\n/**\n * Automates patches for MikroORM and Knex to fix Webpack issues.\n * - Removes problematic `require()` calls.\n * - Deletes unnecessary files and folders.\n * - Fixes dynamic imports (`import(id)`) in MikroORM.\n */\n\ninterface Patch {\n file?: string; // File to modify (optional)\n search?: RegExp; // Regex pattern to find problematic code\n replace?: string; // Replacement string for problematic code\n deleteLines?: RegExp[]; // List of regex patterns to remove specific lines\n description: string; // Description of the patch\n deleteFile?: string; // Path of the file to delete (optional)\n deleteFolder?: string; // Path of the folder to delete (optional)\n}\n\nconst PATCHES: Patch[] = [\n // 🗑️ Remove unused dialects (mssql, postgres, sqlite) in MikroORM\n {\n file: \"node_modules/@mikro-orm/knex/MonkeyPatchable.d.ts\",\n deleteLines: [\n /^.*mssql.*$/gim,\n /^.*MsSql.*$/gim,\n /^\\s*Postgres.*$/gm,\n /^.*Sqlite3.*$/gm,\n /^.*BetterSqlite3.*$/gim,\n ],\n description: \"Removing unused dialects from MonkeyPatchable.d.ts\",\n },\n {\n file: \"node_modules/@mikro-orm/mysql/node_modules/@mikro-orm/knex/MonkeyPatchable.d.ts\",\n deleteLines: [\n /^.*mssql.*$/gim,\n /^.*MsSql.*$/gim,\n /^\\s*Postgres.*$/gm,\n /^.*Sqlite3.*$/gm,\n /^.*BetterSqlite3.*$/gim,\n ],\n description: \"Removing unused dialects from MonkeyPatchable.d.ts\",\n },\n {\n file: \"node_modules/@mikro-orm/knex/MonkeyPatchable.js\",\n deleteLines: [\n /^.*mssql.*$/gim,\n /^.*MsSql.*$/gim,\n /^.*postgres.*$/gim,\n /^.*sqlite.*$/gim,\n /^.*Sqlite.*$/gim,\n ],\n description: \"Removing unused dialects from MonkeyPatchable.js\",\n },\n {\n file: \"node_modules/@mikro-orm/mysql/node_modules/@mikro-orm/knex/MonkeyPatchable.js\",\n deleteLines: [\n /^.*mssql.*$/gim,\n /^.*MsSql.*$/gim,\n /^.*postgres.*$/gim,\n /^.*sqlite.*$/gim,\n /^.*Sqlite.*$/gim,\n ],\n description: \"Removing unused dialects from MonkeyPatchable.js\",\n },\n {\n file: \"node_modules/@mikro-orm/knex/dialects/index.js\",\n deleteLines: [/^.*mssql.*$/gim, /^.*MsSql.*$/gim, /^.*postgresql.*$/gim, /^.*sqlite.*$/gim],\n description: \"Removing unused dialects from @mikro-orm/knex/dialects/index.js\",\n },\n {\n file: \"node_modules/@mikro-orm/mysql/node_modules/@mikro-orm/knex/dialects/index.js\",\n deleteLines: [/^.*mssql.*$/gim, /^.*MsSql.*$/gim, /^.*postgresql.*$/gim, /^.*sqlite.*$/gim],\n description: \"Removing unused dialects from @mikro-orm/knex/dialects/index.js\",\n },\n {\n deleteFolder: \"node_modules/@mikro-orm/knex/dialects/mssql\",\n description: \"Removing mssql dialect from MikroORM\",\n },\n {\n deleteFolder: \"node_modules/@mikro-orm/mysql/node_modules/@mikro-orm/knex/dialects/mssql\",\n description: \"Removing mssql dialect from MikroORM\",\n },\n {\n deleteFolder: \"node_modules/@mikro-orm/knex/dialects/postgresql\",\n description: \"Removing postgresql dialect from MikroORM\",\n },\n {\n deleteFolder: \"node_modules/@mikro-orm/mysql/node_modules/@mikro-orm/knex/dialects/postgresql\",\n description: \"Removing postgresql dialect from MikroORM\",\n },\n {\n deleteFolder: \"node_modules/@mikro-orm/knex/dialects/sqlite\",\n description: \"Removing sqlite dialect from MikroORM\",\n },\n {\n deleteFolder: \"node_modules/@mikro-orm/mysql/node_modules/@mikro-orm/knex/dialects/sqlite\",\n description: \"Removing sqlite dialect from MikroORM\",\n },\n\n // 🔄 Fix Webpack `Critical dependency: the request of a dependency is an expression`\n {\n file: \"node_modules/@mikro-orm/core/utils/Configuration.js\",\n search: /dynamicImportProvider:\\s*\\/\\* istanbul ignore next \\*\\/\\s*\\(id\\) => import\\(id\\),/g,\n replace: \"dynamicImportProvider: /* istanbul ignore next */ () => Promise.resolve({}),\",\n description: \"Fixing dynamic imports in MikroORM Configuration\",\n },\n {\n file: \"node_modules/@mikro-orm/core/utils/Utils.js\",\n search: /static dynamicImportProvider = \\(id\\) => import\\(id\\);/g,\n replace: \"static dynamicImportProvider = () => Promise.resolve({});\",\n description: \"Fixing dynamic imports in MikroORM Utils.js\",\n },\n\n // 🛑 Remove deprecated `require.extensions` usage\n {\n file: \"node_modules/@mikro-orm/core/utils/Utils.js\",\n search: /\\s\\|\\|\\s*\\(require\\.extensions\\s*&&\\s*!!require\\.extensions\\['\\.ts'\\]\\);\\s*/g,\n replace: \";\",\n description: \"Removing deprecated `require.extensions` check in MikroORM\",\n },\n\n // 🛠️ Patch Knex to remove `Migrator` and `Seeder`\n {\n file: \"node_modules/knex/lib/knex-builder/make-knex.js\",\n deleteLines: [\n /^const \\{ Migrator \\} = require\\('\\.\\.\\/migrations\\/migrate\\/Migrator'\\);$/gm,\n /^const Seeder = require\\('\\.\\.\\/migrations\\/seed\\/Seeder'\\);$/gm,\n ],\n description: \"Removing `Migrator` and `Seeder` requires from make-knex.js\",\n },\n {\n file: \"node_modules/knex/lib/knex-builder/make-knex.js\",\n search: /\\sreturn new Migrator\\(this\\);/g,\n replace: \"return null;\",\n description: \"Replacing `return new Migrator(this);` with `return null;`\",\n },\n {\n file: \"node_modules/knex/lib/knex-builder/make-knex.js\",\n search: /\\sreturn new Seeder\\(this\\);/g,\n replace: \"return null;\",\n description: \"Replacing `return new Seeder(this);` with `return null;`\",\n },\n // 🔄 Patch for MikroORM Entity Generator to use 'forge-sql-orm'\n // {\n // file: \"node_modules/@mikro-orm/entity-generator/SourceFile.js\",\n // search: /^.* from '@mikro-orm.*$/gim,\n // replace: \" }).join(', '))} } from 'forge-sql-orm';`);\",\n // description: \"Replacing entity generator imports with 'forge-sql-orm'\"\n // },\n {\n file: \"node_modules/knex/lib/dialects/index.js\",\n deleteLines: [\n /^.*mssql.*$/gim,\n /^.*MsSql.*$/gim,\n /^.*postgresql.*$/gim,\n /^.*sqlite.*$/gim,\n /^.*oracle.*$/gim,\n /^.*oracledb.*$/gim,\n /^.*pgnative.*$/gim,\n /^.*postgres.*$/gim,\n /^.*redshift.*$/gim,\n /^.*sqlite3.*$/gim,\n /^.*cockroachdb.*$/gim,\n ],\n description: \"Removing unused dialects from @mikro-orm/knex/dialects/index.js\",\n },\n {\n file: \"node_modules/@mikro-orm/core/utils/Utils.js\",\n search: /\\s\\|\\|\\s*\\(require\\.extensions\\s*&&\\s*!!require\\.extensions\\['\\.ts'\\]\\);\\s*/g,\n replace: \";\", // Replaces with semicolon to keep syntax valid\n description: \"Removing deprecated `require.extensions` check from MikroORM\",\n },\n {\n file: \"node_modules/@mikro-orm/core/utils/Utils.js\",\n search: /^.*extensions.*$/gim,\n replace: \"{\", // Replaces with semicolon to keep syntax valid\n description: \"Removing deprecated `require.extensions` check from MikroORM\",\n },\n {\n file: \"node_modules/@mikro-orm/core/utils/Utils.js\",\n search: /^.*package.json.*$/gim,\n replace: \"return 0;\", // Replaces with semicolon to keep syntax valid\n description: \"Removing deprecated `require.extensions` check from MikroORM\",\n },\n {\n file: \"node_modules/@mikro-orm/knex/dialects/mysql/index.js\",\n deleteLines: [/^.*MariaDbKnexDialect.*$/gim],\n description: \"Removing MariaDbKnexDialect\",\n },\n {\n file: \"node_modules/@mikro-orm/mysql/node_modules/@mikro-orm/knex/dialects/mysql/index.js\",\n deleteLines: [/^.*MariaDbKnexDialect.*$/gim],\n description: \"Removing MariaDbKnexDialect\",\n },\n];\n\n/**\n * Runs the MikroORM & Knex patching logic.\n */\nexport function runPostInstallPatch() {\n console.log(\"🔧 Applying MikroORM & Knex patches...\");\n PATCHES.forEach(\n ({ file, search, replace, deleteLines, deleteFile, deleteFolder, description }) => {\n if (file) {\n const filePath = path.resolve(file);\n if (fs.existsSync(filePath)) {\n let content = fs.readFileSync(filePath, \"utf8\");\n let originalContent = content;\n\n // 🔄 Replace text\n if (search && replace) {\n if (typeof search === \"string\" ? content.includes(search) : search.test(content)) {\n content = content.replace(search, replace);\n console.log(`[PATCHED] ${description}`);\n }\n }\n\n // 🗑️ Remove matching lines\n if (deleteLines) {\n deleteLines.forEach((pattern) => {\n content = content\n .split(\"\\n\")\n .filter((line) => !pattern.test(line))\n .join(\"\\n\");\n });\n if (content !== originalContent) {\n console.log(`[CLEANED] Removed matching lines in ${file}`);\n }\n }\n\n // 💾 Save changes only if file was modified\n if (content !== originalContent) {\n fs.writeFileSync(filePath, content, \"utf8\");\n }\n\n // 🚮 Remove empty files\n if (content.trim() === \"\") {\n fs.unlinkSync(filePath);\n console.log(`[REMOVED] ${filePath} (file is now empty)`);\n }\n } else {\n console.warn(`[WARNING] File not found: ${file}`);\n }\n }\n\n // 🚮 Delete specific files\n if (deleteFile) {\n const deleteFilePath = path.resolve(__dirname, \"../\", deleteFile);\n if (fs.existsSync(deleteFilePath)) {\n fs.unlinkSync(deleteFilePath);\n console.log(`[DELETED] ${description}`);\n }\n }\n\n // 🚮 Delete entire folders\n if (deleteFolder) {\n const deleteFolderPath = path.resolve(__dirname, \"../\", deleteFolder);\n if (fs.existsSync(deleteFolderPath)) {\n fs.rmSync(deleteFolderPath, { recursive: true, force: true });\n console.log(`[DELETED] ${description}`);\n }\n }\n },\n );\n\n console.log(\"🎉 MikroORM & Knex patching completed!\");\n}\n","#!/usr/bin/env node\n\nimport { Command } from \"commander\";\nimport dotenv from \"dotenv\";\nimport inquirer from \"inquirer\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport { generateModels } from \"./actions/generate-models\";\nimport { createMigration } from \"./actions/migrations-create\";\nimport { updateMigration } from \"./actions/migrations-update\";\nimport { runPostInstallPatch } from \"./actions/PatchPostinstall\";\n\nconst ENV_PATH = path.resolve(process.cwd(), \".env\");\n// 🔄 Load environment variables from `.env` file\ndotenv.config({ path: ENV_PATH });\n\nconst saveEnvFile = (config: any) => {\n let envContent = \"\";\n const envFilePath = ENV_PATH;\n\n if (fs.existsSync(envFilePath)) {\n envContent = fs.readFileSync(envFilePath, \"utf8\");\n }\n\n const envVars = envContent\n .split(\"\\n\")\n .filter((line) => line.trim() !== \"\" && !line.startsWith(\"#\"))\n .reduce((acc: any, line) => {\n const [key, ...value] = line.split(\"=\");\n acc[key] = value.join(\"=\");\n return acc;\n }, {});\n\n Object.entries(config).forEach(([key, value]) => {\n envVars[`FORGE_SQL_ORM_${key.toUpperCase()}`] = value;\n });\n\n const updatedEnvContent = Object.entries(envVars)\n .map(([key, value]) => `${key}=${value}`)\n .join(\"\\n\");\n\n fs.writeFileSync(envFilePath, updatedEnvContent, { encoding: \"utf8\" });\n\n console.log(\"✅ Configuration saved to .env without overwriting other variables.\");\n};\n\n/**\n * Prompts the user for missing parameters using Inquirer.js.\n * @param config - The current configuration object.\n * @param defaultOutput - Default output path.\n * @param customAskMissingParams - Optional function for additional prompts.\n * @returns Updated configuration with user input.\n */\nconst askMissingParams = async (\n config: any,\n defaultOutput: string,\n customAskMissingParams?: (cfg: any, questions: unknown[]) => void,\n) => {\n const questions: unknown[] = [];\n\n if (!config.host)\n questions.push({\n type: \"input\",\n name: \"host\",\n message: \"Enter database host:\",\n default: \"localhost\",\n });\n\n if (!config.port)\n questions.push({\n type: \"input\",\n name: \"port\",\n message: \"Enter database port:\",\n default: \"3306\",\n validate: (input: string) => !isNaN(parseInt(input, 10)),\n });\n\n if (!config.user)\n questions.push({\n type: \"input\",\n name: \"user\",\n message: \"Enter database user:\",\n default: \"root\",\n });\n\n if (!config.password)\n questions.push({\n type: \"password\",\n name: \"password\",\n message: \"Enter database password:\",\n mask: \"*\",\n });\n\n if (!config.dbName)\n questions.push({\n type: \"input\",\n name: \"dbName\",\n message: \"Enter database name:\",\n });\n\n if (!config.output)\n questions.push({\n type: \"input\",\n name: \"output\",\n message: \"Enter output path:\",\n default: defaultOutput,\n });\n\n // Allow additional questions from the caller\n if (customAskMissingParams) {\n customAskMissingParams(config, questions);\n }\n\n // If there are missing parameters, prompt the user\n if (questions.length > 0) {\n // @ts-ignore - Ignore TypeScript warning for dynamic question type\n const answers = await inquirer.prompt(questions);\n return { ...config, ...answers, port: parseInt(config.port ?? answers.port, 10) };\n }\n\n return config;\n};\n\n/**\n * Retrieves configuration parameters from command-line arguments and environment variables.\n * If any required parameters are missing, prompts the user for input.\n * @param cmd - The command object containing CLI options.\n * @param defaultOutput - Default output directory.\n * @param customConfig - Optional function for additional configuration parameters.\n * @param customAskMissingParams - Optional function for additional prompts.\n * @returns A fully resolved configuration object.\n */\nconst getConfig = async (\n cmd: any,\n defaultOutput: string,\n customConfig?: () => any,\n customAskMissingParams?: (cfg: any, questions: unknown[]) => void,\n) => {\n let config = {\n host: cmd.host || process.env.FORGE_SQL_ORM_HOST,\n port: cmd.port\n ? parseInt(cmd.port, 10)\n : process.env.FORGE_SQL_ORM_PORT\n ? parseInt(process.env.FORGE_SQL_ORM_PORT, 10)\n : undefined,\n user: cmd.user || process.env.FORGE_SQL_ORM_USER,\n password: cmd.password || process.env.FORGE_SQL_ORM_PASSWORD,\n dbName: cmd.dbName || process.env.FORGE_SQL_ORM_DBNAME,\n output: cmd.output || process.env.FORGE_SQL_ORM_OUTPUT,\n };\n\n // Merge additional configurations if provided\n if (customConfig) {\n config = { ...config, ...customConfig() };\n }\n\n const conf = await askMissingParams(config, defaultOutput, customAskMissingParams);\n if (cmd.saveEnv) {\n saveEnvFile(conf);\n }\n return conf;\n};\n\n// 📌 Initialize CLI\nconst program = new Command();\nprogram.version(\"1.0.0\");\n\n// ✅ Command: Generate database models (Entities)\nprogram\n .command(\"generate:model\")\n .description(\"Generate MikroORM models from the database.\")\n .option(\"--host <string>\", \"Database host\")\n .option(\"--port <number>\", \"Database port\")\n .option(\"--user <string>\", \"Database user\")\n .option(\"--password <string>\", \"Database password\")\n .option(\"--dbName <string>\", \"Database name\")\n .option(\"--output <string>\", \"Output path for entities\")\n .option(\"--versionField <string>\", \"Field name for versioning\")\n .option(\"--saveEnv\", \"Save configuration to .env file\")\n .action(async (cmd) => {\n const config = await getConfig(\n cmd,\n \"./database/entities\",\n () => ({\n versionField: cmd.versionField || process.env.FORGE_SQL_ORM_VERSIONFIELD,\n }),\n (cfg, questions: unknown[]) => {\n if (!cfg.versionField) {\n questions.push({\n type: \"input\",\n name: \"versionField\",\n message: \"Enter the field name for versioning (leave empty to skip):\",\n default: \"\",\n });\n }\n },\n );\n await generateModels(config);\n });\n\n// ✅ Command: Create initial database migration\nprogram\n .command(\"migrations:create\")\n .description(\"Generate an initial migration for the entire database.\")\n .option(\"--host <string>\", \"Database host\")\n .option(\"--port <number>\", \"Database port\")\n .option(\"--user <string>\", \"Database user\")\n .option(\"--password <string>\", \"Database password\")\n .option(\"--dbName <string>\", \"Database name\")\n .option(\"--output <string>\", \"Output path for migrations\")\n .option(\"--entitiesPath <string>\", \"Path to the folder containing entities\")\n .option(\"--saveEnv\", \"Save configuration to .env file\")\n .action(async (cmd) => {\n const config = await getConfig(\n cmd,\n \"./database/migration\",\n () => ({\n entitiesPath: cmd.entitiesPath || process.env.FORGE_SQL_ORM_ENTITIESPATH,\n }),\n (cfg, questions: unknown[]) => {\n if (!cfg.entitiesPath)\n questions.push({\n type: \"input\",\n name: \"entitiesPath\",\n message: \"Enter the path to entities:\",\n default: \"./database/entities\",\n });\n },\n );\n await createMigration(config);\n });\n\n// ✅ Command: Update migration for schema changes\nprogram\n .command(\"migrations:update\")\n .description(\"Generate a migration to update the database schema.\")\n .option(\"--host <string>\", \"Database host\")\n .option(\"--port <number>\", \"Database port\")\n .option(\"--user <string>\", \"Database user\")\n .option(\"--password <string>\", \"Database password\")\n .option(\"--dbName <string>\", \"Database name\")\n .option(\"--output <string>\", \"Output path for migrations\")\n .option(\"--entitiesPath <string>\", \"Path to the folder containing entities\")\n .option(\"--saveEnv\", \"Save configuration to .env file\")\n .action(async (cmd) => {\n const config = await getConfig(\n cmd,\n \"./database/migration\",\n () => ({\n entitiesPath: cmd.entitiesPath || process.env.FORGE_SQL_ORM_ENTITIESPATH,\n }),\n (cfg, questions: unknown[]) => {\n if (!cfg.entitiesPath)\n questions.push({\n type: \"input\",\n name: \"entitiesPath\",\n message: \"Enter the path to entities:\",\n default: \"./database/entities\",\n });\n },\n );\n await updateMigration(config);\n });\n\n// Patch MikroORM and Knex\nprogram\n .command(\"patch:mikroorm\")\n .description(\"Patch MikroORM and Knex dependencies to work properly with Forge\")\n .action(async () => {\n console.log(\"Running MikroORM patch...\");\n await runPostInstallPatch();\n await runPostInstallPatch();\n await runPostInstallPatch();\n console.log(\"✅ MikroORM patch applied successfully!\");\n });\n\n// 🔥 Execute CLI\nprogram.parse(process.argv);\n"],"names":["cleanSQLStatement","generateMigrationFile","saveMigrationFiles","extractCreateStatements","loadEntities","loadMigrationVersion"],"mappings":"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"}
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "forge-sql-orm",
3
- "version": "1.0.25",
3
+ "version": "1.0.26",
4
4
  "description": "Mikro-ORM integration for Forge-SQL in Atlassian Forge applications.",
5
5
  "main": "dist/ForgeSQLORM.js",
6
6
  "module": "dist/ForgeSQLORM.mjs",
@@ -93,6 +93,6 @@
93
93
  "@forge/sql": "^2.4.0"
94
94
  },
95
95
  "bin": {
96
- "forge-sql-orm": "dist-cli/forgeSqlCLI.js"
96
+ "forge-sql-orm": "dist-cli/forgeSqlOrmCLI.js"
97
97
  }
98
98
  }