@h3ravel/database 11.2.6 → 11.2.8
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/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/dist/index.cjs
CHANGED
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["ConsoleCommand","Migrate","Logger","FileSystem","path","MigrationCreator","Resolver","config","BaseModel","ServiceProvider","config"],"sources":["../src/Commands/MigrateCommand.ts","../src/Configuration.ts","../src/Model.ts","../src/Providers/DatabaseServiceProvider.ts"],"sourcesContent":["import { FileSystem, Logger, Resolver } from '@h3ravel/shared'\nimport { Migrate, MigrationCreator } from '@h3ravel/arquebus/migrations'\nimport { TBaseConfig, arquebusConfig } from '..'\n\nimport { ConsoleCommand } from '@h3ravel/core'\nimport path from 'node:path'\n\nexport class MigrateCommand extends ConsoleCommand {\n /**\n * The current database connection\n */\n private connection!: TBaseConfig\n\n /** \n * The base path for all database operations\n */\n private databasePath: string = database_path()\n\n /**\n * The name and signature of the console command.\n *\n * @var string\n */\n protected signature: string = `migrate:\n {fresh : Drop all tables and re-run all migrations.}\n {install : Create the migration repository.}\n {refresh : Reset and re-run all migrations.}\n {reset : Rollback all database migrations.}\n {rollback : Rollback the last database migration.}\n {status : Show the status of each migration.}\n {publish : Publish any migration files from installed packages. | {package : The package to publish migrations from}}\n {^--s|seed : Seed the database}\n {^--c|connection=mysql : The database connection to use}\n `\n /**\n * The console command description.\n *\n * @var string\n */\n protected description: string = 'Run all pending migrations.'\n\n /**\n * Execute the console command.\n */\n public async handle () {\n const command = (this.dictionary.name ?? this.dictionary.baseCommand) as never\n\n this.connection = Object.entries(arquebusConfig(config('database')))\n .find(([client]) => client === config('database.default'))\n ?.at(1)\n\n this.connection.migrations = {\n path: 'migrations',\n table: 'migrations',\n }\n\n const methods = {\n migrate: 'migrateRun',\n fresh: 'migrateFresh',\n install: 'migrateInstall',\n refresh: 'migrateRefresh',\n reset: 'migrateReset',\n rollback: 'migrateRollback',\n status: 'migrateStatus',\n publish: 'migratePublish',\n } as const\n\n await (this as any)?.[methods[command]]()\n }\n\n /**\n * Run all pending migrations.\n */\n protected async migrateRun () {\n try {\n await new Migrate(this.databasePath).run(this.connection, this.options(), true)\n } catch (e) {\n Logger.error('ERROR: ' + e)\n }\n }\n\n /**\n * Drop all tables and re-run all migrations.\n */\n protected async migrateFresh () {\n try {\n await new Migrate(this.databasePath).fresh(this.connection, this.options(), true)\n } catch (e) {\n Logger.error('ERROR: ' + e)\n }\n }\n\n /**\n * Create the migration repository.\n */\n protected async migrateInstall () {\n try {\n const migrate = new Migrate(this.databasePath)\n const { migrator } = await migrate.setupConnection(this.connection)\n await migrate.prepareDatabase(migrator)\n\n Logger.success('Migration repository installed.')\n } catch (e) {\n Logger.error('ERROR: ' + e)\n }\n }\n\n /**\n * Reset and re-run all migrations.\n */\n protected async migrateRefresh () {\n try {\n await new Migrate(this.databasePath).refresh(this.connection, this.options(), true)\n } catch (e) {\n Logger.error('ERROR: ' + e)\n }\n }\n\n /**\n * Rollback all database migrations.\n */\n protected async migrateReset () {\n try {\n await new Migrate(this.databasePath).reset(this.connection, this.options(), true)\n } catch (e) {\n Logger.error('ERROR: ' + e)\n }\n }\n\n /**\n * Rollback the last database migration.\n */\n protected async migrateRollback () {\n try {\n await new Migrate(this.databasePath).rollback(this.connection, this.options(), true)\n } catch (e) {\n Logger.error('ERROR: ' + e)\n }\n }\n\n /**\n * Show the status of each migration.\n */\n protected async migrateStatus () {\n const migrations = await new Migrate(this.databasePath, undefined, (msg, sts) => {\n const hint = Logger.parse([\n [' Did you forget to run', 'white'],\n ['`musket migrate:install`?', 'grey']\n ], ' ', false)\n\n if (sts) Logger[sts](msg + hint, sts === 'error', true)\n }).status(this.connection, this.options(), true)\n\n try {\n if (migrations.length > 0) {\n Logger.twoColumnLog('Migration name', 'Batch / Status')\n\n migrations.forEach(migration => {\n const status = migration.ran\n ? Logger.parse([[`[${migration.batch}]`, 'white'], ['Ran', 'green']], ' ', false)\n : Logger.parse([['Pending', 'yellow']], '', false)\n Logger.twoColumnLog(migration.name, status)\n })\n }\n else {\n Logger.info('No migrations found')\n }\n } catch (e) {\n Logger.error(['ERROR: ' + e, 'Did you run musket migrate:install'])\n }\n }\n\n\n\n /**\n * Publish any migration files from installed packages.\n */\n protected async migratePublish () {\n const name = this.argument('package')\n\n try {\n /** Find the requested package */\n const packagePath = FileSystem.findModulePkg(name) ?? null\n if (!packagePath) throw new Error('Package not found')\n\n /** Get the package,json and instanciate the migration creator */\n const pkgJson = (await import(path.join(packagePath, 'package.json')))\n const creator = new MigrationCreator(path.join(packagePath, pkgJson.migrations ?? 'migrations'))\n\n const info = Logger.parse([\n [' Publishing migrations from', 'white'],\n [`${pkgJson.name}@${pkgJson.version}`, ['italic', 'gray']]\n ], ' ', false)\n\n Logger.info(`INFO: ${info}`)\n\n try {\n /** Publish any existing migrations */\n await creator.publish(this.databasePath, (fileName) => {\n Logger.twoColumnLog(fileName, Logger.parse([['PUBLISHED', 'green']], '', false))\n })\n } catch {\n Logger.error([`ERROR: ${name} has no publishable migrations.`])\n }\n } catch (e) {\n const hint = Logger.parse([\n [' Did you forget to run', 'white'],\n [`\\`${await Resolver.getPakageInstallCommand(name)}\\``, 'grey']\n ], ' ', false)\n\n const error = Logger.parse([\n ['Package `', 'white'],\n [name, 'grey'],\n ['` not found', 'white']\n ], '', false)\n\n Logger.error(['ERROR: ' + error, hint + '?', String(e)])\n }\n }\n}\n","/// <reference path=\"../../core/src/app.globals.d.ts\" />\nimport { Knex } from 'knex'\n\ntype TFunction = (...args: any[]) => any\n\nexport interface TField {\n type: 'VAR_STRING' | 'BLOB' | 'DATETIME' | 'TIMESTAMP' | 'LONG' | 'JSON'\n length: number\n db: string\n table: string\n name: string\n string: TFunction,\n buffer: TFunction\n geometry: TFunction\n}\n\nexport interface TBaseConfig {\n client: 'mysql' | 'mysql2' | 'sqlite3' | 'oracle' | 'mariadb' | 'pg'\n connection: {\n typeCast?(field: TField, next: TFunction): any\n dateStrings?: boolean\n }\n pool?: {\n afterCreate: (connection: TConfig, callback: (val: any, con: any) => void) => Promise<any>\n } | undefined\n connections?: Record<string, TConfig>\n migrations?: {\n table: string\n path: string\n },\n factories?: {\n path: string\n },\n seeders?: {\n path: string\n },\n models?: {\n path: string\n }\n}\n\nexport type TConfig = TBaseConfig & ({\n client: 'pg'\n connection: Knex.PgConnectionConfig\n} | {\n client: 'oracle'\n connection: Knex.OracleDbConnectionConfig\n} | {\n client: 'mysql2'\n connection: Knex.MySql2ConnectionConfig\n} | {\n client: 'mysql'\n connection: Knex.MySqlConnectionConfig\n} | {\n client: 'sqlite3'\n connection: Knex.Sqlite3ConnectionConfig\n useNullAsDefault?: boolean\n} | {\n client: 'mariadb'\n connection: Knex.MariaSqlConnectionConfig\n useNullAsDefault?: boolean\n})\n\nexport const arquebusConfig = (config: any) => {\n return {\n sqlite: {\n client: config.connections.sqlite.driver,\n connection: <Knex.Sqlite3ConnectionConfig>{\n filename: database_path(config.connections.sqlite.database),\n debug: config.connections.sqlite.debug,\n flags: config.connections.sqlite.flags,\n options: config.connections.sqlite.options,\n expirationChecker: config.connections.sqlite.expirationChecker\n },\n useNullAsDefault: config.connections.sqlite.useNullAsDefault,\n },\n mysql: {\n client: config.connections.mysql.driver,\n connection: <Knex.MySql2ConnectionConfig>{\n host: config.connections.mysql.host ?? 'localhost',\n port: config.connections.mysql.port ?? 3306,\n user: config.connections.mysql.username ?? 'root',\n password: config.connections.mysql.password,\n database: config.connections.mysql.database,\n charset: config.connections.mysql.charset,\n socketPath: config.connections.mysql.unix_socket,\n localAddress: config.connections.mysql.url,\n },\n },\n mariadb: {\n client: config.connections.mariadb.driver,\n connection: <Knex.MariaSqlConnectionConfig>{\n host: config.connections.mariadb.host ?? 'localhost',\n port: config.connections.mariadb.port ?? 3306,\n user: config.connections.mariadb.username ?? 'root',\n password: config.connections.mariadb.password,\n database: config.connections.mariadb.database,\n charset: config.connections.mariadb.charset,\n socketPath: config.connections.mariadb.unix_socket,\n localAddress: config.connections.mariadb.url,\n expirationChecker: config.connections.mariadb.expirationChecker\n },\n },\n pgsql: {\n client: 'pg',\n connection: <Knex.PgConnectionConfig>{\n host: config.connections.pgsql.host ?? 'localhost',\n port: config.connections.pgsql.port ?? 3306,\n user: config.connections.pgsql.username ?? 'root',\n password: config.connections.pgsql.password,\n database: config.connections.pgsql.database,\n charset: config.connections.mysql.charset,\n connectionString: config.connections.pgsql.url,\n expirationChecker: config.connections.pgsql.expirationChecker\n },\n }\n } as unknown as TBaseConfig\n}\n","import { Model as BaseModel } from '@h3ravel/arquebus'\n\nexport class Model<M extends BaseModel = any> extends BaseModel {\n /**\n * Retrieve the model for a bound value.\n * \n * @param {any} value \n * @param {String|null} field \n * @returns \n */\n public resolveRouteBinding (value: any, field: undefined | string | null = null): Promise<M> {\n return this.newQuery().where(field ?? 'ids', value).firstOrFail()! as Promise<M>\n }\n}\n","import { MigrateCommand } from '../Commands/MigrateCommand'\nimport { ServiceProvider } from '@h3ravel/core'\nimport { arquebus } from '@h3ravel/arquebus'\nimport { arquebusConfig } from '../Configuration'\n\n/**\n * Database connection, ORM, migrations.\n * \n * Register DatabaseManager and QueryBuilder if required.\n * Set up ORM models and relationships.\n * Register migration and seeder commands.\n * \n */\nexport class DatabaseServiceProvider extends ServiceProvider {\n public static priority = 994\n\n register () {\n const config = this.app.make('config')\n\n const connection = Object.entries(arquebusConfig(config.get('database')))\n .find(([client]) => client === config.get('database.default'))\n ?.at(1)\n\n if (connection) {\n arquebus.addConnection(connection)\n }\n\n /** Register Musket Commands */\n this.commands([MigrateCommand])\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["ConsoleCommand","Migrate","Logger","FileSystem","path","MigrationCreator","Resolver","config","BaseModel","ServiceProvider","config"],"sources":["../src/Commands/MigrateCommand.ts","../src/Configuration.ts","../src/Model.ts","../src/Providers/DatabaseServiceProvider.ts"],"sourcesContent":["import { FileSystem, Logger, Resolver } from '@h3ravel/shared'\nimport { Migrate, MigrationCreator } from '@h3ravel/arquebus/migrations'\nimport { TBaseConfig, arquebusConfig } from '..'\n\nimport { ConsoleCommand } from '@h3ravel/core'\nimport path from 'node:path'\n\nexport class MigrateCommand extends ConsoleCommand {\n /**\n * The current database connection\n */\n private connection!: TBaseConfig\n\n /** \n * The base path for all database operations\n */\n private databasePath: string = database_path()\n\n /**\n * The name and signature of the console command.\n *\n * @var string\n */\n protected signature: string = `migrate:\n {fresh : Drop all tables and re-run all migrations.}\n {install : Create the migration repository.}\n {refresh : Reset and re-run all migrations.}\n {reset : Rollback all database migrations.}\n {rollback : Rollback the last database migration.}\n {status : Show the status of each migration.}\n {publish : Publish any migration files from installed packages. | {package : The package to publish migrations from}}\n {^--s|seed : Seed the database}\n {^--c|connection=mysql : The database connection to use}\n `\n /**\n * The console command description.\n *\n * @var string\n */\n protected description: string = 'Run all pending migrations.'\n\n /**\n * Execute the console command.\n */\n public async handle (this: any) {\n const command = (this.dictionary.name ?? this.dictionary.baseCommand) as never\n\n this.connection = Object.entries(arquebusConfig(config('database')))\n .find(([client]) => client === config('database.default'))\n ?.at(1)\n\n this.connection.migrations = {\n path: 'migrations',\n table: 'migrations',\n }\n\n const methods = {\n migrate: 'migrateRun',\n fresh: 'migrateFresh',\n install: 'migrateInstall',\n refresh: 'migrateRefresh',\n reset: 'migrateReset',\n rollback: 'migrateRollback',\n status: 'migrateStatus',\n publish: 'migratePublish',\n } as const\n\n await this[methods[command]]()\n }\n\n /**\n * Run all pending migrations.\n */\n protected async migrateRun () {\n try {\n await new Migrate(this.databasePath).run(this.connection, this.options(), true)\n } catch (e) {\n Logger.error('ERROR: ' + e)\n }\n }\n\n /**\n * Drop all tables and re-run all migrations.\n */\n protected async migrateFresh () {\n try {\n await new Migrate(this.databasePath).fresh(this.connection, this.options(), true)\n } catch (e) {\n Logger.error('ERROR: ' + e)\n }\n }\n\n /**\n * Create the migration repository.\n */\n protected async migrateInstall () {\n try {\n const migrate = new Migrate(this.databasePath)\n const { migrator } = await migrate.setupConnection(this.connection)\n await migrate.prepareDatabase(migrator)\n\n Logger.success('Migration repository installed.')\n } catch (e) {\n Logger.error('ERROR: ' + e)\n }\n }\n\n /**\n * Reset and re-run all migrations.\n */\n protected async migrateRefresh () {\n try {\n await new Migrate(this.databasePath).refresh(this.connection, this.options(), true)\n } catch (e) {\n Logger.error('ERROR: ' + e)\n }\n }\n\n /**\n * Rollback all database migrations.\n */\n protected async migrateReset () {\n try {\n await new Migrate(this.databasePath).reset(this.connection, this.options(), true)\n } catch (e) {\n Logger.error('ERROR: ' + e)\n }\n }\n\n /**\n * Rollback the last database migration.\n */\n protected async migrateRollback () {\n try {\n await new Migrate(this.databasePath).rollback(this.connection, this.options(), true)\n } catch (e) {\n Logger.error('ERROR: ' + e)\n }\n }\n\n /**\n * Show the status of each migration.\n */\n protected async migrateStatus () {\n const migrations = await new Migrate(this.databasePath, undefined, (msg, sts) => {\n const hint = Logger.parse([\n [' Did you forget to run', 'white'],\n ['`musket migrate:install`?', 'grey']\n ], ' ', false)\n\n if (sts) Logger[sts](msg + hint, sts === 'error', true)\n }).status(this.connection, this.options(), true)\n\n try {\n if (migrations.length > 0) {\n Logger.twoColumnLog('Migration name', 'Batch / Status')\n\n migrations.forEach(migration => {\n const status = migration.ran\n ? Logger.parse([[`[${migration.batch}]`, 'white'], ['Ran', 'green']], ' ', false)\n : Logger.parse([['Pending', 'yellow']], '', false)\n Logger.twoColumnLog(migration.name, status)\n })\n }\n else {\n Logger.info('No migrations found')\n }\n } catch (e) {\n Logger.error(['ERROR: ' + e, 'Did you run musket migrate:install'])\n }\n }\n\n\n\n /**\n * Publish any migration files from installed packages.\n */\n protected async migratePublish () {\n const name = this.argument('package')\n\n try {\n /** Find the requested package */\n const packagePath = FileSystem.findModulePkg(name) ?? null\n if (!packagePath) throw new Error('Package not found')\n\n /** Get the package,json and instanciate the migration creator */\n const pkgJson = (await import(path.join(packagePath, 'package.json')))\n const creator = new MigrationCreator(path.join(packagePath, pkgJson.migrations ?? 'migrations'))\n\n const info = Logger.parse([\n [' Publishing migrations from', 'white'],\n [`${pkgJson.name}@${pkgJson.version}`, ['italic', 'gray']]\n ], ' ', false)\n\n Logger.info(`INFO: ${info}`)\n\n try {\n /** Publish any existing migrations */\n await creator.publish(this.databasePath, (fileName) => {\n Logger.twoColumnLog(fileName, Logger.parse([['PUBLISHED', 'green']], '', false))\n })\n } catch {\n Logger.error([`ERROR: ${name} has no publishable migrations.`])\n }\n } catch (e) {\n const hint = Logger.parse([\n [' Did you forget to run', 'white'],\n [`\\`${await Resolver.getPakageInstallCommand(name)}\\``, 'grey']\n ], ' ', false)\n\n const error = Logger.parse([\n ['Package `', 'white'],\n [name, 'grey'],\n ['` not found', 'white']\n ], '', false)\n\n Logger.error(['ERROR: ' + error, hint + '?', String(e)])\n }\n }\n}\n","/// <reference path=\"../../core/src/app.globals.d.ts\" />\nimport { Knex } from 'knex'\n\ntype TFunction = (...args: any[]) => any\n\nexport interface TField {\n type: 'VAR_STRING' | 'BLOB' | 'DATETIME' | 'TIMESTAMP' | 'LONG' | 'JSON'\n length: number\n db: string\n table: string\n name: string\n string: TFunction,\n buffer: TFunction\n geometry: TFunction\n}\n\nexport interface TBaseConfig {\n client: 'mysql' | 'mysql2' | 'sqlite3' | 'oracle' | 'mariadb' | 'pg'\n connection: {\n typeCast?(field: TField, next: TFunction): any\n dateStrings?: boolean\n }\n pool?: {\n afterCreate: (connection: TConfig, callback: (val: any, con: any) => void) => Promise<any>\n } | undefined\n connections?: Record<string, TConfig>\n migrations?: {\n table: string\n path: string\n },\n factories?: {\n path: string\n },\n seeders?: {\n path: string\n },\n models?: {\n path: string\n }\n}\n\nexport type TConfig = TBaseConfig & ({\n client: 'pg'\n connection: Knex.PgConnectionConfig\n} | {\n client: 'oracle'\n connection: Knex.OracleDbConnectionConfig\n} | {\n client: 'mysql2'\n connection: Knex.MySql2ConnectionConfig\n} | {\n client: 'mysql'\n connection: Knex.MySqlConnectionConfig\n} | {\n client: 'sqlite3'\n connection: Knex.Sqlite3ConnectionConfig\n useNullAsDefault?: boolean\n} | {\n client: 'mariadb'\n connection: Knex.MariaSqlConnectionConfig\n useNullAsDefault?: boolean\n})\n\nexport const arquebusConfig = (config: any) => {\n return {\n sqlite: {\n client: config.connections.sqlite.driver,\n connection: <Knex.Sqlite3ConnectionConfig>{\n filename: database_path(config.connections.sqlite.database),\n debug: config.connections.sqlite.debug,\n flags: config.connections.sqlite.flags,\n options: config.connections.sqlite.options,\n expirationChecker: config.connections.sqlite.expirationChecker\n },\n useNullAsDefault: config.connections.sqlite.useNullAsDefault,\n },\n mysql: {\n client: config.connections.mysql.driver,\n connection: <Knex.MySql2ConnectionConfig>{\n host: config.connections.mysql.host ?? 'localhost',\n port: config.connections.mysql.port ?? 3306,\n user: config.connections.mysql.username ?? 'root',\n password: config.connections.mysql.password,\n database: config.connections.mysql.database,\n charset: config.connections.mysql.charset,\n socketPath: config.connections.mysql.unix_socket,\n localAddress: config.connections.mysql.url,\n },\n },\n mariadb: {\n client: config.connections.mariadb.driver,\n connection: <Knex.MariaSqlConnectionConfig>{\n host: config.connections.mariadb.host ?? 'localhost',\n port: config.connections.mariadb.port ?? 3306,\n user: config.connections.mariadb.username ?? 'root',\n password: config.connections.mariadb.password,\n database: config.connections.mariadb.database,\n charset: config.connections.mariadb.charset,\n socketPath: config.connections.mariadb.unix_socket,\n localAddress: config.connections.mariadb.url,\n expirationChecker: config.connections.mariadb.expirationChecker\n },\n },\n pgsql: {\n client: 'pg',\n connection: <Knex.PgConnectionConfig>{\n host: config.connections.pgsql.host ?? 'localhost',\n port: config.connections.pgsql.port ?? 3306,\n user: config.connections.pgsql.username ?? 'root',\n password: config.connections.pgsql.password,\n database: config.connections.pgsql.database,\n charset: config.connections.mysql.charset,\n connectionString: config.connections.pgsql.url,\n expirationChecker: config.connections.pgsql.expirationChecker\n },\n }\n } as unknown as TBaseConfig\n}\n","import { Model as BaseModel } from '@h3ravel/arquebus'\n\nexport class Model<M extends BaseModel = any> extends BaseModel {\n /**\n * Retrieve the model for a bound value.\n * \n * @param {any} value \n * @param {String|null} field \n * @returns \n */\n public resolveRouteBinding (value: any, field: undefined | string | null = null): Promise<M> {\n return this.newQuery().where(field ?? 'ids', value).firstOrFail()! as Promise<M>\n }\n}\n","import { MigrateCommand } from '../Commands/MigrateCommand'\nimport { ServiceProvider } from '@h3ravel/core'\nimport { arquebus } from '@h3ravel/arquebus'\nimport { arquebusConfig } from '../Configuration'\n\n/**\n * Database connection, ORM, migrations.\n * \n * Register DatabaseManager and QueryBuilder if required.\n * Set up ORM models and relationships.\n * Register migration and seeder commands.\n * \n */\nexport class DatabaseServiceProvider extends ServiceProvider {\n public static priority = 994\n\n register () {\n const config = this.app.make('config')\n\n const connection = Object.entries(arquebusConfig(config.get('database')))\n .find(([client]) => client === config.get('database.default'))\n ?.at(1)\n\n if (connection) {\n arquebus.addConnection(connection)\n }\n\n /** Register Musket Commands */\n this.commands([MigrateCommand])\n }\n}\n"],"mappings":"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"}
|
package/dist/index.d.cts
CHANGED
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["config","BaseModel","config"],"sources":["../src/Commands/MigrateCommand.ts","../src/Configuration.ts","../src/Model.ts","../src/Providers/DatabaseServiceProvider.ts"],"sourcesContent":["import { FileSystem, Logger, Resolver } from '@h3ravel/shared'\nimport { Migrate, MigrationCreator } from '@h3ravel/arquebus/migrations'\nimport { TBaseConfig, arquebusConfig } from '..'\n\nimport { ConsoleCommand } from '@h3ravel/core'\nimport path from 'node:path'\n\nexport class MigrateCommand extends ConsoleCommand {\n /**\n * The current database connection\n */\n private connection!: TBaseConfig\n\n /** \n * The base path for all database operations\n */\n private databasePath: string = database_path()\n\n /**\n * The name and signature of the console command.\n *\n * @var string\n */\n protected signature: string = `migrate:\n {fresh : Drop all tables and re-run all migrations.}\n {install : Create the migration repository.}\n {refresh : Reset and re-run all migrations.}\n {reset : Rollback all database migrations.}\n {rollback : Rollback the last database migration.}\n {status : Show the status of each migration.}\n {publish : Publish any migration files from installed packages. | {package : The package to publish migrations from}}\n {^--s|seed : Seed the database}\n {^--c|connection=mysql : The database connection to use}\n `\n /**\n * The console command description.\n *\n * @var string\n */\n protected description: string = 'Run all pending migrations.'\n\n /**\n * Execute the console command.\n */\n public async handle () {\n const command = (this.dictionary.name ?? this.dictionary.baseCommand) as never\n\n this.connection = Object.entries(arquebusConfig(config('database')))\n .find(([client]) => client === config('database.default'))\n ?.at(1)\n\n this.connection.migrations = {\n path: 'migrations',\n table: 'migrations',\n }\n\n const methods = {\n migrate: 'migrateRun',\n fresh: 'migrateFresh',\n install: 'migrateInstall',\n refresh: 'migrateRefresh',\n reset: 'migrateReset',\n rollback: 'migrateRollback',\n status: 'migrateStatus',\n publish: 'migratePublish',\n } as const\n\n await (this as any)?.[methods[command]]()\n }\n\n /**\n * Run all pending migrations.\n */\n protected async migrateRun () {\n try {\n await new Migrate(this.databasePath).run(this.connection, this.options(), true)\n } catch (e) {\n Logger.error('ERROR: ' + e)\n }\n }\n\n /**\n * Drop all tables and re-run all migrations.\n */\n protected async migrateFresh () {\n try {\n await new Migrate(this.databasePath).fresh(this.connection, this.options(), true)\n } catch (e) {\n Logger.error('ERROR: ' + e)\n }\n }\n\n /**\n * Create the migration repository.\n */\n protected async migrateInstall () {\n try {\n const migrate = new Migrate(this.databasePath)\n const { migrator } = await migrate.setupConnection(this.connection)\n await migrate.prepareDatabase(migrator)\n\n Logger.success('Migration repository installed.')\n } catch (e) {\n Logger.error('ERROR: ' + e)\n }\n }\n\n /**\n * Reset and re-run all migrations.\n */\n protected async migrateRefresh () {\n try {\n await new Migrate(this.databasePath).refresh(this.connection, this.options(), true)\n } catch (e) {\n Logger.error('ERROR: ' + e)\n }\n }\n\n /**\n * Rollback all database migrations.\n */\n protected async migrateReset () {\n try {\n await new Migrate(this.databasePath).reset(this.connection, this.options(), true)\n } catch (e) {\n Logger.error('ERROR: ' + e)\n }\n }\n\n /**\n * Rollback the last database migration.\n */\n protected async migrateRollback () {\n try {\n await new Migrate(this.databasePath).rollback(this.connection, this.options(), true)\n } catch (e) {\n Logger.error('ERROR: ' + e)\n }\n }\n\n /**\n * Show the status of each migration.\n */\n protected async migrateStatus () {\n const migrations = await new Migrate(this.databasePath, undefined, (msg, sts) => {\n const hint = Logger.parse([\n [' Did you forget to run', 'white'],\n ['`musket migrate:install`?', 'grey']\n ], ' ', false)\n\n if (sts) Logger[sts](msg + hint, sts === 'error', true)\n }).status(this.connection, this.options(), true)\n\n try {\n if (migrations.length > 0) {\n Logger.twoColumnLog('Migration name', 'Batch / Status')\n\n migrations.forEach(migration => {\n const status = migration.ran\n ? Logger.parse([[`[${migration.batch}]`, 'white'], ['Ran', 'green']], ' ', false)\n : Logger.parse([['Pending', 'yellow']], '', false)\n Logger.twoColumnLog(migration.name, status)\n })\n }\n else {\n Logger.info('No migrations found')\n }\n } catch (e) {\n Logger.error(['ERROR: ' + e, 'Did you run musket migrate:install'])\n }\n }\n\n\n\n /**\n * Publish any migration files from installed packages.\n */\n protected async migratePublish () {\n const name = this.argument('package')\n\n try {\n /** Find the requested package */\n const packagePath = FileSystem.findModulePkg(name) ?? null\n if (!packagePath) throw new Error('Package not found')\n\n /** Get the package,json and instanciate the migration creator */\n const pkgJson = (await import(path.join(packagePath, 'package.json')))\n const creator = new MigrationCreator(path.join(packagePath, pkgJson.migrations ?? 'migrations'))\n\n const info = Logger.parse([\n [' Publishing migrations from', 'white'],\n [`${pkgJson.name}@${pkgJson.version}`, ['italic', 'gray']]\n ], ' ', false)\n\n Logger.info(`INFO: ${info}`)\n\n try {\n /** Publish any existing migrations */\n await creator.publish(this.databasePath, (fileName) => {\n Logger.twoColumnLog(fileName, Logger.parse([['PUBLISHED', 'green']], '', false))\n })\n } catch {\n Logger.error([`ERROR: ${name} has no publishable migrations.`])\n }\n } catch (e) {\n const hint = Logger.parse([\n [' Did you forget to run', 'white'],\n [`\\`${await Resolver.getPakageInstallCommand(name)}\\``, 'grey']\n ], ' ', false)\n\n const error = Logger.parse([\n ['Package `', 'white'],\n [name, 'grey'],\n ['` not found', 'white']\n ], '', false)\n\n Logger.error(['ERROR: ' + error, hint + '?', String(e)])\n }\n }\n}\n","/// <reference path=\"../../core/src/app.globals.d.ts\" />\nimport { Knex } from 'knex'\n\ntype TFunction = (...args: any[]) => any\n\nexport interface TField {\n type: 'VAR_STRING' | 'BLOB' | 'DATETIME' | 'TIMESTAMP' | 'LONG' | 'JSON'\n length: number\n db: string\n table: string\n name: string\n string: TFunction,\n buffer: TFunction\n geometry: TFunction\n}\n\nexport interface TBaseConfig {\n client: 'mysql' | 'mysql2' | 'sqlite3' | 'oracle' | 'mariadb' | 'pg'\n connection: {\n typeCast?(field: TField, next: TFunction): any\n dateStrings?: boolean\n }\n pool?: {\n afterCreate: (connection: TConfig, callback: (val: any, con: any) => void) => Promise<any>\n } | undefined\n connections?: Record<string, TConfig>\n migrations?: {\n table: string\n path: string\n },\n factories?: {\n path: string\n },\n seeders?: {\n path: string\n },\n models?: {\n path: string\n }\n}\n\nexport type TConfig = TBaseConfig & ({\n client: 'pg'\n connection: Knex.PgConnectionConfig\n} | {\n client: 'oracle'\n connection: Knex.OracleDbConnectionConfig\n} | {\n client: 'mysql2'\n connection: Knex.MySql2ConnectionConfig\n} | {\n client: 'mysql'\n connection: Knex.MySqlConnectionConfig\n} | {\n client: 'sqlite3'\n connection: Knex.Sqlite3ConnectionConfig\n useNullAsDefault?: boolean\n} | {\n client: 'mariadb'\n connection: Knex.MariaSqlConnectionConfig\n useNullAsDefault?: boolean\n})\n\nexport const arquebusConfig = (config: any) => {\n return {\n sqlite: {\n client: config.connections.sqlite.driver,\n connection: <Knex.Sqlite3ConnectionConfig>{\n filename: database_path(config.connections.sqlite.database),\n debug: config.connections.sqlite.debug,\n flags: config.connections.sqlite.flags,\n options: config.connections.sqlite.options,\n expirationChecker: config.connections.sqlite.expirationChecker\n },\n useNullAsDefault: config.connections.sqlite.useNullAsDefault,\n },\n mysql: {\n client: config.connections.mysql.driver,\n connection: <Knex.MySql2ConnectionConfig>{\n host: config.connections.mysql.host ?? 'localhost',\n port: config.connections.mysql.port ?? 3306,\n user: config.connections.mysql.username ?? 'root',\n password: config.connections.mysql.password,\n database: config.connections.mysql.database,\n charset: config.connections.mysql.charset,\n socketPath: config.connections.mysql.unix_socket,\n localAddress: config.connections.mysql.url,\n },\n },\n mariadb: {\n client: config.connections.mariadb.driver,\n connection: <Knex.MariaSqlConnectionConfig>{\n host: config.connections.mariadb.host ?? 'localhost',\n port: config.connections.mariadb.port ?? 3306,\n user: config.connections.mariadb.username ?? 'root',\n password: config.connections.mariadb.password,\n database: config.connections.mariadb.database,\n charset: config.connections.mariadb.charset,\n socketPath: config.connections.mariadb.unix_socket,\n localAddress: config.connections.mariadb.url,\n expirationChecker: config.connections.mariadb.expirationChecker\n },\n },\n pgsql: {\n client: 'pg',\n connection: <Knex.PgConnectionConfig>{\n host: config.connections.pgsql.host ?? 'localhost',\n port: config.connections.pgsql.port ?? 3306,\n user: config.connections.pgsql.username ?? 'root',\n password: config.connections.pgsql.password,\n database: config.connections.pgsql.database,\n charset: config.connections.mysql.charset,\n connectionString: config.connections.pgsql.url,\n expirationChecker: config.connections.pgsql.expirationChecker\n },\n }\n } as unknown as TBaseConfig\n}\n","import { Model as BaseModel } from '@h3ravel/arquebus'\n\nexport class Model<M extends BaseModel = any> extends BaseModel {\n /**\n * Retrieve the model for a bound value.\n * \n * @param {any} value \n * @param {String|null} field \n * @returns \n */\n public resolveRouteBinding (value: any, field: undefined | string | null = null): Promise<M> {\n return this.newQuery().where(field ?? 'ids', value).firstOrFail()! as Promise<M>\n }\n}\n","import { MigrateCommand } from '../Commands/MigrateCommand'\nimport { ServiceProvider } from '@h3ravel/core'\nimport { arquebus } from '@h3ravel/arquebus'\nimport { arquebusConfig } from '../Configuration'\n\n/**\n * Database connection, ORM, migrations.\n * \n * Register DatabaseManager and QueryBuilder if required.\n * Set up ORM models and relationships.\n * Register migration and seeder commands.\n * \n */\nexport class DatabaseServiceProvider extends ServiceProvider {\n public static priority = 994\n\n register () {\n const config = this.app.make('config')\n\n const connection = Object.entries(arquebusConfig(config.get('database')))\n .find(([client]) => client === config.get('database.default'))\n ?.at(1)\n\n if (connection) {\n arquebus.addConnection(connection)\n }\n\n /** Register Musket Commands */\n this.commands([MigrateCommand])\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["config","BaseModel","config"],"sources":["../src/Commands/MigrateCommand.ts","../src/Configuration.ts","../src/Model.ts","../src/Providers/DatabaseServiceProvider.ts"],"sourcesContent":["import { FileSystem, Logger, Resolver } from '@h3ravel/shared'\nimport { Migrate, MigrationCreator } from '@h3ravel/arquebus/migrations'\nimport { TBaseConfig, arquebusConfig } from '..'\n\nimport { ConsoleCommand } from '@h3ravel/core'\nimport path from 'node:path'\n\nexport class MigrateCommand extends ConsoleCommand {\n /**\n * The current database connection\n */\n private connection!: TBaseConfig\n\n /** \n * The base path for all database operations\n */\n private databasePath: string = database_path()\n\n /**\n * The name and signature of the console command.\n *\n * @var string\n */\n protected signature: string = `migrate:\n {fresh : Drop all tables and re-run all migrations.}\n {install : Create the migration repository.}\n {refresh : Reset and re-run all migrations.}\n {reset : Rollback all database migrations.}\n {rollback : Rollback the last database migration.}\n {status : Show the status of each migration.}\n {publish : Publish any migration files from installed packages. | {package : The package to publish migrations from}}\n {^--s|seed : Seed the database}\n {^--c|connection=mysql : The database connection to use}\n `\n /**\n * The console command description.\n *\n * @var string\n */\n protected description: string = 'Run all pending migrations.'\n\n /**\n * Execute the console command.\n */\n public async handle (this: any) {\n const command = (this.dictionary.name ?? this.dictionary.baseCommand) as never\n\n this.connection = Object.entries(arquebusConfig(config('database')))\n .find(([client]) => client === config('database.default'))\n ?.at(1)\n\n this.connection.migrations = {\n path: 'migrations',\n table: 'migrations',\n }\n\n const methods = {\n migrate: 'migrateRun',\n fresh: 'migrateFresh',\n install: 'migrateInstall',\n refresh: 'migrateRefresh',\n reset: 'migrateReset',\n rollback: 'migrateRollback',\n status: 'migrateStatus',\n publish: 'migratePublish',\n } as const\n\n await this[methods[command]]()\n }\n\n /**\n * Run all pending migrations.\n */\n protected async migrateRun () {\n try {\n await new Migrate(this.databasePath).run(this.connection, this.options(), true)\n } catch (e) {\n Logger.error('ERROR: ' + e)\n }\n }\n\n /**\n * Drop all tables and re-run all migrations.\n */\n protected async migrateFresh () {\n try {\n await new Migrate(this.databasePath).fresh(this.connection, this.options(), true)\n } catch (e) {\n Logger.error('ERROR: ' + e)\n }\n }\n\n /**\n * Create the migration repository.\n */\n protected async migrateInstall () {\n try {\n const migrate = new Migrate(this.databasePath)\n const { migrator } = await migrate.setupConnection(this.connection)\n await migrate.prepareDatabase(migrator)\n\n Logger.success('Migration repository installed.')\n } catch (e) {\n Logger.error('ERROR: ' + e)\n }\n }\n\n /**\n * Reset and re-run all migrations.\n */\n protected async migrateRefresh () {\n try {\n await new Migrate(this.databasePath).refresh(this.connection, this.options(), true)\n } catch (e) {\n Logger.error('ERROR: ' + e)\n }\n }\n\n /**\n * Rollback all database migrations.\n */\n protected async migrateReset () {\n try {\n await new Migrate(this.databasePath).reset(this.connection, this.options(), true)\n } catch (e) {\n Logger.error('ERROR: ' + e)\n }\n }\n\n /**\n * Rollback the last database migration.\n */\n protected async migrateRollback () {\n try {\n await new Migrate(this.databasePath).rollback(this.connection, this.options(), true)\n } catch (e) {\n Logger.error('ERROR: ' + e)\n }\n }\n\n /**\n * Show the status of each migration.\n */\n protected async migrateStatus () {\n const migrations = await new Migrate(this.databasePath, undefined, (msg, sts) => {\n const hint = Logger.parse([\n [' Did you forget to run', 'white'],\n ['`musket migrate:install`?', 'grey']\n ], ' ', false)\n\n if (sts) Logger[sts](msg + hint, sts === 'error', true)\n }).status(this.connection, this.options(), true)\n\n try {\n if (migrations.length > 0) {\n Logger.twoColumnLog('Migration name', 'Batch / Status')\n\n migrations.forEach(migration => {\n const status = migration.ran\n ? Logger.parse([[`[${migration.batch}]`, 'white'], ['Ran', 'green']], ' ', false)\n : Logger.parse([['Pending', 'yellow']], '', false)\n Logger.twoColumnLog(migration.name, status)\n })\n }\n else {\n Logger.info('No migrations found')\n }\n } catch (e) {\n Logger.error(['ERROR: ' + e, 'Did you run musket migrate:install'])\n }\n }\n\n\n\n /**\n * Publish any migration files from installed packages.\n */\n protected async migratePublish () {\n const name = this.argument('package')\n\n try {\n /** Find the requested package */\n const packagePath = FileSystem.findModulePkg(name) ?? null\n if (!packagePath) throw new Error('Package not found')\n\n /** Get the package,json and instanciate the migration creator */\n const pkgJson = (await import(path.join(packagePath, 'package.json')))\n const creator = new MigrationCreator(path.join(packagePath, pkgJson.migrations ?? 'migrations'))\n\n const info = Logger.parse([\n [' Publishing migrations from', 'white'],\n [`${pkgJson.name}@${pkgJson.version}`, ['italic', 'gray']]\n ], ' ', false)\n\n Logger.info(`INFO: ${info}`)\n\n try {\n /** Publish any existing migrations */\n await creator.publish(this.databasePath, (fileName) => {\n Logger.twoColumnLog(fileName, Logger.parse([['PUBLISHED', 'green']], '', false))\n })\n } catch {\n Logger.error([`ERROR: ${name} has no publishable migrations.`])\n }\n } catch (e) {\n const hint = Logger.parse([\n [' Did you forget to run', 'white'],\n [`\\`${await Resolver.getPakageInstallCommand(name)}\\``, 'grey']\n ], ' ', false)\n\n const error = Logger.parse([\n ['Package `', 'white'],\n [name, 'grey'],\n ['` not found', 'white']\n ], '', false)\n\n Logger.error(['ERROR: ' + error, hint + '?', String(e)])\n }\n }\n}\n","/// <reference path=\"../../core/src/app.globals.d.ts\" />\nimport { Knex } from 'knex'\n\ntype TFunction = (...args: any[]) => any\n\nexport interface TField {\n type: 'VAR_STRING' | 'BLOB' | 'DATETIME' | 'TIMESTAMP' | 'LONG' | 'JSON'\n length: number\n db: string\n table: string\n name: string\n string: TFunction,\n buffer: TFunction\n geometry: TFunction\n}\n\nexport interface TBaseConfig {\n client: 'mysql' | 'mysql2' | 'sqlite3' | 'oracle' | 'mariadb' | 'pg'\n connection: {\n typeCast?(field: TField, next: TFunction): any\n dateStrings?: boolean\n }\n pool?: {\n afterCreate: (connection: TConfig, callback: (val: any, con: any) => void) => Promise<any>\n } | undefined\n connections?: Record<string, TConfig>\n migrations?: {\n table: string\n path: string\n },\n factories?: {\n path: string\n },\n seeders?: {\n path: string\n },\n models?: {\n path: string\n }\n}\n\nexport type TConfig = TBaseConfig & ({\n client: 'pg'\n connection: Knex.PgConnectionConfig\n} | {\n client: 'oracle'\n connection: Knex.OracleDbConnectionConfig\n} | {\n client: 'mysql2'\n connection: Knex.MySql2ConnectionConfig\n} | {\n client: 'mysql'\n connection: Knex.MySqlConnectionConfig\n} | {\n client: 'sqlite3'\n connection: Knex.Sqlite3ConnectionConfig\n useNullAsDefault?: boolean\n} | {\n client: 'mariadb'\n connection: Knex.MariaSqlConnectionConfig\n useNullAsDefault?: boolean\n})\n\nexport const arquebusConfig = (config: any) => {\n return {\n sqlite: {\n client: config.connections.sqlite.driver,\n connection: <Knex.Sqlite3ConnectionConfig>{\n filename: database_path(config.connections.sqlite.database),\n debug: config.connections.sqlite.debug,\n flags: config.connections.sqlite.flags,\n options: config.connections.sqlite.options,\n expirationChecker: config.connections.sqlite.expirationChecker\n },\n useNullAsDefault: config.connections.sqlite.useNullAsDefault,\n },\n mysql: {\n client: config.connections.mysql.driver,\n connection: <Knex.MySql2ConnectionConfig>{\n host: config.connections.mysql.host ?? 'localhost',\n port: config.connections.mysql.port ?? 3306,\n user: config.connections.mysql.username ?? 'root',\n password: config.connections.mysql.password,\n database: config.connections.mysql.database,\n charset: config.connections.mysql.charset,\n socketPath: config.connections.mysql.unix_socket,\n localAddress: config.connections.mysql.url,\n },\n },\n mariadb: {\n client: config.connections.mariadb.driver,\n connection: <Knex.MariaSqlConnectionConfig>{\n host: config.connections.mariadb.host ?? 'localhost',\n port: config.connections.mariadb.port ?? 3306,\n user: config.connections.mariadb.username ?? 'root',\n password: config.connections.mariadb.password,\n database: config.connections.mariadb.database,\n charset: config.connections.mariadb.charset,\n socketPath: config.connections.mariadb.unix_socket,\n localAddress: config.connections.mariadb.url,\n expirationChecker: config.connections.mariadb.expirationChecker\n },\n },\n pgsql: {\n client: 'pg',\n connection: <Knex.PgConnectionConfig>{\n host: config.connections.pgsql.host ?? 'localhost',\n port: config.connections.pgsql.port ?? 3306,\n user: config.connections.pgsql.username ?? 'root',\n password: config.connections.pgsql.password,\n database: config.connections.pgsql.database,\n charset: config.connections.mysql.charset,\n connectionString: config.connections.pgsql.url,\n expirationChecker: config.connections.pgsql.expirationChecker\n },\n }\n } as unknown as TBaseConfig\n}\n","import { Model as BaseModel } from '@h3ravel/arquebus'\n\nexport class Model<M extends BaseModel = any> extends BaseModel {\n /**\n * Retrieve the model for a bound value.\n * \n * @param {any} value \n * @param {String|null} field \n * @returns \n */\n public resolveRouteBinding (value: any, field: undefined | string | null = null): Promise<M> {\n return this.newQuery().where(field ?? 'ids', value).firstOrFail()! as Promise<M>\n }\n}\n","import { MigrateCommand } from '../Commands/MigrateCommand'\nimport { ServiceProvider } from '@h3ravel/core'\nimport { arquebus } from '@h3ravel/arquebus'\nimport { arquebusConfig } from '../Configuration'\n\n/**\n * Database connection, ORM, migrations.\n * \n * Register DatabaseManager and QueryBuilder if required.\n * Set up ORM models and relationships.\n * Register migration and seeder commands.\n * \n */\nexport class DatabaseServiceProvider extends ServiceProvider {\n public static priority = 994\n\n register () {\n const config = this.app.make('config')\n\n const connection = Object.entries(arquebusConfig(config.get('database')))\n .find(([client]) => client === config.get('database.default'))\n ?.at(1)\n\n if (connection) {\n arquebus.addConnection(connection)\n }\n\n /** Register Musket Commands */\n this.commands([MigrateCommand])\n }\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@h3ravel/database",
|
|
3
|
-
"version": "11.2.
|
|
3
|
+
"version": "11.2.8",
|
|
4
4
|
"description": "Modeling data and migration system for H3ravel.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -40,9 +40,9 @@
|
|
|
40
40
|
"sqlite3": "^5.1.7"
|
|
41
41
|
},
|
|
42
42
|
"peerDependencies": {
|
|
43
|
-
"@h3ravel/core": "^1.11.
|
|
44
|
-
"@h3ravel/
|
|
45
|
-
"@h3ravel/
|
|
43
|
+
"@h3ravel/core": "^1.11.1",
|
|
44
|
+
"@h3ravel/filesystem": "^0.4.1",
|
|
45
|
+
"@h3ravel/support": "^0.10.4"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
48
|
"typescript": "^5.9.2"
|