-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
/
Copy pathinitializeDb.js
88 lines (73 loc) · 2.55 KB
/
initializeDb.js
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
import { addRxPlugin, createRxDatabase } from 'rxdb';
import fetch from 'cross-fetch';
import { RxDBDevModePlugin } from 'rxdb/plugins/dev-mode';
import { RxDBMigrationPlugin } from 'rxdb/plugins/migration-schema'
import { RxDBUpdatePlugin } from 'rxdb/plugins/update'
import { RxDBQueryBuilderPlugin } from 'rxdb/plugins/query-builder'
import { replicateCouchDB } from 'rxdb/plugins/replication-couchdb'
addRxPlugin(RxDBMigrationPlugin)
addRxPlugin(RxDBUpdatePlugin)
addRxPlugin(RxDBQueryBuilderPlugin)
import schema from './src/Schema';
import {
STORAGE
} from './storage';
const syncURL = 'http://admin:mysecret1@localhost:5984'; // Replace with your couchdb instance
const dbName = 'heroesreactdatabase1';
export const HeroesCollectionName = 'heroes';
const isDevelopment = process.env.NODE_ENV !== 'production' || process.env.DEBUG_PROD === 'true';
async function initialize(withReplication) {
if (isDevelopment) {
await addRxPlugin(RxDBDevModePlugin);
}
let db;
try {
console.log('Initializing database...');
db = await createRxDatabase({
name: dbName,
storage: STORAGE,
multiInstance: false,
ignoreDuplicate: true,
});
console.log('Database initialized!');
} catch (err) {
console.log('ERROR CREATING DATABASE', err);
}
try {
console.log('Adding hero collection...');
await db.addCollections({
[HeroesCollectionName]: {
schema: schema,
},
});
console.log('Collection added!');
} catch (err) {
console.log('ERROR CREATING COLLECTION', err);
}
if (withReplication) {
try {
console.log('Start sync...');
const replicationState = replicateCouchDB({
collection: db[HeroesCollectionName],
url: `${syncURL}/${HeroesCollectionName}/`,
fetch: fetch,
pull: {},
push: {}
});
console.dir(replicationState);
replicationState.active$.subscribe((v) => {
console.log('Replication active$:', v)
})
replicationState.canceled$.subscribe((v) => {
console.log('Replication canceled$:', v)
})
replicationState.error$.subscribe(async error => {
console.error('Replication error$:', error)
})
} catch (err) {
console.log('Error initialize sync', err);
}
}
return db;
};
export default initialize;