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

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
package/README.md CHANGED
@@ -4,8 +4,8 @@
4
4
 
5
5
  Install the library:
6
6
 
7
- - NPM: `npm install @acaldas/document-model-libs`
8
- - Yarn: `yarn add @acaldas/document-model-libs`
7
+ - NPM: `npm install @acaldas/document-model-libs`
8
+ - Yarn: `yarn add @acaldas/document-model-libs`
9
9
 
10
10
  ## Documentation
11
11
 
@@ -17,32 +17,32 @@ There are two ways to interact with a document:
17
17
 
18
18
  ```javascript
19
19
  import {
20
- actions,
21
- reducer,
22
- utils,
23
- } from '@acaldas/document-model-libs/budget-statement';
20
+ actions,
21
+ reducer,
22
+ utils,
23
+ } from "@acaldas/document-model-libs/budget-statement";
24
24
 
25
25
  let budgetStatement = utils.createDocument({
26
- name: 'March report',
27
- data: { month: '2023/01' },
26
+ name: "March report",
27
+ data: { month: "2023/01" },
28
28
  });
29
29
 
30
30
  budgetStatement = reducer(
31
- budgetStatement,
32
- actions.addAccount([{ address: 'eth:0x00' }])
31
+ budgetStatement,
32
+ actions.addAccount([{ address: "eth:0x00" }]),
33
33
  );
34
34
  ```
35
35
 
36
36
  ### Object oriented:
37
37
 
38
38
  ```javascript
39
- import { BudgetStatement } from '@acaldas/document-model-libs/budget-statement';
39
+ import { BudgetStatement } from "@acaldas/document-model-libs/budget-statement";
40
40
 
41
41
  const budgetStatement = new BudgetStatement({
42
- name: 'march',
43
- data: { month: '2023/01' },
42
+ name: "march",
43
+ data: { month: "2023/01" },
44
44
  });
45
- budgetStatement.addAccount([{ address: 'eth:0x00' }]);
45
+ budgetStatement.addAccount([{ address: "eth:0x00" }]);
46
46
  ```
47
47
 
48
48
  ## Architecture
@@ -59,24 +59,24 @@ An action is a JSON object with the action name and payload:
59
59
 
60
60
  ```javascript
61
61
  {
62
- type: 'SET_NAME';
63
- input: {
64
- name: 'March report';
65
- }
62
+ type: "SET_NAME";
63
+ input: {
64
+ name: "March report";
65
+ }
66
66
  }
67
67
  ```
68
68
 
69
69
  To make it easier to create actions and avoid bugs, an action creator is provided for each action. This is a function that accepts the action input and returns the JSON structure. For the case above the action creator would be:
70
70
 
71
71
  ```javascript
72
- state = reducer(state, setName('March report'));
72
+ state = reducer(state, setName("March report"));
73
73
  ```
74
74
 
75
75
  An Object-oriented version is also provided. A document can be instantiated and interacted in an imperative way:
76
76
 
77
77
  ```javascript
78
78
  const document = new Document();
79
- document.setName('March report');
79
+ document.setName("March report");
80
80
  ```
81
81
 
82
82
  ## Base Document Model
@@ -100,25 +100,25 @@ Document reducers are wrapped by the Base Document reducer, which is responsible
100
100
 
101
101
  ▸ For more information on Document actions, please refer to the [complete documentation](markdown/modules/Document.actions.md).
102
102
 
103
- - `SET_NAME`: Changes the name of the document
103
+ - `SET_NAME`: Changes the name of the document
104
104
 
105
105
  ```javascript
106
106
  setName(name: string);
107
107
  ```
108
108
 
109
- - `UNDO`: Cancels the last X operations. Defaults to 1.
109
+ - `UNDO`: Cancels the last X operations. Defaults to 1.
110
110
 
111
111
  ```javascript
112
112
  undo(count: number);
113
113
  ```
114
114
 
115
- - `REDO`: Cancels the last X UNDO operations. Defaults to 1.
115
+ - `REDO`: Cancels the last X UNDO operations. Defaults to 1.
116
116
 
