@bgx4k3p/huly-mcp-server 2.2.3 → 2.2.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 (696) hide show
  1. package/README.md +186 -56
  2. package/node_modules/@hcengineering/account-client/lib/__tests__/utils.test.js +249 -0
  3. package/node_modules/@hcengineering/account-client/lib/__tests__/utils.test.js.map +7 -0
  4. package/node_modules/@hcengineering/account-client/lib/client.js +88 -3
  5. package/node_modules/@hcengineering/account-client/lib/client.js.map +2 -2
  6. package/node_modules/@hcengineering/account-client/lib/types.js.map +2 -2
  7. package/node_modules/@hcengineering/account-client/lib/utils.js +50 -0
  8. package/node_modules/@hcengineering/account-client/lib/utils.js.map +2 -2
  9. package/node_modules/@hcengineering/account-client/package.json +22 -19
  10. package/node_modules/@hcengineering/account-client/src/__tests__/utils.test.ts +304 -0
  11. package/node_modules/@hcengineering/account-client/src/client.ts +127 -6
  12. package/node_modules/@hcengineering/account-client/src/types.ts +7 -0
  13. package/node_modules/@hcengineering/account-client/src/utils.ts +65 -1
  14. package/node_modules/@hcengineering/analytics/lib/index.js +1 -1
  15. package/node_modules/@hcengineering/analytics/lib/index.js.map +2 -2
  16. package/node_modules/@hcengineering/analytics/package.json +19 -16
  17. package/node_modules/@hcengineering/analytics/src/index.ts +2 -1
  18. package/node_modules/@hcengineering/api-client/lib/client.js +9 -4
  19. package/node_modules/@hcengineering/api-client/lib/client.js.map +2 -2
  20. package/node_modules/@hcengineering/api-client/lib/rest/adapter.js +64 -0
  21. package/node_modules/@hcengineering/api-client/lib/rest/adapter.js.map +7 -0
  22. package/node_modules/@hcengineering/api-client/lib/rest/index.js +2 -0
  23. package/node_modules/@hcengineering/api-client/lib/rest/index.js.map +2 -2
  24. package/node_modules/@hcengineering/api-client/lib/socket/node.js +5 -1
  25. package/node_modules/@hcengineering/api-client/lib/socket/node.js.map +2 -2
  26. package/node_modules/@hcengineering/api-client/package.json +28 -25
  27. package/node_modules/@hcengineering/api-client/src/client.ts +10 -1
  28. package/node_modules/@hcengineering/api-client/src/rest/adapter.ts +96 -0
  29. package/node_modules/@hcengineering/api-client/src/rest/index.ts +1 -0
  30. package/node_modules/@hcengineering/api-client/src/socket/node.ts +6 -1
  31. package/node_modules/@hcengineering/chunter/lib/index.js.map +2 -2
  32. package/node_modules/@hcengineering/chunter/package.json +13 -10
  33. package/node_modules/@hcengineering/client/package.json +21 -18
  34. package/node_modules/@hcengineering/client-resources/package.json +24 -21
  35. package/node_modules/@hcengineering/collaborator-client/package.json +21 -18
  36. package/node_modules/@hcengineering/contact/lib/__tests__/workspaceMemberStatusUtils.test.js +38 -0
  37. package/node_modules/@hcengineering/contact/lib/__tests__/workspaceMemberStatusUtils.test.js.map +7 -0
  38. package/node_modules/@hcengineering/contact/lib/index.js +13 -4
  39. package/node_modules/@hcengineering/contact/lib/index.js.map +2 -2
  40. package/node_modules/@hcengineering/contact/lib/types.js.map +1 -1
  41. package/node_modules/@hcengineering/contact/lib/utils.js +132 -108
  42. package/node_modules/@hcengineering/contact/lib/utils.js.map +3 -3
  43. package/node_modules/@hcengineering/contact/lib/workspaceMemberStatusUtils.js +79 -0
  44. package/node_modules/@hcengineering/contact/lib/workspaceMemberStatusUtils.js.map +7 -0
  45. package/node_modules/@hcengineering/contact/package.json +12 -9
  46. package/node_modules/@hcengineering/core/CHANGELOG.md +9 -1
  47. package/node_modules/@hcengineering/core/lang/cs.json +6 -1
  48. package/node_modules/@hcengineering/core/lang/de.json +6 -1
  49. package/node_modules/@hcengineering/core/lang/en.json +6 -1
  50. package/node_modules/@hcengineering/core/lang/es.json +6 -1
  51. package/node_modules/@hcengineering/core/lang/fr.json +6 -1
  52. package/node_modules/@hcengineering/core/lang/it.json +6 -1
  53. package/node_modules/@hcengineering/core/lang/ja.json +6 -1
  54. package/node_modules/@hcengineering/core/lang/pt-br.json +70 -0
  55. package/node_modules/@hcengineering/core/lang/pt.json +6 -1
  56. package/node_modules/@hcengineering/core/lang/ru.json +6 -1
  57. package/node_modules/@hcengineering/core/lang/tr.json +6 -1
  58. package/node_modules/@hcengineering/core/lang/zh.json +6 -1
  59. package/node_modules/@hcengineering/core/lib/__tests__/autoJoinRoles.test.js +13 -0
  60. package/node_modules/@hcengineering/core/lib/__tests__/autoJoinRoles.test.js.map +7 -0
  61. package/node_modules/@hcengineering/core/lib/__tests__/memdb.test.js +133 -0
  62. package/node_modules/@hcengineering/core/lib/__tests__/memdb.test.js.map +2 -2
  63. package/node_modules/@hcengineering/core/lib/__tests__/minmodel.js +25 -0
  64. package/node_modules/@hcengineering/core/lib/__tests__/minmodel.js.map +2 -2
  65. package/node_modules/@hcengineering/core/lib/__tests__/query.test.js +43 -0
  66. package/node_modules/@hcengineering/core/lib/__tests__/query.test.js.map +7 -0
  67. package/node_modules/@hcengineering/core/lib/autoJoinRoles.js +36 -0
  68. package/node_modules/@hcengineering/core/lib/autoJoinRoles.js.map +7 -0
  69. package/node_modules/@hcengineering/core/lib/classes.js +5 -0
  70. package/node_modules/@hcengineering/core/lib/classes.js.map +3 -3
  71. package/node_modules/@hcengineering/core/lib/clone.js +13 -2
  72. package/node_modules/@hcengineering/core/lib/clone.js.map +2 -2
  73. package/node_modules/@hcengineering/core/lib/component.js +14 -3
  74. package/node_modules/@hcengineering/core/lib/component.js.map +2 -2
  75. package/node_modules/@hcengineering/core/lib/index.js +2 -0
  76. package/node_modules/@hcengineering/core/lib/index.js.map +2 -2
  77. package/node_modules/@hcengineering/core/lib/memdb.js +6 -2
  78. package/node_modules/@hcengineering/core/lib/memdb.js.map +2 -2
  79. package/node_modules/@hcengineering/core/lib/operations.js +11 -0
  80. package/node_modules/@hcengineering/core/lib/operations.js.map +2 -2
  81. package/node_modules/@hcengineering/core/lib/predicate.js +3 -0
  82. package/node_modules/@hcengineering/core/lib/predicate.js.map +2 -2
  83. package/node_modules/@hcengineering/core/lib/storage.js.map +2 -2
  84. package/node_modules/@hcengineering/core/lib/tx.js +3 -1
  85. package/node_modules/@hcengineering/core/lib/tx.js.map +2 -2
  86. package/node_modules/@hcengineering/core/lib/utils.js +1 -1
  87. package/node_modules/@hcengineering/core/lib/utils.js.map +2 -2
  88. package/node_modules/@hcengineering/core/lib/versioning.js +17 -0
  89. package/node_modules/@hcengineering/core/lib/versioning.js.map +7 -0
  90. package/node_modules/@hcengineering/core/package.json +22 -19
  91. package/node_modules/@hcengineering/core/src/__tests__/autoJoinRoles.test.ts +27 -0
  92. package/node_modules/@hcengineering/core/src/__tests__/memdb.test.ts +150 -1
  93. package/node_modules/@hcengineering/core/src/__tests__/minmodel.ts +29 -1
  94. package/node_modules/@hcengineering/core/src/__tests__/query.test.ts +66 -0
  95. package/node_modules/@hcengineering/core/src/autoJoinRoles.ts +33 -0
  96. package/node_modules/@hcengineering/core/src/classes.ts +61 -1
  97. package/node_modules/@hcengineering/core/src/clone.ts +13 -2
  98. package/node_modules/@hcengineering/core/src/component.ts +25 -9
  99. package/node_modules/@hcengineering/core/src/index.ts +2 -0
  100. package/node_modules/@hcengineering/core/src/memdb.ts +7 -3
  101. package/node_modules/@hcengineering/core/src/operations.ts +11 -0
  102. package/node_modules/@hcengineering/core/src/predicate.ts +3 -0
  103. package/node_modules/@hcengineering/core/src/storage.ts +6 -3
  104. package/node_modules/@hcengineering/core/src/tx.ts +4 -1
  105. package/node_modules/@hcengineering/core/src/utils.ts +1 -1
  106. package/node_modules/@hcengineering/core/src/versioning.ts +13 -0
  107. package/node_modules/@hcengineering/measurements/lib/__tests__/performance.test.js +3 -3
  108. package/node_modules/@hcengineering/measurements/lib/__tests__/performance.test.js.map +2 -2
  109. package/node_modules/@hcengineering/measurements/package.json +17 -14
  110. package/node_modules/@hcengineering/measurements/src/__tests__/performance.test.ts +3 -3
  111. package/node_modules/@hcengineering/platform/lang/pt-br.json +31 -0
  112. package/node_modules/@hcengineering/platform/lib/__tests__/i18n.test.js +100 -0
  113. package/node_modules/@hcengineering/platform/lib/__tests__/i18n.test.js.map +2 -2
  114. package/node_modules/@hcengineering/platform/lib/__tests__/status.test.js +78 -0
  115. package/node_modules/@hcengineering/platform/lib/__tests__/status.test.js.map +7 -0
  116. package/node_modules/@hcengineering/platform/lib/i18n.js +78 -69
  117. package/node_modules/@hcengineering/platform/lib/i18n.js.map +3 -3
  118. package/node_modules/@hcengineering/platform/lib/status.js +25 -0
  119. package/node_modules/@hcengineering/platform/lib/status.js.map +2 -2
  120. package/node_modules/@hcengineering/platform/package.json +18 -15
  121. package/node_modules/@hcengineering/platform/src/__tests__/i18n.test.ts +114 -2
  122. package/node_modules/@hcengineering/platform/src/__tests__/status.test.ts +77 -0
  123. package/node_modules/@hcengineering/platform/src/i18n.ts +99 -71
  124. package/node_modules/@hcengineering/platform/src/status.ts +30 -0
  125. package/node_modules/@hcengineering/rank/package.json +19 -16
  126. package/node_modules/@hcengineering/rpc/package.json +21 -18
  127. package/node_modules/@hcengineering/tags/package.json +12 -9
  128. package/node_modules/@hcengineering/task/package.json +14 -11
  129. package/node_modules/@hcengineering/text/lib/markup/__tests__/utils.test.js +25 -0
  130. package/node_modules/@hcengineering/text/lib/markup/__tests__/utils.test.js.map +2 -2
  131. package/node_modules/@hcengineering/text/lib/tiptapExtensions.js +6 -0
  132. package/node_modules/@hcengineering/text/lib/tiptapExtensions.js.map +2 -2
  133. package/node_modules/@hcengineering/text/package.json +23 -18
  134. package/node_modules/@hcengineering/text/src/markup/__tests__/utils.test.ts +27 -0
  135. package/node_modules/@hcengineering/text/src/tiptapExtensions.ts +3 -0
  136. package/node_modules/@hcengineering/text-core/lib/markup/model.js +1 -0
  137. package/node_modules/@hcengineering/text-core/lib/markup/model.js.map +2 -2
  138. package/node_modules/@hcengineering/text-core/package.json +20 -17
  139. package/node_modules/@hcengineering/text-core/src/markup/model.ts +2 -1
  140. package/node_modules/@hcengineering/text-html/package.json +19 -16
  141. package/node_modules/@hcengineering/text-markdown/lib/serializer.js +14 -0
  142. package/node_modules/@hcengineering/text-markdown/lib/serializer.js.map +2 -2
  143. package/node_modules/@hcengineering/text-markdown/package.json +20 -17
  144. package/node_modules/@hcengineering/text-markdown/src/serializer.ts +14 -0
  145. package/node_modules/@hcengineering/tracker/lib/index.js +1 -0
  146. package/node_modules/@hcengineering/tracker/lib/index.js.map +2 -2
  147. package/node_modules/@hcengineering/tracker/package.json +16 -13
  148. package/node_modules/@tiptap/core/dist/commands/focus.d.ts.map +1 -1
  149. package/node_modules/@tiptap/core/dist/index.cjs +19 -2
  150. package/node_modules/@tiptap/core/dist/index.cjs.map +1 -1
  151. package/node_modules/@tiptap/core/dist/index.js +19 -3
  152. package/node_modules/@tiptap/core/dist/index.js.map +1 -1
  153. package/node_modules/@tiptap/core/dist/index.umd.js +19 -2
  154. package/node_modules/@tiptap/core/dist/index.umd.js.map +1 -1
  155. package/node_modules/@tiptap/core/dist/utilities/index.d.ts +1 -0
  156. package/node_modules/@tiptap/core/dist/utilities/index.d.ts.map +1 -1
  157. package/node_modules/@tiptap/core/dist/utilities/isSafari.d.ts +10 -0
  158. package/node_modules/@tiptap/core/dist/utilities/isSafari.d.ts.map +1 -0
  159. package/node_modules/@tiptap/core/package.json +2 -2
  160. package/node_modules/@tiptap/core/src/commands/focus.ts +7 -2
  161. package/node_modules/@tiptap/core/src/utilities/index.ts +1 -0
  162. package/node_modules/@tiptap/core/src/utilities/isSafari.ts +11 -0
  163. package/node_modules/@tiptap/extension-blockquote/package.json +2 -2
  164. package/node_modules/@tiptap/extension-bold/package.json +2 -2
  165. package/node_modules/@tiptap/extension-bullet-list/package.json +2 -2
  166. package/node_modules/@tiptap/extension-code/package.json +2 -2
  167. package/node_modules/@tiptap/extension-code-block/package.json +3 -3
  168. package/node_modules/@tiptap/extension-document/package.json +2 -2
  169. package/node_modules/@tiptap/extension-dropcursor/package.json +3 -3
  170. package/node_modules/@tiptap/extension-gapcursor/package.json +3 -3
  171. package/node_modules/@tiptap/extension-hard-break/package.json +2 -2
  172. package/node_modules/@tiptap/extension-heading/package.json +2 -2
  173. package/node_modules/@tiptap/extension-highlight/package.json +2 -2
  174. package/node_modules/@tiptap/extension-history/package.json +3 -3
  175. package/node_modules/@tiptap/extension-horizontal-rule/package.json +3 -3
  176. package/node_modules/@tiptap/extension-italic/package.json +2 -2
  177. package/node_modules/@tiptap/extension-link/package.json +3 -3
  178. package/node_modules/@tiptap/extension-list-item/package.json +2 -2
  179. package/node_modules/@tiptap/extension-mention/package.json +4 -4
  180. package/node_modules/@tiptap/extension-ordered-list/package.json +2 -2
  181. package/node_modules/@tiptap/extension-paragraph/package.json +2 -2
  182. package/node_modules/@tiptap/extension-strike/package.json +2 -2
  183. package/node_modules/@tiptap/extension-subscript/README.md +14 -0
  184. package/node_modules/@tiptap/extension-subscript/dist/index.cjs +61 -0
  185. package/node_modules/@tiptap/extension-subscript/dist/index.cjs.map +1 -0
  186. package/node_modules/@tiptap/extension-subscript/dist/index.d.ts +4 -0
  187. package/node_modules/@tiptap/extension-subscript/dist/index.d.ts.map +1 -0
  188. package/node_modules/@tiptap/extension-subscript/dist/index.js +56 -0
  189. package/node_modules/@tiptap/extension-subscript/dist/index.js.map +1 -0
  190. package/node_modules/@tiptap/extension-subscript/dist/index.umd.js +65 -0
  191. package/node_modules/@tiptap/extension-subscript/dist/index.umd.js.map +1 -0
  192. package/node_modules/@tiptap/extension-subscript/dist/subscript.d.ts +36 -0
  193. package/node_modules/@tiptap/extension-subscript/dist/subscript.d.ts.map +1 -0
  194. package/node_modules/@tiptap/extension-subscript/package.json +49 -0
  195. package/node_modules/@tiptap/extension-subscript/src/index.ts +5 -0
  196. package/node_modules/@tiptap/extension-subscript/src/subscript.ts +91 -0
  197. package/node_modules/@tiptap/extension-superscript/README.md +14 -0
  198. package/node_modules/@tiptap/extension-superscript/dist/index.cjs +61 -0
  199. package/node_modules/@tiptap/extension-superscript/dist/index.cjs.map +1 -0
  200. package/node_modules/@tiptap/extension-superscript/dist/index.d.ts +4 -0
  201. package/node_modules/@tiptap/extension-superscript/dist/index.d.ts.map +1 -0
  202. package/node_modules/@tiptap/extension-superscript/dist/index.js +56 -0
  203. package/node_modules/@tiptap/extension-superscript/dist/index.js.map +1 -0
  204. package/node_modules/@tiptap/extension-superscript/dist/index.umd.js +65 -0
  205. package/node_modules/@tiptap/extension-superscript/dist/index.umd.js.map +1 -0
  206. package/node_modules/@tiptap/extension-superscript/dist/superscript.d.ts +36 -0
  207. package/node_modules/@tiptap/extension-superscript/dist/superscript.d.ts.map +1 -0
  208. package/node_modules/@tiptap/extension-superscript/package.json +49 -0
  209. package/node_modules/@tiptap/extension-superscript/src/index.ts +5 -0
  210. package/node_modules/@tiptap/extension-superscript/src/superscript.ts +91 -0
  211. package/node_modules/@tiptap/extension-table/package.json +3 -3
  212. package/node_modules/@tiptap/extension-table-cell/package.json +2 -2
  213. package/node_modules/@tiptap/extension-table-header/package.json +2 -2
  214. package/node_modules/@tiptap/extension-table-row/package.json +2 -2
  215. package/node_modules/@tiptap/extension-task-item/package.json +3 -3
  216. package/node_modules/@tiptap/extension-task-list/package.json +2 -2
  217. package/node_modules/@tiptap/extension-text/package.json +2 -2
  218. package/node_modules/@tiptap/extension-typography/package.json +2 -2
  219. package/node_modules/@tiptap/extension-underline/package.json +2 -2
  220. package/node_modules/@tiptap/html/package.json +3 -3
  221. package/node_modules/@tiptap/pm/package.json +1 -1
  222. package/node_modules/@tiptap/starter-kit/node_modules/@tiptap/extension-text-style/package.json +2 -2
  223. package/node_modules/@tiptap/starter-kit/package.json +22 -22
  224. package/node_modules/@tiptap/suggestion/package.json +3 -3
  225. package/node_modules/linkify-it/build/index.cjs.js +99 -94
  226. package/node_modules/linkify-it/index.mjs +99 -94
  227. package/node_modules/linkify-it/package.json +11 -1
  228. package/node_modules/linkifyjs/README.md +4 -2
  229. package/node_modules/linkifyjs/dist/linkify.cjs +8 -11
  230. package/node_modules/linkifyjs/dist/linkify.d.cts +14 -14
  231. package/node_modules/linkifyjs/dist/linkify.d.mts +14 -14
  232. package/node_modules/linkifyjs/dist/linkify.js +8 -11
  233. package/node_modules/linkifyjs/dist/linkify.min.js +1 -1
  234. package/node_modules/linkifyjs/dist/linkify.mjs +8 -11
  235. package/node_modules/linkifyjs/package.json +1 -1
  236. package/node_modules/markdown-it/README.md +13 -17
  237. package/node_modules/markdown-it/dist/index.cjs.js +111 -31
  238. package/node_modules/markdown-it/dist/markdown-it.js +117 -31
  239. package/node_modules/markdown-it/dist/markdown-it.min.js +2 -2
  240. package/node_modules/markdown-it/lib/common/utils.mjs +30 -1
  241. package/node_modules/markdown-it/lib/index.mjs +1 -1
  242. package/node_modules/markdown-it/lib/rules_block/heading.mjs +2 -2
  243. package/node_modules/markdown-it/lib/rules_block/html_block.mjs +12 -1
  244. package/node_modules/markdown-it/lib/rules_block/lheading.mjs +4 -1
  245. package/node_modules/markdown-it/lib/rules_block/paragraph.mjs +3 -1
  246. package/node_modules/markdown-it/lib/rules_core/smartquotes.mjs +37 -21
  247. package/node_modules/markdown-it/lib/rules_inline/entity.mjs +2 -2
  248. package/node_modules/markdown-it/lib/rules_inline/state_inline.mjs +37 -6
  249. package/node_modules/markdown-it/package.json +14 -3
  250. package/node_modules/msgpackr/README.md +1 -3
  251. package/node_modules/msgpackr/benchmark.md +26 -16
  252. package/node_modules/msgpackr/dist/index-no-eval.cjs +35 -16
  253. package/node_modules/msgpackr/dist/index-no-eval.cjs.map +1 -1
  254. package/node_modules/msgpackr/dist/index-no-eval.min.js +1 -1
  255. package/node_modules/msgpackr/dist/index-no-eval.min.js.map +1 -1
  256. package/node_modules/msgpackr/dist/index.js +35 -16
  257. package/node_modules/msgpackr/dist/index.js.map +1 -1
  258. package/node_modules/msgpackr/dist/index.min.js +1 -1
  259. package/node_modules/msgpackr/dist/index.min.js.map +1 -1
  260. package/node_modules/msgpackr/dist/node.cjs +50 -26
  261. package/node_modules/msgpackr/dist/node.cjs.map +1 -1
  262. package/node_modules/msgpackr/dist/test.js +44 -16
  263. package/node_modules/msgpackr/dist/test.js.map +1 -1
  264. package/node_modules/msgpackr/dist/unpack-no-eval.cjs +35 -16
  265. package/node_modules/msgpackr/dist/unpack-no-eval.cjs.map +1 -1
  266. package/node_modules/msgpackr/index.d.cts +2 -0
  267. package/node_modules/msgpackr/index.d.ts +2 -0
  268. package/node_modules/msgpackr/package.json +1 -1
  269. package/node_modules/msgpackr/stream.js +15 -10
  270. package/node_modules/msgpackr/unpack.js +35 -16
  271. package/node_modules/prosemirror-changeset/CHANGELOG.md +12 -0
  272. package/node_modules/prosemirror-changeset/README.md +31 -2
  273. package/node_modules/prosemirror-changeset/dist/index.cjs +17 -2
  274. package/node_modules/prosemirror-changeset/dist/index.d.cts +32 -2
  275. package/node_modules/prosemirror-changeset/dist/index.d.ts +32 -2
  276. package/node_modules/prosemirror-changeset/dist/index.js +18 -3
  277. package/node_modules/prosemirror-changeset/package.json +2 -2
  278. package/node_modules/prosemirror-changeset/src/README.md +4 -2
  279. package/node_modules/prosemirror-changeset/src/change.ts +18 -0
  280. package/node_modules/prosemirror-changeset/src/changeset.ts +10 -4
  281. package/node_modules/prosemirror-changeset/src/simplify.ts +1 -1
  282. package/node_modules/prosemirror-changeset/test/test-simplify.ts +3 -0
  283. package/node_modules/prosemirror-gapcursor/CHANGELOG.md +6 -0
  284. package/node_modules/prosemirror-gapcursor/dist/index.cjs +1 -1
  285. package/node_modules/prosemirror-gapcursor/dist/index.js +1 -1
  286. package/node_modules/prosemirror-gapcursor/package.json +3 -2
  287. package/node_modules/prosemirror-gapcursor/src/gapcursor.ts +1 -1
  288. package/node_modules/prosemirror-markdown/CHANGELOG.md +12 -0
  289. package/node_modules/prosemirror-markdown/dist/index.cjs +11 -1
  290. package/node_modules/prosemirror-markdown/dist/index.js +14 -2
  291. package/node_modules/prosemirror-markdown/package.json +1 -1
  292. package/node_modules/prosemirror-markdown/src/to_markdown.ts +12 -3
  293. package/node_modules/prosemirror-menu/CHANGELOG.md +18 -0
  294. package/node_modules/prosemirror-menu/CONTRIBUTING.md +22 -18
  295. package/node_modules/prosemirror-menu/README.md +69 -29
  296. package/node_modules/prosemirror-menu/dist/index.cjs +232 -48
  297. package/node_modules/prosemirror-menu/dist/index.d.cts +29 -14
  298. package/node_modules/prosemirror-menu/dist/index.d.ts +29 -14
  299. package/node_modules/prosemirror-menu/dist/index.js +229 -36
  300. package/node_modules/prosemirror-menu/package.json +2 -2
  301. package/node_modules/prosemirror-menu/src/README.md +30 -1
  302. package/node_modules/prosemirror-menu/src/icons.ts +3 -2
  303. package/node_modules/prosemirror-menu/src/menu.ts +193 -40
  304. package/node_modules/prosemirror-menu/src/menubar.ts +50 -5
  305. package/node_modules/prosemirror-menu/style/menu.css +28 -7
  306. package/node_modules/prosemirror-model/CHANGELOG.md +20 -0
  307. package/node_modules/prosemirror-model/CONTRIBUTING.md +19 -19
  308. package/node_modules/prosemirror-model/README.md +3 -3
  309. package/node_modules/prosemirror-model/dist/index.cjs +13 -10
  310. package/node_modules/prosemirror-model/dist/index.d.cts +25 -21
  311. package/node_modules/prosemirror-model/dist/index.d.ts +25 -21
  312. package/node_modules/prosemirror-model/dist/index.js +19 -23
  313. package/node_modules/prosemirror-model/package.json +2 -2
  314. package/node_modules/prosemirror-model/src/fragment.ts +1 -1
  315. package/node_modules/prosemirror-model/src/from_dom.ts +4 -1
  316. package/node_modules/prosemirror-model/src/node.ts +5 -4
  317. package/node_modules/prosemirror-model/src/replace.ts +6 -15
  318. package/node_modules/prosemirror-model/src/schema.ts +1 -1
  319. package/node_modules/prosemirror-model/src/to_dom.ts +24 -20
  320. package/node_modules/prosemirror-transform/CHANGELOG.md +16 -0
  321. package/node_modules/prosemirror-transform/dist/index.cjs +38 -4
  322. package/node_modules/prosemirror-transform/dist/index.d.cts +19 -0
  323. package/node_modules/prosemirror-transform/dist/index.d.ts +19 -0
  324. package/node_modules/prosemirror-transform/dist/index.js +52 -1
  325. package/node_modules/prosemirror-transform/package.json +1 -1
  326. package/node_modules/prosemirror-transform/src/replace.ts +16 -0
  327. package/node_modules/prosemirror-transform/src/replace_step.ts +10 -1
  328. package/node_modules/prosemirror-transform/src/transform.ts +21 -2
  329. package/node_modules/prosemirror-view/CHANGELOG.md +34 -2
  330. package/node_modules/prosemirror-view/CONTRIBUTING.md +19 -19
  331. package/node_modules/prosemirror-view/README.md +3 -3
  332. package/node_modules/prosemirror-view/dist/index.cjs +96 -40
  333. package/node_modules/prosemirror-view/dist/index.d.cts +2 -2
  334. package/node_modules/prosemirror-view/dist/index.d.ts +2 -2
  335. package/node_modules/prosemirror-view/dist/index.js +90 -39
  336. package/node_modules/prosemirror-view/package.json +2 -2
  337. package/node_modules/prosemirror-view/src/domchange.ts +1 -1
  338. package/node_modules/prosemirror-view/src/domobserver.ts +59 -16
  339. package/node_modules/prosemirror-view/src/index.ts +4 -4
  340. package/node_modules/prosemirror-view/src/input.ts +9 -6
  341. package/node_modules/prosemirror-view/src/viewdesc.ts +26 -22
  342. package/node_modules/prosemirror-view/style/prosemirror.css +1 -1
  343. package/package.json +5 -4
  344. package/src/client.mjs +2 -2
  345. package/src/config.mjs +1 -0
  346. package/src/helpers.mjs +2 -2
  347. package/src/index.mjs +31 -1
  348. package/src/initCodex.mjs +281 -0
  349. package/src/mcp.mjs +11 -1
  350. package/src/mcpShared.mjs +95 -5
  351. package/node_modules/@hcengineering/account-client/types/client.d.ts +0 -140
  352. package/node_modules/@hcengineering/account-client/types/client.d.ts.map +0 -1
  353. package/node_modules/@hcengineering/account-client/types/index.d.ts +0 -4
  354. package/node_modules/@hcengineering/account-client/types/index.d.ts.map +0 -1
  355. package/node_modules/@hcengineering/account-client/types/types.d.ts +0 -177
  356. package/node_modules/@hcengineering/account-client/types/types.d.ts.map +0 -1
  357. package/node_modules/@hcengineering/account-client/types/utils.d.ts +0 -5
  358. package/node_modules/@hcengineering/account-client/types/utils.d.ts.map +0 -1
  359. package/node_modules/@hcengineering/analytics/types/index.d.ts +0 -25
  360. package/node_modules/@hcengineering/analytics/types/index.d.ts.map +0 -1
  361. package/node_modules/@hcengineering/api-client/types/__tests__/config.test.d.ts +0 -2
  362. package/node_modules/@hcengineering/api-client/types/__tests__/config.test.d.ts.map +0 -1
  363. package/node_modules/@hcengineering/api-client/types/__tests__/markup-client.test.d.ts +0 -2
  364. package/node_modules/@hcengineering/api-client/types/__tests__/markup-client.test.d.ts.map +0 -1
  365. package/node_modules/@hcengineering/api-client/types/__tests__/markup-types.test.d.ts +0 -2
  366. package/node_modules/@hcengineering/api-client/types/__tests__/markup-types.test.d.ts.map +0 -1
  367. package/node_modules/@hcengineering/api-client/types/__tests__/rest-utils.test.d.ts +0 -2
  368. package/node_modules/@hcengineering/api-client/types/__tests__/rest-utils.test.d.ts.map +0 -1
  369. package/node_modules/@hcengineering/api-client/types/__tests__/utils.test.d.ts +0 -2
  370. package/node_modules/@hcengineering/api-client/types/__tests__/utils.test.d.ts.map +0 -1
  371. package/node_modules/@hcengineering/api-client/types/client.d.ts +0 -6
  372. package/node_modules/@hcengineering/api-client/types/client.d.ts.map +0 -1
  373. package/node_modules/@hcengineering/api-client/types/config.d.ts +0 -8
  374. package/node_modules/@hcengineering/api-client/types/config.d.ts.map +0 -1
  375. package/node_modules/@hcengineering/api-client/types/index.d.ts +0 -9
  376. package/node_modules/@hcengineering/api-client/types/index.d.ts.map +0 -1
  377. package/node_modules/@hcengineering/api-client/types/markup/client.d.ts +0 -5
  378. package/node_modules/@hcengineering/api-client/types/markup/client.d.ts.map +0 -1
  379. package/node_modules/@hcengineering/api-client/types/markup/index.d.ts +0 -3
  380. package/node_modules/@hcengineering/api-client/types/markup/index.d.ts.map +0 -1
  381. package/node_modules/@hcengineering/api-client/types/markup/types.d.ts +0 -41
  382. package/node_modules/@hcengineering/api-client/types/markup/types.d.ts.map +0 -1
  383. package/node_modules/@hcengineering/api-client/types/rest/index.d.ts +0 -4
  384. package/node_modules/@hcengineering/api-client/types/rest/index.d.ts.map +0 -1
  385. package/node_modules/@hcengineering/api-client/types/rest/rest.d.ts +0 -39
  386. package/node_modules/@hcengineering/api-client/types/rest/rest.d.ts.map +0 -1
  387. package/node_modules/@hcengineering/api-client/types/rest/tx.d.ts +0 -3
  388. package/node_modules/@hcengineering/api-client/types/rest/tx.d.ts.map +0 -1
  389. package/node_modules/@hcengineering/api-client/types/rest/types.d.ts +0 -16
  390. package/node_modules/@hcengineering/api-client/types/rest/types.d.ts.map +0 -1
  391. package/node_modules/@hcengineering/api-client/types/rest/utils.d.ts +0 -3
  392. package/node_modules/@hcengineering/api-client/types/rest/utils.d.ts.map +0 -1
  393. package/node_modules/@hcengineering/api-client/types/socket/browser.d.ts +0 -4
  394. package/node_modules/@hcengineering/api-client/types/socket/browser.d.ts.map +0 -1
  395. package/node_modules/@hcengineering/api-client/types/socket/index.d.ts +0 -3
  396. package/node_modules/@hcengineering/api-client/types/socket/index.d.ts.map +0 -1
  397. package/node_modules/@hcengineering/api-client/types/socket/node.d.ts +0 -4
  398. package/node_modules/@hcengineering/api-client/types/socket/node.d.ts.map +0 -1
  399. package/node_modules/@hcengineering/api-client/types/storage/client.d.ts +0 -21
  400. package/node_modules/@hcengineering/api-client/types/storage/client.d.ts.map +0 -1
  401. package/node_modules/@hcengineering/api-client/types/storage/error.d.ts +0 -10
  402. package/node_modules/@hcengineering/api-client/types/storage/error.d.ts.map +0 -1
  403. package/node_modules/@hcengineering/api-client/types/storage/index.d.ts +0 -4
  404. package/node_modules/@hcengineering/api-client/types/storage/index.d.ts.map +0 -1
  405. package/node_modules/@hcengineering/api-client/types/storage/types.d.ts +0 -10
  406. package/node_modules/@hcengineering/api-client/types/storage/types.d.ts.map +0 -1
  407. package/node_modules/@hcengineering/api-client/types/types.d.ts +0 -101
  408. package/node_modules/@hcengineering/api-client/types/types.d.ts.map +0 -1
  409. package/node_modules/@hcengineering/api-client/types/utils.d.ts +0 -12
  410. package/node_modules/@hcengineering/api-client/types/utils.d.ts.map +0 -1
  411. package/node_modules/@hcengineering/chunter/types/analytics.d.ts +0 -5
  412. package/node_modules/@hcengineering/chunter/types/analytics.d.ts.map +0 -1
  413. package/node_modules/@hcengineering/chunter/types/index.d.ts +0 -211
  414. package/node_modules/@hcengineering/chunter/types/index.d.ts.map +0 -1
  415. package/node_modules/@hcengineering/chunter/types/utils.d.ts +0 -7
  416. package/node_modules/@hcengineering/chunter/types/utils.d.ts.map +0 -1
  417. package/node_modules/@hcengineering/client/types/__tests__/client.test.d.ts +0 -2
  418. package/node_modules/@hcengineering/client/types/__tests__/client.test.d.ts.map +0 -1
  419. package/node_modules/@hcengineering/client/types/index.d.ts +0 -69
  420. package/node_modules/@hcengineering/client/types/index.d.ts.map +0 -1
  421. package/node_modules/@hcengineering/client-resources/types/__tests__/connection.test.d.ts +0 -2
  422. package/node_modules/@hcengineering/client-resources/types/__tests__/connection.test.d.ts.map +0 -1
  423. package/node_modules/@hcengineering/client-resources/types/__tests__/integration.test.d.ts +0 -45
  424. package/node_modules/@hcengineering/client-resources/types/__tests__/integration.test.d.ts.map +0 -1
  425. package/node_modules/@hcengineering/client-resources/types/connection.d.ts +0 -7
  426. package/node_modules/@hcengineering/client-resources/types/connection.d.ts.map +0 -1
  427. package/node_modules/@hcengineering/client-resources/types/index.d.ts +0 -11
  428. package/node_modules/@hcengineering/client-resources/types/index.d.ts.map +0 -1
  429. package/node_modules/@hcengineering/collaborator-client/types/__tests__/utils.test.d.ts +0 -2
  430. package/node_modules/@hcengineering/collaborator-client/types/__tests__/utils.test.d.ts.map +0 -1
  431. package/node_modules/@hcengineering/collaborator-client/types/client.d.ts +0 -34
  432. package/node_modules/@hcengineering/collaborator-client/types/client.d.ts.map +0 -1
  433. package/node_modules/@hcengineering/collaborator-client/types/index.d.ts +0 -3
  434. package/node_modules/@hcengineering/collaborator-client/types/index.d.ts.map +0 -1
  435. package/node_modules/@hcengineering/collaborator-client/types/utils.d.ts +0 -9
  436. package/node_modules/@hcengineering/collaborator-client/types/utils.d.ts.map +0 -1
  437. package/node_modules/@hcengineering/contact/types/__tests__/cache.test.d.ts +0 -2
  438. package/node_modules/@hcengineering/contact/types/__tests__/cache.test.d.ts.map +0 -1
  439. package/node_modules/@hcengineering/contact/types/analytics.d.ts +0 -6
  440. package/node_modules/@hcengineering/contact/types/analytics.d.ts.map +0 -1
  441. package/node_modules/@hcengineering/contact/types/avatar.d.ts +0 -12
  442. package/node_modules/@hcengineering/contact/types/avatar.d.ts.map +0 -1
  443. package/node_modules/@hcengineering/contact/types/cache.d.ts +0 -49
  444. package/node_modules/@hcengineering/contact/types/cache.d.ts.map +0 -1
  445. package/node_modules/@hcengineering/contact/types/index.d.ts +0 -367
  446. package/node_modules/@hcengineering/contact/types/index.d.ts.map +0 -1
  447. package/node_modules/@hcengineering/contact/types/types.d.ts +0 -25
  448. package/node_modules/@hcengineering/contact/types/types.d.ts.map +0 -1
  449. package/node_modules/@hcengineering/contact/types/utils.d.ts +0 -110
  450. package/node_modules/@hcengineering/contact/types/utils.d.ts.map +0 -1
  451. package/node_modules/@hcengineering/core/types/__tests__/client.test.d.ts +0 -2
  452. package/node_modules/@hcengineering/core/types/__tests__/client.test.d.ts.map +0 -1
  453. package/node_modules/@hcengineering/core/types/__tests__/clone.test.d.ts +0 -2
  454. package/node_modules/@hcengineering/core/types/__tests__/clone.test.d.ts.map +0 -1
  455. package/node_modules/@hcengineering/core/types/__tests__/collaboration.test.d.ts +0 -2
  456. package/node_modules/@hcengineering/core/types/__tests__/collaboration.test.d.ts.map +0 -1
  457. package/node_modules/@hcengineering/core/types/__tests__/collaborators.test.d.ts +0 -2
  458. package/node_modules/@hcengineering/core/types/__tests__/collaborators.test.d.ts.map +0 -1
  459. package/node_modules/@hcengineering/core/types/__tests__/common.test.d.ts +0 -2
  460. package/node_modules/@hcengineering/core/types/__tests__/common.test.d.ts.map +0 -1
  461. package/node_modules/@hcengineering/core/types/__tests__/connection.d.ts +0 -4
  462. package/node_modules/@hcengineering/core/types/__tests__/connection.d.ts.map +0 -1
  463. package/node_modules/@hcengineering/core/types/__tests__/contexts.test.d.ts +0 -2
  464. package/node_modules/@hcengineering/core/types/__tests__/contexts.test.d.ts.map +0 -1
  465. package/node_modules/@hcengineering/core/types/__tests__/hierarchy.test.d.ts +0 -2
  466. package/node_modules/@hcengineering/core/types/__tests__/hierarchy.test.d.ts.map +0 -1
  467. package/node_modules/@hcengineering/core/types/__tests__/lang.test.d.ts +0 -2
  468. package/node_modules/@hcengineering/core/types/__tests__/lang.test.d.ts.map +0 -1
  469. package/node_modules/@hcengineering/core/types/__tests__/limiter-edge-cases.test.d.ts +0 -2
  470. package/node_modules/@hcengineering/core/types/__tests__/limiter-edge-cases.test.d.ts.map +0 -1
  471. package/node_modules/@hcengineering/core/types/__tests__/limits.test.d.ts +0 -2
  472. package/node_modules/@hcengineering/core/types/__tests__/limits.test.d.ts.map +0 -1
  473. package/node_modules/@hcengineering/core/types/__tests__/memdb.test.d.ts +0 -2
  474. package/node_modules/@hcengineering/core/types/__tests__/memdb.test.d.ts.map +0 -1
  475. package/node_modules/@hcengineering/core/types/__tests__/minmodel.d.ts +0 -50
  476. package/node_modules/@hcengineering/core/types/__tests__/minmodel.d.ts.map +0 -1
  477. package/node_modules/@hcengineering/core/types/__tests__/objvalue.test.d.ts +0 -2
  478. package/node_modules/@hcengineering/core/types/__tests__/objvalue.test.d.ts.map +0 -1
  479. package/node_modules/@hcengineering/core/types/__tests__/operator-bugs.test.d.ts +0 -2
  480. package/node_modules/@hcengineering/core/types/__tests__/operator-bugs.test.d.ts.map +0 -1
  481. package/node_modules/@hcengineering/core/types/__tests__/operator.test.d.ts +0 -2
  482. package/node_modules/@hcengineering/core/types/__tests__/operator.test.d.ts.map +0 -1
  483. package/node_modules/@hcengineering/core/types/__tests__/rate-limiter.test.d.ts +0 -2
  484. package/node_modules/@hcengineering/core/types/__tests__/rate-limiter.test.d.ts.map +0 -1
  485. package/node_modules/@hcengineering/core/types/__tests__/time.test.d.ts +0 -2
  486. package/node_modules/@hcengineering/core/types/__tests__/time.test.d.ts.map +0 -1
  487. package/node_modules/@hcengineering/core/types/__tests__/utils.test.d.ts +0 -2
  488. package/node_modules/@hcengineering/core/types/__tests__/utils.test.d.ts.map +0 -1
  489. package/node_modules/@hcengineering/core/types/backup.d.ts +0 -26
  490. package/node_modules/@hcengineering/core/types/backup.d.ts.map +0 -1
  491. package/node_modules/@hcengineering/core/types/benchmark.d.ts +0 -19
  492. package/node_modules/@hcengineering/core/types/benchmark.d.ts.map +0 -1
  493. package/node_modules/@hcengineering/core/types/classes.d.ts +0 -716
  494. package/node_modules/@hcengineering/core/types/classes.d.ts.map +0 -1
  495. package/node_modules/@hcengineering/core/types/client.d.ts +0 -69
  496. package/node_modules/@hcengineering/core/types/client.d.ts.map +0 -1
  497. package/node_modules/@hcengineering/core/types/clone.d.ts +0 -3
  498. package/node_modules/@hcengineering/core/types/clone.d.ts.map +0 -1
  499. package/node_modules/@hcengineering/core/types/collaboration.d.ts +0 -16
  500. package/node_modules/@hcengineering/core/types/collaboration.d.ts.map +0 -1
  501. package/node_modules/@hcengineering/core/types/collaborators.d.ts +0 -3
  502. package/node_modules/@hcengineering/core/types/collaborators.d.ts.map +0 -1
  503. package/node_modules/@hcengineering/core/types/common.d.ts +0 -4
  504. package/node_modules/@hcengineering/core/types/common.d.ts.map +0 -1
  505. package/node_modules/@hcengineering/core/types/component.d.ts +0 -229
  506. package/node_modules/@hcengineering/core/types/component.d.ts.map +0 -1
  507. package/node_modules/@hcengineering/core/types/hierarchy.d.ts +0 -84
  508. package/node_modules/@hcengineering/core/types/hierarchy.d.ts.map +0 -1
  509. package/node_modules/@hcengineering/core/types/index.d.ts +0 -25
  510. package/node_modules/@hcengineering/core/types/index.d.ts.map +0 -1
  511. package/node_modules/@hcengineering/core/types/memdb.d.ts +0 -60
  512. package/node_modules/@hcengineering/core/types/memdb.d.ts.map +0 -1
  513. package/node_modules/@hcengineering/core/types/objvalue.d.ts +0 -10
  514. package/node_modules/@hcengineering/core/types/objvalue.d.ts.map +0 -1
  515. package/node_modules/@hcengineering/core/types/operations.d.ts +0 -87
  516. package/node_modules/@hcengineering/core/types/operations.d.ts.map +0 -1
  517. package/node_modules/@hcengineering/core/types/operator.d.ts +0 -16
  518. package/node_modules/@hcengineering/core/types/operator.d.ts.map +0 -1
  519. package/node_modules/@hcengineering/core/types/predicate.d.ts +0 -6
  520. package/node_modules/@hcengineering/core/types/predicate.d.ts.map +0 -1
  521. package/node_modules/@hcengineering/core/types/proxy.d.ts +0 -21
  522. package/node_modules/@hcengineering/core/types/proxy.d.ts.map +0 -1
  523. package/node_modules/@hcengineering/core/types/query.d.ts +0 -21
  524. package/node_modules/@hcengineering/core/types/query.d.ts.map +0 -1
  525. package/node_modules/@hcengineering/core/types/server.d.ts +0 -82
  526. package/node_modules/@hcengineering/core/types/server.d.ts.map +0 -1
  527. package/node_modules/@hcengineering/core/types/status.d.ts +0 -30
  528. package/node_modules/@hcengineering/core/types/status.d.ts.map +0 -1
  529. package/node_modules/@hcengineering/core/types/storage.d.ts +0 -233
  530. package/node_modules/@hcengineering/core/types/storage.d.ts.map +0 -1
  531. package/node_modules/@hcengineering/core/types/time.d.ts +0 -8
  532. package/node_modules/@hcengineering/core/types/time.d.ts.map +0 -1
  533. package/node_modules/@hcengineering/core/types/tx.d.ts +0 -261
  534. package/node_modules/@hcengineering/core/types/tx.d.ts.map +0 -1
  535. package/node_modules/@hcengineering/core/types/utils.d.ts +0 -207
  536. package/node_modules/@hcengineering/core/types/utils.d.ts.map +0 -1
  537. package/node_modules/@hcengineering/measurements/types/__tests__/context.test.d.ts +0 -2
  538. package/node_modules/@hcengineering/measurements/types/__tests__/context.test.d.ts.map +0 -1
  539. package/node_modules/@hcengineering/measurements/types/__tests__/index.test.d.ts +0 -2
  540. package/node_modules/@hcengineering/measurements/types/__tests__/index.test.d.ts.map +0 -1
  541. package/node_modules/@hcengineering/measurements/types/__tests__/metrics.test.d.ts +0 -2
  542. package/node_modules/@hcengineering/measurements/types/__tests__/metrics.test.d.ts.map +0 -1
  543. package/node_modules/@hcengineering/measurements/types/__tests__/performance.test.d.ts +0 -2
  544. package/node_modules/@hcengineering/measurements/types/__tests__/performance.test.d.ts.map +0 -1
  545. package/node_modules/@hcengineering/measurements/types/context.d.ts +0 -64
  546. package/node_modules/@hcengineering/measurements/types/context.d.ts.map +0 -1
  547. package/node_modules/@hcengineering/measurements/types/index.d.ts +0 -12
  548. package/node_modules/@hcengineering/measurements/types/index.d.ts.map +0 -1
  549. package/node_modules/@hcengineering/measurements/types/metrics.d.ts +0 -34
  550. package/node_modules/@hcengineering/measurements/types/metrics.d.ts.map +0 -1
  551. package/node_modules/@hcengineering/measurements/types/types.d.ts +0 -88
  552. package/node_modules/@hcengineering/measurements/types/types.d.ts.map +0 -1
  553. package/node_modules/@hcengineering/platform/types/__tests__/i18n.test.d.ts +0 -2
  554. package/node_modules/@hcengineering/platform/types/__tests__/i18n.test.d.ts.map +0 -1
  555. package/node_modules/@hcengineering/platform/types/__tests__/ident.test.d.ts +0 -2
  556. package/node_modules/@hcengineering/platform/types/__tests__/ident.test.d.ts.map +0 -1
  557. package/node_modules/@hcengineering/platform/types/__tests__/plugin.d.ts +0 -7
  558. package/node_modules/@hcengineering/platform/types/__tests__/plugin.d.ts.map +0 -1
  559. package/node_modules/@hcengineering/platform/types/__tests__/resource.test.d.ts +0 -2
  560. package/node_modules/@hcengineering/platform/types/__tests__/resource.test.d.ts.map +0 -1
  561. package/node_modules/@hcengineering/platform/types/event.d.ts +0 -39
  562. package/node_modules/@hcengineering/platform/types/event.d.ts.map +0 -1
  563. package/node_modules/@hcengineering/platform/types/i18n.d.ts +0 -28
  564. package/node_modules/@hcengineering/platform/types/i18n.d.ts.map +0 -1
  565. package/node_modules/@hcengineering/platform/types/ident.d.ts +0 -14
  566. package/node_modules/@hcengineering/platform/types/ident.d.ts.map +0 -1
  567. package/node_modules/@hcengineering/platform/types/index.d.ts +0 -19
  568. package/node_modules/@hcengineering/platform/types/index.d.ts.map +0 -1
  569. package/node_modules/@hcengineering/platform/types/metadata.d.ts +0 -38
  570. package/node_modules/@hcengineering/platform/types/metadata.d.ts.map +0 -1
  571. package/node_modules/@hcengineering/platform/types/platform.d.ts +0 -218
  572. package/node_modules/@hcengineering/platform/types/platform.d.ts.map +0 -1
  573. package/node_modules/@hcengineering/platform/types/resource.d.ts +0 -49
  574. package/node_modules/@hcengineering/platform/types/resource.d.ts.map +0 -1
  575. package/node_modules/@hcengineering/platform/types/status.d.ts +0 -60
  576. package/node_modules/@hcengineering/platform/types/status.d.ts.map +0 -1
  577. package/node_modules/@hcengineering/platform/types/testUtils.d.ts +0 -8
  578. package/node_modules/@hcengineering/platform/types/testUtils.d.ts.map +0 -1
  579. package/node_modules/@hcengineering/rank/types/__tests__/utils.test.d.ts +0 -2
  580. package/node_modules/@hcengineering/rank/types/__tests__/utils.test.d.ts.map +0 -1
  581. package/node_modules/@hcengineering/rank/types/index.d.ts +0 -3
  582. package/node_modules/@hcengineering/rank/types/index.d.ts.map +0 -1
  583. package/node_modules/@hcengineering/rank/types/types.d.ts +0 -2
  584. package/node_modules/@hcengineering/rank/types/types.d.ts.map +0 -1
  585. package/node_modules/@hcengineering/rank/types/utils.d.ts +0 -6
  586. package/node_modules/@hcengineering/rank/types/utils.d.ts.map +0 -1
  587. package/node_modules/@hcengineering/rpc/types/index.d.ts +0 -3
  588. package/node_modules/@hcengineering/rpc/types/index.d.ts.map +0 -1
  589. package/node_modules/@hcengineering/rpc/types/rpc.d.ts +0 -96
  590. package/node_modules/@hcengineering/rpc/types/rpc.d.ts.map +0 -1
  591. package/node_modules/@hcengineering/rpc/types/sliding.d.ts +0 -11
  592. package/node_modules/@hcengineering/rpc/types/sliding.d.ts.map +0 -1
  593. package/node_modules/@hcengineering/rpc/types/test/rateLimit.spec.d.ts +0 -2
  594. package/node_modules/@hcengineering/rpc/types/test/rateLimit.spec.d.ts.map +0 -1
  595. package/node_modules/@hcengineering/tags/types/analytics.d.ts +0 -5
  596. package/node_modules/@hcengineering/tags/types/analytics.d.ts.map +0 -1
  597. package/node_modules/@hcengineering/tags/types/index.d.ts +0 -105
  598. package/node_modules/@hcengineering/tags/types/index.d.ts.map +0 -1
  599. package/node_modules/@hcengineering/task/types/index.d.ts +0 -227
  600. package/node_modules/@hcengineering/task/types/index.d.ts.map +0 -1
  601. package/node_modules/@hcengineering/task/types/utils.d.ts +0 -61
  602. package/node_modules/@hcengineering/task/types/utils.d.ts.map +0 -1
  603. package/node_modules/@hcengineering/text/types/extensions.d.ts +0 -53
  604. package/node_modules/@hcengineering/text/types/extensions.d.ts.map +0 -1
  605. package/node_modules/@hcengineering/text/types/index.d.ts +0 -13
  606. package/node_modules/@hcengineering/text/types/index.d.ts.map +0 -1
  607. package/node_modules/@hcengineering/text/types/kit.d.ts +0 -12
  608. package/node_modules/@hcengineering/text/types/kit.d.ts.map +0 -1
  609. package/node_modules/@hcengineering/text/types/kits/common-kit.d.ts +0 -72
  610. package/node_modules/@hcengineering/text/types/kits/common-kit.d.ts.map +0 -1
  611. package/node_modules/@hcengineering/text/types/kits/server-kit.d.ts +0 -106
  612. package/node_modules/@hcengineering/text/types/kits/server-kit.d.ts.map +0 -1
  613. package/node_modules/@hcengineering/text/types/marks/code.d.ts +0 -8
  614. package/node_modules/@hcengineering/text/types/marks/code.d.ts.map +0 -1
  615. package/node_modules/@hcengineering/text/types/marks/colors.d.ts +0 -21
  616. package/node_modules/@hcengineering/text/types/marks/colors.d.ts.map +0 -1
  617. package/node_modules/@hcengineering/text/types/marks/inlineComment.d.ts +0 -5
  618. package/node_modules/@hcengineering/text/types/marks/inlineComment.d.ts.map +0 -1
  619. package/node_modules/@hcengineering/text/types/marks/noteBase.d.ts +0 -23
  620. package/node_modules/@hcengineering/text/types/marks/noteBase.d.ts.map +0 -1
  621. package/node_modules/@hcengineering/text/types/marks/qmsInlineCommentMark.d.ts +0 -6
  622. package/node_modules/@hcengineering/text/types/marks/qmsInlineCommentMark.d.ts.map +0 -1
  623. package/node_modules/@hcengineering/text/types/markup/__tests__/dsl.test.d.ts +0 -2
  624. package/node_modules/@hcengineering/text/types/markup/__tests__/dsl.test.d.ts.map +0 -1
  625. package/node_modules/@hcengineering/text/types/markup/__tests__/utils.test.d.ts +0 -5
  626. package/node_modules/@hcengineering/text/types/markup/__tests__/utils.test.d.ts.map +0 -1
  627. package/node_modules/@hcengineering/text/types/markup/utils.d.ts +0 -19
  628. package/node_modules/@hcengineering/text/types/markup/utils.d.ts.map +0 -1
  629. package/node_modules/@hcengineering/text/types/nodes/codeblock.d.ts +0 -12
  630. package/node_modules/@hcengineering/text/types/nodes/codeblock.d.ts.map +0 -1
  631. package/node_modules/@hcengineering/text/types/nodes/comment.d.ts +0 -6
  632. package/node_modules/@hcengineering/text/types/nodes/comment.d.ts.map +0 -1
  633. package/node_modules/@hcengineering/text/types/nodes/embed.d.ts +0 -3
  634. package/node_modules/@hcengineering/text/types/nodes/embed.d.ts.map +0 -1
  635. package/node_modules/@hcengineering/text/types/nodes/emoji.d.ts +0 -17
  636. package/node_modules/@hcengineering/text/types/nodes/emoji.d.ts.map +0 -1
  637. package/node_modules/@hcengineering/text/types/nodes/file.d.ts +0 -13
  638. package/node_modules/@hcengineering/text/types/nodes/file.d.ts.map +0 -1
  639. package/node_modules/@hcengineering/text/types/nodes/image.d.ts +0 -52
  640. package/node_modules/@hcengineering/text/types/nodes/image.d.ts.map +0 -1
  641. package/node_modules/@hcengineering/text/types/nodes/index.d.ts +0 -11
  642. package/node_modules/@hcengineering/text/types/nodes/index.d.ts.map +0 -1
  643. package/node_modules/@hcengineering/text/types/nodes/markdown.d.ts +0 -3
  644. package/node_modules/@hcengineering/text/types/nodes/markdown.d.ts.map +0 -1
  645. package/node_modules/@hcengineering/text/types/nodes/mermaid.d.ts +0 -4
  646. package/node_modules/@hcengineering/text/types/nodes/mermaid.d.ts.map +0 -1
  647. package/node_modules/@hcengineering/text/types/nodes/reference.d.ts +0 -18
  648. package/node_modules/@hcengineering/text/types/nodes/reference.d.ts.map +0 -1
  649. package/node_modules/@hcengineering/text/types/nodes/todo.d.ts +0 -3
  650. package/node_modules/@hcengineering/text/types/nodes/todo.d.ts.map +0 -1
  651. package/node_modules/@hcengineering/text/types/nodes/utils.d.ts +0 -6
  652. package/node_modules/@hcengineering/text/types/nodes/utils.d.ts.map +0 -1
  653. package/node_modules/@hcengineering/text/types/tiptapExtensions.d.ts +0 -28
  654. package/node_modules/@hcengineering/text/types/tiptapExtensions.d.ts.map +0 -1
  655. package/node_modules/@hcengineering/text-core/types/index.d.ts +0 -6
  656. package/node_modules/@hcengineering/text-core/types/index.d.ts.map +0 -1
  657. package/node_modules/@hcengineering/text-core/types/markup/__tests__/traverse.test.d.ts +0 -2
  658. package/node_modules/@hcengineering/text-core/types/markup/__tests__/traverse.test.d.ts.map +0 -1
  659. package/node_modules/@hcengineering/text-core/types/markup/__tests__/utils.test.d.ts +0 -2
  660. package/node_modules/@hcengineering/text-core/types/markup/__tests__/utils.test.d.ts.map +0 -1
  661. package/node_modules/@hcengineering/text-core/types/markup/dsl.d.ts +0 -25
  662. package/node_modules/@hcengineering/text-core/types/markup/dsl.d.ts.map +0 -1
  663. package/node_modules/@hcengineering/text-core/types/markup/model.d.ts +0 -74
  664. package/node_modules/@hcengineering/text-core/types/markup/model.d.ts.map +0 -1
  665. package/node_modules/@hcengineering/text-core/types/markup/reference.d.ts +0 -15
  666. package/node_modules/@hcengineering/text-core/types/markup/reference.d.ts.map +0 -1
  667. package/node_modules/@hcengineering/text-core/types/markup/traverse.d.ts +0 -6
  668. package/node_modules/@hcengineering/text-core/types/markup/traverse.d.ts.map +0 -1
  669. package/node_modules/@hcengineering/text-core/types/markup/utils.d.ts +0 -25
  670. package/node_modules/@hcengineering/text-core/types/markup/utils.d.ts.map +0 -1
  671. package/node_modules/@hcengineering/text-html/types/__tests__/html.test.d.ts +0 -2
  672. package/node_modules/@hcengineering/text-html/types/__tests__/html.test.d.ts.map +0 -1
  673. package/node_modules/@hcengineering/text-html/types/index.d.ts +0 -6
  674. package/node_modules/@hcengineering/text-html/types/index.d.ts.map +0 -1
  675. package/node_modules/@hcengineering/text-html/types/parser.d.ts +0 -10
  676. package/node_modules/@hcengineering/text-html/types/parser.d.ts.map +0 -1
  677. package/node_modules/@hcengineering/text-html/types/serializer.d.ts +0 -9
  678. package/node_modules/@hcengineering/text-html/types/serializer.d.ts.map +0 -1
  679. package/node_modules/@hcengineering/text-markdown/types/__tests__/markdown.test.d.ts +0 -9
  680. package/node_modules/@hcengineering/text-markdown/types/__tests__/markdown.test.d.ts.map +0 -1
  681. package/node_modules/@hcengineering/text-markdown/types/compare.d.ts +0 -10
  682. package/node_modules/@hcengineering/text-markdown/types/compare.d.ts.map +0 -1
  683. package/node_modules/@hcengineering/text-markdown/types/index.d.ts +0 -14
  684. package/node_modules/@hcengineering/text-markdown/types/index.d.ts.map +0 -1
  685. package/node_modules/@hcengineering/text-markdown/types/marks.d.ts +0 -8
  686. package/node_modules/@hcengineering/text-markdown/types/marks.d.ts.map +0 -1
  687. package/node_modules/@hcengineering/text-markdown/types/node.d.ts +0 -4
  688. package/node_modules/@hcengineering/text-markdown/types/node.d.ts.map +0 -1
  689. package/node_modules/@hcengineering/text-markdown/types/parser.d.ts +0 -50
  690. package/node_modules/@hcengineering/text-markdown/types/parser.d.ts.map +0 -1
  691. package/node_modules/@hcengineering/text-markdown/types/serializer.d.ts +0 -102
  692. package/node_modules/@hcengineering/text-markdown/types/serializer.d.ts.map +0 -1
  693. package/node_modules/@hcengineering/tracker/types/analytics.d.ts +0 -24
  694. package/node_modules/@hcengineering/tracker/types/analytics.d.ts.map +0 -1
  695. package/node_modules/@hcengineering/tracker/types/index.d.ts +0 -431
  696. package/node_modules/@hcengineering/tracker/types/index.d.ts.map +0 -1
