@fgbg/mdocs 0.6.1 → 0.6.5

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 (130) hide show
  1. package/dist/server/access/access-control.js +23 -8
  2. package/dist/server/access/access-control.js.map +1 -1
  3. package/dist/server/access/access-control.test.js +66 -0
  4. package/dist/server/access/access-control.test.js.map +1 -1
  5. package/dist/server/app.js +27 -0
  6. package/dist/server/app.js.map +1 -1
  7. package/dist/server/cli/main.js +50 -10
  8. package/dist/server/cli/main.js.map +1 -1
  9. package/dist/server/db/repositories/bookmark.repo.js +68 -0
  10. package/dist/server/db/repositories/bookmark.repo.js.map +1 -0
  11. package/dist/server/db/repositories/document-comment.repo.js +104 -0
  12. package/dist/server/db/repositories/document-comment.repo.js.map +1 -0
  13. package/dist/server/db/repositories/document.repo.js +14 -0
  14. package/dist/server/db/repositories/document.repo.js.map +1 -1
  15. package/dist/server/db/repositories/visitor.repo.js +19 -4
  16. package/dist/server/db/repositories/visitor.repo.js.map +1 -1
  17. package/dist/server/db/schema.js +24 -1
  18. package/dist/server/db/schema.js.map +1 -1
  19. package/dist/server/documents/document-comment.service.js +58 -0
  20. package/dist/server/documents/document-comment.service.js.map +1 -0
  21. package/dist/server/documents/document-comment.service.test.js +283 -0
  22. package/dist/server/documents/document-comment.service.test.js.map +1 -0
  23. package/dist/server/documents/document.service.js +78 -2
  24. package/dist/server/documents/document.service.js.map +1 -1
  25. package/dist/server/documents/tree-and-folders.test.js +81 -2
  26. package/dist/server/documents/tree-and-folders.test.js.map +1 -1
  27. package/dist/server/documents/tree.service.js +16 -4
  28. package/dist/server/documents/tree.service.js.map +1 -1
  29. package/dist/server/identity/auth.middleware.js +6 -1
  30. package/dist/server/identity/auth.middleware.js.map +1 -1
  31. package/dist/server/identity/visitor.service.js +13 -7
  32. package/dist/server/identity/visitor.service.js.map +1 -1
  33. package/dist/server/identity/visitor.service.test.js +4 -3
  34. package/dist/server/identity/visitor.service.test.js.map +1 -1
  35. package/dist/server/routes/bookmarks.routes.js +108 -0
  36. package/dist/server/routes/bookmarks.routes.js.map +1 -0
  37. package/dist/server/routes/document-comments.routes.js +47 -0
  38. package/dist/server/routes/document-comments.routes.js.map +1 -0
  39. package/dist/server/routes/documents.routes.js +26 -2
  40. package/dist/server/routes/documents.routes.js.map +1 -1
  41. package/dist/server/routes/visitors.routes.js +22 -2
  42. package/dist/server/routes/visitors.routes.js.map +1 -1
  43. package/dist/server/search/document-index-manager.js +14 -8
  44. package/dist/server/search/document-index-manager.js.map +1 -1
  45. package/dist/shared/permissions.js +29 -0
  46. package/dist/shared/permissions.js.map +1 -0
  47. package/dist/web/assets/_baseUniq-GvNMhSGA.js +1 -0
  48. package/dist/web/assets/arc-DB-MBQ_7.js +1 -0
  49. package/dist/web/assets/architectureDiagram-Q4EWVU46-B6fIJCqj.js +36 -0
  50. package/dist/web/assets/{blockDiagram-DXYQGD6D-B_xmfn8A.js → blockDiagram-DXYQGD6D-U0T3XkPP.js} +2 -2
  51. package/dist/web/assets/{c4Diagram-AHTNJAMY-mzXC4HGz.js → c4Diagram-AHTNJAMY-_ik3C_bT.js} +2 -2
  52. package/dist/web/assets/channel-CptILkTi.js +1 -0
  53. package/dist/web/assets/chunk-4BX2VUAB-C-KFRd1D.js +1 -0
  54. package/dist/web/assets/{chunk-4TB4RGXK-CHrqLnxu.js → chunk-4TB4RGXK-B5h_MoAS.js} +1 -1
  55. package/dist/web/assets/chunk-55IACEB6-Dq50eCA0.js +1 -0
  56. package/dist/web/assets/chunk-EDXVE4YY-D5er4rHs.js +1 -0
  57. package/dist/web/assets/{chunk-FMBD7UC4-CqM95lCi.js → chunk-FMBD7UC4-AqKqMyp7.js} +1 -1
  58. package/dist/web/assets/{chunk-OYMX7WX6-B4xt0fDi.js → chunk-OYMX7WX6-ClN2hoBH.js} +1 -1
  59. package/dist/web/assets/chunk-QZHKN3VN-CCl-uS54.js +1 -0
  60. package/dist/web/assets/chunk-YZCP3GAM-Cz4KL9JQ.js +1 -0
  61. package/dist/web/assets/classDiagram-6PBFFD2Q-wee7frTV.js +1 -0
  62. package/dist/web/assets/classDiagram-v2-HSJHXN6E-wee7frTV.js +1 -0
  63. package/dist/web/assets/clone-CE7ZzRl-.js +1 -0
  64. package/dist/web/assets/cose-bilkent-S5V4N54A-DCqKkloN.js +1 -0
  65. package/dist/web/assets/dagre-KV5264BT-CBrTGiwg.js +4 -0
  66. package/dist/web/assets/diagram-5BDNPKRD-VICEQzUR.js +10 -0
  67. package/dist/web/assets/diagram-G4DWMVQ6-DaoEItNN.js +24 -0
  68. package/dist/web/assets/diagram-MMDJMWI5-DvvqKBgR.js +43 -0
  69. package/dist/web/assets/diagram-TYMM5635-b8KlP0s4.js +24 -0
  70. package/dist/web/assets/{erDiagram-SMLLAGMA-BRhKGp7p.js → erDiagram-SMLLAGMA-Bg3JFEyu.js} +2 -2
  71. package/dist/web/assets/{flowDiagram-DWJPFMVM-CVXEyDGV.js → flowDiagram-DWJPFMVM-BYeJ-7SE.js} +2 -2
  72. package/dist/web/assets/ganttDiagram-T4ZO3ILL-CGgDK6Uk.js +292 -0
  73. package/dist/web/assets/gitGraphDiagram-UUTBAWPF-BfS-vmec.js +106 -0
  74. package/dist/web/assets/graph-DnoW4mMs.js +1 -0
  75. package/dist/web/assets/index-BqmdUIYA.css +1 -0
  76. package/dist/web/assets/index-C-wD6L-6.js +5749 -0
  77. package/dist/web/assets/infoDiagram-42DDH7IO-BhblG3CD.js +2 -0
  78. package/dist/web/assets/{ishikawaDiagram-UXIWVN3A-CBGPMeRX.js → ishikawaDiagram-UXIWVN3A-7Tfh-5tN.js} +5 -5
  79. package/dist/web/assets/{journeyDiagram-VCZTEJTY-BojXYLpZ.js → journeyDiagram-VCZTEJTY-CD9_KODe.js} +2 -2
  80. package/dist/web/assets/{kanban-definition-6JOO6SKY-COB1p8N4.js → kanban-definition-6JOO6SKY-7FYoOrz1.js} +2 -2
  81. package/dist/web/assets/layout-CgpZb7aT.js +1 -0
  82. package/dist/web/assets/linear-DXlSVFPI.js +1 -0
  83. package/dist/web/assets/min-CbvyKZdW.js +1 -0
  84. package/dist/web/assets/{mindmap-definition-QFDTVHPH-WuIIFDk0.js → mindmap-definition-QFDTVHPH-D_7IpwOr.js} +2 -2
  85. package/dist/web/assets/{pieDiagram-DEJITSTG-0yTTbTnK.js → pieDiagram-DEJITSTG-C4oHxK29.js} +2 -2
  86. package/dist/web/assets/{quadrantDiagram-34T5L4WZ-BVGxiAic.js → quadrantDiagram-34T5L4WZ-qaARXrbR.js} +2 -2
  87. package/dist/web/assets/{requirementDiagram-MS252O5E-DxoKkLjF.js → requirementDiagram-MS252O5E-B0OnR3WQ.js} +2 -2
  88. package/dist/web/assets/sankeyDiagram-XADWPNL6-CgrqxXXq.js +10 -0
  89. package/dist/web/assets/{sequenceDiagram-FGHM5R23-qQBtlmdr.js → sequenceDiagram-FGHM5R23-ieRKRAqs.js} +2 -2
  90. package/dist/web/assets/stateDiagram-FHFEXIEX-ju-e_AqR.js +1 -0
  91. package/dist/web/assets/stateDiagram-v2-QKLJ7IA2-Clz1rvlo.js +1 -0
  92. package/dist/web/assets/{timeline-definition-GMOUNBTQ-DMZNkVLR.js → timeline-definition-GMOUNBTQ-DtcIDFGX.js} +2 -2
  93. package/dist/web/assets/{vennDiagram-DHZGUBPP-dqHjP-hQ.js → vennDiagram-DHZGUBPP-DG2V75Il.js} +2 -2
  94. package/dist/web/assets/wardley-RL74JXVD-CI6hl6LN.js +162 -0
  95. package/dist/web/assets/{wardleyDiagram-NUSXRM2D-Be4N5UZh.js → wardleyDiagram-NUSXRM2D-CUGNCU53.js} +2 -2
  96. package/dist/web/assets/{xychartDiagram-5P7HB3ND-CqeRqtaT.js → xychartDiagram-5P7HB3ND-SxZFqO2V.js} +2 -2
  97. package/dist/web/index.html +2 -2
  98. package/package.json +4 -2
  99. package/dist/web/assets/_baseUniq-mbOGdjgO.js +0 -1
  100. package/dist/web/assets/arc-D-WSUdNG.js +0 -1
  101. package/dist/web/assets/architectureDiagram-Q4EWVU46-0jRUx91A.js +0 -36
  102. package/dist/web/assets/channel-C5iQ1-e2.js +0 -1
  103. package/dist/web/assets/chunk-4BX2VUAB-Bn7yoqIc.js +0 -1
  104. package/dist/web/assets/chunk-55IACEB6-D9CzRsCu.js +0 -1
  105. package/dist/web/assets/chunk-EDXVE4YY-DUGGXqt0.js +0 -1
  106. package/dist/web/assets/chunk-QZHKN3VN-CB4tazF4.js +0 -1
  107. package/dist/web/assets/chunk-YZCP3GAM-CJdC-SLE.js +0 -1
  108. package/dist/web/assets/classDiagram-6PBFFD2Q-3PggZSgZ.js +0 -1
  109. package/dist/web/assets/classDiagram-v2-HSJHXN6E-3PggZSgZ.js +0 -1
  110. package/dist/web/assets/clone-BRenlKxE.js +0 -1
  111. package/dist/web/assets/cose-bilkent-S5V4N54A-CNME-K3v.js +0 -1
  112. package/dist/web/assets/dagre-KV5264BT-BiWVn1mI.js +0 -4
  113. package/dist/web/assets/diagram-5BDNPKRD-DOah-MqT.js +0 -10
  114. package/dist/web/assets/diagram-G4DWMVQ6-U2XDwT09.js +0 -24
  115. package/dist/web/assets/diagram-MMDJMWI5-CVDLI2Md.js +0 -43
  116. package/dist/web/assets/diagram-TYMM5635-DYVPY1ys.js +0 -24
  117. package/dist/web/assets/ganttDiagram-T4ZO3ILL-CbymDUCg.js +0 -292
  118. package/dist/web/assets/gitGraphDiagram-UUTBAWPF-BKDun02F.js +0 -106
  119. package/dist/web/assets/graph-BXEbNgSu.js +0 -1
  120. package/dist/web/assets/index-DYHwr9jx.css +0 -1
  121. package/dist/web/assets/index-a4S5-Ob1.js +0 -5315
  122. package/dist/web/assets/infoDiagram-42DDH7IO-Dn0tTehG.js +0 -2
  123. package/dist/web/assets/layout-ZFfRWIoj.js +0 -1
  124. package/dist/web/assets/linear-2a3E1vTB.js +0 -1
  125. package/dist/web/assets/mermaid.core-DBH2e0Kt.js +0 -309
  126. package/dist/web/assets/min-CXNTeEK6.js +0 -1
  127. package/dist/web/assets/sankeyDiagram-XADWPNL6-UpSdvRJr.js +0 -10
  128. package/dist/web/assets/stateDiagram-FHFEXIEX-nBMIkJdm.js +0 -1
  129. package/dist/web/assets/stateDiagram-v2-QKLJ7IA2-DD5wjWd9.js +0 -1
  130. package/dist/web/assets/wardley-RL74JXVD-D8TklWsQ.js +0 -162
