@vope/utils 1.4.26 → 1.4.28
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/cjs/index.js +52 -38
- package/lib/memory/basic.js +12 -2
- package/lib/memory/simple.js +6 -0
- package/lib/storage/offline.js +11 -11
- package/package.json +1 -1
- package/types/memory/basic.d.ts +5 -1
- package/types/memory/list.d.ts +1 -1
- package/types/memory/power.d.ts +1 -1
- package/types/memory/simple.d.ts +6 -1
package/cjs/index.js
CHANGED
|
@@ -9,8 +9,8 @@ var __commonJS = (cb, mod) => function __require() {
|
|
|
9
9
|
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
10
10
|
};
|
|
11
11
|
var __export = (target, all) => {
|
|
12
|
-
for (var
|
|
13
|
-
__defProp(target,
|
|
12
|
+
for (var name in all)
|
|
13
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
14
14
|
};
|
|
15
15
|
var __copyProps = (to, from, except, desc) => {
|
|
16
16
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
@@ -5484,6 +5484,16 @@ var MemoryBasic = class {
|
|
|
5484
5484
|
});
|
|
5485
5485
|
return this;
|
|
5486
5486
|
}
|
|
5487
|
+
/**
|
|
5488
|
+
* 返回位于指定索引处的项
|
|
5489
|
+
*/
|
|
5490
|
+
at(index) {
|
|
5491
|
+
const { list } = this;
|
|
5492
|
+
if (index < 0) {
|
|
5493
|
+
index += list.length;
|
|
5494
|
+
}
|
|
5495
|
+
return this.list.at(index);
|
|
5496
|
+
}
|
|
5487
5497
|
/**
|
|
5488
5498
|
* 遍历所有存储数据(按入栈顺序)
|
|
5489
5499
|
*/
|
|
@@ -5664,6 +5674,12 @@ var MemorySimple = class {
|
|
|
5664
5674
|
const key2 = this.#key;
|
|
5665
5675
|
return typeof key2 === "function" ? key2(data) : data[key2];
|
|
5666
5676
|
}
|
|
5677
|
+
/**
|
|
5678
|
+
* 返回位于指定索引处的项
|
|
5679
|
+
*/
|
|
5680
|
+
at(index) {
|
|
5681
|
+
return this.#memory.at(index);
|
|
5682
|
+
}
|
|
5667
5683
|
push(...list) {
|
|
5668
5684
|
const memory = this.#memory;
|
|
5669
5685
|
list.forEach((data) => {
|
|
@@ -6164,13 +6180,11 @@ var flatURLParams = (data, serializes) => {
|
|
|
6164
6180
|
return params.toString();
|
|
6165
6181
|
};
|
|
6166
6182
|
|
|
6167
|
-
// package.json
|
|
6168
|
-
var name = "@vope/utils";
|
|
6169
|
-
|
|
6170
6183
|
// src/storage/offline.ts
|
|
6171
6184
|
var import_localforage = __toESM(require_localforage(), 1);
|
|
6172
6185
|
var import_sm_crypto = __toESM(require_src(), 1);
|
|
6173
|
-
var
|
|
6186
|
+
var NAME = "@vope/utils";
|
|
6187
|
+
var PREFIX = NAME + "_";
|
|
6174
6188
|
var key = [25, 144, 1, 32, 25, 135, 6, 40, 32, 23, 18, 19, 32, 36, 9, 5];
|
|
6175
6189
|
var iv = [182, 59, 9, 29, 86, 64, 118, 111, 112, 101, 47, 117, 116, 105, 108, 115];
|
|
6176
6190
|
var config = {
|
|
@@ -6178,7 +6192,7 @@ var config = {
|
|
|
6178
6192
|
mode: "cbc",
|
|
6179
6193
|
iv
|
|
6180
6194
|
};
|
|
6181
|
-
var HEADER = "." + import_sm_crypto.sm4.encrypt(
|
|
6195
|
+
var HEADER = "." + import_sm_crypto.sm4.encrypt(NAME, key, config);
|
|
6182
6196
|
var encrypt = (data) => {
|
|
6183
6197
|
let text = "";
|
|
6184
6198
|
for (const key2 in data) {
|
|
@@ -6217,9 +6231,9 @@ var MESSAGES = {
|
|
|
6217
6231
|
update: "Cannot update data to expired databases",
|
|
6218
6232
|
get: "Cannot get data from expired databases"
|
|
6219
6233
|
};
|
|
6220
|
-
var createInstance = (
|
|
6234
|
+
var createInstance = (name, version = 2) => import_localforage.default.createInstance({
|
|
6221
6235
|
driver: import_localforage.default.INDEXEDDB,
|
|
6222
|
-
name
|
|
6236
|
+
name,
|
|
6223
6237
|
version
|
|
6224
6238
|
});
|
|
6225
6239
|
var OfflineStorage = class _OfflineStorage {
|
|
@@ -6237,12 +6251,12 @@ var OfflineStorage = class _OfflineStorage {
|
|
|
6237
6251
|
return this.#mounted;
|
|
6238
6252
|
}
|
|
6239
6253
|
constructor({
|
|
6240
|
-
name
|
|
6254
|
+
name,
|
|
6241
6255
|
expire: newExpire,
|
|
6242
6256
|
token: newToken,
|
|
6243
6257
|
crypto
|
|
6244
6258
|
}) {
|
|
6245
|
-
const forage = this.#forage = createInstance(import_sm_crypto.sm4.encrypt(PREFIX +
|
|
6259
|
+
const forage = this.#forage = createInstance(import_sm_crypto.sm4.encrypt(PREFIX + name, key, config));
|
|
6246
6260
|
this.#mount = new Promise(async (resolve) => {
|
|
6247
6261
|
const keys = await forage.keys().then((keys2) => keys2).catch(() => []);
|
|
6248
6262
|
let size = 0;
|
|
@@ -6371,18 +6385,18 @@ var OfflineStorage = class _OfflineStorage {
|
|
|
6371
6385
|
const size = PREFIX.length;
|
|
6372
6386
|
const databases = await indexedDB.databases();
|
|
6373
6387
|
const tasks = [];
|
|
6374
|
-
for (const { name
|
|
6375
|
-
if (
|
|
6388
|
+
for (const { name, version } of databases) {
|
|
6389
|
+
if (name === void 0)
|
|
6376
6390
|
continue;
|
|
6377
6391
|
let text;
|
|
6378
6392
|
try {
|
|
6379
|
-
text = import_sm_crypto.sm4.decrypt(
|
|
6393
|
+
text = import_sm_crypto.sm4.decrypt(name, key, config);
|
|
6380
6394
|
} catch {
|
|
6381
6395
|
continue;
|
|
6382
6396
|
}
|
|
6383
6397
|
if (text.slice(0, size) !== PREFIX)
|
|
6384
6398
|
continue;
|
|
6385
|
-
const forage = createInstance(
|
|
6399
|
+
const forage = createInstance(name, version);
|
|
6386
6400
|
const value = await forage.getItem(HEADER);
|
|
6387
6401
|
if (value === null || decrypt(value).token !== token || callback && callback(text.slice(size)))
|
|
6388
6402
|
continue;
|
|
@@ -6423,61 +6437,61 @@ var css = (...args) => {
|
|
|
6423
6437
|
var Subscriber = class {
|
|
6424
6438
|
#listeners = {};
|
|
6425
6439
|
#once = {};
|
|
6426
|
-
$on(
|
|
6440
|
+
$on(name, listener) {
|
|
6427
6441
|
const listeners = this.#listeners;
|
|
6428
|
-
if (
|
|
6429
|
-
listeners[
|
|
6442
|
+
if (name in listeners) {
|
|
6443
|
+
listeners[name].push(listener);
|
|
6430
6444
|
} else {
|
|
6431
|
-
listeners[
|
|
6445
|
+
listeners[name] = [listener];
|
|
6432
6446
|
}
|
|
6433
6447
|
return this;
|
|
6434
6448
|
}
|
|
6435
|
-
$once(
|
|
6436
|
-
this.$on(
|
|
6437
|
-
const index = this.#listeners[
|
|
6449
|
+
$once(name, listener) {
|
|
6450
|
+
this.$on(name, listener);
|
|
6451
|
+
const index = this.#listeners[name].length - 1;
|
|
6438
6452
|
const once2 = this.#once;
|
|
6439
|
-
if (
|
|
6440
|
-
once2[
|
|
6453
|
+
if (name in once2) {
|
|
6454
|
+
once2[name].push(index);
|
|
6441
6455
|
} else {
|
|
6442
|
-
once2[
|
|
6456
|
+
once2[name] = [index];
|
|
6443
6457
|
}
|
|
6444
6458
|
return this;
|
|
6445
6459
|
}
|
|
6446
|
-
$emit(
|
|
6447
|
-
const listeners = this.#listeners[
|
|
6460
|
+
$emit(name, ...args) {
|
|
6461
|
+
const listeners = this.#listeners[name];
|
|
6448
6462
|
if (!listeners)
|
|
6449
6463
|
return this;
|
|
6450
|
-
const once2 = hash8strings(this.#once[
|
|
6451
|
-
this.#listeners[
|
|
6464
|
+
const once2 = hash8strings(this.#once[name] || []);
|
|
6465
|
+
this.#listeners[name] = listeners.reduce((list, listener, index) => {
|
|
6452
6466
|
listener(...args);
|
|
6453
6467
|
index in once2 || list.push(listener);
|
|
6454
6468
|
return list;
|
|
6455
6469
|
}, []);
|
|
6456
|
-
delete this.#once[
|
|
6470
|
+
delete this.#once[name];
|
|
6457
6471
|
return this;
|
|
6458
6472
|
}
|
|
6459
|
-
$off(
|
|
6473
|
+
$off(name, listener) {
|
|
6460
6474
|
const listeners = this.#listeners;
|
|
6461
6475
|
const once2 = this.#once;
|
|
6462
|
-
if (
|
|
6476
|
+
if (name in listeners === false)
|
|
6463
6477
|
return this;
|
|
6464
6478
|
if (listener) {
|
|
6465
6479
|
let count;
|
|
6466
|
-
listeners[
|
|
6480
|
+
listeners[name].some((value, index) => {
|
|
6467
6481
|
if (value === listener) {
|
|
6468
6482
|
count = index;
|
|
6469
|
-
listeners[
|
|
6483
|
+
listeners[name].splice(index, 1);
|
|
6470
6484
|
return true;
|
|
6471
6485
|
}
|
|
6472
|
-
}) && once2[
|
|
6486
|
+
}) && once2[name].some((value, index) => {
|
|
6473
6487
|
if (value === count) {
|
|
6474
|
-
listeners[
|
|
6488
|
+
listeners[name].splice(index, 1);
|
|
6475
6489
|
return true;
|
|
6476
6490
|
}
|
|
6477
6491
|
});
|
|
6478
6492
|
} else {
|
|
6479
|
-
delete listeners[
|
|
6480
|
-
delete this.#once[
|
|
6493
|
+
delete listeners[name];
|
|
6494
|
+
delete this.#once[name];
|
|
6481
6495
|
}
|
|
6482
6496
|
return this;
|
|
6483
6497
|
}
|
package/lib/memory/basic.js
CHANGED
|
@@ -34,6 +34,16 @@ class MemoryBasic {
|
|
|
34
34
|
});
|
|
35
35
|
return this;
|
|
36
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* 返回位于指定索引处的项
|
|
39
|
+
*/
|
|
40
|
+
at(index) {
|
|
41
|
+
const { list } = this;
|
|
42
|
+
if (index < 0) {
|
|
43
|
+
index += list.length;
|
|
44
|
+
}
|
|
45
|
+
return this.list.at(index);
|
|
46
|
+
}
|
|
37
47
|
/**
|
|
38
48
|
* 遍历所有存储数据(按入栈顺序)
|
|
39
49
|
*/
|
|
@@ -134,8 +144,8 @@ class MemoryBasic {
|
|
|
134
144
|
if (!memorys.has(type))
|
|
135
145
|
return this;
|
|
136
146
|
const local = hash8strings(this.#reflex(memorys.get(type)));
|
|
137
|
-
const
|
|
138
|
-
const imitator = new
|
|
147
|
+
const Memory = this.constructor;
|
|
148
|
+
const imitator = new Memory(this.key, {
|
|
139
149
|
mount: this.#mount,
|
|
140
150
|
reflex: this.#reflex
|
|
141
151
|
});
|
package/lib/memory/simple.js
CHANGED
|
@@ -16,6 +16,12 @@ class MemorySimple {
|
|
|
16
16
|
const key = this.#key;
|
|
17
17
|
return typeof key === "function" ? key(data) : data[key];
|
|
18
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* 返回位于指定索引处的项
|
|
21
|
+
*/
|
|
22
|
+
at(index) {
|
|
23
|
+
return this.#memory.at(index);
|
|
24
|
+
}
|
|
19
25
|
push(...list) {
|
|
20
26
|
const memory = this.#memory;
|
|
21
27
|
list.forEach((data) => {
|
package/lib/storage/offline.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { name } from "@package";
|
|
2
1
|
import localforage from "localforage";
|
|
3
2
|
import { isString } from "lodash-es";
|
|
4
3
|
import { sm4 } from "sm-crypto";
|
|
5
|
-
const
|
|
4
|
+
const NAME = "@vope/utils";
|
|
5
|
+
const PREFIX = NAME + "_";
|
|
6
6
|
const key = [25, 144, 1, 32, 25, 135, 6, 40, 32, 23, 18, 19, 32, 36, 9, 5];
|
|
7
7
|
const iv = [182, 59, 9, 29, 86, 64, 118, 111, 112, 101, 47, 117, 116, 105, 108, 115];
|
|
8
8
|
const config = {
|
|
@@ -10,7 +10,7 @@ const config = {
|
|
|
10
10
|
mode: "cbc",
|
|
11
11
|
iv
|
|
12
12
|
};
|
|
13
|
-
const HEADER = "." + sm4.encrypt(
|
|
13
|
+
const HEADER = "." + sm4.encrypt(NAME, key, config);
|
|
14
14
|
const encrypt = (data) => {
|
|
15
15
|
let text = "";
|
|
16
16
|
for (const key2 in data) {
|
|
@@ -49,9 +49,9 @@ const MESSAGES = {
|
|
|
49
49
|
update: "Cannot update data to expired databases",
|
|
50
50
|
get: "Cannot get data from expired databases"
|
|
51
51
|
};
|
|
52
|
-
const createInstance = (
|
|
52
|
+
const createInstance = (name, version = 2) => localforage.createInstance({
|
|
53
53
|
driver: localforage.INDEXEDDB,
|
|
54
|
-
name
|
|
54
|
+
name,
|
|
55
55
|
version
|
|
56
56
|
});
|
|
57
57
|
class OfflineStorage {
|
|
@@ -69,12 +69,12 @@ class OfflineStorage {
|
|
|
69
69
|
return this.#mounted;
|
|
70
70
|
}
|
|
71
71
|
constructor({
|
|
72
|
-
name
|
|
72
|
+
name,
|
|
73
73
|
expire: newExpire,
|
|
74
74
|
token: newToken,
|
|
75
75
|
crypto
|
|
76
76
|
}) {
|
|
77
|
-
const forage = this.#forage = createInstance(sm4.encrypt(PREFIX +
|
|
77
|
+
const forage = this.#forage = createInstance(sm4.encrypt(PREFIX + name, key, config));
|
|
78
78
|
this.#mount = new Promise(async (resolve) => {
|
|
79
79
|
const keys = await forage.keys().then((keys2) => keys2).catch(() => []);
|
|
80
80
|
let size = 0;
|
|
@@ -203,18 +203,18 @@ class OfflineStorage {
|
|
|
203
203
|
const size = PREFIX.length;
|
|
204
204
|
const databases = await indexedDB.databases();
|
|
205
205
|
const tasks = [];
|
|
206
|
-
for (const { name
|
|
207
|
-
if (
|
|
206
|
+
for (const { name, version } of databases) {
|
|
207
|
+
if (name === void 0)
|
|
208
208
|
continue;
|
|
209
209
|
let text;
|
|
210
210
|
try {
|
|
211
|
-
text = sm4.decrypt(
|
|
211
|
+
text = sm4.decrypt(name, key, config);
|
|
212
212
|
} catch {
|
|
213
213
|
continue;
|
|
214
214
|
}
|
|
215
215
|
if (text.slice(0, size) !== PREFIX)
|
|
216
216
|
continue;
|
|
217
|
-
const forage = createInstance(
|
|
217
|
+
const forage = createInstance(name, version);
|
|
218
218
|
const value = await forage.getItem(HEADER);
|
|
219
219
|
if (value === null || decrypt(value).token !== token || callback && callback(text.slice(size)))
|
|
220
220
|
continue;
|
package/package.json
CHANGED
package/types/memory/basic.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Memory } from './type';
|
|
1
|
+
import { type Memory } from './type';
|
|
2
2
|
interface Config<Reactor> {
|
|
3
3
|
/**
|
|
4
4
|
* 定义数据如何挂载到存储中
|
|
@@ -31,6 +31,10 @@ export declare class MemoryBasic<T, Reactor, Type extends Memory.Type> {
|
|
|
31
31
|
constructor(key: Memory.Pitch<T, Type>, config: Config<Reactor>);
|
|
32
32
|
protected getType(data: T): Type;
|
|
33
33
|
push(...list: T[]): this;
|
|
34
|
+
/**
|
|
35
|
+
* 返回位于指定索引处的项
|
|
36
|
+
*/
|
|
37
|
+
at(index: number): T | undefined;
|
|
34
38
|
/**
|
|
35
39
|
* 遍历所有存储数据(按入栈顺序)
|
|
36
40
|
*/
|
package/types/memory/list.d.ts
CHANGED
package/types/memory/power.d.ts
CHANGED
package/types/memory/simple.d.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { Assign } from '@vope/types';
|
|
2
2
|
import { MemoryBasic } from './basic';
|
|
3
|
-
import { Memory } from './type';
|
|
3
|
+
import { type Memory } from './type';
|
|
4
4
|
type Transform<T, V> = {
|
|
5
5
|
[P in keyof T]: T[P] extends (...args: any) => any ? (...args: Parameters<T[P]>) => ReturnType<T[P]> extends T ? V : ReturnType<T[P]> : T[P];
|
|
6
6
|
};
|
|
7
7
|
type Basic<T, V, Type extends Memory.Type> = Assign<Transform<Omit<MemoryBasic<T, V, Type>, 'forType'>, MemorySimple<T, Type>>, {
|
|
8
8
|
get(type: Type): T | null;
|
|
9
|
+
at(index: number): T | undefined;
|
|
9
10
|
}>;
|
|
10
11
|
/**
|
|
11
12
|
* 简易存储(不分类)
|
|
@@ -14,6 +15,10 @@ export declare class MemorySimple<T, Type extends Memory.Type> implements Basic<
|
|
|
14
15
|
#private;
|
|
15
16
|
get size(): number;
|
|
16
17
|
constructor(key: Memory.Pitch<T, Type>);
|
|
18
|
+
/**
|
|
19
|
+
* 返回位于指定索引处的项
|
|
20
|
+
*/
|
|
21
|
+
at(index: number): T | undefined;
|
|
17
22
|
push(...list: T[]): this;
|
|
18
23
|
/**
|
|
19
24
|
* 获取指定类型存储数据
|