forked from foundryvtt/pf2e
-
Notifications
You must be signed in to change notification settings - Fork 0
/
client-backend.ts
41 lines (36 loc) · 1.75 KB
/
client-backend.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import { ActorPF2e } from "@actor";
import { ItemPF2e } from "@item";
import { MigrationList, MigrationRunner } from "@module/migration/index.ts";
import { UserPF2e } from "@module/user/document.ts";
import * as R from "remeda";
class ClientDatabaseBackendPF2e extends foundry.data.ClientDatabaseBackend {
protected override async _getDocuments(
documentClass: typeof foundry.abstract.Document,
context: DatabaseBackendGetContext,
user: UserPF2e,
): Promise<(DeepPartial<ClientDocument["_source"]> & CompendiumIndexData)[] | foundry.abstract.Document[]> {
const type = documentClass.documentName;
if (!["Actor", "Item"].includes(type) || context.pack?.startsWith("pf2e.") || context.options?.index) {
return super._getDocuments(documentClass, context, user);
}
// Dispatch the request
const request = { action: "get", type, ...R.pick(context, ["query", "options", "pack"]) };
const response = await SocketInterface.dispatch("modifyDocument", request);
// Create Document objects
return Promise.all(
response.result.map(async (data) => {
const document = documentClass.fromSource(data, { pack: context.pack }) as ActorPF2e | ItemPF2e;
const migrations = MigrationList.constructFromVersion(document.schemaVersion);
if (migrations.length > 0) {
try {
await MigrationRunner.ensureSchemaVersion(document, migrations);
} catch (error) {
if (error instanceof Error) console.error(error.message);
}
}
return document;
}),
);
}
}
export { ClientDatabaseBackendPF2e };