-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Expand file tree
/
Copy pathindex.ts
More file actions
108 lines (95 loc) · 2.74 KB
/
index.ts
File metadata and controls
108 lines (95 loc) · 2.74 KB
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import { Database } from '@nozbe/watermelondb';
import SQLiteAdapter from '@nozbe/watermelondb/adapters/sqlite';
import logger from '@nozbe/watermelondb/utils/common/logger';
import { appGroupPath } from '../methods/appGroup';
import { isOfficial } from '../constants/environment';
import Subscription from './model/Subscription';
import Room from './model/Room';
import Message from './model/Message';
import Thread from './model/Thread';
import ThreadMessage from './model/ThreadMessage';
import CustomEmoji from './model/CustomEmoji';
import FrequentlyUsedEmoji from './model/FrequentlyUsedEmoji';
import Upload from './model/Upload';
import Setting from './model/Setting';
import Role from './model/Role';
import Permission from './model/Permission';
import SlashCommand from './model/SlashCommand';
import User from './model/User';
import LoggedUser from './model/servers/User';
import Server from './model/servers/Server';
import ServersHistory from './model/ServersHistory';
import serversSchema from './schema/servers';
import appSchema from './schema/app';
import migrations from './model/migrations';
import serversMigrations from './model/servers/migrations';
import { type TAppDatabase, type TServerDatabase } from './interfaces';
import AppTranslation from './model/AppTranslation';
if (__DEV__) {
console.log(appGroupPath);
}
const getDatabasePath = (name: string) => `${appGroupPath}${name}${isOfficial ? '' : '-experimental'}.db`;
export const getDatabase = (database = ''): Database => {
const path = database.replace(/(^\w+:|^)\/\//, '').replace(/\//g, '.');
const dbName = getDatabasePath(path);
const adapter = new SQLiteAdapter({
dbName,
schema: appSchema,
migrations,
jsi: true,
// @ts-expect-error
experimentalUnsafeNativeReuse: true
});
return new Database({
adapter,
modelClasses: [
Subscription,
Room,
Message,
Thread,
ThreadMessage,
CustomEmoji,
FrequentlyUsedEmoji,
Upload,
Setting,
Role,
Permission,
SlashCommand,
User,
AppTranslation
]
});
};
interface IDatabases {
serversDB: TServerDatabase;
activeDB?: TAppDatabase;
}
class DB {
databases: IDatabases = {
serversDB: new Database({
adapter: new SQLiteAdapter({
dbName: getDatabasePath('default'),
schema: serversSchema,
migrations: serversMigrations,
jsi: true,
// @ts-expect-error
experimentalUnsafeNativeReuse: true
}),
modelClasses: [Server, LoggedUser, ServersHistory]
}) as TServerDatabase
};
get active(): TAppDatabase {
return this.databases.activeDB!;
}
get servers() {
return this.databases.serversDB;
}
setActiveDB(database: string) {
this.databases.activeDB = getDatabase(database) as TAppDatabase;
}
}
const db = new DB();
export default db;
if (!__DEV__) {
logger.silence();
}