document-model 4.1.0-dev.1 → 4.1.0-dev.100
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/README.md +24 -24
- package/dist/src/core/actions.d.ts +79 -0
- package/dist/src/core/actions.d.ts.map +1 -0
- package/dist/src/core/actions.js +183 -0
- package/dist/src/core/actions.js.map +1 -0
- package/dist/src/core/crypto.d.ts +17 -0
- package/dist/src/core/crypto.d.ts.map +1 -0
- package/dist/src/core/crypto.js +87 -0
- package/dist/src/core/crypto.js.map +1 -0
- package/dist/src/core/documents.d.ts +128 -0
- package/dist/src/core/documents.d.ts.map +1 -0
- package/dist/src/{document/utils/document-helpers.js → core/documents.js} +364 -26
- package/dist/src/core/documents.js.map +1 -0
- package/dist/src/core/errors.d.ts +21 -0
- package/dist/src/core/errors.d.ts.map +1 -0
- package/dist/src/core/errors.js +47 -0
- package/dist/src/core/errors.js.map +1 -0
- package/dist/src/core/files.d.ts +14 -0
- package/dist/src/core/files.d.ts.map +1 -0
- package/dist/src/core/files.js +74 -0
- package/dist/src/core/files.js.map +1 -0
- package/dist/src/{document/utils → core}/header.d.ts +3 -35
- package/dist/src/core/header.d.ts.map +1 -0
- package/dist/src/{document/utils → core}/header.js +6 -19
- package/dist/src/core/header.js.map +1 -0
- package/dist/src/core/index.d.ts +12 -0
- package/dist/src/core/index.d.ts.map +1 -0
- package/dist/src/core/index.js +12 -0
- package/dist/src/core/index.js.map +1 -0
- package/dist/src/{document/utils/file.d.ts → core/node.d.ts} +40 -29
- package/dist/src/core/node.d.ts.map +1 -0
- package/dist/src/core/node.js +149 -0
- package/dist/src/core/node.js.map +1 -0
- package/dist/src/core/operations.d.ts +32 -0
- package/dist/src/core/operations.d.ts.map +1 -0
- package/dist/src/{document/actions → core}/operations.js +11 -59
- package/dist/src/core/operations.js.map +1 -0
- package/dist/src/core/ph-types.d.ts +259 -0
- package/dist/src/core/ph-types.d.ts.map +1 -0
- package/dist/src/core/ph-types.js +15 -0
- package/dist/src/core/ph-types.js.map +1 -0
- package/dist/src/core/reducer.d.ts +61 -0
- package/dist/src/core/reducer.d.ts.map +1 -0
- package/dist/src/core/reducer.js +416 -0
- package/dist/src/core/reducer.js.map +1 -0
- package/dist/src/{document/schema/zod.d.ts → core/schemas.d.ts} +50 -24
- package/dist/src/core/schemas.d.ts.map +1 -0
- package/dist/src/{document/schema/zod.js → core/schemas.js} +24 -27
- package/dist/src/core/schemas.js.map +1 -0
- package/dist/src/core/state.d.ts +26 -0
- package/dist/src/core/state.d.ts.map +1 -0
- package/dist/src/core/state.js +56 -0
- package/dist/src/core/state.js.map +1 -0
- package/dist/src/core/types.d.ts +500 -0
- package/dist/src/core/types.d.ts.map +1 -0
- package/dist/src/{document → core}/types.js.map +1 -1
- package/dist/src/core/validation.d.ts +4 -0
- package/dist/src/core/validation.d.ts.map +1 -0
- package/dist/src/{document/utils → core}/validation.js +6 -2
- package/dist/src/core/validation.js.map +1 -0
- package/dist/src/document-model/actions.d.ts +158 -0
- package/dist/src/document-model/actions.d.ts.map +1 -0
- package/dist/src/document-model/actions.js +109 -0
- package/dist/src/document-model/actions.js.map +1 -0
- package/dist/src/document-model/constants.d.ts +7 -0
- package/dist/src/document-model/constants.d.ts.map +1 -0
- package/dist/src/document-model/{gen/document-model.js → constants.js} +171 -139
- package/dist/src/document-model/constants.js.map +1 -0
- package/dist/src/document-model/files.d.ts +5 -0
- package/dist/src/document-model/files.d.ts.map +1 -0
- package/dist/src/document-model/files.js +9 -0
- package/dist/src/document-model/files.js.map +1 -0
- package/dist/src/document-model/index.d.ts +9 -0
- package/dist/src/document-model/index.d.ts.map +1 -0
- package/dist/src/document-model/index.js +9 -0
- package/dist/src/document-model/index.js.map +1 -0
- package/dist/src/document-model/module.d.ts +1 -1
- package/dist/src/document-model/module.d.ts.map +1 -1
- package/dist/src/document-model/module.js +17 -10
- package/dist/src/document-model/module.js.map +1 -1
- package/dist/src/document-model/reducers.d.ts +11 -0
- package/dist/src/document-model/reducers.d.ts.map +1 -0
- package/dist/src/document-model/reducers.js +588 -0
- package/dist/src/document-model/reducers.js.map +1 -0
- package/dist/src/document-model/schemas.d.ts +449 -0
- package/dist/src/document-model/schemas.d.ts.map +1 -0
- package/dist/src/document-model/{gen/schema/zod.js → schemas.js} +9 -15
- package/dist/src/document-model/schemas.js.map +1 -0
- package/dist/src/document-model/state.d.ts +11 -0
- package/dist/src/document-model/state.d.ts.map +1 -0
- package/dist/src/document-model/state.js +61 -0
- package/dist/src/document-model/state.js.map +1 -0
- package/dist/src/document-model/types.d.ts +671 -3
- package/dist/src/document-model/types.d.ts.map +1 -1
- package/dist/src/document-model/validation.d.ts +7 -0
- package/dist/src/document-model/validation.d.ts.map +1 -0
- package/dist/src/document-model/{custom/utils.js → validation.js} +1 -1
- package/dist/src/document-model/validation.js.map +1 -0
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -0
- package/dist/test/document/crypto.test.js +39 -61
- package/dist/test/document/crypto.test.js.map +1 -1
- package/dist/test/document/event-vs-command.test.js +81 -51
- package/dist/test/document/event-vs-command.test.js.map +1 -1
- package/dist/test/document/local.test.js +27 -45
- package/dist/test/document/local.test.js.map +1 -1
- package/dist/test/document/operation-id.test.js +4 -7
- package/dist/test/document/operation-id.test.js.map +1 -1
- package/dist/test/document/prune.test.js +23 -36
- package/dist/test/document/prune.test.js.map +1 -1
- package/dist/test/document/reducer.test.js +101 -81
- package/dist/test/document/reducer.test.js.map +1 -1
- package/dist/test/document/skip-operations.test.js +67 -87
- package/dist/test/document/skip-operations.test.js.map +1 -1
- package/dist/test/document/undo-redo.test.js +64 -40
- package/dist/test/document/undo-redo.test.js.map +1 -1
- package/dist/test/document/utils.test.js +51 -41
- package/dist/test/document/utils.test.js.map +1 -1
- package/dist/test/document-helpers/addUndo.test.js +2 -2
- package/dist/test/document-helpers/addUndo.test.js.map +1 -1
- package/dist/test/document-helpers/attachBranch.test.js +21 -21
- package/dist/test/document-helpers/attachBranch.test.js.map +1 -1
- package/dist/test/document-helpers/checkCleanedOperationsIntegrity.test.js +1 -1
- package/dist/test/document-helpers/checkCleanedOperationsIntegrity.test.js.map +1 -1
- package/dist/test/document-helpers/conflictResolution.test.js +11 -11
- package/dist/test/document-helpers/conflictResolution.test.js.map +1 -1
- package/dist/test/document-helpers/filterDuplicatedOperations.test.js +1 -1
- package/dist/test/document-helpers/filterDuplicatedOperations.test.js.map +1 -1
- package/dist/test/document-helpers/garbageCollect.test.js +1 -1
- package/dist/test/document-helpers/garbageCollect.test.js.map +1 -1
- package/dist/test/document-helpers/groupOperationsByScope.test.js +71 -71
- package/dist/test/document-helpers/groupOperationsByScope.test.js.map +1 -1
- package/dist/test/document-helpers/merge.test.js +126 -126
- package/dist/test/document-helpers/merge.test.js.map +1 -1
- package/dist/test/document-helpers/nextSkipNumber.test.js +1 -1
- package/dist/test/document-helpers/nextSkipNumber.test.js.map +1 -1
- package/dist/test/document-helpers/prepareOperations.test.js +1 -1
- package/dist/test/document-helpers/prepareOperations.test.js.map +1 -1
- package/dist/test/document-helpers/removeExistingOperations.test.js +38 -26
- package/dist/test/document-helpers/removeExistingOperations.test.js.map +1 -1
- package/dist/test/document-helpers/reshuffleByTimestamp.test.js +16 -16
- package/dist/test/document-helpers/reshuffleByTimestamp.test.js.map +1 -1
- package/dist/test/document-helpers/reshuffleByTimestampAndIndex.test.js +22 -22
- package/dist/test/document-helpers/reshuffleByTimestampAndIndex.test.js.map +1 -1
- package/dist/test/document-helpers/skipHeaderOperations.test.js +34 -41
- package/dist/test/document-helpers/skipHeaderOperations.test.js.map +1 -1
- package/dist/test/document-helpers/sortOperations.test.js +1 -1
- package/dist/test/document-helpers/sortOperations.test.js.map +1 -1
- package/dist/test/document-helpers/split.test.js +3 -3
- package/dist/test/document-helpers/split.test.js.map +1 -1
- package/dist/test/document-helpers/utils.d.ts +2 -1
- package/dist/test/document-helpers/utils.d.ts.map +1 -1
- package/dist/test/document-helpers/utils.js +13 -8
- package/dist/test/document-helpers/utils.js.map +1 -1
- package/dist/test/document-model/replay.test.js +21 -25
- package/dist/test/document-model/replay.test.js.map +1 -1
- package/dist/test/document-model/skip-operations.test.js +93 -96
- package/dist/test/document-model/skip-operations.test.js.map +1 -1
- package/dist/test/document-model/validation.test.js +10 -13
- package/dist/test/document-model/validation.test.js.map +1 -1
- package/dist/test/document-model/zip.test.js +20 -21
- package/dist/test/document-model/zip.test.js.map +1 -1
- package/dist/test/helpers.d.ts +59 -13
- package/dist/test/helpers.d.ts.map +1 -1
- package/dist/test/helpers.js +58 -11
- package/dist/test/helpers.js.map +1 -1
- package/dist/test/index.d.ts +4 -0
- package/dist/test/index.d.ts.map +1 -0
- package/dist/test/index.js +3 -0
- package/dist/test/index.js.map +1 -0
- package/dist/test/types.d.ts +6 -0
- package/dist/test/types.d.ts.map +1 -0
- package/dist/{src/document/schema → test}/types.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/vitest.config.d.ts +1 -1
- package/dist/vitest.config.d.ts.map +1 -1
- package/dist/vitest.config.js +2 -8
- package/dist/vitest.config.js.map +1 -1
- package/package.json +27 -21
- package/dist/index.d.ts +0 -20
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -14
- package/dist/index.js.map +0 -1
- package/dist/src/document/actions/creators.d.ts +0 -51
- package/dist/src/document/actions/creators.d.ts.map +0 -1
- package/dist/src/document/actions/creators.js +0 -57
- package/dist/src/document/actions/creators.js.map +0 -1
- package/dist/src/document/actions/operations.d.ts +0 -36
- package/dist/src/document/actions/operations.d.ts.map +0 -1
- package/dist/src/document/actions/operations.js.map +0 -1
- package/dist/src/document/actions/types.d.ts +0 -16
- package/dist/src/document/actions/types.d.ts.map +0 -1
- package/dist/src/document/actions/types.js +0 -7
- package/dist/src/document/actions/types.js.map +0 -1
- package/dist/src/document/object.d.ts +0 -124
- package/dist/src/document/object.d.ts.map +0 -1
- package/dist/src/document/object.js +0 -183
- package/dist/src/document/object.js.map +0 -1
- package/dist/src/document/ph-types.d.ts +0 -68
- package/dist/src/document/ph-types.d.ts.map +0 -1
- package/dist/src/document/ph-types.js +0 -2
- package/dist/src/document/ph-types.js.map +0 -1
- package/dist/src/document/reducer.d.ts +0 -49
- package/dist/src/document/reducer.d.ts.map +0 -1
- package/dist/src/document/reducer.js +0 -346
- package/dist/src/document/reducer.js.map +0 -1
- package/dist/src/document/schema/types.d.ts +0 -177
- package/dist/src/document/schema/types.d.ts.map +0 -1
- package/dist/src/document/schema/types.js +0 -2
- package/dist/src/document/schema/zod.d.ts.map +0 -1
- package/dist/src/document/schema/zod.js.map +0 -1
- package/dist/src/document/signal.d.ts +0 -36
- package/dist/src/document/signal.d.ts.map +0 -1
- package/dist/src/document/signal.js +0 -2
- package/dist/src/document/signal.js.map +0 -1
- package/dist/src/document/types.d.ts +0 -336
- package/dist/src/document/types.d.ts.map +0 -1
- package/dist/src/document/types.js +0 -2
- package/dist/src/document/utils/base.d.ts +0 -88
- package/dist/src/document/utils/base.d.ts.map +0 -1
- package/dist/src/document/utils/base.js +0 -335
- package/dist/src/document/utils/base.js.map +0 -1
- package/dist/src/document/utils/browser.d.ts +0 -18
- package/dist/src/document/utils/browser.d.ts.map +0 -1
- package/dist/src/document/utils/browser.js +0 -54
- package/dist/src/document/utils/browser.js.map +0 -1
- package/dist/src/document/utils/crypto.d.ts +0 -11
- package/dist/src/document/utils/crypto.d.ts.map +0 -1
- package/dist/src/document/utils/crypto.js +0 -80
- package/dist/src/document/utils/crypto.js.map +0 -1
- package/dist/src/document/utils/document-helpers.d.ts +0 -78
- package/dist/src/document/utils/document-helpers.d.ts.map +0 -1
- package/dist/src/document/utils/document-helpers.js.map +0 -1
- package/dist/src/document/utils/errors.d.ts +0 -10
- package/dist/src/document/utils/errors.d.ts.map +0 -1
- package/dist/src/document/utils/errors.js +0 -19
- package/dist/src/document/utils/errors.js.map +0 -1
- package/dist/src/document/utils/file.d.ts.map +0 -1
- package/dist/src/document/utils/file.js +0 -152
- package/dist/src/document/utils/file.js.map +0 -1
- package/dist/src/document/utils/header.d.ts.map +0 -1
- package/dist/src/document/utils/header.js.map +0 -1
- package/dist/src/document/utils/node.d.ts +0 -18
- package/dist/src/document/utils/node.d.ts.map +0 -1
- package/dist/src/document/utils/node.js +0 -62
- package/dist/src/document/utils/node.js.map +0 -1
- package/dist/src/document/utils/validation.d.ts +0 -3
- package/dist/src/document/utils/validation.d.ts.map +0 -1
- package/dist/src/document/utils/validation.js.map +0 -1
- package/dist/src/document-model/custom/reducers/header.d.ts +0 -3
- package/dist/src/document-model/custom/reducers/header.d.ts.map +0 -1
- package/dist/src/document-model/custom/reducers/header.js +0 -23
- package/dist/src/document-model/custom/reducers/header.js.map +0 -1
- package/dist/src/document-model/custom/reducers/module.d.ts +0 -3
- package/dist/src/document-model/custom/reducers/module.d.ts.map +0 -1
- package/dist/src/document-model/custom/reducers/module.js +0 -41
- package/dist/src/document-model/custom/reducers/module.js.map +0 -1
- package/dist/src/document-model/custom/reducers/operation-error.d.ts +0 -3
- package/dist/src/document-model/custom/reducers/operation-error.d.ts.map +0 -1
- package/dist/src/document-model/custom/reducers/operation-error.js +0 -94
- package/dist/src/document-model/custom/reducers/operation-error.js.map +0 -1
- package/dist/src/document-model/custom/reducers/operation-example.d.ts +0 -3
- package/dist/src/document-model/custom/reducers/operation-example.d.ts.map +0 -1
- package/dist/src/document-model/custom/reducers/operation-example.js +0 -53
- package/dist/src/document-model/custom/reducers/operation-example.js.map +0 -1
- package/dist/src/document-model/custom/reducers/operation.d.ts +0 -3
- package/dist/src/document-model/custom/reducers/operation.d.ts.map +0 -1
- package/dist/src/document-model/custom/reducers/operation.js +0 -125
- package/dist/src/document-model/custom/reducers/operation.js.map +0 -1
- package/dist/src/document-model/custom/reducers/state.d.ts +0 -3
- package/dist/src/document-model/custom/reducers/state.d.ts.map +0 -1
- package/dist/src/document-model/custom/reducers/state.js +0 -71
- package/dist/src/document-model/custom/reducers/state.js.map +0 -1
- package/dist/src/document-model/custom/reducers/versioning.d.ts +0 -8
- package/dist/src/document-model/custom/reducers/versioning.d.ts.map +0 -1
- package/dist/src/document-model/custom/reducers/versioning.js +0 -23
- package/dist/src/document-model/custom/reducers/versioning.js.map +0 -1
- package/dist/src/document-model/custom/utils.d.ts +0 -8
- package/dist/src/document-model/custom/utils.d.ts.map +0 -1
- package/dist/src/document-model/custom/utils.js.map +0 -1
- package/dist/src/document-model/gen/actions.d.ts +0 -16
- package/dist/src/document-model/gen/actions.d.ts.map +0 -1
- package/dist/src/document-model/gen/actions.js +0 -8
- package/dist/src/document-model/gen/actions.js.map +0 -1
- package/dist/src/document-model/gen/constants.d.ts +0 -7
- package/dist/src/document-model/gen/constants.d.ts.map +0 -1
- package/dist/src/document-model/gen/constants.js +0 -34
- package/dist/src/document-model/gen/constants.js.map +0 -1
- package/dist/src/document-model/gen/creators.d.ts +0 -8
- package/dist/src/document-model/gen/creators.d.ts.map +0 -1
- package/dist/src/document-model/gen/creators.js +0 -8
- package/dist/src/document-model/gen/creators.js.map +0 -1
- package/dist/src/document-model/gen/document-model.d.ts +0 -3
- package/dist/src/document-model/gen/document-model.d.ts.map +0 -1
- package/dist/src/document-model/gen/document-model.js.map +0 -1
- package/dist/src/document-model/gen/header/actions.d.ts +0 -10
- package/dist/src/document-model/gen/header/actions.d.ts.map +0 -1
- package/dist/src/document-model/gen/header/actions.js +0 -2
- package/dist/src/document-model/gen/header/actions.js.map +0 -1
- package/dist/src/document-model/gen/header/creators.d.ts +0 -9
- package/dist/src/document-model/gen/header/creators.d.ts.map +0 -1
- package/dist/src/document-model/gen/header/creators.js +0 -10
- package/dist/src/document-model/gen/header/creators.js.map +0 -1
- package/dist/src/document-model/gen/header/object.d.ts +0 -13
- package/dist/src/document-model/gen/header/object.d.ts.map +0 -1
- package/dist/src/document-model/gen/header/object.js +0 -23
- package/dist/src/document-model/gen/header/object.js.map +0 -1
- package/dist/src/document-model/gen/header/operations.d.ts +0 -11
- package/dist/src/document-model/gen/header/operations.d.ts.map +0 -1
- package/dist/src/document-model/gen/header/operations.js +0 -2
- package/dist/src/document-model/gen/header/operations.js.map +0 -1
- package/dist/src/document-model/gen/module/actions.d.ts +0 -9
- package/dist/src/document-model/gen/module/actions.d.ts.map +0 -1
- package/dist/src/document-model/gen/module/actions.js +0 -2
- package/dist/src/document-model/gen/module/actions.js.map +0 -1
- package/dist/src/document-model/gen/module/creators.d.ts +0 -8
- package/dist/src/document-model/gen/module/creators.d.ts.map +0 -1
- package/dist/src/document-model/gen/module/creators.js +0 -9
- package/dist/src/document-model/gen/module/creators.js.map +0 -1
- package/dist/src/document-model/gen/module/object.d.ts +0 -12
- package/dist/src/document-model/gen/module/object.d.ts.map +0 -1
- package/dist/src/document-model/gen/module/object.js +0 -20
- package/dist/src/document-model/gen/module/object.js.map +0 -1
- package/dist/src/document-model/gen/module/operations.d.ts +0 -10
- package/dist/src/document-model/gen/module/operations.d.ts.map +0 -1
- package/dist/src/document-model/gen/module/operations.js +0 -2
- package/dist/src/document-model/gen/module/operations.js.map +0 -1
- package/dist/src/document-model/gen/object.d.ts +0 -29
- package/dist/src/document-model/gen/object.d.ts.map +0 -1
- package/dist/src/document-model/gen/object.js +0 -46
- package/dist/src/document-model/gen/object.js.map +0 -1
- package/dist/src/document-model/gen/operation/actions.d.ts +0 -14
- package/dist/src/document-model/gen/operation/actions.d.ts.map +0 -1
- package/dist/src/document-model/gen/operation/actions.js +0 -2
- package/dist/src/document-model/gen/operation/actions.js.map +0 -1
- package/dist/src/document-model/gen/operation/creators.d.ts +0 -13
- package/dist/src/document-model/gen/operation/creators.d.ts.map +0 -1
- package/dist/src/document-model/gen/operation/creators.js +0 -20
- package/dist/src/document-model/gen/operation/creators.js.map +0 -1
- package/dist/src/document-model/gen/operation/object.d.ts +0 -18
- package/dist/src/document-model/gen/operation/object.d.ts.map +0 -1
- package/dist/src/document-model/gen/operation/object.js +0 -35
- package/dist/src/document-model/gen/operation/object.js.map +0 -1
- package/dist/src/document-model/gen/operation/operations.d.ts +0 -15
- package/dist/src/document-model/gen/operation/operations.d.ts.map +0 -1
- package/dist/src/document-model/gen/operation/operations.js +0 -2
- package/dist/src/document-model/gen/operation/operations.js.map +0 -1
- package/dist/src/document-model/gen/operation-error/actions.d.ts +0 -11
- package/dist/src/document-model/gen/operation-error/actions.d.ts.map +0 -1
- package/dist/src/document-model/gen/operation-error/actions.js +0 -2
- package/dist/src/document-model/gen/operation-error/actions.js.map +0 -1
- package/dist/src/document-model/gen/operation-error/creators.d.ts +0 -10
- package/dist/src/document-model/gen/operation-error/creators.d.ts.map +0 -1
- package/dist/src/document-model/gen/operation-error/creators.js +0 -17
- package/dist/src/document-model/gen/operation-error/creators.js.map +0 -1
- package/dist/src/document-model/gen/operation-error/object.d.ts +0 -15
- package/dist/src/document-model/gen/operation-error/object.d.ts.map +0 -1
- package/dist/src/document-model/gen/operation-error/object.js +0 -26
- package/dist/src/document-model/gen/operation-error/object.js.map +0 -1
- package/dist/src/document-model/gen/operation-error/operations.d.ts +0 -12
- package/dist/src/document-model/gen/operation-error/operations.d.ts.map +0 -1
- package/dist/src/document-model/gen/operation-error/operations.js +0 -2
- package/dist/src/document-model/gen/operation-error/operations.js.map +0 -1
- package/dist/src/document-model/gen/operation-example/actions.d.ts +0 -8
- package/dist/src/document-model/gen/operation-example/actions.d.ts.map +0 -1
- package/dist/src/document-model/gen/operation-example/actions.js +0 -2
- package/dist/src/document-model/gen/operation-example/actions.js.map +0 -1
- package/dist/src/document-model/gen/operation-example/creators.d.ts +0 -7
- package/dist/src/document-model/gen/operation-example/creators.d.ts.map +0 -1
- package/dist/src/document-model/gen/operation-example/creators.js +0 -14
- package/dist/src/document-model/gen/operation-example/creators.js.map +0 -1
- package/dist/src/document-model/gen/operation-example/object.d.ts +0 -12
- package/dist/src/document-model/gen/operation-example/object.d.ts.map +0 -1
- package/dist/src/document-model/gen/operation-example/object.js +0 -17
- package/dist/src/document-model/gen/operation-example/object.js.map +0 -1
- package/dist/src/document-model/gen/operation-example/operations.d.ts +0 -9
- package/dist/src/document-model/gen/operation-example/operations.d.ts.map +0 -1
- package/dist/src/document-model/gen/operation-example/operations.js +0 -2
- package/dist/src/document-model/gen/operation-example/operations.js.map +0 -1
- package/dist/src/document-model/gen/reducer.d.ts +0 -5
- package/dist/src/document-model/gen/reducer.d.ts.map +0 -1
- package/dist/src/document-model/gen/reducer.js +0 -193
- package/dist/src/document-model/gen/reducer.js.map +0 -1
- package/dist/src/document-model/gen/schema/types.d.ts +0 -458
- package/dist/src/document-model/gen/schema/types.d.ts.map +0 -1
- package/dist/src/document-model/gen/schema/types.js.map +0 -1
- package/dist/src/document-model/gen/schema/zod.d.ts +0 -454
- package/dist/src/document-model/gen/schema/zod.d.ts.map +0 -1
- package/dist/src/document-model/gen/schema/zod.js.map +0 -1
- package/dist/src/document-model/gen/state/actions.d.ts +0 -10
- package/dist/src/document-model/gen/state/actions.d.ts.map +0 -1
- package/dist/src/document-model/gen/state/actions.js +0 -2
- package/dist/src/document-model/gen/state/actions.js.map +0 -1
- package/dist/src/document-model/gen/state/creators.d.ts +0 -9
- package/dist/src/document-model/gen/state/creators.d.ts.map +0 -1
- package/dist/src/document-model/gen/state/creators.js +0 -10
- package/dist/src/document-model/gen/state/creators.js.map +0 -1
- package/dist/src/document-model/gen/state/object.d.ts +0 -13
- package/dist/src/document-model/gen/state/object.d.ts.map +0 -1
- package/dist/src/document-model/gen/state/object.js +0 -23
- package/dist/src/document-model/gen/state/object.js.map +0 -1
- package/dist/src/document-model/gen/state/operations.d.ts +0 -11
- package/dist/src/document-model/gen/state/operations.d.ts.map +0 -1
- package/dist/src/document-model/gen/state/operations.js +0 -2
- package/dist/src/document-model/gen/state/operations.js.map +0 -1
- package/dist/src/document-model/gen/types.d.ts +0 -7
- package/dist/src/document-model/gen/types.d.ts.map +0 -1
- package/dist/src/document-model/gen/types.js.map +0 -1
- package/dist/src/document-model/gen/utils.d.ts +0 -11
- package/dist/src/document-model/gen/utils.d.ts.map +0 -1
- package/dist/src/document-model/gen/utils.js +0 -33
- package/dist/src/document-model/gen/utils.js.map +0 -1
- package/dist/src/document-model/gen/versioning/actions.d.ts +0 -9
- package/dist/src/document-model/gen/versioning/actions.d.ts.map +0 -1
- package/dist/src/document-model/gen/versioning/actions.js +0 -2
- package/dist/src/document-model/gen/versioning/actions.js.map +0 -1
- package/dist/src/document-model/gen/versioning/creators.d.ts +0 -8
- package/dist/src/document-model/gen/versioning/creators.d.ts.map +0 -1
- package/dist/src/document-model/gen/versioning/creators.js +0 -13
- package/dist/src/document-model/gen/versioning/creators.js.map +0 -1
- package/dist/src/document-model/gen/versioning/object.d.ts +0 -13
- package/dist/src/document-model/gen/versioning/object.d.ts.map +0 -1
- package/dist/src/document-model/gen/versioning/object.js +0 -20
- package/dist/src/document-model/gen/versioning/object.js.map +0 -1
- package/dist/src/document-model/gen/versioning/operations.d.ts +0 -10
- package/dist/src/document-model/gen/versioning/operations.d.ts.map +0 -1
- package/dist/src/document-model/gen/versioning/operations.js +0 -2
- package/dist/src/document-model/gen/versioning/operations.js.map +0 -1
- package/dist/test/document/object.test.d.ts +0 -2
- package/dist/test/document/object.test.d.ts.map +0 -1
- package/dist/test/document/object.test.js +0 -13
- package/dist/test/document/object.test.js.map +0 -1
- package/dist/test/document-model/object.test.d.ts +0 -2
- package/dist/test/document-model/object.test.d.ts.map +0 -1
- package/dist/test/document-model/object.test.js +0 -243
- package/dist/test/document-model/object.test.js.map +0 -1
- /package/dist/src/{document-model/gen/schema → core}/types.js +0 -0
- /package/dist/{src/document-model/gen → test}/types.js +0 -0
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { type PHDocumentHeader } from "#document/ph-types.js";
|
|
2
|
-
import { baseReducer } from "../reducer.js";
|
|
3
|
-
import { type UndoAction, type UndoRedoAction } from "../schema/types.js";
|
|
4
|
-
import { type SignalDispatch } from "../signal.js";
|
|
5
|
-
import { type BaseAction, type CreateState, type DocumentAction, type DocumentOperations, type DocumentOperationsIgnoreMap, type ExtendedState, type ExtendedStateFromDocument, type GlobalStateFromDocument, type LocalStateFromDocument, type MappedOperation, type Operation, type OperationScope, type OperationsFromDocument, type PartialState, type PHDocument, type Reducer, type ReducerOptions, type StateReducer } from "../types.js";
|
|
6
|
-
export declare function isNoopOperation<TOp extends {
|
|
7
|
-
type: string;
|
|
8
|
-
skip: number;
|
|
9
|
-
hash: string;
|
|
10
|
-
}>(op: Partial<TOp>): boolean;
|
|
11
|
-
export declare function isUndoRedo(action: BaseAction<string, unknown>): action is UndoRedoAction;
|
|
12
|
-
export declare function isUndo(action: BaseAction<string, unknown>): action is UndoAction;
|
|
13
|
-
export declare function isDocumentAction(action: BaseAction<string, unknown>): action is DocumentAction;
|
|
14
|
-
/**
|
|
15
|
-
* Helper function to be used by action creators.
|
|
16
|
-
*
|
|
17
|
-
* @remarks
|
|
18
|
-
* Creates an action with the given type and input properties. The input
|
|
19
|
-
* properties default to an empty object.
|
|
20
|
-
*
|
|
21
|
-
* @typeParam A - Type of the action to be returned.
|
|
22
|
-
*
|
|
23
|
-
* @param type - The type of the action.
|
|
24
|
-
* @param input - The input properties of the action.
|
|
25
|
-
* @param attachments - The attachments included in the action.
|
|
26
|
-
* @param validator - The validator to use for the input properties.
|
|
27
|
-
* @param scope - The scope of the action, can either be 'global' or 'local'.
|
|
28
|
-
* @param skip - The number of operations to skip before this new action is applied.
|
|
29
|
-
*
|
|
30
|
-
* @throws Error if the type is empty or not a string.
|
|
31
|
-
*
|
|
32
|
-
* @returns The new action.
|
|
33
|
-
*/
|
|
34
|
-
export declare function createAction<TAction extends BaseAction<string, unknown>>(type: TAction["type"], input?: TAction["input"], attachments?: TAction["attachments"], validator?: () => {
|
|
35
|
-
parse(v: unknown): TAction["input"];
|
|
36
|
-
}, scope?: OperationScope): TAction;
|
|
37
|
-
/**
|
|
38
|
-
* Helper function to create a document model reducer.
|
|
39
|
-
*
|
|
40
|
-
* @remarks
|
|
41
|
-
* This function creates a new reducer that wraps the provided `reducer` with
|
|
42
|
-
* `documentReducer`, adding support for document actions:
|
|
43
|
-
* - `SET_NAME`
|
|
44
|
-
* - `UNDO`
|
|
45
|
-
* - `REDO`
|
|
46
|
-
* - `PRUNE`
|
|
47
|
-
*
|
|
48
|
-
* It also updates the document-related attributes on every operation.
|
|
49
|
-
*
|
|
50
|
-
* @param reducer - The custom reducer to wrap.
|
|
51
|
-
* @param documentReducer - The document reducer to use.
|
|
52
|
-
*
|
|
53
|
-
* @returns The new reducer.
|
|
54
|
-
*/
|
|
55
|
-
export declare function createReducer<TDocument extends PHDocument>(stateReducer: StateReducer<TDocument>, documentReducer?: typeof baseReducer): Reducer<TDocument>;
|
|
56
|
-
export declare function baseCreateExtendedState<TDocument extends PHDocument>(initialState?: Partial<ExtendedState<PartialState<GlobalStateFromDocument<TDocument>>, PartialState<LocalStateFromDocument<TDocument>>>>, createState?: CreateState<TDocument>): ExtendedStateFromDocument<TDocument>;
|
|
57
|
-
/**
|
|
58
|
-
* Important note: it is the responsibility of the caller to set the document type
|
|
59
|
-
* on the header.
|
|
60
|
-
*/
|
|
61
|
-
export declare function baseCreateDocument<TDocument extends PHDocument>(initialState?: Partial<ExtendedStateFromDocument<TDocument>>, createState?: CreateState<TDocument>): TDocument;
|
|
62
|
-
export declare function hashDocumentStateForScope(document: {
|
|
63
|
-
state: {
|
|
64
|
-
[key in OperationScope]: unknown;
|
|
65
|
-
};
|
|
66
|
-
}, scope?: OperationScope): string;
|
|
67
|
-
export declare function readOnly<T>(value: T): Readonly<T>;
|
|
68
|
-
/**
|
|
69
|
-
* Maps skipped operations in an array of operations.
|
|
70
|
-
* Skipped operations are operations that are ignored during processing.
|
|
71
|
-
* @param operations - The array of operations to map.
|
|
72
|
-
* @param skippedHeadOperations - The number of operations to skip at the head of the array of operations.
|
|
73
|
-
* @returns An array of mapped operations with ignore flag indicating if the operation is skipped.
|
|
74
|
-
* @throws Error if the operation index is invalid and there are missing operations.
|
|
75
|
-
*/
|
|
76
|
-
export declare function mapSkippedOperations(operations: Operation[], skippedHeadOperations?: number): MappedOperation[];
|
|
77
|
-
export declare function sortMappedOperations(operations: DocumentOperationsIgnoreMap): MappedOperation<import("../types.js").Action<string, unknown, OperationScope>>[];
|
|
78
|
-
export declare function getDocumentLastModified(document: PHDocument): string;
|
|
79
|
-
export declare function replayOperations<TDocument extends PHDocument>(initialState: ExtendedStateFromDocument<TDocument>, clearedOperations: OperationsFromDocument<TDocument>, stateReducer: StateReducer<TDocument>, dispatch?: SignalDispatch, header?: PHDocumentHeader, documentReducer?: typeof baseReducer, skipHeaderOperations?: SkipHeaderOperations, options?: ReducerOptions): TDocument;
|
|
80
|
-
export type SkipHeaderOperations = Partial<Record<OperationScope, number>>;
|
|
81
|
-
export type ReplayDocumentOptions = {
|
|
82
|
-
checkHashes?: boolean;
|
|
83
|
-
reuseOperationResultingState?: boolean;
|
|
84
|
-
operationResultingStateParser?: <TState>(state: string) => TState;
|
|
85
|
-
};
|
|
86
|
-
export declare function replayDocument<TDocument extends PHDocument>(initialState: ExtendedStateFromDocument<TDocument>, operations: DocumentOperations, reducer: Reducer<TDocument>, dispatch?: SignalDispatch, header?: PHDocumentHeader, skipHeaderOperations?: SkipHeaderOperations, options?: ReplayDocumentOptions): TDocument;
|
|
87
|
-
export declare function parseResultingState<TState>(state: string | null | undefined): TState;
|
|
88
|
-
//# sourceMappingURL=base.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/document/utils/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAY9D,OAAO,EAAE,WAAW,EAAgB,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAEL,KAAK,UAAU,EAEf,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,2BAA2B,EAChC,KAAK,aAAa,EAClB,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,KAAK,cAAc,EACnB,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AAQrB,wBAAgB,eAAe,CAC7B,GAAG,SAAS;IACV,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,EACD,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAO3B;AAED,wBAAgB,UAAU,CACxB,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,MAAM,IAAI,cAAc,CAE1B;AAED,wBAAgB,MAAM,CACpB,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,MAAM,IAAI,UAAU,CAEtB;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,MAAM,IAAI,cAAc,CAE1B;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,YAAY,CAAC,OAAO,SAAS,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,EACtE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EACrB,KAAK,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,EACxB,WAAW,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,EACpC,SAAS,CAAC,EAAE,MAAM;IAAE,KAAK,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,EACzD,KAAK,GAAE,cAAyB,GAC/B,OAAO,CA8BT;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAAC,SAAS,SAAS,UAAU,EACxD,YAAY,EAAE,YAAY,CAAC,SAAS,CAAC,EACrC,eAAe,qBAAc,GAC5B,OAAO,CAAC,SAAS,CAAC,CAWpB;AAED,wBAAgB,uBAAuB,CAAC,SAAS,SAAS,UAAU,EAClE,YAAY,CAAC,EAAE,OAAO,CACpB,aAAa,CACX,YAAY,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,EAChD,YAAY,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAChD,CACF,EACD,WAAW,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,GACnC,yBAAyB,CAAC,SAAS,CAAC,CAStC;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,SAAS,UAAU,EAC7D,YAAY,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC,EAC5D,WAAW,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,GACnC,SAAS,CAeX;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE;IACR,KAAK,EAAE;SACJ,GAAG,IAAI,cAAc,GAAG,OAAO;KACjC,CAAC;CACH,EACD,KAAK,GAAE,cAAyB,UAIjC;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAEjD;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,SAAS,EAAE,EACvB,qBAAqB,CAAC,EAAE,MAAM,GAC7B,eAAe,EAAE,CAsCnB;AAID,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,2BAA2B,oFAQ3E;AAID,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,UAAU,UAQ3D;AAKD,wBAAgB,gBAAgB,CAAC,SAAS,SAAS,UAAU,EAC3D,YAAY,EAAE,yBAAyB,CAAC,SAAS,CAAC,EAClD,iBAAiB,EAAE,sBAAsB,CAAC,SAAS,CAAC,EACpD,YAAY,EAAE,YAAY,CAAC,SAAS,CAAC,EACrC,QAAQ,CAAC,EAAE,cAAc,EACzB,MAAM,CAAC,EAAE,gBAAgB,EACzB,eAAe,qBAAc,EAC7B,oBAAoB,GAAE,oBAAyB,EAC/C,OAAO,CAAC,EAAE,cAAc,GACvB,SAAS,CAcX;AAED,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;AAE3E,MAAM,MAAM,qBAAqB,GAAG;IAGlC,WAAW,CAAC,EAAE,OAAO,CAAC;IAGtB,4BAA4B,CAAC,EAAE,OAAO,CAAC;IAEvC,6BAA6B,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACnE,CAAC;AAKF,wBAAgB,cAAc,CAAC,SAAS,SAAS,UAAU,EACzD,YAAY,EAAE,yBAAyB,CAAC,SAAS,CAAC,EAClD,UAAU,EAAE,kBAAkB,EAC9B,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,EAC3B,QAAQ,CAAC,EAAE,cAAc,EACzB,MAAM,CAAC,EAAE,gBAAgB,EACzB,oBAAoB,GAAE,oBAAyB,EAC/C,OAAO,CAAC,EAAE,qBAAqB,GAC9B,SAAS,CAyJX;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EACxC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC/B,MAAM,CASR"}
|
|
@@ -1,335 +0,0 @@
|
|
|
1
|
-
import { hash } from "#utils/env";
|
|
2
|
-
import stringifyJson from "safe-stable-stringify";
|
|
3
|
-
import { ZodError } from "zod";
|
|
4
|
-
import { LOAD_STATE, NOOP, PRUNE, REDO, SET_NAME, UNDO, } from "../actions/types.js";
|
|
5
|
-
import { baseReducer, updateHeader } from "../reducer.js";
|
|
6
|
-
import { sortOperations } from "./document-helpers.js";
|
|
7
|
-
import { InvalidActionInputError, InvalidActionInputZodError, } from "./errors.js";
|
|
8
|
-
import { createUnsignedHeader } from "./header.js";
|
|
9
|
-
export function isNoopOperation(op) {
|
|
10
|
-
return (op.type === NOOP &&
|
|
11
|
-
op.skip !== undefined &&
|
|
12
|
-
op.skip > 0 &&
|
|
13
|
-
op.hash !== undefined);
|
|
14
|
-
}
|
|
15
|
-
export function isUndoRedo(action) {
|
|
16
|
-
return [UNDO, REDO].includes(action.type);
|
|
17
|
-
}
|
|
18
|
-
export function isUndo(action) {
|
|
19
|
-
return action.type === UNDO;
|
|
20
|
-
}
|
|
21
|
-
export function isDocumentAction(action) {
|
|
22
|
-
return [SET_NAME, UNDO, REDO, PRUNE, LOAD_STATE].includes(action.type);
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Helper function to be used by action creators.
|
|
26
|
-
*
|
|
27
|
-
* @remarks
|
|
28
|
-
* Creates an action with the given type and input properties. The input
|
|
29
|
-
* properties default to an empty object.
|
|
30
|
-
*
|
|
31
|
-
* @typeParam A - Type of the action to be returned.
|
|
32
|
-
*
|
|
33
|
-
* @param type - The type of the action.
|
|
34
|
-
* @param input - The input properties of the action.
|
|
35
|
-
* @param attachments - The attachments included in the action.
|
|
36
|
-
* @param validator - The validator to use for the input properties.
|
|
37
|
-
* @param scope - The scope of the action, can either be 'global' or 'local'.
|
|
38
|
-
* @param skip - The number of operations to skip before this new action is applied.
|
|
39
|
-
*
|
|
40
|
-
* @throws Error if the type is empty or not a string.
|
|
41
|
-
*
|
|
42
|
-
* @returns The new action.
|
|
43
|
-
*/
|
|
44
|
-
export function createAction(type, input, attachments, validator, scope = "global") {
|
|
45
|
-
if (!type) {
|
|
46
|
-
throw new Error("Empty action type");
|
|
47
|
-
}
|
|
48
|
-
if (typeof type !== "string") {
|
|
49
|
-
throw new Error(`Invalid action type: ${JSON.stringify(type)}`);
|
|
50
|
-
}
|
|
51
|
-
const action = {
|
|
52
|
-
type,
|
|
53
|
-
input,
|
|
54
|
-
scope,
|
|
55
|
-
};
|
|
56
|
-
if (attachments) {
|
|
57
|
-
action.attachments = attachments;
|
|
58
|
-
}
|
|
59
|
-
try {
|
|
60
|
-
validator?.().parse(action.input);
|
|
61
|
-
}
|
|
62
|
-
catch (error) {
|
|
63
|
-
if (error instanceof ZodError) {
|
|
64
|
-
throw new InvalidActionInputZodError(error.issues);
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
throw new InvalidActionInputError(error);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
return action;
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Helper function to create a document model reducer.
|
|
74
|
-
*
|
|
75
|
-
* @remarks
|
|
76
|
-
* This function creates a new reducer that wraps the provided `reducer` with
|
|
77
|
-
* `documentReducer`, adding support for document actions:
|
|
78
|
-
* - `SET_NAME`
|
|
79
|
-
* - `UNDO`
|
|
80
|
-
* - `REDO`
|
|
81
|
-
* - `PRUNE`
|
|
82
|
-
*
|
|
83
|
-
* It also updates the document-related attributes on every operation.
|
|
84
|
-
*
|
|
85
|
-
* @param reducer - The custom reducer to wrap.
|
|
86
|
-
* @param documentReducer - The document reducer to use.
|
|
87
|
-
*
|
|
88
|
-
* @returns The new reducer.
|
|
89
|
-
*/
|
|
90
|
-
export function createReducer(stateReducer, documentReducer = baseReducer) {
|
|
91
|
-
const reducer = (document, action, dispatch, options) => {
|
|
92
|
-
return documentReducer(document, action, stateReducer, dispatch, options);
|
|
93
|
-
};
|
|
94
|
-
return reducer;
|
|
95
|
-
}
|
|
96
|
-
export function baseCreateExtendedState(initialState, createState) {
|
|
97
|
-
return {
|
|
98
|
-
state: createState?.(initialState?.state) ??
|
|
99
|
-
(initialState?.state ?? {
|
|
100
|
-
global: {},
|
|
101
|
-
local: {},
|
|
102
|
-
}),
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Important note: it is the responsibility of the caller to set the document type
|
|
107
|
-
* on the header.
|
|
108
|
-
*/
|
|
109
|
-
export function baseCreateDocument(initialState, createState) {
|
|
110
|
-
const state = baseCreateExtendedState(initialState, createState);
|
|
111
|
-
const header = createUnsignedHeader();
|
|
112
|
-
return {
|
|
113
|
-
...state,
|
|
114
|
-
header,
|
|
115
|
-
initialState: state,
|
|
116
|
-
operations: { global: [], local: [] },
|
|
117
|
-
clipboard: [],
|
|
118
|
-
attachments: {},
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
export function hashDocumentStateForScope(document, scope = "global") {
|
|
122
|
-
const stateString = stringifyJson(document.state[scope] || "");
|
|
123
|
-
return hash(stateString);
|
|
124
|
-
}
|
|
125
|
-
export function readOnly(value) {
|
|
126
|
-
return Object.freeze(value);
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Maps skipped operations in an array of operations.
|
|
130
|
-
* Skipped operations are operations that are ignored during processing.
|
|
131
|
-
* @param operations - The array of operations to map.
|
|
132
|
-
* @param skippedHeadOperations - The number of operations to skip at the head of the array of operations.
|
|
133
|
-
* @returns An array of mapped operations with ignore flag indicating if the operation is skipped.
|
|
134
|
-
* @throws Error if the operation index is invalid and there are missing operations.
|
|
135
|
-
*/
|
|
136
|
-
export function mapSkippedOperations(operations, skippedHeadOperations) {
|
|
137
|
-
const ops = [...operations];
|
|
138
|
-
let skipped = skippedHeadOperations || 0;
|
|
139
|
-
let latestOpIndex = ops.length > 0 ? ops[ops.length - 1].index : 0;
|
|
140
|
-
const scopeOpsWithIgnore = [];
|
|
141
|
-
for (const operation of ops.reverse()) {
|
|
142
|
-
if (skipped > 0) {
|
|
143
|
-
const operationsDiff = latestOpIndex - operation.index;
|
|
144
|
-
skipped -= operationsDiff;
|
|
145
|
-
}
|
|
146
|
-
if (skipped < 0) {
|
|
147
|
-
throw new Error("Invalid operation index, missing operations");
|
|
148
|
-
}
|
|
149
|
-
const mappedOp = {
|
|
150
|
-
ignore: skipped > 0,
|
|
151
|
-
operation,
|
|
152
|
-
};
|
|
153
|
-
// here we add 1 to the skip number because we want to get the number of
|
|
154
|
-
// operations that we want to move the pointer back to get the latest valid operation
|
|
155
|
-
// operation.skip = 1 means that we want to move the pointer back 2 operations to get to the latest valid operation
|
|
156
|
-
const operationSkip = operation.skip > 0 ? operation.skip + 1 : 0;
|
|
157
|
-
if (operationSkip > 0 && operationSkip > skipped) {
|
|
158
|
-
const skipDiff = operationSkip - skipped;
|
|
159
|
-
skipped = skipped + skipDiff;
|
|
160
|
-
}
|
|
161
|
-
latestOpIndex = operation.index;
|
|
162
|
-
scopeOpsWithIgnore.push(mappedOp);
|
|
163
|
-
}
|
|
164
|
-
return scopeOpsWithIgnore.reverse();
|
|
165
|
-
}
|
|
166
|
-
// Flattens the mapped operations (with ignore flag) from all scopes into
|
|
167
|
-
// a single array and sorts them by timestamp
|
|
168
|
-
export function sortMappedOperations(operations) {
|
|
169
|
-
return Object.values(operations)
|
|
170
|
-
.flatMap((array) => array)
|
|
171
|
-
.sort((a, b) => new Date(a.operation.timestamp).getTime() -
|
|
172
|
-
new Date(b.operation.timestamp).getTime());
|
|
173
|
-
}
|
|
174
|
-
// gets the last modified timestamp of a document from§
|
|
175
|
-
// it's operations, falling back to the initial state
|
|
176
|
-
export function getDocumentLastModified(document) {
|
|
177
|
-
const sortedOperations = sortOperations(Object.values(document.operations).flat());
|
|
178
|
-
return (sortedOperations.at(-1).timestamp || document.header.lastModifiedAtUtcIso);
|
|
179
|
-
}
|
|
180
|
-
// Runs the operations on the initial data using the
|
|
181
|
-
// provided reducer, wrapped with the document reducer.
|
|
182
|
-
// This rebuilds the document according to the provided actions.
|
|
183
|
-
export function replayOperations(initialState, clearedOperations, stateReducer, dispatch, header, documentReducer = baseReducer, skipHeaderOperations = {}, options) {
|
|
184
|
-
// wraps the provided custom reducer with the
|
|
185
|
-
// base document reducer
|
|
186
|
-
const wrappedReducer = createReducer(stateReducer, documentReducer);
|
|
187
|
-
return replayDocument(initialState, clearedOperations, wrappedReducer, dispatch, header, skipHeaderOperations, options);
|
|
188
|
-
}
|
|
189
|
-
// Runs the operations on the initial data using the
|
|
190
|
-
// provided document reducer.
|
|
191
|
-
// This rebuilds the document according to the provided actions.
|
|
192
|
-
export function replayDocument(initialState, operations, reducer, dispatch, header, skipHeaderOperations = {}, options) {
|
|
193
|
-
const { checkHashes = true, reuseOperationResultingState, operationResultingStateParser = parseResultingState, } = options || {};
|
|
194
|
-
let documentState = initialState;
|
|
195
|
-
const operationsToReplay = [];
|
|
196
|
-
const initialOperations = {
|
|
197
|
-
global: [],
|
|
198
|
-
local: [],
|
|
199
|
-
};
|
|
200
|
-
// if operation resulting state is to be used then
|
|
201
|
-
// looks for the last operation with state of each
|
|
202
|
-
// scope to use it as the starting point and only
|
|
203
|
-
// replay operations that follow it
|
|
204
|
-
if (reuseOperationResultingState) {
|
|
205
|
-
for (const [scope, scopeOperations] of Object.entries(operations)) {
|
|
206
|
-
const index = scopeOperations.findLastIndex((s) => !!s.resultingState);
|
|
207
|
-
if (index < 0) {
|
|
208
|
-
operationsToReplay.push(...scopeOperations);
|
|
209
|
-
continue;
|
|
210
|
-
}
|
|
211
|
-
const opWithState = scopeOperations[index];
|
|
212
|
-
if (!opWithState.resultingState)
|
|
213
|
-
continue;
|
|
214
|
-
try {
|
|
215
|
-
const scopeState = operationResultingStateParser(opWithState.resultingState);
|
|
216
|
-
documentState = {
|
|
217
|
-
...documentState,
|
|
218
|
-
state: {
|
|
219
|
-
...documentState.state,
|
|
220
|
-
// TODO how to deal with attachments?
|
|
221
|
-
[scope]: scopeState,
|
|
222
|
-
},
|
|
223
|
-
};
|
|
224
|
-
initialOperations[scope].push(...scopeOperations.slice(0, index + 1));
|
|
225
|
-
operationsToReplay.push(...scopeOperations.slice(index + 1));
|
|
226
|
-
}
|
|
227
|
-
catch {
|
|
228
|
-
/* if parsing fails then keeps replays all scope operations */
|
|
229
|
-
operationsToReplay.push(...scopeOperations);
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
else {
|
|
234
|
-
operationsToReplay.push(...Object.values(operations).flat());
|
|
235
|
-
}
|
|
236
|
-
// builds a new document from the initial data
|
|
237
|
-
const document = baseCreateDocument(documentState);
|
|
238
|
-
if (header?.slug) {
|
|
239
|
-
document.header.slug = header.slug;
|
|
240
|
-
}
|
|
241
|
-
document.initialState = initialState;
|
|
242
|
-
document.operations = initialOperations;
|
|
243
|
-
let result = document;
|
|
244
|
-
// if there are operations left without resulting state
|
|
245
|
-
// then replays them
|
|
246
|
-
if (operationsToReplay.length) {
|
|
247
|
-
result = operationsToReplay.reduce((document, operation) => {
|
|
248
|
-
const doc = reducer(document, operation, dispatch, {
|
|
249
|
-
skip: operation.skip,
|
|
250
|
-
ignoreSkipOperations: true,
|
|
251
|
-
reuseHash: !checkHashes,
|
|
252
|
-
});
|
|
253
|
-
return doc;
|
|
254
|
-
}, document);
|
|
255
|
-
}
|
|
256
|
-
// if not then updates the document header according
|
|
257
|
-
// to the latest operation of each scope
|
|
258
|
-
else {
|
|
259
|
-
for (const scopeOperations of Object.values(initialOperations)) {
|
|
260
|
-
const lastOperation = scopeOperations.at(-1);
|
|
261
|
-
if (lastOperation) {
|
|
262
|
-
result = updateHeader(result, lastOperation);
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
// if hash generation was skipped then checks if the hash
|
|
267
|
-
// of each scope matches the hash of last operation
|
|
268
|
-
if (!checkHashes) {
|
|
269
|
-
for (const scope of Object.keys(result.state)) {
|
|
270
|
-
for (let i = operationsToReplay.length - 1; i >= 0; i--) {
|
|
271
|
-
const operation = operationsToReplay[i];
|
|
272
|
-
if (operation.scope !== scope) {
|
|
273
|
-
continue;
|
|
274
|
-
}
|
|
275
|
-
if (operation.hash !== hashDocumentStateForScope(result, scope)) {
|
|
276
|
-
throw new Error(`Hash mismatch for scope ${scope}`);
|
|
277
|
-
}
|
|
278
|
-
else {
|
|
279
|
-
break;
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
// reuses operation timestamp if provided
|
|
285
|
-
const resultOperations = Object.keys(result.operations).reduce((acc, key) => {
|
|
286
|
-
const scope = key;
|
|
287
|
-
return {
|
|
288
|
-
...acc,
|
|
289
|
-
[scope]: [
|
|
290
|
-
...result.operations[scope].map((operation, index) => {
|
|
291
|
-
return {
|
|
292
|
-
...operation,
|
|
293
|
-
timestamp: operations[scope][index]?.timestamp ?? operation.timestamp,
|
|
294
|
-
};
|
|
295
|
-
}),
|
|
296
|
-
],
|
|
297
|
-
};
|
|
298
|
-
}, { global: [], local: [] });
|
|
299
|
-
// gets the last modified timestamp from the latest operation
|
|
300
|
-
const lastModified = header
|
|
301
|
-
? header.lastModifiedAtUtcIso
|
|
302
|
-
: Object.values(resultOperations).reduce((acc, curr) => {
|
|
303
|
-
const operation = curr.at(-1);
|
|
304
|
-
if (operation) {
|
|
305
|
-
if (operation.timestamp > acc) {
|
|
306
|
-
return operation.timestamp;
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
return acc;
|
|
310
|
-
}, document.header.lastModifiedAtUtcIso);
|
|
311
|
-
if (header) {
|
|
312
|
-
result.header = {
|
|
313
|
-
...header,
|
|
314
|
-
revision: result.header.revision,
|
|
315
|
-
lastModifiedAtUtcIso: lastModified,
|
|
316
|
-
};
|
|
317
|
-
}
|
|
318
|
-
return {
|
|
319
|
-
...result,
|
|
320
|
-
operations: resultOperations,
|
|
321
|
-
};
|
|
322
|
-
}
|
|
323
|
-
export function parseResultingState(state) {
|
|
324
|
-
const stateType = typeof state;
|
|
325
|
-
if (stateType === "string") {
|
|
326
|
-
return JSON.parse(state);
|
|
327
|
-
}
|
|
328
|
-
else if (stateType === "object") {
|
|
329
|
-
return state;
|
|
330
|
-
}
|
|
331
|
-
else {
|
|
332
|
-
throw new Error(`Providing resulting state is of type: ${stateType}`);
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
//# sourceMappingURL=base.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../src/document/utils/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { Buffer } from "buffer";
|
|
2
|
-
/**
|
|
3
|
-
* This should never be linked to directly. Instead, use the `#utils/misc`
|
|
4
|
-
* module. This will automatically pick the correct implementation for the
|
|
5
|
-
* current environment. See package.json for the mapping.
|
|
6
|
-
*
|
|
7
|
-
* Generates a secure UUID.
|
|
8
|
-
*/
|
|
9
|
-
export declare function generateUUID(): `${string}-${string}-${string}-${string}-${string}`;
|
|
10
|
-
export declare function writeFile(path: string, name: string, stream: Uint8Array): Promise<string>;
|
|
11
|
-
export declare function readFile(path: string): void;
|
|
12
|
-
export declare function fetchFile(url: string): Promise<{
|
|
13
|
-
data: Buffer;
|
|
14
|
-
mimeType?: string;
|
|
15
|
-
}>;
|
|
16
|
-
export declare const getFile: (file: string) => Promise<void>;
|
|
17
|
-
export declare const hash: (data: string | Uint8Array | ArrayBufferView | DataView, algorithm?: string) => string;
|
|
18
|
-
//# sourceMappingURL=browser.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../../src/document/utils/browser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAKrC;;;;;;GAMG;AACH,wBAAgB,YAAY,wDAO3B;AAED,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,MAAM,CAAC,CAEjB;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,QAEpC;AAED,wBAAgB,SAAS,CACvB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAE9C;AAED,eAAO,MAAM,OAAO,GAAU,MAAM,MAAM,kBAEzC,CAAC;AAEF,eAAO,MAAM,IAAI,GACf,MAAM,MAAM,GAAG,UAAU,GAAG,eAAe,GAAG,QAAQ,EACtD,kBAAkB,WAQnB,CAAC"}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { createHash as createSha1Hash } from "sha1-uint8array";
|
|
2
|
-
const FileSystemError = new Error("File system not available.");
|
|
3
|
-
/**
|
|
4
|
-
* This should never be linked to directly. Instead, use the `#utils/misc`
|
|
5
|
-
* module. This will automatically pick the correct implementation for the
|
|
6
|
-
* current environment. See package.json for the mapping.
|
|
7
|
-
*
|
|
8
|
-
* Generates a secure UUID.
|
|
9
|
-
*/
|
|
10
|
-
export function generateUUID() {
|
|
11
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
12
|
-
if (typeof crypto === "undefined" || !crypto.randomUUID) {
|
|
13
|
-
throw new Error("generateUUID is not available in unsecure contexts.");
|
|
14
|
-
}
|
|
15
|
-
return crypto.randomUUID();
|
|
16
|
-
}
|
|
17
|
-
export function writeFile(path, name, stream) {
|
|
18
|
-
throw FileSystemError;
|
|
19
|
-
}
|
|
20
|
-
export function readFile(path) {
|
|
21
|
-
throw FileSystemError;
|
|
22
|
-
}
|
|
23
|
-
export function fetchFile(url) {
|
|
24
|
-
throw FileSystemError;
|
|
25
|
-
}
|
|
26
|
-
export const getFile = async (file) => {
|
|
27
|
-
return readFile(file);
|
|
28
|
-
};
|
|
29
|
-
export const hash = (data, algorithm = "sha1") => {
|
|
30
|
-
if (!["sha1"].includes(algorithm)) {
|
|
31
|
-
throw new Error("Hashing algorithm not supported: Available: sha1");
|
|
32
|
-
}
|
|
33
|
-
const hash = hashUIntArray(data);
|
|
34
|
-
return uint8ArrayToBase64(hash);
|
|
35
|
-
};
|
|
36
|
-
function uint8ArrayToBase64(uint8Array) {
|
|
37
|
-
// Convert the Uint8Array to a binary string
|
|
38
|
-
let binaryString = "";
|
|
39
|
-
for (let i = 0; i < uint8Array.length; i++) {
|
|
40
|
-
binaryString += String.fromCharCode(uint8Array[i]);
|
|
41
|
-
}
|
|
42
|
-
// Encode the binary string to base64
|
|
43
|
-
const base64String = btoa(binaryString);
|
|
44
|
-
return base64String;
|
|
45
|
-
}
|
|
46
|
-
function hashUIntArray(data, algorithm = "sha1") {
|
|
47
|
-
if (!["sha1"].includes(algorithm)) {
|
|
48
|
-
throw new Error("Hashing algorithm not supported: Available: sha1");
|
|
49
|
-
}
|
|
50
|
-
return createSha1Hash("sha1")
|
|
51
|
-
.update(data)
|
|
52
|
-
.digest();
|
|
53
|
-
}
|
|
54
|
-
//# sourceMappingURL=browser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../../src/document/utils/browser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAE/D,MAAM,eAAe,GAAG,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;AAEhE;;;;;;GAMG;AACH,MAAM,UAAU,YAAY;IAC1B,uEAAuE;IACvE,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,IAAY,EACZ,IAAY,EACZ,MAAkB;IAElB,MAAM,eAAe,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,MAAM,eAAe,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,GAAW;IAEX,MAAM,eAAe,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAAE,IAAY,EAAE,EAAE;IAC5C,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,CAClB,IAAsD,EACtD,SAAS,GAAG,MAAM,EAClB,EAAE;IACF,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACjC,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC,CAAC;AAEF,SAAS,kBAAkB,CAAC,UAAsB;IAChD,4CAA4C;IAC5C,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,qCAAqC;IACrC,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;IACxC,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,aAAa,CACpB,IAA2C,EAC3C,SAAS,GAAG,MAAM;IAElB,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,cAAc,CAAC,MAAM,CAAC;SAC1B,MAAM,CAAC,IAAc,CAAC;SACtB,MAAM,EAAE,CAAC;AACd,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { type ActionFromDocument, type ActionSigner, type Operation, type OperationFromDocument, type OperationSignatureContext, type OperationSigningHandler, type OperationVerificationHandler, type PHDocument, type Reducer, type Signature } from "../types.js";
|
|
2
|
-
export declare function generateId(method?: "UUIDv4"): string;
|
|
3
|
-
export declare function getUnixTimestamp(date: Date | string): string;
|
|
4
|
-
export declare function buildOperationSignatureParams({ documentId, signer, operation, previousStateHash, }: OperationSignatureContext): [string, string, string, string];
|
|
5
|
-
export declare function buildOperationSignatureMessage(params: [string, string, string, string]): Uint8Array;
|
|
6
|
-
export declare function ab2hex(ab: ArrayBuffer | ArrayBufferView): string;
|
|
7
|
-
export declare function hex2ab(hex: string): Uint8Array<ArrayBuffer>;
|
|
8
|
-
export declare function buildOperationSignature(context: OperationSignatureContext, signMethod: OperationSigningHandler): Promise<Signature>;
|
|
9
|
-
export declare function buildSignedOperation<TDocument extends PHDocument>(action: ActionFromDocument<TDocument> | OperationFromDocument<TDocument>, reducer: Reducer<TDocument>, document: TDocument, context: Omit<OperationSignatureContext, "operation" | "previousStateHash">, signHandler: OperationSigningHandler): Promise<Operation>;
|
|
10
|
-
export declare function verifyOperationSignature(signature: Signature, signer: Omit<ActionSigner, "signatures">, verifyHandler: OperationVerificationHandler): Promise<boolean>;
|
|
11
|
-
//# sourceMappingURL=crypto.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../../../src/document/utils/crypto.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,EAC5B,KAAK,4BAA4B,EACjC,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,KAAK,SAAS,EACf,MAAM,aAAa,CAAC;AAErB,wBAAgB,UAAU,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,CAQpD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAE5D;AAED,wBAAgB,6BAA6B,CAAC,EAC5C,UAAU,EACV,MAAM,EACN,SAAS,EACT,iBAAiB,GAClB,EAAE,yBAAyB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAW9D;AAID,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GACvC,UAAU,CAIZ;AAED,wBAAgB,MAAM,CAAC,EAAE,EAAE,WAAW,GAAG,eAAe,GAAG,MAAM,CAKhE;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,2BAMjC;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,yBAAyB,EAClC,UAAU,EAAE,uBAAuB,GAClC,OAAO,CAAC,SAAS,CAAC,CAKpB;AAED,wBAAsB,oBAAoB,CAAC,SAAS,SAAS,UAAU,EACrE,MAAM,EAAE,kBAAkB,CAAC,SAAS,CAAC,GAAG,qBAAqB,CAAC,SAAS,CAAC,EACxE,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,EAC3B,QAAQ,EAAE,SAAS,EACnB,OAAO,EAAE,IAAI,CAAC,yBAAyB,EAAE,WAAW,GAAG,mBAAmB,CAAC,EAC3E,WAAW,EAAE,uBAAuB,sBAgCrC;AAED,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,EACxC,aAAa,EAAE,4BAA4B,oBAO5C"}
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import { generateUUID, hash } from "#utils/env";
|
|
2
|
-
import stringifyJson from "safe-stable-stringify";
|
|
3
|
-
export function generateId(method) {
|
|
4
|
-
if (method && method.toString() !== "UUIDv4") {
|
|
5
|
-
throw new Error(`Id generation method not supported: "${method.toString()}"`);
|
|
6
|
-
}
|
|
7
|
-
return generateUUID();
|
|
8
|
-
}
|
|
9
|
-
export function getUnixTimestamp(date) {
|
|
10
|
-
return (new Date(date).getTime() / 1000).toFixed(0);
|
|
11
|
-
}
|
|
12
|
-
export function buildOperationSignatureParams({ documentId, signer, operation, previousStateHash, }) {
|
|
13
|
-
const { timestamp, scope, id, type } = operation;
|
|
14
|
-
return [
|
|
15
|
-
getUnixTimestamp(timestamp), // timestamp,
|
|
16
|
-
signer.app.key, // signer public key
|
|
17
|
-
hash(
|
|
18
|
-
// hash (docID, scope, operationID, operationName, operationInput)
|
|
19
|
-
[documentId, scope, id, type, stringifyJson(operation.input)].join("")),
|
|
20
|
-
previousStateHash, // state hash that the operation was applied to
|
|
21
|
-
];
|
|
22
|
-
}
|
|
23
|
-
const textEncode = new TextEncoder();
|
|
24
|
-
export function buildOperationSignatureMessage(params) {
|
|
25
|
-
const message = params.join("");
|
|
26
|
-
const prefix = "\x19Signed Operation:\n" + message.length.toString();
|
|
27
|
-
return textEncode.encode(prefix + message);
|
|
28
|
-
}
|
|
29
|
-
export function ab2hex(ab) {
|
|
30
|
-
const view = ArrayBuffer.isView(ab) ? ab : new Uint8Array(ab);
|
|
31
|
-
return Array.prototype.map
|
|
32
|
-
.call(view, (x) => ("00" + x.toString(16)).slice(-2))
|
|
33
|
-
.join("");
|
|
34
|
-
}
|
|
35
|
-
export function hex2ab(hex) {
|
|
36
|
-
return new Uint8Array(hex.match(/[\da-f]{2}/gi)?.map(function (h) {
|
|
37
|
-
return parseInt(h, 16);
|
|
38
|
-
}) ?? []);
|
|
39
|
-
}
|
|
40
|
-
export async function buildOperationSignature(context, signMethod) {
|
|
41
|
-
const params = buildOperationSignatureParams(context);
|
|
42
|
-
const message = buildOperationSignatureMessage(params);
|
|
43
|
-
const signature = await signMethod(message);
|
|
44
|
-
return [...params, `0x${ab2hex(signature)}`];
|
|
45
|
-
}
|
|
46
|
-
export async function buildSignedOperation(action, reducer, document, context, signHandler) {
|
|
47
|
-
const result = reducer(document, action, undefined, {
|
|
48
|
-
reuseHash: true,
|
|
49
|
-
reuseOperationResultingState: true,
|
|
50
|
-
});
|
|
51
|
-
const operation = result.operations[action.scope].at(-1);
|
|
52
|
-
if (!operation) {
|
|
53
|
-
throw new Error("Action was not applied");
|
|
54
|
-
}
|
|
55
|
-
const previousStateHash = result.operations[action.scope].at(-2)?.hash ?? "";
|
|
56
|
-
const signature = await buildOperationSignature({
|
|
57
|
-
...context,
|
|
58
|
-
operation,
|
|
59
|
-
previousStateHash,
|
|
60
|
-
}, signHandler);
|
|
61
|
-
return {
|
|
62
|
-
...operation,
|
|
63
|
-
context: {
|
|
64
|
-
...operation.context,
|
|
65
|
-
signer: {
|
|
66
|
-
...operation.context?.signer,
|
|
67
|
-
...context.signer,
|
|
68
|
-
signatures: [...(context.signer.signatures ?? []), signature],
|
|
69
|
-
},
|
|
70
|
-
},
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
export async function verifyOperationSignature(signature, signer, verifyHandler) {
|
|
74
|
-
const publicKey = signer.app.key;
|
|
75
|
-
const params = signature.slice(0, 4);
|
|
76
|
-
const signatureBytes = hex2ab(signature[4]);
|
|
77
|
-
const expectedMessage = buildOperationSignatureMessage(params);
|
|
78
|
-
return verifyHandler(publicKey, signatureBytes, expectedMessage);
|
|
79
|
-
}
|
|
80
|
-
//# sourceMappingURL=crypto.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../../../src/document/utils/crypto.ts"],"names":[],"mappings":"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"}
|