@@ -154,8 +154,11 @@ class MemDb extends import_tx.TxProcessor {
154
154
  const key2 = !isReverse ? "docB" : "docA";
155
155
  const _class = !isReverse ? assoc.classB : assoc.classA;
156
156
  const relations = await this.findAll(import_component.default.class.Relation, { association: _id, [key]: doc._id });
157
- const objects = await this.findAll(_class, { _id: { $in: relations.map((r) => r[key2]) } });
158
- result[_id] = objects;
157
+ let objects = await this.findAll(_class, { _id: { $in: relations.map((r) => r[key2]) } });
158
+ if (association[2] !== void 0) {
159
+ objects = (0, import_utils.toFindResult)(await this.fillAssociations(objects, association[2]), objects.length);
160
+ }
161
+ result[`${_id}_${!isReverse ? "b" : "a"}`] = objects;
159
162
  }
160
163
  return result;
161
164
  }
@@ -204,6 +207,7 @@ class MemDb extends import_tx.TxProcessor {
204
207
  if (baseClass !== _class) {
205
208
  result = result.filter((r) => r[_class] !== void 0);
206
209
  }
210
+ if (options?.sort !== void 0) (0, import_query.resultSort)(result, options?.sort, _class, this.hierarchy, this);
207
211
  const total = result.length;
208
212
  result = result.slice(0, options?.limit);
209
213
  return (0, import_utils.toFindResult)(
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/memdb.ts"],
4
- "sourcesContent": ["//\n// Copyright \u00A9 2020 Anticrm Platform Contributors.\n//\n// Licensed under the Eclipse Public License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License. You may\n// obtain a copy of the License at https://www.eclipse.org/legal/epl-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n//\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n\nimport { PlatformError, Severity, Status } from '@hcengineering/platform'\nimport { type Lookup, type MeasureContext, type ReverseLookups, getObjectValue } from '.'\nimport type { Class, Doc, Ref } from './classes'\n\nimport core from './component'\nimport { type Hierarchy } from './hierarchy'\nimport { checkMixinKey, matchQuery, resultSort } from './query'\nimport type {\n AssociationQuery,\n DocumentQuery,\n FindOptions,\n FindResult,\n LookupData,\n Storage,\n TxResult,\n WithLookup\n} from './storage'\nimport type { Tx, TxCreateDoc, TxMixin, TxRemoveDoc, TxUpdateDoc } from './tx'\nimport { TxProcessor } from './tx'\nimport { toFindResult } from './utils'\n\n/**\n * @public\n */\nexport abstract class MemDb extends TxProcessor implements Storage {\n private readonly objectsByClass = new Map<Ref<Class<Doc>>, Map<Ref<Doc>, Doc>>()\n private readonly objectById = new Map<Ref<Doc>, Doc>()\n\n constructor (protected readonly hierarchy: Hierarchy) {\n super()\n }\n\n private getObjectsByClass (_class: Ref<Class<Doc>>): Map<Ref<Doc>, Doc> {\n const result = this.objectsByClass.get(_class)\n if (result === undefined) {\n const result = new Map<Ref<Doc>, Doc>()\n this.objectsByClass.set(_class, result)\n return result\n }\n return result\n }\n\n private cleanObjectByClass (_class: Ref<Class<Doc>>, _id: Ref<Doc>): void {\n const result = this.objectsByClass.get(_class)\n if (result !== undefined) {\n result.delete(_id)\n }\n }\n\n private getByIdQuery<T extends Doc>(query: DocumentQuery<T>, _class: Ref<Class<T>>): T[] {\n const result: T[] = []\n if (typeof query._id === 'string') {\n const obj = this.objectById.get(query._id) as T\n if (obj !== undefined && this.hierarchy.isDerived(obj._class, _class)) result.push(obj)\n } else if (query._id?.$in !== undefined) {\n const ids = new Set(query._id.$in)\n for (const id of ids) {\n const obj = this.objectById.get(id) as T\n if (obj !== undefined && this.hierarchy.isDerived(obj._class, _class)) result.push(obj)\n }\n }\n return result\n }\n\n getObject<T extends Doc>(_id: Ref<T>): T {\n const doc = this.objectById.get(_id)\n if (doc === undefined) {\n throw new PlatformError(new Status(Severity.ERROR, core.status.ObjectNotFound, { _id }))\n }\n return doc as T\n }\n\n findObject<T extends Doc>(_id: Ref<T>): T | undefined {\n const doc = this.objectById.get(_id)\n return doc as T\n }\n\n private async getLookupValue<T extends Doc>(\n _class: Ref<Class<T>>,\n doc: T,\n lookup: Lookup<T>,\n result: LookupData<T>\n ): Promise<void> {\n for (const key in lookup) {\n if (key === '_id') {\n await this.getReverseLookupValue(doc, lookup, result)\n continue\n }\n const value = (lookup as any)[key]\n const tkey = checkMixinKey(key, _class, this.hierarchy)\n if (Array.isArray(value)) {\n const [_class, nested] = value\n const objects = await this.findAll(_class, { _id: getObjectValue(tkey, doc) })\n ;(result as any)[key] = objects[0]\n const nestedResult = {}\n const parent = (result as any)[key]\n await this.getLookupValue(_class, parent, nested, nestedResult)\n Object.assign(parent, {\n $lookup: nestedResult\n })\n } else {\n const objects = await this.findAll(value, { _id: getObjectValue(tkey, doc) })\n ;(result as any)[key] = objects[0]\n }\n }\n }\n\n private async getReverseLookupValue<T extends Doc>(\n doc: T,\n lookup: ReverseLookups,\n result: LookupData<T>\n ): Promise<void> {\n for (const key in lookup._id) {\n const value = lookup._id[key]\n if (Array.isArray(value)) {\n const objects = await this.findAll(value[0], { [value[1]]: doc._id })\n ;(result as any)[key] = objects\n } else {\n const objects = await this.findAll(value, { attachedTo: doc._id })\n ;(result as any)[key] = objects\n }\n }\n }\n\n private async lookup<T extends Doc>(_class: Ref<Class<T>>, docs: T[], lookup: Lookup<T>): Promise<WithLookup<T>[]> {\n const withLookup: WithLookup<T>[] = []\n for (const doc of docs) {\n const result: LookupData<T> = {}\n await this.getLookupValue(_class, doc, lookup, result)\n withLookup.push(Object.assign({}, doc, { $lookup: result }))\n }\n return withLookup\n }\n\n private async fillAssociations<T extends Doc>(docs: T[], associations: AssociationQuery[]): Promise<WithLookup<T>[]> {\n const withLookup: WithLookup<T>[] = []\n for (const doc of docs) {\n const result = await this.getAssociationValue(doc, associations)\n withLookup.push(Object.assign({}, doc, { $associations: result }))\n }\n return withLookup\n }\n\n private async getAssociationValue<T extends Doc>(\n doc: T,\n associations: AssociationQuery[]\n ): Promise<Record<string, Doc[]>> {\n const result: Record<string, Doc[]> = {}\n for (const association of associations) {\n const _id = association[0]\n const assoc = this.findObject(_id)\n if (assoc === undefined) continue\n const isReverse = association[1] === -1\n const key = !isReverse ? 'docA' : 'docB'\n const key2 = !isReverse ? 'docB' : 'docA'\n const _class = !isReverse ? assoc.classB : assoc.classA\n const relations = await this.findAll(core.class.Relation, { association: _id, [key]: doc._id })\n const objects = await this.findAll(_class, { _id: { $in: relations.map((r) => r[key2]) } })\n result[_id] = objects\n }\n return result\n }\n\n async findAll<T extends Doc>(\n _class: Ref<Class<T>>,\n query: DocumentQuery<T>,\n options?: FindOptions<T>\n ): Promise<FindResult<T>> {\n let result: WithLookup<Doc>[]\n const baseClass = this.hierarchy.getBaseClass(_class)\n if (\n Object.prototype.hasOwnProperty.call(query, '_id') &&\n (typeof query._id === 'string' || query._id?.$in !== undefined || query._id === undefined || query._id === null)\n ) {\n result = this.getByIdQuery(query, baseClass)\n } else {\n result = Array.from(this.getObjectsByClass(baseClass).values())\n }\n\n result = matchQuery(result, query, _class, this.hierarchy, true)\n\n if (baseClass !== _class) {\n // We need to filter instances without mixin was set\n result = result.filter((r) => (r as any)[_class] !== undefined)\n }\n\n if (options?.lookup !== undefined) {\n result = await this.lookup(_class, result as T[], options.lookup)\n result = matchQuery(result, query, _class, this.hierarchy)\n }\n\n if (options?.associations !== undefined) {\n result = await this.fillAssociations(result, options.associations)\n }\n\n if (options?.sort !== undefined) resultSort(result, options?.sort, _class, this.hierarchy, this)\n const total = result.length\n result = result.slice(0, options?.limit)\n const tresult = this.hierarchy.clone(result) as WithLookup<T>[]\n const res = tresult.map((it) => this.hierarchy.updateLookupMixin(_class, it, options))\n return toFindResult(res, total)\n }\n\n async findOne<T extends Doc>(\n _class: Ref<Class<T>>,\n query: DocumentQuery<T>,\n options?: FindOptions<T>\n ): Promise<WithLookup<T> | undefined> {\n return (await this.findAll(_class, query, { ...options, limit: 1 }))[0]\n }\n\n /**\n * Only in model find without lookups and sorting.\n * Do not clone results, so be aware modifications are not allowed.\n */\n findAllSync<T extends Doc>(_class: Ref<Class<T>>, query: DocumentQuery<T>, options?: FindOptions<T>): FindResult<T> {\n let result: WithLookup<Doc>[]\n const baseClass = this.hierarchy.getBaseClass(_class)\n if (\n Object.prototype.hasOwnProperty.call(query, '_id') &&\n (typeof query._id === 'string' || query._id?.$in !== undefined || query._id === undefined || query._id === null)\n ) {\n result = this.getByIdQuery(query, baseClass)\n } else {\n result = Array.from(this.getObjectsByClass(baseClass).values())\n }\n\n result = matchQuery(result, query, _class, this.hierarchy, true)\n\n if (baseClass !== _class) {\n // We need to filter instances without mixin was set\n result = result.filter((r) => (r as any)[_class] !== undefined)\n }\n const total = result.length\n result = result.slice(0, options?.limit)\n\n return toFindResult(\n result.map((it) => {\n return baseClass !== _class ? this.hierarchy.as(it, _class) : it\n }) as WithLookup<T>[],\n total\n )\n }\n\n addDoc (doc: Doc): void {\n this.hierarchy.getAncestors(doc._class).forEach((_class) => {\n const arr = this.getObjectsByClass(_class)\n arr.set(doc._id, doc)\n })\n\n this.objectById.set(doc._id, doc)\n }\n\n delDoc (_id: Ref<Doc>): void {\n const doc = this.objectById.get(_id)\n if (doc === undefined) {\n throw new PlatformError(new Status(Severity.ERROR, core.status.ObjectNotFound, { _id }))\n }\n this.objectById.delete(_id)\n this.hierarchy.getAncestors(doc._class).forEach((_class) => {\n this.cleanObjectByClass(_class, _id)\n })\n }\n\n updateDoc (_id: Ref<Doc>, doc: Doc, update: TxUpdateDoc<Doc> | TxMixin<Doc, Doc>): void {\n // TODO: track updates on Contact to adjust memdb accounts?\n }\n}\n\n/**\n * Hold transactions\n *\n * @public\n */\nexport class TxDb extends MemDb {\n protected txCreateDoc (tx: TxCreateDoc<Doc>): Promise<TxResult> {\n throw new Error('Method not implemented.')\n }\n\n protected txUpdateDoc (tx: TxUpdateDoc<Doc>): Promise<TxResult> {\n throw new Error('Method not implemented.')\n }\n\n protected txRemoveDoc (tx: TxRemoveDoc<Doc>): Promise<TxResult> {\n throw new Error('Method not implemented.')\n }\n\n protected txMixin (tx: TxMixin<Doc, Doc>): Promise<TxResult> {\n throw new Error('Method not implemented.')\n }\n\n async tx (tx: Tx): Promise<TxResult[]> {\n this.addDoc(tx)\n return []\n }\n}\n\n/**\n * Hold model objects and classes\n *\n * @public\n */\nexport class ModelDb extends MemDb {\n protected override async txCreateDoc (tx: TxCreateDoc<Doc>): Promise<TxResult> {\n this.addDoc(TxProcessor.createDoc2Doc(tx))\n return {}\n }\n\n addTxes (ctx: MeasureContext, txes: Tx[], clone: boolean): void {\n for (const tx of txes) {\n switch (tx._class) {\n case core.class.TxCreateDoc:\n this.addDoc(TxProcessor.createDoc2Doc(tx as TxCreateDoc<Doc>, clone))\n break\n case core.class.TxUpdateDoc: {\n const cud = tx as TxUpdateDoc<Doc>\n const doc = this.findObject(cud.objectId)\n if (doc !== undefined) {\n this.updateDoc(cud.objectId, doc, cud)\n TxProcessor.updateDoc2Doc(doc, cud)\n } else {\n ctx.warn('no document found, failed to apply model transaction, skipping', {\n _id: tx._id,\n _class: tx._class,\n objectId: cud.objectId\n })\n }\n break\n }\n case core.class.TxRemoveDoc:\n try {\n this.delDoc((tx as TxRemoveDoc<Doc>).objectId)\n } catch (err: any) {\n ctx.warn('no document found, failed to apply model transaction, skipping', {\n _id: tx._id,\n _class: tx._class,\n objectId: (tx as TxRemoveDoc<Doc>).objectId\n })\n }\n break\n case core.class.TxMixin: {\n const mix = tx as TxMixin<Doc, Doc>\n const doc = this.findObject(mix.objectId)\n if (doc !== undefined) {\n this.updateDoc(mix.objectId, doc, mix)\n TxProcessor.updateMixin4Doc(doc, mix)\n } else {\n ctx.warn('no document found, failed to apply model transaction, skipping', {\n _id: tx._id,\n _class: tx._class,\n objectId: mix.objectId\n })\n }\n break\n }\n }\n }\n }\n\n protected async txUpdateDoc (tx: TxUpdateDoc<Doc>): Promise<TxResult> {\n try {\n const doc = this.getObject(tx.objectId) as any\n this.updateDoc(tx.objectId, doc, tx)\n TxProcessor.updateDoc2Doc(doc, tx)\n return tx.retrieve === true ? { object: doc } : {}\n } catch (err: any) {}\n return {}\n }\n\n protected async txRemoveDoc (tx: TxRemoveDoc<Doc>): Promise<TxResult> {\n try {\n this.delDoc(tx.objectId)\n } catch (err: any) {}\n return {}\n }\n\n // TODO: process ancessor mixins\n protected async txMixin (tx: TxMixin<Doc, Doc>): Promise<TxResult> {\n const doc = this.getObject(tx.objectId) as any\n this.updateDoc(tx.objectId, doc, tx)\n TxProcessor.updateMixin4Doc(doc, tx)\n return {}\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["//\n// Copyright \u00A9 2020 Anticrm Platform Contributors.\n//\n// Licensed under the Eclipse Public License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License. You may\n// obtain a copy of the License at https://www.eclipse.org/legal/epl-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n//\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n\nimport { PlatformError, Severity, Status } from '@hcengineering/platform'\nimport { type Lookup, type MeasureContext, type ReverseLookups, getObjectValue } from '.'\nimport type { Class, Doc, Ref } from './classes'\n\nimport core from './component'\nimport { type Hierarchy } from './hierarchy'\nimport { checkMixinKey, matchQuery, resultSort } from './query'\nimport type {\n AssociationQuery,\n DocumentQuery,\n FindOptions,\n FindResult,\n LookupData,\n Storage,\n TxResult,\n WithLookup\n} from './storage'\nimport type { Tx, TxCreateDoc, TxMixin, TxRemoveDoc, TxUpdateDoc } from './tx'\nimport { TxProcessor } from './tx'\nimport { toFindResult } from './utils'\n\n/**\n * @public\n */\nexport abstract class MemDb extends TxProcessor implements Storage {\n private readonly objectsByClass = new Map<Ref<Class<Doc>>, Map<Ref<Doc>, Doc>>()\n private readonly objectById = new Map<Ref<Doc>, Doc>()\n\n constructor (protected readonly hierarchy: Hierarchy) {\n super()\n }\n\n private getObjectsByClass (_class: Ref<Class<Doc>>): Map<Ref<Doc>, Doc> {\n const result = this.objectsByClass.get(_class)\n if (result === undefined) {\n const result = new Map<Ref<Doc>, Doc>()\n this.objectsByClass.set(_class, result)\n return result\n }\n return result\n }\n\n private cleanObjectByClass (_class: Ref<Class<Doc>>, _id: Ref<Doc>): void {\n const result = this.objectsByClass.get(_class)\n if (result !== undefined) {\n result.delete(_id)\n }\n }\n\n private getByIdQuery<T extends Doc>(query: DocumentQuery<T>, _class: Ref<Class<T>>): T[] {\n const result: T[] = []\n if (typeof query._id === 'string') {\n const obj = this.objectById.get(query._id) as T\n if (obj !== undefined && this.hierarchy.isDerived(obj._class, _class)) result.push(obj)\n } else if (query._id?.$in !== undefined) {\n const ids = new Set(query._id.$in)\n for (const id of ids) {\n const obj = this.objectById.get(id) as T\n if (obj !== undefined && this.hierarchy.isDerived(obj._class, _class)) result.push(obj)\n }\n }\n return result\n }\n\n getObject<T extends Doc>(_id: Ref<T>): T {\n const doc = this.objectById.get(_id)\n if (doc === undefined) {\n throw new PlatformError(new Status(Severity.ERROR, core.status.ObjectNotFound, { _id }))\n }\n return doc as T\n }\n\n findObject<T extends Doc>(_id: Ref<T>): T | undefined {\n const doc = this.objectById.get(_id)\n return doc as T\n }\n\n private async getLookupValue<T extends Doc>(\n _class: Ref<Class<T>>,\n doc: T,\n lookup: Lookup<T>,\n result: LookupData<T>\n ): Promise<void> {\n for (const key in lookup) {\n if (key === '_id') {\n await this.getReverseLookupValue(doc, lookup, result)\n continue\n }\n const value = (lookup as any)[key]\n const tkey = checkMixinKey(key, _class, this.hierarchy)\n if (Array.isArray(value)) {\n const [_class, nested] = value\n const objects = await this.findAll(_class, { _id: getObjectValue(tkey, doc) })\n ;(result as any)[key] = objects[0]\n const nestedResult = {}\n const parent = (result as any)[key]\n await this.getLookupValue(_class, parent, nested, nestedResult)\n Object.assign(parent, {\n $lookup: nestedResult\n })\n } else {\n const objects = await this.findAll(value, { _id: getObjectValue(tkey, doc) })\n ;(result as any)[key] = objects[0]\n }\n }\n }\n\n private async getReverseLookupValue<T extends Doc>(\n doc: T,\n lookup: ReverseLookups,\n result: LookupData<T>\n ): Promise<void> {\n for (const key in lookup._id) {\n const value = lookup._id[key]\n if (Array.isArray(value)) {\n const objects = await this.findAll(value[0], { [value[1]]: doc._id })\n ;(result as any)[key] = objects\n } else {\n const objects = await this.findAll(value, { attachedTo: doc._id })\n ;(result as any)[key] = objects\n }\n }\n }\n\n private async lookup<T extends Doc>(_class: Ref<Class<T>>, docs: T[], lookup: Lookup<T>): Promise<WithLookup<T>[]> {\n const withLookup: WithLookup<T>[] = []\n for (const doc of docs) {\n const result: LookupData<T> = {}\n await this.getLookupValue(_class, doc, lookup, result)\n withLookup.push(Object.assign({}, doc, { $lookup: result }))\n }\n return withLookup\n }\n\n private async fillAssociations<T extends Doc>(docs: T[], associations: AssociationQuery[]): Promise<WithLookup<T>[]> {\n const withLookup: WithLookup<T>[] = []\n for (const doc of docs) {\n const result = await this.getAssociationValue(doc, associations)\n withLookup.push(Object.assign({}, doc, { $associations: result }))\n }\n return withLookup\n }\n\n private async getAssociationValue<T extends Doc>(\n doc: T,\n associations: AssociationQuery[]\n ): Promise<Record<string, WithLookup<Doc>[]>> {\n const result: Record<string, Doc[]> = {}\n for (const association of associations) {\n const _id = association[0]\n const assoc = this.findObject(_id)\n if (assoc === undefined) continue\n const isReverse = association[1] === -1\n const key = !isReverse ? 'docA' : 'docB'\n const key2 = !isReverse ? 'docB' : 'docA'\n const _class = !isReverse ? assoc.classB : assoc.classA\n const relations = await this.findAll(core.class.Relation, { association: _id, [key]: doc._id })\n let objects = await this.findAll(_class, { _id: { $in: relations.map((r) => r[key2]) } })\n if (association[2] !== undefined) {\n objects = toFindResult(await this.fillAssociations(objects, association[2]), objects.length)\n }\n result[`${_id}_${!isReverse ? 'b' : 'a'}`] = objects\n }\n return result\n }\n\n async findAll<T extends Doc>(\n _class: Ref<Class<T>>,\n query: DocumentQuery<T>,\n options?: FindOptions<T>\n ): Promise<FindResult<T>> {\n let result: WithLookup<Doc>[]\n const baseClass = this.hierarchy.getBaseClass(_class)\n if (\n Object.prototype.hasOwnProperty.call(query, '_id') &&\n (typeof query._id === 'string' || query._id?.$in !== undefined || query._id === undefined || query._id === null)\n ) {\n result = this.getByIdQuery(query, baseClass)\n } else {\n result = Array.from(this.getObjectsByClass(baseClass).values())\n }\n\n result = matchQuery(result, query, _class, this.hierarchy, true)\n\n if (baseClass !== _class) {\n // We need to filter instances without mixin was set\n result = result.filter((r) => (r as any)[_class] !== undefined)\n }\n\n if (options?.lookup !== undefined) {\n result = await this.lookup(_class, result as T[], options.lookup)\n result = matchQuery(result, query, _class, this.hierarchy)\n }\n\n if (options?.associations !== undefined) {\n result = await this.fillAssociations(result, options.associations)\n }\n\n if (options?.sort !== undefined) resultSort(result, options?.sort, _class, this.hierarchy, this)\n const total = result.length\n result = result.slice(0, options?.limit)\n const tresult = this.hierarchy.clone(result) as WithLookup<T>[]\n const res = tresult.map((it) => this.hierarchy.updateLookupMixin(_class, it, options))\n return toFindResult(res, total)\n }\n\n async findOne<T extends Doc>(\n _class: Ref<Class<T>>,\n query: DocumentQuery<T>,\n options?: FindOptions<T>\n ): Promise<WithLookup<T> | undefined> {\n return (await this.findAll(_class, query, { ...options, limit: 1 }))[0]\n }\n\n /**\n * Only in model find without lookups and sorting.\n * Do not clone results, so be aware modifications are not allowed.\n */\n findAllSync<T extends Doc>(_class: Ref<Class<T>>, query: DocumentQuery<T>, options?: FindOptions<T>): FindResult<T> {\n let result: WithLookup<Doc>[]\n const baseClass = this.hierarchy.getBaseClass(_class)\n if (\n Object.prototype.hasOwnProperty.call(query, '_id') &&\n (typeof query._id === 'string' || query._id?.$in !== undefined || query._id === undefined || query._id === null)\n ) {\n result = this.getByIdQuery(query, baseClass)\n } else {\n result = Array.from(this.getObjectsByClass(baseClass).values())\n }\n\n result = matchQuery(result, query, _class, this.hierarchy, true)\n\n if (baseClass !== _class) {\n // We need to filter instances without mixin was set\n result = result.filter((r) => (r as any)[_class] !== undefined)\n }\n if (options?.sort !== undefined) resultSort(result, options?.sort, _class, this.hierarchy, this)\n const total = result.length\n result = result.slice(0, options?.limit)\n\n return toFindResult(\n result.map((it) => {\n return baseClass !== _class ? this.hierarchy.as(it, _class) : it\n }) as WithLookup<T>[],\n total\n )\n }\n\n addDoc (doc: Doc): void {\n this.hierarchy.getAncestors(doc._class).forEach((_class) => {\n const arr = this.getObjectsByClass(_class)\n arr.set(doc._id, doc)\n })\n\n this.objectById.set(doc._id, doc)\n }\n\n delDoc (_id: Ref<Doc>): void {\n const doc = this.objectById.get(_id)\n if (doc === undefined) {\n throw new PlatformError(new Status(Severity.ERROR, core.status.ObjectNotFound, { _id }))\n }\n this.objectById.delete(_id)\n this.hierarchy.getAncestors(doc._class).forEach((_class) => {\n this.cleanObjectByClass(_class, _id)\n })\n }\n\n updateDoc (_id: Ref<Doc>, doc: Doc, update: TxUpdateDoc<Doc> | TxMixin<Doc, Doc>): void {\n // TODO: track updates on Contact to adjust memdb accounts?\n }\n}\n\n/**\n * Hold transactions\n *\n * @public\n */\nexport class TxDb extends MemDb {\n protected txCreateDoc (tx: TxCreateDoc<Doc>): Promise<TxResult> {\n throw new Error('Method not implemented.')\n }\n\n protected txUpdateDoc (tx: TxUpdateDoc<Doc>): Promise<TxResult> {\n throw new Error('Method not implemented.')\n }\n\n protected txRemoveDoc (tx: TxRemoveDoc<Doc>): Promise<TxResult> {\n throw new Error('Method not implemented.')\n }\n\n protected txMixin (tx: TxMixin<Doc, Doc>): Promise<TxResult> {\n throw new Error('Method not implemented.')\n }\n\n async tx (tx: Tx): Promise<TxResult[]> {\n this.addDoc(tx)\n return []\n }\n}\n\n/**\n * Hold model objects and classes\n *\n * @public\n */\nexport class ModelDb extends MemDb {\n protected override async txCreateDoc (tx: TxCreateDoc<Doc>): Promise<TxResult> {\n this.addDoc(TxProcessor.createDoc2Doc(tx))\n return {}\n }\n\n addTxes (ctx: MeasureContext, txes: Tx[], clone: boolean): void {\n for (const tx of txes) {\n switch (tx._class) {\n case core.class.TxCreateDoc:\n this.addDoc(TxProcessor.createDoc2Doc(tx as TxCreateDoc<Doc>, clone))\n break\n case core.class.TxUpdateDoc: {\n const cud = tx as TxUpdateDoc<Doc>\n const doc = this.findObject(cud.objectId)\n if (doc !== undefined) {\n this.updateDoc(cud.objectId, doc, cud)\n TxProcessor.updateDoc2Doc(doc, cud)\n } else {\n ctx.warn('no document found, failed to apply model transaction, skipping', {\n _id: tx._id,\n _class: tx._class,\n objectId: cud.objectId\n })\n }\n break\n }\n case core.class.TxRemoveDoc:\n try {\n this.delDoc((tx as TxRemoveDoc<Doc>).objectId)\n } catch (err: any) {\n ctx.warn('no document found, failed to apply model transaction, skipping', {\n _id: tx._id,\n _class: tx._class,\n objectId: (tx as TxRemoveDoc<Doc>).objectId\n })\n }\n break\n case core.class.TxMixin: {\n const mix = tx as TxMixin<Doc, Doc>\n const doc = this.findObject(mix.objectId)\n if (doc !== undefined) {\n this.updateDoc(mix.objectId, doc, mix)\n TxProcessor.updateMixin4Doc(doc, mix)\n } else {\n ctx.warn('no document found, failed to apply model transaction, skipping', {\n _id: tx._id,\n _class: tx._class,\n objectId: mix.objectId\n })\n }\n break\n }\n }\n }\n }\n\n protected async txUpdateDoc (tx: TxUpdateDoc<Doc>): Promise<TxResult> {\n try {\n const doc = this.getObject(tx.objectId) as any\n this.updateDoc(tx.objectId, doc, tx)\n TxProcessor.updateDoc2Doc(doc, tx)\n return tx.retrieve === true ? { object: doc } : {}\n } catch (err: any) {}\n return {}\n }\n\n protected async txRemoveDoc (tx: TxRemoveDoc<Doc>): Promise<TxResult> {\n try {\n this.delDoc(tx.objectId)\n } catch (err: any) {}\n return {}\n }\n\n // TODO: process ancessor mixins\n protected async txMixin (tx: TxMixin<Doc, Doc>): Promise<TxResult> {\n const doc = this.getObject(tx.objectId) as any\n this.updateDoc(tx.objectId, doc, tx)\n TxProcessor.updateMixin4Doc(doc, tx)\n return {}\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["result", "core", "_class"]
7
7
  }
@@ -373,6 +373,17 @@ class ApplyOperations extends TxOperations {
373
373
  if (typeof window === "object" && window !== null && this.measureName != null) {
374
374
  console.log(`measure ${this.measureName}`, dnow - st, "server time", result.serverTime);
375
375
  }
376
+ if (!result.success) {
377
+ console.warn("ops.commit() failed", {
378
+ scope: this.scope,
379
+ measureName: this.measureName,
380
+ matchCount: this.matches.length,
381
+ notMatchCount: this.notMatches.length,
382
+ txCount: this.txes.length,
383
+ matches: this.matches.map((m) => ({ _class: m._class, query: m.query })),
384
+ notMatches: this.notMatches.map((m) => ({ _class: m._class, query: m.query }))
385
+ });
386
+ }
376
387
  this.txes = [];
377
388
  return {
378
389
  result: result.success,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/operations.ts"],
4
- "sourcesContent": ["import { Analytics } from '@hcengineering/analytics'\nimport { deepEqual } from 'fast-equals'\nimport {\n type DocumentUpdate,\n DOMAIN_MODEL,\n Hierarchy,\n type MixinData,\n type MixinUpdate,\n type ModelDb,\n platformNow,\n toFindResult\n} from '.'\nimport type {\n AnyAttribute,\n AttachedData,\n AttachedDoc,\n Class,\n Data,\n Doc,\n Mixin,\n OperationDomain,\n PersonId,\n Ref,\n Space,\n Timestamp\n} from './classes'\nimport { type Client } from './client'\nimport core from './component'\nimport type {\n DocumentQuery,\n DomainParams,\n DomainResult,\n FindOptions,\n FindResult,\n SearchOptions,\n SearchQuery,\n SearchResult,\n TxResult,\n WithLookup\n} from './storage'\nimport { type DocumentClassQuery, type Tx, type TxApplyResult, type TxCUD, TxFactory, TxProcessor } from './tx'\n\n/**\n * @public\n *\n * High Level operations with client, will create low level transactions.\n *\n * `notify` is not supported by TxOperations.\n */\nexport class TxOperations implements Omit<Client, 'notify'> {\n readonly txFactory: TxFactory\n\n constructor (\n readonly client: Client,\n readonly user: PersonId,\n readonly isDerived: boolean = false\n ) {\n this.txFactory = new TxFactory(user, isDerived)\n }\n\n getHierarchy (): Hierarchy {\n return this.client.getHierarchy()\n }\n\n getModel (): ModelDb {\n return this.client.getModel()\n }\n\n async close (): Promise<void> {\n await this.client.close()\n }\n\n findAll<T extends Doc>(\n _class: Ref<Class<T>>,\n query: DocumentQuery<T>,\n options?: FindOptions<T> | undefined\n ): Promise<FindResult<T>> {\n return this.client.findAll(_class, query, options)\n }\n\n findOne<T extends Doc>(\n _class: Ref<Class<T>>,\n query: DocumentQuery<T>,\n options?: FindOptions<T> | undefined\n ): Promise<WithLookup<T> | undefined> {\n return this.client.findOne(_class, query, options)\n }\n\n domainRequest<T>(domain: OperationDomain, params: DomainParams): Promise<DomainResult<T>> {\n return this.client.domainRequest(domain, params)\n }\n\n searchFulltext (query: SearchQuery, options: SearchOptions): Promise<SearchResult> {\n return this.client.searchFulltext(query, options)\n }\n\n tx (tx: Tx): Promise<TxResult> {\n return this.client.tx(tx)\n }\n\n async createDoc<T extends Doc>(\n _class: Ref<Class<T>>,\n space: Ref<Space>,\n attributes: Data<T>,\n id?: Ref<T>,\n modifiedOn?: Timestamp,\n modifiedBy?: PersonId\n ): Promise<Ref<T>> {\n const hierarchy = this.client.getHierarchy()\n if (hierarchy.isDerived(_class, core.class.AttachedDoc)) {\n throw new Error('createDoc cannot be used for objects inherited from AttachedDoc')\n }\n if (hierarchy.findDomain(_class) === DOMAIN_MODEL && space !== core.space.Model) {\n throw new Error('createDoc cannot be called for DOMAIN_MODEL classes with non-model space')\n }\n const tx = this.txFactory.createTxCreateDoc(_class, space, attributes, id, modifiedOn, modifiedBy)\n await this.tx(tx)\n return tx.objectId\n }\n\n async addCollection<T extends Doc, P extends AttachedDoc>(\n _class: Ref<Class<P>>,\n space: Ref<Space>,\n attachedTo: Ref<T>,\n attachedToClass: Ref<Class<T>>,\n collection: Extract<keyof T, string> | string,\n attributes: AttachedData<P>,\n id?: Ref<P>,\n modifiedOn?: Timestamp,\n modifiedBy?: PersonId\n ): Promise<Ref<P>> {\n const tx = this.txFactory.createTxCollectionCUD<T, P>(\n attachedToClass,\n attachedTo,\n space,\n collection,\n this.txFactory.createTxCreateDoc<P>(_class, space, attributes as unknown as Data<P>, id, modifiedOn, modifiedBy),\n modifiedOn,\n modifiedBy\n )\n await this.tx(tx)\n return tx.objectId as unknown as Ref<P>\n }\n\n async updateCollection<T extends Doc, P extends AttachedDoc>(\n _class: Ref<Class<P>>,\n space: Ref<Space>,\n objectId: Ref<P>,\n attachedTo: Ref<T>,\n attachedToClass: Ref<Class<T>>,\n collection: Extract<keyof T, string> | string,\n operations: DocumentUpdate<P>,\n retrieve?: boolean,\n modifiedOn?: Timestamp,\n modifiedBy?: PersonId\n ): Promise<Ref<T>> {\n const tx = this.txFactory.createTxCollectionCUD(\n attachedToClass,\n attachedTo,\n space,\n collection,\n this.txFactory.createTxUpdateDoc(_class, space, objectId, operations, retrieve, modifiedOn, modifiedBy),\n modifiedOn,\n modifiedBy\n )\n await this.tx(tx)\n return attachedTo\n }\n\n async removeCollection<T extends Doc, P extends AttachedDoc>(\n _class: Ref<Class<P>>,\n space: Ref<Space>,\n objectId: Ref<P>,\n attachedTo: Ref<T>,\n attachedToClass: Ref<Class<T>>,\n collection: Extract<keyof T, string> | string,\n modifiedOn?: Timestamp,\n modifiedBy?: PersonId\n ): Promise<Ref<T>> {\n const tx = this.txFactory.createTxCollectionCUD(\n attachedToClass,\n attachedTo,\n space,\n collection,\n this.txFactory.createTxRemoveDoc(_class, space, objectId, modifiedOn, modifiedBy),\n modifiedOn,\n modifiedBy\n )\n await this.tx(tx)\n return attachedTo\n }\n\n updateDoc<T extends Doc>(\n _class: Ref<Class<T>>,\n space: Ref<Space>,\n objectId: Ref<T>,\n operations: DocumentUpdate<T>,\n retrieve?: boolean,\n modifiedOn?: Timestamp,\n modifiedBy?: PersonId\n ): Promise<TxResult> {\n const tx = this.txFactory.createTxUpdateDoc(_class, space, objectId, operations, retrieve, modifiedOn, modifiedBy)\n return this.tx(tx)\n }\n\n removeDoc<T extends Doc>(\n _class: Ref<Class<T>>,\n space: Ref<Space>,\n objectId: Ref<T>,\n modifiedOn?: Timestamp,\n modifiedBy?: PersonId\n ): Promise<TxResult> {\n const tx = this.txFactory.createTxRemoveDoc(_class, space, objectId, modifiedOn, modifiedBy)\n return this.tx(tx)\n }\n\n createMixin<D extends Doc, M extends D>(\n objectId: Ref<D>,\n objectClass: Ref<Class<D>>,\n objectSpace: Ref<Space>,\n mixin: Ref<Mixin<M>>,\n attributes: MixinData<D, M>,\n modifiedOn?: Timestamp,\n modifiedBy?: PersonId\n ): Promise<TxResult> {\n const tx = this.txFactory.createTxMixin(\n objectId,\n objectClass,\n objectSpace,\n mixin,\n attributes,\n modifiedOn,\n modifiedBy\n )\n return this.tx(tx)\n }\n\n updateMixin<D extends Doc, M extends D>(\n objectId: Ref<D>,\n objectClass: Ref<Class<D>>,\n objectSpace: Ref<Space>,\n mixin: Ref<Mixin<M>>,\n attributes: MixinUpdate<D, M>,\n modifiedOn?: Timestamp,\n modifiedBy?: PersonId\n ): Promise<TxResult> {\n const tx = this.txFactory.createTxMixin(\n objectId,\n objectClass,\n objectSpace,\n mixin,\n attributes,\n modifiedOn,\n modifiedBy\n )\n return this.tx(tx)\n }\n\n async update<T extends Doc>(\n doc: T,\n update: DocumentUpdate<T>,\n retrieve?: boolean,\n modifiedOn?: Timestamp,\n modifiedBy?: PersonId\n ): Promise<TxResult> {\n const hierarchy = this.client.getHierarchy()\n const mixClass = Hierarchy.mixinOrClass(doc)\n if (hierarchy.isMixin(mixClass)) {\n const baseClass = hierarchy.getBaseClass(doc._class)\n\n const byClass = splitMixinUpdate(hierarchy, update, mixClass, baseClass)\n const ops = this.apply(doc._id)\n for (const it of byClass) {\n if (hierarchy.isMixin(it[0])) {\n await ops.updateMixin(doc._id, baseClass, doc.space, it[0], it[1], modifiedOn, modifiedBy)\n } else {\n if (hierarchy.isDerived(it[0], core.class.AttachedDoc)) {\n const adoc = doc as unknown as AttachedDoc\n return await this.updateCollection(\n it[0],\n doc.space,\n adoc._id,\n adoc.attachedTo,\n adoc.attachedToClass,\n adoc.collection,\n it[1],\n retrieve,\n modifiedOn,\n modifiedBy\n )\n }\n await ops.updateDoc(it[0], doc.space, doc._id, it[1], retrieve, modifiedOn, modifiedBy)\n }\n }\n return await ops.commit()\n }\n if (hierarchy.isDerived(doc._class, core.class.AttachedDoc)) {\n const adoc = doc as unknown as AttachedDoc\n return await this.updateCollection(\n doc._class,\n doc.space,\n adoc._id,\n adoc.attachedTo,\n adoc.attachedToClass,\n adoc.collection,\n update,\n retrieve,\n modifiedOn,\n modifiedBy\n )\n }\n return await this.updateDoc(doc._class, doc.space, doc._id, update, retrieve, modifiedOn, modifiedBy)\n }\n\n remove<T extends Doc>(doc: T, modifiedOn?: Timestamp, modifiedBy?: PersonId): Promise<TxResult> {\n if (this.client.getHierarchy().isDerived(doc._class, core.class.AttachedDoc)) {\n const adoc = doc as unknown as AttachedDoc\n return this.removeCollection(\n doc._class,\n doc.space,\n adoc._id,\n adoc.attachedTo,\n adoc.attachedToClass,\n adoc.collection,\n modifiedOn,\n modifiedBy\n )\n }\n return this.removeDoc(doc._class, doc.space, doc._id)\n }\n\n apply (scope?: string, measure?: string, derived?: boolean): ApplyOperations {\n return new ApplyOperations(this, scope, measure, derived ?? this.isDerived)\n }\n\n async diffUpdate<T extends Doc = Doc>(\n doc: T,\n update: T | Data<T> | DocumentUpdate<T>,\n date?: Timestamp,\n account?: PersonId\n ): Promise<T> {\n const documentUpdate = getDiffUpdate(doc, update)\n if (Object.keys(documentUpdate).length > 0) {\n await this.update(doc, documentUpdate, false, date ?? Date.now(), account)\n TxProcessor.applyUpdate(doc, documentUpdate)\n }\n return doc\n }\n\n async mixinDiffUpdate (\n doc: Doc,\n raw: Doc | Data<Doc>,\n mixin: Ref<Class<Mixin<Doc>>>,\n modifiedBy: PersonId,\n modifiedOn: Timestamp\n ): Promise<Doc> {\n // We need to update fields if they are different.\n\n if (!this.getHierarchy().hasMixin(doc, mixin)) {\n await this.createMixin(doc._id, doc._class, doc.space, mixin, raw as MixinData<Doc, Doc>, modifiedOn, modifiedBy)\n TxProcessor.applyUpdate(this.getHierarchy().as(doc, mixin), raw)\n return doc\n }\n\n const documentUpdate: MixinUpdate<Doc, Doc> = {}\n for (const [k, v] of Object.entries(raw)) {\n if (['_class', '_id', 'modifiedBy', 'modifiedOn', 'space', 'attachedTo', 'attachedToClass'].includes(k)) {\n continue\n }\n const dv = (doc as any)[k]\n if (!deepEqual(dv, v) && v != null) {\n ;(documentUpdate as any)[k] = v\n }\n }\n if (Object.keys(documentUpdate).length > 0) {\n await this.updateMixin(doc._id, doc._class, doc.space, mixin, documentUpdate, modifiedOn, modifiedBy)\n TxProcessor.applyUpdate(this.getHierarchy().as(doc, mixin), documentUpdate)\n }\n return doc\n }\n}\n\nexport function getDiffUpdate<T extends Doc> (doc: T, update: T | Data<T> | DocumentUpdate<T>): DocumentUpdate<T> {\n // We need to update fields if they are different.\n const documentUpdate: DocumentUpdate<T> = {}\n for (const [k, v] of Object.entries(update)) {\n if (['_class', '_id', 'modifiedBy', 'modifiedOn', 'space', 'attachedTo', 'attachedToClass'].includes(k)) {\n continue\n }\n const dv = (doc as any)[k]\n if (!deepEqual(dv, v) && v !== undefined) {\n ;(documentUpdate as any)[k] = v\n }\n }\n return documentUpdate\n}\n\nexport function splitMixinUpdate<T extends Doc> (\n hierarchy: Hierarchy,\n update: DocumentUpdate<T>,\n mixClass: Ref<Class<T>>,\n baseClass: Ref<Class<T>>\n): Map<Ref<Class<Doc>>, DocumentUpdate<T>> {\n const attributes = hierarchy.getAllAttributes(mixClass)\n\n const updateAttrs = Object.fromEntries(\n Object.entries(update).filter((it) => !it[0].startsWith('$'))\n ) as DocumentUpdate<T>\n const updateOps = Object.fromEntries(\n Object.entries(update).filter((it) => it[0].startsWith('$'))\n ) as DocumentUpdate<T>\n\n const result: Map<Ref<Class<Doc>>, DocumentUpdate<T>> = splitObjectAttributes(\n hierarchy,\n updateAttrs,\n baseClass,\n attributes\n )\n\n for (const [key, value] of Object.entries(updateOps)) {\n const updates = splitObjectAttributes(hierarchy, value as object, baseClass, attributes)\n\n for (const [opsClass, opsUpdate] of updates) {\n const upd: DocumentUpdate<T> = result.get(opsClass) ?? {}\n result.set(opsClass, { ...upd, [key]: opsUpdate })\n }\n }\n\n return result\n}\n\nfunction splitObjectAttributes<T extends object> (\n hierarchy: Hierarchy,\n obj: T,\n objClass: Ref<Class<Doc>>,\n attributes: Map<string, AnyAttribute>\n): Map<Ref<Class<Doc>>, object> {\n const result = new Map<Ref<Class<Doc>>, any>()\n for (const [key, value] of Object.entries(obj)) {\n const attributeOf = attributes.get(key)?.attributeOf\n const clazz = attributeOf !== undefined && hierarchy.isMixin(attributeOf) ? attributeOf : objClass\n result.set(clazz, { ...(result.get(clazz) ?? {}), [key]: value })\n }\n\n return result\n}\n\nexport interface CommitResult {\n result: boolean\n time: number\n serverTime: number\n}\n\n/**\n * @public\n *\n * Builder for ApplyOperation, with same syntax as TxOperations.\n *\n * Will send real command on commit and will return boolean of operation success.\n */\nexport class ApplyOperations extends TxOperations {\n txes: TxCUD<Doc>[] = []\n matches: DocumentClassQuery<Doc>[] = []\n notMatches: DocumentClassQuery<Doc>[] = []\n constructor (\n readonly ops: TxOperations,\n readonly scope?: string,\n readonly measureName?: string,\n isDerived?: boolean\n ) {\n const txClient: Client = {\n getHierarchy: () => ops.client.getHierarchy(),\n getModel: () => ops.client.getModel(),\n close: () => ops.client.close(),\n findOne: (_class, query, options?) => ops.client.findOne(_class, query, options),\n findAll: (_class, query, options?) => ops.client.findAll(_class, query, options),\n searchFulltext: (query, options) => ops.client.searchFulltext(query, options),\n domainRequest: (domain, params) => ops.client.domainRequest(domain, params),\n tx: async (tx): Promise<TxResult> => {\n if (TxProcessor.isExtendsCUD(tx._class)) {\n this.txes.push(tx as TxCUD<Doc>)\n }\n return {}\n }\n }\n super(txClient, ops.user, isDerived ?? false)\n }\n\n match<T extends Doc>(_class: Ref<Class<T>>, query: DocumentQuery<T>): ApplyOperations {\n this.matches.push({ _class, query })\n return this\n }\n\n notMatch<T extends Doc>(_class: Ref<Class<T>>, query: DocumentQuery<T>): ApplyOperations {\n this.notMatches.push({ _class, query })\n return this\n }\n\n async commit (notify: boolean = true, extraNotify: Ref<Class<Doc>>[] = []): Promise<CommitResult> {\n if (\n this.txes.length === 1 &&\n this.matches.length === 0 &&\n this.notMatches.length === 0 &&\n this.measureName == null\n ) {\n const st = platformNow()\n // Individual update, no need for apply\n await this.ops.tx(this.txes[0])\n const time = platformNow() - st\n this.txes = []\n return {\n result: true,\n time,\n serverTime: time\n }\n }\n if (this.txes.length > 0) {\n const st = platformNow()\n const aop = this.ops.txFactory.createTxApplyIf(\n core.space.Tx,\n this.scope,\n this.matches,\n this.notMatches,\n this.txes,\n this.measureName,\n notify,\n extraNotify\n )\n const result = (await this.ops.tx(aop)) as TxApplyResult\n const dnow = platformNow()\n if (typeof window === 'object' && window !== null && this.measureName != null) {\n console.log(`measure ${this.measureName}`, dnow - st, 'server time', result.serverTime)\n }\n this.txes = []\n return {\n result: result.success,\n time: dnow - st,\n serverTime: result.serverTime\n }\n }\n return { result: true, time: 0, serverTime: 0 }\n }\n\n // Apply for this will reuse, same apply context.\n apply (scope?: string, measure?: string): ApplyOperations {\n return this\n }\n}\n\n/**\n * @public\n *\n * Builder for TxOperations.\n */\nexport class TxBuilder extends TxOperations {\n txes: TxCUD<Doc>[] = []\n matches: DocumentClassQuery<Doc>[] = []\n constructor (\n readonly hierarchy: Hierarchy,\n readonly modelDb: ModelDb,\n user: PersonId\n ) {\n const txClient: Client = {\n getHierarchy: () => this.hierarchy,\n getModel: () => this.modelDb,\n close: async () => {},\n findOne: async (_class, query, options?) => undefined,\n findAll: async (_class, query, options?) => toFindResult([]),\n searchFulltext: async (query, options) => ({ docs: [] }),\n domainRequest: async (domain, params) => ({ domain, value: null as any }),\n tx: async (tx): Promise<TxResult> => {\n if (TxProcessor.isExtendsCUD(tx._class)) {\n this.txes.push(tx as TxCUD<Doc>)\n }\n return {}\n }\n }\n super(txClient, user)\n }\n}\n\n/**\n * @public\n */\nexport async function updateAttribute (\n client: TxOperations,\n object: Doc,\n _class: Ref<Class<Doc>>,\n attribute: { key: string, attr: AnyAttribute },\n value: any,\n saveModified: boolean = false,\n analyticsProps: Record<string, any> = {}\n): Promise<void> {\n const doc = object\n const attributeKey = attribute.key\n if ((doc as any)[attributeKey] === value) return\n const modifiedOn = saveModified ? doc.modifiedOn : Date.now()\n const modifiedBy = attribute.key === 'modifiedBy' ? value : saveModified ? doc.modifiedBy : undefined\n const attr = attribute.attr\n\n const baseAnalyticsProps = {\n objectClass: _class,\n objectId: object._id,\n attribute: attributeKey,\n ...analyticsProps\n }\n if (client.getHierarchy().isMixin(attr.attributeOf)) {\n await client.updateMixin(\n doc._id,\n _class,\n doc.space,\n attr.attributeOf,\n { [attributeKey]: value },\n modifiedOn,\n modifiedBy\n )\n Analytics.handleEvent('ChangeAttribute', { ...baseAnalyticsProps, value })\n } else {\n if (client.getHierarchy().isDerived(attribute.attr.type._class, core.class.ArrOf)) {\n const oldValue: any[] = (object as any)[attributeKey] ?? []\n const val: any[] = Array.isArray(value) ? value : [value]\n const toPull = oldValue.filter((it: any) => !val.includes(it))\n\n const toPush = val.filter((it) => !oldValue.includes(it))\n if (toPull.length > 0) {\n await client.update(object, { $pull: { [attributeKey]: { $in: toPull } } }, false, modifiedOn, modifiedBy)\n Analytics.handleEvent('RemoveCollectionItems', {\n ...baseAnalyticsProps,\n removed: toPull\n })\n }\n if (toPush.length > 0) {\n await client.update(\n object,\n { $push: { [attributeKey]: { $each: toPush, $position: 0 } } },\n false,\n modifiedOn,\n modifiedBy\n )\n Analytics.handleEvent('AddCollectionItems', {\n ...baseAnalyticsProps,\n added: toPush\n })\n }\n } else {\n await client.update(object, { [attributeKey]: value }, false, modifiedOn, modifiedBy)\n Analytics.handleEvent('SetCollectionItems', {\n ...baseAnalyticsProps,\n value\n })\n }\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { Analytics } from '@hcengineering/analytics'\nimport { deepEqual } from 'fast-equals'\nimport {\n type DocumentUpdate,\n DOMAIN_MODEL,\n Hierarchy,\n type MixinData,\n type MixinUpdate,\n type ModelDb,\n platformNow,\n toFindResult\n} from '.'\nimport type {\n AnyAttribute,\n AttachedData,\n AttachedDoc,\n Class,\n Data,\n Doc,\n Mixin,\n OperationDomain,\n PersonId,\n Ref,\n Space,\n Timestamp\n} from './classes'\nimport { type Client } from './client'\nimport core from './component'\nimport type {\n DocumentQuery,\n DomainParams,\n DomainResult,\n FindOptions,\n FindResult,\n SearchOptions,\n SearchQuery,\n SearchResult,\n TxResult,\n WithLookup\n} from './storage'\nimport { type DocumentClassQuery, type Tx, type TxApplyResult, type TxCUD, TxFactory, TxProcessor } from './tx'\n\n/**\n * @public\n *\n * High Level operations with client, will create low level transactions.\n *\n * `notify` is not supported by TxOperations.\n */\nexport class TxOperations implements Omit<Client, 'notify'> {\n readonly txFactory: TxFactory\n\n constructor (\n readonly client: Client,\n readonly user: PersonId,\n readonly isDerived: boolean = false\n ) {\n this.txFactory = new TxFactory(user, isDerived)\n }\n\n getHierarchy (): Hierarchy {\n return this.client.getHierarchy()\n }\n\n getModel (): ModelDb {\n return this.client.getModel()\n }\n\n async close (): Promise<void> {\n await this.client.close()\n }\n\n findAll<T extends Doc>(\n _class: Ref<Class<T>>,\n query: DocumentQuery<T>,\n options?: FindOptions<T> | undefined\n ): Promise<FindResult<T>> {\n return this.client.findAll(_class, query, options)\n }\n\n findOne<T extends Doc>(\n _class: Ref<Class<T>>,\n query: DocumentQuery<T>,\n options?: FindOptions<T> | undefined\n ): Promise<WithLookup<T> | undefined> {\n return this.client.findOne(_class, query, options)\n }\n\n domainRequest<T>(domain: OperationDomain, params: DomainParams): Promise<DomainResult<T>> {\n return this.client.domainRequest(domain, params)\n }\n\n searchFulltext (query: SearchQuery, options: SearchOptions): Promise<SearchResult> {\n return this.client.searchFulltext(query, options)\n }\n\n tx (tx: Tx): Promise<TxResult> {\n return this.client.tx(tx)\n }\n\n async createDoc<T extends Doc>(\n _class: Ref<Class<T>>,\n space: Ref<Space>,\n attributes: Data<T>,\n id?: Ref<T>,\n modifiedOn?: Timestamp,\n modifiedBy?: PersonId\n ): Promise<Ref<T>> {\n const hierarchy = this.client.getHierarchy()\n if (hierarchy.isDerived(_class, core.class.AttachedDoc)) {\n throw new Error('createDoc cannot be used for objects inherited from AttachedDoc')\n }\n if (hierarchy.findDomain(_class) === DOMAIN_MODEL && space !== core.space.Model) {\n throw new Error('createDoc cannot be called for DOMAIN_MODEL classes with non-model space')\n }\n const tx = this.txFactory.createTxCreateDoc(_class, space, attributes, id, modifiedOn, modifiedBy)\n await this.tx(tx)\n return tx.objectId\n }\n\n async addCollection<T extends Doc, P extends AttachedDoc>(\n _class: Ref<Class<P>>,\n space: Ref<Space>,\n attachedTo: Ref<T>,\n attachedToClass: Ref<Class<T>>,\n collection: Extract<keyof T, string> | string,\n attributes: AttachedData<P>,\n id?: Ref<P>,\n modifiedOn?: Timestamp,\n modifiedBy?: PersonId\n ): Promise<Ref<P>> {\n const tx = this.txFactory.createTxCollectionCUD<T, P>(\n attachedToClass,\n attachedTo,\n space,\n collection,\n this.txFactory.createTxCreateDoc<P>(_class, space, attributes as unknown as Data<P>, id, modifiedOn, modifiedBy),\n modifiedOn,\n modifiedBy\n )\n await this.tx(tx)\n return tx.objectId as unknown as Ref<P>\n }\n\n async updateCollection<T extends Doc, P extends AttachedDoc>(\n _class: Ref<Class<P>>,\n space: Ref<Space>,\n objectId: Ref<P>,\n attachedTo: Ref<T>,\n attachedToClass: Ref<Class<T>>,\n collection: Extract<keyof T, string> | string,\n operations: DocumentUpdate<P>,\n retrieve?: boolean,\n modifiedOn?: Timestamp,\n modifiedBy?: PersonId\n ): Promise<Ref<T>> {\n const tx = this.txFactory.createTxCollectionCUD(\n attachedToClass,\n attachedTo,\n space,\n collection,\n this.txFactory.createTxUpdateDoc(_class, space, objectId, operations, retrieve, modifiedOn, modifiedBy),\n modifiedOn,\n modifiedBy\n )\n await this.tx(tx)\n return attachedTo\n }\n\n async removeCollection<T extends Doc, P extends AttachedDoc>(\n _class: Ref<Class<P>>,\n space: Ref<Space>,\n objectId: Ref<P>,\n attachedTo: Ref<T>,\n attachedToClass: Ref<Class<T>>,\n collection: Extract<keyof T, string> | string,\n modifiedOn?: Timestamp,\n modifiedBy?: PersonId\n ): Promise<Ref<T>> {\n const tx = this.txFactory.createTxCollectionCUD(\n attachedToClass,\n attachedTo,\n space,\n collection,\n this.txFactory.createTxRemoveDoc(_class, space, objectId, modifiedOn, modifiedBy),\n modifiedOn,\n modifiedBy\n )\n await this.tx(tx)\n return attachedTo\n }\n\n updateDoc<T extends Doc>(\n _class: Ref<Class<T>>,\n space: Ref<Space>,\n objectId: Ref<T>,\n operations: DocumentUpdate<T>,\n retrieve?: boolean,\n modifiedOn?: Timestamp,\n modifiedBy?: PersonId\n ): Promise<TxResult> {\n const tx = this.txFactory.createTxUpdateDoc(_class, space, objectId, operations, retrieve, modifiedOn, modifiedBy)\n return this.tx(tx)\n }\n\n removeDoc<T extends Doc>(\n _class: Ref<Class<T>>,\n space: Ref<Space>,\n objectId: Ref<T>,\n modifiedOn?: Timestamp,\n modifiedBy?: PersonId\n ): Promise<TxResult> {\n const tx = this.txFactory.createTxRemoveDoc(_class, space, objectId, modifiedOn, modifiedBy)\n return this.tx(tx)\n }\n\n createMixin<D extends Doc, M extends D>(\n objectId: Ref<D>,\n objectClass: Ref<Class<D>>,\n objectSpace: Ref<Space>,\n mixin: Ref<Mixin<M>>,\n attributes: MixinData<D, M>,\n modifiedOn?: Timestamp,\n modifiedBy?: PersonId\n ): Promise<TxResult> {\n const tx = this.txFactory.createTxMixin(\n objectId,\n objectClass,\n objectSpace,\n mixin,\n attributes,\n modifiedOn,\n modifiedBy\n )\n return this.tx(tx)\n }\n\n updateMixin<D extends Doc, M extends D>(\n objectId: Ref<D>,\n objectClass: Ref<Class<D>>,\n objectSpace: Ref<Space>,\n mixin: Ref<Mixin<M>>,\n attributes: MixinUpdate<D, M>,\n modifiedOn?: Timestamp,\n modifiedBy?: PersonId\n ): Promise<TxResult> {\n const tx = this.txFactory.createTxMixin(\n objectId,\n objectClass,\n objectSpace,\n mixin,\n attributes,\n modifiedOn,\n modifiedBy\n )\n return this.tx(tx)\n }\n\n async update<T extends Doc>(\n doc: T,\n update: DocumentUpdate<T>,\n retrieve?: boolean,\n modifiedOn?: Timestamp,\n modifiedBy?: PersonId\n ): Promise<TxResult> {\n const hierarchy = this.client.getHierarchy()\n const mixClass = Hierarchy.mixinOrClass(doc)\n if (hierarchy.isMixin(mixClass)) {\n const baseClass = hierarchy.getBaseClass(doc._class)\n\n const byClass = splitMixinUpdate(hierarchy, update, mixClass, baseClass)\n const ops = this.apply(doc._id)\n for (const it of byClass) {\n if (hierarchy.isMixin(it[0])) {\n await ops.updateMixin(doc._id, baseClass, doc.space, it[0], it[1], modifiedOn, modifiedBy)\n } else {\n if (hierarchy.isDerived(it[0], core.class.AttachedDoc)) {\n const adoc = doc as unknown as AttachedDoc\n return await this.updateCollection(\n it[0],\n doc.space,\n adoc._id,\n adoc.attachedTo,\n adoc.attachedToClass,\n adoc.collection,\n it[1],\n retrieve,\n modifiedOn,\n modifiedBy\n )\n }\n await ops.updateDoc(it[0], doc.space, doc._id, it[1], retrieve, modifiedOn, modifiedBy)\n }\n }\n return await ops.commit()\n }\n if (hierarchy.isDerived(doc._class, core.class.AttachedDoc)) {\n const adoc = doc as unknown as AttachedDoc\n return await this.updateCollection(\n doc._class,\n doc.space,\n adoc._id,\n adoc.attachedTo,\n adoc.attachedToClass,\n adoc.collection,\n update,\n retrieve,\n modifiedOn,\n modifiedBy\n )\n }\n return await this.updateDoc(doc._class, doc.space, doc._id, update, retrieve, modifiedOn, modifiedBy)\n }\n\n remove<T extends Doc>(doc: T, modifiedOn?: Timestamp, modifiedBy?: PersonId): Promise<TxResult> {\n if (this.client.getHierarchy().isDerived(doc._class, core.class.AttachedDoc)) {\n const adoc = doc as unknown as AttachedDoc\n return this.removeCollection(\n doc._class,\n doc.space,\n adoc._id,\n adoc.attachedTo,\n adoc.attachedToClass,\n adoc.collection,\n modifiedOn,\n modifiedBy\n )\n }\n return this.removeDoc(doc._class, doc.space, doc._id)\n }\n\n apply (scope?: string, measure?: string, derived?: boolean): ApplyOperations {\n return new ApplyOperations(this, scope, measure, derived ?? this.isDerived)\n }\n\n async diffUpdate<T extends Doc = Doc>(\n doc: T,\n update: T | Data<T> | DocumentUpdate<T>,\n date?: Timestamp,\n account?: PersonId\n ): Promise<T> {\n const documentUpdate = getDiffUpdate(doc, update)\n if (Object.keys(documentUpdate).length > 0) {\n await this.update(doc, documentUpdate, false, date ?? Date.now(), account)\n TxProcessor.applyUpdate(doc, documentUpdate)\n }\n return doc\n }\n\n async mixinDiffUpdate (\n doc: Doc,\n raw: Doc | Data<Doc>,\n mixin: Ref<Class<Mixin<Doc>>>,\n modifiedBy: PersonId,\n modifiedOn: Timestamp\n ): Promise<Doc> {\n // We need to update fields if they are different.\n\n if (!this.getHierarchy().hasMixin(doc, mixin)) {\n await this.createMixin(doc._id, doc._class, doc.space, mixin, raw as MixinData<Doc, Doc>, modifiedOn, modifiedBy)\n TxProcessor.applyUpdate(this.getHierarchy().as(doc, mixin), raw)\n return doc\n }\n\n const documentUpdate: MixinUpdate<Doc, Doc> = {}\n for (const [k, v] of Object.entries(raw)) {\n if (['_class', '_id', 'modifiedBy', 'modifiedOn', 'space', 'attachedTo', 'attachedToClass'].includes(k)) {\n continue\n }\n const dv = (doc as any)[k]\n if (!deepEqual(dv, v) && v != null) {\n ;(documentUpdate as any)[k] = v\n }\n }\n if (Object.keys(documentUpdate).length > 0) {\n await this.updateMixin(doc._id, doc._class, doc.space, mixin, documentUpdate, modifiedOn, modifiedBy)\n TxProcessor.applyUpdate(this.getHierarchy().as(doc, mixin), documentUpdate)\n }\n return doc\n }\n}\n\nexport function getDiffUpdate<T extends Doc> (doc: T, update: T | Data<T> | DocumentUpdate<T>): DocumentUpdate<T> {\n // We need to update fields if they are different.\n const documentUpdate: DocumentUpdate<T> = {}\n for (const [k, v] of Object.entries(update)) {\n if (['_class', '_id', 'modifiedBy', 'modifiedOn', 'space', 'attachedTo', 'attachedToClass'].includes(k)) {\n continue\n }\n const dv = (doc as any)[k]\n if (!deepEqual(dv, v) && v !== undefined) {\n ;(documentUpdate as any)[k] = v\n }\n }\n return documentUpdate\n}\n\nexport function splitMixinUpdate<T extends Doc> (\n hierarchy: Hierarchy,\n update: DocumentUpdate<T>,\n mixClass: Ref<Class<T>>,\n baseClass: Ref<Class<T>>\n): Map<Ref<Class<Doc>>, DocumentUpdate<T>> {\n const attributes = hierarchy.getAllAttributes(mixClass)\n\n const updateAttrs = Object.fromEntries(\n Object.entries(update).filter((it) => !it[0].startsWith('$'))\n ) as DocumentUpdate<T>\n const updateOps = Object.fromEntries(\n Object.entries(update).filter((it) => it[0].startsWith('$'))\n ) as DocumentUpdate<T>\n\n const result: Map<Ref<Class<Doc>>, DocumentUpdate<T>> = splitObjectAttributes(\n hierarchy,\n updateAttrs,\n baseClass,\n attributes\n )\n\n for (const [key, value] of Object.entries(updateOps)) {\n const updates = splitObjectAttributes(hierarchy, value as object, baseClass, attributes)\n\n for (const [opsClass, opsUpdate] of updates) {\n const upd: DocumentUpdate<T> = result.get(opsClass) ?? {}\n result.set(opsClass, { ...upd, [key]: opsUpdate })\n }\n }\n\n return result\n}\n\nfunction splitObjectAttributes<T extends object> (\n hierarchy: Hierarchy,\n obj: T,\n objClass: Ref<Class<Doc>>,\n attributes: Map<string, AnyAttribute>\n): Map<Ref<Class<Doc>>, object> {\n const result = new Map<Ref<Class<Doc>>, any>()\n for (const [key, value] of Object.entries(obj)) {\n const attributeOf = attributes.get(key)?.attributeOf\n const clazz = attributeOf !== undefined && hierarchy.isMixin(attributeOf) ? attributeOf : objClass\n result.set(clazz, { ...(result.get(clazz) ?? {}), [key]: value })\n }\n\n return result\n}\n\nexport interface CommitResult {\n result: boolean\n time: number\n serverTime: number\n}\n\n/**\n * @public\n *\n * Builder for ApplyOperation, with same syntax as TxOperations.\n *\n * Will send real command on commit and will return boolean of operation success.\n */\nexport class ApplyOperations extends TxOperations {\n txes: TxCUD<Doc>[] = []\n matches: DocumentClassQuery<Doc>[] = []\n notMatches: DocumentClassQuery<Doc>[] = []\n constructor (\n readonly ops: TxOperations,\n readonly scope?: string,\n readonly measureName?: string,\n isDerived?: boolean\n ) {\n const txClient: Client = {\n getHierarchy: () => ops.client.getHierarchy(),\n getModel: () => ops.client.getModel(),\n close: () => ops.client.close(),\n findOne: (_class, query, options?) => ops.client.findOne(_class, query, options),\n findAll: (_class, query, options?) => ops.client.findAll(_class, query, options),\n searchFulltext: (query, options) => ops.client.searchFulltext(query, options),\n domainRequest: (domain, params) => ops.client.domainRequest(domain, params),\n tx: async (tx): Promise<TxResult> => {\n if (TxProcessor.isExtendsCUD(tx._class)) {\n this.txes.push(tx as TxCUD<Doc>)\n }\n return {}\n }\n }\n super(txClient, ops.user, isDerived ?? false)\n }\n\n match<T extends Doc>(_class: Ref<Class<T>>, query: DocumentQuery<T>): ApplyOperations {\n this.matches.push({ _class, query })\n return this\n }\n\n notMatch<T extends Doc>(_class: Ref<Class<T>>, query: DocumentQuery<T>): ApplyOperations {\n this.notMatches.push({ _class, query })\n return this\n }\n\n async commit (notify: boolean = true, extraNotify: Ref<Class<Doc>>[] = []): Promise<CommitResult> {\n if (\n this.txes.length === 1 &&\n this.matches.length === 0 &&\n this.notMatches.length === 0 &&\n this.measureName == null\n ) {\n const st = platformNow()\n // Individual update, no need for apply\n await this.ops.tx(this.txes[0])\n const time = platformNow() - st\n this.txes = []\n return {\n result: true,\n time,\n serverTime: time\n }\n }\n if (this.txes.length > 0) {\n const st = platformNow()\n const aop = this.ops.txFactory.createTxApplyIf(\n core.space.Tx,\n this.scope,\n this.matches,\n this.notMatches,\n this.txes,\n this.measureName,\n notify,\n extraNotify\n )\n const result = (await this.ops.tx(aop)) as TxApplyResult\n const dnow = platformNow()\n if (typeof window === 'object' && window !== null && this.measureName != null) {\n console.log(`measure ${this.measureName}`, dnow - st, 'server time', result.serverTime)\n }\n if (!result.success) {\n console.warn('ops.commit() failed', {\n scope: this.scope,\n measureName: this.measureName,\n matchCount: this.matches.length,\n notMatchCount: this.notMatches.length,\n txCount: this.txes.length,\n matches: this.matches.map((m) => ({ _class: m._class, query: m.query })),\n notMatches: this.notMatches.map((m) => ({ _class: m._class, query: m.query }))\n })\n }\n this.txes = []\n return {\n result: result.success,\n time: dnow - st,\n serverTime: result.serverTime\n }\n }\n return { result: true, time: 0, serverTime: 0 }\n }\n\n // Apply for this will reuse, same apply context.\n apply (scope?: string, measure?: string): ApplyOperations {\n return this\n }\n}\n\n/**\n * @public\n *\n * Builder for TxOperations.\n */\nexport class TxBuilder extends TxOperations {\n txes: TxCUD<Doc>[] = []\n matches: DocumentClassQuery<Doc>[] = []\n constructor (\n readonly hierarchy: Hierarchy,\n readonly modelDb: ModelDb,\n user: PersonId\n ) {\n const txClient: Client = {\n getHierarchy: () => this.hierarchy,\n getModel: () => this.modelDb,\n close: async () => {},\n findOne: async (_class, query, options?) => undefined,\n findAll: async (_class, query, options?) => toFindResult([]),\n searchFulltext: async (query, options) => ({ docs: [] }),\n domainRequest: async (domain, params) => ({ domain, value: null as any }),\n tx: async (tx): Promise<TxResult> => {\n if (TxProcessor.isExtendsCUD(tx._class)) {\n this.txes.push(tx as TxCUD<Doc>)\n }\n return {}\n }\n }\n super(txClient, user)\n }\n}\n\n/**\n * @public\n */\nexport async function updateAttribute (\n client: TxOperations,\n object: Doc,\n _class: Ref<Class<Doc>>,\n attribute: { key: string, attr: AnyAttribute },\n value: any,\n saveModified: boolean = false,\n analyticsProps: Record<string, any> = {}\n): Promise<void> {\n const doc = object\n const attributeKey = attribute.key\n if ((doc as any)[attributeKey] === value) return\n const modifiedOn = saveModified ? doc.modifiedOn : Date.now()\n const modifiedBy = attribute.key === 'modifiedBy' ? value : saveModified ? doc.modifiedBy : undefined\n const attr = attribute.attr\n\n const baseAnalyticsProps = {\n objectClass: _class,\n objectId: object._id,\n attribute: attributeKey,\n ...analyticsProps\n }\n if (client.getHierarchy().isMixin(attr.attributeOf)) {\n await client.updateMixin(\n doc._id,\n _class,\n doc.space,\n attr.attributeOf,\n { [attributeKey]: value },\n modifiedOn,\n modifiedBy\n )\n Analytics.handleEvent('ChangeAttribute', { ...baseAnalyticsProps, value })\n } else {\n if (client.getHierarchy().isDerived(attribute.attr.type._class, core.class.ArrOf)) {\n const oldValue: any[] = (object as any)[attributeKey] ?? []\n const val: any[] = Array.isArray(value) ? value : [value]\n const toPull = oldValue.filter((it: any) => !val.includes(it))\n\n const toPush = val.filter((it) => !oldValue.includes(it))\n if (toPull.length > 0) {\n await client.update(object, { $pull: { [attributeKey]: { $in: toPull } } }, false, modifiedOn, modifiedBy)\n Analytics.handleEvent('RemoveCollectionItems', {\n ...baseAnalyticsProps,\n removed: toPull\n })\n }\n if (toPush.length > 0) {\n await client.update(\n object,\n { $push: { [attributeKey]: { $each: toPush, $position: 0 } } },\n false,\n modifiedOn,\n modifiedBy\n )\n Analytics.handleEvent('AddCollectionItems', {\n ...baseAnalyticsProps,\n added: toPush\n })\n }\n } else {\n await client.update(object, { [attributeKey]: value }, false, modifiedOn, modifiedBy)\n Analytics.handleEvent('SetCollectionItems', {\n ...baseAnalyticsProps,\n value\n })\n }\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["core"]
7
7
  }
@@ -102,6 +102,9 @@ const predicates = {
102
102
  }, "$ne"),
103
103
  $size: /* @__PURE__ */ __name((o, propertyKey) => {
104
104
  return (docs) => execPredicate(docs, propertyKey, (value) => {
105
+ if (value == null) {
106
+ return false;
107
+ }
105
108
  if (!Array.isArray(value)) {
106
109
  throw new Error("$size predicate requires array");
107
110
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/predicate.ts"],
4
- "sourcesContent": ["//\n// Copyright \u00A9 2020, 2021 Anticrm Platform Contributors.\n// Copyright \u00A9 2021 Hardcore Engineering Inc.\n//\n// Licensed under the Eclipse Public License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License. You may\n// obtain a copy of the License at https://www.eclipse.org/legal/epl-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n//\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n\nimport type { Doc } from './classes'\nimport { getObjectValue } from './objvalue'\nimport { escapeLikeForRegexp } from './utils'\n\nimport { deepEqual } from 'fast-equals'\n\ntype Predicate = (docs: Doc[]) => Doc[]\ntype PredicateFactory = (pred: any, propertyKey: string) => Predicate\n\ntype ExecPredicate = (value: any) => boolean\n\nfunction execPredicate (docs: Doc[], propertyKey: string, pred: ExecPredicate): Doc[] {\n const result: Doc[] = []\n for (const doc of docs) {\n const value = getObjectValue(propertyKey, doc)\n if (pred(value)) {\n result.push(doc)\n }\n }\n return result\n}\n\nconst predicates: Record<string, PredicateFactory> = {\n $in: (o, propertyKey) => {\n if (!Array.isArray(o)) {\n throw new Error('$in predicate requires array')\n }\n return (docs) =>\n execPredicate(docs, propertyKey, (value) => {\n if (Array.isArray(value)) {\n return o.some((p) => value.includes(p))\n } else {\n // eslint-disable-next-line eqeqeq\n return o.some((p) => p == value)\n }\n })\n },\n $all: (o, propertyKey) => {\n if (!Array.isArray(o)) {\n throw new Error('$all predicate requires array')\n }\n return (docs) =>\n execPredicate(docs, propertyKey, (value: any[]) => {\n for (const val of o) {\n if (!value.includes(val)) return false\n }\n return true\n })\n },\n $nin: (o, propertyKey) => {\n if (!Array.isArray(o)) {\n throw new Error('$nin predicate requires array')\n }\n return (docs) =>\n execPredicate(docs, propertyKey, (value) => {\n if (Array.isArray(value)) {\n return !o.some((p) => value.includes(p))\n } else {\n // eslint-disable-next-line eqeqeq\n return !o.some((p) => p == value)\n }\n })\n },\n\n $like: (query: string, propertyKey: string): Predicate => {\n const searchString = query\n .split('%')\n .map((it) => escapeLikeForRegexp(it))\n .join('.*')\n const regex = RegExp(`^${searchString}$`, 'i')\n\n return (docs) => execPredicate(docs, propertyKey, (value) => regex.test(value))\n },\n\n $regex: (o: { $regex: string, $options: string }, propertyKey: string): Predicate => {\n const re = new RegExp(o.$regex, o.$options)\n return (docs) => execPredicate(docs, propertyKey, (value) => value.match(re) !== null)\n },\n $gt: (o, propertyKey) => {\n return (docs) => execPredicate(docs, propertyKey, (value) => value > o)\n },\n $gte: (o, propertyKey) => {\n return (docs) => execPredicate(docs, propertyKey, (value) => value >= o)\n },\n $lt: (o, propertyKey) => {\n return (docs) => execPredicate(docs, propertyKey, (value) => value < o)\n },\n $lte: (o, propertyKey) => {\n return (docs) => execPredicate(docs, propertyKey, (value) => value <= o)\n },\n $exists: (o, propertyKey) => {\n return (docs) => execPredicate(docs, propertyKey, (value) => (value !== undefined) === o)\n },\n $ne: (o, propertyKey) => {\n // eslint-disable-next-line eqeqeq\n return (docs) => execPredicate(docs, propertyKey, (value) => (o != null ? !deepEqual(o, value) : value != null))\n },\n $size: (o, propertyKey) => {\n return (docs) =>\n execPredicate(docs, propertyKey, (value) => {\n if (!Array.isArray(value)) {\n throw new Error('$size predicate requires array')\n }\n if (typeof o === 'number') {\n return value.length === o\n }\n if (typeof o === 'object' && o.$gt !== undefined) {\n return value.length > o.$gt\n }\n if (typeof o === 'object' && o.$gte !== undefined) {\n return value.length >= o.$gte\n }\n if (typeof o === 'object' && o.$lt !== undefined) {\n return value.length < o.$lt\n }\n if (typeof o === 'object' && o.$lte !== undefined) {\n return value.length <= o.$lte\n }\n return false\n })\n }\n}\n\nexport function isPredicate (o: Record<string, any>): boolean {\n if (o === null || typeof o !== 'object') {\n return false\n }\n const keys = Object.keys(o)\n return keys.length > 0 && keys.every((key) => key.startsWith('$'))\n}\n\nexport function createPredicates (o: Record<string, any>, propertyKey: string): Predicate[] {\n const keys = Object.keys(o)\n const result: Predicate[] = []\n for (const key of keys) {\n const factory = predicates[key]\n if (factory === undefined) throw new Error('unknown predicate: ' + keys[0])\n result.push(factory(o[key], propertyKey))\n }\n return result\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["//\n// Copyright \u00A9 2020, 2021 Anticrm Platform Contributors.\n// Copyright \u00A9 2021 Hardcore Engineering Inc.\n//\n// Licensed under the Eclipse Public License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License. You may\n// obtain a copy of the License at https://www.eclipse.org/legal/epl-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n//\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n\nimport type { Doc } from './classes'\nimport { getObjectValue } from './objvalue'\nimport { escapeLikeForRegexp } from './utils'\n\nimport { deepEqual } from 'fast-equals'\n\ntype Predicate = (docs: Doc[]) => Doc[]\ntype PredicateFactory = (pred: any, propertyKey: string) => Predicate\n\ntype ExecPredicate = (value: any) => boolean\n\nfunction execPredicate (docs: Doc[], propertyKey: string, pred: ExecPredicate): Doc[] {\n const result: Doc[] = []\n for (const doc of docs) {\n const value = getObjectValue(propertyKey, doc)\n if (pred(value)) {\n result.push(doc)\n }\n }\n return result\n}\n\nconst predicates: Record<string, PredicateFactory> = {\n $in: (o, propertyKey) => {\n if (!Array.isArray(o)) {\n throw new Error('$in predicate requires array')\n }\n return (docs) =>\n execPredicate(docs, propertyKey, (value) => {\n if (Array.isArray(value)) {\n return o.some((p) => value.includes(p))\n } else {\n // eslint-disable-next-line eqeqeq\n return o.some((p) => p == value)\n }\n })\n },\n $all: (o, propertyKey) => {\n if (!Array.isArray(o)) {\n throw new Error('$all predicate requires array')\n }\n return (docs) =>\n execPredicate(docs, propertyKey, (value: any[]) => {\n for (const val of o) {\n if (!value.includes(val)) return false\n }\n return true\n })\n },\n $nin: (o, propertyKey) => {\n if (!Array.isArray(o)) {\n throw new Error('$nin predicate requires array')\n }\n return (docs) =>\n execPredicate(docs, propertyKey, (value) => {\n if (Array.isArray(value)) {\n return !o.some((p) => value.includes(p))\n } else {\n // eslint-disable-next-line eqeqeq\n return !o.some((p) => p == value)\n }\n })\n },\n\n $like: (query: string, propertyKey: string): Predicate => {\n const searchString = query\n .split('%')\n .map((it) => escapeLikeForRegexp(it))\n .join('.*')\n const regex = RegExp(`^${searchString}$`, 'i')\n\n return (docs) => execPredicate(docs, propertyKey, (value) => regex.test(value))\n },\n\n $regex: (o: { $regex: string, $options: string }, propertyKey: string): Predicate => {\n const re = new RegExp(o.$regex, o.$options)\n return (docs) => execPredicate(docs, propertyKey, (value) => value.match(re) !== null)\n },\n $gt: (o, propertyKey) => {\n return (docs) => execPredicate(docs, propertyKey, (value) => value > o)\n },\n $gte: (o, propertyKey) => {\n return (docs) => execPredicate(docs, propertyKey, (value) => value >= o)\n },\n $lt: (o, propertyKey) => {\n return (docs) => execPredicate(docs, propertyKey, (value) => value < o)\n },\n $lte: (o, propertyKey) => {\n return (docs) => execPredicate(docs, propertyKey, (value) => value <= o)\n },\n $exists: (o, propertyKey) => {\n return (docs) => execPredicate(docs, propertyKey, (value) => (value !== undefined) === o)\n },\n $ne: (o, propertyKey) => {\n // eslint-disable-next-line eqeqeq\n return (docs) => execPredicate(docs, propertyKey, (value) => (o != null ? !deepEqual(o, value) : value != null))\n },\n $size: (o, propertyKey) => {\n return (docs) =>\n execPredicate(docs, propertyKey, (value) => {\n if (value == null) {\n return false\n }\n if (!Array.isArray(value)) {\n throw new Error('$size predicate requires array')\n }\n if (typeof o === 'number') {\n return value.length === o\n }\n if (typeof o === 'object' && o.$gt !== undefined) {\n return value.length > o.$gt\n }\n if (typeof o === 'object' && o.$gte !== undefined) {\n return value.length >= o.$gte\n }\n if (typeof o === 'object' && o.$lt !== undefined) {\n return value.length < o.$lt\n }\n if (typeof o === 'object' && o.$lte !== undefined) {\n return value.length <= o.$lte\n }\n return false\n })\n }\n}\n\nexport function isPredicate (o: Record<string, any>): boolean {\n if (o === null || typeof o !== 'object') {\n return false\n }\n const keys = Object.keys(o)\n return keys.length > 0 && keys.every((key) => key.startsWith('$'))\n}\n\nexport function createPredicates (o: Record<string, any>, propertyKey: string): Predicate[] {\n const keys = Object.keys(o)\n const result: Predicate[] = []\n for (const key of keys) {\n const factory = predicates[key]\n if (factory === undefined) throw new Error('unknown predicate: ' + keys[0])\n result.push(factory(o[key], propertyKey))\n }\n return result\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/storage.ts"],
4
- "sourcesContent": ["//\n// Copyright \u00A9 2021 Anticrm Platform Contributors.\n//\n// Licensed under the Eclipse Public License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License. You may\n// obtain a copy of the License at https://www.eclipse.org/legal/epl-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n//\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n\nimport type { Asset, Resource } from '@hcengineering/platform'\n\nimport type { Association, AttachedDoc, Class, Doc, Domain, Ref, Space } from './classes'\nimport type { Tx } from './tx'\nimport type { KeysByType } from './utils'\n\nexport type ArraySizeSelector =\n | {\n $gt: number\n }\n | {\n $lt: number\n }\n | {\n $gte: number\n }\n | {\n $lte: number\n }\n\n/**\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport type QuerySelector<T> = {\n $in?: T[]\n $all?: T extends Array<any> ? T : never\n $nin?: T[]\n $ne?: T\n $gt?: T extends number ? number : never\n $gte?: T extends number ? number : never\n $lt?: T extends number ? number : never\n $lte?: T extends number ? number : never\n $exists?: boolean\n $like?: string\n $regex?: string\n $options?: string\n $size?: T extends Array<any> ? number | ArraySizeSelector : never\n}\n\n/**\n * @public\n */\nexport type ObjQueryType<T> = (T extends Array<infer U> ? U | U[] | QuerySelector<U> : T) | QuerySelector<T>\n\n/**\n * @public\n */\nexport type DocumentQuery<T extends Doc> = {\n [P in keyof T]?: ObjQueryType<T[P]>\n} & {\n $search?: string\n // support nested queries e.g. 'user.friends.name'\n // this will mark all unrecognized properties as any (including nested queries)\n [key: string]: any\n}\n\n/**\n * @public\n */\nexport type ToClassRefT<T extends object, P extends keyof T> = T[P] extends Ref<infer X> | null | undefined\n ? Ref<Class<X>> | [Ref<Class<X>>, Lookup<X>]\n : never\n/**\n * @public\n */\nexport type ToClassRefTA<T extends object, P extends keyof T> = T[P] extends Array<Ref<infer X>> | null | undefined\n ? Ref<Class<X>> | [Ref<Class<X>>, Lookup<X>]\n : never\n/**\n * @public\n */\nexport type ToClassRef<T extends object> = {\n [P in keyof T]?: ToClassRefT<T, P> | ToClassRefTA<T, P>\n}\n\n/**\n * @public\n */\nexport type NullableRef = Ref<Doc> | Array<Ref<Doc>> | null | undefined\n\n/**\n * @public\n */\nexport type RefKeys<T extends Doc> = Pick<T, KeysByType<T, NullableRef>>\n\n/**\n * @public\n */\nexport type Refs<T extends Doc> = ToClassRef<RefKeys<T>>\n\n/**\n * @public\n */\nexport interface ReverseLookups {\n _id?: ReverseLookup\n}\n\n/**\n * @public\n */\nexport type ReverseLookup = Record<string, Ref<Class<AttachedDoc>> | [Ref<Class<Doc>>, string]>\n\n/**\n * @public\n */\nexport type Lookup<T extends Doc> = Refs<T> | ReverseLookups | (Refs<T> & ReverseLookups)\n\n/**\n * @public\n */\nexport type Projection<T extends Doc> = {\n [P in keyof T]?: 0 | 1\n}\n\nexport type AssociationQuery = [Ref<Association>, 1 | -1]\n\n/**\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport type FindOptions<T extends Doc> = {\n limit?: number\n sort?: SortingQuery<T>\n lookup?: Lookup<T>\n projection?: Projection<T>\n associations?: AssociationQuery[]\n\n // If specified total will be returned\n total?: boolean\n\n showArchived?: boolean\n}\n\n/**\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport type SortQuerySelector<T> = {\n $in?: T[]\n $nin?: T[]\n $ne?: T\n}\n/**\n * @public\n */\nexport type SortRuleQueryType<T> = (T extends Array<infer U> ? U | U[] : T) | SortQuerySelector<T>\n\n/**\n * @public\n */\nexport interface SortingRules<T> {\n order: SortingOrder\n default?: string | number\n cases: {\n query: SortRuleQueryType<T>\n index: string | number\n }[]\n}\n\n/**\n * @public\n */\nexport type SortingQuery<T extends Doc> = {\n [P in keyof T]?: SortingOrder | SortingRules<T[P]>\n} & Record<string, SortingOrder | SortingRules<any>>\n\n/**\n * @public\n */\nexport enum SortingOrder {\n Ascending = 1,\n Descending = -1\n}\n\n/**\n * @public\n */\nexport type RefsAsDocs<T> = {\n [P in keyof T]: T[P] extends Ref<infer X> | null | undefined ? (T extends X ? X : X | WithLookup<X>) : AttachedDoc[]\n}\n\n/**\n * @public\n */\nexport type LookupData<T extends Doc> = Partial<RefsAsDocs<T>>\n\n/**\n * @public\n */\nexport type WithLookup<T extends Doc> = T & {\n $lookup?: LookupData<T>\n $associations?: Record<string, Doc[]>\n $source?: {\n $score: number // Score for document result\n [key: string]: any\n }\n}\n\n/**\n * @public\n */\nexport type FindResult<T extends Doc> = WithLookup<T>[] & {\n total: number\n lookupMap?: Record<string, Doc>\n}\n\nexport type DomainParams = Record<string, any>\n\nexport interface DomainResult<T = any> {\n domain: Domain\n value: T\n}\n\n/**\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface TxResult {}\n\n/**\n * @public\n */\nexport interface SearchQuery {\n query: string\n classes?: Ref<Class<Doc>>[]\n spaces?: Ref<Space>[]\n}\n\n/**\n * @public\n */\nexport interface SearchOptions {\n limit?: number\n}\n\nexport interface SearchComponentWithProps {\n component?: Resource<any>\n props?: Record<string, string>\n}\n\n/**\n * @public\n */\nexport interface SearchResultDoc {\n id: Ref<Doc>\n\n icon?: Asset\n iconComponent?: SearchComponentWithProps\n shortTitle?: string\n shortTitleComponent?: SearchComponentWithProps\n title?: string\n titleComponent?: SearchComponentWithProps\n description?: string\n emojiIcon?: string\n score?: number\n doc: Pick<Doc, '_id' | '_class' | 'createdOn'> & Partial<Pick<AttachedDoc, 'attachedTo' | 'attachedToClass'>>\n}\n\n/**\n * @public\n */\nexport interface SearchResult {\n docs: SearchResultDoc[]\n total?: number\n}\n\n/**\n * @public\n */\nexport interface Storage {\n findAll: <T extends Doc>(\n _class: Ref<Class<T>>,\n query: DocumentQuery<T>,\n options?: FindOptions<T>\n ) => Promise<FindResult<T>>\n\n tx: (tx: Tx) => Promise<TxResult>\n}\n\n/**\n * @public\n */\nexport interface FulltextStorage {\n searchFulltext: (query: SearchQuery, options: SearchOptions) => Promise<SearchResult>\n}\n\nexport function shouldShowArchived<T extends Doc> (\n query: DocumentQuery<T>,\n options: FindOptions<T> | undefined\n): boolean {\n if (options?.showArchived !== undefined) {\n return options.showArchived\n }\n if (query._id !== undefined && typeof query._id === 'string') {\n return true\n }\n if (query.space !== undefined && typeof query.space === 'string') {\n return true\n }\n return false\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyLO,IAAK,eAAL,kBAAKA,kBAAL;AACL,EAAAA,4BAAA,eAAY,KAAZ;AACA,EAAAA,4BAAA,gBAAa,MAAb;AAFU,SAAAA;AAAA,GAAA;AAqHL,SAAS,mBACd,OACA,SACS;AACT,MAAI,SAAS,iBAAiB,QAAW;AACvC,WAAO,QAAQ;AAAA,EACjB;AACA,MAAI,MAAM,QAAQ,UAAa,OAAO,MAAM,QAAQ,UAAU;AAC5D,WAAO;AAAA,EACT;AACA,MAAI,MAAM,UAAU,UAAa,OAAO,MAAM,UAAU,UAAU;AAChE,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAdgB;",
4
+ "sourcesContent": ["//\n// Copyright \u00A9 2021 Anticrm Platform Contributors.\n//\n// Licensed under the Eclipse Public License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License. You may\n// obtain a copy of the License at https://www.eclipse.org/legal/epl-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n//\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n\nimport type { Asset, Resource } from '@hcengineering/platform'\n\nimport type { Association, AttachedDoc, Class, Doc, Domain, Ref, Space } from './classes'\nimport type { Tx } from './tx'\nimport type { KeysByType } from './utils'\nimport { VersionableDoc } from './versioning'\n\nexport type ArraySizeSelector =\n | {\n $gt: number\n }\n | {\n $lt: number\n }\n | {\n $gte: number\n }\n | {\n $lte: number\n }\n\n/**\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport type QuerySelector<T> = {\n $in?: T[]\n $all?: T extends Array<any> ? T : never\n $nin?: T[]\n $ne?: T\n $gt?: T extends number ? number : never\n $gte?: T extends number ? number : never\n $lt?: T extends number ? number : never\n $lte?: T extends number ? number : never\n $exists?: boolean\n $like?: string\n $regex?: string\n $options?: string\n $size?: T extends Array<any> ? number | ArraySizeSelector : never\n}\n\n/**\n * @public\n */\nexport type ObjQueryType<T> = (T extends Array<infer U> ? U | U[] | QuerySelector<U> : T) | QuerySelector<T>\n\n/**\n * @public\n */\nexport type DocumentQuery<T extends Doc> = {\n [P in keyof T]?: ObjQueryType<T[P]>\n} & {\n $search?: string\n // support nested queries e.g. 'user.friends.name'\n // this will mark all unrecognized properties as any (including nested queries)\n [key: string]: any\n}\n\n/**\n * @public\n */\nexport type ToClassRefT<T extends object, P extends keyof T> = T[P] extends Ref<infer X> | null | undefined\n ? Ref<Class<X>> | [Ref<Class<X>>, Lookup<X>]\n : never\n/**\n * @public\n */\nexport type ToClassRefTA<T extends object, P extends keyof T> = T[P] extends Array<Ref<infer X>> | null | undefined\n ? Ref<Class<X>> | [Ref<Class<X>>, Lookup<X>]\n : never\n/**\n * @public\n */\nexport type ToClassRef<T extends object> = {\n [P in keyof T]?: ToClassRefT<T, P> | ToClassRefTA<T, P>\n}\n\n/**\n * @public\n */\nexport type NullableRef = Ref<Doc> | Array<Ref<Doc>> | null | undefined\n\n/**\n * @public\n */\nexport type RefKeys<T extends Doc> = Pick<T, KeysByType<T, NullableRef>>\n\n/**\n * @public\n */\nexport type Refs<T extends Doc> = ToClassRef<RefKeys<T>>\n\n/**\n * @public\n */\nexport interface ReverseLookups {\n _id?: ReverseLookup\n}\n\n/**\n * @public\n */\nexport type ReverseLookup = Record<string, Ref<Class<AttachedDoc>> | [Ref<Class<Doc>>, string]>\n\n/**\n * @public\n */\nexport type Lookup<T extends Doc> = Refs<T> | ReverseLookups | (Refs<T> & ReverseLookups)\n\n/**\n * @public\n */\nexport type Projection<T extends Doc> = {\n [P in keyof T]?: 0 | 1\n}\n\nexport type AssociationQuery = [Ref<Association>, 1 | -1] | [Ref<Association>, 1 | -1, AssociationQuery[]]\n\n/**\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport type FindOptions<T extends Doc> = {\n limit?: number\n sort?: SortingQuery<T>\n lookup?: Lookup<T>\n projection?: Projection<T>\n associations?: AssociationQuery[]\n\n // If specified total will be returned\n total?: boolean\n\n showArchived?: boolean\n}\n\n/**\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport type SortQuerySelector<T> = {\n $in?: T[]\n $nin?: T[]\n $ne?: T\n}\n/**\n * @public\n */\nexport type SortRuleQueryType<T> = (T extends Array<infer U> ? U | U[] : T) | SortQuerySelector<T>\n\n/**\n * @public\n */\nexport interface SortingRules<T> {\n order: SortingOrder\n default?: string | number\n cases: {\n query: SortRuleQueryType<T>\n index: string | number\n }[]\n}\n\n/**\n * @public\n */\nexport type SortingQuery<T extends Doc> = {\n [P in keyof T]?: SortingOrder | SortingRules<T[P]>\n} & Record<string, SortingOrder | SortingRules<any>>\n\n/**\n * @public\n */\nexport enum SortingOrder {\n Ascending = 1,\n Descending = -1\n}\n\n/**\n * @public\n */\nexport type RefsAsDocs<T> = {\n [P in keyof T]: T[P] extends Ref<infer X> | null | undefined ? (T extends X ? X : X | WithLookup<X>) : AttachedDoc[]\n}\n\n/**\n * @public\n */\nexport type LookupData<T extends Doc> = Partial<RefsAsDocs<T>>\n\n/**\n * @public\n */\nexport type WithLookup<T extends Doc> = T & {\n $lookup?: LookupData<T>\n $associations?: Record<string, WithLookup<Doc>[]>\n $source?: {\n $score: number // Score for document result\n [key: string]: any\n }\n}\n\n/**\n * @public\n */\nexport type FindResult<T extends Doc> = WithLookup<T>[] & {\n total: number\n lookupMap?: Record<string, Doc>\n}\n\nexport type DomainParams = Record<string, any>\n\nexport interface DomainResult<T = any> {\n domain: Domain\n value: T\n}\n\n/**\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface TxResult {}\n\n/**\n * @public\n */\nexport interface SearchQuery {\n query: string\n classes?: Ref<Class<Doc>>[]\n spaces?: Ref<Space>[]\n}\n\n/**\n * @public\n */\nexport interface SearchOptions {\n limit?: number\n}\n\nexport interface SearchComponentWithProps {\n component?: Resource<any>\n props?: Record<string, string>\n}\n\n/**\n * @public\n */\nexport interface SearchResultDoc {\n id: Ref<Doc>\n\n icon?: Asset\n iconComponent?: SearchComponentWithProps\n shortTitle?: string\n shortTitleComponent?: SearchComponentWithProps\n title?: string\n titleComponent?: SearchComponentWithProps\n description?: string\n emojiIcon?: string\n score?: number\n doc: Pick<Doc, '_id' | '_class' | 'createdOn'> &\n Partial<Pick<AttachedDoc, 'attachedTo' | 'attachedToClass'>> &\n Partial<Pick<VersionableDoc, 'baseId'>>\n}\n\n/**\n * @public\n */\nexport interface SearchResult {\n docs: SearchResultDoc[]\n total?: number\n}\n\n/**\n * @public\n */\nexport interface Storage {\n findAll: <T extends Doc>(\n _class: Ref<Class<T>>,\n query: DocumentQuery<T>,\n options?: FindOptions<T>\n ) => Promise<FindResult<T>>\n\n tx: (tx: Tx) => Promise<TxResult>\n}\n\n/**\n * @public\n */\nexport interface FulltextStorage {\n searchFulltext: (query: SearchQuery, options: SearchOptions) => Promise<SearchResult>\n}\n\nexport function shouldShowArchived<T extends Doc> (\n query: DocumentQuery<T>,\n options: FindOptions<T> | undefined\n): boolean {\n if (options?.showArchived !== undefined) {\n return options.showArchived\n }\n if (query._id !== undefined && typeof query._id === 'string') {\n return true\n }\n if (query.space !== undefined && typeof query.space === 'string') {\n return true\n }\n return false\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0LO,IAAK,eAAL,kBAAKA,kBAAL;AACL,EAAAA,4BAAA,eAAY,KAAZ;AACA,EAAAA,4BAAA,gBAAa,MAAb;AAFU,SAAAA;AAAA,GAAA;AAuHL,SAAS,mBACd,OACA,SACS;AACT,MAAI,SAAS,iBAAiB,QAAW;AACvC,WAAO,QAAQ;AAAA,EACjB;AACA,MAAI,MAAM,QAAQ,UAAa,OAAO,MAAM,QAAQ,UAAU;AAC5D,WAAO;AAAA,EACT;AACA,MAAI,MAAM,UAAU,UAAa,OAAO,MAAM,UAAU,UAAU;AAChE,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAdgB;",
6
6
  "names": ["SortingOrder"]
7
7
  }
@@ -154,7 +154,9 @@ class TxProcessor {
154
154
  return _class === import_component.default.class.TxCreateDoc || _class === import_component.default.class.TxUpdateDoc || _class === import_component.default.class.TxRemoveDoc || _class === import_component.default.class.TxMixin;
155
155
  }
156
156
  static txHasUpdate(tx, attribute) {
157
- const ops = tx.operations;
157
+ return TxProcessor.hasUpdate(tx.operations, attribute);
158
+ }
159
+ static hasUpdate(ops, attribute) {
158
160
  if (ops[attribute] !== void 0) return true;
159
161
  for (const op in ops) {
160
162
  if (op.startsWith("$")) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/tx.ts"],
4
- "sourcesContent": ["//\n// Copyright \u00A9 2020, 2021 Anticrm Platform Contributors.\n//\n// Licensed under the Eclipse Public License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License. You may\n// obtain a copy of the License at https://www.eclipse.org/legal/epl-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n//\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n\nimport type {\n Arr,\n AttachedDoc,\n Class,\n Data,\n Doc,\n Domain,\n Mixin,\n OperationDomain,\n PersonId,\n PropertyType,\n Ref,\n Space,\n Timestamp\n} from './classes'\nimport { clone } from './clone'\nimport core from './component'\nimport { setObjectValue } from './objvalue'\nimport { _getOperator } from './operator'\nimport { _toDoc } from './proxy'\nimport type { DocumentQuery, TxResult } from './storage'\nimport { generateId, type KeysByType } from './utils'\n\n/**\n * @public\n */\nexport interface Tx extends Doc {\n objectSpace: Ref<Space> // space where transaction will operate\n meta?: Record<string, string | number | boolean> // meta information about transaction, non persisted to final DB's\n}\n\n/**\n * @public\n */\nexport enum WorkspaceEvent {\n UpgradeScheduled,\n IndexingUpdate,\n SecurityChange,\n MaintenanceNotification,\n BulkUpdate,\n LastTx\n}\n\n/**\n * Event to be send by server during model upgrade procedure.\n * @public\n */\nexport interface TxWorkspaceEvent<T = any> extends Tx {\n event: WorkspaceEvent\n params: T\n}\nexport interface TxDomainEvent<T = any> extends Tx {\n domain: OperationDomain\n event: T\n}\n\n/**\n * @public\n */\nexport interface IndexingUpdateEvent {\n _class: Ref<Class<Doc>>[]\n}\n\n/**\n * @public\n */\nexport interface BulkUpdateEvent {\n _class: Ref<Class<Doc>>[]\n}\n\n/**\n * @public\n */\nexport interface TxModelUpgrade extends Tx {}\n\n/**\n * @public\n */\nexport interface TxCUD<T extends Doc> extends Tx {\n objectId: Ref<T>\n objectClass: Ref<Class<T>>\n attachedTo?: Ref<Doc>\n attachedToClass?: Ref<Class<Doc>>\n collection?: string\n}\n\n/**\n * @public\n */\nexport interface TxCreateDoc<T extends Doc> extends TxCUD<T> {\n attributes: Data<T>\n}\n\n/**\n * @public\n */\nexport interface DocumentClassQuery<T extends Doc> {\n _class: Ref<Class<T>>\n query: DocumentQuery<T>\n}\n\n/**\n * @public\n * Apply set of transactions in sequential manner with verification of set of queries.\n */\nexport interface TxApplyIf extends Tx {\n // only one operation per scope is allowed at one time.\n scope?: string\n\n // All matches should be true with at least one document.\n match?: DocumentClassQuery<Doc>[]\n\n // All matches should be false for all documents.\n notMatch?: DocumentClassQuery<Doc>[]\n\n // If all matched execute following transactions.\n txes: TxCUD<Doc>[]\n\n notify?: boolean // If false will not send notifications.\n\n // If passed, will send WorkspaceEvent.BulkUpdate event with list of classes to update\n extraNotify?: Ref<Class<Doc>>[]\n\n // If defined will go into a separate measure section\n measureName?: string\n}\n\nexport interface TxApplyResult {\n success: boolean\n serverTime: number\n}\n\n/**\n * @public\n */\nexport type MixinData<D extends Doc, M extends D> = Omit<M, keyof D> &\nPushOptions<Omit<M, keyof D>> &\nIncOptions<Omit<M, keyof D>>\n\n/**\n * @public\n */\nexport type MixinUpdate<D extends Doc, M extends D> = Partial<Omit<M, keyof D>> &\nPushOptions<Omit<M, keyof D>> &\nIncOptions<Omit<M, keyof D>>\n\n/**\n * Define Create/Update for mixin attributes.\n * @public\n */\nexport interface TxMixin<D extends Doc, M extends D> extends TxCUD<D> {\n mixin: Ref<Mixin<M>>\n attributes: MixinUpdate<D, M>\n}\n\n/**\n * @public\n */\nexport type ArrayAsElement<T> = {\n [P in keyof T]: T[P] extends Arr<infer X> ? Partial<X> | PullArray<X> | X : never\n}\n\n/**\n * @public\n */\nexport interface Position<X extends PropertyType> {\n $each: X[]\n $position: number\n}\n\n/**\n * @public\n */\nexport interface QueryUpdate<X extends PropertyType> {\n $query: Partial<X>\n $update: Partial<X>\n}\n\n/**\n * @public\n */\nexport interface PullArray<X extends PropertyType> {\n $in: X[]\n}\n\n/**\n * @public\n */\nexport interface MoveDescriptor<X extends PropertyType> {\n $value: X\n $position: number\n}\n\n/**\n * @public\n */\nexport type ArrayAsElementPosition<T extends object> = {\n [P in keyof T]-?: T[P] extends Arr<infer X> ? X | Position<X> : never\n}\n\n/**\n * @public\n */\nexport type ArrayAsElementUpdate<T extends object> = {\n [P in keyof T]-?: T[P] extends Arr<infer X> ? X | QueryUpdate<X> : never\n}\n\n/**\n * @public\n */\nexport type ArrayMoveDescriptor<T extends object> = {\n [P in keyof T]: T[P] extends Arr<infer X> ? MoveDescriptor<X> : never\n}\n\n/**\n * @public\n */\nexport type NumberProperties<T extends object> = {\n [P in keyof T]: T[P] extends number | undefined | null ? T[P] : never\n}\n\n/**\n * @public\n */\nexport type OmitNever<T extends object> = Omit<T, KeysByType<T, never>>\n\n/**\n * @public\n */\nexport interface PushOptions<T extends object> {\n $push?: Partial<OmitNever<ArrayAsElementPosition<Required<T>>>>\n $pull?: Partial<OmitNever<ArrayAsElement<Required<T>>>>\n}\n\n/**\n * @public\n */\nexport type UnsetProperties = Record<string, any>\n\n/**\n * @public\n */\nexport interface UnsetOptions {\n $unset?: UnsetProperties\n}\n\n/**\n * @public\n */\nexport interface SetEmbeddedOptions<T extends object> {\n $update?: Partial<OmitNever<ArrayAsElementUpdate<Required<T>>>>\n}\n\n/**\n * @public\n */\nexport interface IncOptions<T extends object> {\n $inc?: Partial<OmitNever<NumberProperties<T>>>\n}\n\n/**\n * @public\n */\nexport interface SpaceUpdate {\n space?: Ref<Space>\n}\n\n/**\n * @public\n */\nexport type DocumentUpdate<T extends Doc> = Partial<Data<T>> &\nPushOptions<T> &\nSetEmbeddedOptions<T> &\nIncOptions<T> &\nUnsetOptions &\nSpaceUpdate\n\n/**\n * @public\n */\nexport interface TxUpdateDoc<T extends Doc> extends TxCUD<T> {\n operations: DocumentUpdate<T>\n retrieve?: boolean\n}\n\n/**\n * @public\n */\nexport interface TxRemoveDoc<T extends Doc> extends TxCUD<T> {}\n\n/**\n * @public\n */\nexport const DOMAIN_TX = 'tx' as Domain\n\n/**\n * @public\n */\nexport interface WithTx {\n tx: (...txs: Tx[]) => Promise<TxResult[]>\n}\n\n/**\n * @public\n */\nexport abstract class TxProcessor implements WithTx {\n async tx (...txes: Tx[]): Promise<TxResult[]> {\n const result: TxResult[] = []\n for (const tx of txes) {\n switch (tx._class) {\n case core.class.TxCreateDoc:\n result.push(await this.txCreateDoc(tx as TxCreateDoc<Doc>))\n break\n case core.class.TxUpdateDoc:\n result.push(await this.txUpdateDoc(tx as TxUpdateDoc<Doc>))\n break\n case core.class.TxRemoveDoc:\n result.push(await this.txRemoveDoc(tx as TxRemoveDoc<Doc>))\n break\n case core.class.TxMixin:\n result.push(await this.txMixin(tx as TxMixin<Doc, Doc>))\n break\n case core.class.TxApplyIf:\n // Apply if processed on server\n return await Promise.resolve([])\n }\n }\n return result\n }\n\n static createDoc2Doc<T extends Doc>(tx: TxCreateDoc<T>, doClone = true): T {\n const attached =\n tx.attachedTo !== undefined\n ? {\n attachedTo: tx.attachedTo,\n attachedToClass: tx.attachedToClass,\n collection: tx.collection\n }\n : {}\n\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return {\n ...(doClone ? clone(tx.attributes) : tx.attributes),\n ...attached,\n _id: tx.objectId,\n _class: tx.objectClass,\n space: tx.objectSpace,\n modifiedBy: tx.modifiedBy,\n modifiedOn: tx.modifiedOn,\n createdBy: tx.createdBy ?? tx.modifiedBy,\n createdOn: tx.createdOn ?? tx.modifiedOn\n } as T\n }\n\n static updateDoc2Doc<T extends Doc>(rawDoc: T, tx: TxUpdateDoc<T>): T {\n const doc = _toDoc(rawDoc)\n TxProcessor.applyUpdate<T>(doc, tx.operations as any)\n doc.modifiedBy = tx.modifiedBy\n doc.modifiedOn = tx.modifiedOn\n return rawDoc\n }\n\n static applyUpdate<T extends Doc>(doc: T, ops: any): void {\n for (const key in ops) {\n if (key.startsWith('$')) {\n const operator = _getOperator(key)\n operator(doc, ops[key])\n } else {\n setObjectValue(key, doc, ops[key])\n }\n }\n }\n\n static updateMixin4Doc<D extends Doc, M extends D>(rawDoc: D, tx: TxMixin<D, M>): D {\n const ops = tx.attributes as any\n const doc = _toDoc(rawDoc)\n const mixin = (doc as any)[tx.mixin] ?? {}\n for (const key in ops) {\n if (key.startsWith('$')) {\n const operator = _getOperator(key)\n operator(mixin, ops[key])\n } else {\n setObjectValue(key, mixin, ops[key])\n }\n }\n rawDoc.modifiedBy = tx.modifiedBy\n rawDoc.modifiedOn = tx.modifiedOn\n ;(doc as any)[tx.mixin] = mixin\n return rawDoc\n }\n\n static buildDoc2Doc<D extends Doc>(txes: Tx[]): D | undefined | null {\n let doc: Doc\n const deleteTx = txes.find((tx) => tx._class === core.class.TxRemoveDoc)\n if (deleteTx !== undefined) {\n return null\n }\n const createTx = txes.find((tx) => tx._class === core.class.TxCreateDoc)\n if (createTx === undefined) {\n return\n }\n doc = TxProcessor.createDoc2Doc(createTx as TxCreateDoc<Doc>)\n for (const tx of txes) {\n if (tx._class === core.class.TxUpdateDoc) {\n doc = TxProcessor.updateDoc2Doc(doc, tx as TxUpdateDoc<Doc>)\n } else if (tx._class === core.class.TxMixin) {\n const mixinTx = tx as TxMixin<Doc, Doc>\n doc = TxProcessor.updateMixin4Doc(doc, mixinTx)\n }\n }\n return doc as D\n }\n\n static isExtendsCUD (_class: Ref<Class<Doc>>): boolean {\n return (\n _class === core.class.TxCreateDoc ||\n _class === core.class.TxUpdateDoc ||\n _class === core.class.TxRemoveDoc ||\n _class === core.class.TxMixin\n )\n }\n\n static txHasUpdate<T extends Doc>(tx: TxUpdateDoc<T>, attribute: string): boolean {\n const ops = tx.operations\n if ((ops as any)[attribute] !== undefined) return true\n for (const op in ops) {\n if (op.startsWith('$')) {\n const opValue = (ops as any)[op]\n for (const key in opValue) {\n if (key === attribute || key.startsWith(attribute + '.')) {\n return true\n }\n }\n }\n }\n return false\n }\n\n protected abstract txCreateDoc (tx: TxCreateDoc<Doc>): Promise<TxResult>\n protected abstract txUpdateDoc (tx: TxUpdateDoc<Doc>): Promise<TxResult>\n protected abstract txRemoveDoc (tx: TxRemoveDoc<Doc>): Promise<TxResult>\n protected abstract txMixin (tx: TxMixin<Doc, Doc>): Promise<TxResult>\n}\n\n/**\n * @public\n */\nexport class TxFactory {\n private readonly txSpace: Ref<Space>\n constructor (\n readonly account: PersonId,\n readonly isDerived: boolean = false\n ) {\n this.txSpace = isDerived ? core.space.DerivedTx : core.space.Tx\n }\n\n createTxCreateDoc<T extends Doc>(\n _class: Ref<Class<T>>,\n space: Ref<Space>,\n attributes: Data<T>,\n objectId?: Ref<T>,\n modifiedOn?: Timestamp,\n modifiedBy?: PersonId\n ): TxCreateDoc<T> {\n return {\n _id: generateId(),\n _class: core.class.TxCreateDoc,\n space: this.txSpace,\n objectId: objectId ?? generateId(),\n objectClass: _class,\n objectSpace: space,\n modifiedOn: modifiedOn ?? Date.now(),\n modifiedBy: modifiedBy ?? this.account,\n createdBy: modifiedBy ?? this.account,\n attributes\n }\n }\n\n createTxCollectionCUD<T extends Doc, P extends AttachedDoc>(\n _class: Ref<Class<T>>,\n objectId: Ref<T>,\n space: Ref<Space>,\n collection: string,\n tx: TxCUD<P>,\n modifiedOn?: Timestamp,\n modifiedBy?: PersonId\n ): TxCUD<P> {\n return {\n ...tx,\n collection,\n attachedTo: objectId,\n attachedToClass: _class,\n modifiedOn: modifiedOn ?? Date.now(),\n modifiedBy: modifiedBy ?? this.account\n }\n }\n\n createTxUpdateDoc<T extends Doc>(\n _class: Ref<Class<T>>,\n space: Ref<Space>,\n objectId: Ref<T>,\n operations: DocumentUpdate<T>,\n retrieve?: boolean,\n modifiedOn?: Timestamp,\n modifiedBy?: PersonId\n ): TxUpdateDoc<T> {\n return {\n _id: generateId(),\n _class: core.class.TxUpdateDoc,\n space: this.txSpace,\n modifiedBy: modifiedBy ?? this.account,\n modifiedOn: modifiedOn ?? Date.now(),\n objectId,\n objectClass: _class,\n objectSpace: space,\n operations,\n retrieve\n }\n }\n\n createTxRemoveDoc<T extends Doc>(\n _class: Ref<Class<T>>,\n space: Ref<Space>,\n objectId: Ref<T>,\n modifiedOn?: Timestamp,\n modifiedBy?: PersonId\n ): TxRemoveDoc<T> {\n return {\n _id: generateId(),\n _class: core.class.TxRemoveDoc,\n space: this.txSpace,\n modifiedBy: modifiedBy ?? this.account,\n modifiedOn: modifiedOn ?? Date.now(),\n objectId,\n objectClass: _class,\n objectSpace: space\n }\n }\n\n createTxMixin<D extends Doc, M extends D>(\n objectId: Ref<D>,\n objectClass: Ref<Class<D>>,\n objectSpace: Ref<Space>,\n mixin: Ref<Mixin<M>>,\n attributes: MixinUpdate<D, M>,\n modifiedOn?: Timestamp,\n modifiedBy?: PersonId\n ): TxMixin<D, M> {\n return {\n _id: generateId(),\n _class: core.class.TxMixin,\n space: this.txSpace,\n modifiedBy: modifiedBy ?? this.account,\n modifiedOn: modifiedOn ?? Date.now(),\n objectId,\n objectClass,\n objectSpace,\n mixin,\n attributes\n }\n }\n\n createTxApplyIf (\n space: Ref<Space>,\n scope: string | undefined,\n match: DocumentClassQuery<Doc>[],\n notMatch: DocumentClassQuery<Doc>[],\n txes: TxCUD<Doc>[],\n measureName: string | undefined,\n notify: boolean = true,\n extraNotify: Ref<Class<Doc>>[] = [],\n modifiedOn?: Timestamp,\n modifiedBy?: PersonId\n ): TxApplyIf {\n return {\n _id: generateId(),\n _class: core.class.TxApplyIf,\n space: this.txSpace,\n modifiedBy: modifiedBy ?? this.account,\n modifiedOn: modifiedOn ?? Date.now(),\n objectSpace: space,\n scope,\n match,\n notMatch,\n txes,\n measureName,\n notify,\n extraNotify\n }\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["//\n// Copyright \u00A9 2020, 2021 Anticrm Platform Contributors.\n//\n// Licensed under the Eclipse Public License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License. You may\n// obtain a copy of the License at https://www.eclipse.org/legal/epl-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n//\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n\nimport type {\n Arr,\n AttachedDoc,\n Class,\n Data,\n Doc,\n Domain,\n Mixin,\n OperationDomain,\n PersonId,\n PropertyType,\n Ref,\n Space,\n Timestamp\n} from './classes'\nimport { clone } from './clone'\nimport core from './component'\nimport { setObjectValue } from './objvalue'\nimport { _getOperator } from './operator'\nimport { _toDoc } from './proxy'\nimport type { DocumentQuery, TxResult } from './storage'\nimport { generateId, type KeysByType } from './utils'\n\n/**\n * @public\n */\nexport interface Tx extends Doc {\n objectSpace: Ref<Space> // space where transaction will operate\n meta?: Record<string, string | number | boolean> // meta information about transaction, non persisted to final DB's\n}\n\n/**\n * @public\n */\nexport enum WorkspaceEvent {\n UpgradeScheduled,\n IndexingUpdate,\n SecurityChange,\n MaintenanceNotification,\n BulkUpdate,\n LastTx\n}\n\n/**\n * Event to be send by server during model upgrade procedure.\n * @public\n */\nexport interface TxWorkspaceEvent<T = any> extends Tx {\n event: WorkspaceEvent\n params: T\n}\nexport interface TxDomainEvent<T = any> extends Tx {\n domain: OperationDomain\n event: T\n}\n\n/**\n * @public\n */\nexport interface IndexingUpdateEvent {\n _class: Ref<Class<Doc>>[]\n}\n\n/**\n * @public\n */\nexport interface BulkUpdateEvent {\n _class: Ref<Class<Doc>>[]\n}\n\n/**\n * @public\n */\nexport interface TxModelUpgrade extends Tx {}\n\n/**\n * @public\n */\nexport interface TxCUD<T extends Doc> extends Tx {\n objectId: Ref<T>\n objectClass: Ref<Class<T>>\n attachedTo?: Ref<Doc>\n attachedToClass?: Ref<Class<Doc>>\n collection?: string\n}\n\n/**\n * @public\n */\nexport interface TxCreateDoc<T extends Doc> extends TxCUD<T> {\n attributes: Data<T>\n}\n\n/**\n * @public\n */\nexport interface DocumentClassQuery<T extends Doc> {\n _class: Ref<Class<T>>\n query: DocumentQuery<T>\n}\n\n/**\n * @public\n * Apply set of transactions in sequential manner with verification of set of queries.\n */\nexport interface TxApplyIf extends Tx {\n // only one operation per scope is allowed at one time.\n scope?: string\n\n // All matches should be true with at least one document.\n match?: DocumentClassQuery<Doc>[]\n\n // All matches should be false for all documents.\n notMatch?: DocumentClassQuery<Doc>[]\n\n // If all matched execute following transactions.\n txes: TxCUD<Doc>[]\n\n notify?: boolean // If false will not send notifications.\n\n // If passed, will send WorkspaceEvent.BulkUpdate event with list of classes to update\n extraNotify?: Ref<Class<Doc>>[]\n\n // If defined will go into a separate measure section\n measureName?: string\n}\n\nexport interface TxApplyResult {\n success: boolean\n serverTime: number\n}\n\n/**\n * @public\n */\nexport type MixinData<D extends Doc, M extends D> = Omit<M, keyof D> &\nPushOptions<Omit<M, keyof D>> &\nIncOptions<Omit<M, keyof D>>\n\n/**\n * @public\n */\nexport type MixinUpdate<D extends Doc, M extends D> = Partial<Omit<M, keyof D>> &\nPushOptions<Omit<M, keyof D>> &\nIncOptions<Omit<M, keyof D>>\n\n/**\n * Define Create/Update for mixin attributes.\n * @public\n */\nexport interface TxMixin<D extends Doc, M extends D> extends TxCUD<D> {\n mixin: Ref<Mixin<M>>\n attributes: MixinUpdate<D, M>\n}\n\n/**\n * @public\n */\nexport type ArrayAsElement<T> = {\n [P in keyof T]: T[P] extends Arr<infer X> ? Partial<X> | PullArray<X> | X : never\n}\n\n/**\n * @public\n */\nexport interface Position<X extends PropertyType> {\n $each: X[]\n $position: number\n}\n\n/**\n * @public\n */\nexport interface QueryUpdate<X extends PropertyType> {\n $query: Partial<X>\n $update: Partial<X>\n}\n\n/**\n * @public\n */\nexport interface PullArray<X extends PropertyType> {\n $in: X[]\n}\n\n/**\n * @public\n */\nexport interface MoveDescriptor<X extends PropertyType> {\n $value: X\n $position: number\n}\n\n/**\n * @public\n */\nexport type ArrayAsElementPosition<T extends object> = {\n [P in keyof T]-?: T[P] extends Arr<infer X> ? X | Position<X> : never\n}\n\n/**\n * @public\n */\nexport type ArrayAsElementUpdate<T extends object> = {\n [P in keyof T]-?: T[P] extends Arr<infer X> ? X | QueryUpdate<X> : never\n}\n\n/**\n * @public\n */\nexport type ArrayMoveDescriptor<T extends object> = {\n [P in keyof T]: T[P] extends Arr<infer X> ? MoveDescriptor<X> : never\n}\n\n/**\n * @public\n */\nexport type NumberProperties<T extends object> = {\n [P in keyof T]: T[P] extends number | undefined | null ? T[P] : never\n}\n\n/**\n * @public\n */\nexport type OmitNever<T extends object> = Omit<T, KeysByType<T, never>>\n\n/**\n * @public\n */\nexport interface PushOptions<T extends object> {\n $push?: Partial<OmitNever<ArrayAsElementPosition<Required<T>>>>\n $pull?: Partial<OmitNever<ArrayAsElement<Required<T>>>>\n}\n\n/**\n * @public\n */\nexport type UnsetProperties = Record<string, any>\n\n/**\n * @public\n */\nexport interface UnsetOptions {\n $unset?: UnsetProperties\n}\n\n/**\n * @public\n */\nexport interface SetEmbeddedOptions<T extends object> {\n $update?: Partial<OmitNever<ArrayAsElementUpdate<Required<T>>>>\n}\n\n/**\n * @public\n */\nexport interface IncOptions<T extends object> {\n $inc?: Partial<OmitNever<NumberProperties<T>>>\n}\n\n/**\n * @public\n */\nexport interface SpaceUpdate {\n space?: Ref<Space>\n}\n\n/**\n * @public\n */\nexport type DocumentUpdate<T extends Doc> = Partial<Data<T>> &\nPushOptions<T> &\nSetEmbeddedOptions<T> &\nIncOptions<T> &\nUnsetOptions &\nSpaceUpdate\n\n/**\n * @public\n */\nexport interface TxUpdateDoc<T extends Doc> extends TxCUD<T> {\n operations: DocumentUpdate<T>\n retrieve?: boolean\n}\n\n/**\n * @public\n */\nexport interface TxRemoveDoc<T extends Doc> extends TxCUD<T> {}\n\n/**\n * @public\n */\nexport const DOMAIN_TX = 'tx' as Domain\n\n/**\n * @public\n */\nexport interface WithTx {\n tx: (...txs: Tx[]) => Promise<TxResult[]>\n}\n\n/**\n * @public\n */\nexport abstract class TxProcessor implements WithTx {\n async tx (...txes: Tx[]): Promise<TxResult[]> {\n const result: TxResult[] = []\n for (const tx of txes) {\n switch (tx._class) {\n case core.class.TxCreateDoc:\n result.push(await this.txCreateDoc(tx as TxCreateDoc<Doc>))\n break\n case core.class.TxUpdateDoc:\n result.push(await this.txUpdateDoc(tx as TxUpdateDoc<Doc>))\n break\n case core.class.TxRemoveDoc:\n result.push(await this.txRemoveDoc(tx as TxRemoveDoc<Doc>))\n break\n case core.class.TxMixin:\n result.push(await this.txMixin(tx as TxMixin<Doc, Doc>))\n break\n case core.class.TxApplyIf:\n // Apply if processed on server\n return await Promise.resolve([])\n }\n }\n return result\n }\n\n static createDoc2Doc<T extends Doc>(tx: TxCreateDoc<T>, doClone = true): T {\n const attached =\n tx.attachedTo !== undefined\n ? {\n attachedTo: tx.attachedTo,\n attachedToClass: tx.attachedToClass,\n collection: tx.collection\n }\n : {}\n\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return {\n ...(doClone ? clone(tx.attributes) : tx.attributes),\n ...attached,\n _id: tx.objectId,\n _class: tx.objectClass,\n space: tx.objectSpace,\n modifiedBy: tx.modifiedBy,\n modifiedOn: tx.modifiedOn,\n createdBy: tx.createdBy ?? tx.modifiedBy,\n createdOn: tx.createdOn ?? tx.modifiedOn\n } as T\n }\n\n static updateDoc2Doc<T extends Doc>(rawDoc: T, tx: TxUpdateDoc<T>): T {\n const doc = _toDoc(rawDoc)\n TxProcessor.applyUpdate<T>(doc, tx.operations as any)\n doc.modifiedBy = tx.modifiedBy\n doc.modifiedOn = tx.modifiedOn\n return rawDoc\n }\n\n static applyUpdate<T extends Doc>(doc: T, ops: any): void {\n for (const key in ops) {\n if (key.startsWith('$')) {\n const operator = _getOperator(key)\n operator(doc, ops[key])\n } else {\n setObjectValue(key, doc, ops[key])\n }\n }\n }\n\n static updateMixin4Doc<D extends Doc, M extends D>(rawDoc: D, tx: TxMixin<D, M>): D {\n const ops = tx.attributes as any\n const doc = _toDoc(rawDoc)\n const mixin = (doc as any)[tx.mixin] ?? {}\n for (const key in ops) {\n if (key.startsWith('$')) {\n const operator = _getOperator(key)\n operator(mixin, ops[key])\n } else {\n setObjectValue(key, mixin, ops[key])\n }\n }\n rawDoc.modifiedBy = tx.modifiedBy\n rawDoc.modifiedOn = tx.modifiedOn\n ;(doc as any)[tx.mixin] = mixin\n return rawDoc\n }\n\n static buildDoc2Doc<D extends Doc>(txes: Tx[]): D | undefined | null {\n let doc: Doc\n const deleteTx = txes.find((tx) => tx._class === core.class.TxRemoveDoc)\n if (deleteTx !== undefined) {\n return null\n }\n const createTx = txes.find((tx) => tx._class === core.class.TxCreateDoc)\n if (createTx === undefined) {\n return\n }\n doc = TxProcessor.createDoc2Doc(createTx as TxCreateDoc<Doc>)\n for (const tx of txes) {\n if (tx._class === core.class.TxUpdateDoc) {\n doc = TxProcessor.updateDoc2Doc(doc, tx as TxUpdateDoc<Doc>)\n } else if (tx._class === core.class.TxMixin) {\n const mixinTx = tx as TxMixin<Doc, Doc>\n doc = TxProcessor.updateMixin4Doc(doc, mixinTx)\n }\n }\n return doc as D\n }\n\n static isExtendsCUD (_class: Ref<Class<Doc>>): boolean {\n return (\n _class === core.class.TxCreateDoc ||\n _class === core.class.TxUpdateDoc ||\n _class === core.class.TxRemoveDoc ||\n _class === core.class.TxMixin\n )\n }\n\n static txHasUpdate<T extends Doc>(tx: TxUpdateDoc<T>, attribute: string): boolean {\n return TxProcessor.hasUpdate(tx.operations, attribute)\n }\n\n static hasUpdate<T extends Doc>(ops: DocumentUpdate<T>, attribute: string): boolean {\n if ((ops as any)[attribute] !== undefined) return true\n for (const op in ops) {\n if (op.startsWith('$')) {\n const opValue = (ops as any)[op]\n for (const key in opValue) {\n if (key === attribute || key.startsWith(attribute + '.')) {\n return true\n }\n }\n }\n }\n return false\n }\n\n protected abstract txCreateDoc (tx: TxCreateDoc<Doc>): Promise<TxResult>\n protected abstract txUpdateDoc (tx: TxUpdateDoc<Doc>): Promise<TxResult>\n protected abstract txRemoveDoc (tx: TxRemoveDoc<Doc>): Promise<TxResult>\n protected abstract txMixin (tx: TxMixin<Doc, Doc>): Promise<TxResult>\n}\n\n/**\n * @public\n */\nexport class TxFactory {\n private readonly txSpace: Ref<Space>\n constructor (\n readonly account: PersonId,\n readonly isDerived: boolean = false\n ) {\n this.txSpace = isDerived ? core.space.DerivedTx : core.space.Tx\n }\n\n createTxCreateDoc<T extends Doc>(\n _class: Ref<Class<T>>,\n space: Ref<Space>,\n attributes: Data<T>,\n objectId?: Ref<T>,\n modifiedOn?: Timestamp,\n modifiedBy?: PersonId\n ): TxCreateDoc<T> {\n return {\n _id: generateId(),\n _class: core.class.TxCreateDoc,\n space: this.txSpace,\n objectId: objectId ?? generateId(),\n objectClass: _class,\n objectSpace: space,\n modifiedOn: modifiedOn ?? Date.now(),\n modifiedBy: modifiedBy ?? this.account,\n createdBy: modifiedBy ?? this.account,\n attributes\n }\n }\n\n createTxCollectionCUD<T extends Doc, P extends AttachedDoc>(\n _class: Ref<Class<T>>,\n objectId: Ref<T>,\n space: Ref<Space>,\n collection: string,\n tx: TxCUD<P>,\n modifiedOn?: Timestamp,\n modifiedBy?: PersonId\n ): TxCUD<P> {\n return {\n ...tx,\n collection,\n attachedTo: objectId,\n attachedToClass: _class,\n modifiedOn: modifiedOn ?? Date.now(),\n modifiedBy: modifiedBy ?? this.account\n }\n }\n\n createTxUpdateDoc<T extends Doc>(\n _class: Ref<Class<T>>,\n space: Ref<Space>,\n objectId: Ref<T>,\n operations: DocumentUpdate<T>,\n retrieve?: boolean,\n modifiedOn?: Timestamp,\n modifiedBy?: PersonId\n ): TxUpdateDoc<T> {\n return {\n _id: generateId(),\n _class: core.class.TxUpdateDoc,\n space: this.txSpace,\n modifiedBy: modifiedBy ?? this.account,\n modifiedOn: modifiedOn ?? Date.now(),\n objectId,\n objectClass: _class,\n objectSpace: space,\n operations,\n retrieve\n }\n }\n\n createTxRemoveDoc<T extends Doc>(\n _class: Ref<Class<T>>,\n space: Ref<Space>,\n objectId: Ref<T>,\n modifiedOn?: Timestamp,\n modifiedBy?: PersonId\n ): TxRemoveDoc<T> {\n return {\n _id: generateId(),\n _class: core.class.TxRemoveDoc,\n space: this.txSpace,\n modifiedBy: modifiedBy ?? this.account,\n modifiedOn: modifiedOn ?? Date.now(),\n objectId,\n objectClass: _class,\n objectSpace: space\n }\n }\n\n createTxMixin<D extends Doc, M extends D>(\n objectId: Ref<D>,\n objectClass: Ref<Class<D>>,\n objectSpace: Ref<Space>,\n mixin: Ref<Mixin<M>>,\n attributes: MixinUpdate<D, M>,\n modifiedOn?: Timestamp,\n modifiedBy?: PersonId\n ): TxMixin<D, M> {\n return {\n _id: generateId(),\n _class: core.class.TxMixin,\n space: this.txSpace,\n modifiedBy: modifiedBy ?? this.account,\n modifiedOn: modifiedOn ?? Date.now(),\n objectId,\n objectClass,\n objectSpace,\n mixin,\n attributes\n }\n }\n\n createTxApplyIf (\n space: Ref<Space>,\n scope: string | undefined,\n match: DocumentClassQuery<Doc>[],\n notMatch: DocumentClassQuery<Doc>[],\n txes: TxCUD<Doc>[],\n measureName: string | undefined,\n notify: boolean = true,\n extraNotify: Ref<Class<Doc>>[] = [],\n modifiedOn?: Timestamp,\n modifiedBy?: PersonId\n ): TxApplyIf {\n return {\n _id: generateId(),\n _class: core.class.TxApplyIf,\n space: this.txSpace,\n modifiedBy: modifiedBy ?? this.account,\n modifiedOn: modifiedOn ?? Date.now(),\n objectSpace: space,\n scope,\n match,\n notMatch,\n txes,\n measureName,\n notify,\n extraNotify\n }\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["WorkspaceEvent", "core"]
7
7
  }
@@ -176,7 +176,7 @@ function fillDefaults(hierarchy, object, _class) {
176
176
  const baseClass = hierarchy.isDerived(_class, import_component.default.class.AttachedDoc) ? import_component.default.class.AttachedDoc : import_component.default.class.Doc;
177
177
  const attributes = hierarchy.getAllAttributes(_class, baseClass);
178
178
  for (const attribute of attributes) {
179
- if (attribute[1].defaultValue !== void 0) {
179
+ if (attribute[1].defaultValue != null) {
180
180
  if (object[attribute[0]] === void 0) {
181
181
  ;
182
182
  object[attribute[0]] = structuredClone(attribute[1].defaultValue);