document-model 4.1.0-dev.9 → 4.1.0-dev.91

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 (446) 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} +57 -22
  11. package/dist/src/core/documents.d.ts.map +1 -0
  12. package/dist/src/{document/utils/document-helpers.js → core/documents.js} +364 -26
  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 -29
  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/core/operations.d.ts +32 -0
  35. package/dist/src/core/operations.d.ts.map +1 -0
  36. package/dist/src/{document/actions → core}/operations.js +11 -59
  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/core/reducer.d.ts +61 -0
  43. package/dist/src/core/reducer.d.ts.map +1 -0
  44. package/dist/src/{document → core}/reducer.js +165 -103
  45. package/dist/src/core/reducer.js.map +1 -0
  46. package/dist/src/{document/schema/zod.d.ts → core/schemas.d.ts} +37 -10
  47. package/dist/src/core/schemas.d.ts.map +1 -0
  48. package/dist/src/{document/schema/zod.js → core/schemas.js} +23 -26
  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 +6 -2
  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/state.js +61 -0
  92. package/dist/src/document-model/state.js.map +1 -0
  93. package/dist/src/document-model/types.d.ts +671 -3
  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 +27 -54
  104. package/dist/test/document/crypto.test.js.map +1 -1
  105. package/dist/test/document/event-vs-command.test.js +81 -51
  106. package/dist/test/document/event-vs-command.test.js.map +1 -1
  107. package/dist/test/document/local.test.js +27 -45
  108. package/dist/test/document/local.test.js.map +1 -1
  109. package/dist/test/document/operation-id.test.js +4 -7
  110. package/dist/test/document/operation-id.test.js.map +1 -1
  111. package/dist/test/document/prune.test.js +23 -36
  112. package/dist/test/document/prune.test.js.map +1 -1
  113. package/dist/test/document/reducer.test.js +101 -81
  114. package/dist/test/document/reducer.test.js.map +1 -1
  115. package/dist/test/document/skip-operations.test.js +67 -87
  116. package/dist/test/document/skip-operations.test.js.map +1 -1
  117. package/dist/test/document/undo-redo.test.js +60 -36
  118. package/dist/test/document/undo-redo.test.js.map +1 -1
  119. package/dist/test/document/utils.test.js +51 -41
  120. package/dist/test/document/utils.test.js.map +1 -1
  121. package/dist/test/document-helpers/addUndo.test.js +2 -2
  122. package/dist/test/document-helpers/addUndo.test.js.map +1 -1
  123. package/dist/test/document-helpers/attachBranch.test.js +21 -21
  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 +11 -11
  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 +71 -71
  134. package/dist/test/document-helpers/groupOperationsByScope.test.js.map +1 -1
  135. package/dist/test/document-helpers/merge.test.js +126 -126
  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 +38 -26
  142. package/dist/test/document-helpers/removeExistingOperations.test.js.map +1 -1
  143. package/dist/test/document-helpers/reshuffleByTimestamp.test.js +16 -16
  144. package/dist/test/document-helpers/reshuffleByTimestamp.test.js.map +1 -1
  145. package/dist/test/document-helpers/reshuffleByTimestampAndIndex.test.js +22 -22
  146. package/dist/test/document-helpers/reshuffleByTimestampAndIndex.test.js.map +1 -1
  147. package/dist/test/document-helpers/skipHeaderOperations.test.js +34 -41
  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 +3 -3
  152. package/dist/test/document-helpers/split.test.js.map +1 -1
  153. package/dist/test/document-helpers/utils.d.ts +2 -1
  154. package/dist/test/document-helpers/utils.d.ts.map +1 -1
  155. package/dist/test/document-helpers/utils.js +13 -8
  156. package/dist/test/document-helpers/utils.js.map +1 -1
  157. package/dist/test/document-model/replay.test.js +21 -25
  158. package/dist/test/document-model/replay.test.js.map +1 -1
  159. package/dist/test/document-model/skip-operations.test.js +93 -96
  160. package/dist/test/document-model/skip-operations.test.js.map +1 -1
  161. package/dist/test/document-model/validation.test.js +10 -13
  162. package/dist/test/document-model/validation.test.js.map +1 -1
  163. package/dist/test/document-model/zip.test.js +20 -21
  164. package/dist/test/document-model/zip.test.js.map +1 -1
  165. package/dist/test/helpers.d.ts +42 -8
  166. package/dist/test/helpers.d.ts.map +1 -1
  167. package/dist/test/helpers.js +55 -8
  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 +26 -23
  182. package/dist/index.d.ts +0 -20
  183. package/dist/index.d.ts.map +0 -1
  184. package/dist/index.js +0 -14
  185. package/dist/index.js.map +0 -1
  186. package/dist/src/document/actions/creators.d.ts +0 -51
  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 +0 -36
  191. package/dist/src/document/actions/operations.d.ts.map +0 -1
  192. package/dist/src/document/actions/operations.js.map +0 -1
  193. package/dist/src/document/actions/types.d.ts +0 -34
  194. package/dist/src/document/actions/types.d.ts.map +0 -1
  195. package/dist/src/document/actions/types.js +0 -7
  196. package/dist/src/document/actions/types.js.map +0 -1
  197. package/dist/src/document/object.d.ts +0 -124
  198. package/dist/src/document/object.d.ts.map +0 -1
  199. package/dist/src/document/object.js +0 -183
  200. package/dist/src/document/object.js.map +0 -1
  201. package/dist/src/document/ph-factories.d.ts +0 -6
  202. package/dist/src/document/ph-factories.d.ts.map +0 -1
  203. package/dist/src/document/ph-factories.js +0 -62
  204. package/dist/src/document/ph-factories.js.map +0 -1
  205. package/dist/src/document/ph-types.d.ts +0 -68
  206. package/dist/src/document/ph-types.d.ts.map +0 -1
  207. package/dist/src/document/ph-types.js +0 -2
  208. package/dist/src/document/ph-types.js.map +0 -1
  209. package/dist/src/document/reducer.d.ts +0 -49
  210. package/dist/src/document/reducer.d.ts.map +0 -1
  211. package/dist/src/document/reducer.js.map +0 -1
  212. package/dist/src/document/schema/types.d.ts +0 -176
  213. package/dist/src/document/schema/types.d.ts.map +0 -1
  214. package/dist/src/document/schema/types.js +0 -2
  215. package/dist/src/document/schema/zod.d.ts.map +0 -1
  216. package/dist/src/document/schema/zod.js.map +0 -1
  217. package/dist/src/document/signal.d.ts +0 -36
  218. package/dist/src/document/signal.d.ts.map +0 -1
  219. package/dist/src/document/signal.js +0 -2
  220. package/dist/src/document/signal.js.map +0 -1
  221. package/dist/src/document/types.d.ts +0 -339
  222. package/dist/src/document/types.d.ts.map +0 -1
  223. package/dist/src/document/types.js +0 -2
  224. package/dist/src/document/utils/base.d.ts +0 -88
  225. package/dist/src/document/utils/base.d.ts.map +0 -1
  226. package/dist/src/document/utils/base.js +0 -335
  227. package/dist/src/document/utils/base.js.map +0 -1
  228. package/dist/src/document/utils/browser.d.ts +0 -18
  229. package/dist/src/document/utils/browser.d.ts.map +0 -1
  230. package/dist/src/document/utils/browser.js +0 -54
  231. package/dist/src/document/utils/browser.js.map +0 -1
  232. package/dist/src/document/utils/crypto.d.ts +0 -11
  233. package/dist/src/document/utils/crypto.d.ts.map +0 -1
  234. package/dist/src/document/utils/crypto.js +0 -71
  235. package/dist/src/document/utils/crypto.js.map +0 -1
  236. package/dist/src/document/utils/document-helpers.d.ts.map +0 -1
  237. package/dist/src/document/utils/document-helpers.js.map +0 -1
  238. package/dist/src/document/utils/errors.d.ts +0 -10
  239. package/dist/src/document/utils/errors.d.ts.map +0 -1
  240. package/dist/src/document/utils/errors.js +0 -19
  241. package/dist/src/document/utils/errors.js.map +0 -1
  242. package/dist/src/document/utils/file.d.ts.map +0 -1
  243. package/dist/src/document/utils/file.js +0 -152
  244. package/dist/src/document/utils/file.js.map +0 -1
  245. package/dist/src/document/utils/header.d.ts.map +0 -1
  246. package/dist/src/document/utils/header.js.map +0 -1
  247. package/dist/src/document/utils/node.d.ts +0 -18
  248. package/dist/src/document/utils/node.d.ts.map +0 -1
  249. package/dist/src/document/utils/node.js +0 -62
  250. package/dist/src/document/utils/node.js.map +0 -1
  251. package/dist/src/document/utils/validation.d.ts +0 -3
  252. package/dist/src/document/utils/validation.d.ts.map +0 -1
  253. package/dist/src/document/utils/validation.js.map +0 -1
  254. package/dist/src/document-model/custom/reducers/header.d.ts +0 -3
  255. package/dist/src/document-model/custom/reducers/header.d.ts.map +0 -1
  256. package/dist/src/document-model/custom/reducers/header.js +0 -23
  257. package/dist/src/document-model/custom/reducers/header.js.map +0 -1
  258. package/dist/src/document-model/custom/reducers/module.d.ts +0 -3
  259. package/dist/src/document-model/custom/reducers/module.d.ts.map +0 -1
  260. package/dist/src/document-model/custom/reducers/module.js +0 -41
  261. package/dist/src/document-model/custom/reducers/module.js.map +0 -1
  262. package/dist/src/document-model/custom/reducers/operation-error.d.ts +0 -3
  263. package/dist/src/document-model/custom/reducers/operation-error.d.ts.map +0 -1
  264. package/dist/src/document-model/custom/reducers/operation-error.js +0 -94
  265. package/dist/src/document-model/custom/reducers/operation-error.js.map +0 -1
  266. package/dist/src/document-model/custom/reducers/operation-example.d.ts +0 -3
  267. package/dist/src/document-model/custom/reducers/operation-example.d.ts.map +0 -1
  268. package/dist/src/document-model/custom/reducers/operation-example.js +0 -53
  269. package/dist/src/document-model/custom/reducers/operation-example.js.map +0 -1
  270. package/dist/src/document-model/custom/reducers/operation.d.ts +0 -3
  271. package/dist/src/document-model/custom/reducers/operation.d.ts.map +0 -1
  272. package/dist/src/document-model/custom/reducers/operation.js +0 -125
  273. package/dist/src/document-model/custom/reducers/operation.js.map +0 -1
  274. package/dist/src/document-model/custom/reducers/state.d.ts +0 -3
  275. package/dist/src/document-model/custom/reducers/state.d.ts.map +0 -1
  276. package/dist/src/document-model/custom/reducers/state.js +0 -71
  277. package/dist/src/document-model/custom/reducers/state.js.map +0 -1
  278. package/dist/src/document-model/custom/reducers/versioning.d.ts +0 -8
  279. package/dist/src/document-model/custom/reducers/versioning.d.ts.map +0 -1
  280. package/dist/src/document-model/custom/reducers/versioning.js +0 -23
  281. package/dist/src/document-model/custom/reducers/versioning.js.map +0 -1
  282. package/dist/src/document-model/custom/utils.d.ts +0 -8
  283. package/dist/src/document-model/custom/utils.d.ts.map +0 -1
  284. package/dist/src/document-model/custom/utils.js.map +0 -1
  285. package/dist/src/document-model/gen/actions.d.ts +0 -16
  286. package/dist/src/document-model/gen/actions.d.ts.map +0 -1
  287. package/dist/src/document-model/gen/actions.js +0 -8
  288. package/dist/src/document-model/gen/actions.js.map +0 -1
  289. package/dist/src/document-model/gen/constants.d.ts +0 -7
  290. package/dist/src/document-model/gen/constants.d.ts.map +0 -1
  291. package/dist/src/document-model/gen/constants.js +0 -34
  292. package/dist/src/document-model/gen/constants.js.map +0 -1
  293. package/dist/src/document-model/gen/creators.d.ts +0 -8
  294. package/dist/src/document-model/gen/creators.d.ts.map +0 -1
  295. package/dist/src/document-model/gen/creators.js +0 -8
  296. package/dist/src/document-model/gen/creators.js.map +0 -1
  297. package/dist/src/document-model/gen/document-model.d.ts +0 -3
  298. package/dist/src/document-model/gen/document-model.d.ts.map +0 -1
  299. package/dist/src/document-model/gen/document-model.js.map +0 -1
  300. package/dist/src/document-model/gen/header/actions.d.ts +0 -28
  301. package/dist/src/document-model/gen/header/actions.d.ts.map +0 -1
  302. package/dist/src/document-model/gen/header/actions.js +0 -2
  303. package/dist/src/document-model/gen/header/actions.js.map +0 -1
  304. package/dist/src/document-model/gen/header/creators.d.ts +0 -9
  305. package/dist/src/document-model/gen/header/creators.d.ts.map +0 -1
  306. package/dist/src/document-model/gen/header/creators.js +0 -9
  307. package/dist/src/document-model/gen/header/creators.js.map +0 -1
  308. package/dist/src/document-model/gen/header/object.d.ts +0 -13
  309. package/dist/src/document-model/gen/header/object.d.ts.map +0 -1
  310. package/dist/src/document-model/gen/header/object.js +0 -23
  311. package/dist/src/document-model/gen/header/object.js.map +0 -1
  312. package/dist/src/document-model/gen/header/operations.d.ts +0 -11
  313. package/dist/src/document-model/gen/header/operations.d.ts.map +0 -1
  314. package/dist/src/document-model/gen/header/operations.js +0 -2
  315. package/dist/src/document-model/gen/header/operations.js.map +0 -1
  316. package/dist/src/document-model/gen/module/actions.d.ts +0 -24
  317. package/dist/src/document-model/gen/module/actions.d.ts.map +0 -1
  318. package/dist/src/document-model/gen/module/actions.js +0 -2
  319. package/dist/src/document-model/gen/module/actions.js.map +0 -1
  320. package/dist/src/document-model/gen/module/creators.d.ts +0 -8
  321. package/dist/src/document-model/gen/module/creators.d.ts.map +0 -1
  322. package/dist/src/document-model/gen/module/creators.js +0 -8
  323. package/dist/src/document-model/gen/module/creators.js.map +0 -1
  324. package/dist/src/document-model/gen/module/object.d.ts +0 -12
  325. package/dist/src/document-model/gen/module/object.d.ts.map +0 -1
  326. package/dist/src/document-model/gen/module/object.js +0 -20
  327. package/dist/src/document-model/gen/module/object.js.map +0 -1
  328. package/dist/src/document-model/gen/module/operations.d.ts +0 -10
  329. package/dist/src/document-model/gen/module/operations.d.ts.map +0 -1
  330. package/dist/src/document-model/gen/module/operations.js +0 -2
  331. package/dist/src/document-model/gen/module/operations.js.map +0 -1
  332. package/dist/src/document-model/gen/object.d.ts +0 -29
  333. package/dist/src/document-model/gen/object.d.ts.map +0 -1
  334. package/dist/src/document-model/gen/object.js +0 -46
  335. package/dist/src/document-model/gen/object.js.map +0 -1
  336. package/dist/src/document-model/gen/operation/actions.d.ts +0 -44
  337. package/dist/src/document-model/gen/operation/actions.d.ts.map +0 -1
  338. package/dist/src/document-model/gen/operation/actions.js +0 -2
  339. package/dist/src/document-model/gen/operation/actions.js.map +0 -1
  340. package/dist/src/document-model/gen/operation/creators.d.ts +0 -13
  341. package/dist/src/document-model/gen/operation/creators.d.ts.map +0 -1
  342. package/dist/src/document-model/gen/operation/creators.js +0 -13
  343. package/dist/src/document-model/gen/operation/creators.js.map +0 -1
  344. package/dist/src/document-model/gen/operation/object.d.ts +0 -18
  345. package/dist/src/document-model/gen/operation/object.d.ts.map +0 -1
  346. package/dist/src/document-model/gen/operation/object.js +0 -35
  347. package/dist/src/document-model/gen/operation/object.js.map +0 -1
  348. package/dist/src/document-model/gen/operation/operations.d.ts +0 -15
  349. package/dist/src/document-model/gen/operation/operations.d.ts.map +0 -1
  350. package/dist/src/document-model/gen/operation/operations.js +0 -2
  351. package/dist/src/document-model/gen/operation/operations.js.map +0 -1
  352. package/dist/src/document-model/gen/operation-error/actions.d.ts +0 -32
  353. package/dist/src/document-model/gen/operation-error/actions.d.ts.map +0 -1
  354. package/dist/src/document-model/gen/operation-error/actions.js +0 -2
  355. package/dist/src/document-model/gen/operation-error/actions.js.map +0 -1
  356. package/dist/src/document-model/gen/operation-error/creators.d.ts +0 -10
  357. package/dist/src/document-model/gen/operation-error/creators.d.ts.map +0 -1
  358. package/dist/src/document-model/gen/operation-error/creators.js +0 -10
  359. package/dist/src/document-model/gen/operation-error/creators.js.map +0 -1
  360. package/dist/src/document-model/gen/operation-error/object.d.ts +0 -15
  361. package/dist/src/document-model/gen/operation-error/object.d.ts.map +0 -1
  362. package/dist/src/document-model/gen/operation-error/object.js +0 -26
  363. package/dist/src/document-model/gen/operation-error/object.js.map +0 -1
  364. package/dist/src/document-model/gen/operation-error/operations.d.ts +0 -12
  365. package/dist/src/document-model/gen/operation-error/operations.d.ts.map +0 -1
  366. package/dist/src/document-model/gen/operation-error/operations.js +0 -2
  367. package/dist/src/document-model/gen/operation-error/operations.js.map +0 -1
  368. package/dist/src/document-model/gen/operation-example/actions.d.ts +0 -20
  369. package/dist/src/document-model/gen/operation-example/actions.d.ts.map +0 -1
  370. package/dist/src/document-model/gen/operation-example/actions.js +0 -2
  371. package/dist/src/document-model/gen/operation-example/actions.js.map +0 -1
  372. package/dist/src/document-model/gen/operation-example/creators.d.ts +0 -7
  373. package/dist/src/document-model/gen/operation-example/creators.d.ts.map +0 -1
  374. package/dist/src/document-model/gen/operation-example/creators.js +0 -7
  375. package/dist/src/document-model/gen/operation-example/creators.js.map +0 -1
  376. package/dist/src/document-model/gen/operation-example/object.d.ts +0 -12
  377. package/dist/src/document-model/gen/operation-example/object.d.ts.map +0 -1
  378. package/dist/src/document-model/gen/operation-example/object.js +0 -17
  379. package/dist/src/document-model/gen/operation-example/object.js.map +0 -1
  380. package/dist/src/document-model/gen/operation-example/operations.d.ts +0 -9
  381. package/dist/src/document-model/gen/operation-example/operations.d.ts.map +0 -1
  382. package/dist/src/document-model/gen/operation-example/operations.js +0 -2
  383. package/dist/src/document-model/gen/operation-example/operations.js.map +0 -1
  384. package/dist/src/document-model/gen/reducer.d.ts +0 -5
  385. package/dist/src/document-model/gen/reducer.d.ts.map +0 -1
  386. package/dist/src/document-model/gen/reducer.js +0 -193
  387. package/dist/src/document-model/gen/reducer.js.map +0 -1
  388. package/dist/src/document-model/gen/schema/index.d.ts +0 -3
  389. package/dist/src/document-model/gen/schema/index.d.ts.map +0 -1
  390. package/dist/src/document-model/gen/schema/index.js +0 -3
  391. package/dist/src/document-model/gen/schema/index.js.map +0 -1
  392. package/dist/src/document-model/gen/schema/types.d.ts +0 -457
  393. package/dist/src/document-model/gen/schema/types.d.ts.map +0 -1
  394. package/dist/src/document-model/gen/schema/types.js.map +0 -1
  395. package/dist/src/document-model/gen/schema/zod.d.ts +0 -453
  396. package/dist/src/document-model/gen/schema/zod.d.ts.map +0 -1
  397. package/dist/src/document-model/gen/schema/zod.js.map +0 -1
  398. package/dist/src/document-model/gen/state/actions.d.ts +0 -28
  399. package/dist/src/document-model/gen/state/actions.d.ts.map +0 -1
  400. package/dist/src/document-model/gen/state/actions.js +0 -2
  401. package/dist/src/document-model/gen/state/actions.js.map +0 -1
  402. package/dist/src/document-model/gen/state/creators.d.ts +0 -9
  403. package/dist/src/document-model/gen/state/creators.d.ts.map +0 -1
  404. package/dist/src/document-model/gen/state/creators.js +0 -9
  405. package/dist/src/document-model/gen/state/creators.js.map +0 -1
  406. package/dist/src/document-model/gen/state/object.d.ts +0 -13
  407. package/dist/src/document-model/gen/state/object.d.ts.map +0 -1
  408. package/dist/src/document-model/gen/state/object.js +0 -23
  409. package/dist/src/document-model/gen/state/object.js.map +0 -1
  410. package/dist/src/document-model/gen/state/operations.d.ts +0 -11
  411. package/dist/src/document-model/gen/state/operations.d.ts.map +0 -1
  412. package/dist/src/document-model/gen/state/operations.js +0 -2
  413. package/dist/src/document-model/gen/state/operations.js.map +0 -1
  414. package/dist/src/document-model/gen/types.d.ts +0 -7
  415. package/dist/src/document-model/gen/types.d.ts.map +0 -1
  416. package/dist/src/document-model/gen/types.js.map +0 -1
  417. package/dist/src/document-model/gen/utils.d.ts +0 -11
  418. package/dist/src/document-model/gen/utils.d.ts.map +0 -1
  419. package/dist/src/document-model/gen/utils.js +0 -33
  420. package/dist/src/document-model/gen/utils.js.map +0 -1
  421. package/dist/src/document-model/gen/versioning/actions.d.ts +0 -24
  422. package/dist/src/document-model/gen/versioning/actions.d.ts.map +0 -1
  423. package/dist/src/document-model/gen/versioning/actions.js +0 -2
  424. package/dist/src/document-model/gen/versioning/actions.js.map +0 -1
  425. package/dist/src/document-model/gen/versioning/creators.d.ts +0 -8
  426. package/dist/src/document-model/gen/versioning/creators.d.ts.map +0 -1
  427. package/dist/src/document-model/gen/versioning/creators.js +0 -8
  428. package/dist/src/document-model/gen/versioning/creators.js.map +0 -1
  429. package/dist/src/document-model/gen/versioning/object.d.ts +0 -13
  430. package/dist/src/document-model/gen/versioning/object.d.ts.map +0 -1
  431. package/dist/src/document-model/gen/versioning/object.js +0 -20
  432. package/dist/src/document-model/gen/versioning/object.js.map +0 -1
  433. package/dist/src/document-model/gen/versioning/operations.d.ts +0 -10
  434. package/dist/src/document-model/gen/versioning/operations.d.ts.map +0 -1
  435. package/dist/src/document-model/gen/versioning/operations.js +0 -2
  436. package/dist/src/document-model/gen/versioning/operations.js.map +0 -1
  437. package/dist/test/document/object.test.d.ts +0 -2
  438. package/dist/test/document/object.test.d.ts.map +0 -1
  439. package/dist/test/document/object.test.js +0 -13
  440. package/dist/test/document/object.test.js.map +0 -1
  441. package/dist/test/document-model/object.test.d.ts +0 -2
  442. package/dist/test/document-model/object.test.d.ts.map +0 -1
  443. package/dist/test/document-model/object.test.js +0 -243
  444. package/dist/test/document-model/object.test.js.map +0 -1
  445. /package/dist/src/{document-model/gen/schema → core}/types.js +0 -0
  446. /package/dist/{src/document-model/gen → test}/types.js +0 -0
