browser-localstorge 1.0.0-beta.0 → 1.0.0-beta.2
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.
- package/README.md +1 -3
- package/dist/es/Browser_StoreKit.es.js +187 -187
- package/dist/umd/Browser_StoreKit.umd.js +1 -1
- package/index.js +4 -1
- package/package.json +26 -25
- package/src/constant.js +18 -4
- package/src/db/handle.js +23 -15
- package/src/index.js +3 -2
- package/src/localAndsession/index.js +13 -9
- package/src/localAndsession/local.js +1 -4
- package/src/localAndsession/session.js +1 -4
- package/src/utils/index.js +1 -1
package/README.md
CHANGED
|
@@ -38,10 +38,10 @@ const T = {
|
|
|
38
38
|
isObject: (t) => Object.prototype.toString.call(t) === "[object Object]"
|
|
39
39
|
};
|
|
40
40
|
function x(t = /* @__PURE__ */ new Date(), e = "YYYY-MM-DD HH:mm:ss") {
|
|
41
|
-
const r = t.getFullYear(),
|
|
42
|
-
return e.replace("YYYY", r).replace("MM",
|
|
41
|
+
const r = t.getFullYear(), o = String(t.getMonth() + 1).padStart(2, "0"), s = String(t.getDate()).padStart(2, "0"), a = String(t.getHours()).padStart(2, "0"), n = String(t.getMinutes()).padStart(2, "0"), l = String(t.getSeconds()).padStart(2, "0");
|
|
42
|
+
return e.replace("YYYY", r).replace("MM", o).replace("DD", s).replace("HH", a).replace("mm", n).replace("ss", l);
|
|
43
43
|
}
|
|
44
|
-
const
|
|
44
|
+
const R = "localStorage", U = "sessionStorage", A = "indexedDB", Y = {
|
|
45
45
|
success: "#67c23a",
|
|
46
46
|
warning: "#e6a23c"
|
|
47
47
|
}, c = {
|
|
@@ -79,11 +79,11 @@ S.set(6, "缺少参数mode(可选值: 'get'、'add'、'delete')");
|
|
|
79
79
|
S.set(7, "缺少参数itemList(批量操作数据集合)");
|
|
80
80
|
S.set(8, "参数mode值有误(可选值: 'get'、'add'、'delete')");
|
|
81
81
|
const L = [
|
|
82
|
-
(t, ...e) => `🔗${N} 📎[${t}]: ${e.join("➡️")}`,
|
|
83
82
|
(t, ...e) => `🔗${R} 📎[${t}]: ${e.join("➡️")}`,
|
|
84
|
-
(t, ...e) => `🔗${
|
|
83
|
+
(t, ...e) => `🔗${U} 📎[${t}]: ${e.join("➡️")}`,
|
|
84
|
+
(t, ...e) => `🔗${A} 📢[${t}]: ${e.join("➡️")}`
|
|
85
85
|
];
|
|
86
|
-
function
|
|
86
|
+
function k(t) {
|
|
87
87
|
return `(key: ${t})`;
|
|
88
88
|
}
|
|
89
89
|
function v(t) {
|
|
@@ -96,6 +96,10 @@ const I = L[0], te = {
|
|
|
96
96
|
};
|
|
97
97
|
class K {
|
|
98
98
|
constructor(e) {
|
|
99
|
+
/**
|
|
100
|
+
* @type {Storage}
|
|
101
|
+
*/
|
|
102
|
+
h(this, "_module", null);
|
|
99
103
|
/**
|
|
100
104
|
* @type {import('../index.js').LocalStorgeOptions | null}
|
|
101
105
|
*/
|
|
@@ -109,8 +113,8 @@ class K {
|
|
|
109
113
|
*/
|
|
110
114
|
getItem(e) {
|
|
111
115
|
i(e) || c.error(I("getItem", u.get(1))), T.isString(e) || c.error(I("getItem", u.get(2)));
|
|
112
|
-
let r = this.
|
|
113
|
-
return i(r) && this.options.debug && c.success(I("getItem", u.get(4),
|
|
116
|
+
let r = this._module.getItem(e);
|
|
117
|
+
return i(r) && this.options.debug && c.success(I("getItem", u.get(4), k(e), v(r))), this.options.auto_parse && i(r) && M(r) && (r = JSON.parse(r)), r;
|
|
114
118
|
}
|
|
115
119
|
/**
|
|
116
120
|
* 增加项
|
|
@@ -120,11 +124,11 @@ class K {
|
|
|
120
124
|
*/
|
|
121
125
|
setItem(e, r) {
|
|
122
126
|
(!i(e) || T.isEmptyString(e)) && c.error(I("setItem", u.get(1))), T.isString(e) || c.error(I("setItem", u.get(2))), i(r) || c.error(I("setItem", u.get(3)));
|
|
123
|
-
const
|
|
124
|
-
if (!this.options.auto_cover && i(
|
|
125
|
-
return c.warn(I("setItem", u.get(5),
|
|
126
|
-
let
|
|
127
|
-
return this.options.auto_stringify && !M(r) && (
|
|
127
|
+
const o = this._module.getItem(e);
|
|
128
|
+
if (!this.options.auto_cover && i(o))
|
|
129
|
+
return c.warn(I("setItem", u.get(5), k(e), v(o))), !1;
|
|
130
|
+
let s = r;
|
|
131
|
+
return this.options.auto_stringify && !M(r) && (s = JSON.stringify(r)), this._module.setItem(e, s), i(this._module.getItem(e)) ? (this.options.debug && c.success(I("setItem", u.get(i(o) ? 7 : 6), k(e), v(s))), !0) : !1;
|
|
128
132
|
}
|
|
129
133
|
/**
|
|
130
134
|
* 移除项
|
|
@@ -133,42 +137,34 @@ class K {
|
|
|
133
137
|
*/
|
|
134
138
|
removeItem(e) {
|
|
135
139
|
i(e) || c.error(I("removeItem", u.get(1))), T.isString(e) || c.error(I("removeItem", u.get(2)));
|
|
136
|
-
const r = this.
|
|
137
|
-
return i(r) || c.warn(I("removeItem", u.get(8))), this.
|
|
140
|
+
const r = this._module.getItem(e);
|
|
141
|
+
return i(r) || c.warn(I("removeItem", u.get(8))), this._module.removeItem(e), i(this._module.getItem(e)) ? !1 : (i(r) && this.options.debug && c.success(I("removeItem", u.get(9))), !0);
|
|
138
142
|
}
|
|
139
143
|
/**
|
|
140
144
|
* 获取长度
|
|
141
145
|
* @returns {number} 长度
|
|
142
146
|
*/
|
|
143
147
|
length() {
|
|
144
|
-
return c.success(I("length", u.get(11))), this.
|
|
148
|
+
return c.success(I("length", u.get(11))), this._module.length;
|
|
145
149
|
}
|
|
146
150
|
/**
|
|
147
151
|
* 清空
|
|
148
152
|
* @returns {boolean} 操作结果
|
|
149
153
|
*/
|
|
150
154
|
clear() {
|
|
151
|
-
this.
|
|
155
|
+
this._module.clear();
|
|
152
156
|
let e = this.length();
|
|
153
157
|
return i(e) && e === 0 ? (this.options.debug && c.success(I("clear", u.get(10))), !0) : !1;
|
|
154
158
|
}
|
|
155
159
|
}
|
|
156
160
|
class re extends K {
|
|
157
|
-
constructor(
|
|
158
|
-
super(
|
|
159
|
-
/**
|
|
160
|
-
* @type {LocalStorage}
|
|
161
|
-
*/
|
|
162
|
-
h(this, "module", window.localStorage);
|
|
161
|
+
constructor(e) {
|
|
162
|
+
super(e), this._module = window.localStorage;
|
|
163
163
|
}
|
|
164
164
|
}
|
|
165
165
|
class se extends K {
|
|
166
|
-
constructor(
|
|
167
|
-
super(
|
|
168
|
-
/**
|
|
169
|
-
* @type {SessionStorage}
|
|
170
|
-
*/
|
|
171
|
-
h(this, "module", window.sessionStorage);
|
|
166
|
+
constructor(e) {
|
|
167
|
+
super(e), this._module = window.sessionStorage;
|
|
172
168
|
}
|
|
173
169
|
}
|
|
174
170
|
class ne {
|
|
@@ -209,29 +205,29 @@ class ne {
|
|
|
209
205
|
*/
|
|
210
206
|
h(this, "data", null);
|
|
211
207
|
this.type = e;
|
|
212
|
-
const { code:
|
|
213
|
-
this.code =
|
|
208
|
+
const { code: o, data: s, method: a } = r;
|
|
209
|
+
this.code = o, this.method = a, this.status = o === 200 ? "success" : "error", this.data = s, this.message = ae(e, o);
|
|
214
210
|
}
|
|
215
211
|
}
|
|
216
|
-
function
|
|
212
|
+
function ae(t, e) {
|
|
217
213
|
let r = "";
|
|
218
214
|
switch (t) {
|
|
219
|
-
case
|
|
215
|
+
case R:
|
|
220
216
|
r = e === 200 ? "操作成功" : "操作失败";
|
|
221
217
|
break;
|
|
222
|
-
case
|
|
218
|
+
case U:
|
|
223
219
|
r = e === 200 ? "操作成功" : "操作失败";
|
|
224
220
|
break;
|
|
225
|
-
case
|
|
221
|
+
case A:
|
|
226
222
|
r = e === 200 ? "操作成功" : "操作失败";
|
|
227
223
|
break;
|
|
228
224
|
}
|
|
229
225
|
return r;
|
|
230
226
|
}
|
|
231
227
|
function f(t, e, r) {
|
|
232
|
-
return new ne(
|
|
228
|
+
return new ne(A, { method: t, code: e, data: r });
|
|
233
229
|
}
|
|
234
|
-
const b = L[2], F = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB,
|
|
230
|
+
const b = L[2], F = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB, g = {
|
|
235
231
|
DB_OPEN_SUCCESS: "数据库打开成功",
|
|
236
232
|
DB_OPEN_FAIL: "数据库打开失败",
|
|
237
233
|
DB_CREATE_SUCCESS: "数据库创建成功",
|
|
@@ -254,41 +250,41 @@ const b = L[2], F = window.indexedDB || window.mozIndexedDB || window.webkitInde
|
|
|
254
250
|
DI_BATCH_DELETE_SUCCESS: "批量数据删除成功",
|
|
255
251
|
DI_BATCH_ADD_SUCCESS: "批量数据添加成功"
|
|
256
252
|
};
|
|
257
|
-
function
|
|
253
|
+
function oe(t) {
|
|
258
254
|
return `📦${t}`;
|
|
259
255
|
}
|
|
260
|
-
function
|
|
256
|
+
function B(t) {
|
|
261
257
|
return `📊${t}`;
|
|
262
258
|
}
|
|
263
|
-
function
|
|
259
|
+
function y(t, e, r) {
|
|
264
260
|
return `数据项(key:${t}): ${r}` + (e ? `; 值为: ${e}` : "");
|
|
265
261
|
}
|
|
266
262
|
function H(t, e, r) {
|
|
267
|
-
const { debug:
|
|
268
|
-
return new Promise((
|
|
263
|
+
const { debug: o, version: s } = r, a = oe(t);
|
|
264
|
+
return new Promise((n, l) => {
|
|
269
265
|
i(t) && i(e) || c.error(b("init", S.get(1)));
|
|
270
266
|
let d = null;
|
|
271
|
-
const
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
},
|
|
275
|
-
const { newVersion:
|
|
276
|
-
d = m.target.result, i(d) || c.error(b("init",
|
|
277
|
-
},
|
|
278
|
-
m.target.error ?
|
|
267
|
+
const _ = s ? F.open(t, s) : F.open(t);
|
|
268
|
+
_.onsuccess = () => {
|
|
269
|
+
o && c.success(b("init", a, g.DB_OPEN_SUCCESS)), d = _.result, n(d);
|
|
270
|
+
}, _.onupgradeneeded = (m) => {
|
|
271
|
+
const { newVersion: O, oldVersion: j } = m;
|
|
272
|
+
d = m.target.result, i(d) || c.error(b("init", a, g.DB_CREATE_FAIL)), j && O && O > j ? o && c.success(b("init", a, `${g.DB_VERSION_LEVELUP}(${j} ➡️ ${O})`)) : o && c.success(b("init", a, g.DB_CREATE_SUCCESS)), V(d, e) || ie(d, r);
|
|
273
|
+
}, _.onerror = (m) => {
|
|
274
|
+
m.target.error ? l(m.target.error) : l(new Error(b("init", a, g.DB_OPEN_FAIL)));
|
|
279
275
|
};
|
|
280
276
|
});
|
|
281
277
|
}
|
|
282
278
|
function ce(t, e) {
|
|
283
|
-
return new Promise(async (r,
|
|
284
|
-
const { databaseName:
|
|
285
|
-
if (V(t,
|
|
286
|
-
e.debug && c.success(b("init",
|
|
279
|
+
return new Promise(async (r, o) => {
|
|
280
|
+
const { databaseName: s, tableName: a } = e;
|
|
281
|
+
if (V(t, a))
|
|
282
|
+
e.debug && c.success(b("init", B(a), g.TB_EXITS)), r(t);
|
|
287
283
|
else {
|
|
288
|
-
const
|
|
289
|
-
return t.close(), H(
|
|
284
|
+
const n = t.version + 1;
|
|
285
|
+
return t.close(), H(s, a, {
|
|
290
286
|
...e,
|
|
291
|
-
version:
|
|
287
|
+
version: n
|
|
292
288
|
});
|
|
293
289
|
}
|
|
294
290
|
});
|
|
@@ -298,173 +294,177 @@ function V(t, e) {
|
|
|
298
294
|
}
|
|
299
295
|
function ie(t, e) {
|
|
300
296
|
console.log(e);
|
|
301
|
-
const { tableName: r, primaryKey:
|
|
302
|
-
i(
|
|
297
|
+
const { tableName: r, primaryKey: o, autoIncrement: s } = e;
|
|
298
|
+
i(o) || c.error(b("init", B(r), g.TB_LACK_PRIMARY)), t.createObjectStore(r, { keyPath: o, autoIncrement: s }), !e.noMessage && e.debug && c.success(b("init", B(r), g.TB_CREATE_SUCCESS));
|
|
303
299
|
}
|
|
304
300
|
function ue(t, e) {
|
|
305
|
-
return new Promise(async (r,
|
|
306
|
-
const o = await U(t, { ...e, noMessage: !0 }), n = o.code === 200 && i(o.data);
|
|
301
|
+
return new Promise(async (r, o) => {
|
|
307
302
|
let s = null;
|
|
308
|
-
if (e.
|
|
309
|
-
s =
|
|
303
|
+
if (e.autoIncrement)
|
|
304
|
+
s = N(t, e);
|
|
310
305
|
else {
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
306
|
+
const n = await P(t, { ...e, noMessage: !0 }), l = n.code === 200 && i(n.data);
|
|
307
|
+
if (e.auto_cover)
|
|
308
|
+
s = l ? le(t, e) : N(t, e);
|
|
309
|
+
else {
|
|
310
|
+
if (l)
|
|
311
|
+
return c.warn(b("setItem", g.DI_EXITS, outputDataValue(n.data))), r(f("setItem", 0, !1)), null;
|
|
312
|
+
s = N(t, e);
|
|
313
|
+
}
|
|
314
314
|
}
|
|
315
|
-
const
|
|
316
|
-
r(
|
|
315
|
+
const a = await s;
|
|
316
|
+
r(a);
|
|
317
317
|
});
|
|
318
318
|
}
|
|
319
|
-
function
|
|
320
|
-
return new Promise((r,
|
|
321
|
-
const
|
|
319
|
+
function N(t, e) {
|
|
320
|
+
return new Promise((r, o) => {
|
|
321
|
+
const s = {
|
|
322
322
|
...e.value
|
|
323
323
|
};
|
|
324
|
-
!e.autoIncrement && !i(
|
|
325
|
-
const
|
|
326
|
-
|
|
327
|
-
!e.noMessage && e.debug && c.success(
|
|
328
|
-
},
|
|
329
|
-
console.log(
|
|
324
|
+
!e.autoIncrement && !i(s[e.primaryKey]) && (s[e.primaryKey] = e.key), e.autoIncrement && i(s[e.primaryKey]) && delete s[e.primaryKey];
|
|
325
|
+
const a = t.transaction([e.tableName], "readwrite").objectStore(e.tableName).add(s);
|
|
326
|
+
a.onsuccess = () => {
|
|
327
|
+
!e.noMessage && e.debug && c.success(y(e.key, JSON.stringify(e.value), g.DI_CREATE_SUCCESS)), r(f("addItem", 200, s));
|
|
328
|
+
}, a.onerror = (n) => {
|
|
329
|
+
console.log(n), o(new Error(y(e.key, null, g.DI_CREATE_FAIL)));
|
|
330
330
|
};
|
|
331
331
|
});
|
|
332
332
|
}
|
|
333
333
|
function le(t, e) {
|
|
334
|
-
return new Promise((r,
|
|
335
|
-
const
|
|
334
|
+
return new Promise((r, o) => {
|
|
335
|
+
const s = {
|
|
336
336
|
...e.value
|
|
337
337
|
};
|
|
338
|
-
e.primaryKey && (
|
|
339
|
-
const
|
|
340
|
-
|
|
341
|
-
!e.noMessage && e.debug && c.success(
|
|
342
|
-
const
|
|
343
|
-
|
|
344
|
-
},
|
|
345
|
-
|
|
338
|
+
e.primaryKey && (s[e.primaryKey] = e.key);
|
|
339
|
+
const a = t.transaction([e.tableName], "readwrite").objectStore(e.tableName).put(s);
|
|
340
|
+
a.onsuccess = async () => {
|
|
341
|
+
!e.noMessage && e.debug && c.success(y(e.key, JSON.stringify(e.value), g.DI_UPDATE_SUCCESS));
|
|
342
|
+
const n = await P(t, { ...e, noMessage: !0 });
|
|
343
|
+
n.code === 200 && i(n.data) ? r(f("setItem", 200, n.data)) : r(f("setItem", 200, null));
|
|
344
|
+
}, a.onerror = (n) => {
|
|
345
|
+
o(new Error(y(e.key, null, g.DI_UPDATE_FAIL)));
|
|
346
346
|
};
|
|
347
347
|
});
|
|
348
348
|
}
|
|
349
|
-
function
|
|
350
|
-
return new Promise((r,
|
|
351
|
-
const
|
|
352
|
-
let
|
|
353
|
-
|
|
354
|
-
const d =
|
|
355
|
-
d ? (!e.noMessage && e.debug && c.success(
|
|
356
|
-
},
|
|
357
|
-
|
|
349
|
+
function P(t, e) {
|
|
350
|
+
return new Promise((r, o) => {
|
|
351
|
+
const s = t.transaction([e.tableName], "readonly").objectStore(e.tableName);
|
|
352
|
+
let a = e.autoIncrement ? Number(e.key) : e.key, n = s.get(a);
|
|
353
|
+
n.onsuccess = (l) => {
|
|
354
|
+
const d = l.target.result;
|
|
355
|
+
d ? (!e.noMessage && e.debug && c.success(y(e.key, JSON.stringify(d), g.DI_QUERY_SUCCESS)), r(f("getItem", 200, d))) : r(f("getItem", 200, null));
|
|
356
|
+
}, n.onerror = (l) => {
|
|
357
|
+
o(new Error(g.DI_QUERY_ERROR));
|
|
358
358
|
};
|
|
359
359
|
});
|
|
360
360
|
}
|
|
361
361
|
function ge(t, e) {
|
|
362
|
-
return new Promise((r,
|
|
363
|
-
let
|
|
364
|
-
|
|
365
|
-
const
|
|
366
|
-
r(
|
|
367
|
-
},
|
|
368
|
-
|
|
362
|
+
return new Promise((r, o) => {
|
|
363
|
+
let a = t.transaction([e.tableName], "readonly").objectStore(e.tableName).getAll();
|
|
364
|
+
a.onsuccess = (n) => {
|
|
365
|
+
const l = n.target.result;
|
|
366
|
+
r(l ? f("getAllItem", 200, l) : f("getAllItem", 200, null));
|
|
367
|
+
}, a.onerror = (n) => {
|
|
368
|
+
o(new Error(g.DI_QUERY_ERROR));
|
|
369
369
|
};
|
|
370
370
|
});
|
|
371
371
|
}
|
|
372
372
|
function q(t, e) {
|
|
373
|
-
return new Promise((r,
|
|
374
|
-
const
|
|
375
|
-
|
|
376
|
-
!e.noMessage && e.debug && c.success(
|
|
377
|
-
},
|
|
378
|
-
|
|
373
|
+
return new Promise((r, o) => {
|
|
374
|
+
const s = t.transaction([e.tableName], "readwrite").objectStore(e.tableName).delete(e.key);
|
|
375
|
+
s.onsuccess = (a) => {
|
|
376
|
+
!e.noMessage && e.debug && c.success(y(e.key, null, g.DI_DELETE_SUCCESS)), r(f("removeItem", 200, !0));
|
|
377
|
+
}, s.onerror = (a) => {
|
|
378
|
+
o(new Error(y(e.key, null, g.DI_DELETE_ERROR)));
|
|
379
379
|
};
|
|
380
380
|
});
|
|
381
381
|
}
|
|
382
382
|
function me(t, e) {
|
|
383
|
-
return new Promise((r,
|
|
384
|
-
const
|
|
385
|
-
|
|
386
|
-
!e.noMessage && e.debug && c.success(
|
|
387
|
-
},
|
|
388
|
-
|
|
383
|
+
return new Promise((r, o) => {
|
|
384
|
+
const a = t.transaction(e.tableName).objectStore(e.tableName).count();
|
|
385
|
+
a.onsuccess = () => {
|
|
386
|
+
!e.noMessage && e.debug && c.success(B(e.tableName)), r(f("length", 200, a.result));
|
|
387
|
+
}, a.onerror = () => {
|
|
388
|
+
o(new Error(B(e.tableName)));
|
|
389
389
|
};
|
|
390
390
|
});
|
|
391
391
|
}
|
|
392
392
|
function de(t, e) {
|
|
393
|
-
return new Promise((r,
|
|
394
|
-
const
|
|
395
|
-
|
|
396
|
-
!e.noMessage && e.debug && c.success(
|
|
397
|
-
},
|
|
398
|
-
|
|
393
|
+
return new Promise((r, o) => {
|
|
394
|
+
const a = t.transaction([e.tableName], "readwrite").objectStore(e.tableName).clear();
|
|
395
|
+
a.onsuccess = (n) => {
|
|
396
|
+
!e.noMessage && e.debug && c.success(B(e.tableName)), r(f("clear", 200, !0));
|
|
397
|
+
}, a.onerror = (n) => {
|
|
398
|
+
o(new Error(g.TB_CLEAR_FAIL));
|
|
399
399
|
};
|
|
400
400
|
});
|
|
401
401
|
}
|
|
402
402
|
function Se(t, e, r) {
|
|
403
|
-
return new Promise((
|
|
404
|
-
let
|
|
405
|
-
Promise.allSettled(
|
|
406
|
-
const
|
|
403
|
+
return new Promise((o, s) => {
|
|
404
|
+
let a = e.map((n) => N(t, { ...r, key: _e(n, r.primaryKey), value: n }));
|
|
405
|
+
Promise.allSettled(a).then((n) => {
|
|
406
|
+
const l = n.filter((m) => m.status === "fulfilled" && m.value.code === 200 && i(m.value.data)).length, d = n.map((m) => m.value.data), _ = {
|
|
407
407
|
total: e.length,
|
|
408
|
-
success:
|
|
409
|
-
fail: e.length -
|
|
408
|
+
success: l,
|
|
409
|
+
fail: e.length - l,
|
|
410
410
|
data: d
|
|
411
411
|
};
|
|
412
|
-
r.debug && c.success(
|
|
413
|
-
}).catch((
|
|
414
|
-
|
|
412
|
+
r.debug && c.success(g.DI_BATCH_ADD_SUCCESS), o(f("batchSetItem", 200, _));
|
|
413
|
+
}).catch((n) => {
|
|
414
|
+
s(n);
|
|
415
415
|
});
|
|
416
416
|
});
|
|
417
417
|
}
|
|
418
418
|
function fe(t, e, r) {
|
|
419
|
-
return new Promise((
|
|
419
|
+
return new Promise((o, s) => {
|
|
420
420
|
if (e.length === 0)
|
|
421
|
-
ge(t, { ...r }).then((
|
|
422
|
-
const
|
|
423
|
-
|
|
424
|
-
}).catch((
|
|
425
|
-
|
|
421
|
+
ge(t, { ...r }).then((a) => {
|
|
422
|
+
const n = Ie(a.data, r.filter);
|
|
423
|
+
a.code === 200 && i(a.data) ? (r.debug && c.success(g.DI_BATCH_QUERY_SUCCESS), o(f("batchGetItem", 200, n))) : o(f("batchGetItem", 200, null));
|
|
424
|
+
}).catch((a) => {
|
|
425
|
+
s(a);
|
|
426
426
|
});
|
|
427
427
|
else {
|
|
428
|
-
let
|
|
429
|
-
Promise.allSettled(
|
|
430
|
-
let
|
|
431
|
-
const d =
|
|
428
|
+
let a = e.filter((n) => i(n)).map((n) => P(t, { ...r, key: n, noMessage: !0 }));
|
|
429
|
+
Promise.allSettled(a).then((n) => {
|
|
430
|
+
let l = n.filter((m) => m.status === "fulfilled" && m.value.code === 200 && i(m.value.data)).filter((m) => r.filter ? r.filter(m.value.data) : !0).map((m) => m.value.data);
|
|
431
|
+
const d = l.length, _ = {
|
|
432
432
|
total: e.length,
|
|
433
433
|
success: d === e.length,
|
|
434
434
|
process: { success: d, fail: e.length - d },
|
|
435
435
|
// 成功数、失败数
|
|
436
|
-
data:
|
|
436
|
+
data: l
|
|
437
437
|
};
|
|
438
|
-
r.debug && c.success(
|
|
439
|
-
}).catch((
|
|
440
|
-
|
|
438
|
+
r.debug && c.success(g.DI_BATCH_QUERY_SUCCESS), o(f("batchGetItem", 200, _));
|
|
439
|
+
}).catch((n) => {
|
|
440
|
+
s(n);
|
|
441
441
|
});
|
|
442
442
|
}
|
|
443
443
|
});
|
|
444
444
|
}
|
|
445
445
|
function he(t, e, r) {
|
|
446
|
-
return new Promise((
|
|
447
|
-
let
|
|
448
|
-
Promise.allSettled(
|
|
449
|
-
const
|
|
446
|
+
return new Promise((o, s) => {
|
|
447
|
+
let a = e.filter((n) => i(n)).map((n) => q(t, { ...r, key: n, noMessage: !0 }));
|
|
448
|
+
Promise.allSettled(a).then((n) => {
|
|
449
|
+
const l = n.filter((_) => _.status === "fulfilled" && _.value.code === 200 && i(_.value.data)).length, d = {
|
|
450
450
|
total: e.length,
|
|
451
|
-
success:
|
|
452
|
-
fail: e.length -
|
|
453
|
-
data:
|
|
451
|
+
success: l,
|
|
452
|
+
fail: e.length - l,
|
|
453
|
+
data: l === e.length
|
|
454
454
|
};
|
|
455
|
-
r.debug && c.success(
|
|
456
|
-
}).catch((
|
|
457
|
-
|
|
455
|
+
r.debug && c.success(g.DI_BATCH_DELETE_SUCCESS), o(f("batchRemoveItem", 200, d));
|
|
456
|
+
}).catch((n) => {
|
|
457
|
+
s(n);
|
|
458
458
|
});
|
|
459
459
|
});
|
|
460
460
|
}
|
|
461
461
|
function Ie(t, e) {
|
|
462
462
|
return t.filter((r) => e ? e(r) : !0);
|
|
463
463
|
}
|
|
464
|
-
function
|
|
464
|
+
function _e(t, e) {
|
|
465
465
|
return z(t[e], null);
|
|
466
466
|
}
|
|
467
|
-
const D = L[2],
|
|
467
|
+
const D = L[2], Ee = {
|
|
468
468
|
auto_cover: !1
|
|
469
469
|
};
|
|
470
470
|
class be {
|
|
@@ -484,7 +484,7 @@ class be {
|
|
|
484
484
|
* @type {number}
|
|
485
485
|
*/
|
|
486
486
|
h(this, "version", null);
|
|
487
|
-
this.options = Object.assign(
|
|
487
|
+
this.options = Object.assign(Ee, e);
|
|
488
488
|
}
|
|
489
489
|
/**
|
|
490
490
|
* 初始化数据库
|
|
@@ -493,8 +493,8 @@ class be {
|
|
|
493
493
|
async init() {
|
|
494
494
|
const { databaseName: e, tableName: r } = this.options;
|
|
495
495
|
this.db = await H(e, r, this.options);
|
|
496
|
-
const
|
|
497
|
-
return this.db =
|
|
496
|
+
const o = await ce(this.db, this.options);
|
|
497
|
+
return this.db = o, this.version = this.db.version, this.options.autoIncrement = this.db.transaction([r], "readonly").objectStore(r).autoIncrement, this.db;
|
|
498
498
|
}
|
|
499
499
|
/**
|
|
500
500
|
* 获取数据✔️
|
|
@@ -502,7 +502,7 @@ class be {
|
|
|
502
502
|
* @returns {Promise}
|
|
503
503
|
*/
|
|
504
504
|
getItem(e) {
|
|
505
|
-
return i(e) || c.error(D("getItem", S.get(1))),
|
|
505
|
+
return i(e) || c.error(D("getItem", S.get(1))), P(this.db, { ...this.options, key: e });
|
|
506
506
|
}
|
|
507
507
|
/**
|
|
508
508
|
* 增加、更新数据✔️
|
|
@@ -537,29 +537,29 @@ class be {
|
|
|
537
537
|
* @param {import('../index.js').BatchProcessItemList} itemList 待处理的数据列表
|
|
538
538
|
* @param {import('../index.js').BatchProcessOptions} options 配置项
|
|
539
539
|
*/
|
|
540
|
-
batchProcess(e, r,
|
|
540
|
+
batchProcess(e, r, o = {}) {
|
|
541
541
|
i(e) || c.error(D("batchProcess", S.get(6))), i(r) || c.error(D("batchProcess", S.get(7)));
|
|
542
|
-
let
|
|
542
|
+
let s = null;
|
|
543
543
|
switch (e) {
|
|
544
544
|
case "get":
|
|
545
|
-
|
|
545
|
+
s = fe;
|
|
546
546
|
break;
|
|
547
547
|
case "add":
|
|
548
|
-
|
|
548
|
+
s = Se;
|
|
549
549
|
break;
|
|
550
550
|
case "delete":
|
|
551
|
-
|
|
551
|
+
s = he;
|
|
552
552
|
break;
|
|
553
553
|
}
|
|
554
|
-
return
|
|
554
|
+
return s || c.error(D("batchProcess", S.get(8))), s(this.db, r, { ...this.options, ...o });
|
|
555
555
|
}
|
|
556
556
|
}
|
|
557
557
|
window.BrowserStoreKitMode = {
|
|
558
|
-
LOCAL_STORAGE:
|
|
559
|
-
SESSION_STORAGE:
|
|
560
|
-
INDEXED_DB:
|
|
558
|
+
LOCAL_STORAGE: R,
|
|
559
|
+
SESSION_STORAGE: U,
|
|
560
|
+
INDEXED_DB: A
|
|
561
561
|
};
|
|
562
|
-
var
|
|
562
|
+
var E, G, C;
|
|
563
563
|
class we {
|
|
564
564
|
/**
|
|
565
565
|
* 构造函数,用于初始化BrowserStoreKit。
|
|
@@ -567,7 +567,7 @@ class we {
|
|
|
567
567
|
* @param {BrowserStoreKitOptions} options 自定义参数
|
|
568
568
|
*/
|
|
569
569
|
constructor(e, r) {
|
|
570
|
-
p(this,
|
|
570
|
+
p(this, E);
|
|
571
571
|
/**
|
|
572
572
|
* @type {BrowserStoreKitModeOptions} 存储模块类型
|
|
573
573
|
*/
|
|
@@ -576,10 +576,10 @@ class we {
|
|
|
576
576
|
* @type {LocalStorage | SessionStorage | IndexedDB}
|
|
577
577
|
*/
|
|
578
578
|
h(this, "kitTool", null);
|
|
579
|
-
this.type = e, w(this,
|
|
579
|
+
this.type = e, w(this, E, G).call(this, r);
|
|
580
580
|
}
|
|
581
581
|
init() {
|
|
582
|
-
return this.type !==
|
|
582
|
+
return this.type !== A ? c.error(`当前模式:${this.type}下无需调用init方法`) : (w(this, E, C).call(this, "init"), this.kitTool.init());
|
|
583
583
|
}
|
|
584
584
|
/**
|
|
585
585
|
* 获取数据
|
|
@@ -587,7 +587,7 @@ class we {
|
|
|
587
587
|
* @returns {Promise}
|
|
588
588
|
*/
|
|
589
589
|
getItem(e) {
|
|
590
|
-
return w(this,
|
|
590
|
+
return w(this, E, C).call(this, "getItem"), this.kitTool.getItem(e);
|
|
591
591
|
}
|
|
592
592
|
/**
|
|
593
593
|
* 插入数据
|
|
@@ -596,7 +596,7 @@ class we {
|
|
|
596
596
|
* @returns {Promise}
|
|
597
597
|
*/
|
|
598
598
|
setItem(e, r) {
|
|
599
|
-
return w(this,
|
|
599
|
+
return w(this, E, C).call(this, "setItem"), this.kitTool.setItem(e, r);
|
|
600
600
|
}
|
|
601
601
|
/**
|
|
602
602
|
* 移除数据
|
|
@@ -604,17 +604,17 @@ class we {
|
|
|
604
604
|
* @returns {Promise}
|
|
605
605
|
*/
|
|
606
606
|
removeItem(e) {
|
|
607
|
-
return w(this,
|
|
607
|
+
return w(this, E, C).call(this, "removeItem"), this.kitTool.removeItem(e);
|
|
608
608
|
}
|
|
609
609
|
/**
|
|
610
610
|
* 求数据长度
|
|
611
611
|
* @returns {Promise}
|
|
612
612
|
*/
|
|
613
613
|
length() {
|
|
614
|
-
return w(this,
|
|
614
|
+
return w(this, E, C).call(this, "length"), this.kitTool.length();
|
|
615
615
|
}
|
|
616
616
|
clear() {
|
|
617
|
-
return w(this,
|
|
617
|
+
return w(this, E, C).call(this, "clear"), this.kitTool.clear();
|
|
618
618
|
}
|
|
619
619
|
/**
|
|
620
620
|
* 获取配置参数
|
|
@@ -629,23 +629,23 @@ class we {
|
|
|
629
629
|
* @param {BatchProcessItemList} itemList 待处理项列表
|
|
630
630
|
* @param {BatchProcessOptions} options 配置参数
|
|
631
631
|
*/
|
|
632
|
-
batchProcess(e, r,
|
|
633
|
-
return this.kitTool.batchProcess(e, r,
|
|
632
|
+
batchProcess(e, r, o) {
|
|
633
|
+
return this.kitTool.batchProcess(e, r, o);
|
|
634
634
|
}
|
|
635
635
|
}
|
|
636
|
-
|
|
636
|
+
E = new WeakSet(), G = function(e) {
|
|
637
637
|
switch (this.type) {
|
|
638
|
-
case
|
|
638
|
+
case R:
|
|
639
639
|
if (!W())
|
|
640
640
|
throw Error("抱歉,当前浏览器暂不支持使用localStorage");
|
|
641
641
|
this.kitTool = new re(e.localStorage);
|
|
642
642
|
break;
|
|
643
|
-
case
|
|
643
|
+
case U:
|
|
644
644
|
if (!Z())
|
|
645
645
|
throw Error("抱歉,当前浏览器暂不支持使用sessionStorage");
|
|
646
646
|
this.kitTool = new se(e.sessionStorage);
|
|
647
647
|
break;
|
|
648
|
-
case
|
|
648
|
+
case A:
|
|
649
649
|
if (!ee())
|
|
650
650
|
throw Error("抱歉,当前浏览器暂不支持使用indexedDB");
|
|
651
651
|
this.kitTool = new be(e.indexedDB);
|
|
@@ -655,8 +655,8 @@ _ = new WeakSet(), G = function(e) {
|
|
|
655
655
|
this.kitTool || c.error("抱歉,未正确实例化,暂时无法使用" + e + "方法");
|
|
656
656
|
};
|
|
657
657
|
export {
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
658
|
+
A as INDEXED_DB,
|
|
659
|
+
R as LOCAL_STORAGE,
|
|
660
|
+
U as SESSION_STORAGE,
|
|
661
661
|
we as default
|
|
662
662
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(s,g){typeof exports=="object"&&typeof module<"u"?module.exports=g():typeof define=="function"&&define.amd?define(g):(s=typeof globalThis<"u"?globalThis:s||self,s.BrowserStoreKit=g())})(this,function(){"use strict";var _e=Object.defineProperty;var q=s=>{throw TypeError(s)};var be=(s,g,E)=>g in s?_e(s,g,{enumerable:!0,configurable:!0,writable:!0,value:E}):s[g]=E;var I=(s,g,E)=>be(s,typeof g!="symbol"?g+"":g,E),De=(s,g,E)=>g.has(s)||q("Cannot "+E);var G=(s,g,E)=>g.has(s)?q("Cannot add the same private member more than once"):g instanceof WeakSet?g.add(s):g.set(s,E);var T=(s,g,E)=>(De(s,g,"access private method"),E);var D,J,y;function s(t){return t!=null}function g(t,e){return s(t)?t:e}function E(t){try{const e=JSON.parse(t);return e&&typeof e=="object"&&!Array.isArray(e)}catch{return!1}}function Q(){return s(window.localStorage)}function X(){return s(window.sessionStorage)}function z(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB}const A={isString:t=>s(t)&&typeof t=="string",isEmptyString:t=>s(t)&&typeof t=="string"&&t.trim()==="",isNumber:t=>s(t)&&typeof t=="number"&&!isNaN(t),isBoolean:t=>s(t)&&typeof t=="boolean",isFunction:t=>s(t)&&typeof t=="function",isObject:t=>Object.prototype.toString.call(t)==="[object Object]"};function $(t=new Date,e="YYYY-MM-DD HH:mm:ss"){const r=t.getFullYear(),c=String(t.getMonth()+1).padStart(2,"0"),a=String(t.getDate()).padStart(2,"0"),o=String(t.getHours()).padStart(2,"0"),n=String(t.getMinutes()).padStart(2,"0"),d=String(t.getSeconds()).padStart(2,"0");return e.replace("YYYY",r).replace("MM",c).replace("DD",a).replace("HH",o).replace("mm",n).replace("ss",d)}const U="localStorage",P="sessionStorage",N="indexedDB",x={success:"#67c23a",warning:"#e6a23c"},i={error:t=>{throw new Error(t)},warn:t=>{console.log(`%c[${$()}] `+t,`color: ${x.warning};`)},info:t=>{console.log(t)},success:t=>{console.log(`%c[${$()}] `+t,`color: ${x.success};`)}},u=new Map;u.set(1,"缺少参数key"),u.set(2,"参数key类型有误,必须为string类型"),u.set(3,"缺少参数value"),u.set(4,"数据项获取成功"),u.set(5,"数据项已存在"),u.set(6,"数据项设置成功"),u.set(7,"数据项更新成功"),u.set(8,"数据项不存在"),u.set(9,"数据项移除成功"),u.set(10,"数据项清除成功"),u.set(11,"数据项长度获取成功");const f=new Map;f.set(1,"缺少参数databaseName(数据库名称)、tableName(数据表名称)"),f.set(2,"缺少参数key"),f.set(3,"参数key类型有误,必须为string 或 number类型"),f.set(4,"缺少参数value"),f.set(5,"参数value类型有误,必须为object类型"),f.set(6,"缺少参数mode(可选值: 'get'、'add'、'delete')"),f.set(7,"缺少参数itemList(批量操作数据集合)"),f.set(8,"参数mode值有误(可选值: 'get'、'add'、'delete')");const j=[(t,...e)=>`🔗${U} 📎[${t}]: ${e.join("➡️")}`,(t,...e)=>`🔗${P} 📎[${t}]: ${e.join("➡️")}`,(t,...e)=>`🔗${N} 📢[${t}]: ${e.join("➡️")}`];function v(t){return`(key: ${t})`}function M(t){return`值为${E(t)?t:JSON.stringify(t)}`}const _=j[0],W={auto_stringify:!1,auto_cover:!0,auto_parse:!1};class Y{constructor(e){I(this,"options",null);this.options=e||W}getItem(e){s(e)||i.error(_("getItem",u.get(1))),A.isString(e)||i.error(_("getItem",u.get(2)));let r=this.module.getItem(e);return s(r)&&this.options.debug&&i.success(_("getItem",u.get(4),v(e),M(r))),this.options.auto_parse&&s(r)&&E(r)&&(r=JSON.parse(r)),r}setItem(e,r){(!s(e)||A.isEmptyString(e))&&i.error(_("setItem",u.get(1))),A.isString(e)||i.error(_("setItem",u.get(2))),s(r)||i.error(_("setItem",u.get(3)));const c=this.module.getItem(e);if(!this.options.auto_cover&&s(c))return i.warn(_("setItem",u.get(5),v(e),M(c))),!1;let a=r;return this.options.auto_stringify&&!E(r)&&(a=JSON.stringify(r)),this.module.setItem(e,a),s(this.module.getItem(e))?(this.options.debug&&i.success(_("setItem",u.get(s(c)?7:6),v(e),M(a))),!0):!1}removeItem(e){s(e)||i.error(_("removeItem",u.get(1))),A.isString(e)||i.error(_("removeItem",u.get(2)));const r=this.module.getItem(e);return s(r)||i.warn(_("removeItem",u.get(8))),this.module.removeItem(e),s(this.module.getItem(e))?!1:(s(r)&&this.options.debug&&i.success(_("removeItem",u.get(9))),!0)}length(){return i.success(_("length",u.get(11))),this.module.length}clear(){this.module.clear();let e=this.length();return s(e)&&e===0?(this.options.debug&&i.success(_("clear",u.get(10))),!0):!1}}class Z extends Y{constructor(r){super(r);I(this,"module",window.localStorage)}}class ee extends Y{constructor(r){super(r);I(this,"module",window.sessionStorage)}}class te{constructor(e,r){I(this,"type",null);I(this,"method",null);I(this,"code",null);I(this,"status","");I(this,"message","");I(this,"data",null);this.type=e;const{code:c,data:a,method:o}=r;this.code=c,this.method=o,this.status=c===200?"success":"error",this.data=a,this.message=re(e,c)}}function re(t,e){let r="";switch(t){case U:r=e===200?"操作成功":"操作失败";break;case P:r=e===200?"操作成功":"操作失败";break;case N:r=e===200?"操作成功":"操作失败";break}return r}function h(t,e,r){return new te(N,{method:t,code:e,data:r})}const w=j[2],F=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB,l={DB_OPEN_SUCCESS:"数据库打开成功",DB_OPEN_FAIL:"数据库打开失败",DB_CREATE_SUCCESS:"数据库创建成功",DB_CREATE_FAIL:"数据库创建失败",DB_VERSION_LEVELUP:"数据库版本升级",TB_CREATE_SUCCESS:"数据表创建成功",TB_EXITS:"数据表已存在,无需创建",TB_LACK_PRIMARY:"数据表缺少主键",TB_CLEAR_FAIL:"数据表清空失败",DI_CREATE_SUCCESS:"数据项创建成功",DI_CREATE_FAIL:"数据项创建失败",DI_UPDATE_SUCCESS:"数据项创建成功",DI_UPDATE_FAIL:"数据项创建失败",DI_QUERY_SUCCESS:"数据查询成功",DI_QUERY_ERROR:"数据项查询出错",DI_DELETE_SUCCESS:"数据删除成功",DI_DELETE_ERROR:"数据项删除出错",DI_EXITS:"数据项已存在",DI_BATCH_QUERY_SUCCESS:"批量数据查询成功",DI_BATCH_DELETE_SUCCESS:"批量数据删除成功",DI_BATCH_ADD_SUCCESS:"批量数据添加成功"};function se(t){return`📦${t}`}function R(t){return`📊${t}`}function B(t,e,r){return`数据项(key:${t}): ${r}`+(e?`; 值为: ${e}`:"")}function K(t,e,r){const{debug:c,version:a}=r,o=se(t);return new Promise((n,d)=>{s(t)&&s(e)||i.error(w("init",f.get(1)));let S=null;const b=a?F.open(t,a):F.open(t);b.onsuccess=()=>{c&&i.success(w("init",o,l.DB_OPEN_SUCCESS)),S=b.result,n(S)},b.onupgradeneeded=m=>{const{newVersion:p,oldVersion:L}=m;S=m.target.result,s(S)||i.error(w("init",o,l.DB_CREATE_FAIL)),L&&p&&p>L?c&&i.success(w("init",o,`${l.DB_VERSION_LEVELUP}(${L} ➡️ ${p})`)):c&&i.success(w("init",o,l.DB_CREATE_SUCCESS)),H(S,e)||oe(S,r)},b.onerror=m=>{m.target.error?d(m.target.error):d(new Error(w("init",o,l.DB_OPEN_FAIL)))}})}function ne(t,e){return new Promise(async(r,c)=>{const{databaseName:a,tableName:o}=e;if(H(t,o))e.debug&&i.success(w("init",R(o),l.TB_EXITS)),r(t);else{const n=t.version+1;return t.close(),K(a,o,{...e,version:n})}})}function H(t,e){return t.objectStoreNames.contains(e)}function oe(t,e){console.log(e);const{tableName:r,primaryKey:c,autoIncrement:a}=e;s(c)||i.error(w("init",R(r),l.TB_LACK_PRIMARY)),t.createObjectStore(r,{keyPath:c,autoIncrement:a}),!e.noMessage&&e.debug&&i.success(w("init",R(r),l.TB_CREATE_SUCCESS))}function ae(t,e){return new Promise(async(r,c)=>{const a=await O(t,{...e,noMessage:!0}),o=a.code===200&&s(a.data);let n=null;if(e.auto_cover)n=o?ce(t,e):k(t,e);else{if(o)return i.warn(w("setItem",l.DI_EXITS,outputDataValue(a.data))),r(h("setItem",0,!1)),null;n=k(t,e)}const d=await n;r(d)})}function k(t,e){return new Promise((r,c)=>{const a={...e.value};!e.autoIncrement&&!s(a[e.primaryKey])&&(a[e.primaryKey]=e.key);const o=t.transaction([e.tableName],"readwrite").objectStore(e.tableName).add(a);o.onsuccess=()=>{!e.noMessage&&e.debug&&i.success(B(e.key,JSON.stringify(e.value),l.DI_CREATE_SUCCESS)),r(h("addItem",200,a))},o.onerror=n=>{console.log(n),c(new Error(B(e.key,null,l.DI_CREATE_FAIL)))}})}function ce(t,e){return new Promise((r,c)=>{const a={...e.value};e.primaryKey&&(a[e.primaryKey]=e.key);const o=t.transaction([e.tableName],"readwrite").objectStore(e.tableName).put(a);o.onsuccess=async()=>{!e.noMessage&&e.debug&&i.success(B(e.key,JSON.stringify(e.value),l.DI_UPDATE_SUCCESS));const n=await O(t,{...e,noMessage:!0});n.code===200&&s(n.data)?r(h("setItem",200,n.data)):r(h("setItem",200,null))},o.onerror=n=>{c(new Error(B(e.key,null,l.DI_UPDATE_FAIL)))}})}function O(t,e){return new Promise((r,c)=>{const a=t.transaction([e.tableName],"readonly").objectStore(e.tableName);let o=e.autoIncrement?Number(o):e.key,n=a.get(o);n.onsuccess=d=>{const S=d.target.result;S?(!e.noMessage&&e.debug&&i.success(B(e.key,JSON.stringify(S),l.DI_QUERY_SUCCESS)),r(h("getItem",200,S))):r(h("getItem",200,null))},n.onerror=d=>{c(new Error(l.DI_QUERY_ERROR))}})}function ie(t,e){return new Promise((r,c)=>{let o=t.transaction([e.tableName],"readonly").objectStore(e.tableName).getAll();o.onsuccess=n=>{const d=n.target.result;r(d?h("getAllItem",200,d):h("getAllItem",200,null))},o.onerror=n=>{c(new Error(l.DI_QUERY_ERROR))}})}function V(t,e){return new Promise((r,c)=>{const a=t.transaction([e.tableName],"readwrite").objectStore(e.tableName).delete(e.key);a.onsuccess=o=>{!e.noMessage&&e.debug&&i.success(B(e.key,null,l.DI_DELETE_SUCCESS)),r(h("removeItem",200,!0))},a.onerror=o=>{c(new Error(B(e.key,null,l.DI_DELETE_ERROR)))}})}function ue(t,e){return new Promise((r,c)=>{const o=t.transaction(e.tableName).objectStore(e.tableName).count();o.onsuccess=()=>{!e.noMessage&&e.debug&&i.success(R(e.tableName)),r(h("length",200,o.result))},o.onerror=()=>{c(new Error(R(e.tableName)))}})}function le(t,e){return new Promise((r,c)=>{const o=t.transaction([e.tableName],"readwrite").objectStore(e.tableName).clear();o.onsuccess=n=>{!e.noMessage&&e.debug&&i.success(R(e.tableName)),r(h("clear",200,!0))},o.onerror=n=>{c(new Error(l.TB_CLEAR_FAIL))}})}function ge(t,e,r){return new Promise((c,a)=>{let o=e.map(n=>k(t,{...r,key:Se(n,r.primaryKey),value:n}));Promise.allSettled(o).then(n=>{const d=n.filter(m=>m.status==="fulfilled"&&m.value.code===200&&s(m.value.data)).length,S=n.map(m=>m.value.data),b={total:e.length,success:d,fail:e.length-d,data:S};r.debug&&i.success(l.DI_BATCH_ADD_SUCCESS),c(h("batchSetItem",200,b))}).catch(n=>{a(n)})})}function de(t,e,r){return new Promise((c,a)=>{if(e.length===0)ie(t,{...r}).then(o=>{const n=fe(o.data,r.filter);o.code===200&&s(o.data)?(r.debug&&i.success(l.DI_BATCH_QUERY_SUCCESS),c(h("batchGetItem",200,n))):c(h("batchGetItem",200,null))}).catch(o=>{a(o)});else{let o=e.filter(n=>s(n)).map(n=>O(t,{...r,key:n,noMessage:!0}));Promise.allSettled(o).then(n=>{let d=n.filter(m=>m.status==="fulfilled"&&m.value.code===200&&s(m.value.data)).filter(m=>r.filter?r.filter(m.value.data):!0).map(m=>m.value.data);const S=d.length,b={total:e.length,success:S===e.length,process:{success:S,fail:e.length-S},data:d};r.debug&&i.success(l.DI_BATCH_QUERY_SUCCESS),c(h("batchGetItem",200,b))}).catch(n=>{a(n)})}})}function me(t,e,r){return new Promise((c,a)=>{let o=e.filter(n=>s(n)).map(n=>V(t,{...r,key:n,noMessage:!0}));Promise.allSettled(o).then(n=>{const d=n.filter(b=>b.status==="fulfilled"&&b.value.code===200&&s(b.value.data)).length,S={total:e.length,success:d,fail:e.length-d,data:d===e.length};r.debug&&i.success(l.DI_BATCH_DELETE_SUCCESS),c(h("batchRemoveItem",200,S))}).catch(n=>{a(n)})})}function fe(t,e){return t.filter(r=>e?e(r):!0)}function Se(t,e){return g(t[e],null)}const C=j[2],he={auto_cover:!1};class Ie{constructor(e={}){I(this,"options",null);I(this,"db",null);I(this,"version",null);this.options=Object.assign(he,e)}async init(){const{databaseName:e,tableName:r}=this.options;this.db=await K(e,r,this.options);const c=await ne(this.db,this.options);return this.db=c,this.version=this.db.version,this.options.autoIncrement=this.db.transaction([r],"readonly").objectStore(r).autoIncrement,this.db}getItem(e){return s(e)||i.error(C("getItem",f.get(1))),O(this.db,{...this.options,key:e})}setItem(e,r){return this.options.autoIncrement||s(e)||i.error(C("setItem",f.get(1))),s(r)||i.error(C("setItem",f.get(4))),A.isObject(r)||i.error(C("setItem",f.get(5))),ae(this.db,{...this.options,key:e,value:r})}removeItem(e){return s(e)||i.error(C("removeItem",f.get(2))),!A.isString(e)&&!A.isNumber(e)&&i.error(C("removeItem",f.get(3))),V(this.db,{...this.options,key:e})}length(){return ue(this.db,this.options)}clear(){return le(this.db,this.options)}batchProcess(e,r,c={}){s(e)||i.error(C("batchProcess",f.get(6))),s(r)||i.error(C("batchProcess",f.get(7)));let a=null;switch(e){case"get":a=de;break;case"add":a=ge;break;case"delete":a=me;break}return a||i.error(C("batchProcess",f.get(8))),a(this.db,r,{...this.options,...c})}}window.BrowserStoreKitMode={LOCAL_STORAGE:U,SESSION_STORAGE:P,INDEXED_DB:N};class Ee{constructor(e,r){G(this,D);I(this,"type",null);I(this,"kitTool",null);this.type=e,T(this,D,J).call(this,r)}init(){return this.type!==N?i.error(`当前模式:${this.type}下无需调用init方法`):(T(this,D,y).call(this,"init"),this.kitTool.init())}getItem(e){return T(this,D,y).call(this,"getItem"),this.kitTool.getItem(e)}setItem(e,r){return T(this,D,y).call(this,"setItem"),this.kitTool.setItem(e,r)}removeItem(e){return T(this,D,y).call(this,"removeItem"),this.kitTool.removeItem(e)}length(){return T(this,D,y).call(this,"length"),this.kitTool.length()}clear(){return T(this,D,y).call(this,"clear"),this.kitTool.clear()}getOptions(){return this.kitTool.options}batchProcess(e,r,c){return this.kitTool.batchProcess(e,r,c)}}return D=new WeakSet,J=function(e){switch(this.type){case U:if(!Q())throw Error("抱歉,当前浏览器暂不支持使用localStorage");this.kitTool=new Z(e.localStorage);break;case P:if(!X())throw Error("抱歉,当前浏览器暂不支持使用sessionStorage");this.kitTool=new ee(e.sessionStorage);break;case N:if(!z())throw Error("抱歉,当前浏览器暂不支持使用indexedDB");this.kitTool=new Ie(e.indexedDB);break}},y=function(e){this.kitTool||i.error("抱歉,未正确实例化,暂时无法使用"+e+"方法")},Ee});
|
|
1
|
+
(function(s,m){typeof exports=="object"&&typeof module<"u"?module.exports=m():typeof define=="function"&&define.amd?define(m):(s=typeof globalThis<"u"?globalThis:s||self,s.BrowserStoreKit=m())})(this,function(){"use strict";var Ee=Object.defineProperty;var q=s=>{throw TypeError(s)};var be=(s,m,I)=>m in s?Ee(s,m,{enumerable:!0,configurable:!0,writable:!0,value:I}):s[m]=I;var E=(s,m,I)=>be(s,typeof m!="symbol"?m+"":m,I),De=(s,m,I)=>m.has(s)||q("Cannot "+I);var G=(s,m,I)=>m.has(s)?q("Cannot add the same private member more than once"):m instanceof WeakSet?m.add(s):m.set(s,I);var T=(s,m,I)=>(De(s,m,"access private method"),I);var D,J,B;function s(t){return t!=null}function m(t,e){return s(t)?t:e}function I(t){try{const e=JSON.parse(t);return e&&typeof e=="object"&&!Array.isArray(e)}catch{return!1}}function Q(){return s(window.localStorage)}function X(){return s(window.sessionStorage)}function z(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB}const y={isString:t=>s(t)&&typeof t=="string",isEmptyString:t=>s(t)&&typeof t=="string"&&t.trim()==="",isNumber:t=>s(t)&&typeof t=="number"&&!isNaN(t),isBoolean:t=>s(t)&&typeof t=="boolean",isFunction:t=>s(t)&&typeof t=="function",isObject:t=>Object.prototype.toString.call(t)==="[object Object]"};function p(t=new Date,e="YYYY-MM-DD HH:mm:ss"){const r=t.getFullYear(),c=String(t.getMonth()+1).padStart(2,"0"),n=String(t.getDate()).padStart(2,"0"),a=String(t.getHours()).padStart(2,"0"),o=String(t.getMinutes()).padStart(2,"0"),g=String(t.getSeconds()).padStart(2,"0");return e.replace("YYYY",r).replace("MM",c).replace("DD",n).replace("HH",a).replace("mm",o).replace("ss",g)}const U="localStorage",P="sessionStorage",N="indexedDB",x={success:"#67c23a",warning:"#e6a23c"},i={error:t=>{throw new Error(t)},warn:t=>{console.log(`%c[${p()}] `+t,`color: ${x.warning};`)},info:t=>{console.log(t)},success:t=>{console.log(`%c[${p()}] `+t,`color: ${x.success};`)}},u=new Map;u.set(1,"缺少参数key"),u.set(2,"参数key类型有误,必须为string类型"),u.set(3,"缺少参数value"),u.set(4,"数据项获取成功"),u.set(5,"数据项已存在"),u.set(6,"数据项设置成功"),u.set(7,"数据项更新成功"),u.set(8,"数据项不存在"),u.set(9,"数据项移除成功"),u.set(10,"数据项清除成功"),u.set(11,"数据项长度获取成功");const f=new Map;f.set(1,"缺少参数databaseName(数据库名称)、tableName(数据表名称)"),f.set(2,"缺少参数key"),f.set(3,"参数key类型有误,必须为string 或 number类型"),f.set(4,"缺少参数value"),f.set(5,"参数value类型有误,必须为object类型"),f.set(6,"缺少参数mode(可选值: 'get'、'add'、'delete')"),f.set(7,"缺少参数itemList(批量操作数据集合)"),f.set(8,"参数mode值有误(可选值: 'get'、'add'、'delete')");const k=[(t,...e)=>`🔗${U} 📎[${t}]: ${e.join("➡️")}`,(t,...e)=>`🔗${P} 📎[${t}]: ${e.join("➡️")}`,(t,...e)=>`🔗${N} 📢[${t}]: ${e.join("➡️")}`];function v(t){return`(key: ${t})`}function M(t){return`值为${I(t)?t:JSON.stringify(t)}`}const _=k[0],W={auto_stringify:!1,auto_cover:!0,auto_parse:!1};class Y{constructor(e){E(this,"_module",null);E(this,"options",null);this.options=e||W}getItem(e){s(e)||i.error(_("getItem",u.get(1))),y.isString(e)||i.error(_("getItem",u.get(2)));let r=this._module.getItem(e);return s(r)&&this.options.debug&&i.success(_("getItem",u.get(4),v(e),M(r))),this.options.auto_parse&&s(r)&&I(r)&&(r=JSON.parse(r)),r}setItem(e,r){(!s(e)||y.isEmptyString(e))&&i.error(_("setItem",u.get(1))),y.isString(e)||i.error(_("setItem",u.get(2))),s(r)||i.error(_("setItem",u.get(3)));const c=this._module.getItem(e);if(!this.options.auto_cover&&s(c))return i.warn(_("setItem",u.get(5),v(e),M(c))),!1;let n=r;return this.options.auto_stringify&&!I(r)&&(n=JSON.stringify(r)),this._module.setItem(e,n),s(this._module.getItem(e))?(this.options.debug&&i.success(_("setItem",u.get(s(c)?7:6),v(e),M(n))),!0):!1}removeItem(e){s(e)||i.error(_("removeItem",u.get(1))),y.isString(e)||i.error(_("removeItem",u.get(2)));const r=this._module.getItem(e);return s(r)||i.warn(_("removeItem",u.get(8))),this._module.removeItem(e),s(this._module.getItem(e))?!1:(s(r)&&this.options.debug&&i.success(_("removeItem",u.get(9))),!0)}length(){return i.success(_("length",u.get(11))),this._module.length}clear(){this._module.clear();let e=this.length();return s(e)&&e===0?(this.options.debug&&i.success(_("clear",u.get(10))),!0):!1}}class Z extends Y{constructor(e){super(e),this._module=window.localStorage}}class ee extends Y{constructor(e){super(e),this._module=window.sessionStorage}}class te{constructor(e,r){E(this,"type",null);E(this,"method",null);E(this,"code",null);E(this,"status","");E(this,"message","");E(this,"data",null);this.type=e;const{code:c,data:n,method:a}=r;this.code=c,this.method=a,this.status=c===200?"success":"error",this.data=n,this.message=re(e,c)}}function re(t,e){let r="";switch(t){case U:r=e===200?"操作成功":"操作失败";break;case P:r=e===200?"操作成功":"操作失败";break;case N:r=e===200?"操作成功":"操作失败";break}return r}function h(t,e,r){return new te(N,{method:t,code:e,data:r})}const w=k[2],F=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB,l={DB_OPEN_SUCCESS:"数据库打开成功",DB_OPEN_FAIL:"数据库打开失败",DB_CREATE_SUCCESS:"数据库创建成功",DB_CREATE_FAIL:"数据库创建失败",DB_VERSION_LEVELUP:"数据库版本升级",TB_CREATE_SUCCESS:"数据表创建成功",TB_EXITS:"数据表已存在,无需创建",TB_LACK_PRIMARY:"数据表缺少主键",TB_CLEAR_FAIL:"数据表清空失败",DI_CREATE_SUCCESS:"数据项创建成功",DI_CREATE_FAIL:"数据项创建失败",DI_UPDATE_SUCCESS:"数据项创建成功",DI_UPDATE_FAIL:"数据项创建失败",DI_QUERY_SUCCESS:"数据查询成功",DI_QUERY_ERROR:"数据项查询出错",DI_DELETE_SUCCESS:"数据删除成功",DI_DELETE_ERROR:"数据项删除出错",DI_EXITS:"数据项已存在",DI_BATCH_QUERY_SUCCESS:"批量数据查询成功",DI_BATCH_DELETE_SUCCESS:"批量数据删除成功",DI_BATCH_ADD_SUCCESS:"批量数据添加成功"};function se(t){return`📦${t}`}function R(t){return`📊${t}`}function A(t,e,r){return`数据项(key:${t}): ${r}`+(e?`; 值为: ${e}`:"")}function K(t,e,r){const{debug:c,version:n}=r,a=se(t);return new Promise((o,g)=>{s(t)&&s(e)||i.error(w("init",f.get(1)));let S=null;const b=n?F.open(t,n):F.open(t);b.onsuccess=()=>{c&&i.success(w("init",a,l.DB_OPEN_SUCCESS)),S=b.result,o(S)},b.onupgradeneeded=d=>{const{newVersion:L,oldVersion:$}=d;S=d.target.result,s(S)||i.error(w("init",a,l.DB_CREATE_FAIL)),$&&L&&L>$?c&&i.success(w("init",a,`${l.DB_VERSION_LEVELUP}(${$} ➡️ ${L})`)):c&&i.success(w("init",a,l.DB_CREATE_SUCCESS)),H(S,e)||oe(S,r)},b.onerror=d=>{d.target.error?g(d.target.error):g(new Error(w("init",a,l.DB_OPEN_FAIL)))}})}function ne(t,e){return new Promise(async(r,c)=>{const{databaseName:n,tableName:a}=e;if(H(t,a))e.debug&&i.success(w("init",R(a),l.TB_EXITS)),r(t);else{const o=t.version+1;return t.close(),K(n,a,{...e,version:o})}})}function H(t,e){return t.objectStoreNames.contains(e)}function oe(t,e){console.log(e);const{tableName:r,primaryKey:c,autoIncrement:n}=e;s(c)||i.error(w("init",R(r),l.TB_LACK_PRIMARY)),t.createObjectStore(r,{keyPath:c,autoIncrement:n}),!e.noMessage&&e.debug&&i.success(w("init",R(r),l.TB_CREATE_SUCCESS))}function ae(t,e){return new Promise(async(r,c)=>{let n=null;if(e.autoIncrement)n=O(t,e);else{const o=await j(t,{...e,noMessage:!0}),g=o.code===200&&s(o.data);if(e.auto_cover)n=g?ce(t,e):O(t,e);else{if(g)return i.warn(w("setItem",l.DI_EXITS,outputDataValue(o.data))),r(h("setItem",0,!1)),null;n=O(t,e)}}const a=await n;r(a)})}function O(t,e){return new Promise((r,c)=>{const n={...e.value};!e.autoIncrement&&!s(n[e.primaryKey])&&(n[e.primaryKey]=e.key),e.autoIncrement&&s(n[e.primaryKey])&&delete n[e.primaryKey];const a=t.transaction([e.tableName],"readwrite").objectStore(e.tableName).add(n);a.onsuccess=()=>{!e.noMessage&&e.debug&&i.success(A(e.key,JSON.stringify(e.value),l.DI_CREATE_SUCCESS)),r(h("addItem",200,n))},a.onerror=o=>{console.log(o),c(new Error(A(e.key,null,l.DI_CREATE_FAIL)))}})}function ce(t,e){return new Promise((r,c)=>{const n={...e.value};e.primaryKey&&(n[e.primaryKey]=e.key);const a=t.transaction([e.tableName],"readwrite").objectStore(e.tableName).put(n);a.onsuccess=async()=>{!e.noMessage&&e.debug&&i.success(A(e.key,JSON.stringify(e.value),l.DI_UPDATE_SUCCESS));const o=await j(t,{...e,noMessage:!0});o.code===200&&s(o.data)?r(h("setItem",200,o.data)):r(h("setItem",200,null))},a.onerror=o=>{c(new Error(A(e.key,null,l.DI_UPDATE_FAIL)))}})}function j(t,e){return new Promise((r,c)=>{const n=t.transaction([e.tableName],"readonly").objectStore(e.tableName);let a=e.autoIncrement?Number(e.key):e.key,o=n.get(a);o.onsuccess=g=>{const S=g.target.result;S?(!e.noMessage&&e.debug&&i.success(A(e.key,JSON.stringify(S),l.DI_QUERY_SUCCESS)),r(h("getItem",200,S))):r(h("getItem",200,null))},o.onerror=g=>{c(new Error(l.DI_QUERY_ERROR))}})}function ie(t,e){return new Promise((r,c)=>{let a=t.transaction([e.tableName],"readonly").objectStore(e.tableName).getAll();a.onsuccess=o=>{const g=o.target.result;r(g?h("getAllItem",200,g):h("getAllItem",200,null))},a.onerror=o=>{c(new Error(l.DI_QUERY_ERROR))}})}function V(t,e){return new Promise((r,c)=>{const n=t.transaction([e.tableName],"readwrite").objectStore(e.tableName).delete(e.key);n.onsuccess=a=>{!e.noMessage&&e.debug&&i.success(A(e.key,null,l.DI_DELETE_SUCCESS)),r(h("removeItem",200,!0))},n.onerror=a=>{c(new Error(A(e.key,null,l.DI_DELETE_ERROR)))}})}function ue(t,e){return new Promise((r,c)=>{const a=t.transaction(e.tableName).objectStore(e.tableName).count();a.onsuccess=()=>{!e.noMessage&&e.debug&&i.success(R(e.tableName)),r(h("length",200,a.result))},a.onerror=()=>{c(new Error(R(e.tableName)))}})}function le(t,e){return new Promise((r,c)=>{const a=t.transaction([e.tableName],"readwrite").objectStore(e.tableName).clear();a.onsuccess=o=>{!e.noMessage&&e.debug&&i.success(R(e.tableName)),r(h("clear",200,!0))},a.onerror=o=>{c(new Error(l.TB_CLEAR_FAIL))}})}function ge(t,e,r){return new Promise((c,n)=>{let a=e.map(o=>O(t,{...r,key:Se(o,r.primaryKey),value:o}));Promise.allSettled(a).then(o=>{const g=o.filter(d=>d.status==="fulfilled"&&d.value.code===200&&s(d.value.data)).length,S=o.map(d=>d.value.data),b={total:e.length,success:g,fail:e.length-g,data:S};r.debug&&i.success(l.DI_BATCH_ADD_SUCCESS),c(h("batchSetItem",200,b))}).catch(o=>{n(o)})})}function me(t,e,r){return new Promise((c,n)=>{if(e.length===0)ie(t,{...r}).then(a=>{const o=fe(a.data,r.filter);a.code===200&&s(a.data)?(r.debug&&i.success(l.DI_BATCH_QUERY_SUCCESS),c(h("batchGetItem",200,o))):c(h("batchGetItem",200,null))}).catch(a=>{n(a)});else{let a=e.filter(o=>s(o)).map(o=>j(t,{...r,key:o,noMessage:!0}));Promise.allSettled(a).then(o=>{let g=o.filter(d=>d.status==="fulfilled"&&d.value.code===200&&s(d.value.data)).filter(d=>r.filter?r.filter(d.value.data):!0).map(d=>d.value.data);const S=g.length,b={total:e.length,success:S===e.length,process:{success:S,fail:e.length-S},data:g};r.debug&&i.success(l.DI_BATCH_QUERY_SUCCESS),c(h("batchGetItem",200,b))}).catch(o=>{n(o)})}})}function de(t,e,r){return new Promise((c,n)=>{let a=e.filter(o=>s(o)).map(o=>V(t,{...r,key:o,noMessage:!0}));Promise.allSettled(a).then(o=>{const g=o.filter(b=>b.status==="fulfilled"&&b.value.code===200&&s(b.value.data)).length,S={total:e.length,success:g,fail:e.length-g,data:g===e.length};r.debug&&i.success(l.DI_BATCH_DELETE_SUCCESS),c(h("batchRemoveItem",200,S))}).catch(o=>{n(o)})})}function fe(t,e){return t.filter(r=>e?e(r):!0)}function Se(t,e){return m(t[e],null)}const C=k[2],he={auto_cover:!1};class Ie{constructor(e={}){E(this,"options",null);E(this,"db",null);E(this,"version",null);this.options=Object.assign(he,e)}async init(){const{databaseName:e,tableName:r}=this.options;this.db=await K(e,r,this.options);const c=await ne(this.db,this.options);return this.db=c,this.version=this.db.version,this.options.autoIncrement=this.db.transaction([r],"readonly").objectStore(r).autoIncrement,this.db}getItem(e){return s(e)||i.error(C("getItem",f.get(1))),j(this.db,{...this.options,key:e})}setItem(e,r){return this.options.autoIncrement||s(e)||i.error(C("setItem",f.get(1))),s(r)||i.error(C("setItem",f.get(4))),y.isObject(r)||i.error(C("setItem",f.get(5))),ae(this.db,{...this.options,key:e,value:r})}removeItem(e){return s(e)||i.error(C("removeItem",f.get(2))),!y.isString(e)&&!y.isNumber(e)&&i.error(C("removeItem",f.get(3))),V(this.db,{...this.options,key:e})}length(){return ue(this.db,this.options)}clear(){return le(this.db,this.options)}batchProcess(e,r,c={}){s(e)||i.error(C("batchProcess",f.get(6))),s(r)||i.error(C("batchProcess",f.get(7)));let n=null;switch(e){case"get":n=me;break;case"add":n=ge;break;case"delete":n=de;break}return n||i.error(C("batchProcess",f.get(8))),n(this.db,r,{...this.options,...c})}}window.BrowserStoreKitMode={LOCAL_STORAGE:U,SESSION_STORAGE:P,INDEXED_DB:N};class _e{constructor(e,r){G(this,D);E(this,"type",null);E(this,"kitTool",null);this.type=e,T(this,D,J).call(this,r)}init(){return this.type!==N?i.error(`当前模式:${this.type}下无需调用init方法`):(T(this,D,B).call(this,"init"),this.kitTool.init())}getItem(e){return T(this,D,B).call(this,"getItem"),this.kitTool.getItem(e)}setItem(e,r){return T(this,D,B).call(this,"setItem"),this.kitTool.setItem(e,r)}removeItem(e){return T(this,D,B).call(this,"removeItem"),this.kitTool.removeItem(e)}length(){return T(this,D,B).call(this,"length"),this.kitTool.length()}clear(){return T(this,D,B).call(this,"clear"),this.kitTool.clear()}getOptions(){return this.kitTool.options}batchProcess(e,r,c){return this.kitTool.batchProcess(e,r,c)}}return D=new WeakSet,J=function(e){switch(this.type){case U:if(!Q())throw Error("抱歉,当前浏览器暂不支持使用localStorage");this.kitTool=new Z(e.localStorage);break;case P:if(!X())throw Error("抱歉,当前浏览器暂不支持使用sessionStorage");this.kitTool=new ee(e.sessionStorage);break;case N:if(!z())throw Error("抱歉,当前浏览器暂不支持使用indexedDB");this.kitTool=new Ie(e.indexedDB);break}},B=function(e){this.kitTool||i.error("抱歉,未正确实例化,暂时无法使用"+e+"方法")},_e});
|
package/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,25 +1,26 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "browser-localstorge",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
4
|
-
"main": "index.js",
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
"
|
|
16
|
-
"build
|
|
17
|
-
"build:
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "browser-localstorge",
|
|
3
|
+
"version": "1.0.0-beta.2",
|
|
4
|
+
"main": "index.js",
|
|
5
|
+
"private": false,
|
|
6
|
+
"module": "dist/es/Browser_StoreKit.es.js",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist/**/*",
|
|
9
|
+
"index.js",
|
|
10
|
+
"src/**/*",
|
|
11
|
+
"README.md",
|
|
12
|
+
"LICENSE"
|
|
13
|
+
],
|
|
14
|
+
"scripts": {
|
|
15
|
+
"test": "echo \"Error: no test specified\" && exit 1",
|
|
16
|
+
"build": "vite build",
|
|
17
|
+
"build:umd": "vite build --mode umd",
|
|
18
|
+
"build:es": "vite build --mode es"
|
|
19
|
+
},
|
|
20
|
+
"author": "Aurora",
|
|
21
|
+
"license": "MIT",
|
|
22
|
+
"description": "浏览器本地存储工具库",
|
|
23
|
+
"devDependencies": {
|
|
24
|
+
"vite": "^6.3.3"
|
|
25
|
+
}
|
|
26
|
+
}
|
package/src/constant.js
CHANGED
|
@@ -1,9 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/**
|
|
2
|
+
* 使用浏览器的本地存储,数据持久化直到手动删除。
|
|
3
|
+
* @type {'localStorage'}
|
|
4
|
+
*/
|
|
5
|
+
const LOCAL_STORAGE = 'localStorage'
|
|
6
|
+
/**
|
|
7
|
+
* 使用浏览器的会话存储,数据在页面会话结束时自动清除。
|
|
8
|
+
* @type {'sessionStorage'}
|
|
9
|
+
*/
|
|
10
|
+
const SESSION_STORAGE = 'sessionStorage';
|
|
11
|
+
/**
|
|
12
|
+
* 使用浏览器的 IndexedDB 进行数据存储,适合存储大量结构化数据。
|
|
13
|
+
* @type {'indexedDB'}
|
|
14
|
+
*/
|
|
15
|
+
const INDEXED_DB = 'indexedDB';
|
|
4
16
|
|
|
5
17
|
export const BATCH_PROCESS = {
|
|
6
18
|
ADD: 'add',
|
|
7
19
|
GET: 'get',
|
|
8
20
|
DELETE: 'delete'
|
|
9
|
-
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export { LOCAL_STORAGE, SESSION_STORAGE, INDEXED_DB };
|
package/src/db/handle.js
CHANGED
|
@@ -160,7 +160,6 @@ export function open(databaseName, tableName, options) {
|
|
|
160
160
|
db = request.result;
|
|
161
161
|
resolve(db)
|
|
162
162
|
};
|
|
163
|
-
// 数据库创建、版本升级回调
|
|
164
163
|
request.onupgradeneeded = (event) => {
|
|
165
164
|
const { newVersion, oldVersion } = event
|
|
166
165
|
db = event.target.result
|
|
@@ -176,7 +175,7 @@ export function open(databaseName, tableName, options) {
|
|
|
176
175
|
message.success(messageFn('init', dbName, INDEXED_DB_MESSAGE.DB_CREATE_SUCCESS));
|
|
177
176
|
}
|
|
178
177
|
}
|
|
179
|
-
if(!hasTable(db, tableName)) {
|
|
178
|
+
if (!hasTable(db, tableName)) {
|
|
180
179
|
createTable(db, options)
|
|
181
180
|
}
|
|
182
181
|
}
|
|
@@ -210,7 +209,7 @@ export function checkTable(db, options) {
|
|
|
210
209
|
db.close()
|
|
211
210
|
return open(databaseName, tableName, {
|
|
212
211
|
...options,
|
|
213
|
-
version: newVersion,
|
|
212
|
+
version: newVersion,
|
|
214
213
|
})
|
|
215
214
|
}
|
|
216
215
|
})
|
|
@@ -251,20 +250,25 @@ export function createTable(db, options) {
|
|
|
251
250
|
*/
|
|
252
251
|
export function handleSetItem(db, options) {
|
|
253
252
|
return new Promise(async (resolve, reject) => {
|
|
254
|
-
const hasItem = await getItem(db, { ...options, noMessage: true })
|
|
255
|
-
const hasData = ((hasItem.code === 200) && isDefine(hasItem.data))
|
|
256
253
|
let handle = null
|
|
257
|
-
//
|
|
258
|
-
if (
|
|
259
|
-
if (hasData) {
|
|
260
|
-
message.warn(messageFn('setItem', INDEXED_DB_MESSAGE.DI_EXITS, outputDataValue(hasItem.data)))
|
|
261
|
-
// 这里可以考虑code对应message
|
|
262
|
-
resolve(getIndexedDBResponse('setItem', 0, false))
|
|
263
|
-
return null
|
|
264
|
-
}
|
|
254
|
+
// 自增情况下直接新增即可
|
|
255
|
+
if (options.autoIncrement) {
|
|
265
256
|
handle = addItem(db, options)
|
|
266
257
|
} else {
|
|
267
|
-
|
|
258
|
+
const hasItem = await getItem(db, { ...options, noMessage: true })
|
|
259
|
+
const hasData = ((hasItem.code === 200) && isDefine(hasItem.data))
|
|
260
|
+
// TODO:如果递增情况,可以直接执行addItem
|
|
261
|
+
if (!options.auto_cover) {
|
|
262
|
+
if (hasData) {
|
|
263
|
+
message.warn(messageFn('setItem', INDEXED_DB_MESSAGE.DI_EXITS, outputDataValue(hasItem.data)))
|
|
264
|
+
// 这里可以考虑code对应message
|
|
265
|
+
resolve(getIndexedDBResponse('setItem', 0, false))
|
|
266
|
+
return null
|
|
267
|
+
}
|
|
268
|
+
handle = addItem(db, options)
|
|
269
|
+
} else {
|
|
270
|
+
handle = (hasData) ? updateItem(db, options) : addItem(db, options)
|
|
271
|
+
}
|
|
268
272
|
}
|
|
269
273
|
const res = await handle
|
|
270
274
|
resolve(res)
|
|
@@ -286,6 +290,10 @@ export function addItem(db, options) {
|
|
|
286
290
|
if (!options.autoIncrement && !isDefine(addObj[options.primaryKey])) {
|
|
287
291
|
addObj[options.primaryKey] = options.key
|
|
288
292
|
}
|
|
293
|
+
// 自增情况下,删掉value中的主键,避免冲突
|
|
294
|
+
if(options.autoIncrement && isDefine(addObj[options.primaryKey])) {
|
|
295
|
+
delete addObj[options.primaryKey]
|
|
296
|
+
}
|
|
289
297
|
const request = db.transaction([options.tableName], 'readwrite').objectStore(options.tableName).add(addObj);
|
|
290
298
|
request.onsuccess = () => {
|
|
291
299
|
if (!options.noMessage && options.debug) {
|
|
@@ -341,7 +349,7 @@ export function updateItem(db, options) {
|
|
|
341
349
|
export function getItem(db, options) {
|
|
342
350
|
return new Promise((resolve, reject) => {
|
|
343
351
|
const objectStore = db.transaction([options.tableName], "readonly").objectStore(options.tableName)
|
|
344
|
-
let key = (options.autoIncrement) ? Number(key) : options.key // 自增情况下key一定为number类型
|
|
352
|
+
let key = (options.autoIncrement) ? Number(options.key) : options.key // 自增情况下key一定为number类型
|
|
345
353
|
let request = objectStore.get(key);
|
|
346
354
|
request.onsuccess = (event) => {
|
|
347
355
|
const target = event.target.result
|
package/src/index.js
CHANGED
|
@@ -12,7 +12,8 @@ window.BrowserStoreKitMode = {
|
|
|
12
12
|
};
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
15
|
+
* 存储模式
|
|
16
|
+
* @typedef {typeof LOCAL_STORAGE | typeof SESSION_STORAGE | typeof INDEXED_DB} BrowserStoreKitModeOptions
|
|
16
17
|
*/
|
|
17
18
|
|
|
18
19
|
/**
|
|
@@ -32,7 +33,7 @@ window.BrowserStoreKitMode = {
|
|
|
32
33
|
*/
|
|
33
34
|
|
|
34
35
|
/**
|
|
35
|
-
* @typedef {Object} IndexedDBOptions
|
|
36
|
+
* @typedef {Object} IndexedDBOptions indexedDB相关配置
|
|
36
37
|
* @property {string} databaseName 数据库名称(如果不存在,则会新建)
|
|
37
38
|
* @property {string} tableName 数据表名称(如果不存在,则会新建)
|
|
38
39
|
* @property {string} [primaryKey = 'id'] 数据表的主键,如果不指定则默认采用递增(autoIncrement)
|
|
@@ -9,6 +9,10 @@ const DEFAULT_LOCAL_STORAGE_OPTIONS = {
|
|
|
9
9
|
auto_parse: false
|
|
10
10
|
}
|
|
11
11
|
export default class LocalAndSession {
|
|
12
|
+
/**
|
|
13
|
+
* @type {Storage}
|
|
14
|
+
*/
|
|
15
|
+
_module = null
|
|
12
16
|
/**
|
|
13
17
|
* @type {import('../index.js').LocalStorgeOptions | null}
|
|
14
18
|
*/
|
|
@@ -29,7 +33,7 @@ export default class LocalAndSession {
|
|
|
29
33
|
if (!dataTypeHandlers.isString(key)) {
|
|
30
34
|
message.error(messageFn('getItem', LocalAndSessionMessage.get(2)))
|
|
31
35
|
}
|
|
32
|
-
let value = this.
|
|
36
|
+
let value = this._module.getItem(key)
|
|
33
37
|
if(isDefine(value) && this.options.debug) {
|
|
34
38
|
message.success(messageFn('getItem', LocalAndSessionMessage.get(4), outputDataKey(key), outputDataValue(value)))
|
|
35
39
|
}
|
|
@@ -55,7 +59,7 @@ export default class LocalAndSession {
|
|
|
55
59
|
if (!isDefine(value)) {
|
|
56
60
|
message.error(messageFn('setItem', LocalAndSessionMessage.get(3)))
|
|
57
61
|
}
|
|
58
|
-
const hasValue = this.
|
|
62
|
+
const hasValue = this._module.getItem(key)
|
|
59
63
|
if (!this.options.auto_cover) {
|
|
60
64
|
if (isDefine(hasValue)) {
|
|
61
65
|
message.warn(messageFn('setItem', LocalAndSessionMessage.get(5), outputDataKey(key), outputDataValue(hasValue)))
|
|
@@ -66,8 +70,8 @@ export default class LocalAndSession {
|
|
|
66
70
|
if(this.options.auto_stringify && !isJsonString(value)) {
|
|
67
71
|
_value = JSON.stringify(value)
|
|
68
72
|
}
|
|
69
|
-
this.
|
|
70
|
-
if(isDefine(this.
|
|
73
|
+
this._module.setItem(key, _value);
|
|
74
|
+
if(isDefine(this._module.getItem(key))) {
|
|
71
75
|
if(this.options.debug) {
|
|
72
76
|
message.success(messageFn('setItem', LocalAndSessionMessage.get(isDefine(hasValue) ? 7 : 6), outputDataKey(key), outputDataValue(_value)))
|
|
73
77
|
}
|
|
@@ -88,12 +92,12 @@ export default class LocalAndSession {
|
|
|
88
92
|
if (!dataTypeHandlers.isString(key)) {
|
|
89
93
|
message.error(messageFn('removeItem', LocalAndSessionMessage.get(2)))
|
|
90
94
|
}
|
|
91
|
-
const oldValue = this.
|
|
95
|
+
const oldValue = this._module.getItem(key)
|
|
92
96
|
if (!isDefine(oldValue)) {
|
|
93
97
|
message.warn(messageFn('removeItem', LocalAndSessionMessage.get(8)));
|
|
94
98
|
}
|
|
95
|
-
this.
|
|
96
|
-
if(!isDefine(this.
|
|
99
|
+
this._module.removeItem(key);
|
|
100
|
+
if(!isDefine(this._module.getItem(key))) {
|
|
97
101
|
if (isDefine(oldValue) && this.options.debug) {
|
|
98
102
|
message.success(messageFn('removeItem', LocalAndSessionMessage.get(9)));
|
|
99
103
|
}
|
|
@@ -108,7 +112,7 @@ export default class LocalAndSession {
|
|
|
108
112
|
*/
|
|
109
113
|
length() {
|
|
110
114
|
message.success(messageFn('length', LocalAndSessionMessage.get(11)));
|
|
111
|
-
return this.
|
|
115
|
+
return this._module.length
|
|
112
116
|
}
|
|
113
117
|
|
|
114
118
|
/**
|
|
@@ -116,7 +120,7 @@ export default class LocalAndSession {
|
|
|
116
120
|
* @returns {boolean} 操作结果
|
|
117
121
|
*/
|
|
118
122
|
clear() {
|
|
119
|
-
this.
|
|
123
|
+
this._module.clear();
|
|
120
124
|
let length = this.length()
|
|
121
125
|
if(isDefine(length) && length === 0) {
|
|
122
126
|
if (this.options.debug) {
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import LocalAndSession from './index.js'
|
|
2
2
|
|
|
3
3
|
export default class LocalStorage extends LocalAndSession {
|
|
4
|
-
/**
|
|
5
|
-
* @type {LocalStorage}
|
|
6
|
-
*/
|
|
7
|
-
module = window.localStorage;
|
|
8
4
|
constructor(options) {
|
|
9
5
|
super(options)
|
|
6
|
+
this._module = window.localStorage;
|
|
10
7
|
}
|
|
11
8
|
}
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import LocalAndSession from './index.js'
|
|
2
2
|
|
|
3
3
|
export default class SessionStorage extends LocalAndSession {
|
|
4
|
-
/**
|
|
5
|
-
* @type {SessionStorage}
|
|
6
|
-
*/
|
|
7
|
-
module = window.sessionStorage;
|
|
8
4
|
constructor(options) {
|
|
9
5
|
super(options)
|
|
6
|
+
this._module = window.sessionStorage;
|
|
10
7
|
}
|
|
11
8
|
}
|