117
117
  ```javascript
118
118
  redo(count: number);
119
119
  ```
120
120
 
121
- - `PRUNE`: Joins multiple operations into a single `LOAD_STATE` operation. Useful to keep operations history smaller. Operations to prune are selected by index, similar to the [slice](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice) method in Arrays.
121
+ - `PRUNE`: Joins multiple operations into a single `LOAD_STATE` operation. Useful to keep operations history smaller. Operations to prune are selected by index, similar to the [slice](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice) method in Arrays.
122
122
 
123
123
  ```javascript
124
124
  prune(start?: number, end?: number);
@@ -0,0 +1,79 @@
1
+ import type { Action, ActionContext, ActionSigner, AppActionSigner, Operation, PHBaseState, PHDocument, Signature, UserActionSigner } from "./ph-types.js";
2
+ import type { ActionSignatureContext, ActionSigningHandler, ActionVerificationHandler, LoadStateAction, NOOPAction, RedoAction, Reducer, SchemaPruneAction, UndoAction } from "./types.js";
3
+ /**
4
+ * Cancels the last `count` operations.
5
+ *
6
+ * @param count - Number of operations to cancel
7
+ * @category Actions
8
+ */
9
+ export declare const undo: (skip?: number, scope?: string) => UndoAction;
10
+ /**
11
+ * Cancels the last `count` {@link undo | UNDO} operations.
12
+ *
13
+ * @param count - Number of UNDO operations to cancel
14
+ * @category Actions
15
+ */
16
+ export declare const redo: (count?: number, scope?: string) => RedoAction;
17
+ /**
18
+ * Joins multiple operations into a single {@link loadState | LOAD_STATE} operation.
19
+ *
20
+ * @remarks
21
+ * Useful to keep operations history smaller. Operations to prune are selected by index,
22
+ * similar to the {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice | slice} method in Arrays.
23
+ *
24
+ * @param start - Index of the first operation to prune
25
+ * @param end - Index of the last operation to prune
26
+ * @category Actions
27
+ */
28
+ export declare const prune: (start?: number, end?: number, scope?: string) => SchemaPruneAction;
29
+ /**
30
+ * Replaces the state of the document.
31
+ *
32
+ * @remarks
33
+ * This action shouldn't be used directly. It is dispatched by the {@link prune} action.
34
+ *
35
+ * @param state - State to be set in the document.
36
+ * @param operations - Number of operations that were removed from the previous state.
37
+ * @category Actions
38
+ */
39
+ export declare const loadState: <TState extends PHBaseState = PHBaseState>(state: TState & {
40
+ name: string;
41
+ }, operations: number) => LoadStateAction;
42
+ export declare const noop: (scope?: string) => NOOPAction;
43
+ /**
44
+ * Helper function to be used by action creators.
45
+ *
46
+ * @remarks
47
+ * Creates an action with the given type and input properties. The input
48
+ * properties default to an empty object.
49
+ *
50
+ * @typeParam A - Type of the action to be returned.
51
+ *
52
+ * @param type - The type of the action.
53
+ * @param input - The input properties of the action.
54
+ * @param attachments - The attachments included in the action.
55
+ * @param validator - The validator to use for the input properties.
56
+ * @param scope - The scope of the action, can either be 'global' or 'local'.
57
+ * @param skip - The number of operations to skip before this new action is applied.
58
+ *
59
+ * @throws Error if the type is empty or not a string.
60
+ *
61
+ * @returns The new action.
62
+ */
63
+ export declare function createAction<TAction extends Action>(type: TAction["type"], input?: TAction["input"], attachments?: TAction["attachments"], validator?: () => {
64
+ parse(v: unknown): TAction["input"];
65
+ }, scope?: Action["scope"]): TAction;
66
+ /**
67
+ * This function should be used instead of { ...action } to ensure
68
+ * that extra properties are not included in the action.
69
+ */
70
+ export declare const actionFromAction: (action: Action) => Action;
71
+ export declare const operationFromAction: (action: Action, index: number, skip: number) => Operation;
72
+ export declare const operationFromOperation: (operation: Operation, skip: number) => Operation;
73
+ export declare const operationWithContext: (operation: Operation, context: ActionContext) => Operation;
74
+ export declare const actionContext: () => ActionContext;
75
+ export declare const actionSigner: (user: UserActionSigner, app: AppActionSigner, signatures?: Signature[]) => ActionSigner;
76
+ export declare function buildOperationSignature(context: ActionSignatureContext, signMethod: ActionSigningHandler): Promise<Signature>;
77
+ export declare function buildSignedAction<TState extends PHBaseState = PHBaseState>(action: Action, reducer: Reducer<TState>, document: PHDocument<TState>, signer: ActionSigner, signHandler: ActionSigningHandler): Promise<Operation>;
78
+ export declare function verifyOperationSignature(signature: Signature, signer: Omit<ActionSigner, "signatures">, verifyHandler: ActionVerificationHandler): Promise<boolean>;
79
+ //# sourceMappingURL=actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../src/core/actions.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,MAAM,EACN,aAAa,EACb,YAAY,EACZ,eAAe,EACf,SAAS,EACT,WAAW,EACX,UAAU,EACV,SAAS,EACT,gBAAgB,EACjB,MAAM,eAAe,CAAC;AAOvB,OAAO,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACpB,yBAAyB,EACzB,eAAe,EACf,UAAU,EACV,UAAU,EACV,OAAO,EACP,iBAAiB,EACjB,UAAU,EACX,MAAM,YAAY,CAAC;AAEpB;;;;;GAKG;AACH,eAAO,MAAM,IAAI,GAAI,aAAQ,EAAE,cAAgB,eAO5C,CAAC;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,IAAI,GAAI,cAAS,EAAE,cAAgB,eAO7C,CAAC;AAEJ;;;;;;;;;;GAUG;AACH,eAAO,MAAM,KAAK,GAAI,QAAQ,MAAM,EAAE,MAAM,MAAM,EAAE,cAAgB,sBAOjE,CAAC;AAEJ;;;;;;;;;GASG;AACH,eAAO,MAAM,SAAS,GAAI,MAAM,SAAS,WAAW,GAAG,WAAW,EAChE,OAAO,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAChC,YAAY,MAAM,oBAOjB,CAAC;AAEJ,eAAO,MAAM,IAAI,GAAI,cAAgB,eACqC,CAAC;AAI3E;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,YAAY,CAAC,OAAO,SAAS,MAAM,EACjD,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EACrB,KAAK,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,EACxB,WAAW,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,EACpC,SAAS,CAAC,EAAE,MAAM;IAAE,KAAK,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,EACzD,KAAK,GAAE,MAAM,CAAC,OAAO,CAAY,GAChC,OAAO,CAyBT;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAAI,QAAQ,MAAM,KAAG,MAUjD,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,MAAM,EACd,OAAO,MAAM,EACb,MAAM,MAAM,KACX,SAYF,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,WAAW,SAAS,EACpB,MAAM,MAAM,KACX,SAOF,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,WAAW,SAAS,EACpB,SAAS,aAAa,KACrB,SAYF,CAAC;AAEF,eAAO,MAAM,aAAa,QAAO,aAAqB,CAAC;AAEvD,eAAO,MAAM,YAAY,GACvB,MAAM,gBAAgB,EACtB,KAAK,eAAe,EACpB,aAAY,SAAS,EAAO,KAC3B,YAID,CAAC;AAEH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,sBAAsB,EAC/B,UAAU,EAAE,oBAAoB,GAC/B,OAAO,CAAC,SAAS,CAAC,CAKpB;AAED,wBAAsB,iBAAiB,CACrC,MAAM,SAAS,WAAW,GAAG,WAAW,EAExC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,EACxB,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,EAC5B,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,oBAAoB,sBAkClC;AAED,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,EACxC,aAAa,EAAE,yBAAyB,oBAOzC"}
@@ -0,0 +1,183 @@
1
+ import { ZodError } from "zod";
2
+ import { ab2hex, buildOperationSignatureMessage, buildOperationSignatureParams, generateId, hex2ab, } from "./crypto.js";
3
+ import { InvalidActionInputError, InvalidActionInputZodError, } from "./errors.js";
4
+ import { LoadStateActionInputSchema, PruneActionInputSchema, RedoActionInputSchema, UndoActionInputSchema, } from "./schemas.js";
5
+ /**
6
+ * Cancels the last `count` operations.
7
+ *
8
+ * @param count - Number of operations to cancel
9
+ * @category Actions
10
+ */
11
+ export const undo = (skip = 1, scope = "global") => createAction("UNDO", skip, undefined, UndoActionInputSchema, scope);
12
+ /**
13
+ * Cancels the last `count` {@link undo | UNDO} operations.
14
+ *
15
+ * @param count - Number of UNDO operations to cancel
16
+ * @category Actions
17
+ */
18
+ export const redo = (count = 1, scope = "global") => createAction("REDO", count, undefined, RedoActionInputSchema, scope);
19
+ /**
20
+ * Joins multiple operations into a single {@link loadState | LOAD_STATE} operation.
21
+ *
22
+ * @remarks
23
+ * Useful to keep operations history smaller. Operations to prune are selected by index,
24
+ * similar to the {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice | slice} method in Arrays.
25
+ *
26
+ * @param start - Index of the first operation to prune
27
+ * @param end - Index of the last operation to prune
28
+ * @category Actions
29
+ */
30
+ export const prune = (start, end, scope = "global") => createAction("PRUNE", { start, end }, undefined, PruneActionInputSchema, scope);
31
+ /**
32
+ * Replaces the state of the document.
33
+ *
34
+ * @remarks
35
+ * This action shouldn't be used directly. It is dispatched by the {@link prune} action.
36
+ *
37
+ * @param state - State to be set in the document.
38
+ * @param operations - Number of operations that were removed from the previous state.
39
+ * @category Actions
40
+ */
41
+ export const loadState = (state, operations) => createAction("LOAD_STATE", { state, operations }, undefined, LoadStateActionInputSchema);
42
+ export const noop = (scope = "global") => createAction("NOOP", undefined, undefined, undefined, scope);
43
+ // TODO improve base actions type
44
+ /**
45
+ * Helper function to be used by action creators.
46
+ *
47
+ * @remarks
48
+ * Creates an action with the given type and input properties. The input
49
+ * properties default to an empty object.
50
+ *
51
+ * @typeParam A - Type of the action to be returned.
52
+ *
53
+ * @param type - The type of the action.
54
+ * @param input - The input properties of the action.
55
+ * @param attachments - The attachments included in the action.
56
+ * @param validator - The validator to use for the input properties.
57
+ * @param scope - The scope of the action, can either be 'global' or 'local'.
58
+ * @param skip - The number of operations to skip before this new action is applied.
59
+ *
60
+ * @throws Error if the type is empty or not a string.
61
+ *
62
+ * @returns The new action.
63
+ */
64
+ export function createAction(type, input, attachments, validator, scope = "global") {
65
+ if (!type)
66
+ throw new Error("Empty action type");
67
+ if (typeof type !== "string")
68
+ throw new Error(`Invalid action type: ${JSON.stringify(type)}`);
69
+ const action = {
70
+ id: generateId(),
71
+ timestampUtcMs: new Date().toISOString(),
72
+ type,
73
+ input,
74
+ scope,
75
+ };
76
+ if (attachments)
77
+ action.attachments = attachments;
78
+ try {
79
+ validator?.().parse(action.input);
80
+ }
81
+ catch (error) {
82
+ if (error instanceof ZodError) {
83
+ throw new InvalidActionInputZodError(error.issues);
84
+ }
85
+ throw new InvalidActionInputError(error);
86
+ }
87
+ return action;
88
+ }
89
+ /**
90
+ * This function should be used instead of { ...action } to ensure
91
+ * that extra properties are not included in the action.
92
+ */
93
+ export const actionFromAction = (action) => {
94
+ return {
95
+ id: action.id,
96
+ timestampUtcMs: action.timestampUtcMs,
97
+ type: action.type,
98
+ input: action.input,
99
+ scope: action.scope,
100
+ context: action.context,
101
+ attachments: action.attachments,
102
+ };
103
+ };
104
+ export const operationFromAction = (action, index, skip) => {
105
+ return {
106
+ ...action,
107
+ action,
108
+ id: generateId(),
109
+ timestampUtcMs: new Date().toISOString(),
110
+ hash: "",
111
+ error: undefined,
112
+ index,
113
+ skip,
114
+ };
115
+ };
116
+ export const operationFromOperation = (operation, skip) => {
117
+ return {
118
+ ...operation,
119
+ hash: "",
120
+ error: undefined,
121
+ skip,
122
+ };
123
+ };
124
+ export const operationWithContext = (operation, context) => {
125
+ if (!operation.action) {
126
+ throw new Error("Operation has no action");
127
+ }
128
+ return {
129
+ ...operation,
130
+ action: {
131
+ ...operation.action,
132
+ context,
133
+ },
134
+ };
135
+ };
136
+ export const actionContext = () => ({});
137
+ export const actionSigner = (user, app, signatures = []) => ({
138
+ user,
139
+ app,
140
+ signatures,
141
+ });
142
+ export async function buildOperationSignature(context, signMethod) {
143
+ const params = buildOperationSignatureParams(context);
144
+ const message = buildOperationSignatureMessage(params);
145
+ const signature = await signMethod(message);
146
+ return [...params, `0x${ab2hex(signature)}`];
147
+ }
148
+ export async function buildSignedAction(action, reducer, document, signer, signHandler) {
149
+ const result = reducer(document, action, undefined, {
150
+ //reuseHash: true,
151
+ reuseOperationResultingState: true,
152
+ });
153
+ const scopeOperations = result.operations[action.scope];
154
+ if (!scopeOperations) {
155
+ throw new Error(`No operations found for scope: ${action.scope}`);
156
+ }
157
+ const operation = scopeOperations.at(-1);
158
+ if (!operation) {
159
+ throw new Error("Action was not applied");
160
+ }
161
+ const previousStateHash = scopeOperations.at(-2)?.hash ?? "";
162
+ const signature = await buildOperationSignature({
163
+ documentId: document.header.id,
164
+ signer,
165
+ action,
166
+ previousStateHash,
167
+ }, signHandler);
168
+ const actionContext = {
169
+ signer: actionSigner(signer.user, signer.app, [
170
+ ...signer.signatures,
171
+ signature,
172
+ ]),
173
+ };
174
+ return operationWithContext(operation, actionContext);
175
+ }
176
+ export async function verifyOperationSignature(signature, signer, verifyHandler) {
177
+ const publicKey = signer.app.key;
178
+ const params = signature.slice(0, 4);
179
+ const signatureBytes = hex2ab(signature[4]);
180
+ const expectedMessage = buildOperationSignatureMessage(params);
181
+ return verifyHandler(publicKey, signatureBytes, expectedMessage);
182
+ }
183
+ //# sourceMappingURL=actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../../src/core/actions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { ActionSignatureContext } from "./types.js";
2
+ /**
3
+ * This should never be linked to directly. Instead, use the `#utils/misc`
4
+ * module. This will automatically pick the correct implementation for the
5
+ * current environment. See package.json for the mapping.
6
+ *
7
+ * Generates a secure UUID.
8
+ */
9
+ export declare function generateUUIDBrowser(): `${string}-${string}-${string}-${string}-${string}`;
10
+ export declare const hashBrowser: (data: string | Uint8Array | ArrayBufferView | DataView, algorithm?: string, encoding?: string, _params?: Record<string, unknown>) => string;
11
+ export declare function generateId(method?: "UUIDv4"): string;
12
+ export declare function getUnixTimestamp(date: Date | string): string;
13
+ export declare function buildOperationSignatureParams({ documentId, signer, action, previousStateHash, }: ActionSignatureContext): [string, string, string, string];
14
+ export declare function buildOperationSignatureMessage(params: [string, string, string, string]): Uint8Array;
15
+ export declare function ab2hex(ab: ArrayBuffer | ArrayBufferView): string;
16
+ export declare function hex2ab(hex: string): Uint8Array<ArrayBuffer>;
17
+ //# sourceMappingURL=crypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../../src/core/crypto.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEzD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,wDAMlC;AAED,eAAO,MAAM,WAAW,GACtB,MAAM,MAAM,GAAG,UAAU,GAAG,eAAe,GAAG,QAAQ,EACtD,kBAAkB,EAClB,iBAAmB,EACnB,UAAU,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,WAqBlC,CAAC;AAgCF,wBAAgB,UAAU,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,CAQpD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAE5D;AAED,wBAAgB,6BAA6B,CAAC,EAC5C,UAAU,EACV,MAAM,EACN,MAAM,EACN,iBAAiB,GAClB,EAAE,sBAAsB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAU3D;AAID,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GACvC,UAAU,CAIZ;AAED,wBAAgB,MAAM,CAAC,EAAE,EAAE,WAAW,GAAG,eAAe,GAAG,MAAM,CAKhE;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,2BAMjC"}
@@ -0,0 +1,87 @@
1
+ import stringifyJson from "safe-stable-stringify";
2
+ import { createHash as createSha1Hash } from "sha1-uint8array";
3
+ /**
4
+ * This should never be linked to directly. Instead, use the `#utils/misc`
5
+ * module. This will automatically pick the correct implementation for the
6
+ * current environment. See package.json for the mapping.
7
+ *
8
+ * Generates a secure UUID.
9
+ */
10
+ export function generateUUIDBrowser() {
11
+ if (typeof crypto === "undefined" || !crypto.randomUUID) {
12
+ throw new Error("generateUUID is not available in unsecure contexts.");
13
+ }
14
+ return crypto.randomUUID();
15
+ }
16
+ export const hashBrowser = (data, algorithm = "sha1", encoding = "base64", _params) => {
17
+ if (!["sha1"].includes(algorithm)) {
18
+ throw new Error(`Hashing algorithm not supported: "${algorithm}". Available: sha1`);
19
+ }
20
+ if (!["base64", "hex"].includes(encoding)) {
21
+ throw new Error(`Hash encoding not supported: "${encoding}". Available: base64, hex`);
22
+ }
23
+ const hash = hashUIntArray(data, algorithm);
24
+ if (encoding === "hex") {
25
+ return uint8ArrayToHex(hash);
26
+ }
27
+ return uint8ArrayToBase64(hash);
28
+ };
29
+ function uint8ArrayToBase64(uint8Array) {
30
+ // Convert the Uint8Array to a binary string
31
+ let binaryString = "";
32
+ for (let i = 0; i < uint8Array.length; i++) {
33
+ binaryString += String.fromCharCode(uint8Array[i]);
34
+ }
35
+ // Encode the binary string to base64
36
+ const base64String = btoa(binaryString);
37
+ return base64String;
38
+ }
39
+ function uint8ArrayToHex(uint8Array) {
40
+ return Array.from(uint8Array)
41
+ .map((byte) => byte.toString(16).padStart(2, "0"))
42
+ .join("");
43
+ }
44
+ function hashUIntArray(data, algorithm = "sha1") {
45
+ if (!["sha1"].includes(algorithm)) {
46
+ throw new Error("Hashing algorithm not supported: Available: sha1");
47
+ }
48
+ return createSha1Hash("sha1")
49
+ .update(data)
50
+ .digest();
51
+ }
52
+ export function generateId(method) {
53
+ if (method && method.toString() !== "UUIDv4") {
54
+ throw new Error(`Id generation method not supported: "${method.toString()}"`);
55
+ }
56
+ return generateUUIDBrowser();
57
+ }
58
+ export function getUnixTimestamp(date) {
59
+ return (new Date(date).getTime() / 1000).toFixed(0);
60
+ }
61
+ export function buildOperationSignatureParams({ documentId, signer, action, previousStateHash, }) {
62
+ const { /*id, timestamp,*/ scope, type } = action;
63
+ return [
64
+ /*getUnixTimestamp(timestamp)*/ getUnixTimestamp(new Date()),
65
+ signer.app.key,
66
+ hashBrowser([documentId, scope, /*id,*/ type, stringifyJson(action.input)].join("")),
67
+ previousStateHash,
68
+ ];
69
+ }
70
+ const textEncode = new TextEncoder();
71
+ export function buildOperationSignatureMessage(params) {
72
+ const message = params.join("");
73
+ const prefix = "\x19Signed Operation:\n" + message.length.toString();
74
+ return textEncode.encode(prefix + message);
75
+ }
76
+ export function ab2hex(ab) {
77
+ const view = ArrayBuffer.isView(ab) ? ab : new Uint8Array(ab);
78
+ return Array.prototype.map
79
+ .call(view, (x) => ("00" + x.toString(16)).slice(-2))
80
+ .join("");
81
+ }
82
+ export function hex2ab(hex) {
83
+ return new Uint8Array(hex.match(/[\da-f]{2}/gi)?.map(function (h) {
84
+ return parseInt(h, 16);
85
+ }) ?? []);
86
+ }
87
+ //# sourceMappingURL=crypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../../src/core/crypto.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,36 @@
1
- import { type DocumentOperations, type Operation } from "../types.js";
2
- export type OperationIndex = {
3
- index: number;
1
+ import type { Action, DocumentOperations, Operation, PHBaseState, PHDocument, PHDocumentHeader } from "./ph-types.js";
2
+ import type { CreateState, DocumentAction, DocumentOperationsIgnoreMap, MappedOperation, OperationIndex, Reducer, ReplayDocumentOptions, SignalDispatch, SkipHeaderOperationIndex, SkipHeaderOperations, UndoAction, UndoRedoAction } from "./types.js";
3
+ export declare function isNoopOperation<TOp extends {
4
+ type: string;
4
5
  skip: number;
5
- id?: string;
6
- timestampUtcMs?: string;
7
- };
6
+ hash: string;
7
+ }>(op: Partial<TOp>): boolean;
8
+ export declare function isUndoRedo(action: Action): action is UndoRedoAction;
9
+ export declare function isUndo(action: Action): action is UndoAction;
10
+ export declare function isDocumentAction(action: Action): action is DocumentAction;
11
+ /**
12
+ * Important note: it is the responsibility of the caller to set the document type
13
+ * on the header.
14
+ */
15
+ export declare function baseCreateDocument<TState extends PHBaseState = PHBaseState>(createState: CreateState<TState>, initialState?: Partial<TState>): PHDocument<TState>;
16
+ export declare function hashDocumentStateForScope(document: {
17
+ state: {
18
+ [key: string]: unknown;
19
+ };
20
+ }, scope?: string): string;
21
+ export declare function readOnly<T>(value: T): Readonly<T>;
22
+ /**
23
+ * Maps skipped operations in an array of operations.
24
+ * Skipped operations are operations that are ignored during processing.
25
+ * @param operations - The array of operations to map.
26
+ * @param skippedHeadOperations - The number of operations to skip at the head of the array of operations.
27
+ * @returns An array of mapped operations with ignore flag indicating if the operation is skipped.
28
+ * @throws Error if the operation index is invalid and there are missing operations.
29
+ */
30
+ export declare function mapSkippedOperations(operations: Operation[], skippedHeadOperations?: number): MappedOperation[];
31
+ export declare function sortMappedOperations(operations: DocumentOperationsIgnoreMap): MappedOperation[];
32
+ export declare function replayDocument<TState extends PHBaseState = PHBaseState>(initialState: TState, operations: DocumentOperations, reducer: Reducer<TState>, dispatch?: SignalDispatch, header?: PHDocumentHeader, skipHeaderOperations?: SkipHeaderOperations, options?: ReplayDocumentOptions): PHDocument<TState>;
33
+ export declare function parseResultingState<TState>(state: string | null | undefined): TState;
8
34
  export declare enum IntegrityIssueType {
9
35
  UNEXPECTED_INDEX = "UNEXPECTED_INDEX"
10
36
  }
