{"version":3,"file":"diff-snapshot-vs-config.mjs","names":[],"sources":["../../../../../src/libs/collection/schema/runtime/diff-snapshot-vs-config.ts"],"sourcesContent":["import indexesMatch from \"../../helpers/indexes-match.js\";\nimport determineColumnMods from \"../../migration/determine-column-mods.js\";\nimport type { CollectionSchema } from \"../types.js\";\n\n/** Configured additions and definition differences, intentionally excluding removals. */\nexport type SchemaConfigDiff = {\n\tmissingTableNames: Set<string>;\n\tmissingColumnsByTable: Map<string, Set<string>>;\n\tmissingIndexesByTable: Map<string, Set<string>>;\n\tmodifiedColumnsByTable: Map<string, Set<string>>;\n\tmodifiedIndexesByTable: Map<string, Set<string>>;\n};\n/**\n * Compares a persisted migration snapshot with the current config-inferred\n * schema, including definition changes while intentionally ignoring removals.\n */\nconst diffSnapshotVsConfig = (\n\tsnapshotSchema: CollectionSchema,\n\tconfigSchema: CollectionSchema,\n): SchemaConfigDiff => {\n\tconst missingTableNames = new Set<string>();\n\tconst missingColumnsByTable = new Map<string, Set<string>>();\n\tconst missingIndexesByTable = new Map<string, Set<string>>();\n\tconst modifiedColumnsByTable = new Map<string, Set<string>>();\n\tconst modifiedIndexesByTable = new Map<string, Set<string>>();\n\n\tfor (const configTable of configSchema.tables) {\n\t\tconst snapshotTable = snapshotSchema.tables.find(\n\t\t\t(t) => t.name === configTable.name,\n\t\t);\n\n\t\tif (!snapshotTable) {\n\t\t\tmissingTableNames.add(configTable.name);\n\t\t\tmissingColumnsByTable.set(\n\t\t\t\tconfigTable.name,\n\t\t\t\tnew Set(configTable.columns.map((column) => column.name)),\n\t\t\t);\n\t\t\tconst missingIndexes = (configTable.indexes ?? []).map(\n\t\t\t\t(index) => index.name,\n\t\t\t);\n\t\t\tif (missingIndexes.length > 0) {\n\t\t\t\tmissingIndexesByTable.set(configTable.name, new Set(missingIndexes));\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst snapshotColumnsByName = new Map(\n\t\t\tsnapshotTable.columns.map((column) => [column.name, column]),\n\t\t);\n\n\t\tconst missingColumns = configTable.columns\n\t\t\t.filter((column) => !snapshotColumnsByName.has(column.name))\n\t\t\t.map((column) => column.name);\n\n\t\tif (missingColumns.length > 0) {\n\t\t\tmissingColumnsByTable.set(configTable.name, new Set(missingColumns));\n\t\t}\n\n\t\tconst modifiedColumns = configTable.columns\n\t\t\t.filter((column) => {\n\t\t\t\tconst snapshotColumn = snapshotColumnsByName.get(column.name);\n\t\t\t\treturn (\n\t\t\t\t\tsnapshotColumn !== undefined &&\n\t\t\t\t\tdetermineColumnMods(column, snapshotColumn) !== null\n\t\t\t\t);\n\t\t\t})\n\t\t\t.map((column) => column.name);\n\t\tif (modifiedColumns.length > 0) {\n\t\t\tmodifiedColumnsByTable.set(configTable.name, new Set(modifiedColumns));\n\t\t}\n\n\t\tconst snapshotIndexesByName = new Map(\n\t\t\t(snapshotTable.indexes ?? []).map((index) => [index.name, index]),\n\t\t);\n\n\t\tconst missingIndexes = (configTable.indexes ?? [])\n\t\t\t.filter((index) => !snapshotIndexesByName.has(index.name))\n\t\t\t.map((index) => index.name);\n\n\t\tif (missingIndexes.length > 0) {\n\t\t\tmissingIndexesByTable.set(configTable.name, new Set(missingIndexes));\n\t\t}\n\n\t\tconst modifiedIndexes = (configTable.indexes ?? [])\n\t\t\t.filter((index) => {\n\t\t\t\tconst snapshotIndex = snapshotIndexesByName.get(index.name);\n\t\t\t\treturn snapshotIndex && !indexesMatch(index, snapshotIndex);\n\t\t\t})\n\t\t\t.map((index) => index.name);\n\t\tif (modifiedIndexes.length > 0) {\n\t\t\tmodifiedIndexesByTable.set(configTable.name, new Set(modifiedIndexes));\n\t\t}\n\t}\n\n\treturn {\n\t\tmissingTableNames,\n\t\tmissingColumnsByTable,\n\t\tmissingIndexesByTable,\n\t\tmodifiedColumnsByTable,\n\t\tmodifiedIndexesByTable,\n\t};\n};\n\nexport default diffSnapshotVsConfig;\n"],"mappings":"wGAgBA,MAAM,GACL,EACA,IACsB,CACtB,IAAM,EAAoB,IAAI,IACxB,EAAwB,IAAI,IAC5B,EAAwB,IAAI,IAC5B,EAAyB,IAAI,IAC7B,EAAyB,IAAI,IAEnC,IAAK,IAAM,KAAe,EAAa,OAAQ,CAC9C,IAAM,EAAgB,EAAe,OAAO,KAC1C,GAAM,EAAE,OAAS,EAAY,IAC/B,EAEA,GAAI,CAAC,EAAe,CACnB,EAAkB,IAAI,EAAY,IAAI,EACtC,EAAsB,IACrB,EAAY,KACZ,IAAI,IAAI,EAAY,QAAQ,IAAK,GAAW,EAAO,IAAI,CAAC,CACzD,EACA,IAAM,GAAkB,EAAY,SAAW,CAAC,EAAA,CAAG,IACjD,GAAU,EAAM,IAClB,EACI,EAAe,OAAS,GAC3B,EAAsB,IAAI,EAAY,KAAM,IAAI,IAAI,CAAc,CAAC,EAEpE,QACD,CAEA,IAAM,EAAwB,IAAI,IACjC,EAAc,QAAQ,IAAK,GAAW,CAAC,EAAO,KAAM,CAAM,CAAC,CAC5D,EAEM,EAAiB,EAAY,QACjC,OAAQ,GAAW,CAAC,EAAsB,IAAI,EAAO,IAAI,CAAC,CAAC,CAC3D,IAAK,GAAW,EAAO,IAAI,EAEzB,EAAe,OAAS,GAC3B,EAAsB,IAAI,EAAY,KAAM,IAAI,IAAI,CAAc,CAAC,EAGpE,IAAM,EAAkB,EAAY,QAClC,OAAQ,GAAW,CACnB,IAAM,EAAiB,EAAsB,IAAI,EAAO,IAAI,EAC5D,OACC,IAAmB,IAAA,IACnB,EAAoB,EAAQ,CAAc,IAAM,IAElD,CAAC,CAAC,CACD,IAAK,GAAW,EAAO,IAAI,EACzB,EAAgB,OAAS,GAC5B,EAAuB,IAAI,EAAY,KAAM,IAAI,IAAI,CAAe,CAAC,EAGtE,IAAM,EAAwB,IAAI,KAChC,EAAc,SAAW,CAAC,EAAA,CAAG,IAAK,GAAU,CAAC,EAAM,KAAM,CAAK,CAAC,CACjE,EAEM,GAAkB,EAAY,SAAW,CAAC,EAAA,CAC9C,OAAQ,GAAU,CAAC,EAAsB,IAAI,EAAM,IAAI,CAAC,CAAC,CACzD,IAAK,GAAU,EAAM,IAAI,EAEvB,EAAe,OAAS,GAC3B,EAAsB,IAAI,EAAY,KAAM,IAAI,IAAI,CAAc,CAAC,EAGpE,IAAM,GAAmB,EAAY,SAAW,CAAC,EAAA,CAC/C,OAAQ,GAAU,CAClB,IAAM,EAAgB,EAAsB,IAAI,EAAM,IAAI,EAC1D,OAAO,GAAiB,CAAC,EAAa,EAAO,CAAa,CAC3D,CAAC,CAAC,CACD,IAAK,GAAU,EAAM,IAAI,EACvB,EAAgB,OAAS,GAC5B,EAAuB,IAAI,EAAY,KAAM,IAAI,IAAI,CAAe,CAAC,CAEvE,CAEA,MAAO,CACN,oBACA,wBACA,wBACA,yBACA,wBACD,CACD"}