MCPcopy
hub / github.com/directus/directus / handleVersion

Function handleVersion

api/src/utils/versioning/handle-version.ts:18–279  ·  view source on GitHub ↗
(self: ItemsServiceType, key: PrimaryKey | null, query: Query, opts?: QueryOptions)

Source from the content-addressed store, hash-verified

16};
17
18export async function handleVersion(self: ItemsServiceType, key: PrimaryKey | null, query: Query, opts?: QueryOptions) {
19 const { VersionsService } = await import('../../services/versions.js');
20 const { ItemsService } = await import('../../services/items.js');
21
22 if (key && query.versionRaw) {
23 const version = query.version;
24 delete query.version;
25 delete query.versionRaw;
26
27 const originalData = await self.readByQuery(query, opts);
28
29 if (originalData.length === 0) {
30 throw new ForbiddenError();
31 }
32
33 const versionsService = new VersionsService({
34 schema: self.schema,
35 accountability: self.accountability,
36 knex: self.knex,
37 });
38
39 const versions = await versionsService.getVersionSaves(version!, self.collection, key);
40
41 return [Object.assign(originalData[0]!, versions?.[0]?.delta)];
42 }
43
44 const versionsService = new VersionsService({
45 schema: self.schema,
46 accountability: self.accountability,
47 knex: self.knex,
48 });
49
50 const versions = await versionsService.getVersionSaves(query.version!, self.collection, key, false);
51
52 if (key && versions.length === 0) {
53 throw new ForbiddenError();
54 }
55
56 if (versions.length === 0) {
57 return [];
58 }
59
60 let results: Item[] = [];
61 const createdIDs: Record<string, PrimaryKey[]> = {};
62 const itemlessErrors: VersionMeta[] = [];
63 const itemMeta: Record<string, VersionMeta> = {};
64 const primaryKeyField = self.schema.collections[self.collection]!.primary;
65
66 const hasPrimaryKeyInQuery =
67 query.fields?.includes(primaryKeyField) || query.fields?.includes('*') || query.fields?.length === 0;
68
69 await transaction(self.knex, async (trx) => {
70 for (const version of versions) {
71 const { id, item } = version;
72 let delta = version.delta;
73
74 if (!delta && item) {
75 itemMeta[item] = {

Callers 1

readByQueryMethod · 0.85

Calls 11

getVersionSavesMethod · 0.95
createOneMethod · 0.95
updateOneMethod · 0.95
readByQueryMethod · 0.95
getRelationInfoFunction · 0.90
deepMapWithSchemaFunction · 0.90
useEnvFunction · 0.90
transactionFunction · 0.85
splitRecursiveFunction · 0.85
sanitizeErrorFunction · 0.85
readByQueryMethod · 0.65

Tested by

no test coverage detected