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 CHANGED
@@ -1,6 +1,4 @@
1
- # browser-localstorge
2
-
3
- 1️⃣2️⃣3️⃣4️⃣5️⃣6️⃣7️⃣8️⃣
1
+ # 🌈browser-localstorge
4
2
 
5
3
  ## 📌localStorage 存储
6
4
 
@@ -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(), a = String(t.getMonth() + 1).padStart(2, "0"), o = String(t.getDate()).padStart(2, "0"), n = String(t.getHours()).padStart(2, "0"), s = String(t.getMinutes()).padStart(2, "0"), g = String(t.getSeconds()).padStart(2, "0");
42
- return e.replace("YYYY", r).replace("MM", a).replace("DD", o).replace("HH", n).replace("mm", s).replace("ss", g);
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 N = "localStorage", R = "sessionStorage", B = "indexedDB", Y = {
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) => `🔗${B} 📢[${t}]: ${e.join("➡️")}`
83
+ (t, ...e) => `🔗${U} 📎[${t}]: ${e.join("➡️")}`,
84
+ (t, ...e) => `🔗${A} 📢[${t}]: ${e.join("➡️")}`
85
85
  ];
86
- function j(t) {
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.module.getItem(e);
113
- return i(r) && this.options.debug && c.success(I("getItem", u.get(4), j(e), v(r))), this.options.auto_parse && i(r) && M(r) && (r = JSON.parse(r)), r;
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 a = this.module.getItem(e);
124
- if (!this.options.auto_cover && i(a))
125
- return c.warn(I("setItem", u.get(5), j(e), v(a))), !1;
126
- let o = r;
127
- return this.options.auto_stringify && !M(r) && (o = JSON.stringify(r)), this.module.setItem(e, o), i(this.module.getItem(e)) ? (this.options.debug && c.success(I("setItem", u.get(i(a) ? 7 : 6), j(e), v(o))), !0) : !1;
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.module.getItem(e);
137
- 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);
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.module.length;
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.module.clear();
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(r) {
158
- super(r);
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(r) {
167
- super(r);
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: a, data: o, method: n } = r;
213
- this.code = a, this.method = n, this.status = a === 200 ? "success" : "error", this.data = o, this.message = oe(e, a);
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 oe(t, e) {
212
+ function ae(t, e) {
217
213
  let r = "";
218
214
  switch (t) {
219
- case N:
215
+ case R:
220
216
  r = e === 200 ? "操作成功" : "操作失败";
221
217
  break;
222
- case R:
218
+ case U:
223
219
  r = e === 200 ? "操作成功" : "操作失败";
224
220
  break;
225
- case B:
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(B, { method: t, code: e, data: r });
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, l = {
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 ae(t) {
253
+ function oe(t) {
258
254
  return `📦${t}`;
259
255
  }
260
- function y(t) {
256
+ function B(t) {
261
257
  return `📊${t}`;
262
258
  }
263
- function A(t, e, r) {
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: a, version: o } = r, n = ae(t);
268
- return new Promise((s, g) => {
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 E = o ? F.open(t, o) : F.open(t);
272
- E.onsuccess = () => {
273
- a && c.success(b("init", n, l.DB_OPEN_SUCCESS)), d = E.result, s(d);
274
- }, E.onupgradeneeded = (m) => {
275
- const { newVersion: P, oldVersion: O } = m;
276
- d = m.target.result, i(d) || c.error(b("init", n, l.DB_CREATE_FAIL)), O && P && P > O ? a && c.success(b("init", n, `${l.DB_VERSION_LEVELUP}(${O} ➡️ ${P})`)) : a && c.success(b("init", n, l.DB_CREATE_SUCCESS)), V(d, e) || ie(d, r);
277
- }, E.onerror = (m) => {
278
- m.target.error ? g(m.target.error) : g(new Error(b("init", n, l.DB_OPEN_FAIL)));
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, a) => {
284
- const { databaseName: o, tableName: n } = e;
285
- if (V(t, n))
286
- e.debug && c.success(b("init", y(n), l.TB_EXITS)), r(t);
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 s = t.version + 1;
289
- return t.close(), H(o, n, {
284
+ const n = t.version + 1;
285
+ return t.close(), H(s, a, {
290
286
  ...e,
291
- version: s
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: a, autoIncrement: o } = e;
302
- i(a) || c.error(b("init", y(r), l.TB_LACK_PRIMARY)), t.createObjectStore(r, { keyPath: a, autoIncrement: o }), !e.noMessage && e.debug && c.success(b("init", y(r), l.TB_CREATE_SUCCESS));
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, a) => {
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.auto_cover)
309
- s = n ? le(t, e) : k(t, e);
303
+ if (e.autoIncrement)
304
+ s = N(t, e);
310
305
  else {
311
- if (n)
312
- return c.warn(b("setItem", l.DI_EXITS, outputDataValue(o.data))), r(f("setItem", 0, !1)), null;
313
- s = k(t, e);
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 g = await s;
316
- r(g);
315
+ const a = await s;
316
+ r(a);
317
317
  });
318
318
  }
319
- function k(t, e) {
320
- return new Promise((r, a) => {
321
- const o = {
319
+ function N(t, e) {
320
+ return new Promise((r, o) => {
321
+ const s = {
322
322
  ...e.value
323
323
  };
324
- !e.autoIncrement && !i(o[e.primaryKey]) && (o[e.primaryKey] = e.key);
325
- const n = t.transaction([e.tableName], "readwrite").objectStore(e.tableName).add(o);
326
- n.onsuccess = () => {
327
- !e.noMessage && e.debug && c.success(A(e.key, JSON.stringify(e.value), l.DI_CREATE_SUCCESS)), r(f("addItem", 200, o));
328
- }, n.onerror = (s) => {
329
- console.log(s), a(new Error(A(e.key, null, l.DI_CREATE_FAIL)));
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, a) => {
335
- const o = {
334
+ return new Promise((r, o) => {
335
+ const s = {
336
336
  ...e.value
337
337
  };
338
- e.primaryKey && (o[e.primaryKey] = e.key);
339
- const n = t.transaction([e.tableName], "readwrite").objectStore(e.tableName).put(o);
340
- n.onsuccess = async () => {
341
- !e.noMessage && e.debug && c.success(A(e.key, JSON.stringify(e.value), l.DI_UPDATE_SUCCESS));
342
- const s = await U(t, { ...e, noMessage: !0 });
343
- s.code === 200 && i(s.data) ? r(f("setItem", 200, s.data)) : r(f("setItem", 200, null));
344
- }, n.onerror = (s) => {
345
- a(new Error(A(e.key, null, l.DI_UPDATE_FAIL)));
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 U(t, e) {
350
- return new Promise((r, a) => {
351
- const o = t.transaction([e.tableName], "readonly").objectStore(e.tableName);
352
- let n = e.autoIncrement ? Number(n) : e.key, s = o.get(n);
353
- s.onsuccess = (g) => {
354
- const d = g.target.result;
355
- d ? (!e.noMessage && e.debug && c.success(A(e.key, JSON.stringify(d), l.DI_QUERY_SUCCESS)), r(f("getItem", 200, d))) : r(f("getItem", 200, null));
356
- }, s.onerror = (g) => {
357
- a(new Error(l.DI_QUERY_ERROR));
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, a) => {
363
- let n = t.transaction([e.tableName], "readonly").objectStore(e.tableName).getAll();
364
- n.onsuccess = (s) => {
365
- const g = s.target.result;
366
- r(g ? f("getAllItem", 200, g) : f("getAllItem", 200, null));
367
- }, n.onerror = (s) => {
368
- a(new Error(l.DI_QUERY_ERROR));
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, a) => {
374
- const o = t.transaction([e.tableName], "readwrite").objectStore(e.tableName).delete(e.key);
375
- o.onsuccess = (n) => {
376
- !e.noMessage && e.debug && c.success(A(e.key, null, l.DI_DELETE_SUCCESS)), r(f("removeItem", 200, !0));
377
- }, o.onerror = (n) => {
378
- a(new Error(A(e.key, null, l.DI_DELETE_ERROR)));
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, a) => {
384
- const n = t.transaction(e.tableName).objectStore(e.tableName).count();
385
- n.onsuccess = () => {
386
- !e.noMessage && e.debug && c.success(y(e.tableName)), r(f("length", 200, n.result));
387
- }, n.onerror = () => {
388
- a(new Error(y(e.tableName)));
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, a) => {
394
- const n = t.transaction([e.tableName], "readwrite").objectStore(e.tableName).clear();
395
- n.onsuccess = (s) => {
396
- !e.noMessage && e.debug && c.success(y(e.tableName)), r(f("clear", 200, !0));
397
- }, n.onerror = (s) => {
398
- a(new Error(l.TB_CLEAR_FAIL));
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((a, o) => {
404
- let n = e.map((s) => k(t, { ...r, key: Ee(s, r.primaryKey), value: s }));
405
- Promise.allSettled(n).then((s) => {
406
- const g = s.filter((m) => m.status === "fulfilled" && m.value.code === 200 && i(m.value.data)).length, d = s.map((m) => m.value.data), E = {
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: g,
409
- fail: e.length - g,
408
+ success: l,
409
+ fail: e.length - l,
410
410
  data: d
411
411
  };
412
- r.debug && c.success(l.DI_BATCH_ADD_SUCCESS), a(f("batchSetItem", 200, E));
413
- }).catch((s) => {
414
- o(s);
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((a, o) => {
419
+ return new Promise((o, s) => {
420
420
  if (e.length === 0)
421
- ge(t, { ...r }).then((n) => {
422
- const s = Ie(n.data, r.filter);
423
- n.code === 200 && i(n.data) ? (r.debug && c.success(l.DI_BATCH_QUERY_SUCCESS), a(f("batchGetItem", 200, s))) : a(f("batchGetItem", 200, null));
424
- }).catch((n) => {
425
- o(n);
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 n = e.filter((s) => i(s)).map((s) => U(t, { ...r, key: s, noMessage: !0 }));
429
- Promise.allSettled(n).then((s) => {
430
- let g = s.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 = g.length, E = {
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: g
436
+ data: l
437
437
  };
438
- r.debug && c.success(l.DI_BATCH_QUERY_SUCCESS), a(f("batchGetItem", 200, E));
439
- }).catch((s) => {
440
- o(s);
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((a, o) => {
447
- let n = e.filter((s) => i(s)).map((s) => q(t, { ...r, key: s, noMessage: !0 }));
448
- Promise.allSettled(n).then((s) => {
449
- const g = s.filter((E) => E.status === "fulfilled" && E.value.code === 200 && i(E.value.data)).length, d = {
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: g,
452
- fail: e.length - g,
453
- data: g === e.length
451
+ success: l,
452
+ fail: e.length - l,
453
+ data: l === e.length
454
454
  };
455
- r.debug && c.success(l.DI_BATCH_DELETE_SUCCESS), a(f("batchRemoveItem", 200, d));
456
- }).catch((s) => {
457
- o(s);
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 Ee(t, e) {
464
+ function _e(t, e) {
465
465
  return z(t[e], null);
466
466
  }
467
- const D = L[2], _e = {
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(_e, e);
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 a = await ce(this.db, this.options);
497
- return this.db = a, this.version = this.db.version, this.options.autoIncrement = this.db.transaction([r], "readonly").objectStore(r).autoIncrement, 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))), U(this.db, { ...this.options, key: e });
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, a = {}) {
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 o = null;
542
+ let s = null;
543
543
  switch (e) {
544
544
  case "get":
545
- o = fe;
545
+ s = fe;
546
546
  break;
547
547
  case "add":
548
- o = Se;
548
+ s = Se;
549
549
  break;
550
550
  case "delete":
551
- o = he;
551
+ s = he;
552
552
  break;
553
553
  }
554
- return o || c.error(D("batchProcess", S.get(8))), o(this.db, r, { ...this.options, ...a });
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: N,
559
- SESSION_STORAGE: R,
560
- INDEXED_DB: B
558
+ LOCAL_STORAGE: R,
559
+ SESSION_STORAGE: U,
560
+ INDEXED_DB: A
561
561
  };
562
- var _, G, C;
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, _, G).call(this, r);
579
+ this.type = e, w(this, E, G).call(this, r);
580
580
  }
581
581
  init() {
582
- return this.type !== B ? c.error(`当前模式:${this.type}下无需调用init方法`) : (w(this, _, C).call(this, "init"), this.kitTool.init());
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, _, C).call(this, "getItem"), this.kitTool.getItem(e);
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, _, C).call(this, "setItem"), this.kitTool.setItem(e, r);
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, _, C).call(this, "removeItem"), this.kitTool.removeItem(e);
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, _, C).call(this, "length"), this.kitTool.length();
614
+ return w(this, E, C).call(this, "length"), this.kitTool.length();
615
615
  }
616
616
  clear() {
617
- return w(this, _, C).call(this, "clear"), this.kitTool.clear();
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, a) {
633
- return this.kitTool.batchProcess(e, r, a);
632
+ batchProcess(e, r, o) {
633
+ return this.kitTool.batchProcess(e, r, o);
634
634
  }
635
635
  }
636
- _ = new WeakSet(), G = function(e) {
636
+ E = new WeakSet(), G = function(e) {
637
637
  switch (this.type) {
638
- case N:
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 R:
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 B:
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
- B as INDEXED_DB,
659
- N as LOCAL_STORAGE,
660
- R as SESSION_STORAGE,
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
@@ -1 +1,4 @@
1
- export * from './src/index.js'
1
+ import BrowserStoreKit, { LOCAL_STORAGE, SESSION_STORAGE, INDEXED_DB } from './src/index.js'
2
+
3
+ export default BrowserStoreKit;
4
+ export { LOCAL_STORAGE, SESSION_STORAGE, INDEXED_DB };
package/package.json CHANGED
@@ -1,25 +1,26 @@
1
- {
2
- "name": "browser-localstorge",
3
- "version": "1.0.0-beta.0",
4
- "main": "index.js",
5
- "module": "dist/es/Browser_StoreKit.es.js",
6
- "files": [
7
- "dist/**/*",
8
- "index.js",
9
- "src/**/*",
10
- "README.md",
11
- "LICENSE"
12
- ],
13
- "scripts": {
14
- "test": "echo \"Error: no test specified\" && exit 1",
15
- "build": "vite build",
16
- "build:umd": "vite build --mode umd",
17
- "build:es": "vite build --mode es"
18
- },
19
- "author": "Aurora",
20
- "license": "MIT",
21
- "description": "",
22
- "devDependencies": {
23
- "vite": "^6.3.3"
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
- export const LOCAL_STORAGE = 'localStorage'
2
- export const SESSION_STORAGE = 'sessionStorage'
3
- export const INDEXED_DB = 'indexedDB'
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
- // TODO:如果递增情况,可以直接执行addItem
258
- if (!options.auto_cover) {
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
- handle = (hasData) ? updateItem(db, options) : addItem(db, options)
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
- * @typedef {'localStorage' | 'sessionStorage' | 'indexedDB'} BrowserStoreKitModeOptions 模式值
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.module.getItem(key)
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.module.getItem(key)
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.module.setItem(key, _value);
70
- if(isDefine(this.module.getItem(key))) {
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.module.getItem(key)
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.module.removeItem(key);
96
- if(!isDefine(this.module.getItem(key))) {
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.module.length
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.module.clear();
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
  }
@@ -1,5 +1,5 @@
1
+ /// <reference path="../../global.d.ts" />
1
2
  // ❌️ ⚠️ ✔️
2
-
3
3
  /**
4
4
  * 判断值是否定义
5
5
  * @param {any} value