document-model 5.0.0-staging.9 → 5.0.1-staging.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (447) hide show
  1. package/README.md +24 -24
  2. package/dist/src/core/actions.d.ts +79 -0
  3. package/dist/src/core/actions.d.ts.map +1 -0
  4. package/dist/src/core/actions.js +183 -0
  5. package/dist/src/core/actions.js.map +1 -0
  6. package/dist/src/core/crypto.d.ts +17 -0
  7. package/dist/src/core/crypto.d.ts.map +1 -0
  8. package/dist/src/core/crypto.js +87 -0
  9. package/dist/src/core/crypto.js.map +1 -0
  10. package/dist/src/{document/utils/document-helpers.d.ts → core/documents.d.ts} +51 -11
  11. package/dist/src/core/documents.d.ts.map +1 -0
  12. package/dist/src/{document/utils/document-helpers.js → core/documents.js} +320 -12
  13. package/dist/src/core/documents.js.map +1 -0
  14. package/dist/src/core/errors.d.ts +21 -0
  15. package/dist/src/core/errors.d.ts.map +1 -0
  16. package/dist/src/core/errors.js +47 -0
  17. package/dist/src/core/errors.js.map +1 -0
  18. package/dist/src/core/files.d.ts +14 -0
  19. package/dist/src/core/files.d.ts.map +1 -0
  20. package/dist/src/core/files.js +74 -0
  21. package/dist/src/core/files.js.map +1 -0
  22. package/dist/src/{document/utils → core}/header.d.ts +3 -35
  23. package/dist/src/core/header.d.ts.map +1 -0
  24. package/dist/src/{document/utils → core}/header.js +6 -19
  25. package/dist/src/core/header.js.map +1 -0
  26. package/dist/src/core/index.d.ts +12 -0
  27. package/dist/src/core/index.d.ts.map +1 -0
  28. package/dist/src/core/index.js +12 -0
  29. package/dist/src/core/index.js.map +1 -0
  30. package/dist/src/{document/utils/file.d.ts → core/node.d.ts} +40 -30
  31. package/dist/src/core/node.d.ts.map +1 -0
  32. package/dist/src/core/node.js +149 -0
  33. package/dist/src/core/node.js.map +1 -0
  34. package/dist/src/{document/actions → core}/operations.d.ts +4 -6
  35. package/dist/src/core/operations.d.ts.map +1 -0
  36. package/dist/src/{document/actions → core}/operations.js +2 -51
  37. package/dist/src/core/operations.js.map +1 -0
  38. package/dist/src/core/ph-types.d.ts +259 -0
  39. package/dist/src/core/ph-types.d.ts.map +1 -0
  40. package/dist/src/core/ph-types.js +15 -0
  41. package/dist/src/core/ph-types.js.map +1 -0
  42. package/dist/src/{document → core}/reducer.d.ts +23 -12
  43. package/dist/src/core/reducer.d.ts.map +1 -0
  44. package/dist/src/{document → core}/reducer.js +138 -74
  45. package/dist/src/core/reducer.js.map +1 -0
  46. package/dist/src/{document/schema/zod.d.ts → core/schemas.d.ts} +37 -39
  47. package/dist/src/core/schemas.d.ts.map +1 -0
  48. package/dist/src/{document/schema/zod.js → core/schemas.js} +1 -16
  49. package/dist/src/core/schemas.js.map +1 -0
  50. package/dist/src/core/state.d.ts +26 -0
  51. package/dist/src/core/state.d.ts.map +1 -0
  52. package/dist/src/core/state.js +56 -0
  53. package/dist/src/core/state.js.map +1 -0
  54. package/dist/src/core/types.d.ts +481 -0
  55. package/dist/src/core/types.d.ts.map +1 -0
  56. package/dist/src/{document → core}/types.js.map +1 -1
  57. package/dist/src/core/validation.d.ts +4 -0
  58. package/dist/src/core/validation.d.ts.map +1 -0
  59. package/dist/src/{document/utils → core}/validation.js +5 -1
  60. package/dist/src/core/validation.js.map +1 -0
  61. package/dist/src/document-model/actions.d.ts +158 -0
  62. package/dist/src/document-model/actions.d.ts.map +1 -0
  63. package/dist/src/document-model/actions.js +109 -0
  64. package/dist/src/document-model/actions.js.map +1 -0
  65. package/dist/src/document-model/constants.d.ts +7 -0
  66. package/dist/src/document-model/constants.d.ts.map +1 -0
  67. package/dist/src/document-model/{gen/document-model.js → constants.js} +35 -3
  68. package/dist/src/document-model/constants.js.map +1 -0
  69. package/dist/src/document-model/files.d.ts +5 -0
  70. package/dist/src/document-model/files.d.ts.map +1 -0
  71. package/dist/src/document-model/files.js +9 -0
  72. package/dist/src/document-model/files.js.map +1 -0
  73. package/dist/src/document-model/index.d.ts +9 -0
  74. package/dist/src/document-model/index.d.ts.map +1 -0
  75. package/dist/src/document-model/index.js +9 -0
  76. package/dist/src/document-model/index.js.map +1 -0
  77. package/dist/src/document-model/module.d.ts +1 -1
  78. package/dist/src/document-model/module.d.ts.map +1 -1
  79. package/dist/src/document-model/module.js +17 -10
  80. package/dist/src/document-model/module.js.map +1 -1
  81. package/dist/src/document-model/reducers.d.ts +11 -0
  82. package/dist/src/document-model/reducers.d.ts.map +1 -0
  83. package/dist/src/document-model/reducers.js +588 -0
  84. package/dist/src/document-model/reducers.js.map +1 -0
  85. package/dist/src/document-model/schemas.d.ts +449 -0
  86. package/dist/src/document-model/schemas.d.ts.map +1 -0
  87. package/dist/src/document-model/{gen/schema/zod.js → schemas.js} +9 -15
  88. package/dist/src/document-model/schemas.js.map +1 -0
  89. package/dist/src/document-model/state.d.ts +11 -0
  90. package/dist/src/document-model/state.d.ts.map +1 -0
  91. package/dist/src/document-model/{gen/ph-factories.js → state.js} +16 -15
  92. package/dist/src/document-model/state.js.map +1 -0
  93. package/dist/src/document-model/types.d.ts +670 -2
  94. package/dist/src/document-model/types.d.ts.map +1 -1
  95. package/dist/src/document-model/validation.d.ts +7 -0
  96. package/dist/src/document-model/validation.d.ts.map +1 -0
  97. package/dist/src/document-model/{custom/utils.js → validation.js} +1 -1
  98. package/dist/src/document-model/validation.js.map +1 -0
  99. package/dist/src/index.d.ts +5 -0
  100. package/dist/src/index.d.ts.map +1 -0
  101. package/dist/src/index.js +2 -0
  102. package/dist/src/index.js.map +1 -0
  103. package/dist/test/document/crypto.test.js +4 -8
  104. package/dist/test/document/crypto.test.js.map +1 -1
  105. package/dist/test/document/event-vs-command.test.js +2 -2
  106. package/dist/test/document/event-vs-command.test.js.map +1 -1
  107. package/dist/test/document/local.test.js +2 -3
  108. package/dist/test/document/local.test.js.map +1 -1
  109. package/dist/test/document/operation-id.test.js +3 -4
  110. package/dist/test/document/operation-id.test.js.map +1 -1
  111. package/dist/test/document/prune.test.js +12 -12
  112. package/dist/test/document/prune.test.js.map +1 -1
  113. package/dist/test/document/reducer.test.js +8 -10
  114. package/dist/test/document/reducer.test.js.map +1 -1
  115. package/dist/test/document/skip-operations.test.js +10 -10
  116. package/dist/test/document/skip-operations.test.js.map +1 -1
  117. package/dist/test/document/undo-redo.test.js +5 -7
  118. package/dist/test/document/undo-redo.test.js.map +1 -1
  119. package/dist/test/document/utils.test.js +5 -8
  120. package/dist/test/document/utils.test.js.map +1 -1
  121. package/dist/test/document-helpers/addUndo.test.js +1 -1
  122. package/dist/test/document-helpers/addUndo.test.js.map +1 -1
  123. package/dist/test/document-helpers/attachBranch.test.js +1 -1
  124. package/dist/test/document-helpers/attachBranch.test.js.map +1 -1
  125. package/dist/test/document-helpers/checkCleanedOperationsIntegrity.test.js +1 -1
  126. package/dist/test/document-helpers/checkCleanedOperationsIntegrity.test.js.map +1 -1
  127. package/dist/test/document-helpers/conflictResolution.test.js +1 -1
  128. package/dist/test/document-helpers/conflictResolution.test.js.map +1 -1
  129. package/dist/test/document-helpers/filterDuplicatedOperations.test.js +1 -1
  130. package/dist/test/document-helpers/filterDuplicatedOperations.test.js.map +1 -1
  131. package/dist/test/document-helpers/garbageCollect.test.js +1 -1
  132. package/dist/test/document-helpers/garbageCollect.test.js.map +1 -1
  133. package/dist/test/document-helpers/groupOperationsByScope.test.js +2 -2
  134. package/dist/test/document-helpers/groupOperationsByScope.test.js.map +1 -1
  135. package/dist/test/document-helpers/merge.test.js +1 -1
  136. package/dist/test/document-helpers/merge.test.js.map +1 -1
  137. package/dist/test/document-helpers/nextSkipNumber.test.js +1 -1
  138. package/dist/test/document-helpers/nextSkipNumber.test.js.map +1 -1
  139. package/dist/test/document-helpers/prepareOperations.test.js +1 -1
  140. package/dist/test/document-helpers/prepareOperations.test.js.map +1 -1
  141. package/dist/test/document-helpers/removeExistingOperations.test.js +2 -3
  142. package/dist/test/document-helpers/removeExistingOperations.test.js.map +1 -1
  143. package/dist/test/document-helpers/reshuffleByTimestamp.test.js +1 -1
  144. package/dist/test/document-helpers/reshuffleByTimestamp.test.js.map +1 -1
  145. package/dist/test/document-helpers/reshuffleByTimestampAndIndex.test.js +1 -1
  146. package/dist/test/document-helpers/reshuffleByTimestampAndIndex.test.js.map +1 -1
  147. package/dist/test/document-helpers/skipHeaderOperations.test.js +1 -1
  148. package/dist/test/document-helpers/skipHeaderOperations.test.js.map +1 -1
  149. package/dist/test/document-helpers/sortOperations.test.js +1 -1
  150. package/dist/test/document-helpers/sortOperations.test.js.map +1 -1
  151. package/dist/test/document-helpers/split.test.js +1 -1
  152. package/dist/test/document-helpers/split.test.js.map +1 -1
  153. package/dist/test/document-helpers/utils.d.ts +1 -1
  154. package/dist/test/document-helpers/utils.d.ts.map +1 -1
  155. package/dist/test/document-helpers/utils.js +1 -1
  156. package/dist/test/document-helpers/utils.js.map +1 -1
  157. package/dist/test/document-model/replay.test.js +19 -6
  158. package/dist/test/document-model/replay.test.js.map +1 -1
  159. package/dist/test/document-model/skip-operations.test.js +93 -95
  160. package/dist/test/document-model/skip-operations.test.js.map +1 -1
  161. package/dist/test/document-model/validation.test.js +16 -28
  162. package/dist/test/document-model/validation.test.js.map +1 -1
  163. package/dist/test/document-model/zip.test.js +19 -20
  164. package/dist/test/document-model/zip.test.js.map +1 -1
  165. package/dist/test/helpers.d.ts +9 -9
  166. package/dist/test/helpers.d.ts.map +1 -1
  167. package/dist/test/helpers.js +3 -5
  168. package/dist/test/helpers.js.map +1 -1
  169. package/dist/test/index.d.ts +4 -0
  170. package/dist/test/index.d.ts.map +1 -0
  171. package/dist/test/index.js +3 -0
  172. package/dist/test/index.js.map +1 -0
  173. package/dist/test/types.d.ts +6 -0
  174. package/dist/test/types.d.ts.map +1 -0
  175. package/dist/{src/document/schema → test}/types.js.map +1 -1
  176. package/dist/tsconfig.tsbuildinfo +1 -1
  177. package/dist/vitest.config.d.ts +1 -1
  178. package/dist/vitest.config.d.ts.map +1 -1
  179. package/dist/vitest.config.js +2 -8
  180. package/dist/vitest.config.js.map +1 -1
  181. package/package.json +25 -24
  182. package/dist/index.d.ts +0 -21
  183. package/dist/index.d.ts.map +0 -1
  184. package/dist/index.js +0 -15
  185. package/dist/index.js.map +0 -1
  186. package/dist/src/document/actions/creators.d.ts +0 -52
  187. package/dist/src/document/actions/creators.d.ts.map +0 -1
  188. package/dist/src/document/actions/creators.js +0 -57
  189. package/dist/src/document/actions/creators.js.map +0 -1
  190. package/dist/src/document/actions/operations.d.ts.map +0 -1
  191. package/dist/src/document/actions/operations.js.map +0 -1
  192. package/dist/src/document/actions/types.d.ts +0 -34
  193. package/dist/src/document/actions/types.d.ts.map +0 -1
  194. package/dist/src/document/actions/types.js +0 -7
  195. package/dist/src/document/actions/types.js.map +0 -1
  196. package/dist/src/document/object.d.ts +0 -125
  197. package/dist/src/document/object.d.ts.map +0 -1
  198. package/dist/src/document/object.js +0 -183
  199. package/dist/src/document/object.js.map +0 -1
  200. package/dist/src/document/ph-factories.d.ts +0 -37
  201. package/dist/src/document/ph-factories.d.ts.map +0 -1
  202. package/dist/src/document/ph-factories.js +0 -93
  203. package/dist/src/document/ph-factories.js.map +0 -1
  204. package/dist/src/document/ph-types.d.ts +0 -76
  205. package/dist/src/document/ph-types.d.ts.map +0 -1
  206. package/dist/src/document/ph-types.js +0 -2
  207. package/dist/src/document/ph-types.js.map +0 -1
  208. package/dist/src/document/reducer.d.ts.map +0 -1
  209. package/dist/src/document/reducer.js.map +0 -1
  210. package/dist/src/document/schema/types.d.ts +0 -188
  211. package/dist/src/document/schema/types.d.ts.map +0 -1
  212. package/dist/src/document/schema/types.js +0 -2
  213. package/dist/src/document/schema/zod.d.ts.map +0 -1
  214. package/dist/src/document/schema/zod.js.map +0 -1
  215. package/dist/src/document/signal.d.ts +0 -36
  216. package/dist/src/document/signal.d.ts.map +0 -1
  217. package/dist/src/document/signal.js +0 -2
  218. package/dist/src/document/signal.js.map +0 -1
  219. package/dist/src/document/types.d.ts +0 -314
  220. package/dist/src/document/types.d.ts.map +0 -1
  221. package/dist/src/document/types.js +0 -2
  222. package/dist/src/document/utils/base.d.ts +0 -87
  223. package/dist/src/document/utils/base.d.ts.map +0 -1
  224. package/dist/src/document/utils/base.js +0 -336
  225. package/dist/src/document/utils/base.js.map +0 -1
  226. package/dist/src/document/utils/browser.d.ts +0 -18
  227. package/dist/src/document/utils/browser.d.ts.map +0 -1
  228. package/dist/src/document/utils/browser.js +0 -54
  229. package/dist/src/document/utils/browser.js.map +0 -1
  230. package/dist/src/document/utils/crypto.d.ts +0 -12
  231. package/dist/src/document/utils/crypto.d.ts.map +0 -1
  232. package/dist/src/document/utils/crypto.js +0 -81
  233. package/dist/src/document/utils/crypto.js.map +0 -1
  234. package/dist/src/document/utils/document-helpers.d.ts.map +0 -1
  235. package/dist/src/document/utils/document-helpers.js.map +0 -1
  236. package/dist/src/document/utils/errors.d.ts +0 -10
  237. package/dist/src/document/utils/errors.d.ts.map +0 -1
  238. package/dist/src/document/utils/errors.js +0 -19
  239. package/dist/src/document/utils/errors.js.map +0 -1
  240. package/dist/src/document/utils/file.d.ts.map +0 -1
  241. package/dist/src/document/utils/file.js +0 -152
  242. package/dist/src/document/utils/file.js.map +0 -1
  243. package/dist/src/document/utils/header.d.ts.map +0 -1
  244. package/dist/src/document/utils/header.js.map +0 -1
  245. package/dist/src/document/utils/node.d.ts +0 -18
  246. package/dist/src/document/utils/node.d.ts.map +0 -1
  247. package/dist/src/document/utils/node.js +0 -62
  248. package/dist/src/document/utils/node.js.map +0 -1
  249. package/dist/src/document/utils/validation.d.ts +0 -3
  250. package/dist/src/document/utils/validation.d.ts.map +0 -1
  251. package/dist/src/document/utils/validation.js.map +0 -1
  252. package/dist/src/document-model/custom/reducers/header.d.ts +0 -3
  253. package/dist/src/document-model/custom/reducers/header.d.ts.map +0 -1
  254. package/dist/src/document-model/custom/reducers/header.js +0 -23
  255. package/dist/src/document-model/custom/reducers/header.js.map +0 -1
  256. package/dist/src/document-model/custom/reducers/module.d.ts +0 -3
  257. package/dist/src/document-model/custom/reducers/module.d.ts.map +0 -1
  258. package/dist/src/document-model/custom/reducers/module.js +0 -41
  259. package/dist/src/document-model/custom/reducers/module.js.map +0 -1
  260. package/dist/src/document-model/custom/reducers/operation-error.d.ts +0 -3
  261. package/dist/src/document-model/custom/reducers/operation-error.d.ts.map +0 -1
  262. package/dist/src/document-model/custom/reducers/operation-error.js +0 -94
  263. package/dist/src/document-model/custom/reducers/operation-error.js.map +0 -1
  264. package/dist/src/document-model/custom/reducers/operation-example.d.ts +0 -3
  265. package/dist/src/document-model/custom/reducers/operation-example.d.ts.map +0 -1
  266. package/dist/src/document-model/custom/reducers/operation-example.js +0 -53
  267. package/dist/src/document-model/custom/reducers/operation-example.js.map +0 -1
  268. package/dist/src/document-model/custom/reducers/operation.d.ts +0 -3
  269. package/dist/src/document-model/custom/reducers/operation.d.ts.map +0 -1
  270. package/dist/src/document-model/custom/reducers/operation.js +0 -125
  271. package/dist/src/document-model/custom/reducers/operation.js.map +0 -1
  272. package/dist/src/document-model/custom/reducers/state.d.ts +0 -3
  273. package/dist/src/document-model/custom/reducers/state.d.ts.map +0 -1
  274. package/dist/src/document-model/custom/reducers/state.js +0 -71
  275. package/dist/src/document-model/custom/reducers/state.js.map +0 -1
  276. package/dist/src/document-model/custom/reducers/versioning.d.ts +0 -8
  277. package/dist/src/document-model/custom/reducers/versioning.d.ts.map +0 -1
  278. package/dist/src/document-model/custom/reducers/versioning.js +0 -23
  279. package/dist/src/document-model/custom/reducers/versioning.js.map +0 -1
  280. package/dist/src/document-model/custom/utils.d.ts +0 -8
  281. package/dist/src/document-model/custom/utils.d.ts.map +0 -1
  282. package/dist/src/document-model/custom/utils.js.map +0 -1
  283. package/dist/src/document-model/gen/actions.d.ts +0 -16
  284. package/dist/src/document-model/gen/actions.d.ts.map +0 -1
  285. package/dist/src/document-model/gen/actions.js +0 -8
  286. package/dist/src/document-model/gen/actions.js.map +0 -1
  287. package/dist/src/document-model/gen/constants.d.ts +0 -7
  288. package/dist/src/document-model/gen/constants.d.ts.map +0 -1
  289. package/dist/src/document-model/gen/constants.js +0 -34
  290. package/dist/src/document-model/gen/constants.js.map +0 -1
  291. package/dist/src/document-model/gen/creators.d.ts +0 -8
  292. package/dist/src/document-model/gen/creators.d.ts.map +0 -1
  293. package/dist/src/document-model/gen/creators.js +0 -8
  294. package/dist/src/document-model/gen/creators.js.map +0 -1
  295. package/dist/src/document-model/gen/document-model.d.ts +0 -3
  296. package/dist/src/document-model/gen/document-model.d.ts.map +0 -1
  297. package/dist/src/document-model/gen/document-model.js.map +0 -1
  298. package/dist/src/document-model/gen/header/actions.d.ts +0 -28
  299. package/dist/src/document-model/gen/header/actions.d.ts.map +0 -1
  300. package/dist/src/document-model/gen/header/actions.js +0 -2
  301. package/dist/src/document-model/gen/header/actions.js.map +0 -1
  302. package/dist/src/document-model/gen/header/creators.d.ts +0 -9
  303. package/dist/src/document-model/gen/header/creators.d.ts.map +0 -1
  304. package/dist/src/document-model/gen/header/creators.js +0 -9
  305. package/dist/src/document-model/gen/header/creators.js.map +0 -1
  306. package/dist/src/document-model/gen/header/object.d.ts +0 -13
  307. package/dist/src/document-model/gen/header/object.d.ts.map +0 -1
  308. package/dist/src/document-model/gen/header/object.js +0 -23
  309. package/dist/src/document-model/gen/header/object.js.map +0 -1
  310. package/dist/src/document-model/gen/header/operations.d.ts +0 -11
  311. package/dist/src/document-model/gen/header/operations.d.ts.map +0 -1
  312. package/dist/src/document-model/gen/header/operations.js +0 -2
  313. package/dist/src/document-model/gen/header/operations.js.map +0 -1
  314. package/dist/src/document-model/gen/module/actions.d.ts +0 -24
  315. package/dist/src/document-model/gen/module/actions.d.ts.map +0 -1
  316. package/dist/src/document-model/gen/module/actions.js +0 -2
  317. package/dist/src/document-model/gen/module/actions.js.map +0 -1
  318. package/dist/src/document-model/gen/module/creators.d.ts +0 -8
  319. package/dist/src/document-model/gen/module/creators.d.ts.map +0 -1
  320. package/dist/src/document-model/gen/module/creators.js +0 -8
  321. package/dist/src/document-model/gen/module/creators.js.map +0 -1
  322. package/dist/src/document-model/gen/module/object.d.ts +0 -12
  323. package/dist/src/document-model/gen/module/object.d.ts.map +0 -1
  324. package/dist/src/document-model/gen/module/object.js +0 -20
  325. package/dist/src/document-model/gen/module/object.js.map +0 -1
  326. package/dist/src/document-model/gen/module/operations.d.ts +0 -10
  327. package/dist/src/document-model/gen/module/operations.d.ts.map +0 -1
  328. package/dist/src/document-model/gen/module/operations.js +0 -2
  329. package/dist/src/document-model/gen/module/operations.js.map +0 -1
  330. package/dist/src/document-model/gen/object.d.ts +0 -28
  331. package/dist/src/document-model/gen/object.d.ts.map +0 -1
  332. package/dist/src/document-model/gen/object.js +0 -46
  333. package/dist/src/document-model/gen/object.js.map +0 -1
  334. package/dist/src/document-model/gen/operation/actions.d.ts +0 -44
  335. package/dist/src/document-model/gen/operation/actions.d.ts.map +0 -1
  336. package/dist/src/document-model/gen/operation/actions.js +0 -2
  337. package/dist/src/document-model/gen/operation/actions.js.map +0 -1
  338. package/dist/src/document-model/gen/operation/creators.d.ts +0 -13
  339. package/dist/src/document-model/gen/operation/creators.d.ts.map +0 -1
  340. package/dist/src/document-model/gen/operation/creators.js +0 -13
  341. package/dist/src/document-model/gen/operation/creators.js.map +0 -1
  342. package/dist/src/document-model/gen/operation/object.d.ts +0 -17
  343. package/dist/src/document-model/gen/operation/object.d.ts.map +0 -1
  344. package/dist/src/document-model/gen/operation/object.js +0 -35
  345. package/dist/src/document-model/gen/operation/object.js.map +0 -1
  346. package/dist/src/document-model/gen/operation/operations.d.ts +0 -15
  347. package/dist/src/document-model/gen/operation/operations.d.ts.map +0 -1
  348. package/dist/src/document-model/gen/operation/operations.js +0 -2
  349. package/dist/src/document-model/gen/operation/operations.js.map +0 -1
  350. package/dist/src/document-model/gen/operation-error/actions.d.ts +0 -32
  351. package/dist/src/document-model/gen/operation-error/actions.d.ts.map +0 -1
  352. package/dist/src/document-model/gen/operation-error/actions.js +0 -2
  353. package/dist/src/document-model/gen/operation-error/actions.js.map +0 -1
  354. package/dist/src/document-model/gen/operation-error/creators.d.ts +0 -10
  355. package/dist/src/document-model/gen/operation-error/creators.d.ts.map +0 -1
  356. package/dist/src/document-model/gen/operation-error/creators.js +0 -10
  357. package/dist/src/document-model/gen/operation-error/creators.js.map +0 -1
  358. package/dist/src/document-model/gen/operation-error/object.d.ts +0 -14
  359. package/dist/src/document-model/gen/operation-error/object.d.ts.map +0 -1
  360. package/dist/src/document-model/gen/operation-error/object.js +0 -26
  361. package/dist/src/document-model/gen/operation-error/object.js.map +0 -1
  362. package/dist/src/document-model/gen/operation-error/operations.d.ts +0 -12
  363. package/dist/src/document-model/gen/operation-error/operations.d.ts.map +0 -1
  364. package/dist/src/document-model/gen/operation-error/operations.js +0 -2
  365. package/dist/src/document-model/gen/operation-error/operations.js.map +0 -1
  366. package/dist/src/document-model/gen/operation-example/actions.d.ts +0 -20
  367. package/dist/src/document-model/gen/operation-example/actions.d.ts.map +0 -1
  368. package/dist/src/document-model/gen/operation-example/actions.js +0 -2
  369. package/dist/src/document-model/gen/operation-example/actions.js.map +0 -1
  370. package/dist/src/document-model/gen/operation-example/creators.d.ts +0 -7
  371. package/dist/src/document-model/gen/operation-example/creators.d.ts.map +0 -1
  372. package/dist/src/document-model/gen/operation-example/creators.js +0 -7
  373. package/dist/src/document-model/gen/operation-example/creators.js.map +0 -1
  374. package/dist/src/document-model/gen/operation-example/object.d.ts +0 -11
  375. package/dist/src/document-model/gen/operation-example/object.d.ts.map +0 -1
  376. package/dist/src/document-model/gen/operation-example/object.js +0 -17
  377. package/dist/src/document-model/gen/operation-example/object.js.map +0 -1
  378. package/dist/src/document-model/gen/operation-example/operations.d.ts +0 -9
  379. package/dist/src/document-model/gen/operation-example/operations.d.ts.map +0 -1
  380. package/dist/src/document-model/gen/operation-example/operations.js +0 -2
  381. package/dist/src/document-model/gen/operation-example/operations.js.map +0 -1
  382. package/dist/src/document-model/gen/ph-factories.d.ts +0 -27
  383. package/dist/src/document-model/gen/ph-factories.d.ts.map +0 -1
  384. package/dist/src/document-model/gen/ph-factories.js.map +0 -1
  385. package/dist/src/document-model/gen/reducer.d.ts +0 -5
  386. package/dist/src/document-model/gen/reducer.d.ts.map +0 -1
  387. package/dist/src/document-model/gen/reducer.js +0 -193
  388. package/dist/src/document-model/gen/reducer.js.map +0 -1
  389. package/dist/src/document-model/gen/schema/index.d.ts +0 -3
  390. package/dist/src/document-model/gen/schema/index.d.ts.map +0 -1
  391. package/dist/src/document-model/gen/schema/index.js +0 -3
  392. package/dist/src/document-model/gen/schema/index.js.map +0 -1
  393. package/dist/src/document-model/gen/schema/types.d.ts +0 -457
  394. package/dist/src/document-model/gen/schema/types.d.ts.map +0 -1
  395. package/dist/src/document-model/gen/schema/types.js.map +0 -1
  396. package/dist/src/document-model/gen/schema/zod.d.ts +0 -453
  397. package/dist/src/document-model/gen/schema/zod.d.ts.map +0 -1
  398. package/dist/src/document-model/gen/schema/zod.js.map +0 -1
  399. package/dist/src/document-model/gen/state/actions.d.ts +0 -28
  400. package/dist/src/document-model/gen/state/actions.d.ts.map +0 -1
  401. package/dist/src/document-model/gen/state/actions.js +0 -2
  402. package/dist/src/document-model/gen/state/actions.js.map +0 -1
  403. package/dist/src/document-model/gen/state/creators.d.ts +0 -9
  404. package/dist/src/document-model/gen/state/creators.d.ts.map +0 -1
  405. package/dist/src/document-model/gen/state/creators.js +0 -9
  406. package/dist/src/document-model/gen/state/creators.js.map +0 -1
  407. package/dist/src/document-model/gen/state/object.d.ts +0 -13
  408. package/dist/src/document-model/gen/state/object.d.ts.map +0 -1
  409. package/dist/src/document-model/gen/state/object.js +0 -23
  410. package/dist/src/document-model/gen/state/object.js.map +0 -1
  411. package/dist/src/document-model/gen/state/operations.d.ts +0 -11
  412. package/dist/src/document-model/gen/state/operations.d.ts.map +0 -1
  413. package/dist/src/document-model/gen/state/operations.js +0 -2
  414. package/dist/src/document-model/gen/state/operations.js.map +0 -1
  415. package/dist/src/document-model/gen/types.d.ts +0 -7
  416. package/dist/src/document-model/gen/types.d.ts.map +0 -1
  417. package/dist/src/document-model/gen/types.js.map +0 -1
  418. package/dist/src/document-model/gen/utils.d.ts +0 -10
  419. package/dist/src/document-model/gen/utils.d.ts.map +0 -1
  420. package/dist/src/document-model/gen/utils.js +0 -31
  421. package/dist/src/document-model/gen/utils.js.map +0 -1
  422. package/dist/src/document-model/gen/versioning/actions.d.ts +0 -24
  423. package/dist/src/document-model/gen/versioning/actions.d.ts.map +0 -1
  424. package/dist/src/document-model/gen/versioning/actions.js +0 -2
  425. package/dist/src/document-model/gen/versioning/actions.js.map +0 -1
  426. package/dist/src/document-model/gen/versioning/creators.d.ts +0 -8
  427. package/dist/src/document-model/gen/versioning/creators.d.ts.map +0 -1
  428. package/dist/src/document-model/gen/versioning/creators.js +0 -8
  429. package/dist/src/document-model/gen/versioning/creators.js.map +0 -1
  430. package/dist/src/document-model/gen/versioning/object.d.ts +0 -12
  431. package/dist/src/document-model/gen/versioning/object.d.ts.map +0 -1
  432. package/dist/src/document-model/gen/versioning/object.js +0 -20
  433. package/dist/src/document-model/gen/versioning/object.js.map +0 -1
  434. package/dist/src/document-model/gen/versioning/operations.d.ts +0 -10
  435. package/dist/src/document-model/gen/versioning/operations.d.ts.map +0 -1
  436. package/dist/src/document-model/gen/versioning/operations.js +0 -2
  437. package/dist/src/document-model/gen/versioning/operations.js.map +0 -1
  438. package/dist/test/document/object.test.d.ts +0 -2
  439. package/dist/test/document/object.test.d.ts.map +0 -1
  440. package/dist/test/document/object.test.js +0 -13
  441. package/dist/test/document/object.test.js.map +0 -1
  442. package/dist/test/document-model/object.test.d.ts +0 -2
  443. package/dist/test/document-model/object.test.d.ts.map +0 -1
  444. package/dist/test/document-model/object.test.js +0 -243
  445. package/dist/test/document-model/object.test.js.map +0 -1
  446. /package/dist/src/{document-model/gen/schema → core}/types.js +0 -0
  447. /package/dist/{src/document-model/gen → test}/types.js +0 -0