@@ -0,0 +1,74 @@
1
+ import JSZip from "jszip";
2
+ import { filterDocumentOperationsResultingState, garbageCollectDocumentOperations, replayDocument, } from "./documents.js";
3
+ import { FileSystemError } from "./errors.js";
4
+ import { validateOperations } from "./validation.js";
5
+ export function writeFileBrowser(path, name, stream) {
6
+ throw FileSystemError;
7
+ }
8
+ export function readFileBrowser(path) {
9
+ throw FileSystemError;
10
+ }
11
+ export function fetchFileBrowser(url) {
12
+ throw FileSystemError;
13
+ }
14
+ export const getFileBrowser = async (file) => {
15
+ return readFileBrowser(file);
16
+ };
17
+ export function createZip(document) {
18
+ // create zip file
19
+ const zip = new JSZip();
20
+ const header = document.header;
21
+ zip.file("header.json", JSON.stringify(header, null, 2));
22
+ zip.file("state.json", JSON.stringify(document.initialState || {}, null, 2));
23
+ zip.file("current-state.json", JSON.stringify(document.state || {}, null, 2));
24
+ zip.file("operations.json", JSON.stringify(filterDocumentOperationsResultingState(document.operations), null, 2));
25
+ return zip;
26
+ }
27
+ export async function baseSaveToFileHandle(document, input) {
28
+ const zip = createZip(document);
29
+ const blob = await zip.generateAsync({ type: "blob" });
30
+ const writable = await input.createWritable();
31
+ await writable.write(blob);
32
+ await writable.close();
33
+ }
34
+ export async function baseLoadFromInput(input, reducer, options) {
35
+ const zip = new JSZip();
36
+ await zip.loadAsync(input);
37
+ return loadFromZip(zip, reducer, options);
38
+ }
39
+ async function loadFromZip(zip, reducer, options) {
40
+ const initialStateZip = zip.file("state.json");
41
+ if (!initialStateZip) {
42
+ throw new Error("Initial state not found");
43
+ }
44
+ const initialStateStr = await initialStateZip.async("string");
45
+ const initialState = JSON.parse(initialStateStr);
46
+ const headerZip = zip.file("header.json");
47
+ let header = undefined;
48
+ if (headerZip) {
49
+ header = JSON.parse(await headerZip.async("string"));
50
+ }
51
+ const operationsZip = zip.file("operations.json");
52
+ if (!operationsZip) {
53
+ throw new Error("Operations history not found");
54
+ }
55
+ const operations = JSON.parse(await operationsZip.async("string"));
56
+ const clearedOperations = garbageCollectDocumentOperations(operations);
57
+ const operationsError = validateOperations(clearedOperations);
58
+ if (operationsError.length) {
59
+ const errorMessages = operationsError.map((err) => err.message);
60
+ throw new Error(errorMessages.join("\n"));
61
+ }
62
+ // TODO: There is a race condition here where operations are replayed and do not necessary
63
+ // result in the same lastModified value. This will be fixed once the header replaces this
64
+ // information as it is explicitly set below to the saved time.
65
+ let result = replayDocument(initialState, clearedOperations, reducer, undefined, header, {}, options);
66
+ if (header) {
67
+ result = {
68
+ ...result,
69
+ header,
70
+ };
71
+ }
72
+ return result;
73
+ }
74
+ //# sourceMappingURL=files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../../src/core/files.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,sCAAsC,EACtC,gCAAgC,EAChC,cAAc,GACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAQ9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,UAAU,gBAAgB,CAC9B,IAAY,EACZ,IAAY,EACZ,MAAkB;IAElB,MAAM,eAAe,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,eAAe,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,GAAW;IAEX,MAAM,eAAe,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,IAAY,EAAE,EAAE;IACnD,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC,CAAC;AAEF,MAAM,UAAU,SAAS,CAAC,QAAoB;IAC5C,kBAAkB;IAClB,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;IAExB,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC/B,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACzD,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7E,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9E,GAAG,CAAC,IAAI,CACN,iBAAiB,EACjB,IAAI,CAAC,SAAS,CACZ,sCAAsC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAC3D,IAAI,EACJ,CAAC,CACF,CACF,CAAC;IAEF,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,QAAoB,EACpB,KAA2B;IAE3B,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IAChC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,cAAc,EAAE,CAAC;IAC9C,MAAM,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;AACzB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,KAAgB,EAChB,OAAwB,EACxB,OAA+B;IAE/B,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;IACxB,MAAM,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC3B,OAAO,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,WAAW,CACxB,GAAU,EACV,OAAwB,EACxB,OAA+B;IAE/B,MAAM,eAAe,GAAG,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC/C,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IACD,MAAM,eAAe,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAW,CAAC;IAE3D,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1C,IAAI,MAAM,GAAiC,SAAS,CAAC;IACrD,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAqB,CAAC;IAC3E,CAAC;IAED,MAAM,aAAa,GAAG,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAClD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAC3B,MAAM,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CACd,CAAC;IAExB,MAAM,iBAAiB,GAAG,gCAAgC,CAAC,UAAU,CAAC,CAAC;IAEvE,MAAM,eAAe,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;IAC9D,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,aAAa,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAChE,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,0FAA0F;IAC1F,0FAA0F;IAC1F,+DAA+D;IAC/D,IAAI,MAAM,GAAG,cAAc,CACzB,YAAY,EACZ,iBAAiB,EACjB,OAAO,EACP,SAAS,EACT,MAAM,EACN,EAAE,EACF,OAAO,CACR,CAAC;IAEF,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,GAAG;YACP,GAAG,MAAM;YACT,MAAM;SACP,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,37 +1,5 @@
1
- import { type PHDocumentHeader } from "#document/ph-types.js";
2
- /**
3
- * Parameters used in a document signature.
4
- */
5
- export type SigningParameters = {
6
- documentType: string;
7
- createdAtUtcIso: string;
8
- /**
9
- * The nonce can act as both a salt and a typical nonce.
10
- */
11
- nonce: string;
12
- };
13
- /**
14
- * Describes a signer. This may only have a public key for verification.
15
- */
16
- export interface ISigner {
17
- /** The corresponding public key */
18
- publicKey(): Promise<JsonWebKey>;
19
- /**
20
- * Signs data.
21
- *
22
- * @param data - The data to sign.
23
- *
24
- * @returns The signature of the data.
25
- */
26
- sign: (data: Uint8Array) => Promise<Uint8Array>;
27
- /**
28
- * Verifies a signature.
29
- *
30
- * @param data - The data to verify.
31
- * @param signature - The signature to verify.
32
- */
33
- verify: (data: Uint8Array, signature: Uint8Array) => Promise<void>;
34
- }
1
+ import type { PHDocumentHeader } from "./ph-types.js";
2
+ import type { ISigner, SigningParameters } from "./types.js";
35
3
  /**
36
4
  * A signer that uses a public key to verify data.
37
5
  */