@@ -64,6 +64,15 @@ export function validateDomainPermission(domainPermission, docPermission) {
64
64
  const allowed = DOMAIN_ALLOWED_PERMISSIONS[domainPermission];
65
65
  return allowed ? allowed.includes(docPermission) : false;
66
66
  }
67
+ /**
68
+ * 获取域权限上下文(供 bookmarks 等模块使用)。
69
+ */
70
+ export function getDomainInfo(db, domainId, visitorId) {
71
+ const domain = findDomainById(db, domainId);
72
+ const domainPermission = domain?.permission ?? "public";
73
+ const isDomainMember = !!(visitorId && domain && checkDomainMember(db, domain.domain_id, visitorId));
74
+ return { domainPermission, isDomainMember };
75
+ }
67
76
  // ============================================================
68
77
  // 读权限
69
78
  // ============================================================
@@ -133,20 +142,26 @@ export function canEditDocument(row, visitorId, domainInfo) {
133
142
  }
134
143
  // private 域:按五档实际语义
135
144
  if (row.permission === Permission.PRIVATE) {
136
- // 仅创建者可写
137
- return false;
145
+ // 仅创建者可写,或靠 invite
146
+ const invite = findDocumentInvite(getDb(), row.document_id, visitorId);
147
+ return invite?.permission === "edit";
138
148
  }