@@ -25,14 +51,19 @@ export declare function addUndo(sortedOperations: Operation[]): Operation[];
25
51
  export declare function sortOperations<TOpIndex extends OperationIndex>(operations: TOpIndex[]): TOpIndex[];
26
52
  export declare function reshuffleByTimestamp<TOp extends OperationIndex>(startIndex: OperationIndex, opsA: TOp[], opsB: TOp[]): TOp[];
27
53
  export declare function reshuffleByTimestampAndIndex<TOp extends OperationIndex>(startIndex: OperationIndex, opsA: TOp[], opsB: TOp[]): TOp[];
28
- export declare function operationsAreEqual<TOp>(op1: TOp, op2: TOp): boolean;
54
+ export declare function operationsAreEqual<TOp extends {
55
+ index: number;
56
+ skip: number;
57
+ type?: string;
58
+ scope?: string;
59
+ input?: unknown;
60
+ }>(op1: TOp, op2: TOp): boolean;
29
61
  export declare function attachBranch(trunk: Operation[], newBranch: Operation[]): [Operation[], Operation[]];
30
62
  export declare function precedes(op1: OperationIndex, op2: OperationIndex): boolean;
31
63
  export declare function split(sortedTargetOperations: Operation[], sortedMergeOperations: Operation[]): [Operation[], Operation[], Operation[]];
