@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.
Files changed (81) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +11 -0
  3. package/dist/document/document.d.ts +21 -0
  4. package/dist/document/document.d.ts.map +1 -0
  5. package/dist/document/document.js +53 -0
  6. package/dist/document/element_mgr.d.ts +11 -0
  7. package/dist/document/element_mgr.d.ts.map +1 -0
  8. package/dist/document/element_mgr.js +27 -0
  9. package/dist/document/i_document.d.ts +19 -0
  10. package/dist/document/i_document.d.ts.map +1 -0
  11. package/dist/document/i_document.js +1 -0
  12. package/dist/document/id_pool.d.ts +20 -0
  13. package/dist/document/id_pool.d.ts.map +1 -0
  14. package/dist/document/id_pool.js +67 -0
  15. package/dist/element/c_element.d.ts +6 -0
  16. package/dist/element/c_element.d.ts.map +1 -0
  17. package/dist/element/c_element.js +6 -0
  18. package/dist/element/element.d.ts +42 -0
  19. package/dist/element/element.d.ts.map +1 -0
  20. package/dist/element/element.js +72 -0
  21. package/dist/element/element_decorator.d.ts +3 -0
  22. package/dist/element/element_decorator.d.ts.map +1 -0
  23. package/dist/element/element_decorator.js +40 -0
  24. package/dist/element/element_id.d.ts +14 -0
  25. package/dist/element/element_id.d.ts.map +1 -0
  26. package/dist/element/element_id.js +30 -0
  27. package/dist/element/i_element.d.ts +30 -0
  28. package/dist/element/i_element.d.ts.map +1 -0
  29. package/dist/element/i_element.js +1 -0
  30. package/dist/index.d.ts +12 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +8 -0
  33. package/dist/request/i_request.d.ts +8 -0
  34. package/dist/request/i_request.d.ts.map +1 -0
  35. package/dist/request/i_request.js +1 -0
  36. package/dist/request/request.d.ts +12 -0
  37. package/dist/request/request.d.ts.map +1 -0
  38. package/dist/request/request.js +11 -0
  39. package/dist/request/request_decorator.d.ts +8 -0
  40. package/dist/request/request_decorator.d.ts.map +1 -0
  41. package/dist/request/request_decorator.js +10 -0
  42. package/dist/request/request_mgr.d.ts +42 -0
  43. package/dist/request/request_mgr.d.ts.map +1 -0
  44. package/dist/request/request_mgr.js +77 -0
  45. package/dist/toolkit/class_manager.d.ts +30 -0
  46. package/dist/toolkit/class_manager.d.ts.map +1 -0
  47. package/dist/toolkit/class_manager.js +54 -0
  48. package/dist/toolkit/debug_util.d.ts +5 -0
  49. package/dist/toolkit/debug_util.d.ts.map +1 -0
  50. package/dist/toolkit/debug_util.js +15 -0
  51. package/dist/transaction/i_transaction.d.ts +21 -0
  52. package/dist/transaction/i_transaction.d.ts.map +1 -0
  53. package/dist/transaction/i_transaction.js +1 -0
  54. package/dist/transaction/i_transaction_base.d.ts +44 -0
  55. package/dist/transaction/i_transaction_base.d.ts.map +1 -0
  56. package/dist/transaction/i_transaction_base.js +11 -0
  57. package/dist/transaction/i_transaction_group.d.ts +41 -0
  58. package/dist/transaction/i_transaction_group.d.ts.map +1 -0
  59. package/dist/transaction/i_transaction_group.js +1 -0
  60. package/dist/transaction/transaction.d.ts +18 -0
  61. package/dist/transaction/transaction.d.ts.map +1 -0
  62. package/dist/transaction/transaction.js +41 -0
  63. package/dist/transaction/transaction_base.d.ts +17 -0
  64. package/dist/transaction/transaction_base.d.ts.map +1 -0
  65. package/dist/transaction/transaction_base.js +32 -0
  66. package/dist/transaction/transaction_group.d.ts +51 -0
  67. package/dist/transaction/transaction_group.d.ts.map +1 -0
  68. package/dist/transaction/transaction_group.js +242 -0
  69. package/dist/transaction/transaction_mgr.d.ts +54 -0
  70. package/dist/transaction/transaction_mgr.d.ts.map +1 -0
  71. package/dist/transaction/transaction_mgr.js +84 -0
  72. package/dist/transaction/undo_redo_entity.d.ts +71 -0
  73. package/dist/transaction/undo_redo_entity.d.ts.map +1 -0
  74. package/dist/transaction/undo_redo_entity.js +261 -0
  75. package/dist/types/dump_type.d.ts +4 -0
  76. package/dist/types/dump_type.d.ts.map +1 -0
  77. package/dist/types/dump_type.js +1 -0
  78. package/dist/types/type_guard.d.ts +5 -0
  79. package/dist/types/type_guard.d.ts.map +1 -0
  80. package/dist/types/type_guard.js +1 -0
  81. package/package.json +30 -0
@@ -0,0 +1,10 @@
1
+ import { requestMgr } from './request_mgr';
2
+ /**
3
+ * 请求注册装饰器
4
+ * @param requestId 请求id
5
+ */
6
+ export function registerRequest(requestId) {
7
+ return (ctor) => {
8
+ requestMgr.registerRequest(requestId, ctor);
9
+ };
10
+ }
@@ -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,5 @@
1
+ export declare class DebugUtil {
2
+ static assert<T>(value: T, message: string, name: string, time: string): asserts value is NonNullable<T>;
3
+ static warn(value: boolean, message: string, name: string, time: string): void;
4
+ }
5
+ //# sourceMappingURL=debug_util.d.ts.map
@@ -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"}