@@ -0,0 +1,259 @@
1
+ import type { AttachmentInput } from "./types.js";
2
+ /**
3
+ * Information to verify the document creator.
4
+ */
5
+ export type PHDocumentSignatureInfo = {
6
+ /**
7
+ * The public key of the document creator.
8
+ **/
9
+ publicKey: JsonWebKey;
10
+ /** The nonce that was appended to the message to create the signature. */
11
+ nonce: string;
12
+ };
13
+ /** Meta information about the document. */
14
+ export type PHDocumentMeta = {
15
+ /** The preferred editor for the document. */
16
+ preferredEditor?: string;
17
+ };
18
+ /**
19
+ * The header of a document.
20
+ */
21
+ export type PHDocumentHeader = {
22
+ /**
23
+ * The id of the document.
24
+ *
25
+ * This is a Ed25519 signature and is immutable.
26
+ **/
27
+ id: string;
28
+ /**
29
+ * Information to verify the document creator.
30
+ *
31
+ * This is immutable.
32
+ **/
33
+ sig: PHDocumentSignatureInfo;
34
+ /**
35
+ * The type of the document.
36
+ *
37
+ * This is used as part of the signature payload and thus, cannot be changed
38
+ * after the document header has been created.
39
+ **/
40
+ documentType: string;
41
+ /**
42
+ * The timestamp of the creation date of the document, in UTC ISO format.
43
+ *
44
+ * This is used as part of the signature payload and thus, cannot be changed
45
+ * after the document header has been created.
46
+ **/
47
+ createdAtUtcIso: string;
48
+ /** The slug of the document. */
49
+ slug: string;
50
+ /** The name of the document. */
51
+ name: string;
52
+ /** The branch of this document. */
53
+ branch: string;
54
+ /**
55
+ * The revision of each scope of the document. This object is updated every
56
+ * time any _other_ scope is updated.
57
+ */
58
+ revision: {
59
+ [scope: string]: number;
60
+ };
61
+ /**
62
+ * The timestamp of the last change in the document, in UTC ISO format.
63
+ **/
64
+ lastModifiedAtUtcIso: string;
65
+ /** Meta information about the document. */
66
+ meta?: PHDocumentMeta;
67
+ };
68
+ /**
69
+ * The authentication state of the document.
70
+ *
71
+ * This has yet to be implemented.
72
+ */
73
+ export type PHAuthState = {};
74
+ export declare const HASH_ALGORITHM_SHA1 = "sha1";
75
+ export declare const HASH_ALGORITHM_SHA256 = "sha256";
76
+ export declare const HASH_ALGORITHM_SHA512 = "sha512";
77
+ export declare const HASH_ENCODING_BASE64 = "base64";
78
+ export declare const HASH_ENCODING_HEX = "hex";
79
+ /**
80
+ * Configuration for hashing document state in operations.
81
+ */
82
+ export type HashConfig = {
83
+ /** The hashing algorithm to use (e.g., "sha1", "sha256") */
84
+ algorithm: string;
85
+ /** The encoding format for the hash output (e.g., "base64", "hex") */
86
+ encoding: string;
87
+ /** Optional algorithm-specific parameters */
88
+ params?: Record<string, unknown>;
89
+ };
90
+ /**
91
+ * The document state of the document.
92
+ */
93
+ export type PHDocumentState = {
94
+ /** The current version of the document. */
95
+ version: string;
96
+ /** Hash configuration for operation state verification */
97
+ hash: HashConfig;
98
+ /** True if and only if the document has been deleted */
99
+ isDeleted?: boolean;
100
+ /** The timestamp when the document was deleted, in UTC ISO format */
101
+ deletedAtUtcIso?: string;
102
+ /** Optional: who deleted the document */
103
+ deletedBy?: string;
104
+ /** Optional: reason for deletion */
105
+ deletionReason?: string;
106
+ };
107
+ /**
108
+ * The base state of the document.
109
+ */
110
+ export type PHBaseState = {
111
+ /** Carries authentication information. */
112
+ auth: PHAuthState;
113
+ /** Carries information about the document. */
114
+ document: PHDocumentState;
115
+ };
116
+ /**
117
+ * A signature of an action.
118
+ *
119
+ * This will be refactored in a future release.
120
+ */
121
+ export type Signature = [string, string, string, string, string];
122
+ /**
123
+ * A user action signer.
124
+ */
125
+ export type UserActionSigner = {
126
+ address: string;
127
+ networkId: string;
128
+ chainId: number;
129
+ };
130
+ /**
131
+ * An app action signer.
132
+ */
133
+ export type AppActionSigner = {
134
+ name: string;
135
+ key: string;
136
+ };
137
+ /**
138
+ * An action signer.
139
+ */
140
+ export type ActionSigner = {
141
+ user: UserActionSigner;
142
+ app: AppActionSigner;
143
+ signatures: Signature[];
144
+ };
145
+ /**
146
+ * The context of an action.
147
+ */
148
+ export type ActionContext = {
149
+ /** The index of the previous operation, showing intended ordering. */
150
+ prevOpIndex?: number;
151
+ /** The hash of the previous operation, showing intended state. */
152
+ prevOpHash?: string;
153
+ /** A nonce, to cover specific signing attacks and to prevent replay attacks from no-ops. */
154
+ nonce?: string;
155
+ /** The signer of the action. */
156
+ signer?: ActionSigner;
157
+ };
158
+ /**
159
+ * String type representing an attachment in a Document.
160
+ *
161
+ * @remarks
162
+ * Attachment string is formatted as `attachment://<filename>`.
163
+ */
164
+ export type AttachmentRef = string;
165
+ /**
166
+ * Defines the basic structure of an action.
167
+ */
168
+ export type Action = {
169
+ /** The id of the action. This is distinct from the operation id. */
170
+ id: string;
171
+ /** The name of the action. */
172
+ type: string;
173
+ /** The timestamp of the action. */
174
+ timestampUtcMs: string;
175
+ /** The payload of the action. */
176
+ input: unknown;
177
+ /** The scope of the action */
178
+ scope: string;
179
+ /**
180
+ * The attachments included in the action.
181
+ *
182
+ * This will be refactored in a future release.
183
+ */
184
+ attachments?: AttachmentInput[];
185
+ /** The context of the action. */
186
+ context?: ActionContext;
187
+ };
188
+ /**
189
+ * An operation that was applied to a {@link BaseDocument}.
190
+ *
191
+ * @remarks
192
+ * Wraps an action with an index, to be added to the operations history of a Document.
193
+ * The `index` field is used to keep all operations in order and enable replaying the
194
+ * document's history from the beginning.
195
+ *
196
+ * @typeParam A - The type of the action.
197
+ */
198
+ export type Operation = {
199
+ /** Position of the operation in the history */
200
+ index: number;
201
+ /** Timestamp of when the operation was added */
202
+ timestampUtcMs: string;
203
+ /** Hash of the resulting document data after the operation */
204
+ hash: string;
205
+ /** The number of operations skipped with this Operation */
206
+ skip: number;
207
+ /** Error message for a failed action */
208
+ error?: string;
209
+ /** The resulting state after the operation */
210
+ resultingState?: string;
211
+ /** Unique operation id. This is distinct from the action id and can be undefined and assigned later. */
212
+ id?: string;
213
+ /**
214
+ * The action that was applied to the document to produce this operation.
215
+ */
216
+ action: Action;
217
+ };
218
+ /**
219
+ * The operations history of the document by scope.
220
+ *
221
+ * This will be removed in a future release.
222
+ *
223
+ * TODO: Type should be Partial<Record<string, Operation[]>>,
224
+ * but that is a breaking change for codegen + external doc models.
225
+ */
226
+ export type DocumentOperations = Record<string, Operation[]>;
227
+ /**
228
+ * The base type of a document model.
229
+ *
230
+ * @remarks
231
+ * This type is extended by all Document models.
232
+ *
233
+ * @typeParam TState - The type of the document state.
234
+ */
235
+ export type PHDocument<TState extends PHBaseState = PHBaseState> = {
236
+ /** The header of the document. */
237
+ header: PHDocumentHeader;
238
+ /** The document model specific state. */
239
+ state: TState;
240
+ /**
241
+ * The initial state of the document, enabling replaying operations.
242
+ *
243
+ * This will be removed in a future release.
244
+ */
245
+ initialState: TState;
246
+ /**
247
+ * The operations history of the document.
248
+ *
249
+ * This will be removed in a future release.
250
+ */
251
+ operations: DocumentOperations;
252
+ /**
253
+ * A list of undone operations
254
+ *
255
+ * This will be removed in a future release.
256
+ */
257
+ clipboard: Operation[];
258
+ };
259
+ //# sourceMappingURL=ph-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ph-types.d.ts","sourceRoot":"","sources":["../../../src/core/ph-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ ///////////////////////////////////////////////////////////////////////////////
2
+ // These are "Reactor V2" types, that have passed through the on-going reactor
3
+ // refactor.
4
+ //
5
+ // Please do not add types to this file that have not been spec'd out in the
6
+ // docs/planning folder in the reactor/ package.
7
+ ///////////////////////////////////////////////////////////////////////////////
8
+ // Known hash algorithms (can be extended without breaking changes)
9
+ export const HASH_ALGORITHM_SHA1 = "sha1";
10
+ export const HASH_ALGORITHM_SHA256 = "sha256";
11
+ export const HASH_ALGORITHM_SHA512 = "sha512";
12
+ // Known encodings (can be extended without breaking changes)
13
+ export const HASH_ENCODING_BASE64 = "base64";
14
+ export const HASH_ENCODING_HEX = "hex";
15
+ //# sourceMappingURL=ph-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ph-types.js","sourceRoot":"","sources":["../../../src/core/ph-types.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,8EAA8E;AAC9E,YAAY;AACZ,EAAE;AACF,4EAA4E;AAC5E,gDAAgD;AAChD,+EAA+E;AA0F/E,mEAAmE;AACnE,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAC1C,MAAM,CAAC,MAAM,qBAAqB,GAAG,QAAQ,CAAC;AAC9C,MAAM,CAAC,MAAM,qBAAqB,GAAG,QAAQ,CAAC;AAE9C,6DAA6D;AAC7D,MAAM,CAAC,MAAM,oBAAoB,GAAG,QAAQ,CAAC;AAC7C,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC"}
@@ -1,15 +1,6 @@
1
- import { type PHBaseState } from "./ph-types.js";
2
- import { type SignalDispatch } from "./signal.js";
3
- import { type Action, type Operation, type PHDocument, type ReducerOptions, type StateReducer } from "./types.js";
4
- /**
5
- * Updates the document header with the latest revision number and
6
- * date of last modification.
7
- *
8
- * @param state The current state of the document.
9
- * @param operation The action being applied to the document.
10
- * @returns The updated document state.
11
- */
12
- export declare function updateHeaderRevision(document: PHDocument, scope: string): PHDocument;
1
+ import type { Action, DocumentOperations, Operation, PHBaseState, PHDocument, PHDocumentHeader } from "./ph-types.js";
2
+ import type { PruneActionInput, Reducer, ReducerOptions, ReplayDocumentOptions, SignalDispatch, SkipHeaderOperations, StateReducer } from "./types.js";
3
+ export declare function replayOperations<TState extends PHBaseState = PHBaseState>(initialState: TState, clearedOperations: DocumentOperations, stateReducer: StateReducer<TState>, dispatch?: SignalDispatch, header?: PHDocumentHeader, documentReducer?: typeof baseReducer, skipHeaderOperations?: SkipHeaderOperations, options?: ReplayDocumentOptions): PHDocument<TState>;
13
4
  /**
14
5
  * Updates the document state based on the provided action.
15
6
  *
@@ -47,4 +38,24 @@ export declare function processUndoRedo<TState extends PHBaseState = PHBaseState
47
38
  * @returns The new state of the document.
48
39
  */
