@ccpc/core 0.1.0
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/LICENSE +21 -0
- package/README.md +11 -0
- package/dist/document/document.d.ts +21 -0
- package/dist/document/document.d.ts.map +1 -0
- package/dist/document/document.js +53 -0
- package/dist/document/element_mgr.d.ts +11 -0
- package/dist/document/element_mgr.d.ts.map +1 -0
- package/dist/document/element_mgr.js +27 -0
- package/dist/document/i_document.d.ts +19 -0
- package/dist/document/i_document.d.ts.map +1 -0
- package/dist/document/i_document.js +1 -0
- package/dist/document/id_pool.d.ts +20 -0
- package/dist/document/id_pool.d.ts.map +1 -0
- package/dist/document/id_pool.js +67 -0
- package/dist/element/c_element.d.ts +6 -0
- package/dist/element/c_element.d.ts.map +1 -0
- package/dist/element/c_element.js +6 -0
- package/dist/element/element.d.ts +42 -0
- package/dist/element/element.d.ts.map +1 -0
- package/dist/element/element.js +72 -0
- package/dist/element/element_decorator.d.ts +3 -0
- package/dist/element/element_decorator.d.ts.map +1 -0
- package/dist/element/element_decorator.js +40 -0
- package/dist/element/element_id.d.ts +14 -0
- package/dist/element/element_id.d.ts.map +1 -0
- package/dist/element/element_id.js +30 -0
- package/dist/element/i_element.d.ts +30 -0
- package/dist/element/i_element.d.ts.map +1 -0
- package/dist/element/i_element.js +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/request/i_request.d.ts +8 -0
- package/dist/request/i_request.d.ts.map +1 -0
- package/dist/request/i_request.js +1 -0
- package/dist/request/request.d.ts +12 -0
- package/dist/request/request.d.ts.map +1 -0
- package/dist/request/request.js +11 -0
- package/dist/request/request_decorator.d.ts +8 -0
- package/dist/request/request_decorator.d.ts.map +1 -0
- package/dist/request/request_decorator.js +10 -0
- package/dist/request/request_mgr.d.ts +42 -0
- package/dist/request/request_mgr.d.ts.map +1 -0
- package/dist/request/request_mgr.js +77 -0
- package/dist/toolkit/class_manager.d.ts +30 -0
- package/dist/toolkit/class_manager.d.ts.map +1 -0
- package/dist/toolkit/class_manager.js +54 -0
- package/dist/toolkit/debug_util.d.ts +5 -0
- package/dist/toolkit/debug_util.d.ts.map +1 -0
- package/dist/toolkit/debug_util.js +15 -0
- package/dist/transaction/i_transaction.d.ts +21 -0
- package/dist/transaction/i_transaction.d.ts.map +1 -0
- package/dist/transaction/i_transaction.js +1 -0
- package/dist/transaction/i_transaction_base.d.ts +44 -0
- package/dist/transaction/i_transaction_base.d.ts.map +1 -0
- package/dist/transaction/i_transaction_base.js +11 -0
- package/dist/transaction/i_transaction_group.d.ts +41 -0
- package/dist/transaction/i_transaction_group.d.ts.map +1 -0
- package/dist/transaction/i_transaction_group.js +1 -0
- package/dist/transaction/transaction.d.ts +18 -0
- package/dist/transaction/transaction.d.ts.map +1 -0
- package/dist/transaction/transaction.js +41 -0
- package/dist/transaction/transaction_base.d.ts +17 -0
- package/dist/transaction/transaction_base.d.ts.map +1 -0
- package/dist/transaction/transaction_base.js +32 -0
- package/dist/transaction/transaction_group.d.ts +51 -0
- package/dist/transaction/transaction_group.d.ts.map +1 -0
- package/dist/transaction/transaction_group.js +242 -0
- package/dist/transaction/transaction_mgr.d.ts +54 -0
- package/dist/transaction/transaction_mgr.d.ts.map +1 -0
- package/dist/transaction/transaction_mgr.js +84 -0
- package/dist/transaction/undo_redo_entity.d.ts +71 -0
- package/dist/transaction/undo_redo_entity.d.ts.map +1 -0
- package/dist/transaction/undo_redo_entity.js +261 -0
- package/dist/types/dump_type.d.ts +4 -0
- package/dist/types/dump_type.d.ts.map +1 -0
- package/dist/types/dump_type.js +1 -0
- package/dist/types/type_guard.d.ts +5 -0
- package/dist/types/type_guard.d.ts.map +1 -0
- package/dist/types/type_guard.js +1 -0
- package/package.json +30 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { IDocument } from '../document/i_document';
|
|
2
|
+
import { IConstructor } from '../types/type_guard';
|
|
3
|
+
import { IRequest } from './i_request';
|
|
4
|
+
import { Request } from './request';
|
|
5
|
+
/**
|
|
6
|
+
* RequestMgr 用法说明:
|
|
7
|
+
* 1) 单次请求:createReq -> executeReq(req, true)
|
|
8
|
+
* 2) 可取消请求:createReq -> executeReq(req, false) -> 后续 commit/cancel
|
|
9
|
+
* 3) 会话请求:
|
|
10
|
+
* startSession()
|
|
11
|
+
* createReq/executeReq 多次
|
|
12
|
+
* 成功 commitSession(),失败 abortSession()
|
|
13
|
+
*
|
|
14
|
+
* 约束:
|
|
15
|
+
* - 仅当 req.canTransact() 为 true 时会创建 Transaction。
|
|
16
|
+
* - abortSession/cancelReq 会回滚当前事务或事务组。
|
|
17
|
+
*/
|
|
18
|
+
export declare class RequestMgr {
|
|
19
|
+
private static _instance?;
|
|
20
|
+
private _doc;
|
|
21
|
+
/** Request 类管理器 */
|
|
22
|
+
private _requestClsMgr;
|
|
23
|
+
private _transGroup?;
|
|
24
|
+
private _transaction?;
|
|
25
|
+
static getInstance(): RequestMgr;
|
|
26
|
+
init(doc: IDocument): void;
|
|
27
|
+
/**
|
|
28
|
+
* 注册请求
|
|
29
|
+
*/
|
|
30
|
+
registerRequest(requestId: string, request: IConstructor<Request>): void;
|
|
31
|
+
startSession(name?: string): void;
|
|
32
|
+
commitSession(): void;
|
|
33
|
+
abortSession(): void;
|
|
34
|
+
/**
|
|
35
|
+
* 创建请求
|
|
36
|
+
*/
|
|
37
|
+
createReq<T extends IConstructor<Request>>(ctor: T, ...args: ConstructorParameters<T>): InstanceType<T>;
|
|
38
|
+
executeReq<T extends IRequest, R = ReturnType<T['execute']>>(req: T, commit?: boolean): R;
|
|
39
|
+
cancelReq(): void;
|
|
40
|
+
}
|
|
41
|
+
export declare const requestMgr: RequestMgr;
|
|
42
|
+
//# sourceMappingURL=request_mgr.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request_mgr.d.ts","sourceRoot":"","sources":["../../src/request/request_mgr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAOvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC;;;;;;;;;;;;GAYG;AACH,qBAAa,UAAU;IACnB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAY;IAErC,OAAO,CAAC,IAAI,CAAY;IAExB,mBAAmB;IACnB,OAAO,CAAC,cAAc,CAAoD;IAE1E,OAAO,CAAC,WAAW,CAAC,CAAmB;IAEvC,OAAO,CAAC,YAAY,CAAC,CAAc;WAErB,WAAW,IAAI,UAAU;IAOhC,IAAI,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI;IAIjC;;OAEG;IACI,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC;IAIjE,YAAY,CAAC,IAAI,GAAE,MAAW,GAAG,IAAI;IAKrC,aAAa,IAAI,IAAI;IAKrB,YAAY,IAAI,IAAI;IAK3B;;OAEG;IACI,SAAS,CAAC,CAAC,SAAS,YAAY,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IAWvG,UAAU,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,UAAO,GAAG,CAAC;IAWtF,SAAS,IAAI,IAAI;CAI3B;AAED,eAAO,MAAM,UAAU,YAA2B,CAAA"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { ClassManager } from '../toolkit/class_manager';
|
|
2
|
+
import { DebugUtil } from '../toolkit/debug_util';
|
|
3
|
+
import { Transaction } from '../transaction/transaction';
|
|
4
|
+
import { TransactionGroup } from '../transaction/transaction_group';
|
|
5
|
+
/**
|
|
6
|
+
* RequestMgr 用法说明:
|
|
7
|
+
* 1) 单次请求:createReq -> executeReq(req, true)
|
|
8
|
+
* 2) 可取消请求:createReq -> executeReq(req, false) -> 后续 commit/cancel
|
|
9
|
+
* 3) 会话请求:
|
|
10
|
+
* startSession()
|
|
11
|
+
* createReq/executeReq 多次
|
|
12
|
+
* 成功 commitSession(),失败 abortSession()
|
|
13
|
+
*
|
|
14
|
+
* 约束:
|
|
15
|
+
* - 仅当 req.canTransact() 为 true 时会创建 Transaction。
|
|
16
|
+
* - abortSession/cancelReq 会回滚当前事务或事务组。
|
|
17
|
+
*/
|
|
18
|
+
export class RequestMgr {
|
|
19
|
+
constructor() {
|
|
20
|
+
/** Request 类管理器 */
|
|
21
|
+
this._requestClsMgr = new ClassManager();
|
|
22
|
+
}
|
|
23
|
+
static getInstance() {
|
|
24
|
+
if (!this._instance) {
|
|
25
|
+
this._instance = new RequestMgr();
|
|
26
|
+
}
|
|
27
|
+
return this._instance;
|
|
28
|
+
}
|
|
29
|
+
init(doc) {
|
|
30
|
+
this._doc = doc;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 注册请求
|
|
34
|
+
*/
|
|
35
|
+
registerRequest(requestId, request) {
|
|
36
|
+
this._requestClsMgr.registerCls(requestId, request);
|
|
37
|
+
}
|
|
38
|
+
startSession(name = '') {
|
|
39
|
+
DebugUtil.assert(!this._transGroup, '请先提交上一个 request', 'wg', '2026-03-05');
|
|
40
|
+
this._transGroup = new TransactionGroup(this._doc, name);
|
|
41
|
+
}
|
|
42
|
+
commitSession() {
|
|
43
|
+
this._transGroup?.assimilate();
|
|
44
|
+
this._transGroup = undefined;
|
|
45
|
+
}
|
|
46
|
+
abortSession() {
|
|
47
|
+
this._transGroup?.rollBack();
|
|
48
|
+
this._transGroup = undefined;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* 创建请求
|
|
52
|
+
*/
|
|
53
|
+
createReq(ctor, ...args) {
|
|
54
|
+
const req = new ctor(...args);
|
|
55
|
+
req.setDoc(this._doc);
|
|
56
|
+
const reqName = this._requestClsMgr.getClsNameEnsure(ctor);
|
|
57
|
+
if (req.canTransact()) {
|
|
58
|
+
this._transaction = new Transaction(this._doc, `${reqName}-start`);
|
|
59
|
+
}
|
|
60
|
+
return req;
|
|
61
|
+
}
|
|
62
|
+
executeReq(req, commit = true) {
|
|
63
|
+
const result = req.execute();
|
|
64
|
+
if (!commit || !req.canTransact())
|
|
65
|
+
return result;
|
|
66
|
+
DebugUtil.assert(this._transaction, '请先创建一个 request', 'wg', '2026-03-05');
|
|
67
|
+
this._transaction?.commit();
|
|
68
|
+
// TODO: 视图刷新 + 事件处理
|
|
69
|
+
this._transaction = undefined;
|
|
70
|
+
return result;
|
|
71
|
+
}
|
|
72
|
+
cancelReq() {
|
|
73
|
+
this._transaction?.rollBack();
|
|
74
|
+
this._transaction = undefined;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
export const requestMgr = RequestMgr.getInstance();
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 类管理器
|
|
3
|
+
*/
|
|
4
|
+
export declare class ClassManager<T, K> {
|
|
5
|
+
private _kvMap;
|
|
6
|
+
private _vkMap;
|
|
7
|
+
/**
|
|
8
|
+
* 注册类
|
|
9
|
+
*/
|
|
10
|
+
registerCls(key: T, val: K): void;
|
|
11
|
+
/**
|
|
12
|
+
* 获取类
|
|
13
|
+
*/
|
|
14
|
+
getCls(key: T): K | undefined;
|
|
15
|
+
getClsEnsure(key: T): K & {};
|
|
16
|
+
/**
|
|
17
|
+
* 获取标识
|
|
18
|
+
*/
|
|
19
|
+
getClsName(val: K): T | undefined;
|
|
20
|
+
getClsNameEnsure(val: K): T & {};
|
|
21
|
+
/**
|
|
22
|
+
* 获取所有类
|
|
23
|
+
*/
|
|
24
|
+
getAllCls(): K[];
|
|
25
|
+
/**
|
|
26
|
+
* 查看所有类个数
|
|
27
|
+
*/
|
|
28
|
+
getClsLength(): number;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=class_manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"class_manager.d.ts","sourceRoot":"","sources":["../../src/toolkit/class_manager.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,qBAAa,YAAY,CAAC,CAAC,EAAE,CAAC;IAE1B,OAAO,CAAC,MAAM,CAAwB;IAEtC,OAAO,CAAC,MAAM,CAAwB;IACtC;;OAEG;IACI,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;IAOjC;;OAEG;IACI,MAAM,CAAC,GAAG,EAAE,CAAC;IAIb,YAAY,CAAC,GAAG,EAAE,CAAC;IAM1B;;OAEG;IACI,UAAU,CAAC,GAAG,EAAE,CAAC;IAIjB,gBAAgB,CAAC,GAAG,EAAE,CAAC;IAM9B;;OAEG;IACI,SAAS;IAIhB;;OAEG;IACI,YAAY;CAGtB"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { DebugUtil } from './debug_util';
|
|
2
|
+
/**
|
|
3
|
+
* 类管理器
|
|
4
|
+
*/
|
|
5
|
+
export class ClassManager {
|
|
6
|
+
constructor() {
|
|
7
|
+
this._kvMap = new Map();
|
|
8
|
+
this._vkMap = new Map();
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* 注册类
|
|
12
|
+
*/
|
|
13
|
+
registerCls(key, val) {
|
|
14
|
+
const ctor = this._kvMap.get(key);
|
|
15
|
+
if (ctor)
|
|
16
|
+
DebugUtil.assert(false, `${String(val)}已注册,请检查`, 'wg', '2026-03-05');
|
|
17
|
+
this._kvMap.set(key, val);
|
|
18
|
+
this._vkMap.set(val, key);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* 获取类
|
|
22
|
+
*/
|
|
23
|
+
getCls(key) {
|
|
24
|
+
return this._kvMap.get(key);
|
|
25
|
+
}
|
|
26
|
+
getClsEnsure(key) {
|
|
27
|
+
const cls = this.getCls(key);
|
|
28
|
+
DebugUtil.assert(cls, `未获取到键为${String(key)}对应的类`, 'wg', '2026-03-05');
|
|
29
|
+
return cls;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 获取标识
|
|
33
|
+
*/
|
|
34
|
+
getClsName(val) {
|
|
35
|
+
return this._vkMap.get(val);
|
|
36
|
+
}
|
|
37
|
+
getClsNameEnsure(val) {
|
|
38
|
+
const name = this.getClsName(val);
|
|
39
|
+
DebugUtil.assert(name, `未获取到值为${String(val)}对应的标识`, 'wg', '2026-03-05');
|
|
40
|
+
return name;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 获取所有类
|
|
44
|
+
*/
|
|
45
|
+
getAllCls() {
|
|
46
|
+
return [...this._kvMap.values()];
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* 查看所有类个数
|
|
50
|
+
*/
|
|
51
|
+
getClsLength() {
|
|
52
|
+
return this._kvMap.size;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug_util.d.ts","sourceRoot":"","sources":["../../src/toolkit/debug_util.ts"],"names":[],"mappings":"AAAA,qBAAa,SAAS;WACJ,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC;WAQjG,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAMjF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export class DebugUtil {
|
|
2
|
+
static assert(value, message, name, time) {
|
|
3
|
+
if (!value) {
|
|
4
|
+
const showMesg = `${message}\n报告人:${name}\n报告时间:${time}\n点击确定可debug`;
|
|
5
|
+
// TODO 触发事件
|
|
6
|
+
throw new Error(showMesg);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
static warn(value, message, name, time) {
|
|
10
|
+
if (!value) {
|
|
11
|
+
const showMesg = `${message}\n报告人:${name}\n报告时间:${time}\n点击确定可debug`;
|
|
12
|
+
console.warn(showMesg);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ITransactionBase } from './i_transaction_base';
|
|
2
|
+
import { ITransactionGroup } from './i_transaction_group';
|
|
3
|
+
import { UndoRedoEntity } from './undo_redo_entity';
|
|
4
|
+
export interface ITransaction extends ITransactionBase {
|
|
5
|
+
readonly undoRedoEntity: UndoRedoEntity;
|
|
6
|
+
canUndo: boolean;
|
|
7
|
+
parent: ITransactionGroup;
|
|
8
|
+
/**
|
|
9
|
+
* 提交
|
|
10
|
+
*/
|
|
11
|
+
commit(): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* 内部数据反向并执行,Transaction特有的方法
|
|
14
|
+
*/
|
|
15
|
+
reverseAndExecute(): void;
|
|
16
|
+
/**
|
|
17
|
+
* 合并
|
|
18
|
+
*/
|
|
19
|
+
merge(another: ITransaction): this;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=i_transaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i_transaction.d.ts","sourceRoot":"","sources":["../../src/transaction/i_transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEnD,MAAM,WAAW,YAAa,SAAQ,gBAAgB;IAClD,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAA;IAEvC,OAAO,EAAE,OAAO,CAAA;IAEhB,MAAM,EAAE,iBAAiB,CAAA;IAEzB;;OAEG;IACH,MAAM,IAAI,OAAO,CAAA;IAEjB;;OAEG;IACH,iBAAiB,IAAI,IAAI,CAAA;IAEzB;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAA;CACrC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { IDocument } from '../document/i_document';
|
|
2
|
+
import { IConstructor } from '../types/type_guard';
|
|
3
|
+
import { ITransactionGroup } from './i_transaction_group';
|
|
4
|
+
export declare enum EN_TransactionStatus {
|
|
5
|
+
/**未启动*/
|
|
6
|
+
NOT_STARTED = "not-started",
|
|
7
|
+
/**已启动*/
|
|
8
|
+
STARTED = "started",
|
|
9
|
+
/**已提交*/
|
|
10
|
+
COMMITTED = "committed",
|
|
11
|
+
/**已回滚*/
|
|
12
|
+
ROLLED_BACK = "rolled_back"
|
|
13
|
+
}
|
|
14
|
+
export interface ITransactionBase {
|
|
15
|
+
name: string;
|
|
16
|
+
doc: IDocument;
|
|
17
|
+
/**
|
|
18
|
+
* 启动事务
|
|
19
|
+
*/
|
|
20
|
+
start(): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* 启动事务时获取初始化parent
|
|
23
|
+
*/
|
|
24
|
+
getStartParent(): ITransactionGroup;
|
|
25
|
+
/**
|
|
26
|
+
* 获取事务状态
|
|
27
|
+
*/
|
|
28
|
+
getStatus(): EN_TransactionStatus;
|
|
29
|
+
/**
|
|
30
|
+
* 修改状态 慎用!!!
|
|
31
|
+
*/
|
|
32
|
+
setStatus(status: EN_TransactionStatus): void;
|
|
33
|
+
/**
|
|
34
|
+
* 回滚
|
|
35
|
+
*/
|
|
36
|
+
rollBack(): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Transaction/TransactionGroup类型推断
|
|
39
|
+
*/
|
|
40
|
+
isTransactionLike<T extends ITransactionBase>(this: ITransactionBase, ctor: IConstructor<T>): this is T;
|
|
41
|
+
/**搜集占用的ID*/
|
|
42
|
+
collectUsedIds(set: Set<number>): void;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=i_transaction_base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i_transaction_base.d.ts","sourceRoot":"","sources":["../../src/transaction/i_transaction_base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAEzD,oBAAY,oBAAoB;IAC5B,QAAQ;IACR,WAAW,gBAAgB;IAC3B,QAAQ;IACR,OAAO,YAAY;IACnB,QAAQ;IACR,SAAS,cAAc;IACvB,QAAQ;IACR,WAAW,gBAAgB;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,MAAM,CAAA;IAEZ,GAAG,EAAE,SAAS,CAAA;IAEd;;OAEG;IACH,KAAK,IAAI,OAAO,CAAA;IAEhB;;OAEG;IACH,cAAc,IAAI,iBAAiB,CAAA;IAEnC;;OAEG;IACH,SAAS,IAAI,oBAAoB,CAAA;IAEjC;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAA;IAE7C;;OAEG;IACH,QAAQ,IAAI,OAAO,CAAA;IAEnB;;OAEG;IACH,iBAAiB,CAAC,CAAC,SAAS,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;IAExG,YAAY;IACZ,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAA;CACzC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export var EN_TransactionStatus;
|
|
2
|
+
(function (EN_TransactionStatus) {
|
|
3
|
+
/**未启动*/
|
|
4
|
+
EN_TransactionStatus["NOT_STARTED"] = "not-started";
|
|
5
|
+
/**已启动*/
|
|
6
|
+
EN_TransactionStatus["STARTED"] = "started";
|
|
7
|
+
/**已提交*/
|
|
8
|
+
EN_TransactionStatus["COMMITTED"] = "committed";
|
|
9
|
+
/**已回滚*/
|
|
10
|
+
EN_TransactionStatus["ROLLED_BACK"] = "rolled_back";
|
|
11
|
+
})(EN_TransactionStatus || (EN_TransactionStatus = {}));
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { ITransaction } from './i_transaction';
|
|
2
|
+
import { ITransactionBase } from './i_transaction_base';
|
|
3
|
+
export interface ITransactionGroup extends ITransactionBase {
|
|
4
|
+
/**是否为根节点*/
|
|
5
|
+
isRoot: boolean;
|
|
6
|
+
undoList: ITransactionBase[];
|
|
7
|
+
redoList: ITransactionBase[];
|
|
8
|
+
parent?: ITransactionGroup;
|
|
9
|
+
/**在本事务组内启动一个事务/事务组*/
|
|
10
|
+
startTransaction(t: ITransactionBase): void;
|
|
11
|
+
/**
|
|
12
|
+
* https://www.revitapidocs.com/2015/65b49d46-88ec-9b8d-cd92-e3d9b2392994.htm
|
|
13
|
+
* Assimilates all inner transactions by merging them into a single undo item.
|
|
14
|
+
*/
|
|
15
|
+
assimilate(): ITransaction | undefined;
|
|
16
|
+
canUndo(): boolean;
|
|
17
|
+
canRedo(): boolean;
|
|
18
|
+
undo(): boolean;
|
|
19
|
+
redo(): boolean;
|
|
20
|
+
clearRedoList(): void;
|
|
21
|
+
/**删除一个事务,一般用于删除空事务*/
|
|
22
|
+
popTransaction(t: ITransactionBase): boolean;
|
|
23
|
+
/**获取当前事务*/
|
|
24
|
+
getCurrentTransaction(): ITransaction | undefined;
|
|
25
|
+
/**获取当前事务组 状态为STARTED的*/
|
|
26
|
+
getCurrentTransactionGroup(): ITransactionGroup | undefined;
|
|
27
|
+
/**获取当前叶子节点的事务组*/
|
|
28
|
+
getLastLeafTransGroup(undoList: boolean): ITransactionGroup | undefined;
|
|
29
|
+
/**设置undo事务栈的最大长度,只针对根节点有效*/
|
|
30
|
+
setMaxUndoStackSize(size: number): void;
|
|
31
|
+
/**获取undo事务栈的最大长度*/
|
|
32
|
+
getMaxUndoStackSize(): number;
|
|
33
|
+
/**
|
|
34
|
+
* 替换尾部事务,使用场景:事务组压缩成事务
|
|
35
|
+
* @param tail 当前尾部事务/事务组
|
|
36
|
+
* @param t 替换成的事务
|
|
37
|
+
*/
|
|
38
|
+
replaceTailTransaction(tail: ITransactionBase, t: ITransaction): boolean;
|
|
39
|
+
undoWithoutRedo(ut: ITransaction): boolean;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=i_transaction_group.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i_transaction_group.d.ts","sourceRoot":"","sources":["../../src/transaction/i_transaction_group.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAEvD,MAAM,WAAW,iBAAkB,SAAQ,gBAAgB;IACvD,WAAW;IACX,MAAM,EAAE,OAAO,CAAA;IAEf,QAAQ,EAAE,gBAAgB,EAAE,CAAA;IAE5B,QAAQ,EAAE,gBAAgB,EAAE,CAAA;IAE5B,MAAM,CAAC,EAAE,iBAAiB,CAAA;IAE1B,qBAAqB;IACrB,gBAAgB,CAAC,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAA;IAE3C;;;OAGG;IACH,UAAU,IAAI,YAAY,GAAG,SAAS,CAAA;IAEtC,OAAO,IAAI,OAAO,CAAA;IAElB,OAAO,IAAI,OAAO,CAAA;IAElB,IAAI,IAAI,OAAO,CAAA;IAEf,IAAI,IAAI,OAAO,CAAA;IAEf,aAAa,IAAI,IAAI,CAAA;IAErB,qBAAqB;IACrB,cAAc,CAAC,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAA;IAE5C,WAAW;IACX,qBAAqB,IAAI,YAAY,GAAG,SAAS,CAAA;IAEjD,wBAAwB;IACxB,0BAA0B,IAAI,iBAAiB,GAAG,SAAS,CAAA;IAE3D,iBAAiB;IACjB,qBAAqB,CAAC,QAAQ,EAAE,OAAO,GAAG,iBAAiB,GAAG,SAAS,CAAA;IAEvE,4BAA4B;IAC5B,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAEvC,mBAAmB;IACnB,mBAAmB,IAAI,MAAM,CAAA;IAE7B;;;;OAIG;IACH,sBAAsB,CAAC,IAAI,EAAE,gBAAgB,EAAE,CAAC,EAAE,YAAY,GAAG,OAAO,CAAA;IAExE,eAAe,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAA;CAC7C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { IDocument } from '../document/i_document';
|
|
2
|
+
import { ITransaction } from './i_transaction';
|
|
3
|
+
import { ITransactionGroup } from './i_transaction_group';
|
|
4
|
+
import { TransactionBase } from './transaction_base';
|
|
5
|
+
import { UndoRedoEntity } from './undo_redo_entity';
|
|
6
|
+
export declare class Transaction extends TransactionBase implements ITransaction {
|
|
7
|
+
readonly undoRedoEntity: UndoRedoEntity;
|
|
8
|
+
canUndo: boolean;
|
|
9
|
+
parent: ITransactionGroup;
|
|
10
|
+
constructor(doc: IDocument, name: string);
|
|
11
|
+
start(): boolean;
|
|
12
|
+
commit(): boolean;
|
|
13
|
+
rollBack(): boolean;
|
|
14
|
+
reverseAndExecute(): void;
|
|
15
|
+
merge(another: ITransaction): this;
|
|
16
|
+
collectUsedIds(set: Set<number>): void;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=transaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../src/transaction/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,qBAAa,WAAY,SAAQ,eAAgB,YAAW,YAAY;IACpE,SAAgB,cAAc,EAAE,cAAc,CAAC;IAExC,OAAO,EAAE,OAAO,CAAQ;IAExB,MAAM,EAAG,iBAAiB,CAAC;gBAEtB,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM;IAMjC,KAAK,IAAI,OAAO;IAOhB,MAAM,IAAI,OAAO;IAQjB,QAAQ,IAAI,OAAO;IAQnB,iBAAiB,IAAI,IAAI;IAIzB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAKlC,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI;CAGhD"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { EN_TransactionStatus } from './i_transaction_base';
|
|
2
|
+
import { TransactionBase } from './transaction_base';
|
|
3
|
+
import { UndoRedoEntity } from './undo_redo_entity';
|
|
4
|
+
export class Transaction extends TransactionBase {
|
|
5
|
+
constructor(doc, name) {
|
|
6
|
+
super(doc, name);
|
|
7
|
+
this.canUndo = true;
|
|
8
|
+
this.start();
|
|
9
|
+
this.undoRedoEntity = new UndoRedoEntity(doc);
|
|
10
|
+
}
|
|
11
|
+
start() {
|
|
12
|
+
super.start();
|
|
13
|
+
this.doc.transactionMgr.getLastLeafTranGroup(true)?.clearRedoList();
|
|
14
|
+
this.parent = this.getStartParent();
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
commit() {
|
|
18
|
+
// TODO 发送事件
|
|
19
|
+
const ok = this.undoRedoEntity.commit();
|
|
20
|
+
if (!ok)
|
|
21
|
+
this.parent.popTransaction(this);
|
|
22
|
+
this._status = EN_TransactionStatus.COMMITTED;
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
rollBack() {
|
|
26
|
+
this.undoRedoEntity.rollBack();
|
|
27
|
+
this.parent.popTransaction(this);
|
|
28
|
+
super.rollBack();
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
reverseAndExecute() {
|
|
32
|
+
this.undoRedoEntity.reverseAndExecute();
|
|
33
|
+
}
|
|
34
|
+
merge(another) {
|
|
35
|
+
this.undoRedoEntity.merge(another.undoRedoEntity);
|
|
36
|
+
return this;
|
|
37
|
+
}
|
|
38
|
+
collectUsedIds(set) {
|
|
39
|
+
this.undoRedoEntity.collectUsedIds(set);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { IDocument } from '../document/i_document';
|
|
2
|
+
import { IConstructor } from '../types/type_guard';
|
|
3
|
+
import { EN_TransactionStatus, ITransactionBase } from './i_transaction_base';
|
|
4
|
+
export declare abstract class TransactionBase implements ITransactionBase {
|
|
5
|
+
name: string;
|
|
6
|
+
doc: IDocument;
|
|
7
|
+
protected _status: EN_TransactionStatus;
|
|
8
|
+
constructor(doc: IDocument, name: string);
|
|
9
|
+
abstract collectUsedIds(set: Set<number>): void;
|
|
10
|
+
start(): boolean;
|
|
11
|
+
getStartParent(): import("./i_transaction_group").ITransactionGroup;
|
|
12
|
+
getStatus(): EN_TransactionStatus;
|
|
13
|
+
setStatus(status: EN_TransactionStatus): void;
|
|
14
|
+
rollBack(): boolean;
|
|
15
|
+
isTransactionLike<T extends ITransactionBase>(this: ITransactionBase, ctor: IConstructor<T>): this is T;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=transaction_base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction_base.d.ts","sourceRoot":"","sources":["../../src/transaction/transaction_base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE9E,8BAAsB,eAAgB,YAAW,gBAAgB;IACtD,IAAI,EAAE,MAAM,CAAC;IAEb,GAAG,EAAE,SAAS,CAAC;IAEtB,SAAS,CAAC,OAAO,uBAAoC;gBAEzC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM;aAKxB,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI;IAC/C,KAAK,IAAI,OAAO;IAKhB,cAAc;IAOd,SAAS,IAAI,oBAAoB;IAIjC,SAAS,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI;IAI7C,QAAQ,IAAI,OAAO;IAKnB,iBAAiB,CAAC,CAAC,SAAS,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC;CAGjH"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { DebugUtil } from '../toolkit/debug_util';
|
|
2
|
+
import { EN_TransactionStatus } from './i_transaction_base';
|
|
3
|
+
export class TransactionBase {
|
|
4
|
+
constructor(doc, name) {
|
|
5
|
+
this._status = EN_TransactionStatus.NOT_STARTED;
|
|
6
|
+
this.name = name;
|
|
7
|
+
this.doc = doc;
|
|
8
|
+
}
|
|
9
|
+
start() {
|
|
10
|
+
this._status = EN_TransactionStatus.STARTED;
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
getStartParent() {
|
|
14
|
+
const parent = this.doc.transactionMgr.getCurrentTransactionGroup();
|
|
15
|
+
DebugUtil.assert(parent, '没有找到TransactionGroup', 'wg', '2026-03-05');
|
|
16
|
+
parent.startTransaction(this);
|
|
17
|
+
return parent;
|
|
18
|
+
}
|
|
19
|
+
getStatus() {
|
|
20
|
+
return this._status;
|
|
21
|
+
}
|
|
22
|
+
setStatus(status) {
|
|
23
|
+
this._status = status;
|
|
24
|
+
}
|
|
25
|
+
rollBack() {
|
|
26
|
+
this._status = EN_TransactionStatus.ROLLED_BACK;
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
isTransactionLike(ctor) {
|
|
30
|
+
return this instanceof ctor;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { IDocument } from '../document/i_document';
|
|
2
|
+
import { ITransaction } from './i_transaction';
|
|
3
|
+
import { ITransactionBase } from './i_transaction_base';
|
|
4
|
+
import { ITransactionGroup } from './i_transaction_group';
|
|
5
|
+
import { TransactionBase } from './transaction_base';
|
|
6
|
+
export declare class TransactionGroup extends TransactionBase implements ITransactionGroup {
|
|
7
|
+
isRoot: boolean;
|
|
8
|
+
undoList: ITransactionBase[];
|
|
9
|
+
redoList: ITransactionBase[];
|
|
10
|
+
private _maxUndoStackSize;
|
|
11
|
+
parent?: ITransactionGroup;
|
|
12
|
+
constructor(doc: IDocument, name: string, isRoot?: boolean);
|
|
13
|
+
start(): boolean;
|
|
14
|
+
startTransaction(t: ITransactionBase): void;
|
|
15
|
+
/**
|
|
16
|
+
* 事务或事务组转成事务
|
|
17
|
+
*/
|
|
18
|
+
private _toTransaction;
|
|
19
|
+
/**
|
|
20
|
+
* 事务组压缩成事务
|
|
21
|
+
*/
|
|
22
|
+
private _compressToTransaction;
|
|
23
|
+
assimilate(): ITransaction | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* 压缩成一个事务,然后undo
|
|
26
|
+
*/
|
|
27
|
+
rollBack(): boolean;
|
|
28
|
+
undoWithoutRedo(ut: ITransaction): boolean;
|
|
29
|
+
replaceTailTransaction(tail: ITransactionBase, t: ITransaction): boolean;
|
|
30
|
+
canUndo(): boolean;
|
|
31
|
+
canRedo(): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* undo数组是否为空
|
|
34
|
+
*/
|
|
35
|
+
private _undoListNotEmpty;
|
|
36
|
+
/**
|
|
37
|
+
* redo是否为空
|
|
38
|
+
*/
|
|
39
|
+
private _redoListNotEmpty;
|
|
40
|
+
undo(): boolean;
|
|
41
|
+
redo(): boolean;
|
|
42
|
+
clearRedoList(): void;
|
|
43
|
+
popTransaction(t: ITransactionBase): boolean;
|
|
44
|
+
getCurrentTransaction(): ITransaction | undefined;
|
|
45
|
+
getCurrentTransactionGroup(): ITransactionGroup | undefined;
|
|
46
|
+
getLastLeafTransGroup(undoList: boolean): ITransactionGroup | undefined;
|
|
47
|
+
setMaxUndoStackSize(size: number): void;
|
|
48
|
+
getMaxUndoStackSize(): number;
|
|
49
|
+
collectUsedIds(set: Set<number>): void;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=transaction_group.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction_group.d.ts","sourceRoot":"","sources":["../../src/transaction/transaction_group.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAwB,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,qBAAa,gBAAiB,SAAQ,eAAgB,YAAW,iBAAiB;IAS7B,MAAM;IARhD,QAAQ,EAAE,gBAAgB,EAAE,CAAM;IAElC,QAAQ,EAAE,gBAAgB,EAAE,CAAM;IAEzC,OAAO,CAAC,iBAAiB,CAAc;IAEhC,MAAM,CAAC,EAAE,iBAAiB,CAAC;gBAEtB,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAS,MAAM,UAAQ;IAMxD,KAAK;IASL,gBAAgB,CAAC,CAAC,EAAE,gBAAgB;IAgC3C;;OAEG;IACH,OAAO,CAAC,cAAc;IAKtB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA0BvB,UAAU,IAAI,YAAY,GAAG,SAAS;IAa7C;;OAEG;IACI,QAAQ,IAAI,OAAO;IAYnB,eAAe,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO;IAM1C,sBAAsB,CAAC,IAAI,EAAE,gBAAgB,EAAE,CAAC,EAAE,YAAY;IAW9D,OAAO,IAAI,OAAO;IAelB,OAAO,IAAI,OAAO;IAczB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIlB,IAAI,IAAI,OAAO;IAkBf,IAAI,IAAI,OAAO;IAiBf,aAAa,IAAI,IAAI;IAIrB,cAAc,CAAC,CAAC,EAAE,gBAAgB,GAAG,OAAO;IAK5C,qBAAqB,IAAI,YAAY,GAAG,SAAS;IAOjD,0BAA0B,IAAI,iBAAiB,GAAG,SAAS;IAa3D,qBAAqB,CAAC,QAAQ,EAAE,OAAO,GAAG,iBAAiB,GAAG,SAAS;IAiBvE,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIvC,mBAAmB,IAAI,MAAM;IAI7B,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI;CAGhD"}
|