@@ -73,7 +41,7 @@ export declare const validateHeader: (header: PHDocumentHeader) => Promise<void>
73
41
  *
74
42
  * @returns An unsigned header for a document.
75
43
  */
76
- export declare const createUnsignedHeader: (id?: string, documentType?: string) => PHDocumentHeader;
44
+ export declare const createPresignedHeader: (id?: string, documentType?: string) => PHDocumentHeader;
77
45
  /**
78
46
  * Creates a new, signed header for a document. This will replace the id of the
79
47
  * document.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../src/core/header.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAQ7D;;GAEG;AACH,qBAAa,eAAgB,YAAW,OAAO;;IAG7C,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IACvD,SAAS,CAAC,eAAe,EAAE,SAAS,GAAG,SAAS,CAAC;gBAErC,SAAS,EAAE,UAAU;IAW3B,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC;IAIhC,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAI3C,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CA+BrE;AAeD;;;;;;;;GAQG;AACH,eAAO,MAAM,IAAI,GACf,YAAY,iBAAiB,EAC7B,QAAQ,OAAO,KACd,OAAO,CAAC,MAAM,CAehB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,MAAM,GACjB,YAAY,iBAAiB,EAC7B,WAAW,MAAM,EACjB,QAAQ,OAAO,KACd,OAAO,CAAC,IAAI,CAcd,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,GACzB,QAAQ,gBAAgB,KACvB,OAAO,CAAC,IAAI,CAYd,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAChC,KAAI,MAA8B,EAClC,qBAAiB,KAChB,gBAkBF,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,GAC7B,gBAAgB,gBAAgB,EAChC,cAAc,MAAM,EACpB,QAAQ,OAAO,KACd,OAAO,CAAC,gBAAgB,CA8B1B,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,2BAA2B,GACtC,cAAc,MAAM,EACpB,QAAQ,OAAO,KACd,OAAO,CAAC,gBAAgB,CAS1B,CAAC"}
@@ -1,4 +1,4 @@
1
- import { generateUUID } from "#utils/env";
1
+ import { generateUUIDBrowser } from "./crypto.js";
2
2
  /**
3
3
  * Generates a deterministic payload from signing parameters
4
4
  */