139
149
  if (row.permission === Permission.DOMAIN_READ) {
140
- // domain_read:仅创建者可写(已在第 1 步排除了)
141
- return false;
150
+ // domain_read:仅创建者可写,或靠 invite
151
+ const invite = findDocumentInvite(getDb(), row.document_id, visitorId);
152
+ return invite?.permission === "edit";
142
153
  }
143
154
  if (row.permission === Permission.DOMAIN_WRITE) {
144
- // domain_write:域成员可写,但 private 域只有创建者一名成员
145
- return false;
155
+ // domain_write:域成员可写,或靠 invite
156
+ if (domainInfo.isDomainMember)
157
+ return true;
158
+ const invite = findDocumentInvite(getDb(), row.document_id, visitorId);
159
+ return invite?.permission === "edit";
146
160
  }
147
161
  if (row.permission === Permission.PUBLIC_READ) {
148
- // public_read:仅创建者可写
149
- return false;
162
+ // public_read:仅创建者可写,或靠 invite
163
+ const invite = findDocumentInvite(getDb(), row.document_id, visitorId);
164
+ return invite?.permission === "edit";
150
165
  }
151
166
  // public_write:任何人可写
152
167
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"access-control.js","sourceRoot":"","sources":["../../../src/server/access/access-control.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"access-control.js","sourceRoot":"","sources":["../../../src/server/access/access-control.ts"],"names":[],"mappings":"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"}
@@ -53,6 +53,72 @@ function seedDocInDomain(options) {
53
53
  }
54
54
  return domainId;
55
55
  }
