@conorroberts/utils 0.0.107 → 0.0.108

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.
@@ -13,6 +13,7 @@ interface MigrateConnectionOptions {
13
13
  }
14
14
  interface MigrateSharedOptions<TSchema extends DrizzleSchema> extends MigrateConnectionOptions {
15
15
  deleteOrder?: SchemaTableName<TSchema>[];
16
+ migrationsTable?: string;
16
17
  }
17
18
  type CleanMigrateOptions<TSchema extends DrizzleSchema> = MigrateSharedOptions<TSchema> & {
18
19
  clean: true;
@@ -77,11 +77,12 @@ const cleanDatabase = async (db, options) => {
77
77
  process.exit(1);
78
78
  }
79
79
  const tableNames = listSchemaTables(options.schema);
80
- if (tableNames.length === 0) {
80
+ const allTableNames = options.migrationsTable ? [...tableNames, options.migrationsTable] : tableNames;
81
+ if (allTableNames.length === 0) {
81
82
  consola.log("Clean requested, but no tables were found in the provided Drizzle schema.");
82
83
  return;
83
84
  }
84
- const ordered = buildDeleteOrder(tableNames, options.deleteOrder ?? []);
85
+ const ordered = buildDeleteOrder(allTableNames, options.deleteOrder ?? []);
85
86
  consola.warn("WARNING: This will delete and drop ALL tables from the database.");
86
87
  consola.log(`Database host: ${db.$client.config.host}`);
87
88
  consola.log("");
@@ -1 +1 @@
1
- {"version":3,"file":"migrate.mjs","names":["ordered: TTableName[]","tableNames: Set<SchemaTableName<TSchema>>","results: DeleteResult[]"],"sources":["../../src/db/migrate.ts"],"sourcesContent":["import { consola } from \"consola\";\nimport { sql } from \"drizzle-orm\";\nimport { DrizzleQueryError } from \"drizzle-orm/errors\";\nimport { drizzle } from \"drizzle-orm/planetscale-serverless\";\nimport { migrate } from \"drizzle-orm/planetscale-serverless/migrator\";\nimport { getTableName } from \"drizzle-orm/table\";\nimport { resolve } from \"node:path\";\nimport type { DrizzleSchema } from \"./types\";\n\ntype SchemaTableName<TSchema extends DrizzleSchema> = TSchema[keyof TSchema][\"_\"][\"name\"];\n\ninterface MigrateConnectionOptions {\n migrationsFolder: string;\n host: string;\n username: string;\n password: string;\n}\n\ninterface MigrateSharedOptions<TSchema extends DrizzleSchema> extends MigrateConnectionOptions {\n deleteOrder?: SchemaTableName<TSchema>[];\n}\n\ntype CleanMigrateOptions<TSchema extends DrizzleSchema> = MigrateSharedOptions<TSchema> & {\n clean: true;\n schema: TSchema;\n};\n\ntype StandardMigrateOptions<TSchema extends DrizzleSchema> = MigrateSharedOptions<TSchema> & {\n clean?: false;\n schema?: TSchema;\n};\n\ntype MigrateOptions<TSchema extends DrizzleSchema = DrizzleSchema> =\n | CleanMigrateOptions<TSchema>\n | StandardMigrateOptions<TSchema>;\n\ninterface DeleteResult {\n table: string;\n rowsDeleted: number;\n success: boolean;\n error?: string;\n}\n\nconst escapeIdentifier = (value: string): string => {\n return `\\`${value.replaceAll(\"`\", \"``\")}\\``;\n};\n\nconst parseError = (error: unknown): string => {\n if (error instanceof DrizzleQueryError) {\n if (error.cause instanceof Error) {\n return error.cause.message;\n }\n\n return error.message;\n }\n\n if (error instanceof Error) {\n return error.message;\n }\n\n return String(error);\n};\n\nconst buildDeleteOrder = <TTableName extends string>(tableNames: TTableName[], preferredOrder: TTableName[]) => {\n const seen = new Set<string>();\n const ordered: TTableName[] = [];\n\n for (const tableName of preferredOrder) {\n if (seen.has(tableName)) {\n continue;\n }\n\n seen.add(tableName);\n\n if (tableNames.includes(tableName)) {\n ordered.push(tableName);\n }\n }\n\n for (const tableName of tableNames) {\n if (!seen.has(tableName)) {\n ordered.push(tableName);\n }\n }\n\n return ordered;\n};\n\nconst listSchemaTables = <TSchema extends DrizzleSchema>(schema: TSchema): SchemaTableName<TSchema>[] => {\n const tableNames: Set<SchemaTableName<TSchema>> = new Set();\n const tables = Object.values(schema) as TSchema[keyof TSchema][];\n\n for (const table of tables) {\n const tableName = getTableName(table) as SchemaTableName<TSchema>;\n\n tableNames.add(tableName);\n }\n\n return Array.from(tableNames);\n};\n\nconst deleteTableRows = async (db: ReturnType<typeof drizzle>, tableNames: string[]): Promise<DeleteResult[]> => {\n const results: DeleteResult[] = [];\n\n for (const tableName of tableNames) {\n try {\n const rowsDeleted = await db.$count(sql.raw(tableName));\n\n await db.execute(sql.raw(`DELETE FROM ${tableName}`));\n\n results.push({\n table: tableName,\n rowsDeleted,\n success: true,\n });\n\n const status = rowsDeleted > 0 ? `[OK] Deleted ${rowsDeleted} rows` : \"[SKIP] Empty\";\n consola.log(`${status.padEnd(30)} from ${tableName}`);\n } catch (error) {\n const errorDetails = parseError(error) || String(error);\n\n results.push({\n table: tableName,\n rowsDeleted: 0,\n success: false,\n error: errorDetails,\n });\n\n consola.error(`[FAIL] Failed to delete from ${tableName}: ${errorDetails}`);\n }\n }\n\n return results;\n};\n\nconst dropTables = async (db: ReturnType<typeof drizzle>, tableNames: string[]): Promise<void> => {\n for (const tableName of tableNames) {\n try {\n await db.execute(sql.raw(`DROP TABLE IF EXISTS ${escapeIdentifier(tableName)}`));\n consola.log(`[OK] Dropped table ${tableName}`);\n } catch (error) {\n const errorDetails = parseError(error) || String(error);\n consola.error(`[FAIL] Failed to drop ${tableName}: ${errorDetails}`);\n }\n }\n};\n\nconst cleanDatabase = async (\n db: ReturnType<typeof drizzle>,\n options: CleanMigrateOptions<DrizzleSchema>,\n): Promise<void> => {\n if (process.env.UNSAFE_CONFIRM_DELETE !== \"true\") {\n consola.error('Refusing to clean database. Set UNSAFE_CONFIRM_DELETE=\"true\" to continue.');\n process.exit(1);\n }\n\n const tableNames = listSchemaTables(options.schema);\n\n if (tableNames.length === 0) {\n consola.log(\"Clean requested, but no tables were found in the provided Drizzle schema.\");\n return;\n }\n\n const ordered = buildDeleteOrder(tableNames, options.deleteOrder ?? []);\n\n consola.warn(\"WARNING: This will delete and drop ALL tables from the database.\");\n consola.log(`Database host: ${db.$client.config.host}`);\n\n consola.log(\"\");\n consola.log(\"Deleting table rows in order...\\n\");\n\n const results = await deleteTableRows(db, ordered);\n\n consola.log(\"\\nDropping tables in order...\\n\");\n await dropTables(db, ordered);\n\n const successCount = results.filter((result) => result.success).length;\n const totalRowsDeleted = results.reduce((sum, result) => sum + result.rowsDeleted, 0);\n\n consola.log(\"\");\n consola.log(\"=\".repeat(60));\n consola.log(\"SUMMARY\");\n consola.log(\"=\".repeat(60));\n consola.log(`Deletion phase: ${successCount} tables processed, ${totalRowsDeleted} rows deleted`);\n consola.success(\"Database is now empty and ready for migrations.\");\n};\n\nconst runMigrations = async <TSchema extends DrizzleSchema>(options: MigrateOptions<TSchema>) => {\n const db = drizzle({\n connection: {\n host: options.host,\n username: options.username,\n password: options.password,\n },\n });\n\n if (options.clean) {\n await cleanDatabase(db, options);\n }\n\n consola.log(\"Running database migrations...\");\n await migrate(db, { migrationsFolder: resolve(options.migrationsFolder) });\n consola.log(\"[OK] Migrations completed successfully!\");\n};\n\nexport { runMigrations };\nexport type { DrizzleSchema, MigrateOptions, SchemaTableName };\n"],"mappings":"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"}
1
+ {"version":3,"file":"migrate.mjs","names":["ordered: TTableName[]","tableNames: Set<SchemaTableName<TSchema>>","results: DeleteResult[]"],"sources":["../../src/db/migrate.ts"],"sourcesContent":["import { consola } from \"consola\";\nimport { sql } from \"drizzle-orm\";\nimport { DrizzleQueryError } from \"drizzle-orm/errors\";\nimport { drizzle } from \"drizzle-orm/planetscale-serverless\";\nimport { migrate } from \"drizzle-orm/planetscale-serverless/migrator\";\nimport { getTableName } from \"drizzle-orm/table\";\nimport { resolve } from \"node:path\";\nimport type { DrizzleSchema } from \"./types\";\n\ntype SchemaTableName<TSchema extends DrizzleSchema> = TSchema[keyof TSchema][\"_\"][\"name\"];\n\ninterface MigrateConnectionOptions {\n migrationsFolder: string;\n host: string;\n username: string;\n password: string;\n}\n\ninterface MigrateSharedOptions<TSchema extends DrizzleSchema> extends MigrateConnectionOptions {\n deleteOrder?: SchemaTableName<TSchema>[];\n migrationsTable?: string;\n}\n\ntype CleanMigrateOptions<TSchema extends DrizzleSchema> = MigrateSharedOptions<TSchema> & {\n clean: true;\n schema: TSchema;\n};\n\ntype StandardMigrateOptions<TSchema extends DrizzleSchema> = MigrateSharedOptions<TSchema> & {\n clean?: false;\n schema?: TSchema;\n};\n\ntype MigrateOptions<TSchema extends DrizzleSchema = DrizzleSchema> =\n | CleanMigrateOptions<TSchema>\n | StandardMigrateOptions<TSchema>;\n\ninterface DeleteResult {\n table: string;\n rowsDeleted: number;\n success: boolean;\n error?: string;\n}\n\nconst escapeIdentifier = (value: string): string => {\n return `\\`${value.replaceAll(\"`\", \"``\")}\\``;\n};\n\nconst parseError = (error: unknown): string => {\n if (error instanceof DrizzleQueryError) {\n if (error.cause instanceof Error) {\n return error.cause.message;\n }\n\n return error.message;\n }\n\n if (error instanceof Error) {\n return error.message;\n }\n\n return String(error);\n};\n\nconst buildDeleteOrder = <TTableName extends string>(tableNames: TTableName[], preferredOrder: TTableName[]) => {\n const seen = new Set<string>();\n const ordered: TTableName[] = [];\n\n for (const tableName of preferredOrder) {\n if (seen.has(tableName)) {\n continue;\n }\n\n seen.add(tableName);\n\n if (tableNames.includes(tableName)) {\n ordered.push(tableName);\n }\n }\n\n for (const tableName of tableNames) {\n if (!seen.has(tableName)) {\n ordered.push(tableName);\n }\n }\n\n return ordered;\n};\n\nconst listSchemaTables = <TSchema extends DrizzleSchema>(schema: TSchema): SchemaTableName<TSchema>[] => {\n const tableNames: Set<SchemaTableName<TSchema>> = new Set();\n const tables = Object.values(schema) as TSchema[keyof TSchema][];\n\n for (const table of tables) {\n const tableName = getTableName(table) as SchemaTableName<TSchema>;\n\n tableNames.add(tableName);\n }\n\n return Array.from(tableNames);\n};\n\nconst deleteTableRows = async (db: ReturnType<typeof drizzle>, tableNames: string[]): Promise<DeleteResult[]> => {\n const results: DeleteResult[] = [];\n\n for (const tableName of tableNames) {\n try {\n const rowsDeleted = await db.$count(sql.raw(tableName));\n\n await db.execute(sql.raw(`DELETE FROM ${tableName}`));\n\n results.push({\n table: tableName,\n rowsDeleted,\n success: true,\n });\n\n const status = rowsDeleted > 0 ? `[OK] Deleted ${rowsDeleted} rows` : \"[SKIP] Empty\";\n consola.log(`${status.padEnd(30)} from ${tableName}`);\n } catch (error) {\n const errorDetails = parseError(error) || String(error);\n\n results.push({\n table: tableName,\n rowsDeleted: 0,\n success: false,\n error: errorDetails,\n });\n\n consola.error(`[FAIL] Failed to delete from ${tableName}: ${errorDetails}`);\n }\n }\n\n return results;\n};\n\nconst dropTables = async (db: ReturnType<typeof drizzle>, tableNames: string[]): Promise<void> => {\n for (const tableName of tableNames) {\n try {\n await db.execute(sql.raw(`DROP TABLE IF EXISTS ${escapeIdentifier(tableName)}`));\n consola.log(`[OK] Dropped table ${tableName}`);\n } catch (error) {\n const errorDetails = parseError(error) || String(error);\n consola.error(`[FAIL] Failed to drop ${tableName}: ${errorDetails}`);\n }\n }\n};\n\nconst cleanDatabase = async (\n db: ReturnType<typeof drizzle>,\n options: CleanMigrateOptions<DrizzleSchema>,\n): Promise<void> => {\n if (process.env.UNSAFE_CONFIRM_DELETE !== \"true\") {\n consola.error('Refusing to clean database. Set UNSAFE_CONFIRM_DELETE=\"true\" to continue.');\n process.exit(1);\n }\n\n const tableNames = listSchemaTables(options.schema);\n const allTableNames = options.migrationsTable ? [...tableNames, options.migrationsTable] : tableNames;\n\n if (allTableNames.length === 0) {\n consola.log(\"Clean requested, but no tables were found in the provided Drizzle schema.\");\n return;\n }\n\n const ordered = buildDeleteOrder(allTableNames, options.deleteOrder ?? []);\n\n consola.warn(\"WARNING: This will delete and drop ALL tables from the database.\");\n consola.log(`Database host: ${db.$client.config.host}`);\n\n consola.log(\"\");\n consola.log(\"Deleting table rows in order...\\n\");\n\n const results = await deleteTableRows(db, ordered);\n\n consola.log(\"\\nDropping tables in order...\\n\");\n await dropTables(db, ordered);\n\n const successCount = results.filter((result) => result.success).length;\n const totalRowsDeleted = results.reduce((sum, result) => sum + result.rowsDeleted, 0);\n\n consola.log(\"\");\n consola.log(\"=\".repeat(60));\n consola.log(\"SUMMARY\");\n consola.log(\"=\".repeat(60));\n consola.log(`Deletion phase: ${successCount} tables processed, ${totalRowsDeleted} rows deleted`);\n consola.success(\"Database is now empty and ready for migrations.\");\n};\n\nconst runMigrations = async <TSchema extends DrizzleSchema>(options: MigrateOptions<TSchema>) => {\n const db = drizzle({\n connection: {\n host: options.host,\n username: options.username,\n password: options.password,\n },\n });\n\n if (options.clean) {\n await cleanDatabase(db, options);\n }\n\n consola.log(\"Running database migrations...\");\n await migrate(db, { migrationsFolder: resolve(options.migrationsFolder) });\n consola.log(\"[OK] Migrations completed successfully!\");\n};\n\nexport { runMigrations };\nexport type { DrizzleSchema, MigrateOptions, SchemaTableName };\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@conorroberts/utils",
3
- "version": "0.0.107",
3
+ "version": "0.0.108",
4
4
  "private": false,
5
5
  "description": "",
6
6
  "license": "ISC",