remult 3.3.7 → 3.3.8

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.
@@ -8,66 +8,60 @@ export class JsonEntityIndexedDbStorage {
8
8
  supportsRawJson = true;
9
9
  //@internal
10
10
  db;
11
- async getItem(entityDbName) {
12
- return new Promise(async (resolve, reject) => {
13
- const transaction = (await this.init()).transaction([this.storeName], 'readonly');
14
- const store = transaction.objectStore(this.storeName);
15
- const request = store.get(entityDbName);
16
- request.onerror = (event) => reject(request.error);
17
- request.onsuccess = (event) => {
18
- if (request.result) {
19
- resolve(request.result);
20
- }
21
- else {
22
- resolve(null);
23
- }
24
- };
25
- });
11
+ getItem(entityDbName) {
12
+ return this.run('readonly', (s) => s.get(entityDbName));
13
+ }
14
+ setItem(entityDbName, json) {
15
+ return this.run('readwrite', (s) => s.put(json, entityDbName));
16
+ }
17
+ removeItem(entityDbName) {
18
+ return this.run('readwrite', (s) => s.delete(entityDbName));
19
+ }
20
+ clear() {
21
+ return this.run('readwrite', (s) => s.clear());
26
22
  }
27
23
  //@internal
28
- async init() {
29
- if (!this.db) {
30
- this.db = await new Promise((resolve, reject) => {
31
- let db;
32
- const request = indexedDB.open(this.dbName, 1);
33
- request.onerror = (event) => reject(request.error);
34
- request.onsuccess = (event) => {
35
- db = request.result;
36
- resolve(db);
37
- };
38
- request.onupgradeneeded = (event) => {
39
- db = request.result;
40
- db.createObjectStore(this.storeName);
41
- };
24
+ async run(mode, op) {
25
+ const attempt = async () => {
26
+ const db = await this.init();
27
+ return new Promise((resolve, reject) => {
28
+ const request = op(db.transaction([this.storeName], mode).objectStore(this.storeName));
29
+ request.onerror = () => reject(request.error);
30
+ request.onsuccess = () => resolve(request.result ?? null);
42
31
  });
32
+ };
33
+ try {
34
+ return await attempt();
35
+ }
36
+ catch (err) {
37
+ if (err?.name !== 'InvalidStateError')
38
+ throw err;
39
+ this.db = undefined;
40
+ return await attempt();
43
41
  }
44
- return this.db;
45
- }
46
- async setItem(entityDbName, json) {
47
- return new Promise(async (resolve, reject) => {
48
- const transaction = (await this.init()).transaction([this.storeName], 'readwrite');
49
- const store = transaction.objectStore(this.storeName);
50
- const request = store.put(json, entityDbName);
51
- request.onerror = (event) => reject(request.error);
52
- request.onsuccess = (event) => resolve();
53
- });
54
- }
55
- async removeItem(entityDbName) {
56
- return new Promise(async (resolve, reject) => {
57
- const transaction = (await this.init()).transaction([this.storeName], 'readwrite');
58
- const store = transaction.objectStore(this.storeName);
59
- const request = store.delete(entityDbName);
60
- request.onerror = (_event) => reject(request.error);
61
- request.onsuccess = (_event) => resolve();
62
- });
63
42
  }
64
- async clear() {
65
- return new Promise(async (resolve, reject) => {
66
- const transaction = (await this.init()).transaction([this.storeName], 'readwrite');
67
- const store = transaction.objectStore(this.storeName);
68
- const request = store.clear();
69
- request.onerror = (_event) => reject(request.error);
70
- request.onsuccess = (_event) => resolve();
43
+ //@internal
44
+ async init() {
45
+ if (this.db)
46
+ return this.db;
47
+ this.db = await new Promise((resolve, reject) => {
48
+ const request = indexedDB.open(this.dbName, 1);
49
+ request.onerror = () => reject(request.error);
50
+ request.onupgradeneeded = () => request.result.createObjectStore(this.storeName);
51
+ request.onsuccess = () => {
52
+ const db = request.result;
53
+ const forget = () => {
54
+ if (this.db === db)
55
+ this.db = undefined;
56
+ };
57
+ db.onclose = forget;
58
+ db.onversionchange = () => {
59
+ db.close();
60
+ forget();
61
+ };
62
+ resolve(db);
63
+ };
71
64
  });
65
+ return this.db;
72
66
  }
73
67
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "remult",
3
- "version": "3.3.7",
3
+ "version": "3.3.8",
4
4
  "description": "A CRUD framework for full-stack TypeScript",
5
5
  "homepage": "https://remult.dev",
6
6
  "repository": {
@@ -11,31 +11,57 @@ var JsonEntityIndexedDbStorage = /** @class */ (function () {
11
11
  this.supportsRawJson = true;
12
12
  }
13
13
  JsonEntityIndexedDbStorage.prototype.getItem = function (entityDbName) {
14
+ return this.run('readonly', function (s) { return s.get(entityDbName); });
15
+ };
16
+ JsonEntityIndexedDbStorage.prototype.setItem = function (entityDbName, json) {
17
+ return this.run('readwrite', function (s) {
18
+ return s.put(json, entityDbName);
19
+ });
20
+ };
21
+ JsonEntityIndexedDbStorage.prototype.removeItem = function (entityDbName) {
22
+ return this.run('readwrite', function (s) { return s.delete(entityDbName); });
23
+ };
24
+ JsonEntityIndexedDbStorage.prototype.clear = function () {
25
+ return this.run('readwrite', function (s) { return s.clear(); });
26
+ };
27
+ //@internal
28
+ JsonEntityIndexedDbStorage.prototype.run = function (mode, op) {
14
29
  return tslib_1.__awaiter(this, void 0, void 0, function () {
30
+ var attempt, err_1;
15
31
  var _this = this;
16
32
  return tslib_1.__generator(this, function (_a) {
17
- return [2 /*return*/, new Promise(function (resolve, reject) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
18
- var transaction, store, request;
19
- return tslib_1.__generator(this, function (_a) {
20
- switch (_a.label) {
21
- case 0: return [4 /*yield*/, this.init()];
22
- case 1:
23
- transaction = (_a.sent()).transaction([this.storeName], 'readonly');
24
- store = transaction.objectStore(this.storeName);
25
- request = store.get(entityDbName);
26
- request.onerror = function (event) { return reject(request.error); };
27
- request.onsuccess = function (event) {
28
- if (request.result) {
29
- resolve(request.result);
30
- }
31
- else {
32
- resolve(null);
33
- }
34
- };
35
- return [2 /*return*/];
36
- }
37
- });
38
- }); })];
33
+ switch (_a.label) {
34
+ case 0:
35
+ attempt = function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
36
+ var db;
37
+ var _this = this;
38
+ return tslib_1.__generator(this, function (_a) {
39
+ switch (_a.label) {
40
+ case 0: return [4 /*yield*/, this.init()];
41
+ case 1:
42
+ db = _a.sent();
43
+ return [2 /*return*/, new Promise(function (resolve, reject) {
44
+ var request = op(db.transaction([_this.storeName], mode).objectStore(_this.storeName));
45
+ request.onerror = function () { return reject(request.error); };
46
+ request.onsuccess = function () { var _a; return resolve((_a = request.result) !== null && _a !== void 0 ? _a : null); };
47
+ })];
48
+ }
49
+ });
50
+ }); };
51
+ _a.label = 1;
52
+ case 1:
53
+ _a.trys.push([1, 3, , 5]);
54
+ return [4 /*yield*/, attempt()];
55
+ case 2: return [2 /*return*/, _a.sent()];
56
+ case 3:
57
+ err_1 = _a.sent();
58
+ if ((err_1 === null || err_1 === void 0 ? void 0 : err_1.name) !== 'InvalidStateError')
59
+ throw err_1;
60
+ this.db = undefined;
61
+ return [4 /*yield*/, attempt()];
62
+ case 4: return [2 /*return*/, _a.sent()];
63
+ case 5: return [2 /*return*/];
64
+ }
39
65
  });
40
66
  });
41
67
  };
@@ -47,95 +73,36 @@ var JsonEntityIndexedDbStorage = /** @class */ (function () {
47
73
  return tslib_1.__generator(this, function (_b) {
48
74
  switch (_b.label) {
49
75
  case 0:
50
- if (!!this.db) return [3 /*break*/, 2];
76
+ if (this.db)
77
+ return [2 /*return*/, this.db];
51
78
  _a = this;
52
79
  return [4 /*yield*/, new Promise(function (resolve, reject) {
53
- var db;
54
80
  var request = indexedDB.open(_this.dbName, 1);
55
- request.onerror = function (event) { return reject(request.error); };
56
- request.onsuccess = function (event) {
57
- db = request.result;
58
- resolve(db);
81
+ request.onerror = function () { return reject(request.error); };
82
+ request.onupgradeneeded = function () {
83
+ return request.result.createObjectStore(_this.storeName);
59
84
  };
60
- request.onupgradeneeded = function (event) {
61
- db = request.result;
62
- db.createObjectStore(_this.storeName);
85
+ request.onsuccess = function () {
86
+ var db = request.result;
87
+ var forget = function () {
88
+ if (_this.db === db)
89
+ _this.db = undefined;
90
+ };
91
+ db.onclose = forget;
92
+ db.onversionchange = function () {
93
+ db.close();
94
+ forget();
95
+ };
96
+ resolve(db);
63
97
  };
64
98
  })];
65
99
  case 1:
66
100
  _a.db = _b.sent();
67
- _b.label = 2;
68
- case 2: return [2 /*return*/, this.db];
101
+ return [2 /*return*/, this.db];
69
102
  }
70
103
  });
71
104
  });
72
105
  };
73
- JsonEntityIndexedDbStorage.prototype.setItem = function (entityDbName, json) {
74
- return tslib_1.__awaiter(this, void 0, void 0, function () {
75
- var _this = this;
76
- return tslib_1.__generator(this, function (_a) {
77
- return [2 /*return*/, new Promise(function (resolve, reject) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
78
- var transaction, store, request;
79
- return tslib_1.__generator(this, function (_a) {
80
- switch (_a.label) {
81
- case 0: return [4 /*yield*/, this.init()];
82
- case 1:
83
- transaction = (_a.sent()).transaction([this.storeName], 'readwrite');
84
- store = transaction.objectStore(this.storeName);
85
- request = store.put(json, entityDbName);
86
- request.onerror = function (event) { return reject(request.error); };
87
- request.onsuccess = function (event) { return resolve(); };
88
- return [2 /*return*/];
89
- }
90
- });
91
- }); })];
92
- });
93
- });
94
- };
95
- JsonEntityIndexedDbStorage.prototype.removeItem = function (entityDbName) {
96
- return tslib_1.__awaiter(this, void 0, void 0, function () {
97
- var _this = this;
98
- return tslib_1.__generator(this, function (_a) {
99
- return [2 /*return*/, new Promise(function (resolve, reject) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
100
- var transaction, store, request;
101
- return tslib_1.__generator(this, function (_a) {
102
- switch (_a.label) {
103
- case 0: return [4 /*yield*/, this.init()];
104
- case 1:
105
- transaction = (_a.sent()).transaction([this.storeName], 'readwrite');
106
- store = transaction.objectStore(this.storeName);
107
- request = store.delete(entityDbName);
108
- request.onerror = function (_event) { return reject(request.error); };
109
- request.onsuccess = function (_event) { return resolve(); };
110
- return [2 /*return*/];
111
- }
112
- });
113
- }); })];
114
- });
115
- });
116
- };
117
- JsonEntityIndexedDbStorage.prototype.clear = function () {
118
- return tslib_1.__awaiter(this, void 0, void 0, function () {
119
- var _this = this;
120
- return tslib_1.__generator(this, function (_a) {
121
- return [2 /*return*/, new Promise(function (resolve, reject) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
122
- var transaction, store, request;
123
- return tslib_1.__generator(this, function (_a) {
124
- switch (_a.label) {
125
- case 0: return [4 /*yield*/, this.init()];
126
- case 1:
127
- transaction = (_a.sent()).transaction([this.storeName], 'readwrite');
128
- store = transaction.objectStore(this.storeName);
129
- request = store.clear();
130
- request.onerror = function (_event) { return reject(request.error); };
131
- request.onsuccess = function (_event) { return resolve(); };
132
- return [2 /*return*/];
133
- }
134
- });
135
- }); })];
136
- });
137
- });
138
- };
139
106
  return JsonEntityIndexedDbStorage;
140
107
  }());
141
108
  exports.JsonEntityIndexedDbStorage = JsonEntityIndexedDbStorage;
@@ -313,8 +313,8 @@ export declare class ValueListInfo<T extends ValueListItem> implements ValueConv
313
313
  toJson(val: T): any;
314
314
  fromDb(val: any): T;
315
315
  toDb(val: T): any;
316
- toInput(val: T, inputType: string): string;
317
- fromInput(val: string, inputType: string): T;
316
+ toInput(val: T, inputType?: string): string;
317
+ fromInput(val: string, inputType?: string): T;
318
318
  displayValue?(val: T): string;
319
319
  fieldTypeInDb?: string;
320
320
  inputType?: string;