32
64
  export declare function merge(sortedTargetOperations: Operation[], sortedMergeOperations: Operation[], reshuffle: Reshuffle): Operation[];
33
65
  export declare function nextSkipNumber(sortedOperations: OperationIndex[]): number;
34
66
  export declare function checkOperationsIntegrity(operations: Operation[]): IntegrityIssue[];
35
- export type OperationsByScope = Partial<Record<string, Operation[]>>;
36
67
  export declare function groupOperationsByScope(operations: Operation[]): Partial<Record<string, Operation[]>>;
37
68
  type PrepareOperationsResult = {
38
69
  validOperations: Operation[];
@@ -42,7 +73,6 @@ type PrepareOperationsResult = {
42
73
  };
43
74
  export declare function prepareOperations(operationsHistory: Operation[], newOperations: Operation[]): PrepareOperationsResult;
44
75
  export declare function removeExistingOperations(newOperations: Operation[], operationsHistory: Operation[]): Operation[];
45
- export type SkipHeaderOperationIndex = Partial<Pick<OperationIndex, "index">> & Pick<OperationIndex, "skip">;
46
76
  /**
47
77
  * Skips header operations and returns the remaining operations.
48
78
  *
@@ -71,7 +101,7 @@ export declare function filterDocumentOperationsResultingState(documentOperation
71
101
  skip: number;
72
102
  error?: string;
73
103
  id?: string;
74
- action: import("../types.js").Action;
104
+ action: Action;
75
105
  }[];
76
106
  };
77
107
  /**
@@ -84,5 +114,15 @@ export declare function filterDocumentOperationsResultingState(documentOperation
84
114
  * @returns {TOp[]} - The difference between the two arrays of operations.
85
115
  */
86
116
  export declare function diffOperations<TOp extends OperationIndex>(clearedOperationsA: TOp[], clearedOperationsB: TOp[]): TOp[];
117
+ export declare function getDocumentLastModified(document: PHDocument): string;
118
+ /**
119
+ * Updates the document header with the latest revision number and
120
+ * date of last modification.
121
+ *
122
+ * @param state The current state of the document.
123
+ * @param operation The action being applied to the document.
124
+ * @returns The updated document state.
125
+ */
126
+ export declare function updateHeaderRevision(document: PHDocument, scope: string): PHDocument;
87
127
  export {};
88
- //# sourceMappingURL=document-helpers.d.ts.map
128
+ //# sourceMappingURL=documents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../../src/core/documents.ts"],"names":[],"mappings":"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"}