49
40
  export declare function baseReducer<TState extends PHBaseState = PHBaseState>(document: PHDocument<TState>, action: Action, customReducer: StateReducer<TState>, dispatch?: SignalDispatch, options?: ReducerOptions): PHDocument<TState>;
41
+ /**
42
+ * Helper function to create a document model reducer.
43
+ *
44
+ * @remarks
45
+ * This function creates a new reducer that wraps the provided `reducer` with
46
+ * `documentReducer`, adding support for document actions:
47
+ * - `SET_NAME`
48
+ * - `UNDO`
49
+ * - `REDO`
50
+ * - `PRUNE`
51
+ *
52
+ * It also updates the document-related attributes on every operation.
53
+ *
54
+ * @param reducer - The custom reducer to wrap.
55
+ * @param documentReducer - The document reducer to use.
56
+ *
57
+ * @returns The new reducer.
58
+ */
59
+ export declare function createReducer<TState extends PHBaseState = PHBaseState>(stateReducer: StateReducer<TState>, documentReducer?: typeof baseReducer): Reducer<TState>;
60
+ export declare function pruneOperation<TState extends PHBaseState = PHBaseState>(document: PHDocument<TState>, input: PruneActionInput, wrappedReducer: StateReducer<TState>): PHDocument<TState>;
50
61
  //# sourceMappingURL=reducer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reducer.d.ts","sourceRoot":"","sources":["../../../src/core/reducer.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EACV,MAAM,EACN,kBAAkB,EAClB,SAAS,EACT,WAAW,EACX,UAAU,EACV,gBAAgB,EACjB,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EACV,gBAAgB,EAChB,OAAO,EACP,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,oBAAoB,EACpB,YAAY,EACb,MAAM,YAAY,CAAC;AAGpB,wBAAgB,gBAAgB,CAAC,MAAM,SAAS,WAAW,GAAG,WAAW,EACvE,YAAY,EAAE,MAAM,EACpB,iBAAiB,EAAE,kBAAkB,EACrC,YAAY,EAAE,YAAY,CAAC,MAAM,CAAC,EAClC,QAAQ,CAAC,EAAE,cAAc,EACzB,MAAM,CAAC,EAAE,gBAAgB,EACzB,eAAe,qBAAc,EAC7B,oBAAoB,GAAE,oBAAyB,EAC/C,OAAO,CAAC,EAAE,qBAAqB,GAC9B,UAAU,CAAC,MAAM,CAAC,CAcpB;AAqFD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,SAAS,SAAS,UAAU,EACzD,QAAQ,EAAE,SAAS,EACnB,MAAM,EAAE,MAAM,EACd,uBAAuB,UAAQ,EAC/B,IAAI,SAAI,EACR,SAAS,CAAC,EAAE,SAAS,GACpB,SAAS,CAsBX;AA8BD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,MAAM,SAAS,WAAW,GAAG,WAAW,EACtE,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,EAC5B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX;IACD,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB,EAAE,OAAO,CAAC;CAClC,CASA;AAoHD;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,MAAM,SAAS,WAAW,GAAG,WAAW,EAClE,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,EAC5B,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,YAAY,CAAC,MAAM,CAAC,EACnC,QAAQ,CAAC,EAAE,cAAc,EACzB,OAAO,GAAE,cAAmB,GAC3B,UAAU,CAAC,MAAM,CAAC,CAqLpB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAAC,MAAM,SAAS,WAAW,GAAG,WAAW,EACpE,YAAY,EAAE,YAAY,CAAC,MAAM,CAAC,EAClC,eAAe,qBAAc,GAC5B,OAAO,CAAC,MAAM,CAAC,CAUjB;AAED,wBAAgB,cAAc,CAAC,MAAM,SAAS,WAAW,GAAG,WAAW,EACrE,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,EAC5B,KAAK,EAAE,gBAAgB,EACvB,cAAc,EAAE,YAAY,CAAC,MAAM,CAAC,GACnC,UAAU,CAAC,MAAM,CAAC,CAkEpB"}