56
+ /** 插入一条文档邀请 */
57
+ function seedInvite(docId, visitorId, permission = "read") {
58
+ const db = testDbRef.db;
59
+ db.prepare(`INSERT INTO document_invites (document_id, visitor_id, permission) VALUES (?, ?, ?)`).run(docId, visitorId, permission);
60
+ }
61
+ // ============================================================
62
+ // invite 权限(新增)
63
+ // ============================================================
64
+ describe("document invite — read", () => {
65
+ it("private 域:被 invite read 的非创建者可读", () => {
66
+ seedDocInDomain({ domainPermission: "private", docPermission: Permission.PRIVATE, docId: "invite-doc" });
67
+ seedInvite("invite-doc", OTHER, "read");
68
+ expect(() => assertDocumentAccess("invite-doc", OTHER, "read")).not.toThrow();
69
+ });
70
+ it("restricted 域:非成员被 invite read 可读", () => {
71
+ seedDocInDomain({ domainPermission: "restricted", docPermission: Permission.DOMAIN_READ, docId: "invite-doc2" });
72
+ seedInvite("invite-doc2", OTHER, "read");
73
+ expect(() => assertDocumentAccess("invite-doc2", OTHER, "read")).not.toThrow();
74
+ });
75
+ });
76
+ describe("document invite — edit", () => {
77
+ it("private 域:被 invite edit 的非创建者可编辑", () => {
78
+ seedDocInDomain({ domainPermission: "private", docPermission: Permission.PRIVATE, docId: "edit-doc" });
79
+ seedInvite("edit-doc", OTHER, "edit");
80
+ expect(() => assertDocumentAccess("edit-doc", OTHER, "edit")).not.toThrow();
81
+ });
82
+ it("private 域:被 invite read 的非创建者不可编辑(403)", () => {
83
+ seedDocInDomain({ domainPermission: "private", docPermission: Permission.PRIVATE, docId: "edit-doc2" });
84
+ seedInvite("edit-doc2", OTHER, "read");
85
+ expect(() => assertDocumentAccess("edit-doc2", OTHER, "edit")).toThrow(DocumentError);
86
+ });
87
+ it("restricted 域:被 invite edit 的非成员可编辑", () => {
88
+ seedDocInDomain({ domainPermission: "restricted", docPermission: Permission.DOMAIN_READ, docId: "edit-doc3" });
89
+ seedInvite("edit-doc3", OTHER, "edit");
90
+ expect(() => assertDocumentAccess("edit-doc3", OTHER, "edit")).not.toThrow();
91
+ });
92
+ it("restricted 域:被 invite read 的非成员不可编辑(403)", () => {
93
+ seedDocInDomain({ domainPermission: "restricted", docPermission: Permission.DOMAIN_READ, docId: "edit-doc4" });
94
+ seedInvite("edit-doc4", OTHER, "read");
95
+ expect(() => assertDocumentAccess("edit-doc4", OTHER, "edit")).toThrow(DocumentError);
96
+ });
97
+ it("private 域 + domain_read:被 invite edit 的非创建者可编辑", () => {
98
+ seedDocInDomain({ domainPermission: "private", docPermission: Permission.DOMAIN_READ, docId: "edit-doc5" });
99
+ seedInvite("edit-doc5", OTHER, "edit");
100
+ expect(() => assertDocumentAccess("edit-doc5", OTHER, "edit")).not.toThrow();
101
+ });
102
+ it("private 域 + public_read:被 invite edit 的非创建者可编辑", () => {
103
+ seedDocInDomain({ domainPermission: "private", docPermission: Permission.PUBLIC_READ, docId: "edit-doc6" });
104
+ seedInvite("edit-doc6", OTHER, "edit");
105
+ expect(() => assertDocumentAccess("edit-doc6", OTHER, "edit")).not.toThrow();
106
+ });
107
+ it("private 域 + domain_write:域成员可编辑,无需 invite", () => {
108
+ seedDocInDomain({
109
+ domainPermission: "private",
110
+ docPermission: Permission.DOMAIN_WRITE,
111
+ docId: "edit-doc7",
112
+ memberIds: [OTHER],
113
+ });
114
+ expect(() => assertDocumentAccess("edit-doc7", OTHER, "edit")).not.toThrow();
115
+ });
116
+ it("private 域 + domain_write:非域成员被 invite edit 可编辑", () => {
117
+ seedDocInDomain({ domainPermission: "private", docPermission: Permission.DOMAIN_WRITE, docId: "edit-doc8" });
118
+ seedInvite("edit-doc8", OTHER, "edit");
119
+ expect(() => assertDocumentAccess("edit-doc8", OTHER, "edit")).not.toThrow();
120
+ });
121
+ });
56
122
  // ============================================================
57
123
  // validateDomainPermission
58
124
  // ============================================================
