document-model 1.1.0-debug.1 → 1.1.0-debug.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/cjs/document-model.js +15 -35
- package/dist/browser/cjs/document-model.js.map +1 -1
- package/dist/browser/cjs/document.js +10 -10
- package/dist/browser/cjs/index.js +11 -7
- package/dist/browser/cjs/index.js.map +1 -1
- package/dist/browser/cjs/internal/index-CaJbS06G.js +2339 -0
- package/dist/browser/cjs/internal/index-CaJbS06G.js.map +1 -0
- package/dist/browser/cjs/internal/index-kKIg6qNB.js +44 -0
- package/dist/browser/cjs/internal/index-kKIg6qNB.js.map +1 -0
- package/dist/browser/cjs/internal/object-B6dSDhtS.js +4109 -0
- package/dist/browser/cjs/internal/object-B6dSDhtS.js.map +1 -0
- package/dist/browser/es/document-model.js +16 -37
- package/dist/browser/es/document-model.js.map +1 -1
- package/dist/browser/es/document.js +12 -12
- package/dist/browser/es/index.js +11 -7
- package/dist/browser/es/index.js.map +1 -1
- package/dist/browser/es/internal/index-B1lQN59e.js +2340 -0
- package/dist/browser/es/internal/index-B1lQN59e.js.map +1 -0
- package/dist/browser/es/internal/index-Bu0CkmrW.js +45 -0
- package/dist/browser/es/internal/index-Bu0CkmrW.js.map +1 -0
- package/dist/browser/es/internal/object-9mR1JlXD.js +4110 -0
- package/dist/browser/es/internal/object-9mR1JlXD.js.map +1 -0
- package/dist/node/cjs/document-model.js +15 -33
- package/dist/node/cjs/document-model.js.map +1 -1
- package/dist/node/cjs/document.js +14 -10
- package/dist/node/cjs/document.js.map +1 -1
- package/dist/node/cjs/index.js +15 -7
- package/dist/node/cjs/index.js.map +1 -1
- package/dist/node/cjs/internal/index-AqiVmL0w.js +44 -0
- package/dist/node/cjs/internal/index-AqiVmL0w.js.map +1 -0
- package/dist/node/cjs/internal/index-ajqhOWQ1.js +2343 -0
- package/dist/node/cjs/internal/index-ajqhOWQ1.js.map +1 -0
- package/dist/node/cjs/internal/object-D_9h7jBN.js +2111 -0
- package/dist/node/cjs/internal/object-D_9h7jBN.js.map +1 -0
- package/dist/node/es/document-model.js +16 -35
- package/dist/node/es/document-model.js.map +1 -1
- package/dist/node/es/document.js +16 -12
- package/dist/node/es/document.js.map +1 -1
- package/dist/node/es/index.js +15 -7
- package/dist/node/es/index.js.map +1 -1
- package/dist/node/es/internal/index-Bh_09edy.js +2344 -0
- package/dist/node/es/internal/index-Bh_09edy.js.map +1 -0
- package/dist/node/es/internal/index-s6NFw7Kq.js +45 -0
- package/dist/node/es/internal/index-s6NFw7Kq.js.map +1 -0
- package/dist/node/es/internal/object-CbITi4iq.js +2112 -0
- package/dist/node/es/internal/object-CbITi4iq.js.map +1 -0
- package/dist/src/document/reducer.d.ts +13 -2
- package/dist/src/document/utils/base.d.ts +1 -1
- package/dist/src/document/utils/document-helpers.d.ts +53 -0
- package/dist/src/document/utils/index.d.ts +1 -0
- package/package.json +1 -1
- package/dist/browser/cjs/_virtual/_commonjsHelpers.js +0 -7
- package/dist/browser/cjs/_virtual/_commonjsHelpers.js.map +0 -1
- package/dist/browser/cjs/_virtual/browser.js +0 -35
- package/dist/browser/cjs/_virtual/browser.js.map +0 -1
- package/dist/browser/cjs/_virtual/index.js +0 -5
- package/dist/browser/cjs/_virtual/index.js.map +0 -1
- package/dist/browser/cjs/_virtual/index2.js +0 -5
- package/dist/browser/cjs/_virtual/index2.js.map +0 -1
- package/dist/browser/cjs/_virtual/index3.js +0 -5
- package/dist/browser/cjs/_virtual/index3.js.map +0 -1
- package/dist/browser/cjs/_virtual/index4.js +0 -5
- package/dist/browser/cjs/_virtual/index4.js.map +0 -1
- package/dist/browser/cjs/_virtual/index5.js +0 -5
- package/dist/browser/cjs/_virtual/index5.js.map +0 -1
- package/dist/browser/cjs/_virtual/inherits_browser.js +0 -5
- package/dist/browser/cjs/_virtual/inherits_browser.js.map +0 -1
- package/dist/browser/cjs/src/document/actions/creators.js +0 -46
- package/dist/browser/cjs/src/document/actions/creators.js.map +0 -1
- package/dist/browser/cjs/src/document/actions/index.js +0 -173
- package/dist/browser/cjs/src/document/actions/index.js.map +0 -1
- package/dist/browser/cjs/src/document/actions/types.js +0 -15
- package/dist/browser/cjs/src/document/actions/types.js.map +0 -1
- package/dist/browser/cjs/src/document/object.js +0 -190
- package/dist/browser/cjs/src/document/object.js.map +0 -1
- package/dist/browser/cjs/src/document/reducer.js +0 -192
- package/dist/browser/cjs/src/document/reducer.js.map +0 -1
- package/dist/browser/cjs/src/document/schema/zod.js +0 -137
- package/dist/browser/cjs/src/document/schema/zod.js.map +0 -1
- package/dist/browser/cjs/src/document/utils/base.js +0 -220
- package/dist/browser/cjs/src/document/utils/base.js.map +0 -1
- package/dist/browser/cjs/src/document/utils/document-helpers.js +0 -324
- package/dist/browser/cjs/src/document/utils/document-helpers.js.map +0 -1
- package/dist/browser/cjs/src/document/utils/file.js +0 -135
- package/dist/browser/cjs/src/document/utils/file.js.map +0 -1
- package/dist/browser/cjs/src/document/utils/index.js +0 -33
- package/dist/browser/cjs/src/document/utils/index.js.map +0 -1
- package/dist/browser/cjs/src/document/utils/validation.js +0 -24
- package/dist/browser/cjs/src/document/utils/validation.js.map +0 -1
- package/dist/browser/cjs/src/document-model/custom/reducers/header.js +0 -26
- package/dist/browser/cjs/src/document-model/custom/reducers/header.js.map +0 -1
- package/dist/browser/cjs/src/document-model/custom/reducers/module.js +0 -46
- package/dist/browser/cjs/src/document-model/custom/reducers/module.js.map +0 -1
- package/dist/browser/cjs/src/document-model/custom/reducers/operation-error.js +0 -95
- package/dist/browser/cjs/src/document-model/custom/reducers/operation-error.js.map +0 -1
- package/dist/browser/cjs/src/document-model/custom/reducers/operation-example.js +0 -58
- package/dist/browser/cjs/src/document-model/custom/reducers/operation-example.js.map +0 -1
- package/dist/browser/cjs/src/document-model/custom/reducers/operation.js +0 -123
- package/dist/browser/cjs/src/document-model/custom/reducers/operation.js.map +0 -1
- package/dist/browser/cjs/src/document-model/custom/reducers/state.js +0 -66
- package/dist/browser/cjs/src/document-model/custom/reducers/state.js.map +0 -1
- package/dist/browser/cjs/src/document-model/custom/reducers/versioning.js +0 -31
- package/dist/browser/cjs/src/document-model/custom/reducers/versioning.js.map +0 -1
- package/dist/browser/cjs/src/document-model/custom/utils.js +0 -117
- package/dist/browser/cjs/src/document-model/custom/utils.js.map +0 -1
- package/dist/browser/cjs/src/document-model/gen/creators.js +0 -53
- package/dist/browser/cjs/src/document-model/gen/creators.js.map +0 -1
- package/dist/browser/cjs/src/document-model/gen/document-model.js +0 -545
- package/dist/browser/cjs/src/document-model/gen/document-model.js.map +0 -1
- package/dist/browser/cjs/src/document-model/gen/header/creators.js +0 -39
- package/dist/browser/cjs/src/document-model/gen/header/creators.js.map +0 -1
- package/dist/browser/cjs/src/document-model/gen/header/object.js +0 -26
- package/dist/browser/cjs/src/document-model/gen/header/object.js.map +0 -1
- package/dist/browser/cjs/src/document-model/gen/module/creators.js +0 -34
- package/dist/browser/cjs/src/document-model/gen/module/creators.js.map +0 -1
- package/dist/browser/cjs/src/document-model/gen/module/object.js +0 -23
- package/dist/browser/cjs/src/document-model/gen/module/object.js.map +0 -1
- package/dist/browser/cjs/src/document-model/gen/object.js +0 -47
- package/dist/browser/cjs/src/document-model/gen/object.js.map +0 -1
- package/dist/browser/cjs/src/document-model/gen/operation/creators.js +0 -59
- package/dist/browser/cjs/src/document-model/gen/operation/creators.js.map +0 -1
- package/dist/browser/cjs/src/document-model/gen/operation/object.js +0 -38
- package/dist/browser/cjs/src/document-model/gen/operation/object.js.map +0 -1
- package/dist/browser/cjs/src/document-model/gen/operation-error/creators.js +0 -44
- package/dist/browser/cjs/src/document-model/gen/operation-error/creators.js.map +0 -1
- package/dist/browser/cjs/src/document-model/gen/operation-error/object.js +0 -29
- package/dist/browser/cjs/src/document-model/gen/operation-error/object.js.map +0 -1
- package/dist/browser/cjs/src/document-model/gen/operation-example/creators.js +0 -29
- package/dist/browser/cjs/src/document-model/gen/operation-example/creators.js.map +0 -1
- package/dist/browser/cjs/src/document-model/gen/operation-example/object.js +0 -20
- package/dist/browser/cjs/src/document-model/gen/operation-example/object.js.map +0 -1
- package/dist/browser/cjs/src/document-model/gen/reducer.js +0 -255
- package/dist/browser/cjs/src/document-model/gen/reducer.js.map +0 -1
- package/dist/browser/cjs/src/document-model/gen/schema/zod.js +0 -449
- package/dist/browser/cjs/src/document-model/gen/schema/zod.js.map +0 -1
- package/dist/browser/cjs/src/document-model/gen/state/creators.js +0 -39
- package/dist/browser/cjs/src/document-model/gen/state/creators.js.map +0 -1
- package/dist/browser/cjs/src/document-model/gen/state/object.js +0 -26
- package/dist/browser/cjs/src/document-model/gen/state/object.js.map +0 -1
- package/dist/browser/cjs/src/document-model/gen/utils.js +0 -75
- package/dist/browser/cjs/src/document-model/gen/utils.js.map +0 -1
- package/dist/browser/cjs/src/document-model/gen/versioning/creators.js +0 -33
- package/dist/browser/cjs/src/document-model/gen/versioning/creators.js.map +0 -1
- package/dist/browser/cjs/src/document-model/gen/versioning/object.js +0 -23
- package/dist/browser/cjs/src/document-model/gen/versioning/object.js.map +0 -1
- package/dist/browser/es/_virtual/_commonjsHelpers.js +0 -7
- package/dist/browser/es/_virtual/_commonjsHelpers.js.map +0 -1
- package/dist/browser/es/_virtual/browser.js +0 -35
- package/dist/browser/es/_virtual/browser.js.map +0 -1
- package/dist/browser/es/_virtual/index.js +0 -5
- package/dist/browser/es/_virtual/index.js.map +0 -1
- package/dist/browser/es/_virtual/index2.js +0 -5
- package/dist/browser/es/_virtual/index2.js.map +0 -1
- package/dist/browser/es/_virtual/index3.js +0 -5
- package/dist/browser/es/_virtual/index3.js.map +0 -1
- package/dist/browser/es/_virtual/index4.js +0 -5
- package/dist/browser/es/_virtual/index4.js.map +0 -1
- package/dist/browser/es/_virtual/index5.js +0 -5
- package/dist/browser/es/_virtual/index5.js.map +0 -1
- package/dist/browser/es/_virtual/inherits_browser.js +0 -5
- package/dist/browser/es/_virtual/inherits_browser.js.map +0 -1
- package/dist/browser/es/src/document/actions/creators.js +0 -46
- package/dist/browser/es/src/document/actions/creators.js.map +0 -1
- package/dist/browser/es/src/document/actions/index.js +0 -174
- package/dist/browser/es/src/document/actions/index.js.map +0 -1
- package/dist/browser/es/src/document/actions/types.js +0 -15
- package/dist/browser/es/src/document/actions/types.js.map +0 -1
- package/dist/browser/es/src/document/object.js +0 -190
- package/dist/browser/es/src/document/object.js.map +0 -1
- package/dist/browser/es/src/document/reducer.js +0 -192
- package/dist/browser/es/src/document/reducer.js.map +0 -1
- package/dist/browser/es/src/document/schema/zod.js +0 -137
- package/dist/browser/es/src/document/schema/zod.js.map +0 -1
- package/dist/browser/es/src/document/utils/base.js +0 -220
- package/dist/browser/es/src/document/utils/base.js.map +0 -1
- package/dist/browser/es/src/document/utils/document-helpers.js +0 -324
- package/dist/browser/es/src/document/utils/document-helpers.js.map +0 -1
- package/dist/browser/es/src/document/utils/file.js +0 -135
- package/dist/browser/es/src/document/utils/file.js.map +0 -1
- package/dist/browser/es/src/document/utils/index.js +0 -33
- package/dist/browser/es/src/document/utils/index.js.map +0 -1
- package/dist/browser/es/src/document/utils/validation.js +0 -24
- package/dist/browser/es/src/document/utils/validation.js.map +0 -1
- package/dist/browser/es/src/document-model/custom/reducers/header.js +0 -26
- package/dist/browser/es/src/document-model/custom/reducers/header.js.map +0 -1
- package/dist/browser/es/src/document-model/custom/reducers/module.js +0 -46
- package/dist/browser/es/src/document-model/custom/reducers/module.js.map +0 -1
- package/dist/browser/es/src/document-model/custom/reducers/operation-error.js +0 -95
- package/dist/browser/es/src/document-model/custom/reducers/operation-error.js.map +0 -1
- package/dist/browser/es/src/document-model/custom/reducers/operation-example.js +0 -58
- package/dist/browser/es/src/document-model/custom/reducers/operation-example.js.map +0 -1
- package/dist/browser/es/src/document-model/custom/reducers/operation.js +0 -123
- package/dist/browser/es/src/document-model/custom/reducers/operation.js.map +0 -1
- package/dist/browser/es/src/document-model/custom/reducers/state.js +0 -66
- package/dist/browser/es/src/document-model/custom/reducers/state.js.map +0 -1
- package/dist/browser/es/src/document-model/custom/reducers/versioning.js +0 -31
- package/dist/browser/es/src/document-model/custom/reducers/versioning.js.map +0 -1
- package/dist/browser/es/src/document-model/custom/utils.js +0 -117
- package/dist/browser/es/src/document-model/custom/utils.js.map +0 -1
- package/dist/browser/es/src/document-model/gen/creators.js +0 -53
- package/dist/browser/es/src/document-model/gen/creators.js.map +0 -1
- package/dist/browser/es/src/document-model/gen/document-model.js +0 -545
- package/dist/browser/es/src/document-model/gen/document-model.js.map +0 -1
- package/dist/browser/es/src/document-model/gen/header/creators.js +0 -39
- package/dist/browser/es/src/document-model/gen/header/creators.js.map +0 -1
- package/dist/browser/es/src/document-model/gen/header/object.js +0 -26
- package/dist/browser/es/src/document-model/gen/header/object.js.map +0 -1
- package/dist/browser/es/src/document-model/gen/module/creators.js +0 -34
- package/dist/browser/es/src/document-model/gen/module/creators.js.map +0 -1
- package/dist/browser/es/src/document-model/gen/module/object.js +0 -23
- package/dist/browser/es/src/document-model/gen/module/object.js.map +0 -1
- package/dist/browser/es/src/document-model/gen/object.js +0 -47
- package/dist/browser/es/src/document-model/gen/object.js.map +0 -1
- package/dist/browser/es/src/document-model/gen/operation/creators.js +0 -59
- package/dist/browser/es/src/document-model/gen/operation/creators.js.map +0 -1
- package/dist/browser/es/src/document-model/gen/operation/object.js +0 -38
- package/dist/browser/es/src/document-model/gen/operation/object.js.map +0 -1
- package/dist/browser/es/src/document-model/gen/operation-error/creators.js +0 -44
- package/dist/browser/es/src/document-model/gen/operation-error/creators.js.map +0 -1
- package/dist/browser/es/src/document-model/gen/operation-error/object.js +0 -29
- package/dist/browser/es/src/document-model/gen/operation-error/object.js.map +0 -1
- package/dist/browser/es/src/document-model/gen/operation-example/creators.js +0 -29
- package/dist/browser/es/src/document-model/gen/operation-example/creators.js.map +0 -1
- package/dist/browser/es/src/document-model/gen/operation-example/object.js +0 -20
- package/dist/browser/es/src/document-model/gen/operation-example/object.js.map +0 -1
- package/dist/browser/es/src/document-model/gen/reducer.js +0 -255
- package/dist/browser/es/src/document-model/gen/reducer.js.map +0 -1
- package/dist/browser/es/src/document-model/gen/schema/zod.js +0 -449
- package/dist/browser/es/src/document-model/gen/schema/zod.js.map +0 -1
- package/dist/browser/es/src/document-model/gen/state/creators.js +0 -39
- package/dist/browser/es/src/document-model/gen/state/creators.js.map +0 -1
- package/dist/browser/es/src/document-model/gen/state/object.js +0 -26
- package/dist/browser/es/src/document-model/gen/state/object.js.map +0 -1
- package/dist/browser/es/src/document-model/gen/utils.js +0 -75
- package/dist/browser/es/src/document-model/gen/utils.js.map +0 -1
- package/dist/browser/es/src/document-model/gen/versioning/creators.js +0 -33
- package/dist/browser/es/src/document-model/gen/versioning/creators.js.map +0 -1
- package/dist/browser/es/src/document-model/gen/versioning/object.js +0 -23
- package/dist/browser/es/src/document-model/gen/versioning/object.js.map +0 -1
- package/dist/node/cjs/_virtual/_commonjsHelpers.js +0 -7
- package/dist/node/cjs/_virtual/_commonjsHelpers.js.map +0 -1
- package/dist/node/cjs/_virtual/index.js +0 -5
- package/dist/node/cjs/_virtual/index.js.map +0 -1
- package/dist/node/cjs/src/document/actions/creators.js +0 -46
- package/dist/node/cjs/src/document/actions/creators.js.map +0 -1
- package/dist/node/cjs/src/document/actions/index.js +0 -173
- package/dist/node/cjs/src/document/actions/index.js.map +0 -1
- package/dist/node/cjs/src/document/actions/types.js +0 -15
- package/dist/node/cjs/src/document/actions/types.js.map +0 -1
- package/dist/node/cjs/src/document/object.js +0 -190
- package/dist/node/cjs/src/document/object.js.map +0 -1
- package/dist/node/cjs/src/document/reducer.js +0 -194
- package/dist/node/cjs/src/document/reducer.js.map +0 -1
- package/dist/node/cjs/src/document/schema/zod.js +0 -137
- package/dist/node/cjs/src/document/schema/zod.js.map +0 -1
- package/dist/node/cjs/src/document/utils/base.js +0 -220
- package/dist/node/cjs/src/document/utils/base.js.map +0 -1
- package/dist/node/cjs/src/document/utils/document-helpers.js +0 -324
- package/dist/node/cjs/src/document/utils/document-helpers.js.map +0 -1
- package/dist/node/cjs/src/document/utils/file.js +0 -136
- package/dist/node/cjs/src/document/utils/file.js.map +0 -1
- package/dist/node/cjs/src/document/utils/index.js +0 -33
- package/dist/node/cjs/src/document/utils/index.js.map +0 -1
- package/dist/node/cjs/src/document/utils/node.js +0 -54
- package/dist/node/cjs/src/document/utils/node.js.map +0 -1
- package/dist/node/cjs/src/document/utils/validation.js +0 -24
- package/dist/node/cjs/src/document/utils/validation.js.map +0 -1
- package/dist/node/cjs/src/document-model/custom/reducers/header.js +0 -26
- package/dist/node/cjs/src/document-model/custom/reducers/header.js.map +0 -1
- package/dist/node/cjs/src/document-model/custom/reducers/module.js +0 -46
- package/dist/node/cjs/src/document-model/custom/reducers/module.js.map +0 -1
- package/dist/node/cjs/src/document-model/custom/reducers/operation-error.js +0 -95
- package/dist/node/cjs/src/document-model/custom/reducers/operation-error.js.map +0 -1
- package/dist/node/cjs/src/document-model/custom/reducers/operation-example.js +0 -58
- package/dist/node/cjs/src/document-model/custom/reducers/operation-example.js.map +0 -1
- package/dist/node/cjs/src/document-model/custom/reducers/operation.js +0 -123
- package/dist/node/cjs/src/document-model/custom/reducers/operation.js.map +0 -1
- package/dist/node/cjs/src/document-model/custom/reducers/state.js +0 -66
- package/dist/node/cjs/src/document-model/custom/reducers/state.js.map +0 -1
- package/dist/node/cjs/src/document-model/custom/reducers/versioning.js +0 -31
- package/dist/node/cjs/src/document-model/custom/reducers/versioning.js.map +0 -1
- package/dist/node/cjs/src/document-model/custom/utils.js +0 -117
- package/dist/node/cjs/src/document-model/custom/utils.js.map +0 -1
- package/dist/node/cjs/src/document-model/gen/creators.js +0 -53
- package/dist/node/cjs/src/document-model/gen/creators.js.map +0 -1
- package/dist/node/cjs/src/document-model/gen/document-model.js +0 -545
- package/dist/node/cjs/src/document-model/gen/document-model.js.map +0 -1
- package/dist/node/cjs/src/document-model/gen/header/creators.js +0 -41
- package/dist/node/cjs/src/document-model/gen/header/creators.js.map +0 -1
- package/dist/node/cjs/src/document-model/gen/header/object.js +0 -26
- package/dist/node/cjs/src/document-model/gen/header/object.js.map +0 -1
- package/dist/node/cjs/src/document-model/gen/module/creators.js +0 -36
- package/dist/node/cjs/src/document-model/gen/module/creators.js.map +0 -1
- package/dist/node/cjs/src/document-model/gen/module/object.js +0 -23
- package/dist/node/cjs/src/document-model/gen/module/object.js.map +0 -1
- package/dist/node/cjs/src/document-model/gen/object.js +0 -47
- package/dist/node/cjs/src/document-model/gen/object.js.map +0 -1
- package/dist/node/cjs/src/document-model/gen/operation/creators.js +0 -61
- package/dist/node/cjs/src/document-model/gen/operation/creators.js.map +0 -1
- package/dist/node/cjs/src/document-model/gen/operation/object.js +0 -38
- package/dist/node/cjs/src/document-model/gen/operation/object.js.map +0 -1
- package/dist/node/cjs/src/document-model/gen/operation-error/creators.js +0 -46
- package/dist/node/cjs/src/document-model/gen/operation-error/creators.js.map +0 -1
- package/dist/node/cjs/src/document-model/gen/operation-error/object.js +0 -29
- package/dist/node/cjs/src/document-model/gen/operation-error/object.js.map +0 -1
- package/dist/node/cjs/src/document-model/gen/operation-example/creators.js +0 -31
- package/dist/node/cjs/src/document-model/gen/operation-example/creators.js.map +0 -1
- package/dist/node/cjs/src/document-model/gen/operation-example/object.js +0 -20
- package/dist/node/cjs/src/document-model/gen/operation-example/object.js.map +0 -1
- package/dist/node/cjs/src/document-model/gen/reducer.js +0 -257
- package/dist/node/cjs/src/document-model/gen/reducer.js.map +0 -1
- package/dist/node/cjs/src/document-model/gen/schema/zod.js +0 -449
- package/dist/node/cjs/src/document-model/gen/schema/zod.js.map +0 -1
- package/dist/node/cjs/src/document-model/gen/state/creators.js +0 -41
- package/dist/node/cjs/src/document-model/gen/state/creators.js.map +0 -1
- package/dist/node/cjs/src/document-model/gen/state/object.js +0 -26
- package/dist/node/cjs/src/document-model/gen/state/object.js.map +0 -1
- package/dist/node/cjs/src/document-model/gen/utils.js +0 -75
- package/dist/node/cjs/src/document-model/gen/utils.js.map +0 -1
- package/dist/node/cjs/src/document-model/gen/versioning/creators.js +0 -35
- package/dist/node/cjs/src/document-model/gen/versioning/creators.js.map +0 -1
- package/dist/node/cjs/src/document-model/gen/versioning/object.js +0 -23
- package/dist/node/cjs/src/document-model/gen/versioning/object.js.map +0 -1
- package/dist/node/es/_virtual/_commonjsHelpers.js +0 -7
- package/dist/node/es/_virtual/_commonjsHelpers.js.map +0 -1
- package/dist/node/es/_virtual/index.js +0 -5
- package/dist/node/es/_virtual/index.js.map +0 -1
- package/dist/node/es/src/document/actions/creators.js +0 -46
- package/dist/node/es/src/document/actions/creators.js.map +0 -1
- package/dist/node/es/src/document/actions/index.js +0 -174
- package/dist/node/es/src/document/actions/index.js.map +0 -1
- package/dist/node/es/src/document/actions/types.js +0 -15
- package/dist/node/es/src/document/actions/types.js.map +0 -1
- package/dist/node/es/src/document/object.js +0 -190
- package/dist/node/es/src/document/object.js.map +0 -1
- package/dist/node/es/src/document/reducer.js +0 -194
- package/dist/node/es/src/document/reducer.js.map +0 -1
- package/dist/node/es/src/document/schema/zod.js +0 -137
- package/dist/node/es/src/document/schema/zod.js.map +0 -1
- package/dist/node/es/src/document/utils/base.js +0 -220
- package/dist/node/es/src/document/utils/base.js.map +0 -1
- package/dist/node/es/src/document/utils/document-helpers.js +0 -324
- package/dist/node/es/src/document/utils/document-helpers.js.map +0 -1
- package/dist/node/es/src/document/utils/file.js +0 -136
- package/dist/node/es/src/document/utils/file.js.map +0 -1
- package/dist/node/es/src/document/utils/index.js +0 -33
- package/dist/node/es/src/document/utils/index.js.map +0 -1
- package/dist/node/es/src/document/utils/node.js +0 -54
- package/dist/node/es/src/document/utils/node.js.map +0 -1
- package/dist/node/es/src/document/utils/validation.js +0 -24
- package/dist/node/es/src/document/utils/validation.js.map +0 -1
- package/dist/node/es/src/document-model/custom/reducers/header.js +0 -26
- package/dist/node/es/src/document-model/custom/reducers/header.js.map +0 -1
- package/dist/node/es/src/document-model/custom/reducers/module.js +0 -46
- package/dist/node/es/src/document-model/custom/reducers/module.js.map +0 -1
- package/dist/node/es/src/document-model/custom/reducers/operation-error.js +0 -95
- package/dist/node/es/src/document-model/custom/reducers/operation-error.js.map +0 -1
- package/dist/node/es/src/document-model/custom/reducers/operation-example.js +0 -58
- package/dist/node/es/src/document-model/custom/reducers/operation-example.js.map +0 -1
- package/dist/node/es/src/document-model/custom/reducers/operation.js +0 -123
- package/dist/node/es/src/document-model/custom/reducers/operation.js.map +0 -1
- package/dist/node/es/src/document-model/custom/reducers/state.js +0 -66
- package/dist/node/es/src/document-model/custom/reducers/state.js.map +0 -1
- package/dist/node/es/src/document-model/custom/reducers/versioning.js +0 -31
- package/dist/node/es/src/document-model/custom/reducers/versioning.js.map +0 -1
- package/dist/node/es/src/document-model/custom/utils.js +0 -117
- package/dist/node/es/src/document-model/custom/utils.js.map +0 -1
- package/dist/node/es/src/document-model/gen/creators.js +0 -53
- package/dist/node/es/src/document-model/gen/creators.js.map +0 -1
- package/dist/node/es/src/document-model/gen/document-model.js +0 -545
- package/dist/node/es/src/document-model/gen/document-model.js.map +0 -1
- package/dist/node/es/src/document-model/gen/header/creators.js +0 -41
- package/dist/node/es/src/document-model/gen/header/creators.js.map +0 -1
- package/dist/node/es/src/document-model/gen/header/object.js +0 -26
- package/dist/node/es/src/document-model/gen/header/object.js.map +0 -1
- package/dist/node/es/src/document-model/gen/module/creators.js +0 -36
- package/dist/node/es/src/document-model/gen/module/creators.js.map +0 -1
- package/dist/node/es/src/document-model/gen/module/object.js +0 -23
- package/dist/node/es/src/document-model/gen/module/object.js.map +0 -1
- package/dist/node/es/src/document-model/gen/object.js +0 -47
- package/dist/node/es/src/document-model/gen/object.js.map +0 -1
- package/dist/node/es/src/document-model/gen/operation/creators.js +0 -61
- package/dist/node/es/src/document-model/gen/operation/creators.js.map +0 -1
- package/dist/node/es/src/document-model/gen/operation/object.js +0 -38
- package/dist/node/es/src/document-model/gen/operation/object.js.map +0 -1
- package/dist/node/es/src/document-model/gen/operation-error/creators.js +0 -46
- package/dist/node/es/src/document-model/gen/operation-error/creators.js.map +0 -1
- package/dist/node/es/src/document-model/gen/operation-error/object.js +0 -29
- package/dist/node/es/src/document-model/gen/operation-error/object.js.map +0 -1
- package/dist/node/es/src/document-model/gen/operation-example/creators.js +0 -31
- package/dist/node/es/src/document-model/gen/operation-example/creators.js.map +0 -1
- package/dist/node/es/src/document-model/gen/operation-example/object.js +0 -20
- package/dist/node/es/src/document-model/gen/operation-example/object.js.map +0 -1
- package/dist/node/es/src/document-model/gen/reducer.js +0 -257
- package/dist/node/es/src/document-model/gen/reducer.js.map +0 -1
- package/dist/node/es/src/document-model/gen/schema/zod.js +0 -449
- package/dist/node/es/src/document-model/gen/schema/zod.js.map +0 -1
- package/dist/node/es/src/document-model/gen/state/creators.js +0 -41
- package/dist/node/es/src/document-model/gen/state/creators.js.map +0 -1
- package/dist/node/es/src/document-model/gen/state/object.js +0 -26
- package/dist/node/es/src/document-model/gen/state/object.js.map +0 -1
- package/dist/node/es/src/document-model/gen/utils.js +0 -75
- package/dist/node/es/src/document-model/gen/utils.js.map +0 -1
- package/dist/node/es/src/document-model/gen/versioning/creators.js +0 -35
- package/dist/node/es/src/document-model/gen/versioning/creators.js.map +0 -1
- package/dist/node/es/src/document-model/gen/versioning/object.js +0 -23
- package/dist/node/es/src/document-model/gen/versioning/object.js.map +0 -1
|
@@ -1,324 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
require("../../../node_modules/.pnpm/safe-stable-stringify@2.4.3/node_modules/safe-stable-stringify/esm/wrapper.js");
|
|
4
|
-
const index = require("../../../node_modules/.pnpm/safe-stable-stringify@2.4.3/node_modules/safe-stable-stringify/index.js");
|
|
5
|
-
var IntegrityIssueType = /* @__PURE__ */ ((IntegrityIssueType2) => {
|
|
6
|
-
IntegrityIssueType2["UNEXPECTED_INDEX"] = "UNEXPECTED_INDEX";
|
|
7
|
-
return IntegrityIssueType2;
|
|
8
|
-
})(IntegrityIssueType || {});
|
|
9
|
-
var IntegrityIssueSubType = /* @__PURE__ */ ((IntegrityIssueSubType2) => {
|
|
10
|
-
IntegrityIssueSubType2["DUPLICATED_INDEX"] = "DUPLICATED_INDEX";
|
|
11
|
-
IntegrityIssueSubType2["MISSING_INDEX"] = "MISSING_INDEX";
|
|
12
|
-
return IntegrityIssueSubType2;
|
|
13
|
-
})(IntegrityIssueSubType || {});
|
|
14
|
-
function checkCleanedOperationsIntegrity(sortedOperations) {
|
|
15
|
-
const result = [];
|
|
16
|
-
let currentIndex = -1;
|
|
17
|
-
for (const nextOperation of sortedOperations) {
|
|
18
|
-
const nextIndex = nextOperation.index - nextOperation.skip;
|
|
19
|
-
if (nextIndex !== currentIndex + 1) {
|
|
20
|
-
result.push({
|
|
21
|
-
operation: {
|
|
22
|
-
index: nextOperation.index,
|
|
23
|
-
skip: nextOperation.skip
|
|
24
|
-
},
|
|
25
|
-
issue: "UNEXPECTED_INDEX",
|
|
26
|
-
category: nextIndex > currentIndex + 1 ? "MISSING_INDEX" : "DUPLICATED_INDEX",
|
|
27
|
-
message: `Expected index ${currentIndex + 1} with skip 0 or equivalent, got index ${nextOperation.index} with skip ${nextOperation.skip}`
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
currentIndex = nextOperation.index;
|
|
31
|
-
}
|
|
32
|
-
return result;
|
|
33
|
-
}
|
|
34
|
-
function garbageCollect(sortedOperations) {
|
|
35
|
-
var _a, _b, _c;
|
|
36
|
-
const result = [];
|
|
37
|
-
let i = sortedOperations.length - 1;
|
|
38
|
-
while (i > -1) {
|
|
39
|
-
result.unshift(sortedOperations[i]);
|
|
40
|
-
const skipUntil = (((_a = sortedOperations[i]) == null ? void 0 : _a.index) || 0) - (((_b = sortedOperations[i]) == null ? void 0 : _b.skip) || 0) - 1;
|
|
41
|
-
let j = i - 1;
|
|
42
|
-
while (j > -1 && (((_c = sortedOperations[j]) == null ? void 0 : _c.index) || 0) > skipUntil) {
|
|
43
|
-
j--;
|
|
44
|
-
}
|
|
45
|
-
i = j;
|
|
46
|
-
}
|
|
47
|
-
return result;
|
|
48
|
-
}
|
|
49
|
-
function addUndo(sortedOperations) {
|
|
50
|
-
const operationsCopy = [...sortedOperations];
|
|
51
|
-
const latestOperation = operationsCopy[operationsCopy.length - 1];
|
|
52
|
-
if (!latestOperation)
|
|
53
|
-
return operationsCopy;
|
|
54
|
-
if (latestOperation.type === "NOOP") {
|
|
55
|
-
operationsCopy.push({
|
|
56
|
-
...latestOperation,
|
|
57
|
-
index: latestOperation.index,
|
|
58
|
-
type: "NOOP",
|
|
59
|
-
skip: nextSkipNumber(sortedOperations)
|
|
60
|
-
});
|
|
61
|
-
} else {
|
|
62
|
-
operationsCopy.push({
|
|
63
|
-
type: "NOOP",
|
|
64
|
-
index: latestOperation.index + 1,
|
|
65
|
-
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
66
|
-
input: {},
|
|
67
|
-
skip: 1,
|
|
68
|
-
scope: latestOperation.scope,
|
|
69
|
-
hash: latestOperation.hash
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
return operationsCopy;
|
|
73
|
-
}
|
|
74
|
-
function sortOperations(operations) {
|
|
75
|
-
return operations.slice().sort((a, b) => a.skip - b.skip).sort((a, b) => a.index - b.index);
|
|
76
|
-
}
|
|
77
|
-
const reshuffleByTimestamp = (startIndex, opsA, opsB) => {
|
|
78
|
-
return [...opsA, ...opsB].sort(
|
|
79
|
-
(a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime()
|
|
80
|
-
).map((op, i) => ({
|
|
81
|
-
...op,
|
|
82
|
-
index: startIndex.index + i,
|
|
83
|
-
skip: i === 0 ? startIndex.skip : 0
|
|
84
|
-
}));
|
|
85
|
-
};
|
|
86
|
-
const reshuffleByTimestampAndIndex = (startIndex, opsA, opsB) => {
|
|
87
|
-
return [...opsA, ...opsB].sort(
|
|
88
|
-
(a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime()
|
|
89
|
-
).sort((a, b) => a.index - b.index).map((op, i) => ({
|
|
90
|
-
...op,
|
|
91
|
-
index: startIndex.index + i,
|
|
92
|
-
skip: i === 0 ? startIndex.skip : 0
|
|
93
|
-
}));
|
|
94
|
-
};
|
|
95
|
-
function operationsAreEqual(op1, op2) {
|
|
96
|
-
return index.default(op1) === index.default(op2);
|
|
97
|
-
}
|
|
98
|
-
function attachBranch(trunk, newBranch) {
|
|
99
|
-
const trunkCopy = garbageCollect(sortOperations(trunk.slice()));
|
|
100
|
-
const newOperations = garbageCollect(sortOperations(newBranch.slice()));
|
|
101
|
-
if (trunkCopy.length < 1) {
|
|
102
|
-
return [newOperations, []];
|
|
103
|
-
}
|
|
104
|
-
const result = [];
|
|
105
|
-
let enteredBranch = false;
|
|
106
|
-
while (newOperations.length > 0) {
|
|
107
|
-
const newOperationCandidate = newOperations[0];
|
|
108
|
-
let nextTrunkOperation = trunkCopy.shift();
|
|
109
|
-
while (nextTrunkOperation && precedes(nextTrunkOperation, newOperationCandidate)) {
|
|
110
|
-
result.push(nextTrunkOperation);
|
|
111
|
-
nextTrunkOperation = trunkCopy.shift();
|
|
112
|
-
}
|
|
113
|
-
if (!nextTrunkOperation) {
|
|
114
|
-
enteredBranch = true;
|
|
115
|
-
} else if (!enteredBranch) {
|
|
116
|
-
if (operationsAreEqual(nextTrunkOperation, newOperationCandidate)) {
|
|
117
|
-
newOperations.shift();
|
|
118
|
-
result.push(nextTrunkOperation);
|
|
119
|
-
} else {
|
|
120
|
-
trunkCopy.unshift(nextTrunkOperation);
|
|
121
|
-
enteredBranch = true;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
if (enteredBranch) {
|
|
125
|
-
let nextAppend = newOperations.shift();
|
|
126
|
-
while (nextAppend) {
|
|
127
|
-
result.push(nextAppend);
|
|
128
|
-
nextAppend = newOperations.shift();
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
if (!enteredBranch) {
|
|
133
|
-
let nextAppend = trunkCopy.shift();
|
|
134
|
-
while (nextAppend) {
|
|
135
|
-
result.push(nextAppend);
|
|
136
|
-
nextAppend = trunkCopy.shift();
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
return [garbageCollect(result), trunkCopy];
|
|
140
|
-
}
|
|
141
|
-
function precedes(op1, op2) {
|
|
142
|
-
return op1.index < op2.index || op1.index === op2.index && op1.skip < op2.skip;
|
|
143
|
-
}
|
|
144
|
-
function split(sortedTargetOperations, sortedMergeOperations) {
|
|
145
|
-
const commonOperations = [];
|
|
146
|
-
const targetDiffOperations = [];
|
|
147
|
-
const mergeDiffOperations = [];
|
|
148
|
-
const maxLength = Math.max(
|
|
149
|
-
sortedTargetOperations.length,
|
|
150
|
-
sortedMergeOperations.length
|
|
151
|
-
);
|
|
152
|
-
let splitHappened = false;
|
|
153
|
-
for (let i = 0; i < maxLength; i++) {
|
|
154
|
-
const targetOperation = sortedTargetOperations[i];
|
|
155
|
-
const mergeOperation = sortedMergeOperations[i];
|
|
156
|
-
if (targetOperation && mergeOperation) {
|
|
157
|
-
if (!splitHappened && operationsAreEqual(targetOperation, mergeOperation)) {
|
|
158
|
-
commonOperations.push(targetOperation);
|
|
159
|
-
} else {
|
|
160
|
-
splitHappened = true;
|
|
161
|
-
targetDiffOperations.push(targetOperation);
|
|
162
|
-
mergeDiffOperations.push(mergeOperation);
|
|
163
|
-
}
|
|
164
|
-
} else if (targetOperation) {
|
|
165
|
-
targetDiffOperations.push(targetOperation);
|
|
166
|
-
} else if (mergeOperation) {
|
|
167
|
-
mergeDiffOperations.push(mergeOperation);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
return [commonOperations, targetDiffOperations, mergeDiffOperations];
|
|
171
|
-
}
|
|
172
|
-
function merge(sortedTargetOperations, sortedMergeOperations, reshuffle) {
|
|
173
|
-
const [_commonOperations, _targetOperations, _mergeOperations] = split(
|
|
174
|
-
garbageCollect(sortedTargetOperations),
|
|
175
|
-
garbageCollect(sortedMergeOperations)
|
|
176
|
-
);
|
|
177
|
-
const maxCommonIndex = getMaxIndex(_commonOperations);
|
|
178
|
-
const nextIndex = 1 + Math.max(
|
|
179
|
-
maxCommonIndex,
|
|
180
|
-
getMaxIndex(_targetOperations),
|
|
181
|
-
getMaxIndex(_mergeOperations)
|
|
182
|
-
);
|
|
183
|
-
const newOperationHistory = reshuffle(
|
|
184
|
-
{
|
|
185
|
-
index: nextIndex,
|
|
186
|
-
skip: nextIndex - (maxCommonIndex + 1)
|
|
187
|
-
},
|
|
188
|
-
_targetOperations,
|
|
189
|
-
_mergeOperations
|
|
190
|
-
);
|
|
191
|
-
return _commonOperations.concat(newOperationHistory);
|
|
192
|
-
}
|
|
193
|
-
function getMaxIndex(sortedOperations) {
|
|
194
|
-
const lastElement = sortedOperations[sortedOperations.length - 1];
|
|
195
|
-
if (!lastElement) {
|
|
196
|
-
return -1;
|
|
197
|
-
}
|
|
198
|
-
return lastElement.index;
|
|
199
|
-
}
|
|
200
|
-
function nextSkipNumber(sortedOperations) {
|
|
201
|
-
var _a, _b, _c;
|
|
202
|
-
if (sortedOperations.length < 1) {
|
|
203
|
-
return -1;
|
|
204
|
-
}
|
|
205
|
-
const cleanedOperations = garbageCollect(sortedOperations);
|
|
206
|
-
let nextSkip = (((_a = cleanedOperations[cleanedOperations.length - 1]) == null ? void 0 : _a.skip) || 0) + 1;
|
|
207
|
-
if (cleanedOperations.length > 1) {
|
|
208
|
-
nextSkip += ((_b = cleanedOperations[cleanedOperations.length - 2]) == null ? void 0 : _b.skip) || 0;
|
|
209
|
-
}
|
|
210
|
-
return (((_c = cleanedOperations[cleanedOperations.length - 1]) == null ? void 0 : _c.index) || -1) < nextSkip ? -1 : nextSkip;
|
|
211
|
-
}
|
|
212
|
-
const checkOperationsIntegrity = (operations) => {
|
|
213
|
-
return checkCleanedOperationsIntegrity(
|
|
214
|
-
garbageCollect(sortOperations(operations))
|
|
215
|
-
);
|
|
216
|
-
};
|
|
217
|
-
const groupOperationsByScope = (operations) => {
|
|
218
|
-
const result = operations.reduce((acc, operation) => {
|
|
219
|
-
var _a;
|
|
220
|
-
if (!acc[operation.scope]) {
|
|
221
|
-
acc[operation.scope] = [];
|
|
222
|
-
}
|
|
223
|
-
(_a = acc[operation.scope]) == null ? void 0 : _a.push(operation);
|
|
224
|
-
return acc;
|
|
225
|
-
}, {});
|
|
226
|
-
return result;
|
|
227
|
-
};
|
|
228
|
-
const prepareOperations = (operationsHistory, newOperations) => {
|
|
229
|
-
var _a;
|
|
230
|
-
const result = {
|
|
231
|
-
integrityIssues: [],
|
|
232
|
-
validOperations: [],
|
|
233
|
-
invalidOperations: [],
|
|
234
|
-
duplicatedOperations: []
|
|
235
|
-
};
|
|
236
|
-
const sortedOperationsHistory = sortOperations(operationsHistory);
|
|
237
|
-
const sortedOperations = sortOperations(newOperations);
|
|
238
|
-
const integrityErrors = checkCleanedOperationsIntegrity([
|
|
239
|
-
...sortedOperationsHistory,
|
|
240
|
-
...sortedOperations
|
|
241
|
-
]);
|
|
242
|
-
const missingIndexErrors = integrityErrors.filter(
|
|
243
|
-
(integrityIssue) => integrityIssue.category === "MISSING_INDEX"
|
|
244
|
-
/* MISSING_INDEX */
|
|
245
|
-
);
|
|
246
|
-
const firstMissingIndexOperation = (_a = [...missingIndexErrors].sort((a, b) => b.operation.index - a.operation.index).pop()) == null ? void 0 : _a.operation;
|
|
247
|
-
for (const newOperation of sortedOperations) {
|
|
248
|
-
if (firstMissingIndexOperation && newOperation.index >= firstMissingIndexOperation.index) {
|
|
249
|
-
result.invalidOperations.push(newOperation);
|
|
250
|
-
continue;
|
|
251
|
-
}
|
|
252
|
-
const isDuplicatedOperation = integrityErrors.some((integrityError) => {
|
|
253
|
-
return integrityError.operation.index === newOperation.index && integrityError.operation.skip === newOperation.skip && integrityError.category === "DUPLICATED_INDEX";
|
|
254
|
-
});
|
|
255
|
-
if (isDuplicatedOperation) {
|
|
256
|
-
result.duplicatedOperations.push(newOperation);
|
|
257
|
-
continue;
|
|
258
|
-
}
|
|
259
|
-
result.validOperations.push(newOperation);
|
|
260
|
-
}
|
|
261
|
-
result.integrityIssues.push(...integrityErrors);
|
|
262
|
-
return result;
|
|
263
|
-
};
|
|
264
|
-
function removeExistingOperations(newOperations, operationsHistory) {
|
|
265
|
-
return newOperations.filter((newOperation) => {
|
|
266
|
-
return !operationsHistory.some((historyOperation) => {
|
|
267
|
-
return newOperation.type === "NOOP" && newOperation.skip === 0 && newOperation.index === historyOperation.index || newOperation.index === historyOperation.index && newOperation.skip === historyOperation.skip && newOperation.scope === historyOperation.scope && newOperation.hash === historyOperation.hash && newOperation.type === historyOperation.type;
|
|
268
|
-
});
|
|
269
|
-
});
|
|
270
|
-
}
|
|
271
|
-
function skipHeaderOperations(operations, skipHeaderOperation) {
|
|
272
|
-
const [lastOperation] = sortOperations(operations).slice(-1);
|
|
273
|
-
const lastIndex = (lastOperation == null ? void 0 : lastOperation.index) ?? -1;
|
|
274
|
-
const nextIndex = lastIndex + 1;
|
|
275
|
-
const skipOperationIndex = {
|
|
276
|
-
...skipHeaderOperation,
|
|
277
|
-
index: skipHeaderOperation.index ?? nextIndex
|
|
278
|
-
};
|
|
279
|
-
if (skipOperationIndex.index < lastIndex) {
|
|
280
|
-
throw new Error(
|
|
281
|
-
`The skip header operation index must be greater than or equal to ${lastIndex}`
|
|
282
|
-
);
|
|
283
|
-
}
|
|
284
|
-
const clearedOperations = garbageCollect(
|
|
285
|
-
sortOperations([...operations, skipOperationIndex])
|
|
286
|
-
);
|
|
287
|
-
return (clearedOperations || []).slice(0, -1);
|
|
288
|
-
}
|
|
289
|
-
function grabageCollectDocumentOperations(documentOperations) {
|
|
290
|
-
const clearedOperations = Object.entries(documentOperations).reduce(
|
|
291
|
-
(acc, entry) => {
|
|
292
|
-
const [scope, ops] = entry;
|
|
293
|
-
return {
|
|
294
|
-
...acc,
|
|
295
|
-
[scope]: garbageCollect(sortOperations(ops))
|
|
296
|
-
};
|
|
297
|
-
},
|
|
298
|
-
{}
|
|
299
|
-
);
|
|
300
|
-
return {
|
|
301
|
-
...clearedOperations
|
|
302
|
-
};
|
|
303
|
-
}
|
|
304
|
-
exports.IntegrityIssueSubType = IntegrityIssueSubType;
|
|
305
|
-
exports.IntegrityIssueType = IntegrityIssueType;
|
|
306
|
-
exports.addUndo = addUndo;
|
|
307
|
-
exports.attachBranch = attachBranch;
|
|
308
|
-
exports.checkCleanedOperationsIntegrity = checkCleanedOperationsIntegrity;
|
|
309
|
-
exports.checkOperationsIntegrity = checkOperationsIntegrity;
|
|
310
|
-
exports.garbageCollect = garbageCollect;
|
|
311
|
-
exports.grabageCollectDocumentOperations = grabageCollectDocumentOperations;
|
|
312
|
-
exports.groupOperationsByScope = groupOperationsByScope;
|
|
313
|
-
exports.merge = merge;
|
|
314
|
-
exports.nextSkipNumber = nextSkipNumber;
|
|
315
|
-
exports.operationsAreEqual = operationsAreEqual;
|
|
316
|
-
exports.precedes = precedes;
|
|
317
|
-
exports.prepareOperations = prepareOperations;
|
|
318
|
-
exports.removeExistingOperations = removeExistingOperations;
|
|
319
|
-
exports.reshuffleByTimestamp = reshuffleByTimestamp;
|
|
320
|
-
exports.reshuffleByTimestampAndIndex = reshuffleByTimestampAndIndex;
|
|
321
|
-
exports.skipHeaderOperations = skipHeaderOperations;
|
|
322
|
-
exports.sortOperations = sortOperations;
|
|
323
|
-
exports.split = split;
|
|
324
|
-
//# sourceMappingURL=document-helpers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"document-helpers.js","sources":["../../../../../../src/document/utils/document-helpers.ts"],"sourcesContent":["import {\n Operation,\n OperationScope,\n Action,\n DocumentOperations,\n} from '../types';\nimport stringify from 'safe-stable-stringify';\n\nexport type OperationIndex = {\n index: number;\n skip: number;\n};\n\nexport enum IntegrityIssueType {\n UNEXPECTED_INDEX = 'UNEXPECTED_INDEX',\n}\n\nexport enum IntegrityIssueSubType {\n DUPLICATED_INDEX = 'DUPLICATED_INDEX',\n MISSING_INDEX = 'MISSING_INDEX',\n}\n\ntype IntegrityIssue = {\n operation: OperationIndex;\n issue: IntegrityIssueType;\n category: IntegrityIssueSubType;\n message: string;\n};\n\ntype Reshuffle = (\n startIndex: OperationIndex,\n opsA: Operation[],\n opsB: Operation[],\n) => Operation[];\n\nexport function checkCleanedOperationsIntegrity(\n sortedOperations: Operation[],\n): IntegrityIssue[] {\n const result: IntegrityIssue[] = [];\n\n // 1:1 1\n // 0:0 0 -> 1:0 1 -> 2:0 -> 3:0 -> 4:0 -> 5:0\n // 0:0 0 -> 2:1 1 -> 3:0 -> 4:0 -> 5:0\n // 0:0 0 -> 3:2 1 -> 4:0 -> 5:0\n // 0:0 0 -> 3:2 1 -> 5:1\n\n // 0:3 (expected 0, got -3)\n // 1:2 (expected 0, got -1)\n // 0:0 -> 1:1\n // 0:0 -> 2:2\n // 0:0 -> 3:2 -> 5:2\n\n let currentIndex = -1;\n for (const nextOperation of sortedOperations) {\n const nextIndex = nextOperation.index - nextOperation.skip;\n\n if (nextIndex !== currentIndex + 1) {\n result.push({\n operation: {\n index: nextOperation.index,\n skip: nextOperation.skip,\n },\n issue: IntegrityIssueType.UNEXPECTED_INDEX,\n category:\n nextIndex > currentIndex + 1\n ? IntegrityIssueSubType.MISSING_INDEX\n : IntegrityIssueSubType.DUPLICATED_INDEX,\n message: `Expected index ${currentIndex + 1} with skip 0 or equivalent, got index ${nextOperation.index} with skip ${nextOperation.skip}`,\n });\n }\n\n currentIndex = nextOperation.index;\n }\n\n return result;\n}\n\n// [] -> []\n// [0:0] -> [0:0]\n\n// 0:0 1:0 2:0 => 0:0 1:0 2:0, removals 0, no issues\n// 0:0 1:1 2:0 => 1:1 2:0, removals 1, no issues\n\n// 0:0 1:1 2:0 3:1 => 1:1 3:1, removals 2, no issues\n// 0:0 1:1 2:0 3:3 => 3:3\n\n// 1:1 2:0 3:0 => 1:1 2:0 3:0, removals 0, no issues\n// 1:0 0:0 2:0 => 2:0, removals 2, issues [UNEXPECTED_INDEX, INDEX_OUT_OF_ORDER]\n// 0:0 1:0 2:0 => 0:0 1:0 2:0, removals 0, no issues\n// 0:0 1:0 2:0 => 0:0 1:0 2:0, removals 0, no issues\n// 0:0 1:0 2:0 => 0:0 1:0 2:0, removals 0, no issues\n\nexport function garbageCollect<A extends OperationIndex>(\n sortedOperations: A[],\n): A[] {\n const result: A[] = [];\n\n let i = sortedOperations.length - 1;\n\n while (i > -1) {\n result.unshift(sortedOperations[i]);\n const skipUntil =\n (sortedOperations[i]?.index || 0) -\n (sortedOperations[i]?.skip || 0) -\n 1;\n\n let j = i - 1;\n while (j > -1 && (sortedOperations[j]?.index || 0) > skipUntil) {\n j--;\n }\n\n i = j;\n }\n\n return result;\n}\n\nexport function addUndo(sortedOperations: Operation[]): Operation[] {\n const operationsCopy = [...sortedOperations];\n const latestOperation = operationsCopy[operationsCopy.length - 1];\n\n if (!latestOperation) return operationsCopy;\n\n if (latestOperation.type === 'NOOP') {\n operationsCopy.push({\n ...latestOperation,\n index: latestOperation.index,\n type: 'NOOP',\n skip: nextSkipNumber(sortedOperations),\n });\n } else {\n operationsCopy.push({\n type: 'NOOP',\n index: latestOperation.index + 1,\n timestamp: new Date().toISOString(),\n input: {},\n skip: 1,\n scope: latestOperation.scope,\n hash: latestOperation.hash,\n });\n }\n\n return operationsCopy;\n}\n\n// [0:0 2:0 1:0 3:3 3:1] => [0:0 1:0 2:0 3:1 3:3]\n// Sort by index _and_ skip number\nexport function sortOperations<A extends OperationIndex>(operations: A[]): A[] {\n return operations\n .slice()\n .sort((a, b) => a.skip - b.skip)\n .sort((a, b) => a.index - b.index);\n}\n\n// [0:0, 1:0, 2:0, A3:0, A4:0, A5:0] + [0:0, 1:0, 2:0, B3:0, B4:2, B5:0]\n// GC => [0:0, 1:0, 2:0, A3:0, A4:0, A5:0] + [0:0, 1:0, B4:2, B5:0]\n// Split => [0:0, 1:0] + [2:0, A3:0, A4:0, A5:0] + [B4:2, B5:0]\n// Reshuffle(6:4) => [6:4, 7:0, 8:0, 9:0, 10:0, 11:0]\n// merge => [0:0, 1:0, 6:4, 7:0, 8:0, 9:0, 10:0, 11:0]\nexport const reshuffleByTimestamp: Reshuffle = (startIndex, opsA, opsB) => {\n return [...opsA, ...opsB]\n .sort(\n (a, b) =>\n new Date(a.timestamp).getTime() -\n new Date(b.timestamp).getTime(),\n )\n .map((op, i) => ({\n ...op,\n index: startIndex.index + i,\n skip: i === 0 ? startIndex.skip : 0,\n }));\n};\n\nexport const reshuffleByTimestampAndIndex: Reshuffle = (\n startIndex,\n opsA,\n opsB,\n) => {\n return [...opsA, ...opsB]\n .sort(\n (a, b) =>\n new Date(a.timestamp).getTime() -\n new Date(b.timestamp).getTime(),\n )\n .sort((a, b) => a.index - b.index)\n .map((op, i) => ({\n ...op,\n index: startIndex.index + i,\n skip: i === 0 ? startIndex.skip : 0,\n }));\n};\n\n// TODO: implement better operation equality function\nexport function operationsAreEqual(op1: Operation, op2: Operation) {\n return stringify(op1) === stringify(op2);\n}\n\n// [T0:0 T1:0 T2:0 T3:0] + [B4:0 B5:0] = [T0:0 T1:0 T2:0 T3:0 B4:0 B5:0]\n// [T0:0 T1:0 T2:0 T3:0] + [B3:0 B4:0] = [T0:0 T1:0 T2:0 B3:0 B4:0]\n// [T0:0 T1:0 T2:0 T3:0] + [B2:0 B3:0] = [T0:0 T1:0 B2:0 B3:0]\n\n// [T0:0 T1:0 T2:0 T3:0] + [B4:0 B4:2] = [T0:0 T1:0 T2:0 T3:0 B4:0 B4:2]\n// [T0:0 T1:0 T2:0 T3:0] + [B3:0 B3:2] = [T0:0 T1:0 T2:0 B3:0 B3:2]\n// [T0:0 T1:0 T2:0 T3:0] + [B2:3 B3:0] = [T0:0 T1:0 B2:3 B3:0]\n\nexport function attachBranch(\n trunk: Operation[],\n newBranch: Operation[],\n): [Operation[], Operation[]] {\n const trunkCopy = garbageCollect(sortOperations(trunk.slice()));\n const newOperations = garbageCollect(sortOperations(newBranch.slice()));\n if (trunkCopy.length < 1) {\n return [newOperations, []];\n }\n\n const result: Operation[] = [];\n let enteredBranch = false;\n\n while (newOperations.length > 0) {\n const newOperationCandidate = newOperations[0];\n\n let nextTrunkOperation = trunkCopy.shift();\n while (\n nextTrunkOperation &&\n precedes(nextTrunkOperation, newOperationCandidate)\n ) {\n result.push(nextTrunkOperation);\n nextTrunkOperation = trunkCopy.shift();\n }\n\n if (!nextTrunkOperation) {\n enteredBranch = true;\n } else if (!enteredBranch) {\n if (operationsAreEqual(nextTrunkOperation, newOperationCandidate)) {\n newOperations.shift();\n result.push(nextTrunkOperation);\n } else {\n trunkCopy.unshift(nextTrunkOperation);\n enteredBranch = true;\n }\n }\n\n if (enteredBranch) {\n let nextAppend = newOperations.shift();\n while (nextAppend) {\n result.push(nextAppend);\n nextAppend = newOperations.shift();\n }\n }\n }\n\n if (!enteredBranch) {\n let nextAppend = trunkCopy.shift();\n while (nextAppend) {\n result.push(nextAppend);\n nextAppend = trunkCopy.shift();\n }\n }\n\n return [garbageCollect(result), trunkCopy];\n}\n\nexport function precedes(op1: Operation, op2: Operation) {\n return (\n op1.index < op2.index ||\n (op1.index === op2.index && op1.skip < op2.skip)\n );\n}\n\nexport function split(\n sortedTargetOperations: Operation[],\n sortedMergeOperations: Operation[],\n): [Operation[], Operation[], Operation[]] {\n const commonOperations: Operation[] = [];\n const targetDiffOperations: Operation[] = [];\n const mergeDiffOperations: Operation[] = [];\n\n // get bigger array length\n const maxLength = Math.max(\n sortedTargetOperations.length,\n sortedMergeOperations.length,\n );\n\n let splitHappened = false;\n for (let i = 0; i < maxLength; i++) {\n const targetOperation = sortedTargetOperations[i];\n const mergeOperation = sortedMergeOperations[i];\n\n if (targetOperation && mergeOperation) {\n if (\n !splitHappened &&\n operationsAreEqual(targetOperation, mergeOperation)\n ) {\n commonOperations.push(targetOperation);\n } else {\n splitHappened = true;\n targetDiffOperations.push(targetOperation);\n mergeDiffOperations.push(mergeOperation);\n }\n } else if (targetOperation) {\n targetDiffOperations.push(targetOperation);\n } else if (mergeOperation) {\n mergeDiffOperations.push(mergeOperation);\n }\n }\n\n return [commonOperations, targetDiffOperations, mergeDiffOperations];\n}\n\n// [0:0, 1:0, 2:0, A3:0, A4:0, A5:0] + [0:0, 1:0, 2:0, B3:0, B4:2, B5:0]\n// GC => [0:0, 1:0, 2:0, A3:0, A4:0, A5:0] + [0:0, 1:0, B4:2, B5:0]\n// Split => [0:0, 1:0] + [2:0, A3:0, A4:0, A5:0] + [B4:2, B5:0]\n// Reshuffle(6:4) => [6:4, 7:0, 8:0, 9:0, 10:0, 11:0]\n// merge => [0:0, 1:0, 6:4, 7:0, 8:0, 9:0, 10:0, 11:0]\nexport function merge(\n sortedTargetOperations: Operation[],\n sortedMergeOperations: Operation[],\n reshuffle: Reshuffle,\n): Operation[] {\n const [_commonOperations, _targetOperations, _mergeOperations] = split(\n garbageCollect(sortedTargetOperations),\n garbageCollect(sortedMergeOperations),\n );\n\n const maxCommonIndex = getMaxIndex(_commonOperations);\n const nextIndex =\n 1 +\n Math.max(\n maxCommonIndex,\n getMaxIndex(_targetOperations),\n getMaxIndex(_mergeOperations),\n );\n\n const newOperationHistory = reshuffle(\n {\n index: nextIndex,\n skip: nextIndex - (maxCommonIndex + 1),\n },\n _targetOperations,\n _mergeOperations,\n );\n\n return _commonOperations.concat(newOperationHistory);\n}\n\nfunction getMaxIndex(sortedOperations: Operation[]) {\n const lastElement = sortedOperations[sortedOperations.length - 1];\n if (!lastElement) {\n return -1;\n }\n\n return lastElement.index;\n}\n\n// [] => -1\n// [0:0] => -1\n// [0:0 1:0] => 1\n// [0:0 1:1] => -1\n// [1:1] => -1\n// [0:0 1:0 2:0] => 1\n// [0:0 1:0 2:0 2:1] => 2\n// [0:0 1:0 2:0 2:1 2:2] => -1\n// [0:0 1:1 2:0] => 2\n// [0:0 1:1 2:2] => -1\n// [0:0 1:1 2:0 3:0] => 1\n// [0:0 1:1 2:0 3:1] => 3\n// [0:0 1:1 2:0 3:3] => -1\n// [50:50 100:50 150:50 151:0 152:0 153:0 154:3] => 53\n\nexport function nextSkipNumber<A extends OperationIndex>(\n sortedOperations: A[],\n): number {\n if (sortedOperations.length < 1) {\n return -1;\n }\n\n const cleanedOperations = garbageCollect(sortedOperations);\n\n let nextSkip =\n (cleanedOperations[cleanedOperations.length - 1]?.skip || 0) + 1;\n\n if (cleanedOperations.length > 1) {\n nextSkip += cleanedOperations[cleanedOperations.length - 2]?.skip || 0;\n }\n\n return (cleanedOperations[cleanedOperations.length - 1]?.index || -1) <\n nextSkip\n ? -1\n : nextSkip;\n}\n\nexport const checkOperationsIntegrity = (\n operations: Operation[],\n): IntegrityIssue[] => {\n return checkCleanedOperationsIntegrity(\n garbageCollect(sortOperations(operations)),\n );\n};\n\nexport type OperationsByScope = Partial<Record<OperationScope, Operation[]>>;\n\nexport const groupOperationsByScope = (\n operations: Operation[],\n): OperationsByScope => {\n const result = operations.reduce<OperationsByScope>((acc, operation) => {\n if (!acc[operation.scope]) {\n acc[operation.scope] = [];\n }\n\n acc[operation.scope]?.push(operation);\n\n return acc;\n }, {});\n\n return result;\n};\n\ntype PrepareOperationsResult = {\n validOperations: Operation[];\n invalidOperations: Operation[];\n duplicatedOperations: Operation[];\n integrityIssues: IntegrityIssue[];\n};\n\nexport const prepareOperations = (\n operationsHistory: Operation[],\n newOperations: Operation[],\n): PrepareOperationsResult => {\n const result: PrepareOperationsResult = {\n integrityIssues: [],\n validOperations: [],\n invalidOperations: [],\n duplicatedOperations: [],\n };\n\n const sortedOperationsHistory = sortOperations(operationsHistory);\n const sortedOperations = sortOperations(newOperations);\n\n const integrityErrors = checkCleanedOperationsIntegrity([\n ...sortedOperationsHistory,\n ...sortedOperations,\n ]);\n\n const missingIndexErrors = integrityErrors.filter(\n integrityIssue =>\n integrityIssue.category === IntegrityIssueSubType.MISSING_INDEX,\n );\n\n // get the integrity error with the lowest index operation\n const firstMissingIndexOperation = [...missingIndexErrors]\n .sort((a, b) => b.operation.index - a.operation.index)\n .pop()?.operation;\n\n for (const newOperation of sortedOperations) {\n // Operation is missing index or it follows an operation that is missing index\n if (\n firstMissingIndexOperation &&\n newOperation.index >= firstMissingIndexOperation.index\n ) {\n result.invalidOperations.push(newOperation);\n continue;\n }\n\n // check if operation is duplicated\n const isDuplicatedOperation = integrityErrors.some(integrityError => {\n return (\n integrityError.operation.index === newOperation.index &&\n integrityError.operation.skip === newOperation.skip &&\n integrityError.category ===\n IntegrityIssueSubType.DUPLICATED_INDEX\n );\n });\n\n // add to duplicated operations if it is duplicated\n if (isDuplicatedOperation) {\n result.duplicatedOperations.push(newOperation);\n continue;\n }\n\n // otherwise, add to valid operations\n result.validOperations.push(newOperation);\n }\n\n result.integrityIssues.push(...integrityErrors);\n return result;\n};\n\nexport function removeExistingOperations(\n newOperations: Operation[],\n operationsHistory: Operation[],\n): Operation[] {\n return newOperations.filter(newOperation => {\n return !operationsHistory.some(historyOperation => {\n return (\n (newOperation.type === 'NOOP' &&\n newOperation.skip === 0 &&\n newOperation.index === historyOperation.index) ||\n (newOperation.index === historyOperation.index &&\n newOperation.skip === historyOperation.skip &&\n newOperation.scope === historyOperation.scope &&\n newOperation.hash === historyOperation.hash &&\n newOperation.type === historyOperation.type)\n );\n });\n });\n}\n\nexport type SkipHeaderOperationIndex = Partial<Pick<OperationIndex, 'index'>> &\n Pick<OperationIndex, 'skip'>;\n\n/**\n * Skips header operations and returns the remaining operations.\n *\n * @param operations - The array of operations.\n * @param skipHeaderOperation - The skip header operation index.\n * @returns The remaining operations after skipping header operations.\n */\nexport function skipHeaderOperations<A extends OperationIndex>(\n operations: A[],\n skipHeaderOperation: SkipHeaderOperationIndex,\n): A[] {\n const [lastOperation] = sortOperations(operations).slice(-1);\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const lastIndex = lastOperation?.index ?? -1;\n const nextIndex = lastIndex + 1;\n\n const skipOperationIndex = {\n ...skipHeaderOperation,\n index: skipHeaderOperation.index ?? nextIndex,\n };\n\n if (skipOperationIndex.index < lastIndex) {\n throw new Error(\n `The skip header operation index must be greater than or equal to ${lastIndex}`,\n );\n }\n\n const clearedOperations = garbageCollect(\n sortOperations([...operations, skipOperationIndex]),\n );\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n return (clearedOperations || []).slice(0, -1) as A[];\n}\n\nexport function grabageCollectDocumentOperations<A extends Action>(\n documentOperations: DocumentOperations<A>,\n): DocumentOperations<A> {\n const clearedOperations = Object.entries(documentOperations).reduce(\n (acc, entry) => {\n const [scope, ops] = entry;\n\n return {\n ...acc,\n [scope as OperationScope]: garbageCollect(sortOperations(ops)),\n };\n },\n {} as DocumentOperations<A>,\n );\n\n return {\n ...clearedOperations,\n };\n}\n"],"names":["IntegrityIssueType","IntegrityIssueSubType","stringify"],"mappings":";;;;AAaY,IAAA,uCAAAA,wBAAL;AACHA,sBAAA,kBAAmB,IAAA;AADXA,SAAAA;AAAA,GAAA,sBAAA,CAAA,CAAA;AAIA,IAAA,0CAAAC,2BAAL;AACHA,yBAAA,kBAAmB,IAAA;AACnBA,yBAAA,eAAgB,IAAA;AAFRA,SAAAA;AAAA,GAAA,yBAAA,CAAA,CAAA;AAkBL,SAAS,gCACZ,kBACgB;AAChB,QAAM,SAA2B,CAAA;AAcjC,MAAI,eAAe;AACnB,aAAW,iBAAiB,kBAAkB;AACpC,UAAA,YAAY,cAAc,QAAQ,cAAc;AAElD,QAAA,cAAc,eAAe,GAAG;AAChC,aAAO,KAAK;AAAA,QACR,WAAW;AAAA,UACP,OAAO,cAAc;AAAA,UACrB,MAAM,cAAc;AAAA,QACxB;AAAA,QACA,OAAO;AAAA,QACP,UACI,YAAY,eAAe,IACrB,kBACA;AAAA,QACV,SAAS,kBAAkB,eAAe,CAAC,yCAAyC,cAAc,KAAK,cAAc,cAAc,IAAI;AAAA,MAAA,CAC1I;AAAA,IACL;AAEA,mBAAe,cAAc;AAAA,EACjC;AAEO,SAAA;AACX;AAiBO,SAAS,eACZ,kBACG;;AACH,QAAM,SAAc,CAAA;AAEhB,MAAA,IAAI,iBAAiB,SAAS;AAElC,SAAO,IAAI,IAAI;AACJ,WAAA,QAAQ,iBAAiB,CAAC,CAAC;AAC5B,UAAA,eACD,sBAAiB,CAAC,MAAlB,mBAAqB,UAAS,QAC9B,sBAAiB,CAAC,MAAlB,mBAAqB,SAAQ,KAC9B;AAEJ,QAAI,IAAI,IAAI;AACZ,WAAO,IAAI,SAAO,sBAAiB,CAAC,MAAlB,mBAAqB,UAAS,KAAK,WAAW;AAC5D;AAAA,IACJ;AAEI,QAAA;AAAA,EACR;AAEO,SAAA;AACX;AAEO,SAAS,QAAQ,kBAA4C;AAC1D,QAAA,iBAAiB,CAAC,GAAG,gBAAgB;AAC3C,QAAM,kBAAkB,eAAe,eAAe,SAAS,CAAC;AAEhE,MAAI,CAAC;AAAwB,WAAA;AAEzB,MAAA,gBAAgB,SAAS,QAAQ;AACjC,mBAAe,KAAK;AAAA,MAChB,GAAG;AAAA,MACH,OAAO,gBAAgB;AAAA,MACvB,MAAM;AAAA,MACN,MAAM,eAAe,gBAAgB;AAAA,IAAA,CACxC;AAAA,EAAA,OACE;AACH,mBAAe,KAAK;AAAA,MAChB,MAAM;AAAA,MACN,OAAO,gBAAgB,QAAQ;AAAA,MAC/B,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,MAClC,OAAO,CAAC;AAAA,MACR,MAAM;AAAA,MACN,OAAO,gBAAgB;AAAA,MACvB,MAAM,gBAAgB;AAAA,IAAA,CACzB;AAAA,EACL;AAEO,SAAA;AACX;AAIO,SAAS,eAAyC,YAAsB;AAC3E,SAAO,WACF,MAAM,EACN,KAAK,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,IAAI,EAC9B,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AACzC;AAOO,MAAM,uBAAkC,CAAC,YAAY,MAAM,SAAS;AACvE,SAAO,CAAC,GAAG,MAAM,GAAG,IAAI,EACnB;AAAA,IACG,CAAC,GAAG,MACA,IAAI,KAAK,EAAE,SAAS,EAAE,QAAA,IACtB,IAAI,KAAK,EAAE,SAAS,EAAE,QAAQ;AAAA,EAAA,EAErC,IAAI,CAAC,IAAI,OAAO;AAAA,IACb,GAAG;AAAA,IACH,OAAO,WAAW,QAAQ;AAAA,IAC1B,MAAM,MAAM,IAAI,WAAW,OAAO;AAAA,EACpC,EAAA;AACV;AAEO,MAAM,+BAA0C,CACnD,YACA,MACA,SACC;AACD,SAAO,CAAC,GAAG,MAAM,GAAG,IAAI,EACnB;AAAA,IACG,CAAC,GAAG,MACA,IAAI,KAAK,EAAE,SAAS,EAAE,QAAA,IACtB,IAAI,KAAK,EAAE,SAAS,EAAE,QAAQ;AAAA,EAErC,EAAA,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK,EAChC,IAAI,CAAC,IAAI,OAAO;AAAA,IACb,GAAG;AAAA,IACH,OAAO,WAAW,QAAQ;AAAA,IAC1B,MAAM,MAAM,IAAI,WAAW,OAAO;AAAA,EACpC,EAAA;AACV;AAGgB,SAAA,mBAAmB,KAAgB,KAAgB;AAC/D,SAAOC,MAAU,QAAA,GAAG,MAAMA,MAAA,QAAU,GAAG;AAC3C;AAUgB,SAAA,aACZ,OACA,WAC0B;AAC1B,QAAM,YAAY,eAAe,eAAe,MAAM,MAAO,CAAA,CAAC;AAC9D,QAAM,gBAAgB,eAAe,eAAe,UAAU,MAAO,CAAA,CAAC;AAClE,MAAA,UAAU,SAAS,GAAG;AACf,WAAA,CAAC,eAAe,CAAA,CAAE;AAAA,EAC7B;AAEA,QAAM,SAAsB,CAAA;AAC5B,MAAI,gBAAgB;AAEb,SAAA,cAAc,SAAS,GAAG;AACvB,UAAA,wBAAwB,cAAc,CAAC;AAEzC,QAAA,qBAAqB,UAAU;AACnC,WACI,sBACA,SAAS,oBAAoB,qBAAqB,GACpD;AACE,aAAO,KAAK,kBAAkB;AAC9B,2BAAqB,UAAU;IACnC;AAEA,QAAI,CAAC,oBAAoB;AACL,sBAAA;AAAA,IAAA,WACT,CAAC,eAAe;AACnB,UAAA,mBAAmB,oBAAoB,qBAAqB,GAAG;AAC/D,sBAAc,MAAM;AACpB,eAAO,KAAK,kBAAkB;AAAA,MAAA,OAC3B;AACH,kBAAU,QAAQ,kBAAkB;AACpB,wBAAA;AAAA,MACpB;AAAA,IACJ;AAEA,QAAI,eAAe;AACX,UAAA,aAAa,cAAc;AAC/B,aAAO,YAAY;AACf,eAAO,KAAK,UAAU;AACtB,qBAAa,cAAc;MAC/B;AAAA,IACJ;AAAA,EACJ;AAEA,MAAI,CAAC,eAAe;AACZ,QAAA,aAAa,UAAU;AAC3B,WAAO,YAAY;AACf,aAAO,KAAK,UAAU;AACtB,mBAAa,UAAU;IAC3B;AAAA,EACJ;AAEA,SAAO,CAAC,eAAe,MAAM,GAAG,SAAS;AAC7C;AAEgB,SAAA,SAAS,KAAgB,KAAgB;AAEjD,SAAA,IAAI,QAAQ,IAAI,SACf,IAAI,UAAU,IAAI,SAAS,IAAI,OAAO,IAAI;AAEnD;AAEgB,SAAA,MACZ,wBACA,uBACuC;AACvC,QAAM,mBAAgC,CAAA;AACtC,QAAM,uBAAoC,CAAA;AAC1C,QAAM,sBAAmC,CAAA;AAGzC,QAAM,YAAY,KAAK;AAAA,IACnB,uBAAuB;AAAA,IACvB,sBAAsB;AAAA,EAAA;AAG1B,MAAI,gBAAgB;AACpB,WAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAC1B,UAAA,kBAAkB,uBAAuB,CAAC;AAC1C,UAAA,iBAAiB,sBAAsB,CAAC;AAE9C,QAAI,mBAAmB,gBAAgB;AACnC,UACI,CAAC,iBACD,mBAAmB,iBAAiB,cAAc,GACpD;AACE,yBAAiB,KAAK,eAAe;AAAA,MAAA,OAClC;AACa,wBAAA;AAChB,6BAAqB,KAAK,eAAe;AACzC,4BAAoB,KAAK,cAAc;AAAA,MAC3C;AAAA,eACO,iBAAiB;AACxB,2BAAqB,KAAK,eAAe;AAAA,eAClC,gBAAgB;AACvB,0BAAoB,KAAK,cAAc;AAAA,IAC3C;AAAA,EACJ;AAEO,SAAA,CAAC,kBAAkB,sBAAsB,mBAAmB;AACvE;AAOgB,SAAA,MACZ,wBACA,uBACA,WACW;AACX,QAAM,CAAC,mBAAmB,mBAAmB,gBAAgB,IAAI;AAAA,IAC7D,eAAe,sBAAsB;AAAA,IACrC,eAAe,qBAAqB;AAAA,EAAA;AAGlC,QAAA,iBAAiB,YAAY,iBAAiB;AAC9C,QAAA,YACF,IACA,KAAK;AAAA,IACD;AAAA,IACA,YAAY,iBAAiB;AAAA,IAC7B,YAAY,gBAAgB;AAAA,EAAA;AAGpC,QAAM,sBAAsB;AAAA,IACxB;AAAA,MACI,OAAO;AAAA,MACP,MAAM,aAAa,iBAAiB;AAAA,IACxC;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAGG,SAAA,kBAAkB,OAAO,mBAAmB;AACvD;AAEA,SAAS,YAAY,kBAA+B;AAChD,QAAM,cAAc,iBAAiB,iBAAiB,SAAS,CAAC;AAChE,MAAI,CAAC,aAAa;AACP,WAAA;AAAA,EACX;AAEA,SAAO,YAAY;AACvB;AAiBO,SAAS,eACZ,kBACM;;AACF,MAAA,iBAAiB,SAAS,GAAG;AACtB,WAAA;AAAA,EACX;AAEM,QAAA,oBAAoB,eAAe,gBAAgB;AAEzD,MAAI,cACC,uBAAkB,kBAAkB,SAAS,CAAC,MAA9C,mBAAiD,SAAQ,KAAK;AAE/D,MAAA,kBAAkB,SAAS,GAAG;AAC9B,kBAAY,uBAAkB,kBAAkB,SAAS,CAAC,MAA9C,mBAAiD,SAAQ;AAAA,EACzE;AAEQ,YAAA,uBAAkB,kBAAkB,SAAS,CAAC,MAA9C,mBAAiD,UAAS,MAC9D,WACE,KACA;AACV;AAEa,MAAA,2BAA2B,CACpC,eACmB;AACZ,SAAA;AAAA,IACH,eAAe,eAAe,UAAU,CAAC;AAAA,EAAA;AAEjD;AAIa,MAAA,yBAAyB,CAClC,eACoB;AACpB,QAAM,SAAS,WAAW,OAA0B,CAAC,KAAK,cAAc;;AACpE,QAAI,CAAC,IAAI,UAAU,KAAK,GAAG;AACnB,UAAA,UAAU,KAAK,IAAI;IAC3B;AAEA,cAAI,UAAU,KAAK,MAAnB,mBAAsB,KAAK;AAEpB,WAAA;AAAA,EACX,GAAG,CAAE,CAAA;AAEE,SAAA;AACX;AASa,MAAA,oBAAoB,CAC7B,mBACA,kBAC0B;;AAC1B,QAAM,SAAkC;AAAA,IACpC,iBAAiB,CAAC;AAAA,IAClB,iBAAiB,CAAC;AAAA,IAClB,mBAAmB,CAAC;AAAA,IACpB,sBAAsB,CAAC;AAAA,EAAA;AAGrB,QAAA,0BAA0B,eAAe,iBAAiB;AAC1D,QAAA,mBAAmB,eAAe,aAAa;AAErD,QAAM,kBAAkB,gCAAgC;AAAA,IACpD,GAAG;AAAA,IACH,GAAG;AAAA,EAAA,CACN;AAED,QAAM,qBAAqB,gBAAgB;AAAA,IACvC,CAAA,mBACI,eAAe,aAAa;AAAA;AAAA,EAAA;AAIpC,QAAM,8BAA6B,MAAC,GAAG,kBAAkB,EACpD,KAAK,CAAC,GAAG,MAAM,EAAE,UAAU,QAAQ,EAAE,UAAU,KAAK,EACpD,IAAO,MAFuB,mBAEvB;AAEZ,aAAW,gBAAgB,kBAAkB;AAEzC,QACI,8BACA,aAAa,SAAS,2BAA2B,OACnD;AACS,aAAA,kBAAkB,KAAK,YAAY;AAC1C;AAAA,IACJ;AAGM,UAAA,wBAAwB,gBAAgB,KAAK,CAAkB,mBAAA;AAE7D,aAAA,eAAe,UAAU,UAAU,aAAa,SAChD,eAAe,UAAU,SAAS,aAAa,QAC/C,eAAe,aACX;AAAA,IAAA,CAEX;AAGD,QAAI,uBAAuB;AAChB,aAAA,qBAAqB,KAAK,YAAY;AAC7C;AAAA,IACJ;AAGO,WAAA,gBAAgB,KAAK,YAAY;AAAA,EAC5C;AAEO,SAAA,gBAAgB,KAAK,GAAG,eAAe;AACvC,SAAA;AACX;AAEgB,SAAA,yBACZ,eACA,mBACW;AACJ,SAAA,cAAc,OAAO,CAAgB,iBAAA;AACjC,WAAA,CAAC,kBAAkB,KAAK,CAAoB,qBAAA;AAC/C,aACK,aAAa,SAAS,UACnB,aAAa,SAAS,KACtB,aAAa,UAAU,iBAAiB,SAC3C,aAAa,UAAU,iBAAiB,SACrC,aAAa,SAAS,iBAAiB,QACvC,aAAa,UAAU,iBAAiB,SACxC,aAAa,SAAS,iBAAiB,QACvC,aAAa,SAAS,iBAAiB;AAAA,IAAA,CAElD;AAAA,EAAA,CACJ;AACL;AAYgB,SAAA,qBACZ,YACA,qBACG;AACH,QAAM,CAAC,aAAa,IAAI,eAAe,UAAU,EAAE,MAAM,EAAE;AAErD,QAAA,aAAY,+CAAe,UAAS;AAC1C,QAAM,YAAY,YAAY;AAE9B,QAAM,qBAAqB;AAAA,IACvB,GAAG;AAAA,IACH,OAAO,oBAAoB,SAAS;AAAA,EAAA;AAGpC,MAAA,mBAAmB,QAAQ,WAAW;AACtC,UAAM,IAAI;AAAA,MACN,oEAAoE,SAAS;AAAA,IAAA;AAAA,EAErF;AAEA,QAAM,oBAAoB;AAAA,IACtB,eAAe,CAAC,GAAG,YAAY,kBAAkB,CAAC;AAAA,EAAA;AAItD,UAAQ,qBAAqB,CAAI,GAAA,MAAM,GAAG,EAAE;AAChD;AAEO,SAAS,iCACZ,oBACqB;AACrB,QAAM,oBAAoB,OAAO,QAAQ,kBAAkB,EAAE;AAAA,IACzD,CAAC,KAAK,UAAU;AACN,YAAA,CAAC,OAAO,GAAG,IAAI;AAEd,aAAA;AAAA,QACH,GAAG;AAAA,QACH,CAAC,KAAuB,GAAG,eAAe,eAAe,GAAG,CAAC;AAAA,MAAA;AAAA,IAErE;AAAA,IACA,CAAC;AAAA,EAAA;AAGE,SAAA;AAAA,IACH,GAAG;AAAA,EAAA;AAEX;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const JSZip = require("jszip");
|
|
4
|
-
const index_lite = require("../../../node_modules/.pnpm/mime@4.0.1/node_modules/mime/dist/src/index_lite.js");
|
|
5
|
-
const browser = require("../../../_virtual/browser.js");
|
|
6
|
-
const base = require("./base.js");
|
|
7
|
-
const validation = require("./validation.js");
|
|
8
|
-
const createZip = async (document) => {
|
|
9
|
-
const zip = new JSZip();
|
|
10
|
-
const { name, revision, documentType, created, lastModified } = document;
|
|
11
|
-
const header = {
|
|
12
|
-
name,
|
|
13
|
-
revision,
|
|
14
|
-
documentType,
|
|
15
|
-
created,
|
|
16
|
-
lastModified
|
|
17
|
-
};
|
|
18
|
-
zip.file("header.json", JSON.stringify(header, null, 2));
|
|
19
|
-
zip.file(
|
|
20
|
-
"state.json",
|
|
21
|
-
JSON.stringify(document.initialState || {}, null, 2)
|
|
22
|
-
);
|
|
23
|
-
zip.file("operations.json", JSON.stringify(document.operations, null, 2));
|
|
24
|
-
const attachments = Object.keys(document.attachments);
|
|
25
|
-
attachments.forEach((key) => {
|
|
26
|
-
const { data, ...attributes } = document.attachments[key];
|
|
27
|
-
zip.file(key, data, {
|
|
28
|
-
base64: true,
|
|
29
|
-
createFolders: true,
|
|
30
|
-
comment: JSON.stringify(attributes)
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
return zip;
|
|
34
|
-
};
|
|
35
|
-
const saveToFile = async (document, path, extension, name) => {
|
|
36
|
-
const zip = await createZip(document);
|
|
37
|
-
await zip.generateAsync({
|
|
38
|
-
type: "uint8array",
|
|
39
|
-
streamFiles: true
|
|
40
|
-
});
|
|
41
|
-
const fileName = name ?? document.name;
|
|
42
|
-
const fileExtension = `.${extension}.zip`;
|
|
43
|
-
return browser.writeFile(
|
|
44
|
-
path,
|
|
45
|
-
fileName.endsWith(fileExtension) ? fileName : `${fileName}${fileExtension}`
|
|
46
|
-
);
|
|
47
|
-
};
|
|
48
|
-
const saveToFileHandle = async (document, input) => {
|
|
49
|
-
const zip = await createZip(document);
|
|
50
|
-
const blob = await zip.generateAsync({ type: "blob" });
|
|
51
|
-
const writable = await input.createWritable();
|
|
52
|
-
await writable.write(blob);
|
|
53
|
-
await writable.close();
|
|
54
|
-
};
|
|
55
|
-
const loadFromFile = async (path, reducer, options) => {
|
|
56
|
-
const file = browser.readFile();
|
|
57
|
-
return loadFromInput(file, reducer, options);
|
|
58
|
-
};
|
|
59
|
-
const loadFromInput = async (input, reducer, options) => {
|
|
60
|
-
const zip = new JSZip();
|
|
61
|
-
await zip.loadAsync(input);
|
|
62
|
-
return loadFromZip(zip, reducer, options);
|
|
63
|
-
};
|
|
64
|
-
async function loadFromZip(zip, reducer, options) {
|
|
65
|
-
const initialStateZip = zip.file("state.json");
|
|
66
|
-
if (!initialStateZip) {
|
|
67
|
-
throw new Error("Initial state not found");
|
|
68
|
-
}
|
|
69
|
-
const initialStateStr = await initialStateZip.async("string");
|
|
70
|
-
const initialState = JSON.parse(initialStateStr);
|
|
71
|
-
const headerZip = zip.file("header.json");
|
|
72
|
-
let header = void 0;
|
|
73
|
-
if (headerZip) {
|
|
74
|
-
header = JSON.parse(await headerZip.async("string"));
|
|
75
|
-
}
|
|
76
|
-
const operationsZip = zip.file("operations.json");
|
|
77
|
-
if (!operationsZip) {
|
|
78
|
-
throw new Error("Operations history not found");
|
|
79
|
-
}
|
|
80
|
-
const operations = JSON.parse(
|
|
81
|
-
await operationsZip.async("string")
|
|
82
|
-
);
|
|
83
|
-
const operationsError = validation.validateOperations(operations);
|
|
84
|
-
if (operationsError.length) {
|
|
85
|
-
const errorMessages = operationsError.map((err) => err.message);
|
|
86
|
-
throw new Error(errorMessages.join("\n"));
|
|
87
|
-
}
|
|
88
|
-
let result = base.replayDocument(
|
|
89
|
-
initialState,
|
|
90
|
-
operations,
|
|
91
|
-
reducer,
|
|
92
|
-
void 0,
|
|
93
|
-
header,
|
|
94
|
-
{},
|
|
95
|
-
options
|
|
96
|
-
);
|
|
97
|
-
if (header) {
|
|
98
|
-
result = {
|
|
99
|
-
...result,
|
|
100
|
-
...header
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
return result;
|
|
104
|
-
}
|
|
105
|
-
function getFileAttributes(file) {
|
|
106
|
-
const extension = file.replace(/^.*\./, "") || void 0;
|
|
107
|
-
const fileName = file.replace(/^.*[/\\]/, "") || void 0;
|
|
108
|
-
return { extension, fileName };
|
|
109
|
-
}
|
|
110
|
-
async function getRemoteFile(url) {
|
|
111
|
-
const { buffer, mimeType = "application/octet-stream" } = await browser.fetchFile();
|
|
112
|
-
const attributes = getFileAttributes(url);
|
|
113
|
-
const data = buffer.toString("base64");
|
|
114
|
-
return {
|
|
115
|
-
data,
|
|
116
|
-
hash: browser.hash(data),
|
|
117
|
-
mimeType,
|
|
118
|
-
...attributes
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
async function getLocalFile(path) {
|
|
122
|
-
const buffer = await browser.getFile();
|
|
123
|
-
const mimeType = index_lite.default.getType(path) || "application/octet-stream";
|
|
124
|
-
const attributes = getFileAttributes(path);
|
|
125
|
-
const data = buffer.toString("base64");
|
|
126
|
-
return { data, hash: browser.hash(data), mimeType, ...attributes };
|
|
127
|
-
}
|
|
128
|
-
exports.createZip = createZip;
|
|
129
|
-
exports.getLocalFile = getLocalFile;
|
|
130
|
-
exports.getRemoteFile = getRemoteFile;
|
|
131
|
-
exports.loadFromFile = loadFromFile;
|
|
132
|
-
exports.loadFromInput = loadFromInput;
|
|
133
|
-
exports.saveToFile = saveToFile;
|
|
134
|
-
exports.saveToFileHandle = saveToFileHandle;
|
|
135
|
-
//# sourceMappingURL=file.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"file.js","sources":["../../../../../../src/document/utils/file.ts"],"sourcesContent":["import JSZip from 'jszip';\nimport mime from 'mime/lite';\nimport type {\n Action,\n Attachment,\n AttachmentInput,\n Document,\n DocumentHeader,\n DocumentOperations,\n ExtendedState,\n Reducer,\n} from '../types';\nimport { fetchFile, getFile, hash, readFile, writeFile } from './node';\nimport { replayDocument, ReplayDocumentOptions } from './base';\nimport { validateOperations } from './validation';\n\nexport type FileInput = string | number[] | Uint8Array | ArrayBuffer | Blob;\n\nexport const createZip = async (document: Document) => {\n // create zip file\n const zip = new JSZip();\n\n const { name, revision, documentType, created, lastModified } = document;\n const header: DocumentHeader = {\n name,\n revision,\n documentType,\n created,\n lastModified,\n };\n zip.file('header.json', JSON.stringify(header, null, 2));\n zip.file(\n 'state.json',\n JSON.stringify(document.initialState || {}, null, 2),\n );\n zip.file('operations.json', JSON.stringify(document.operations, null, 2));\n\n const attachments = Object.keys(document.attachments);\n attachments.forEach(key => {\n const { data, ...attributes } = document.attachments[key];\n zip.file(key, data, {\n base64: true,\n createFolders: true,\n comment: JSON.stringify(attributes),\n });\n });\n return zip;\n};\n\n/**\n * Saves a document to a ZIP file.\n *\n * @remarks\n * This function creates a ZIP file containing the document's state, operations,\n * and file attachments. The file is saved to the specified path.\n *\n * @param document - The document to save to the file.\n * @param path - The path to save the file to.\n * @param extension - The extension to use for the file.\n * @returns A promise that resolves to the path of the saved file.\n */\nexport const saveToFile = async (\n document: Document,\n path: string,\n extension: string,\n name?: string,\n): Promise<string> => {\n // create zip file\n const zip = await createZip(document);\n const file = await zip.generateAsync({\n type: 'uint8array',\n streamFiles: true,\n });\n const fileName = name ?? document.name;\n const fileExtension = `.${extension}.zip`;\n\n return writeFile(\n path,\n fileName.endsWith(fileExtension)\n ? fileName\n : `${fileName}${fileExtension}`,\n file,\n );\n};\n\nexport const saveToFileHandle = async (\n document: Document,\n input: FileSystemFileHandle,\n) => {\n const zip = await createZip(document);\n const blob = await zip.generateAsync({ type: 'blob' });\n const writable = await input.createWritable();\n await writable.write(blob);\n await writable.close();\n};\n\n/**\n * Loads a document from a ZIP file.\n *\n * @remarks\n * This function reads a ZIP file and returns the document state after\n * applying all the operations. The reducer is used to apply the operations.\n *\n * @typeParam S - The type of the state object.\n * @typeParam A - The type of the actions that can be applied to the state object.\n *\n * @param path - The path to the ZIP file.\n * @param reducer - The reducer to apply the operations to the state object.\n * @returns A promise that resolves to the document state after applying all the operations.\n * @throws An error if the initial state or the operations history is not found in the ZIP file.\n */\nexport const loadFromFile = async <S, A extends Action, L>(\n path: string,\n reducer: Reducer<S, A, L>,\n options?: ReplayDocumentOptions,\n) => {\n const file = readFile(path);\n return loadFromInput(file, reducer, options);\n};\n\nexport const loadFromInput = async <S, A extends Action, L>(\n input: FileInput,\n reducer: Reducer<S, A, L>,\n options?: ReplayDocumentOptions,\n) => {\n const zip = new JSZip();\n await zip.loadAsync(input);\n return loadFromZip(zip, reducer, options);\n};\n\nasync function loadFromZip<S, A extends Action, L>(\n zip: JSZip,\n reducer: Reducer<S, A, L>,\n options?: ReplayDocumentOptions,\n) {\n const initialStateZip = zip.file('state.json');\n if (!initialStateZip) {\n throw new Error('Initial state not found');\n }\n const initialStateStr = await initialStateZip.async('string');\n const initialState = JSON.parse(initialStateStr) as ExtendedState<S, L>;\n\n const headerZip = zip.file('header.json');\n let header: DocumentHeader | undefined = undefined;\n if (headerZip) {\n header = JSON.parse(await headerZip.async('string')) as DocumentHeader;\n }\n\n const operationsZip = zip.file('operations.json');\n if (!operationsZip) {\n throw new Error('Operations history not found');\n }\n\n const operations = JSON.parse(\n await operationsZip.async('string'),\n ) as DocumentOperations<A>;\n\n const operationsError = validateOperations(operations);\n if (operationsError.length) {\n const errorMessages = operationsError.map(err => err.message);\n throw new Error(errorMessages.join('\\n'));\n }\n\n let result = replayDocument(\n initialState,\n operations,\n reducer,\n undefined,\n header,\n {},\n options,\n );\n if (header) {\n result = {\n ...result,\n ...header,\n };\n }\n return result;\n}\n\nfunction getFileAttributes(\n file: string,\n): Omit<Attachment, 'data' | 'mimeType'> {\n const extension = file.replace(/^.*\\./, '') || undefined;\n const fileName = file.replace(/^.*[/\\\\]/, '') || undefined;\n return { extension, fileName };\n}\n\n/**\n * Fetches an attachment from a URL and returns its base64-encoded data and MIME type.\n * @param url - The URL of the attachment to fetch.\n * @returns A Promise that resolves to an object containing the base64-encoded data and MIME type of the attachment.\n */\nexport async function getRemoteFile(url: string): Promise<AttachmentInput> {\n const { buffer, mimeType = 'application/octet-stream' } =\n await fetchFile(url);\n const attributes = getFileAttributes(url);\n const data = buffer.toString('base64');\n return {\n data,\n hash: hash(data),\n mimeType,\n ...attributes,\n };\n}\n\n/**\n * Reads an attachment from a file and returns its base64-encoded data and MIME type.\n * @param path - The path of the attachment file to read.\n * @returns A Promise that resolves to an object containing the base64-encoded data and MIME type of the attachment.\n */\nexport async function getLocalFile(path: string): Promise<AttachmentInput> {\n const buffer = await getFile(path);\n const mimeType = mime.getType(path) || 'application/octet-stream';\n const attributes = getFileAttributes(path);\n const data = buffer.toString('base64');\n return { data, hash: hash(data), mimeType, ...attributes };\n}\n"],"names":["writeFile","readFile","validateOperations","replayDocument","fetchFile","hash","getFile","mime"],"mappings":"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"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const base = require("./base.js");
|
|
4
|
-
const file = require("./file.js");
|
|
5
|
-
const validation = require("./validation.js");
|
|
6
|
-
const documentHelpers = require("./document-helpers.js");
|
|
7
|
-
exports.calculateSkipsLeft = base.calculateSkipsLeft;
|
|
8
|
-
exports.createAction = base.createAction;
|
|
9
|
-
exports.createDocument = base.createDocument;
|
|
10
|
-
exports.createExtendedState = base.createExtendedState;
|
|
11
|
-
exports.createReducer = base.createReducer;
|
|
12
|
-
exports.hashDocument = base.hashDocument;
|
|
13
|
-
exports.hashKey = base.hashKey;
|
|
14
|
-
exports.isBaseAction = base.isBaseAction;
|
|
15
|
-
exports.isNoopOperation = base.isNoopOperation;
|
|
16
|
-
exports.isSameDocument = base.isSameDocument;
|
|
17
|
-
exports.isUndoRedo = base.isUndoRedo;
|
|
18
|
-
exports.mapSkippedOperations = base.mapSkippedOperations;
|
|
19
|
-
exports.readOnly = base.readOnly;
|
|
20
|
-
exports.replayDocument = base.replayDocument;
|
|
21
|
-
exports.replayOperations = base.replayOperations;
|
|
22
|
-
exports.sortMappedOperations = base.sortMappedOperations;
|
|
23
|
-
exports.sortOperations = base.sortOperations;
|
|
24
|
-
exports.createZip = file.createZip;
|
|
25
|
-
exports.getLocalFile = file.getLocalFile;
|
|
26
|
-
exports.getRemoteFile = file.getRemoteFile;
|
|
27
|
-
exports.loadFromFile = file.loadFromFile;
|
|
28
|
-
exports.loadFromInput = file.loadFromInput;
|
|
29
|
-
exports.saveToFile = file.saveToFile;
|
|
30
|
-
exports.saveToFileHandle = file.saveToFileHandle;
|
|
31
|
-
exports.validateOperations = validation.validateOperations;
|
|
32
|
-
exports.documentHelpers = documentHelpers;
|
|
33
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
function validateOperations(operations) {
|
|
4
|
-
const errors = [];
|
|
5
|
-
const scopes = Object.keys(operations);
|
|
6
|
-
for (const scope of scopes) {
|
|
7
|
-
const ops = operations[scope].sort((a, b) => a.index - b.index);
|
|
8
|
-
for (let i = 0; i < ops.length; i++) {
|
|
9
|
-
if (ops[i].index !== i) {
|
|
10
|
-
errors.push({
|
|
11
|
-
message: `Invalid operation index ${ops[i].index} at position ${i}`,
|
|
12
|
-
details: {
|
|
13
|
-
position: i,
|
|
14
|
-
operation: ops[i],
|
|
15
|
-
scope: ops[i].scope
|
|
16
|
-
}
|
|
17
|
-
});
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
return errors;
|
|
22
|
-
}
|
|
23
|
-
exports.validateOperations = validateOperations;
|
|
24
|
-
//# sourceMappingURL=validation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sources":["../../../../../../src/document/utils/validation.ts"],"sourcesContent":["import {\n DocumentOperations,\n Action,\n ValidationError,\n OperationScope,\n} from '../types';\n\nexport function validateOperations<A extends Action>(\n operations: DocumentOperations<A>,\n) {\n const errors: ValidationError[] = [];\n const scopes = Object.keys(operations) as OperationScope[];\n\n for (const scope of scopes) {\n const ops = operations[scope].sort((a, b) => a.index - b.index);\n\n for (let i = 0; i < ops.length; i++) {\n if (ops[i].index !== i) {\n errors.push({\n message: `Invalid operation index ${ops[i].index} at position ${i}`,\n details: {\n position: i,\n operation: ops[i],\n scope: ops[i].scope,\n },\n });\n }\n }\n }\n\n return errors;\n}\n"],"names":[],"mappings":";;AAOO,SAAS,mBACZ,YACF;AACE,QAAM,SAA4B,CAAA;AAC5B,QAAA,SAAS,OAAO,KAAK,UAAU;AAErC,aAAW,SAAS,QAAQ;AAClB,UAAA,MAAM,WAAW,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AAE9D,aAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACjC,UAAI,IAAI,CAAC,EAAE,UAAU,GAAG;AACpB,eAAO,KAAK;AAAA,UACR,SAAS,2BAA2B,IAAI,CAAC,EAAE,KAAK,gBAAgB,CAAC;AAAA,UACjE,SAAS;AAAA,YACL,UAAU;AAAA,YACV,WAAW,IAAI,CAAC;AAAA,YAChB,OAAO,IAAI,CAAC,EAAE;AAAA,UAClB;AAAA,QAAA,CACH;AAAA,MACL;AAAA,IACJ;AAAA,EACJ;AAEO,SAAA;AACX;;"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const reducer = {
|
|
4
|
-
setModelNameOperation(state, action) {
|
|
5
|
-
state.name = action.input.name;
|
|
6
|
-
},
|
|
7
|
-
setModelIdOperation(state, action) {
|
|
8
|
-
state.id = action.input.id;
|
|
9
|
-
},
|
|
10
|
-
setModelExtensionOperation(state, action) {
|
|
11
|
-
state.extension = action.input.extension;
|
|
12
|
-
},
|
|
13
|
-
setModelDescriptionOperation(state, action) {
|
|
14
|
-
state.description = action.input.description;
|
|
15
|
-
},
|
|
16
|
-
setAuthorNameOperation(state, action) {
|
|
17
|
-
state.author = state.author || { name: "", website: null };
|
|
18
|
-
state.author.name = action.input.authorName;
|
|
19
|
-
},
|
|
20
|
-
setAuthorWebsiteOperation(state, action) {
|
|
21
|
-
state.author = state.author || { name: "", website: null };
|
|
22
|
-
state.author.website = action.input.authorWebsite;
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
exports.reducer = reducer;
|
|
26
|
-
//# sourceMappingURL=header.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"header.js","sources":["../../../../../../../src/document-model/custom/reducers/header.ts"],"sourcesContent":["import { DocumentModelHeaderOperations } from '../../gen/header/operations';\n\nexport const reducer: DocumentModelHeaderOperations = {\n setModelNameOperation(state, action) {\n state.name = action.input.name;\n },\n\n setModelIdOperation(state, action) {\n state.id = action.input.id;\n },\n\n setModelExtensionOperation(state, action) {\n state.extension = action.input.extension;\n },\n\n setModelDescriptionOperation(state, action) {\n state.description = action.input.description;\n },\n\n setAuthorNameOperation(state, action) {\n state.author = state.author || { name: '', website: null };\n state.author.name = action.input.authorName;\n },\n\n setAuthorWebsiteOperation(state, action) {\n state.author = state.author || { name: '', website: null };\n state.author.website = action.input.authorWebsite;\n },\n};\n"],"names":[],"mappings":";;AAEO,MAAM,UAAyC;AAAA,EAClD,sBAAsB,OAAO,QAAQ;AAC3B,UAAA,OAAO,OAAO,MAAM;AAAA,EAC9B;AAAA,EAEA,oBAAoB,OAAO,QAAQ;AACzB,UAAA,KAAK,OAAO,MAAM;AAAA,EAC5B;AAAA,EAEA,2BAA2B,OAAO,QAAQ;AAChC,UAAA,YAAY,OAAO,MAAM;AAAA,EACnC;AAAA,EAEA,6BAA6B,OAAO,QAAQ;AAClC,UAAA,cAAc,OAAO,MAAM;AAAA,EACrC;AAAA,EAEA,uBAAuB,OAAO,QAAQ;AAClC,UAAM,SAAS,MAAM,UAAU,EAAE,MAAM,IAAI,SAAS;AAC9C,UAAA,OAAO,OAAO,OAAO,MAAM;AAAA,EACrC;AAAA,EAEA,0BAA0B,OAAO,QAAQ;AACrC,UAAM,SAAS,MAAM,UAAU,EAAE,MAAM,IAAI,SAAS;AAC9C,UAAA,OAAO,UAAU,OAAO,MAAM;AAAA,EACxC;AACJ;;"}
|