{"version":3,"file":"migration-report.mjs","names":[],"sources":["../../../../src/libs/cli/services/migration-report.ts"],"sourcesContent":["import type {\n\tMigrationAssessment,\n\tMigrationRiskReason,\n} from \"../../collection/migration/types.js\";\nimport cliLogger from \"../logger.js\";\n\n/** Formats one structured collection migration reason for CLI output. */\nexport const describeMigrationRiskReason = (\n\treason: MigrationRiskReason,\n): string => {\n\tconst target = reason.columnName\n\t\t? `${reason.tableName}.${reason.columnName}`\n\t\t: reason.indexName\n\t\t\t? `${reason.tableName}.${reason.indexName}`\n\t\t\t: reason.tableName;\n\n\tconst descriptions: Record<MigrationRiskReason[\"code\"], string> = {\n\t\tcreate_table: `create table ${target}`,\n\t\tremove_table: `drop table ${target}`,\n\t\tadd_nullable_column: `add nullable column ${target}`,\n\t\tadd_constrained_column: `add required or constrained column ${target}`,\n\t\tchange_column_default: `change default for ${target}`,\n\t\trelax_column_nullability: `make ${target} nullable`,\n\t\ttighten_column_nullability: `make ${target} required`,\n\t\tmodify_column_type: `change the type of ${target}`,\n\t\tmodify_column_constraint: `change a unique or foreign-key constraint on ${target}`,\n\t\trecreate_column: `drop and recreate column ${target}`,\n\t\tremove_column: `drop column ${target}`,\n\t\tadd_index: `add index ${target}`,\n\t\tadd_unique_index: `add unique index ${target}`,\n\t\tremove_index: `remove index ${target}`,\n\t\tremove_unique_index: `remove unique index ${target}`,\n\t};\n\n\treturn descriptions[reason.code];\n};\n\n/** Prints the assessed collection operations grouped by their risk level. */\nexport const reportMigrationAssessment = (\n\tassessment: MigrationAssessment,\n): void => {\n\tfor (const risk of [\"safe\", \"warning\", \"destructive\"] as const) {\n\t\tconst reasons = assessment.reasons.filter((reason) => reason.risk === risk);\n\t\tif (reasons.length === 0) continue;\n\n\t\tconst heading = `${risk[0]?.toUpperCase()}${risk.slice(1)} collection changes:`;\n\t\tif (risk === \"safe\") cliLogger.info(heading);\n\t\telse if (risk === \"warning\") cliLogger.warn(heading);\n\t\telse cliLogger.error(heading);\n\n\t\tfor (const reason of reasons) {\n\t\t\tcliLogger.log(\n\t\t\t\t`${reason.collectionKey}: ${describeMigrationRiskReason(reason)}`,\n\t\t\t\t{ indent: 2, symbol: \"child\" },\n\t\t\t);\n\t\t}\n\t}\n};\n"],"mappings":"6BAOA,MAAa,EACZ,GACY,CACZ,IAAM,EAAS,EAAO,WACnB,GAAG,EAAO,UAAU,GAAG,EAAO,aAC9B,EAAO,UACN,GAAG,EAAO,UAAU,GAAG,EAAO,YAC9B,EAAO,UAoBX,MAAO,CAjBN,aAAc,gBAAgB,IAC9B,aAAc,cAAc,IAC5B,oBAAqB,uBAAuB,IAC5C,uBAAwB,sCAAsC,IAC9D,sBAAuB,sBAAsB,IAC7C,yBAA0B,QAAQ,EAAO,WACzC,2BAA4B,QAAQ,EAAO,WAC3C,mBAAoB,sBAAsB,IAC1C,yBAA0B,gDAAgD,IAC1E,gBAAiB,4BAA4B,IAC7C,cAAe,eAAe,IAC9B,UAAW,aAAa,IACxB,iBAAkB,oBAAoB,IACtC,aAAc,gBAAgB,IAC9B,oBAAqB,uBAAuB,GAG3B,EAAE,EAAO,KAC5B,EAGa,EACZ,GACU,CACV,IAAK,IAAM,IAAQ,CAAC,OAAQ,UAAW,aAAa,EAAY,CAC/D,IAAM,EAAU,EAAW,QAAQ,OAAQ,GAAW,EAAO,OAAS,CAAI,EAC1E,GAAI,EAAQ,SAAW,EAAG,SAE1B,IAAM,EAAU,GAAG,EAAK,EAAE,EAAE,YAAY,IAAI,EAAK,MAAM,CAAC,EAAE,sBACtD,IAAS,OAAQ,EAAU,KAAK,CAAO,EAClC,IAAS,UAAW,EAAU,KAAK,CAAO,EAC9C,EAAU,MAAM,CAAO,EAE5B,IAAK,IAAM,KAAU,EACpB,EAAU,IACT,GAAG,EAAO,cAAc,IAAI,EAA4B,CAAM,IAC9D,CAAE,OAAQ,EAAG,OAAQ,OAAQ,CAC9B,CAEF,CACD"}