@@ -1 +1 @@
1
- {"version":3,"file":"access-control.test.js","sourceRoot":"","sources":["../../../src/server/access/access-control.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"access-control.test.js","sourceRoot":"","sources":["../../../src/server/access/access-control.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACxE,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,sBAAsB;AAEtB,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAgC,EAAE,CAAC,CAAC,CAAC;AAE/E,EAAE,CAAC,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;IACpC,KAAK,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE;CAC1B,CAAC,CAAC,CAAC;AAEJ,OAAO,EACL,UAAU,EACV,wBAAwB,EACxB,oBAAoB,EACpB,aAAa,GACd,MAAM,qBAAqB,CAAC;AAI7B,gBAAgB;AAEhB,SAAS,CAAC,GAAG,EAAE;IACb,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC;IACpC,WAAW,CAAC,EAAE,CAAC,CAAC;IAChB,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC;AACpB,CAAC,CAAC,CAAC;AAEH,SAAS,CAAC,GAAG,EAAE;IACb,MAAM,EAAE,GAAG,SAAS,CAAC,EAAG,CAAC;IACzB,EAAE,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IACtC,EAAE,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACjC,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAC/B,EAAE,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;AAC1C,CAAC,CAAC,CAAC;AAEH,gBAAgB;AAEhB,MAAM,KAAK,GAAG,SAAS,CAAC;AACxB,MAAM,KAAK,GAAG,SAAS,CAAC;AAExB,mCAAmC;AACnC,SAAS,eAAe,CAAC,OAOxB;IACC,MAAM,EAAE,GAAG,SAAS,CAAC,EAAG,CAAC;IACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,aAAa,CAAC;IACnD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC;IAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;IACzC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,MAAM;IACN,EAAE,CAAC,OAAO,CACR;+BAC2B,CAC5B,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEpE,OAAO;IACP,EAAE,CAAC,OAAO,CACR;;;8CAG0C,CAC3C,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAE7G,QAAQ;IACR,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACpC,EAAE,CAAC,OAAO,CACR,0FAA0F,CAC3F,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,eAAe;AACf,SAAS,UAAU,CAAC,KAAa,EAAE,SAAiB,EAAE,aAA8B,MAAM;IACxF,MAAM,EAAE,GAAG,SAAS,CAAC,EAAG,CAAC;IACzB,EAAE,CAAC,OAAO,CACR,qFAAqF,CACtF,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AACtC,CAAC;AAED,+DAA+D;AAC/D,iBAAiB;AACjB,+DAA+D;AAE/D,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,eAAe,CAAC,EAAE,gBAAgB,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;QACzG,UAAU,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,eAAe,CAAC,EAAE,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,CAAC,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;QACjH,UAAU,CAAC,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACzC,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IACjF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,eAAe,CAAC,EAAE,gBAAgB,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QACvG,UAAU,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,eAAe,CAAC,EAAE,gBAAgB,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QACxG,UAAU,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACvC,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,eAAe,CAAC,EAAE,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,CAAC,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QAC/G,UAAU,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACvC,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,eAAe,CAAC,EAAE,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,CAAC,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QAC/G,UAAU,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACvC,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,eAAe,CAAC,EAAE,gBAAgB,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,CAAC,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QAC5G,UAAU,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACvC,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,eAAe,CAAC,EAAE,gBAAgB,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,CAAC,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QAC5G,UAAU,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACvC,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,eAAe,CAAC;YACd,gBAAgB,EAAE,SAAS;YAC3B,aAAa,EAAE,UAAU,CAAC,YAAY;YACtC,KAAK,EAAE,WAAW;YAClB,SAAS,EAAE,CAAC,KAAK,CAAC;SACnB,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,eAAe,CAAC,EAAE,gBAAgB,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,CAAC,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QAC7G,UAAU,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACvC,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAC/E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,+DAA+D;AAC/D,4BAA4B;AAC5B,+DAA+D;AAE/D,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACxB,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,CAAC,wBAAwB,CAAC,QAAQ,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9E,MAAM,CAAC,wBAAwB,CAAC,QAAQ,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,MAAM,CAAC,wBAAwB,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3E,MAAM,CAAC,wBAAwB,CAAC,QAAQ,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/E,MAAM,CAAC,wBAAwB,CAAC,QAAQ,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,CAAC,wBAAwB,CAAC,YAAY,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClF,MAAM,CAAC,wBAAwB,CAAC,YAAY,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,MAAM,CAAC,wBAAwB,CAAC,YAAY,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/E,MAAM,CAAC,wBAAwB,CAAC,YAAY,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnF,MAAM,CAAC,wBAAwB,CAAC,YAAY,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YACrB,MAAM,CAAC,wBAAwB,CAAC,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3E,MAAM,CAAC,wBAAwB,CAAC,SAAS,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/E,MAAM,CAAC,wBAAwB,CAAC,SAAS,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChF,MAAM,CAAC,wBAAwB,CAAC,SAAS,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/E,MAAM,CAAC,wBAAwB,CAAC,SAAS,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;QACvB,MAAM,CAAC,wBAAwB,CAAC,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5E,MAAM,CAAC,wBAAwB,CAAC,EAAE,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,+DAA+D;AAC/D,wBAAwB;AACxB,+DAA+D;AAE/D,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,cAAc;IAEd,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;QACrB,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACxF,IAAI,CAAC;YACH,oBAAoB,CAAC,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAE,CAAmB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,WAAW;IAEX,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE;QAClB,eAAe,CAAC,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;QACvF,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;QACzB,eAAe,CAAC,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;QACvF,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACvF,IAAI,CAAC;YACH,oBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAE,CAAmB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,kBAAkB;IAElB,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,eAAe,CAAC,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;QACvF,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,eAAe,CAAC,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;QACxF,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,kBAAkB;IAElB,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,eAAe,CAAC,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;QACxF,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,eAAe,CAAC,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;QACvF,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACrF,IAAI,CAAC;YACH,oBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAE,CAAmB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,sBAAsB;IAEtB,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,eAAe,CAAC,EAAE,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,CAAC,YAAY,EAAE,SAAS,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChH,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,eAAe,CAAC,EAAE,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;QAC3F,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACrF,IAAI,CAAC;YACH,oBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAE,CAAmB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,sBAAsB;IAEtB,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,eAAe,CAAC,EAAE,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,CAAC,YAAY,EAAE,SAAS,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChH,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,eAAe,CAAC,EAAE,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/G,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;IAEH,kBAAkB;IAElB,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,eAAe,CAAC,EAAE,gBAAgB,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;QACpF,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,eAAe,CAAC,EAAE,gBAAgB,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;QACzF,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,eAAe,CAAC,EAAE,gBAAgB,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;QACxF,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,eAAe,CAAC,EAAE,gBAAgB,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;QACzF,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,eAAe;IAEf,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,eAAe,CAAC,EAAE,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;QAC3F,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAC5E,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAC9E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import fs from "node:fs";
2
2
  import path from "node:path";
3
3
  import express from "express";
4
+ import cookieParser from "cookie-parser";
4
5
  import { getConfig } from "./config/index.js";
5
6
  import { getDb } from "./db/connection.js";
6
7
  import { authMiddleware } from "./identity/auth.middleware.js";
@@ -11,6 +12,8 @@ import { buildDomainsRouter } from "./routes/domains.routes.js";
11
12
  import { buildDomainMemberTemplatesRouter } from "./routes/domain-member-templates.routes.js";
12
13
  import { buildFoldersRouter } from "./routes/folders.routes.js";
13
14
  import { buildCliTokensRouter } from "./routes/cli-tokens.routes.js";
15
+ import { buildBookmarksRouter } from "./routes/bookmarks.routes.js";
16
+ import { documentCommentsRouter } from "./routes/document-comments.routes.js";
14
17
  import { buildAssetsUploadRouter, serveAssetFile } from "./routes/assets.routes.js";
15
18
  import { startIndexTimer } from "./search/document-index-manager.js";
16
19
  import { useLogger } from "./logger/logger.js";
@@ -28,6 +31,7 @@ export function buildApp() {
28
31
  const app = express();
29
32
  app.disable("x-powered-by");
30
33
  app.use(express.json({ limit: "32mb" }));
34
+ app.use(cookieParser());
31
35
  // 健康检查端点,无需认证
32
36
  app.get("/api/health", (_req, res) => {
33
37
  res.json({ data: { status: "ok" } });
@@ -36,6 +40,26 @@ export function buildApp() {
36
40
  app.get("/api/assets/:assetId", (req, res) => {
37
41
  serveAssetFile(req, res);
38
42
  });
43
+ // 获取评论列表:无需认证(能读文档就能看评论)
44
+ app.get("/api/documents/:documentId/comments", async (req, res) => {
45
+ const { documentId } = req.params;
46
+ if (!documentId) {
47
+ return res.status(400).json({ error: "缺少 documentId" });
48
+ }
49
+ try {
50
+ const { documentCommentService } = await import("./documents/document-comment.service.js");
51
+ const comments = await documentCommentService.getCommentsByDocumentId(documentId);
52
+ res.json({
53
+ data: {
54
+ comments,
55
+ total: comments.filter((c) => !c.isDeleted).length,
56
+ },
57
+ });
58
+ }
59
+ catch (err) {
60
+ res.status(400).json({ error: err.message });
61
+ }
62
+ });
39
63
  // 后续 /api 路由均需经过身份认证
40
64
  app.use("/api", authMiddleware);
41
65
  app.use("/api/assets", buildAssetsUploadRouter());
@@ -46,6 +70,9 @@ export function buildApp() {
46
70
  app.use("/api/domain-member-templates", buildDomainMemberTemplatesRouter());
47
71
  app.use("/api/folders", buildFoldersRouter());
48
72
  app.use("/api/cli", buildCliTokensRouter());
73
+ app.use("/api/bookmarks", buildBookmarksRouter());
74
+ // 发表/删除评论:需要认证
75
+ app.use("/api/documents", documentCommentsRouter);
49
76
  // 兜底:未匹配到的 API 路径返回 404
50
77
  app.use("/api", (_req, res) => {
51
78
  res.status(404).json({ error: { code: "NOT_FOUND", message: "api not found" } });
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/server/app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/server/app.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  import { buildApp } from "../app.js";
2
2
  import { getConfig } from "../config/index.js";
3
+ import { getDb } from "../db/connection.js";
4
+ import { findVisitorById, findVisitorByName, } from "../db/repositories/visitor.repo.js";
3
5
  import { listAllVisitors } from "../identity/visitor.service.js";
4
6
  import { migrateVisitor, MigrationError, } from "../migrations/visitor-migration.service.js";
5
7
  /** 解析命令行参数,将 `--key value` 或 `--flag` 形式转为键值对象。 */
@@ -28,11 +30,13 @@ function printUsage() {
28
30
  "mdocs CLI",
29
31
  "",
30
32
  "Usage:",
31
- " mdocs visitor list",
33
+ " mdocs visitor list [--active|--disabled|--all]",
32
34
  " mdocs visitor migrate --from OLD --to NEW [--dry-run] [--confirm]",
33
35
  "",
34
36
  "Notes:",
35
- " Either --dry-run or --confirm must be supplied for migrate.",
37
+ " visitor list defaults to --active (only enabled visitors).",
38
+ " For migrate, OLD/NEW can be either visitor ID (UUID) or visitor name.",
39
+ " Either --dry-run or --confirm must be supplied.",
36
40
  " --confirm performs the migration inside a transaction and makes a backup first.",
37
41
  "",
38
42
  ].join("\n"));
@@ -49,7 +53,7 @@ async function main() {
49
53
  return;
50
54
  }
51
55
  if (command === "visitor" && sub === "list") {
52
- runVisitorList();
56
+ runVisitorList(parseFlags(rest));
53
57
  return;
54
58
  }
55
59
  if (command === "visitor" && sub === "migrate") {
@@ -71,21 +75,54 @@ function startServer() {
71
75
  process.exit(1);
72
76
  });
73
77
  }
74
- /** 执行 `visitor list`:查询所有访客并以 TSV 格式输出。 */
75
- function runVisitorList() {
76
- const rows = listAllVisitors();
78
+ /** 执行 `visitor list`:查询访客并以 TSV 格式输出。
79
+ *
80
+ * 支持过滤参数:
81
+ * --active 仅列出启用的访客(默认)
82
+ * --disabled 仅列出已禁用的访客
83
+ * --all 列出全部访客
84
+ */
85
+ function runVisitorList(flags) {
86
+ let filter = "active";
87
+ if (flags.all === true)
88
+ filter = "all";
89
+ if (flags.disabled === true)
90
+ filter = "disabled";
91
+ // --active 显式指定时覆盖
92
+ const rows = listAllVisitors(filter);
77
93
  for (const row of rows) {
78
94
  process.stdout.write(`${row.visitor_id}\t${row.visitor_name}\tcreated=${row.created_at}\tdisabled=${row.disabled_at ?? "-"}\tmerged_into=${row.merged_into_visitor_id ?? "-"}\n`);
79
95
  }
80
96
  }
97
+ /**
98
+ * 根据输入字符串解析访客记录:先按 ID 查找,找不到再按名称查找。
99
+ * 只返回未禁用的访客。
100
+ */
101
+ function resolveVisitor(ident) {
102
+ const db = getDb();
103
+ // 先按 ID 查
104
+ let row = findVisitorById(db, ident);
105
+ // 再按名称查
106
+ if (!row)
107
+ row = findVisitorByName(db, ident);
108
+ // 都没找到,抛错
109
+ if (!row) {
110
+ throw new MigrationError("NOT_FOUND", `visitor "${ident}" not found (tried as ID, then name)`);
111
+ }
112
+ // 检查是否已禁用
113
+ if (row.disabled_at) {
114
+ throw new MigrationError("VISITOR_DISABLED", `visitor "${ident}" is disabled`);
115
+ }
116
+ return { visitorId: row.visitor_id, visitorName: row.visitor_name };
117
+ }
81
118
  /** 执行 `visitor migrate`:校验参数后调用迁移服务,并输出结果或错误。 */
82
119
  function runVisitorMigrate(flags) {
83
- const from = typeof flags.from === "string" ? flags.from : "";
84
- const to = typeof flags.to === "string" ? flags.to : "";
120
+ const fromRaw = typeof flags.from === "string" ? flags.from : "";
121
+ const toRaw = typeof flags.to === "string" ? flags.to : "";
85
122
  const dryRun = flags["dry-run"] === true;
86
123
  const confirm = flags.confirm === true;
87
124
  // 校验必填参数
88
- if (!from || !to) {
125
+ if (!fromRaw || !toRaw) {
89
126
  process.stderr.write("--from and --to are required\n");
90
127
  process.exit(2);
91
128
  }
@@ -95,7 +132,10 @@ function runVisitorMigrate(flags) {
95
132
  process.exit(2);
96
133
  }
97
134
  try {
98
- const result = migrateVisitor({ fromVisitorId: from, toVisitorId: to, confirm });
135
+ // 智能解析访客(支持 ID 或名称)
136
+ const from = resolveVisitor(fromRaw);
137
+ const to = resolveVisitor(toRaw);
138
+ const result = migrateVisitor({ fromVisitorId: from.visitorId, toVisitorId: to.visitorId, confirm });
99
139
  printMigrationResult(result);
100
140
  }
101
141
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/server/cli/main.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/server/cli/main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * 添加收藏。
3
+ *
4
+ * @param db - better-sqlite3 数据库实例
5
+ * @param visitorId - 访客 ID
6
+ * @param documentId - 文档 ID
7
+ */
8
+ export function addBookmark(db, visitorId, documentId) {
9
+ const now = new Date().toISOString();
10
+ db.prepare(`INSERT OR IGNORE INTO document_bookmarks (visitor_id, document_id, created_at)
11
+ VALUES (?, ?, ?)`).run(visitorId, documentId, now);
12
+ }
13
+ /**
14
+ * 取消收藏。
15
+ *
16
+ * @param db - better-sqlite3 数据库实例
17
+ * @param visitorId - 访客 ID
18
+ * @param documentId - 文档 ID
19
+ */
20
+ export function removeBookmark(db, visitorId, documentId) {
21
+ db.prepare(`DELETE FROM document_bookmarks WHERE visitor_id = ? AND document_id = ?`).run(visitorId, documentId);
22
+ }
23
+ /**
24
+ * 检查是否已收藏。
25
+ *
26
+ * @param db - better-sqlite3 数据库实例
27
+ * @param visitorId - 访客 ID
28
+ * @param documentId - 文档 ID
29
+ * @returns 是否已收藏
30
+ */
31
+ export function isBookmarked(db, visitorId, documentId) {
32
+ const row = db
33
+ .prepare(`SELECT COUNT(*) as c FROM document_bookmarks WHERE visitor_id = ? AND document_id = ?`)
34
+ .get(visitorId, documentId);
35
+ return (row?.c ?? 0) > 0;
36
+ }
37
+ export function listBookmarksByVisitor(db, visitorId) {
38
+ const rows = db
39
+ .prepare(`SELECT
40
+ b.document_id,
41
+ b.created_at as bookmarked_at,
42
+ d.domain_id,
43
+ d.relative_path,
44
+ d.display_name,
45
+ d.owner_visitor_id,
46
+ v.visitor_name as owner_visitor_name,
47
+ d.permission,
48
+ d.created_at
49
+ FROM document_bookmarks b
50
+ LEFT JOIN documents d ON b.document_id = d.document_id
51
+ LEFT JOIN visitors v ON d.owner_visitor_id = v.visitor_id
52
+ WHERE b.visitor_id = ?
53
+ ORDER BY b.created_at DESC`)
54
+ .all(visitorId);
55
+ return rows.map((row) => ({
56
+ documentId: row.document_id,
57
+ domainId: row.domain_id ?? null,
58
+ relativePath: row.relative_path ?? null,
59
+ displayName: row.display_name ?? null,
60
+ ownerVisitorId: row.owner_visitor_id ?? null,
61
+ ownerVisitorName: row.owner_visitor_name ?? null,
62
+ permission: row.permission ?? null,
63
+ createdAt: row.created_at ?? null,
64
+ bookmarkedAt: row.bookmarked_at,
65
+ isDeleted: row.domain_id == null,
66
+ }));
67
+ }
68
+ //# sourceMappingURL=bookmark.repo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bookmark.repo.js","sourceRoot":"","sources":["../../../../src/server/db/repositories/bookmark.repo.ts"],"names":[],"mappings":"AAuBA;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,EAAqB,EAAE,SAAiB,EAAE,UAAkB;IACtF,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,EAAE,CAAC,OAAO,CACR;sBACkB,CACnB,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;AACpC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,EAAqB,EAAE,SAAiB,EAAE,UAAkB;IACzF,EAAE,CAAC,OAAO,CACR,yEAAyE,CAC1E,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,EAAqB,EAAE,SAAiB,EAAE,UAAkB;IACvF,MAAM,GAAG,GAAG,EAAE;SACX,OAAO,CACN,uFAAuF,CACxF;SACA,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAC9B,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC;AAsBD,MAAM,UAAU,sBAAsB,CAAC,EAAqB,EAAE,SAAiB;IAC7E,MAAM,IAAI,GAAG,EAAE;SACZ,OAAO,CACN;;;;;;;;;;;;;;kCAc4B,CAC7B;SACA,GAAG,CAAC,SAAS,CAAC,CAAC;IAElB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACxB,UAAU,EAAE,GAAG,CAAC,WAAW;QAC3B,QAAQ,EAAE,GAAG,CAAC,SAAS,IAAI,IAAI;QAC/B,YAAY,EAAE,GAAG,CAAC,aAAa,IAAI,IAAI;QACvC,WAAW,EAAE,GAAG,CAAC,YAAY,IAAI,IAAI;QACrC,cAAc,EAAE,GAAG,CAAC,gBAAgB,IAAI,IAAI;QAC5C,gBAAgB,EAAE,GAAG,CAAC,kBAAkB,IAAI,IAAI;QAChD,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,IAAI;QAClC,SAAS,EAAE,GAAG,CAAC,UAAU,IAAI,IAAI;QACjC,YAAY,EAAE,GAAG,CAAC,aAAa;QAC/B,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,IAAI;KACjC,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1,104 @@
1
+ import { randomUUID } from "crypto";
2
+ export class DocumentCommentRepository {
3
+ db;
4
+ constructor(db) {
5
+ this.db = db;
6
+ }
7
+ /** 创建评论 */
8
+ async create(params) {
9
+ const now = new Date().toISOString();
10
+ const commentId = randomUUID();
11
+ this.db
12
+ .prepare(`INSERT INTO document_comments (
13
+ comment_id, document_id, visitor_id, visitor_name,
14
+ parent_id, reply_to_visitor_id, reply_to_visitor_name,
15
+ content, is_deleted, created_at, updated_at
16
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, 0, ?, ?)`)
17
+ .run(commentId, params.documentId, params.visitorId, params.visitorName, params.parentId, params.replyToVisitorId, params.replyToVisitorName, params.content, now, now);
18
+ return this.getById(commentId);
19
+ }
20
+ /** 根据 ID 获取评论 */
21
+ async getById(commentId) {
22
+ const row = this.db
23
+ .prepare(`SELECT
24
+ comment_id as commentId,
25
+ document_id as documentId,
26
+ visitor_id as visitorId,
27
+ visitor_name as visitorName,
28
+ parent_id as parentId,
29
+ reply_to_visitor_id as replyToVisitorId,
30
+ reply_to_visitor_name as replyToVisitorName,
31
+ content,
32
+ is_deleted as isDeleted,
33
+ created_at as createdAt,
34
+ updated_at as updatedAt
35
+ FROM document_comments
36
+ WHERE comment_id = ?`)
37
+ .get(commentId);
38
+ return row ? { ...row, isDeleted: Boolean(row.isDeleted) } : null;
39
+ }
40
+ /** 获取文档的所有评论 */
41
+ async getByDocumentId(documentId) {
42
+ const rows = this.db
43
+ .prepare(`SELECT
44
+ comment_id as commentId,
45
+ document_id as documentId,
46
+ visitor_id as visitorId,
47
+ visitor_name as visitorName,
48
+ parent_id as parentId,
49
+ reply_to_visitor_id as replyToVisitorId,
50
+ reply_to_visitor_name as replyToVisitorName,
51
+ content,
52
+ is_deleted as isDeleted,
53
+ created_at as createdAt,
54
+ updated_at as updatedAt
55
+ FROM document_comments
56
+ WHERE document_id = ?
57
+ ORDER BY created_at ASC`)
58
+ .all(documentId);
59
+ return rows.map((r) => ({ ...r, isDeleted: Boolean(r.isDeleted) }));
60
+ }
61
+ /** 获取某根评论的所有回复 */
62
+ async getReplies(parentId) {
63
+ const rows = this.db
64
+ .prepare(`SELECT
65
+ comment_id as commentId,
66
+ document_id as documentId,
67
+ visitor_id as visitorId,
68
+ visitor_name as visitorName,
69
+ parent_id as parentId,
70
+ reply_to_visitor_id as replyToVisitorId,
71
+ reply_to_visitor_name as replyToVisitorName,
72
+ content,
73
+ is_deleted as isDeleted,
74
+ created_at as createdAt,
75
+ updated_at as updatedAt
76
+ FROM document_comments
77
+ WHERE parent_id = ?
78
+ ORDER BY created_at ASC`)
79
+ .all(parentId);
80
+ return rows.map((r) => ({ ...r, isDeleted: Boolean(r.isDeleted) }));
81
+ }
82
+ /** 软删除评论 */
83
+ async softDelete(commentId) {
84
+ const result = this.db
85
+ .prepare(`UPDATE document_comments SET is_deleted = 1, updated_at = ? WHERE comment_id = ?`)
86
+ .run(new Date().toISOString(), commentId);
87
+ return (result.changes || 0) > 0;
88
+ }
89
+ /** 检查是否为根评论(用于校验两层结构约束) */
90
+ async isRootComment(commentId) {
91
+ const row = this.db
92
+ .prepare(`SELECT parent_id FROM document_comments WHERE comment_id = ?`)
93
+ .get(commentId);
94
+ return row?.parent_id == null;
95
+ }
96
+ /** 获取文档评论数 */
97
+ async countByDocumentId(documentId) {
98
+ const row = this.db
99
+ .prepare(`SELECT COUNT(*) as count FROM document_comments WHERE document_id = ? AND is_deleted = 0`)
100
+ .get(documentId);
101
+ return row.count;
102
+ }
103
+ }
104
+ //# sourceMappingURL=document-comment.repo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-comment.repo.js","sourceRoot":"","sources":["../../../../src/server/db/repositories/document-comment.repo.ts"],"names":[],"mappings":"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"}
@@ -110,6 +110,20 @@ export function updateDocumentContent(db, input) {
110
110
  export function deleteDocument(db, documentId) {
111
111
  db.prepare(`DELETE FROM documents WHERE document_id = ?`).run(documentId);
112
112
  }
113
+ /**
114
+ * 查询指定域下某路径前缀的所有文档(递归查找目录下所有内容)。
115
+ * 用于目录删除时找出所有需要删除的文档。
116
+ *
117
+ * @param db - better-sqlite3 数据库实例
118
+ * @param domainId - 域 ID
119
+ * @param pathPrefix - 路径前缀(如 "folder/subfolder/")
120
+ * @returns 匹配的文档行数组
121
+ */
122
+ export function listDocumentsByPathPrefix(db, domainId, pathPrefix) {
123
+ return db
124
+ .prepare(`SELECT * FROM documents WHERE domain_id = ? AND relative_path LIKE ?`)
125
+ .all(domainId, `${pathPrefix}%`);
126
+ }
113
127
  /**
114
128
  * 查询某访客对指定文档的邀请记录。
115
129
  *