{"version":3,"file":"5.0.0-06-add-document-id-indexes.mjs","sources":["../../../src/migrations/internal-migrations/5.0.0-06-add-document-id-indexes.ts"],"sourcesContent":["import type { Knex } from 'knex';\n\nimport type { Migration } from '../common';\n\n// Add an index if it does not already exist\nconst createIndex = async (knex: Knex, tableName: string, columns: string[], indexName: string) => {\n  try {\n    // If the database can check for indexes, avoid duplicates\n    const hasIndex = (\n      knex.schema as unknown as {\n        hasIndex?: (tableName: string, indexName: string) => Promise<boolean>;\n      }\n    ).hasIndex;\n    if (hasIndex) {\n      const exists = await hasIndex.call(knex.schema, tableName, indexName);\n      if (exists) {\n        return;\n      }\n    }\n\n    await knex.schema.alterTable(tableName, (table) => {\n      table.index(columns, indexName);\n    });\n  } catch (error) {\n    // If the index exists (or cannot be created), move on\n  }\n};\n\nconst addIndexesForTable = async (knex: Knex, tableName: string) => {\n  // Only add indexes when the column is present\n  const hasDocumentId = await knex.schema.hasColumn(tableName, 'document_id');\n  if (!hasDocumentId) {\n    return;\n  }\n\n  const hasLocale = await knex.schema.hasColumn(tableName, 'locale');\n  const hasPublishedAt = await knex.schema.hasColumn(tableName, 'published_at');\n\n  // Single column index for basic lookups\n  await createIndex(knex, tableName, ['document_id'], `${tableName}_document_id_idx`);\n\n  if (hasLocale && hasPublishedAt) {\n    // Composite index for common filters\n    await createIndex(\n      knex,\n      tableName,\n      ['document_id', 'locale', 'published_at'],\n      `${tableName}_document_id_locale_published_at_idx`\n    );\n  } else if (hasLocale) {\n    await createIndex(\n      knex,\n      tableName,\n      ['document_id', 'locale'],\n      `${tableName}_document_id_locale_idx`\n    );\n  } else if (hasPublishedAt) {\n    await createIndex(\n      knex,\n      tableName,\n      ['document_id', 'published_at'],\n      `${tableName}_document_id_published_at_idx`\n    );\n  }\n};\n\nexport const addDocumentIdIndexes: Migration = {\n  name: '5.0.0-06-add-document-id-indexes',\n  async up(knex, db) {\n    for (const meta of db.metadata.values()) {\n      const hasTable = await knex.schema.hasTable(meta.tableName);\n      if (!hasTable) {\n        continue;\n      }\n\n      await addIndexesForTable(knex, meta.tableName);\n    }\n  },\n  async down() {\n    throw new Error('not implemented');\n  },\n};\n"],"names":["createIndex","knex","tableName","columns","indexName","hasIndex","schema","exists","call","alterTable","table","index","error","addIndexesForTable","hasDocumentId","hasColumn","hasLocale","hasPublishedAt","addDocumentIdIndexes","name","up","db","meta","metadata","values","hasTable","down","Error"],"mappings":"AAIA;AACA,MAAMA,WAAAA,GAAc,OAAOC,IAAAA,EAAYC,SAAAA,EAAmBC,OAAAA,EAAmBC,SAAAA,GAAAA;IAC3E,IAAI;;AAEF,QAAA,MAAMC,QAAAA,GACJJ,IAAAA,CAAKK,MAAM,CAGXD,QAAQ;AACV,QAAA,IAAIA,QAAAA,EAAU;YACZ,MAAME,MAAAA,GAAS,MAAMF,QAAAA,CAASG,IAAI,CAACP,IAAAA,CAAKK,MAAM,EAAEJ,SAAAA,EAAWE,SAAAA,CAAAA;AAC3D,YAAA,IAAIG,MAAAA,EAAQ;AACV,gBAAA;AACF,YAAA;AACF,QAAA;AAEA,QAAA,MAAMN,KAAKK,MAAM,CAACG,UAAU,CAACP,WAAW,CAACQ,KAAAA,GAAAA;YACvCA,KAAAA,CAAMC,KAAK,CAACR,OAAAA,EAASC,SAAAA,CAAAA;AACvB,QAAA,CAAA,CAAA;AACF,IAAA,CAAA,CAAE,OAAOQ,KAAAA,EAAO;;AAEhB,IAAA;AACF,CAAA;AAEA,MAAMC,kBAAAA,GAAqB,OAAOZ,IAAAA,EAAYC,SAAAA,GAAAA;;AAE5C,IAAA,MAAMY,gBAAgB,MAAMb,IAAAA,CAAKK,MAAM,CAACS,SAAS,CAACb,SAAAA,EAAW,aAAA,CAAA;AAC7D,IAAA,IAAI,CAACY,aAAAA,EAAe;AAClB,QAAA;AACF,IAAA;AAEA,IAAA,MAAME,YAAY,MAAMf,IAAAA,CAAKK,MAAM,CAACS,SAAS,CAACb,SAAAA,EAAW,QAAA,CAAA;AACzD,IAAA,MAAMe,iBAAiB,MAAMhB,IAAAA,CAAKK,MAAM,CAACS,SAAS,CAACb,SAAAA,EAAW,cAAA,CAAA;;IAG9D,MAAMF,WAAAA,CAAYC,MAAMC,SAAAA,EAAW;AAAC,QAAA;KAAc,EAAE,CAAA,EAAGA,SAAAA,CAAU,gBAAgB,CAAC,CAAA;AAElF,IAAA,IAAIc,aAAaC,cAAAA,EAAgB;;QAE/B,MAAMjB,WAAAA,CACJC,MACAC,SAAAA,EACA;AAAC,YAAA,aAAA;AAAe,YAAA,QAAA;AAAU,YAAA;SAAe,EACzC,CAAA,EAAGA,SAAAA,CAAU,oCAAoC,CAAC,CAAA;AAEtD,IAAA,CAAA,MAAO,IAAIc,SAAAA,EAAW;QACpB,MAAMhB,WAAAA,CACJC,MACAC,SAAAA,EACA;AAAC,YAAA,aAAA;AAAe,YAAA;SAAS,EACzB,CAAA,EAAGA,SAAAA,CAAU,uBAAuB,CAAC,CAAA;AAEzC,IAAA,CAAA,MAAO,IAAIe,cAAAA,EAAgB;QACzB,MAAMjB,WAAAA,CACJC,MACAC,SAAAA,EACA;AAAC,YAAA,aAAA;AAAe,YAAA;SAAe,EAC/B,CAAA,EAAGA,SAAAA,CAAU,6BAA6B,CAAC,CAAA;AAE/C,IAAA;AACF,CAAA;MAEagB,oBAAAA,GAAkC;IAC7CC,IAAAA,EAAM,kCAAA;IACN,MAAMC,EAAAA,CAAAA,CAAGnB,IAAI,EAAEoB,EAAE,EAAA;AACf,QAAA,KAAK,MAAMC,IAAAA,IAAQD,EAAAA,CAAGE,QAAQ,CAACC,MAAM,EAAA,CAAI;YACvC,MAAMC,QAAAA,GAAW,MAAMxB,IAAAA,CAAKK,MAAM,CAACmB,QAAQ,CAACH,KAAKpB,SAAS,CAAA;AAC1D,YAAA,IAAI,CAACuB,QAAAA,EAAU;AACb,gBAAA;AACF,YAAA;YAEA,MAAMZ,kBAAAA,CAAmBZ,IAAAA,EAAMqB,IAAAA,CAAKpB,SAAS,CAAA;AAC/C,QAAA;AACF,IAAA,CAAA;IACA,MAAMwB,IAAAA,CAAAA,GAAAA;AACJ,QAAA,MAAM,IAAIC,KAAAA,CAAM,iBAAA,CAAA;AAClB,IAAA;AACF;;;;"}