@@ -16,20 +16,7 @@ export class PublicKeySigner {
16
16
  }
17
17
  #initCrypto() {
18
18
  return new Promise((resolve, reject) => {
19
- if (typeof window === "undefined") {
20
- import("node:crypto")
21
- .then((module) => {
22
- resolve(module.webcrypto.subtle);
23
- })
24
- .catch(reject);
25
- }
26
- else {
27
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
28
- if (!window.crypto?.subtle) {
29
- reject(new Error("Crypto module not available"));
30
- }
31
- resolve(window.crypto.subtle);
32
- }
19
+ resolve(crypto.subtle);
33
20
  });
34
21
  }
35
22
  async publicKey() {
@@ -48,7 +35,7 @@ export class PublicKeySigner {
48
35
  }
49
36
  let isValid;
50
37
  try {
51
- isValid = await subtleCrypto.verify("Ed25519", this.publicCryptoKey, signature, data);
38
+ isValid = await subtleCrypto.verify("Ed25519", this.publicCryptoKey, new Uint8Array(signature), new Uint8Array(data));
52
39
  }
53
40
  catch (error) {
54
41
  throw new Error("invalid signature");
@@ -125,7 +112,7 @@ export const validateHeader = async (header) => {
125
112
  *
126
113
  * @returns An unsigned header for a document.
127
114
  */
128
- export const createUnsignedHeader = (id = generateUUID(), documentType = "") => {
115
+ export const createPresignedHeader = (id = generateUUIDBrowser(), documentType = "") => {
129
116
  return {
130
117
  id,
131
118
  sig: {
@@ -158,7 +145,7 @@ export const createSignedHeader = async (unsignedHeader, documentType, signer) =
158
145
  const parameters = {
159
146
  documentType,
160
147
  createdAtUtcIso: unsignedHeader.createdAtUtcIso,
161
- nonce: generateUUID(),
148
+ nonce: generateUUIDBrowser(),
162
149
  };
163
150
  const signature = await sign(parameters, signer);
164
151
  const publicKey = await signer.publicKey();
@@ -193,7 +180,7 @@ export const createSignedHeader = async (unsignedHeader, documentType, signer) =
193
180
  * some are not. See the PHDocumentHeader type for more information.
194
181
  */
195
182
  export const createSignedHeaderForSigner = async (documentType, signer) => {
196
- const unsignedHeader = createUnsignedHeader();
183
+ const unsignedHeader = createPresignedHeader();
197
184
  const signedHeader = await createSignedHeader(unsignedHeader, documentType, signer);
198
185
  return signedHeader;
199
186
  };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header.js","sourceRoot":"","sources":["../../../src/core/header.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export * from "./actions.js";
2
+ export * from "./crypto.js";
3
+ export * from "./documents.js";
4
+ export * from "./errors.js";
5
+ export * from "./files.js";
6
+ export * from "./header.js";
7
+ export * from "./operations.js";
8
+ export * from "./reducer.js";
9
+ export * from "./schemas.js";
10
+ export * from "./state.js";
11
+ export * from "./validation.js";
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,12 @@
1
+ export * from "./actions.js";
2
+ export * from "./crypto.js";
3
+ export * from "./documents.js";
4
+ export * from "./errors.js";
5
+ export * from "./files.js";
6
+ export * from "./header.js";
7
+ export * from "./operations.js";
8
+ export * from "./reducer.js";
9
+ export * from "./schemas.js";
10
+ export * from "./state.js";
11
+ export * from "./validation.js";
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC"}
@@ -1,23 +1,18 @@
1
- import { type Reducer } from "#document/types.js";
2
- import JSZip from "jszip";
3
- import { type AttachmentInput, type PHDocument } from "../types.js";
4
- import { type ReplayDocumentOptions } from "./base.js";
5
- export type FileInput = string | number[] | Uint8Array | ArrayBuffer | Blob;
6
- export declare function createZip(document: PHDocument): JSZip;
1
+ import type { BinaryLike, RandomUUIDOptions } from "node:crypto";
2
+ import type { PHBaseState, PHDocument } from "./ph-types.js";
3
+ import type { AttachmentInput, Reducer, ReplayDocumentOptions } from "./types.js";
7
4
  /**
8
- * Saves a document to a ZIP file.
9
- *
10
- * @remarks
11
- * This function creates a ZIP file containing the document's state, operations,
12
- * and file attachments. The file is saved to the specified path.
13
- *
14
- * @param document - The document to save to the file.
15
- * @param path - The path to save the file to.
16
- * @param extension - The extension to use for the file.
17
- * @returns A promise that resolves to the path of the saved file.
5
+ * Reads an attachment from a file and returns its base64-encoded data and MIME type.
6
+ * @param path - The path of the attachment file to read.
7
+ * @returns A Promise that resolves to an object containing the base64-encoded data and MIME type of the attachment.
18
8
  */
19
- export declare function baseSaveToFile(document: PHDocument, path: string, extension: string, name?: string): Promise<string>;
20
- export declare function baseSaveToFileHandle(document: PHDocument, input: FileSystemFileHandle): Promise<void>;
9
+ export declare function getLocalFile(path: string): Promise<AttachmentInput>;
10
+ /**
11
+ * Fetches an attachment from a URL and returns its base64-encoded data and MIME type.
12
+ * @param url - The URL of the attachment to fetch.
13
+ * @returns A Promise that resolves to an object containing the base64-encoded data and MIME type of the attachment.
14
+ */
15
+ export declare function getRemoteFile(url: string): Promise<AttachmentInput>;
21
16
  /**
22
17
  * Loads a document from a ZIP file.
23
18
  *
@@ -33,18 +28,34 @@ export declare function baseSaveToFileHandle(document: PHDocument, input: FileSy
33
28
  * @returns A promise that resolves to the document state after applying all the operations.
34
29
  * @throws An error if the initial state or the operations history is not found in the ZIP file.
35
30
  */
36
- export declare function baseLoadFromFile<TDocument extends PHDocument>(path: string, reducer: Reducer<TDocument>, options?: ReplayDocumentOptions): Promise<TDocument>;
37
- export declare function baseLoadFromInput<TDocument extends PHDocument>(input: FileInput, reducer: Reducer<TDocument>, options?: ReplayDocumentOptions): Promise<TDocument>;
31
+ export declare function baseLoadFromFile<TState extends PHBaseState = PHBaseState>(path: string, reducer: Reducer<TState>, options?: ReplayDocumentOptions): Promise<PHDocument<TState>>;
38
32
  /**
39
- * Fetches an attachment from a URL and returns its base64-encoded data and MIME type.
40
- * @param url - The URL of the attachment to fetch.
41
- * @returns A Promise that resolves to an object containing the base64-encoded data and MIME type of the attachment.
33
+ * Saves a document to a ZIP file.
34
+ *
35
+ * @remarks
36
+ * This function creates a ZIP file containing the document's state, operations,
37
+ * and file attachments. The file is saved to the specified path.
38
+ *
39
+ * @param document - The document to save to the file.
40
+ * @param path - The path to save the file to.
41
+ * @param extension - The extension to use for the file.
42
+ * @returns A promise that resolves to the path of the saved file.
42
43
  */
43
- export declare function getRemoteFile(url: string): Promise<AttachmentInput>;
44
+ export declare function baseSaveToFile(document: PHDocument, path: string, extension: string, name?: string): Promise<string>;
44
45
  /**
45
- * Reads an attachment from a file and returns its base64-encoded data and MIME type.
46
- * @param path - The path of the attachment file to read.
47
- * @returns A Promise that resolves to an object containing the base64-encoded data and MIME type of the attachment.
46
+ * This should never be linked to directly. Instead, use the `#utils/misc`
47
+ * module. This will automatically pick the correct implementation for the
48
+ * current environment. See package.json for the mapping.
49
+ *
50
+ * Generates a secure UUID.
48
51
  */
49
- export declare function getLocalFile(path: string): Promise<AttachmentInput>;
50
- //# sourceMappingURL=file.d.ts.map
52
+ export declare function generateUUIDNode(options?: RandomUUIDOptions): `${string}-${string}-${string}-${string}-${string}`;
53
+ export declare function writeFileNode(path: string, name: string, data: Uint8Array): Promise<string>;
54
+ export declare function readFileNode(path: string): NonSharedBuffer;
55
+ export declare function fetchFileNode(url: string): Promise<{
56
+ buffer: Buffer;
57
+ mimeType?: string;
58
+ }>;
59
+ export declare const getFileNode: (file: string) => Promise<NonSharedBuffer>;
60
+ export declare const hashNode: (data: BinaryLike, algorithm?: string, encoding?: "base64" | "hex", _params?: Record<string, unknown>) => string;
61
+ //# sourceMappingURL=node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/core/node.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAMjE,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,KAAK,EAEV,eAAe,EACf,OAAO,EACP,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAUpB;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAMzE;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAWzE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,SAAS,WAAW,GAAG,WAAW,EAExC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,EACxB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAG7B;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,UAAU,EACpB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,MAAM,mBAgBd;AACD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,iBAAiB,uDAE3D;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,MAAM,CAAC,CAqBjB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,mBAExC;AAED,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAkBhD;AAED,eAAO,MAAM,WAAW,GAAU,MAAM,MAAM,6BAE7C,CAAC;AAEF,eAAO,MAAM,QAAQ,GACnB,MAAM,UAAU,EAChB,kBAAkB,EAClB,WAAU,QAAQ,GAAG,KAAgB,EACrC,UAAU,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,WAelC,CAAC"}
@@ -0,0 +1,149 @@
1
+ import mime from "mime/lite";
2
+ import { createHash, randomUUID } from "node:crypto";
3
+ import fs from "node:fs";
4
+ import https from "node:https";
5
+ import { join } from "node:path";
6
+ import { baseLoadFromInput, createZip } from "./files.js";
7
+ function getFileAttributes(file) {
8
+ const extension = file.replace(/^.*\./, "") || undefined;
9
+ const fileName = file.replace(/^.*[/\\]/, "") || undefined;
10
+ return { extension, fileName };
11
+ }
12
+ /**
13
+ * Reads an attachment from a file and returns its base64-encoded data and MIME type.
14
+ * @param path - The path of the attachment file to read.
15
+ * @returns A Promise that resolves to an object containing the base64-encoded data and MIME type of the attachment.
16
+ */
17
+ export async function getLocalFile(path) {
18
+ const buffer = await getFileNode(path);
19
+ const mimeType = mime.getType(path) || "application/octet-stream";
20
+ const attributes = getFileAttributes(path);
21
+ const data = buffer.toString("base64");
22
+ return { data, hash: hashNode(data), mimeType, ...attributes };
23
+ }
24
+ /**
25
+ * Fetches an attachment from a URL and returns its base64-encoded data and MIME type.
26
+ * @param url - The URL of the attachment to fetch.
27
+ * @returns A Promise that resolves to an object containing the base64-encoded data and MIME type of the attachment.
28
+ */
29
+ export async function getRemoteFile(url) {
30
+ const { buffer, mimeType = "application/octet-stream" } = await fetchFileNode(url);
31
+ const attributes = getFileAttributes(url);
32
+ const data = buffer.toString("base64");
33
+ return {
34
+ data,
35
+ hash: hashNode(data),
36
+ mimeType,
37
+ ...attributes,
38
+ };
39
+ }
40
+ /**
41
+ * Loads a document from a ZIP file.
42
+ *
43
+ * @remarks
44
+ * This function reads a ZIP file and returns the document state after
45
+ * applying all the operations. The reducer is used to apply the operations.
46
+ *
47
+ * @typeParam S - The type of the state object.
48
+ * @typeParam A - The type of the actions that can be applied to the state object.
49
+ *
50
+ * @param path - The path to the ZIP file.
51
+ * @param reducer - The reducer to apply the operations to the state object.
52
+ * @returns A promise that resolves to the document state after applying all the operations.
53
+ * @throws An error if the initial state or the operations history is not found in the ZIP file.
54
+ */
55
+ export async function baseLoadFromFile(path, reducer, options) {
56
+ const file = readFileNode(path);
57
+ return baseLoadFromInput(file, reducer, options);
58
+ }
59
+ /**
60
+ * Saves a document to a ZIP file.
61
+ *
62
+ * @remarks
63
+ * This function creates a ZIP file containing the document's state, operations,
64
+ * and file attachments. The file is saved to the specified path.
65
+ *
66
+ * @param document - The document to save to the file.
67
+ * @param path - The path to save the file to.
68
+ * @param extension - The extension to use for the file.
69
+ * @returns A promise that resolves to the path of the saved file.
70
+ */
71
+ export async function baseSaveToFile(document, path, extension, name) {
72
+ // create zip file
73
+ const zip = createZip(document);
74
+ const file = await zip.generateAsync({
75
+ type: "uint8array",
76
+ streamFiles: true,
77
+ });
78
+ const fileName = name ?? document.header.name;
79
+ const fileExtension = `.${extension}.phd`;
80
+ return writeFileNode(path, fileName.endsWith(fileExtension) ? fileName : `${fileName}${fileExtension}`, file);
81
+ }
82
+ /**
83
+ * This should never be linked to directly. Instead, use the `#utils/misc`
84
+ * module. This will automatically pick the correct implementation for the
85
+ * current environment. See package.json for the mapping.
86
+ *
87
+ * Generates a secure UUID.
88
+ */
89
+ export function generateUUIDNode(options) {
90
+ return randomUUID(options);
91
+ }
92
+ export function writeFileNode(path, name, data) {
93
+ const filePath = join(path, name);
94
+ fs.mkdirSync(path, { recursive: true });
95
+ return new Promise((resolve, reject) => {
96
+ try {
97
+ fs.writeFile(filePath, data, {}, (err) => {
98
+ if (err) {
99
+ reject(err);
100
+ }
101
+ else {
102
+ resolve(filePath);
103
+ }
104
+ });
105
+ }
106
+ catch (error) {
107
+ if (error instanceof Error) {
108
+ reject(error);
109
+ }
110
+ else {
111
+ reject(new Error(String(error)));
112
+ }
113
+ }
114
+ });
115
+ }
116
+ export function readFileNode(path) {
117
+ return fs.readFileSync(path);
118
+ }
119
+ export function fetchFileNode(url) {
120
+ return new Promise((resolve, reject) => {
121
+ https
122
+ .get(url, (resp) => {
123
+ const data = [];
124
+ const mimeType = resp.headers["content-type"];
125
+ resp.on("data", (chunk) => {
126
+ data.push(chunk);
127
+ });
128
+ resp.on("end", () => {
129
+ resolve({ buffer: Buffer.concat(data), mimeType });
130
+ });
131
+ })
132
+ .on("error", (err) => {
133
+ reject(err);
134
+ });
135
+ });
136
+ }
137
+ export const getFileNode = async (file) => {
138
+ return readFileNode(file);
139
+ };
140
+ export const hashNode = (data, algorithm = "sha1", encoding = "base64", _params) => {
141
+ if (!["sha1", "sha256", "sha512"].includes(algorithm)) {
142
+ throw new Error(`Hashing algorithm not supported: "${algorithm}". Available: sha1, sha256, sha512`);
143
+ }
144
+ if (!["base64", "hex"].includes(encoding)) {
145
+ throw new Error(`Hash encoding not supported: "${encoding}". Available: base64, hex`);
146
+ }
147
+ return createHash(algorithm).update(data).digest(encoding);
148
+ };
149
+ //# sourceMappingURL=node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../../../src/core/node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { Action, PHBaseState, PHDocument } from "./ph-types.js";
2
+ import type { LoadStateActionInput } from "./types.js";
3
+ export declare function setNameOperation<TDocument extends PHDocument>(document: TDocument, name: string): TDocument & {
4
+ header: {
5
+ name: string;
6
+ id: string;
7
+ sig: import("./ph-types.js").PHDocumentSignatureInfo;
8
+ documentType: string;
9
+ createdAtUtcIso: string;
10
+ slug: string;
11
+ branch: string;
12
+ revision: {
13
+ [scope: string]: number;
14
+ };
15
+ lastModifiedAtUtcIso: string;
16
+ meta?: import("./ph-types.js").PHDocumentMeta;
17
+ };
18
+ };
19
+ export declare function undoOperation<TDocument extends PHDocument>(document: TDocument, action: Action, skip: number): {
20
+ document: TDocument;
21
+ action: Action;
22
+ skip: number;
23
+ reuseLastOperationIndex: boolean;
24
+ };
25
+ export declare function redoOperation<TDocument extends PHDocument>(document: TDocument, action: Action, skip: number): {
26
+ document: TDocument;
27
+ action: Action;
28
+ skip: number;
29
+ reuseLastOperationIndex: boolean;
30
+ };
31
+ export declare function loadStateOperation<TState extends PHBaseState>(document: PHDocument<TState>, action: LoadStateActionInput): PHDocument<TState>;
32
+ //# sourceMappingURL=operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../../src/core/operations.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGvD,wBAAgB,gBAAgB,CAAC,SAAS,SAAS,UAAU,EAC3D,QAAQ,EAAE,SAAS,EACnB,IAAI,EAAE,MAAM;;;;;;;;;;;;;;;EAGb;AAED,wBAAgB,aAAa,CAAC,SAAS,SAAS,UAAU,EACxD,QAAQ,EAAE,SAAS,EACnB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB,EAAE,OAAO,CAAC;CAClC,CA8CA;AAED,wBAAgB,aAAa,CAAC,SAAS,SAAS,UAAU,EACxD,QAAQ,EAAE,SAAS,EACnB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB,EAAE,OAAO,CAAC;CAClC,CA8CA;AAED,wBAAgB,kBAAkB,CAAC,MAAM,SAAS,WAAW,EAC3D,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,EAC5B,MAAM,EAAE,oBAAoB,GAC3B,UAAU,CAAC,MAAM,CAAC,CAMpB"}
@@ -1,7 +1,6 @@
1
1
  import { castDraft, create } from "mutative";
2
- import { hashDocumentStateForScope, replayOperations } from "../utils/base.js";
3
- import { nextSkipNumber, sortOperations } from "../utils/document-helpers.js";
4
- import { loadState, noop } from "./creators.js";
2
+ import { noop } from "./actions.js";
3
+ import { nextSkipNumber, sortOperations } from "./documents.js";
5
4
  // updates the name of the document
6
5
  export function setNameOperation(document, name) {
7
6
  return { ...document, header: { ...document.header, name } };
@@ -21,7 +20,7 @@ export function undoOperation(document, action, skip) {
21
20
  draft.action = noop(scope);
22
21
  const lastOperation = sortedOperations.at(-1);
23
22
  let nextIndex = lastOperation?.index ?? -1;
24
- const isNewNoop = lastOperation?.type !== "NOOP";
23
+ const isNewNoop = lastOperation?.action.type !== "NOOP";
25
24
  if (isNewNoop) {
26
25
  nextIndex = nextIndex + 1;
27
26
  }
@@ -63,70 +62,23 @@ export function redoOperation(document, action, skip) {
63
62
  if (draft.document.clipboard.length < 1) {
64
63
  throw new Error(`Cannot redo: no operations in the clipboard`);
65
64
  }
66
- const operationIndex = draft.document.clipboard.findLastIndex((op) => op.scope === scope);
65
+ const operationIndex = draft.document.clipboard.findLastIndex((op) => op.action.scope === scope);
67
66
  if (operationIndex < 0) {
68
67
  throw new Error(`Cannot redo: no operations in clipboard for scope "${scope}"`);
69
68
  }
70
69
  const operation = draft.document.clipboard.splice(operationIndex, 1)[0];
71
70
  draft.action = castDraft({
72
- type: operation.type,
73
- scope: operation.scope,
74
- input: operation.input,
71
+ type: operation.action.type,
72
+ scope: operation.action.scope,
73
+ input: operation.action.input,
75
74
  });
76
75
  });
77
76
  }
78
- export function pruneOperation(document, input, wrappedReducer) {
79
- const operations = document.operations.global;
80
- let { start, end } = input;
81
- start = start || 0;
82
- end = end || operations.length;
83
- const actionsToPrune = operations.slice(start, end);
84
- const actionsToKeepStart = operations.slice(0, start);
85
- const actionsToKeepEnd = operations.slice(end);
86
- // runs all operations from the initial state to
87
- // the end of prune to get name and data
88
- const newDocument = replayOperations(document.initialState, {
89
- ...document.operations,
90
- global: actionsToKeepStart.concat(actionsToPrune),
91
- }, wrappedReducer);
92
- const newState = newDocument.state;
93
- const name = newDocument.header.name;
94
- // the new operation has the index of the first pruned operation
95
- const loadStateIndex = actionsToKeepStart.length;
96
- // if and operation is pruned then reuses the timestamp of the last operation
97
- // if not then assigns the timestamp of the following unpruned operation
98
- const loadStateTimestamp = actionsToKeepStart.length
99
- ? actionsToKeepStart[actionsToKeepStart.length - 1].timestamp
100
- : actionsToKeepEnd.length
101
- ? actionsToKeepEnd[0].timestamp
102
- : new Date().toISOString();
103
- // replaces pruned operations with LOAD_STATE
104
- return replayOperations(document.initialState, {
105
- ...document.operations,
106
- global: [
107
- ...actionsToKeepStart,
108
- {
109
- skip: 0,
110
- ...loadState({ name, state: newState }, actionsToPrune.length),
111
- timestamp: loadStateTimestamp,
112
- index: loadStateIndex,
113
- hash: hashDocumentStateForScope({ state: newState }, "global"),
114
- },
115
- ...actionsToKeepEnd
116
- // updates the index for all the following operations
117
- .map((action, index) => ({
118
- ...action,
119
- index: loadStateIndex + index + 1,
120
- })),
121
- ],
122
- }, wrappedReducer);
123
- }
124
- export function loadStateOperation(oldDocument, newDocument) {
77
+ export function loadStateOperation(document, action) {
125
78
  return {
126
- ...oldDocument,
127
- name: newDocument.name,
128
- state: newDocument.state ??
129
- { global: {}, local: {} },
79
+ ...document,
80
+ header: { ...document.header, name: action.state.name },
81
+ state: action.state.data,
130
82
  };
131
83
  }
132
84
  //# sourceMappingURL=operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations.js","sourceRoot":"","sources":["../../../src/core/operations.ts"],"names":[],"mappings":"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"}