@live-change/db-web 0.9.221 → 0.9.223

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/lib/dbDao.js +96 -0
  2. package/package.json +7 -7
package/lib/dbDao.js CHANGED
@@ -1,5 +1,41 @@
1
1
  import ReactiveDao from "@live-change/dao"
2
2
 
3
+ function getDatabaseStorageStats(server, dbName) {
4
+ const db = server.databases.get(dbName)
5
+ if(!db) throw new Error('databaseNotFound')
6
+ const stats = db.storageStats()
7
+ return {
8
+ env: { available: false },
9
+ stores: stats.stores,
10
+ totals: stats.totals,
11
+ wasteBytes: null
12
+ }
13
+ }
14
+
15
+ function getTableStorageStats(server, dbName, tableName) {
16
+ const db = server.databases.get(dbName)
17
+ if(!db) throw new Error('databaseNotFound')
18
+ const table = db.table(tableName)
19
+ if(!table) throw new Error('tableNotFound')
20
+ return table.storeStats()
21
+ }
22
+
23
+ function getIndexStorageStats(server, dbName, indexName) {
24
+ const db = server.databases.get(dbName)
25
+ if(!db) throw new Error('databaseNotFound')
26
+ const config = db.config.indexes[indexName]
27
+ if(!config) throw new Error('indexNotFound')
28
+ return db.storageStatsForConfig('index', indexName, config)
29
+ }
30
+
31
+ function getLogStorageStats(server, dbName, logName) {
32
+ const db = server.databases.get(dbName)
33
+ if(!db) throw new Error('databaseNotFound')
34
+ const log = db.log(logName)
35
+ if(!log) throw new Error('logNotFound')
36
+ return log.storeStats()
37
+ }
38
+
3
39
  function localRequests(server, scriptContext) {
4
40
  return {
5
41
  createDatabase: async (dbName, options = {}) => {
@@ -55,6 +91,26 @@ function localRequests(server, scriptContext) {
55
91
  if(!index) throw new Error("indexNotFound")
56
92
  return index.clearOpLog(lastTimestamp || Date.now() - 60 * 1000, limit)
57
93
  },
94
+ updateDatabaseStorage: async (dbName, storagePatch = {}) => {
95
+ if(typeof server.updateDatabaseStorage === 'function') {
96
+ return server.updateDatabaseStorage(dbName, storagePatch)
97
+ }
98
+ if(!server.metadata.databases[dbName]) throw new Error('databaseNotFound')
99
+ const dbMeta = server.metadata.databases[dbName]
100
+ dbMeta.storage = {
101
+ ...(dbMeta.storage || {}),
102
+ ...storagePatch
103
+ }
104
+ const db = server.databases.get(dbName)
105
+ if(db) {
106
+ db.config.storage = dbMeta.storage
107
+ if(db.configObservable) {
108
+ db.configObservable.set(JSON.parse(JSON.stringify(db.config)))
109
+ }
110
+ }
111
+ await server.saveMetadata()
112
+ return dbMeta.storage
113
+ },
58
114
  createTable: async (dbName, tableName, options = {}) => {
59
115
  if(dbName === 'system') throw new Error("system database is not writable")
60
116
  const db = server.databases.get(dbName)
@@ -704,6 +760,46 @@ function localReads(server, scriptContext) {
704
760
  return log.countGet(range)
705
761
  }
706
762
  },
763
+ databaseStorageStats: {
764
+ observable: (dbName) => {
765
+ try {
766
+ return new ReactiveDao.ObservableValue(getDatabaseStorageStats(server, dbName))
767
+ } catch(e) {
768
+ return new ReactiveDao.ObservableError(e.message || e)
769
+ }
770
+ },
771
+ get: async (dbName) => getDatabaseStorageStats(server, dbName)
772
+ },
773
+ tableStorageStats: {
774
+ observable: (dbName, tableName) => {
775
+ try {
776
+ return new ReactiveDao.ObservableValue(getTableStorageStats(server, dbName, tableName))
777
+ } catch(e) {
778
+ return new ReactiveDao.ObservableError(e.message || e)
779
+ }
780
+ },
781
+ get: async (dbName, tableName) => getTableStorageStats(server, dbName, tableName)
782
+ },
783
+ indexStorageStats: {
784
+ observable: (dbName, indexName) => {
785
+ try {
786
+ return new ReactiveDao.ObservableValue(getIndexStorageStats(server, dbName, indexName))
787
+ } catch(e) {
788
+ return new ReactiveDao.ObservableError(e.message || e)
789
+ }
790
+ },
791
+ get: async (dbName, indexName) => getIndexStorageStats(server, dbName, indexName)
792
+ },
793
+ logStorageStats: {
794
+ observable: (dbName, logName) => {
795
+ try {
796
+ return new ReactiveDao.ObservableValue(getLogStorageStats(server, dbName, logName))
797
+ } catch(e) {
798
+ return new ReactiveDao.ObservableError(e.message || e)
799
+ }
800
+ },
801
+ get: async (dbName, logName) => getLogStorageStats(server, dbName, logName)
802
+ },
707
803
  query: {
708
804
  observable: (dbName, code, params = {}, sourceName = 'query/query.js') => {
709
805
  if(!dbName) return new ReactiveDao.ObservableError("databaseNameRequired")
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@live-change/db-web",
3
- "version": "0.9.221",
3
+ "version": "0.9.223",
4
4
  "author": {
5
5
  "email": "michal@laszczewski.com",
6
6
  "name": "Michał Łaszczewski",
@@ -29,12 +29,12 @@
29
29
  },
30
30
  "type": "module",
31
31
  "dependencies": {
32
- "@live-change/dao": "^0.9.221",
33
- "@live-change/db": "^0.9.221",
34
- "@live-change/db-store-indexeddb": "^0.9.221",
35
- "@live-change/db-store-localstorage": "^0.9.221",
36
- "@live-change/db-store-rbtree": "^0.9.221",
32
+ "@live-change/dao": "^0.9.223",
33
+ "@live-change/db": "^0.9.223",
34
+ "@live-change/db-store-indexeddb": "^0.9.223",
35
+ "@live-change/db-store-localstorage": "^0.9.223",
36
+ "@live-change/db-store-rbtree": "^0.9.223",
37
37
  "debug": "^4.3.4"
38
38
  },
39
- "gitHead": "ae6d6ee6938d3aaf0c2eda15fe19660d9a3cf105"
39
+ "gitHead": "bbe8401443d2e2a238362a9e73cd2697ddf2e6e9"
40
40
  }