@@ -1,42 +1,14 @@
1
1
  import { castDraft, create, unsafe } from "mutative";
2
- import { loadStateOperation, pruneOperation, redoOperation, setNameOperation, undoOperation, } from "./actions/operations.js";
3
- import { LOAD_STATE, PRUNE, REDO, SET_NAME, UNDO } from "./actions/types.js";
4
- import { actionFromAction, operationFromAction, operationFromOperation, } from "./ph-factories.js";
5
- import { DocumentActionSchema } from "./schema/zod.js";
6
- import { getDocumentLastModified, hashDocumentStateForScope, isDocumentAction, isUndo, isUndoRedo, parseResultingState, replayOperations, } from "./utils/base.js";
7
- import { diffOperations, garbageCollect, garbageCollectDocumentOperations, skipHeaderOperations, sortOperations, } from "./utils/document-helpers.js";
8
- /**
9
- * Gets the next revision number based on the provided scope.
10
- *
11
- * @param state The current state of the document.
12
- * @param scope The scope of the operation.
13
- * @returns The next revision number.
14
- */
15
- function getNextRevision(document, scope) {
16
- const latestOperationIndex = document.operations[scope].at(-1)?.index ?? -1;
17
- return (latestOperationIndex ?? -1) + 1;
18
- }
19
- /**
20
- * Updates the document header with the latest revision number and
21
- * date of last modification.
22
- *
23
- * @param state The current state of the document.
24
- * @param operation The action being applied to the document.
25
- * @returns The updated document state.
26
- */
27
- export function updateHeaderRevision(document, scope) {
28
- const header = {
29
- ...document.header,
30
- revision: {
31
- ...document.header.revision,
32
- [scope]: getNextRevision(document, scope),
33
- },
34
- lastModifiedAtUtcIso: getDocumentLastModified(document),
35
- };
36
- return {
37
- ...document,
38
- header,
39
- };
2
+ import { actionFromAction, loadState, operationFromAction, operationFromOperation, } from "./actions.js";
3
+ import { diffOperations, garbageCollect, garbageCollectDocumentOperations, hashDocumentStateForScope, isDocumentAction, isUndo, isUndoRedo, parseResultingState, replayDocument, skipHeaderOperations, sortOperations, updateHeaderRevision, } from "./documents.js";
4
+ import { loadStateOperation, redoOperation, setNameOperation, undoOperation, } from "./operations.js";
5
+ import { DocumentActionSchema } from "./schemas.js";
6
+ // This rebuilds the document according to the provided actions.
7
+ export function replayOperations(initialState, clearedOperations, stateReducer, dispatch, header, documentReducer = baseReducer, skipHeaderOperations = {}, options) {
8
+ // wraps the provided custom reducer with the
9
+ // base document reducer
10
+ const wrappedReducer = createReducer(stateReducer, documentReducer);
11
+ return replayDocument(initialState, clearedOperations, wrappedReducer, dispatch, header, skipHeaderOperations, options);
40
12
  }
41
13
  /**
42
14
  * Updates the operations history of the document based on the provided action.
@@ -51,11 +23,14 @@ export function updateHeaderRevision(document, scope) {
51
23
  function updateOperationsForAction(document, action, reuseLastOperationIndex = false, skip = 0) {
52
24
  // UNDO, REDO and PRUNE are meta operations
53
25
  // that alter the operations history themselves
54
- if ([UNDO, REDO, PRUNE].includes(action.type)) {
26
+ if (["UNDO", "REDO", "PRUNE"].includes(action.type)) {
55
27
  return document;
56
28
  }
57
29
  const scope = action.scope;
58
- const operations = document.operations[scope].slice();
30
+ let operations = [];
31
+ if (document.operations[scope]) {
32
+ operations = document.operations[scope].slice();
33
+ }
59
34
  const latestOperation = operations.sort((a, b) => a.index - b.index).at(-1);
60
35
  const lastOperationIndex = latestOperation?.index ?? -1;
61
36
  const index = reuseLastOperationIndex
@@ -72,7 +47,10 @@ function updateOperationsForAction(document, action, reuseLastOperationIndex = f
72
47
  }
73
48
  function updateOperationsForOperation(document, operation, reuseLastOperationIndex = false, skip = 0) {
74
49
  const scope = operation.action.scope;
75
- const operations = document.operations[scope].slice();
50
+ const scopeOperations = document.operations[scope];
51
+ const operations = scopeOperations
52
+ ? scopeOperations.slice()
53
+ : [];
76
54
  const latestOperation = operations.sort((a, b) => a.index - b.index).at(-1);
77
55
  const lastOperationIndex = latestOperation?.index ?? -1;
78
56
  const nextIndex = reuseLastOperationIndex
@@ -124,11 +102,11 @@ function _baseReducer(document, action, wrappedReducer) {
124
102
  // throws if action is not valid base action
125
103
  const parsedAction = DocumentActionSchema().parse(action);
126
104
  switch (parsedAction.type) {
127
- case SET_NAME:
105
+ case "SET_NAME":
128
106
  return setNameOperation(document, parsedAction.input);
129
- case PRUNE:
107
+ case "PRUNE":
130
108
  return pruneOperation(document, parsedAction.input, wrappedReducer);
131
- case LOAD_STATE:
109
+ case "LOAD_STATE":
132
110
  return loadStateOperation(document, parsedAction.input);
133
111
  default:
134
112
  return document;
@@ -144,9 +122,9 @@ function _baseReducer(document, action, wrappedReducer) {
144
122
  */
145
123
  export function processUndoRedo(document, action, skip) {
146
124
  switch (action.type) {
147
- case UNDO:
125
+ case "UNDO":
148
126
  return undoOperation(document, action, skip);
149
- case REDO:
127
+ case "REDO":
150
128
  return redoOperation(document, action, skip);
151
129
  default:
152
130
  return { document, action, skip, reuseLastOperationIndex: false };
@@ -154,15 +132,20 @@ export function processUndoRedo(document, action, skip) {
154
132
  }
155
133
  function processSkipOperation(document, action, customReducer, skipValue, reuseOperationResultingState = false, resultingStateParser = parseResultingState) {
156
134
  const scope = action.scope;
157
- const latestOperation = document.operations[scope].at(-1);
135
+ const scopeOperations = document.operations[scope];
136
+ if (!scopeOperations) {
137
+ return document;
138
+ }
139
+ const latestOperation = scopeOperations.at(-1);
158
140
  if (!latestOperation)
159
141
  return document;
160
142
  const documentOperations = garbageCollectDocumentOperations({
161
143
  ...document.operations,
162
- [scope]: skipHeaderOperations(document.operations[scope], latestOperation),
144
+ [scope]: skipHeaderOperations(scopeOperations, latestOperation),
163
145
  });
164
146
  let scopeState = undefined;
165
- const lastRemainingOperation = documentOperations[scope].at(-1);
147
+ const documentScopeOps = documentOperations[scope];
148
+ const lastRemainingOperation = documentScopeOps?.at(-1);
166
149
  // if the last operation has the resulting state and
167
150
  // reuseOperationResultingState is true then reuses it
168
151
  // instead of replaying the operations from the beginning
@@ -174,7 +157,6 @@ function processSkipOperation(document, action, customReducer, skipValue, reuseO
174
157
  reuseOperationResultingState,
175
158
  operationResultingStateParser: resultingStateParser,
176
159
  });
177
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
178
160
  scopeState = state[scope];
179
161
  }
180
162
  return {
@@ -189,13 +171,21 @@ function processSkipOperation(document, action, customReducer, skipValue, reuseO
189
171
  };
190
172
  }
191
173
  function processUndoOperation(document, scope, customReducer, reuseOperationResultingState = false, resultingStateParser = parseResultingState) {
192
- const operations = [...document.operations[scope]];
174
+ const scopeOperations = document.operations[scope];
175
+ if (!scopeOperations) {
176
+ return document;
177
+ }
178
+ const operations = [...scopeOperations];
193
179
  const sortedOperations = sortOperations(operations);
194
180
  sortedOperations.pop();
195
181
  const documentOperations = garbageCollectDocumentOperations({
196
182
  ...document.operations,
197
183
  });
198
- const clearedOperations = [...documentOperations[scope]];
184
+ const documentScopeOps = documentOperations[scope];
185
+ if (!documentScopeOps) {
186
+ return document;
187
+ }
188
+ const clearedOperations = [...documentScopeOps];
199
189
  const diff = diffOperations(garbageCollect(sortedOperations), clearedOperations);
200
190
  const doc = replayOperations(document.initialState, documentOperations, customReducer, undefined, undefined, undefined, undefined, {
201
191
  reuseOperationResultingState,
@@ -292,19 +282,31 @@ export function baseReducer(document, action, customReducer, dispatch, options =
292
282
  catch (error) {
293
283
  // if the reducer throws an error then we should keep the previous state (before replayOperations)
294
284
  // and remove skip number from action/operation
295
- const lastOperationIndex = newDocument.operations[_action.scope].length - 1;
296
- draft.operations[_action.scope][lastOperationIndex].error = error.message;
297
- draft.operations[_action.scope][lastOperationIndex].skip = 0;
285
+ const actionScopeOps = newDocument.operations[_action.scope];
286
+ if (!actionScopeOps) {
287
+ throw new Error(`No operations found for scope: ${_action.scope}`);
288
+ }
289
+ const lastOperationIndex = actionScopeOps.length - 1;
290
+ const draftScopeOps = draft.operations[_action.scope];
291
+ if (!draftScopeOps) {
292
+ throw new Error(`No operations found in draft for scope: ${_action.scope}`);
293
+ }
294
+ draftScopeOps[lastOperationIndex].error = error.message;
295
+ draftScopeOps[lastOperationIndex].skip = 0;
298
296
  if (shouldProcessSkipOperation) {
299
297
  draft.state = castDraft({
300
298
  ...document.state,
301
299
  });
300
+ const documentScopeOps = document.operations[_action.scope];
301
+ if (!documentScopeOps) {
302
+ throw new Error(`No operations found for scope: ${_action.scope}`);
303
+ }
302
304
  draft.operations = castDraft({
303
305
  ...document.operations,
304
306
  [_action.scope]: [
305
- ...document.operations[_action.scope],
307
+ ...documentScopeOps,
306
308
  {
307
- ...draft.operations[_action.scope][lastOperationIndex],
309
+ ...draftScopeOps[lastOperationIndex],
308
310
  },
309
311
  ],
310
312
  });
@@ -313,7 +315,7 @@ export function baseReducer(document, action, customReducer, dispatch, options =
313
315
  });
314
316
  // updates the document history
315
317
  // meta operations are not added to the operations history
316
- if ([UNDO, REDO, PRUNE].includes(_action.type)) {
318
+ if (["UNDO", "REDO", "PRUNE"].includes(_action.type)) {
317
319
  return newDocument;
318
320
  }
319
321
  // if reuseHash is true, checks if the action has
@@ -325,27 +327,89 @@ export function baseReducer(document, action, customReducer, dispatch, options =
325
327
  hash = options.replayOptions.operation.hash;
326
328
  }
327
329
  // updates the last operation with the hash of the resulting state
328
- const lastOperation = newDocument.operations[scope].at(-1);
330
+ const scopeOperations = newDocument.operations[scope];
331
+ const lastOperation = scopeOperations?.at(-1);
329
332
  if (lastOperation) {
330
333
  lastOperation.hash = hash;
331
334
  if (reuseOperationResultingState) {
332
- lastOperation.resultingState = JSON.stringify(
333
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
334
- newDocument.state[scope]);
335
- }
336
- // if the action has attachments then adds them to the document
337
- if (!isDocumentAction(_action) && _action.attachments) {
338
- _action.attachments.forEach((attachment) => {
339
- const { hash, ...file } = attachment;
340
- if (!newDocument.attachments) {
341
- newDocument.attachments = {};
342
- }
343
- newDocument.attachments[hash] = {
344
- ...file,
345
- };
346
- });
335
+ lastOperation.resultingState = JSON.stringify(newDocument.state[scope]);
347
336
  }
348
337
  }
349
338
  return newDocument;
350
339
  }
340
+ /**
341
+ * Helper function to create a document model reducer.
342
+ *
343
+ * @remarks
344
+ * This function creates a new reducer that wraps the provided `reducer` with
345
+ * `documentReducer`, adding support for document actions:
346
+ * - `SET_NAME`
347
+ * - `UNDO`
348
+ * - `REDO`
349
+ * - `PRUNE`
350
+ *
351
+ * It also updates the document-related attributes on every operation.
352
+ *
353
+ * @param reducer - The custom reducer to wrap.
354
+ * @param documentReducer - The document reducer to use.
355
+ *
356
+ * @returns The new reducer.
357
+ */
358
+ export function createReducer(stateReducer, documentReducer = baseReducer) {
359
+ const reducer = (document, action, dispatch, options) => {
360
+ return documentReducer(document, action, stateReducer, dispatch, options);
361
+ };
362
+ return reducer;
363
+ }
364
+ export function pruneOperation(document, input, wrappedReducer) {
365
+ const operations = document.operations.global;
366
+ if (!operations) {
367
+ throw new Error("No global operations found");
368
+ }
369
+ let { start, end } = input;
370
+ start = start || 0;
371
+ end = end || operations.length;
372
+ const actionsToPrune = operations.slice(start, end);
373
+ const actionsToKeepStart = operations.slice(0, start);
374
+ const actionsToKeepEnd = operations.slice(end);
375
+ // runs all operations from the initial state to
376
+ // the end of prune to get name and data
377
+ const newDocument = replayOperations(document.initialState, {
378
+ ...document.operations,
379
+ global: actionsToKeepStart.concat(actionsToPrune),
380
+ }, wrappedReducer);
381
+ const newState = newDocument.state;
382
+ const name = newDocument.header.name;
383
+ // the new operation has the index of the first pruned operation
384
+ const loadStateIndex = actionsToKeepStart.length;
385
+ // if and operation is pruned then reuses the timestamp of the last operation
386
+ // if not then assigns the timestamp of the following unpruned operation
387
+ const loadStateTimestamp = actionsToKeepStart.length
388
+ ? actionsToKeepStart[actionsToKeepStart.length - 1].timestampUtcMs
389
+ : actionsToKeepEnd.length
390
+ ? actionsToKeepEnd[0].timestampUtcMs
391
+ : new Date().toISOString();
392
+ const action = loadState({ name, ...newState }, actionsToPrune.length);
393
+ // replaces pruned operations with LOAD_STATE
394
+ return replayOperations(document.initialState, {
395
+ ...document.operations,
396
+ global: [
397
+ ...actionsToKeepStart,
398
+ {
399
+ skip: 0,
400
+ ...action,
401
+ action,
402
+ timestampUtcMs: loadStateTimestamp,
403
+ index: loadStateIndex,
404
+ hash: hashDocumentStateForScope({ state: newState }, "global"),
405
+ },
406
+ ...actionsToKeepEnd
407
+ // updates the index for all the following operations
408
+ .map((action, index) => ({
409
+ ...action,
410
+ index: loadStateIndex + index + 1,
411
+ })),
412
+ ],
413
+ }, wrappedReducer);
414
+ }
351
415
  //# sourceMappingURL=reducer.js.map