maoda-commander-tt 0.0.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 +168 -0
- package/dist/bedrock/assert/assert.d.ts +5 -0
- package/dist/bedrock/assert/assert.d.ts.map +1 -0
- package/dist/bedrock/assert/assert.js +21 -0
- package/dist/bedrock/assert/assert.js.map +1 -0
- package/dist/bedrock/assert/index.d.ts +2 -0
- package/dist/bedrock/assert/index.d.ts.map +1 -0
- package/dist/bedrock/assert/index.js +3 -0
- package/dist/bedrock/assert/index.js.map +1 -0
- package/dist/bedrock/async/barrier.d.ts +20 -0
- package/dist/bedrock/async/barrier.d.ts.map +1 -0
- package/dist/bedrock/async/barrier.js +37 -0
- package/dist/bedrock/async/barrier.js.map +1 -0
- package/dist/bedrock/async/cancellation.d.ts +28 -0
- package/dist/bedrock/async/cancellation.d.ts.map +1 -0
- package/dist/bedrock/async/cancellation.js +156 -0
- package/dist/bedrock/async/cancellation.js.map +1 -0
- package/dist/bedrock/async/idle.d.ts +9 -0
- package/dist/bedrock/async/idle.d.ts.map +1 -0
- package/dist/bedrock/async/idle.js +2 -0
- package/dist/bedrock/async/idle.js.map +1 -0
- package/dist/bedrock/async/index.d.ts +7 -0
- package/dist/bedrock/async/index.d.ts.map +1 -0
- package/dist/bedrock/async/index.js +13 -0
- package/dist/bedrock/async/index.js.map +1 -0
- package/dist/bedrock/async/promise.d.ts +59 -0
- package/dist/bedrock/async/promise.d.ts.map +1 -0
- package/dist/bedrock/async/promise.js +124 -0
- package/dist/bedrock/async/promise.js.map +1 -0
- package/dist/bedrock/async/replace-token.d.ts +61 -0
- package/dist/bedrock/async/replace-token.d.ts.map +1 -0
- package/dist/bedrock/async/replace-token.js +86 -0
- package/dist/bedrock/async/replace-token.js.map +1 -0
- package/dist/bedrock/async/serial-async-task.d.ts +10 -0
- package/dist/bedrock/async/serial-async-task.d.ts.map +1 -0
- package/dist/bedrock/async/serial-async-task.js +101 -0
- package/dist/bedrock/async/serial-async-task.js.map +1 -0
- package/dist/bedrock/async/wait.d.ts +6 -0
- package/dist/bedrock/async/wait.d.ts.map +1 -0
- package/dist/bedrock/async/wait.js +8 -0
- package/dist/bedrock/async/wait.js.map +1 -0
- package/dist/bedrock/cache/index.d.ts +2 -0
- package/dist/bedrock/cache/index.d.ts.map +1 -0
- package/dist/bedrock/cache/index.js +2 -0
- package/dist/bedrock/cache/index.js.map +1 -0
- package/dist/bedrock/cache/lru.d.ts +14 -0
- package/dist/bedrock/cache/lru.d.ts.map +1 -0
- package/dist/bedrock/cache/lru.js +44 -0
- package/dist/bedrock/cache/lru.js.map +1 -0
- package/dist/bedrock/dispose/disposable-linked-list.d.ts +6 -0
- package/dist/bedrock/dispose/disposable-linked-list.d.ts.map +1 -0
- package/dist/bedrock/dispose/disposable-linked-list.js +26 -0
- package/dist/bedrock/dispose/disposable-linked-list.js.map +1 -0
- package/dist/bedrock/dispose/disposable-store.d.ts +12 -0
- package/dist/bedrock/dispose/disposable-store.d.ts.map +1 -0
- package/dist/bedrock/dispose/disposable-store.js +61 -0
- package/dist/bedrock/dispose/disposable-store.js.map +1 -0
- package/dist/bedrock/dispose/disposable-t.d.ts +25 -0
- package/dist/bedrock/dispose/disposable-t.d.ts.map +1 -0
- package/dist/bedrock/dispose/disposable-t.js +85 -0
- package/dist/bedrock/dispose/disposable-t.js.map +1 -0
- package/dist/bedrock/dispose/disposable-utils.d.ts +6 -0
- package/dist/bedrock/dispose/disposable-utils.d.ts.map +1 -0
- package/dist/bedrock/dispose/disposable-utils.js +12 -0
- package/dist/bedrock/dispose/disposable-utils.js.map +1 -0
- package/dist/bedrock/dispose/dispose-base.d.ts +5 -0
- package/dist/bedrock/dispose/dispose-base.d.ts.map +1 -0
- package/dist/bedrock/dispose/dispose-base.js +3 -0
- package/dist/bedrock/dispose/dispose-base.js.map +1 -0
- package/dist/bedrock/dispose/index.d.ts +11 -0
- package/dist/bedrock/dispose/index.d.ts.map +1 -0
- package/dist/bedrock/dispose/index.js +8 -0
- package/dist/bedrock/dispose/index.js.map +1 -0
- package/dist/bedrock/dispose/logger.d.ts +8 -0
- package/dist/bedrock/dispose/logger.d.ts.map +1 -0
- package/dist/bedrock/dispose/logger.js +26 -0
- package/dist/bedrock/dispose/logger.js.map +1 -0
- package/dist/bedrock/dispose/tracker.d.ts +13 -0
- package/dist/bedrock/dispose/tracker.d.ts.map +1 -0
- package/dist/bedrock/dispose/tracker.js +59 -0
- package/dist/bedrock/dispose/tracker.js.map +1 -0
- package/dist/bedrock/error/error-base.d.ts +23 -0
- package/dist/bedrock/error/error-base.d.ts.map +1 -0
- package/dist/bedrock/error/error-base.js +5 -0
- package/dist/bedrock/error/error-base.js.map +1 -0
- package/dist/bedrock/error/error-code.d.ts +34 -0
- package/dist/bedrock/error/error-code.d.ts.map +1 -0
- package/dist/bedrock/error/error-code.js +36 -0
- package/dist/bedrock/error/error-code.js.map +1 -0
- package/dist/bedrock/error/error-const.d.ts +2 -0
- package/dist/bedrock/error/error-const.d.ts.map +1 -0
- package/dist/bedrock/error/error-const.js +16 -0
- package/dist/bedrock/error/error-const.js.map +1 -0
- package/dist/bedrock/error/error-or.d.ts +2 -0
- package/dist/bedrock/error/error-or.d.ts.map +1 -0
- package/dist/bedrock/error/error-or.js +3 -0
- package/dist/bedrock/error/error-or.js.map +1 -0
- package/dist/bedrock/error/error-t.d.ts +7 -0
- package/dist/bedrock/error/error-t.d.ts.map +1 -0
- package/dist/bedrock/error/error-t.js +76 -0
- package/dist/bedrock/error/error-t.js.map +1 -0
- package/dist/bedrock/error/index.d.ts +6 -0
- package/dist/bedrock/error/index.d.ts.map +1 -0
- package/dist/bedrock/error/index.js +6 -0
- package/dist/bedrock/error/index.js.map +1 -0
- package/dist/bedrock/event/emitter.d.ts +44 -0
- package/dist/bedrock/event/emitter.d.ts.map +1 -0
- package/dist/bedrock/event/emitter.js +118 -0
- package/dist/bedrock/event/emitter.js.map +1 -0
- package/dist/bedrock/event/error-handler.d.ts +14 -0
- package/dist/bedrock/event/error-handler.d.ts.map +1 -0
- package/dist/bedrock/event/error-handler.js +21 -0
- package/dist/bedrock/event/error-handler.js.map +1 -0
- package/dist/bedrock/event/index.d.ts +12 -0
- package/dist/bedrock/event/index.d.ts.map +1 -0
- package/dist/bedrock/event/index.js +10 -0
- package/dist/bedrock/event/index.js.map +1 -0
- package/dist/bedrock/event/once.d.ts +3 -0
- package/dist/bedrock/event/once.d.ts.map +1 -0
- package/dist/bedrock/event/once.js +26 -0
- package/dist/bedrock/event/once.js.map +1 -0
- package/dist/bedrock/event/phase-emitter.d.ts +113 -0
- package/dist/bedrock/event/phase-emitter.d.ts.map +1 -0
- package/dist/bedrock/event/phase-emitter.js +163 -0
- package/dist/bedrock/event/phase-emitter.js.map +1 -0
- package/dist/bedrock/event/shortcut-event-utils.d.ts +8 -0
- package/dist/bedrock/event/shortcut-event-utils.d.ts.map +1 -0
- package/dist/bedrock/event/shortcut-event-utils.js +21 -0
- package/dist/bedrock/event/shortcut-event-utils.js.map +1 -0
- package/dist/bedrock/get-or-create/get-or-create.d.ts +2 -0
- package/dist/bedrock/get-or-create/get-or-create.d.ts.map +1 -0
- package/dist/bedrock/get-or-create/get-or-create.js +15 -0
- package/dist/bedrock/get-or-create/get-or-create.js.map +1 -0
- package/dist/bedrock/get-or-create/index.d.ts +2 -0
- package/dist/bedrock/get-or-create/index.d.ts.map +1 -0
- package/dist/bedrock/get-or-create/index.js +2 -0
- package/dist/bedrock/get-or-create/index.js.map +1 -0
- package/dist/bedrock/hash/hash-t.d.ts +3 -0
- package/dist/bedrock/hash/hash-t.d.ts.map +1 -0
- package/dist/bedrock/hash/hash-t.js +12 -0
- package/dist/bedrock/hash/hash-t.js.map +1 -0
- package/dist/bedrock/hash/index.d.ts +3 -0
- package/dist/bedrock/hash/index.d.ts.map +1 -0
- package/dist/bedrock/hash/index.js +3 -0
- package/dist/bedrock/hash/index.js.map +1 -0
- package/dist/bedrock/json/index.d.ts +2 -0
- package/dist/bedrock/json/index.d.ts.map +1 -0
- package/dist/bedrock/json/index.js +2 -0
- package/dist/bedrock/json/index.js.map +1 -0
- package/dist/bedrock/json/json.d.ts +3 -0
- package/dist/bedrock/json/json.d.ts.map +1 -0
- package/dist/bedrock/json/json.js +17 -0
- package/dist/bedrock/json/json.js.map +1 -0
- package/dist/bedrock/lock/capability.d.ts +41 -0
- package/dist/bedrock/lock/capability.d.ts.map +1 -0
- package/dist/bedrock/lock/capability.js +76 -0
- package/dist/bedrock/lock/capability.js.map +1 -0
- package/dist/bedrock/lock/index.d.ts +2 -0
- package/dist/bedrock/lock/index.d.ts.map +1 -0
- package/dist/bedrock/lock/index.js +3 -0
- package/dist/bedrock/lock/index.js.map +1 -0
- package/dist/bedrock/lock/semaphore.d.ts +14 -0
- package/dist/bedrock/lock/semaphore.d.ts.map +1 -0
- package/dist/bedrock/lock/semaphore.js +18 -0
- package/dist/bedrock/lock/semaphore.js.map +1 -0
- package/dist/bedrock/lock/shared-mutex.d.ts +98 -0
- package/dist/bedrock/lock/shared-mutex.d.ts.map +1 -0
- package/dist/bedrock/lock/shared-mutex.js +223 -0
- package/dist/bedrock/lock/shared-mutex.js.map +1 -0
- package/dist/bedrock/response/index.d.ts +2 -0
- package/dist/bedrock/response/index.d.ts.map +1 -0
- package/dist/bedrock/response/index.js +2 -0
- package/dist/bedrock/response/index.js.map +1 -0
- package/dist/bedrock/response/response.d.ts +16 -0
- package/dist/bedrock/response/response.d.ts.map +1 -0
- package/dist/bedrock/response/response.js +14 -0
- package/dist/bedrock/response/response.js.map +1 -0
- package/dist/bedrock/structure/linked-list.d.ts +22 -0
- package/dist/bedrock/structure/linked-list.d.ts.map +1 -0
- package/dist/bedrock/structure/linked-list.js +96 -0
- package/dist/bedrock/structure/linked-list.js.map +1 -0
- package/dist/bedrock/uuid/index.d.ts +2 -0
- package/dist/bedrock/uuid/index.d.ts.map +1 -0
- package/dist/bedrock/uuid/index.js +2 -0
- package/dist/bedrock/uuid/index.js.map +1 -0
- package/dist/bedrock/uuid/uuid.d.ts +7 -0
- package/dist/bedrock/uuid/uuid.d.ts.map +1 -0
- package/dist/bedrock/uuid/uuid.js +59 -0
- package/dist/bedrock/uuid/uuid.js.map +1 -0
- package/dist/commands/hello-command.d.ts +16 -0
- package/dist/commands/hello-command.d.ts.map +1 -0
- package/dist/commands/hello-command.js +28 -0
- package/dist/commands/hello-command.js.map +1 -0
- package/dist/commands/index.d.ts +2 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +2 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/core/base-command.d.ts +27 -0
- package/dist/core/base-command.d.ts.map +1 -0
- package/dist/core/base-command.js +57 -0
- package/dist/core/base-command.js.map +1 -0
- package/dist/core/cli-app.d.ts +25 -0
- package/dist/core/cli-app.d.ts.map +1 -0
- package/dist/core/cli-app.js +52 -0
- package/dist/core/cli-app.js.map +1 -0
- package/dist/core/command-types.d.ts +6 -0
- package/dist/core/command-types.d.ts.map +1 -0
- package/dist/core/command-types.js +2 -0
- package/dist/core/command-types.js.map +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +3 -0
- package/dist/core/index.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +19 -0
- package/dist/main.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/prefer-promise-reject-errors */
|
|
2
|
+
import { makeOkWith, cancelledError, GenericError, timeoutError, makeOk, isLvErrorRef, } from '../error';
|
|
3
|
+
import { CancellationTokenSource } from './cancellation';
|
|
4
|
+
/**
|
|
5
|
+
* 快速生成一个CancelablePromise对象
|
|
6
|
+
*/
|
|
7
|
+
export function makeCancelablePromise(callback) {
|
|
8
|
+
const source = new CancellationTokenSource();
|
|
9
|
+
const thenable = callback(source.token);
|
|
10
|
+
const promise = new Promise((resolve, reject) => {
|
|
11
|
+
const subscription = source.token.onCancellationRequested(() => {
|
|
12
|
+
subscription.dispose();
|
|
13
|
+
source.dispose();
|
|
14
|
+
resolve(cancelledError());
|
|
15
|
+
});
|
|
16
|
+
Promise.resolve(thenable).then((value) => {
|
|
17
|
+
subscription.dispose();
|
|
18
|
+
source.dispose();
|
|
19
|
+
if (isLvErrorRef(value)) {
|
|
20
|
+
resolve(value);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
resolve(makeOkWith(value));
|
|
24
|
+
}
|
|
25
|
+
}, (err) => {
|
|
26
|
+
subscription.dispose();
|
|
27
|
+
source.dispose();
|
|
28
|
+
reject(err);
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
return new (class {
|
|
32
|
+
cancel() {
|
|
33
|
+
source.cancel();
|
|
34
|
+
}
|
|
35
|
+
then(resolve, reject) {
|
|
36
|
+
return promise.then(resolve, reject);
|
|
37
|
+
}
|
|
38
|
+
catch(reject) {
|
|
39
|
+
return this.then(undefined, reject);
|
|
40
|
+
}
|
|
41
|
+
finally(onfinally) {
|
|
42
|
+
return promise.finally(onfinally);
|
|
43
|
+
}
|
|
44
|
+
})();
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* 并行执行promise,当某一个失败,本次调用失败
|
|
48
|
+
* 本质上和Promise.all差不多,相比较之下
|
|
49
|
+
* 1. 包装了错误语义判断
|
|
50
|
+
* 2. 当失败时,会尽可能尝试cancel其他promise
|
|
51
|
+
*
|
|
52
|
+
* 注意:某一个promise失败时,会尽可能尝试调用其他promise的cancel,但不保证一定有效
|
|
53
|
+
* (有可能promiseA已经成功,但是primiseB在之后失败了)
|
|
54
|
+
*/
|
|
55
|
+
export function parallelPromise(promiseList) {
|
|
56
|
+
if (promiseList.length === 0) {
|
|
57
|
+
return Promise.resolve(makeOk());
|
|
58
|
+
}
|
|
59
|
+
let todo = promiseList.length;
|
|
60
|
+
const finish = () => {
|
|
61
|
+
todo = -1;
|
|
62
|
+
for (const promise of promiseList) {
|
|
63
|
+
promise.cancel?.();
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
return new Promise((resolve, reject) => {
|
|
67
|
+
for (const promise of promiseList) {
|
|
68
|
+
promise
|
|
69
|
+
.then((res) => {
|
|
70
|
+
if (isLvErrorRef(res) && !res.ok) {
|
|
71
|
+
finish();
|
|
72
|
+
resolve(res);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
todo--;
|
|
76
|
+
if (todo === 0) {
|
|
77
|
+
resolve(makeOk());
|
|
78
|
+
}
|
|
79
|
+
})
|
|
80
|
+
.catch((err) => {
|
|
81
|
+
finish();
|
|
82
|
+
reject(err);
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* 包装一个promise,提供超时能力
|
|
89
|
+
*/
|
|
90
|
+
export function makePromiseWithTimeout(callback, timeout, defaultValue) {
|
|
91
|
+
const cancellable = makeCancelablePromise(callback);
|
|
92
|
+
const timer = setTimeout(() => {
|
|
93
|
+
cancellable.cancel();
|
|
94
|
+
}, timeout);
|
|
95
|
+
return cancellable.then((res) => {
|
|
96
|
+
clearTimeout(timer);
|
|
97
|
+
if (res.ok) {
|
|
98
|
+
return res;
|
|
99
|
+
}
|
|
100
|
+
// 如果是被取消,触发了超时
|
|
101
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
|
|
102
|
+
if (res.code === GenericError.Cancelled) {
|
|
103
|
+
if (defaultValue !== undefined) {
|
|
104
|
+
// 希望返回默认值
|
|
105
|
+
return makeOkWith(defaultValue);
|
|
106
|
+
}
|
|
107
|
+
return timeoutError();
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
// 遇到其他错误时透传错误
|
|
111
|
+
return res;
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
export function defer() {
|
|
116
|
+
let resolve;
|
|
117
|
+
let reject;
|
|
118
|
+
const promise = new Promise((_resolve, _reject) => {
|
|
119
|
+
resolve = _resolve;
|
|
120
|
+
reject = _reject;
|
|
121
|
+
});
|
|
122
|
+
return { resolve, reject, promise };
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=promise.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promise.js","sourceRoot":"","sources":["../../../src/bedrock/async/promise.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { Event } from '../event';
|
|
2
|
+
/**
|
|
3
|
+
* 可替换值的令牌
|
|
4
|
+
* 本质上是一个容器类,需要通过value获取到真正的内容
|
|
5
|
+
*
|
|
6
|
+
* 特点:
|
|
7
|
+
* 需要通过value获取到真正的内容
|
|
8
|
+
* 每次进行有效replace的时候,会触发onDidReplace事件
|
|
9
|
+
* 注意:如果传入的value没有变化,不会触发onDidReplace事件
|
|
10
|
+
*/
|
|
11
|
+
export interface IReplaceValueToken<T> {
|
|
12
|
+
value: T;
|
|
13
|
+
readonly onDidReplace: Event<[]>;
|
|
14
|
+
isFrozen: () => boolean;
|
|
15
|
+
readonly onFrozen: Event<[]>;
|
|
16
|
+
}
|
|
17
|
+
type EqualFunction<T> = (lhs: T, rhs: T) => boolean;
|
|
18
|
+
/**
|
|
19
|
+
* 可替换值的容器token具体实现
|
|
20
|
+
*/
|
|
21
|
+
declare class ReplaceValueToken<T> implements IReplaceValueToken<T> {
|
|
22
|
+
private _value;
|
|
23
|
+
private readonly _equal;
|
|
24
|
+
private _count;
|
|
25
|
+
private _onDidReplace;
|
|
26
|
+
private _onFrozen;
|
|
27
|
+
constructor(_value: T, _equal?: EqualFunction<T>, _count?: number);
|
|
28
|
+
get value(): T;
|
|
29
|
+
isFrozen(): boolean;
|
|
30
|
+
get onDidReplace(): Event<[]>;
|
|
31
|
+
get onFrozen(): Event<[]>;
|
|
32
|
+
replace(value: T): void;
|
|
33
|
+
}
|
|
34
|
+
interface IOptions<T> {
|
|
35
|
+
equal?: EqualFunction<T>;
|
|
36
|
+
count?: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 可替换值容器的源,提供替换方法
|
|
40
|
+
*/
|
|
41
|
+
export declare class ReplaceValueTokenSource<T> {
|
|
42
|
+
readonly token: ReplaceValueToken<T>;
|
|
43
|
+
constructor(value: T, options?: IOptions<T>);
|
|
44
|
+
replace(newValue: T): void;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* 可替换值容器源 辅助构造函数,方便解构使用
|
|
48
|
+
*/
|
|
49
|
+
export declare function makeReplaceValue<T>(value: T, options?: IOptions<T>): {
|
|
50
|
+
source: ReplaceValueTokenSource<T>;
|
|
51
|
+
token: ReplaceValueToken<T>;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* 只可以替换一次的值容器源 辅助构造函数
|
|
55
|
+
*/
|
|
56
|
+
export declare function makeOnceReplaceValue<T>(value: T, equal?: EqualFunction<T>): {
|
|
57
|
+
source: ReplaceValueTokenSource<T>;
|
|
58
|
+
token: ReplaceValueToken<T>;
|
|
59
|
+
};
|
|
60
|
+
export {};
|
|
61
|
+
//# sourceMappingURL=replace-token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replace-token.d.ts","sourceRoot":"","sources":["../../../src/bedrock/async/replace-token.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAItC;;;;;;;;GAQG;AACH,MAAM,WAAW,kBAAkB,CAAC,CAAC;IAEnC,KAAK,EAAE,CAAC,CAAC;IAGT,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IAGjC,QAAQ,EAAE,MAAM,OAAO,CAAC;IAGxB,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;CAC9B;AAGD,KAAK,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC;AAKpD;;GAEG;AACH,cAAM,iBAAiB,CAAC,CAAC,CAAE,YAAW,kBAAkB,CAAC,CAAC,CAAC;IAMvD,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,MAAM;IANhB,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,SAAS,CAA4B;gBAGnC,MAAM,EAAE,CAAC,EACA,MAAM,GAAE,aAAa,CAAC,CAAC,CAAgB,EAChD,MAAM,GAAE,MAAgC;IAKlD,IAAI,KAAK,IAAI,CAAC,CAEb;IAEM,QAAQ,IAAI,OAAO;IAI1B,IAAW,YAAY,IAAI,KAAK,CAAC,EAAE,CAAC,CAKnC;IAED,IAAW,QAAQ,IAAI,KAAK,CAAC,EAAE,CAAC,CAK/B;IAEM,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;CAiB/B;AAED,UAAU,QAAQ,CAAC,CAAC;IAClB,KAAK,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,qBAAa,uBAAuB,CAAC,CAAC;IACpC,SAAgB,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;gBAEhC,KAAK,EAAE,CAAC,EAAE,OAAO,GAAE,QAAQ,CAAC,CAAC,CAAM;IAIxC,OAAO,CAAC,QAAQ,EAAE,CAAC;CAG3B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;;;EAMlE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;;;EAEzE"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { Emitter } from '../event';
|
|
2
|
+
import { lvAssert } from '../assert';
|
|
3
|
+
const defaultEqual = (lhs, rhs) => {
|
|
4
|
+
return lhs === rhs;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* 可替换值的容器token具体实现
|
|
8
|
+
*/
|
|
9
|
+
class ReplaceValueToken {
|
|
10
|
+
_value;
|
|
11
|
+
_equal;
|
|
12
|
+
_count;
|
|
13
|
+
// emitter延迟初始化
|
|
14
|
+
_onDidReplace = null;
|
|
15
|
+
_onFrozen = null;
|
|
16
|
+
constructor(_value, _equal = defaultEqual, _count = Number.MAX_SAFE_INTEGER) {
|
|
17
|
+
this._value = _value;
|
|
18
|
+
this._equal = _equal;
|
|
19
|
+
this._count = _count;
|
|
20
|
+
lvAssert(this._count > 0);
|
|
21
|
+
}
|
|
22
|
+
get value() {
|
|
23
|
+
return this._value;
|
|
24
|
+
}
|
|
25
|
+
isFrozen() {
|
|
26
|
+
return this._count === 0;
|
|
27
|
+
}
|
|
28
|
+
get onDidReplace() {
|
|
29
|
+
if (!this._onDidReplace) {
|
|
30
|
+
this._onDidReplace = new Emitter();
|
|
31
|
+
}
|
|
32
|
+
return this._onDidReplace.event;
|
|
33
|
+
}
|
|
34
|
+
get onFrozen() {
|
|
35
|
+
if (!this._onFrozen) {
|
|
36
|
+
this._onFrozen = new Emitter();
|
|
37
|
+
}
|
|
38
|
+
return this._onFrozen.event;
|
|
39
|
+
}
|
|
40
|
+
replace(value) {
|
|
41
|
+
lvAssert(this._count > 0);
|
|
42
|
+
if (this._count !== Number.MAX_SAFE_INTEGER) {
|
|
43
|
+
this._count--;
|
|
44
|
+
}
|
|
45
|
+
// 不相等则进行替换
|
|
46
|
+
if (!this._equal(this._value, value)) {
|
|
47
|
+
this._value = value;
|
|
48
|
+
if (this._onDidReplace) {
|
|
49
|
+
this._onDidReplace.fire();
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// 如果count为0,并且存在监听frozen,就派发事件
|
|
53
|
+
if (this._count === 0 && this._onFrozen) {
|
|
54
|
+
this._onFrozen.fire();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* 可替换值容器的源,提供替换方法
|
|
60
|
+
*/
|
|
61
|
+
export class ReplaceValueTokenSource {
|
|
62
|
+
token;
|
|
63
|
+
constructor(value, options = {}) {
|
|
64
|
+
this.token = new ReplaceValueToken(value, options.equal, options.count);
|
|
65
|
+
}
|
|
66
|
+
replace(newValue) {
|
|
67
|
+
this.token.replace(newValue);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* 可替换值容器源 辅助构造函数,方便解构使用
|
|
72
|
+
*/
|
|
73
|
+
export function makeReplaceValue(value, options) {
|
|
74
|
+
const replaceSource = new ReplaceValueTokenSource(value, options);
|
|
75
|
+
return {
|
|
76
|
+
source: replaceSource,
|
|
77
|
+
token: replaceSource.token,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* 只可以替换一次的值容器源 辅助构造函数
|
|
82
|
+
*/
|
|
83
|
+
export function makeOnceReplaceValue(value, equal) {
|
|
84
|
+
return makeReplaceValue(value, { equal, count: 1 });
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=replace-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replace-token.js","sourceRoot":"","sources":["../../../src/bedrock/async/replace-token.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AA2BrC,MAAM,YAAY,GAAG,CAAC,GAAY,EAAE,GAAY,EAAE,EAAE;IAClD,OAAO,GAAG,KAAK,GAAG,CAAC;AACrB,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,iBAAiB;IAMX;IACS;IACT;IAPV,eAAe;IACP,aAAa,GAAuB,IAAI,CAAC;IACzC,SAAS,GAAuB,IAAI,CAAC;IAE7C,YACU,MAAS,EACA,SAA2B,YAAY,EAChD,SAAiB,MAAM,CAAC,gBAAgB;QAFxC,WAAM,GAAN,MAAM,CAAG;QACA,WAAM,GAAN,MAAM,CAAiC;QAChD,WAAM,GAAN,MAAM,CAAkC;QAEhD,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAEM,QAAQ;QACb,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,IAAW,YAAY;QACrB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,IAAI,CAAC,aAAa,GAAG,IAAI,OAAO,EAAM,CAAC;QACzC,CAAC;QACD,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;IAClC,CAAC;IAED,IAAW,QAAQ;QACjB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,GAAG,IAAI,OAAO,EAAM,CAAC;QACrC,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;IAC9B,CAAC;IAEM,OAAO,CAAC,KAAQ;QACrB,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC1B,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC;QACD,WAAW;QACX,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;YAC5B,CAAC;QACH,CAAC;QACD,+BAA+B;QAC/B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACxC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;CACF;AAOD;;GAEG;AACH,MAAM,OAAO,uBAAuB;IAClB,KAAK,CAAuB;IAE5C,YAAY,KAAQ,EAAE,UAAuB,EAAE;QAC7C,IAAI,CAAC,KAAK,GAAG,IAAI,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1E,CAAC;IAEM,OAAO,CAAC,QAAW;QACxB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAI,KAAQ,EAAE,OAAqB;IACjE,MAAM,aAAa,GAAG,IAAI,uBAAuB,CAAI,KAAK,EAAE,OAAO,CAAC,CAAC;IACrE,OAAO;QACL,MAAM,EAAE,aAAa;QACrB,KAAK,EAAE,aAAa,CAAC,KAAK;KAC3B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAI,KAAQ,EAAE,KAAwB;IACxE,OAAO,gBAAgB,CAAI,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 写操作 decorator
|
|
3
|
+
*/
|
|
4
|
+
export declare function writingTask<T extends WeakKey>(target: T, _methodName: string, descriptor: PropertyDescriptor): void;
|
|
5
|
+
/**
|
|
6
|
+
* 读操作 decorator
|
|
7
|
+
*/
|
|
8
|
+
export declare function readingTask<T extends WeakKey>(target: T, _methodName: string, descriptor: PropertyDescriptor): void;
|
|
9
|
+
export declare function throttleTask(_target: any, _methodName: string, descriptor: PropertyDescriptor): void;
|
|
10
|
+
//# sourceMappingURL=serial-async-task.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serial-async-task.d.ts","sourceRoot":"","sources":["../../../src/bedrock/async/serial-async-task.ts"],"names":[],"mappings":"AAqBA;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,OAAO,EAC3C,MAAM,EAAE,CAAC,EACT,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,kBAAkB,QAa/B;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,OAAO,EAC3C,MAAM,EAAE,CAAC,EACT,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,kBAAkB,QAW/B;AAqBD,wBAAgB,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,kBAAkB,QA0C7F"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unsafe-return */
|
|
2
|
+
/* 串行执行异步读写任务装饰器 */
|
|
3
|
+
/**
|
|
4
|
+
* 用于保存对象当前写任务的 weak map
|
|
5
|
+
*/
|
|
6
|
+
const writingTasks = new WeakMap();
|
|
7
|
+
/**
|
|
8
|
+
* 获取 target 的写任务
|
|
9
|
+
*/
|
|
10
|
+
function getWritingTask(target) {
|
|
11
|
+
if (!writingTasks.has(target)) {
|
|
12
|
+
writingTasks.set(target, Promise.resolve());
|
|
13
|
+
}
|
|
14
|
+
return writingTasks.get(target);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 写操作 decorator
|
|
18
|
+
*/
|
|
19
|
+
export function writingTask(target, _methodName, descriptor) {
|
|
20
|
+
const originalMethod = descriptor.value;
|
|
21
|
+
descriptor.value = function (...args) {
|
|
22
|
+
const task = getWritingTask(target);
|
|
23
|
+
// 串联写任务,且上一个出错了也不要阻塞下一个的执行
|
|
24
|
+
const newTask = task
|
|
25
|
+
.then(() => originalMethod.apply(this, args))
|
|
26
|
+
.catch(() => originalMethod.apply(this, args));
|
|
27
|
+
writingTasks.set(target, newTask);
|
|
28
|
+
return newTask;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 读操作 decorator
|
|
33
|
+
*/
|
|
34
|
+
export function readingTask(target, _methodName, descriptor) {
|
|
35
|
+
const originalMethod = descriptor.value;
|
|
36
|
+
descriptor.value = async function (...args) {
|
|
37
|
+
const task = getWritingTask(target);
|
|
38
|
+
// 读任务只需要等待前面的写任务完成,写任务出错了也不阻塞当前操作
|
|
39
|
+
await task.catch(() => Promise.resolve());
|
|
40
|
+
const result = await originalMethod.apply(this, args);
|
|
41
|
+
return result;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
const throttleTaskCaches = new WeakMap();
|
|
45
|
+
const throttleTaskStateList = new WeakMap();
|
|
46
|
+
function getThrottleTask(target) {
|
|
47
|
+
if (!throttleTaskCaches.has(target)) {
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
return throttleTaskCaches.get(target);
|
|
51
|
+
}
|
|
52
|
+
function isThrottleTaskRunning(target) {
|
|
53
|
+
if (!throttleTaskStateList.has(target)) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
return throttleTaskStateList.get(target);
|
|
57
|
+
}
|
|
58
|
+
export function throttleTask(_target, _methodName, descriptor) {
|
|
59
|
+
const originalMethod = descriptor.value;
|
|
60
|
+
descriptor.value = function (...args) {
|
|
61
|
+
const options = args[args.length - 1];
|
|
62
|
+
if (options.throttle) {
|
|
63
|
+
if (isThrottleTaskRunning(originalMethod)) {
|
|
64
|
+
const preTask = getThrottleTask(originalMethod);
|
|
65
|
+
if (preTask) {
|
|
66
|
+
preTask.reject();
|
|
67
|
+
}
|
|
68
|
+
let currentTaskResolve;
|
|
69
|
+
let currentTaskReject;
|
|
70
|
+
const currentTask = new Promise((resolve, reject) => {
|
|
71
|
+
currentTaskResolve = resolve;
|
|
72
|
+
currentTaskReject = reject;
|
|
73
|
+
});
|
|
74
|
+
throttleTaskCaches.set(originalMethod, {
|
|
75
|
+
scope: this,
|
|
76
|
+
args,
|
|
77
|
+
resolve: currentTaskResolve,
|
|
78
|
+
reject: currentTaskReject,
|
|
79
|
+
});
|
|
80
|
+
return currentTask;
|
|
81
|
+
}
|
|
82
|
+
throttleTaskStateList.set(originalMethod, true);
|
|
83
|
+
return new Promise((resolve) => {
|
|
84
|
+
originalMethod.apply(this, args).finally(() => {
|
|
85
|
+
throttleTaskStateList.set(originalMethod, false);
|
|
86
|
+
resolve();
|
|
87
|
+
const lastTask = getThrottleTask(originalMethod);
|
|
88
|
+
if (!lastTask) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
throttleTaskCaches.delete(originalMethod);
|
|
92
|
+
descriptor.value.apply(lastTask.scope, lastTask.args).finally(lastTask.resolve);
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
return originalMethod.apply(this, args);
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=serial-async-task.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serial-async-task.js","sourceRoot":"","sources":["../../../src/bedrock/async/serial-async-task.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../../src/bedrock/async/wait.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wait.js","sourceRoot":"","sources":["../../../src/bedrock/async/wait.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,IAAI,CAAC,EAAU;IAC7B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/bedrock/cache/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/bedrock/cache/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LRUCache
|
|
3
|
+
*/
|
|
4
|
+
export declare class LRUCache<T, K = string> {
|
|
5
|
+
private readonly _capacity;
|
|
6
|
+
private readonly _cache;
|
|
7
|
+
constructor(_capacity: number);
|
|
8
|
+
get(key: K): T | undefined;
|
|
9
|
+
put(key: K, value: T): void;
|
|
10
|
+
remove(key: K): void;
|
|
11
|
+
size(): number;
|
|
12
|
+
clear(): void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=lru.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lru.d.ts","sourceRoot":"","sources":["../../../src/bedrock/cache/lru.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM;IAGrB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAFtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwB;gBAElB,SAAS,EAAE,MAAM;IAE9C,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAU1B,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAY3B,MAAM,CAAC,GAAG,EAAE,CAAC;IAOb,IAAI,IAAI,MAAM;IAId,KAAK;CAGN"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LRUCache
|
|
3
|
+
*/
|
|
4
|
+
export class LRUCache {
|
|
5
|
+
_capacity;
|
|
6
|
+
_cache = new Map();
|
|
7
|
+
constructor(_capacity) {
|
|
8
|
+
this._capacity = _capacity;
|
|
9
|
+
}
|
|
10
|
+
get(key) {
|
|
11
|
+
const value = this._cache.get(key);
|
|
12
|
+
if (value) {
|
|
13
|
+
// 将访问过的 key 移到最近使用的位置
|
|
14
|
+
this._cache.delete(key);
|
|
15
|
+
this._cache.set(key, value);
|
|
16
|
+
}
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
19
|
+
put(key, value) {
|
|
20
|
+
if (this._cache.has(key)) {
|
|
21
|
+
// 如果已存在该 key,则将其移动到最近使用的位置
|
|
22
|
+
this._cache.delete(key);
|
|
23
|
+
}
|
|
24
|
+
else if (this._cache.size >= this._capacity) {
|
|
25
|
+
// 如果已达到容量上限,则删除最久未使用的键值对
|
|
26
|
+
const oldestKey = this._cache.keys().next().value;
|
|
27
|
+
this._cache.delete(oldestKey);
|
|
28
|
+
}
|
|
29
|
+
this._cache.set(key, value);
|
|
30
|
+
}
|
|
31
|
+
remove(key) {
|
|
32
|
+
const obj = this._cache.get(key);
|
|
33
|
+
if (obj) {
|
|
34
|
+
this._cache.delete(key);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
size() {
|
|
38
|
+
return this._cache.size;
|
|
39
|
+
}
|
|
40
|
+
clear() {
|
|
41
|
+
this._cache.clear();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=lru.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lru.js","sourceRoot":"","sources":["../../../src/bedrock/cache/lru.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,QAAQ;IAGU;IAFZ,MAAM,GAAc,IAAI,GAAG,EAAE,CAAC;IAE/C,YAA6B,SAAiB;QAAjB,cAAS,GAAT,SAAS,CAAQ;IAAG,CAAC;IAElD,GAAG,CAAC,GAAM;QACR,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,KAAK,EAAE,CAAC;YACV,sBAAsB;YACtB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,GAAG,CAAC,GAAM,EAAE,KAAQ;QAClB,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,2BAA2B;YAC3B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC9C,yBAAyB;YACzB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YAClD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAc,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,CAAC,GAAM;QACX,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IAC1B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;CACF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { LinkedList } from '../structure/linked-list';
|
|
2
|
+
export declare class DisposableLinkedList<T> extends LinkedList<T> {
|
|
3
|
+
unshiftAndGetDisposableNode(value: T): () => void;
|
|
4
|
+
pushAndGetDisposableNode(value: T): () => void;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=disposable-linked-list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disposable-linked-list.d.ts","sourceRoot":"","sources":["../../../src/bedrock/dispose/disposable-linked-list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,qBAAa,oBAAoB,CAAC,CAAC,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;IACxD,2BAA2B,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM,IAAI;IAajD,wBAAwB,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM,IAAI;CAY/C"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { LinkedList } from '../structure/linked-list';
|
|
2
|
+
export class DisposableLinkedList extends LinkedList {
|
|
3
|
+
unshiftAndGetDisposableNode(value) {
|
|
4
|
+
this.unshift(value);
|
|
5
|
+
const node = this._first;
|
|
6
|
+
let hasRemoved = false;
|
|
7
|
+
return () => {
|
|
8
|
+
if (!hasRemoved) {
|
|
9
|
+
hasRemoved = true;
|
|
10
|
+
super._remove(node);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
pushAndGetDisposableNode(value) {
|
|
15
|
+
this.push(value);
|
|
16
|
+
const node = this._last;
|
|
17
|
+
let hasRemoved = false;
|
|
18
|
+
return () => {
|
|
19
|
+
if (!hasRemoved) {
|
|
20
|
+
hasRemoved = true;
|
|
21
|
+
super._remove(node);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=disposable-linked-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disposable-linked-list.js","sourceRoot":"","sources":["../../../src/bedrock/dispose/disposable-linked-list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,MAAM,OAAO,oBAAwB,SAAQ,UAAa;IACxD,2BAA2B,CAAC,KAAQ;QAClC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAEpB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAO,CAAC;QAC1B,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,OAAO,GAAS,EAAE;YAChB,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,UAAU,GAAG,IAAI,CAAC;gBAClB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAED,wBAAwB,CAAC,KAAQ;QAC/B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEjB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAM,CAAC;QACzB,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,OAAO,GAAS,EAAE;YAChB,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,UAAU,GAAG,IAAI,CAAC;gBAClB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IDisposable } from './dispose-base';
|
|
2
|
+
export declare class DisposableStore implements IDisposable {
|
|
3
|
+
static DISABLE_DISPOSED_WARNING: boolean;
|
|
4
|
+
private readonly _toDispose;
|
|
5
|
+
private _isDisposed;
|
|
6
|
+
constructor();
|
|
7
|
+
get isDisposed(): boolean;
|
|
8
|
+
dispose(): void;
|
|
9
|
+
clear(): void;
|
|
10
|
+
add<T extends IDisposable>(o: T): T;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=disposable-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disposable-store.d.ts","sourceRoot":"","sources":["../../../src/bedrock/dispose/disposable-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAIlD,qBAAa,eAAgB,YAAW,WAAW;IACjD,MAAM,CAAC,wBAAwB,UAAS;IAExC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA0B;IACrD,OAAO,CAAC,WAAW,CAAS;;IAM5B,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,OAAO,IAAI,IAAI;IAaf,KAAK,IAAI,IAAI;IAmBb,GAAG,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC;CAwBpC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { BRANCH_DISPOSE } from './logger';
|
|
2
|
+
import { MARK_AS_DISPOSED, SET_PARENT_OF_DISPOSABLE, TRACK_DISPOSABLE } from './tracker';
|
|
3
|
+
export class DisposableStore {
|
|
4
|
+
static DISABLE_DISPOSED_WARNING = false;
|
|
5
|
+
_toDispose = new Set();
|
|
6
|
+
_isDisposed = false;
|
|
7
|
+
constructor() {
|
|
8
|
+
TRACK_DISPOSABLE(this);
|
|
9
|
+
}
|
|
10
|
+
get isDisposed() {
|
|
11
|
+
return this._isDisposed;
|
|
12
|
+
}
|
|
13
|
+
dispose() {
|
|
14
|
+
if (this._isDisposed) {
|
|
15
|
+
// 不应该出现重复dispose
|
|
16
|
+
/* eslint-disable no-console */
|
|
17
|
+
console.warn(new Error('DisposableStore has disposed.').stack);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
MARK_AS_DISPOSED(this);
|
|
21
|
+
this._isDisposed = true;
|
|
22
|
+
this.clear();
|
|
23
|
+
}
|
|
24
|
+
clear() {
|
|
25
|
+
if (this._toDispose.size === 0) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
for (const disposable of this._toDispose) {
|
|
29
|
+
BRANCH_DISPOSE(this.constructor.name, disposable.constructor.name);
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
// TODO(vorshen): 考虑异常情况
|
|
33
|
+
for (const disposable of this._toDispose) {
|
|
34
|
+
disposable.dispose();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
finally {
|
|
38
|
+
this._toDispose.clear();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
add(o) {
|
|
42
|
+
if (!o) {
|
|
43
|
+
return o;
|
|
44
|
+
}
|
|
45
|
+
if (o === this) {
|
|
46
|
+
throw new Error('Cannot register a disposable on itself.');
|
|
47
|
+
}
|
|
48
|
+
SET_PARENT_OF_DISPOSABLE(o, this);
|
|
49
|
+
if (this._isDisposed) {
|
|
50
|
+
if (!DisposableStore.DISABLE_DISPOSED_WARNING) {
|
|
51
|
+
/* eslint-disable no-console */
|
|
52
|
+
console.warn(new Error('Trying to add a disposable to a DisposableStore that has already been disposed of. The added object will be leaked!').stack);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
this._toDispose.add(o);
|
|
57
|
+
}
|
|
58
|
+
return o;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=disposable-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disposable-store.js","sourceRoot":"","sources":["../../../src/bedrock/dispose/disposable-store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAEzF,MAAM,OAAO,eAAe;IAC1B,MAAM,CAAC,wBAAwB,GAAG,KAAK,CAAC;IAEvB,UAAU,GAAG,IAAI,GAAG,EAAe,CAAC;IAC7C,WAAW,GAAG,KAAK,CAAC;IAE5B;QACE,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,iBAAiB;YACjB,+BAA+B;YAC/B,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC,KAAK,CAAC,CAAC;YAC/D,OAAO;QACT,CAAC;QAED,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO;QACT,CAAC;QAED,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACzC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,CAAC;YACH,wBAAwB;YACxB,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACzC,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,GAAG,CAAwB,CAAI;QAC7B,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,OAAO,CAAC,CAAC;QACX,CAAC;QACD,IAAK,CAAgC,KAAK,IAAI,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QAED,wBAAwB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,eAAe,CAAC,wBAAwB,EAAE,CAAC;gBAC9C,+BAA+B;gBAC/B,OAAO,CAAC,IAAI,CACV,IAAI,KAAK,CACP,qHAAqH,CACtH,CAAC,KAAK,CACR,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;QAED,OAAO,CAAC,CAAC;IACX,CAAC"}
|