directus
1import type { SchemaOverview } from '@directus/types';2import type { Knex } from 'knex';3import { getCache } from '../cache.js';4import getDatabase from '../database/index.js';5import type { Snapshot, SnapshotDiff } from '../types/index.js';6import { applyDiff } from './apply-diff.js';7import { getSchema } from './get-schema.js';8import { getSnapshot } from './get-snapshot.js';9import { getSnapshotDiff } from './get-snapshot-diff.js';10
11export async function applySnapshot(12snapshot: Snapshot,13options?: { database?: Knex; schema?: SchemaOverview; current?: Snapshot; diff?: SnapshotDiff },14): Promise<void> {15const database = options?.database ?? getDatabase();16const schema = options?.schema ?? (await getSchema({ database, bypassCache: true }));17const { systemCache } = getCache();18
19const current = options?.current ?? (await getSnapshot({ database, schema }));20const snapshotDiff = options?.diff ?? getSnapshotDiff(current, snapshot);21
22await applyDiff(current, snapshotDiff, { database, schema });23
24await systemCache?.clear();25}
26