document-model 2.4.0 → 2.5.0-test.0
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/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/{browser/src → src}/document/actions/creators.d.ts +4 -2
- package/dist/src/document/actions/creators.d.ts.map +1 -0
- package/dist/{node/src/document/actions/creators.d.ts → src/document/actions/creators.js} +18 -8
- package/dist/src/document/actions/creators.js.map +1 -0
- package/dist/src/document/actions/operations.d.ts +23 -0
- package/dist/src/document/actions/operations.d.ts.map +1 -0
- package/dist/src/document/actions/operations.js +131 -0
- package/dist/src/document/actions/operations.js.map +1 -0
- package/dist/src/document/actions/types.d.ts +16 -0
- package/dist/src/document/actions/types.d.ts.map +1 -0
- package/dist/src/document/actions/types.js +7 -0
- package/dist/src/document/actions/types.js.map +1 -0
- package/dist/{browser/src → src}/document/object.d.ts +17 -14
- package/dist/src/document/object.d.ts.map +1 -0
- package/dist/{node/src/document/object.d.ts → src/document/object.js} +93 -29
- package/dist/src/document/object.js.map +1 -0
- package/dist/src/document/reducer.d.ts +49 -0
- package/dist/src/document/reducer.d.ts.map +1 -0
- package/dist/src/document/reducer.js +342 -0
- package/dist/src/document/reducer.js.map +1 -0
- package/dist/{browser/src → src}/document/schema/types.d.ts +2 -1
- package/dist/src/document/schema/types.d.ts.map +1 -0
- package/dist/src/document/schema/types.js +2 -0
- package/dist/src/document/schema/types.js.map +1 -0
- package/dist/{browser/src → src}/document/schema/zod.d.ts +30 -47
- package/dist/src/document/schema/zod.d.ts.map +1 -0
- package/dist/src/document/schema/zod.js +113 -0
- package/dist/src/document/schema/zod.js.map +1 -0
- package/dist/{node/src → src}/document/signal.d.ts +10 -9
- package/dist/src/document/signal.d.ts.map +1 -0
- package/dist/src/document/signal.js +2 -0
- package/dist/src/document/signal.js.map +1 -0
- package/dist/src/document/types.d.ts +345 -0
- package/dist/src/document/types.d.ts.map +1 -0
- package/dist/src/document/types.js +2 -0
- package/dist/src/document/types.js.map +1 -0
- package/dist/src/document/utils/base.d.ts +83 -0
- package/dist/src/document/utils/base.d.ts.map +1 -0
- package/dist/src/document/utils/base.js +331 -0
- package/dist/src/document/utils/base.js.map +1 -0
- package/dist/src/document/utils/browser.d.ts +18 -0
- package/dist/src/document/utils/browser.d.ts.map +1 -0
- package/dist/src/document/utils/browser.js +54 -0
- package/dist/src/document/utils/browser.js.map +1 -0
- package/dist/src/document/utils/crypto.d.ts +11 -0
- package/dist/src/document/utils/crypto.d.ts.map +1 -0
- package/dist/src/document/utils/crypto.js +80 -0
- package/dist/src/document/utils/crypto.js.map +1 -0
- package/dist/src/document/utils/document-helpers.d.ts +78 -0
- package/dist/src/document/utils/document-helpers.d.ts.map +1 -0
- package/dist/src/document/utils/document-helpers.js +411 -0
- package/dist/src/document/utils/document-helpers.js.map +1 -0
- package/dist/src/document/utils/errors.d.ts +10 -0
- package/dist/src/document/utils/errors.d.ts.map +1 -0
- package/dist/src/document/utils/errors.js +19 -0
- package/dist/src/document/utils/errors.js.map +1 -0
- package/dist/{node/src → src}/document/utils/file.d.ts +10 -8
- package/dist/src/document/utils/file.d.ts.map +1 -0
- package/dist/src/document/utils/file.js +158 -0
- package/dist/src/document/utils/file.js.map +1 -0
- package/dist/src/document/utils/node.d.ts +18 -0
- package/dist/src/document/utils/node.d.ts.map +1 -0
- package/dist/src/document/utils/node.js +62 -0
- package/dist/src/document/utils/node.js.map +1 -0
- package/dist/src/document/utils/validation.d.ts +3 -0
- package/dist/src/document/utils/validation.d.ts.map +1 -0
- package/dist/src/document/utils/validation.js +23 -0
- package/dist/src/document/utils/validation.js.map +1 -0
- package/dist/src/document-model/custom/reducers/header.d.ts +3 -0
- package/dist/src/document-model/custom/reducers/header.d.ts.map +1 -0
- package/dist/src/document-model/custom/reducers/header.js +23 -0
- package/dist/src/document-model/custom/reducers/header.js.map +1 -0
- package/dist/src/document-model/custom/reducers/module.d.ts +3 -0
- package/dist/src/document-model/custom/reducers/module.d.ts.map +1 -0
- package/dist/src/document-model/custom/reducers/module.js +41 -0
- package/dist/src/document-model/custom/reducers/module.js.map +1 -0
- package/dist/src/document-model/custom/reducers/operation-error.d.ts +3 -0
- package/dist/src/document-model/custom/reducers/operation-error.d.ts.map +1 -0
- package/dist/src/document-model/custom/reducers/operation-error.js +94 -0
- package/dist/src/document-model/custom/reducers/operation-error.js.map +1 -0
- package/dist/src/document-model/custom/reducers/operation-example.d.ts +3 -0
- package/dist/src/document-model/custom/reducers/operation-example.d.ts.map +1 -0
- package/dist/src/document-model/custom/reducers/operation-example.js +53 -0
- package/dist/src/document-model/custom/reducers/operation-example.js.map +1 -0
- package/dist/src/document-model/custom/reducers/operation.d.ts +3 -0
- package/dist/src/document-model/custom/reducers/operation.d.ts.map +1 -0
- package/dist/src/document-model/custom/reducers/operation.js +125 -0
- package/dist/src/document-model/custom/reducers/operation.js.map +1 -0
- package/dist/src/document-model/custom/reducers/state.d.ts +3 -0
- package/dist/src/document-model/custom/reducers/state.d.ts.map +1 -0
- package/dist/src/document-model/custom/reducers/state.js +71 -0
- package/dist/src/document-model/custom/reducers/state.js.map +1 -0
- package/dist/src/document-model/custom/reducers/versioning.d.ts +8 -0
- package/dist/src/document-model/custom/reducers/versioning.d.ts.map +1 -0
- package/dist/src/document-model/custom/reducers/versioning.js +23 -0
- package/dist/src/document-model/custom/reducers/versioning.js.map +1 -0
- package/dist/{browser/src → src}/document-model/custom/utils.d.ts +4 -3
- package/dist/src/document-model/custom/utils.d.ts.map +1 -0
- package/dist/src/document-model/custom/utils.js +105 -0
- package/dist/src/document-model/custom/utils.js.map +1 -0
- package/dist/src/document-model/gen/actions.d.ts +16 -0
- package/dist/src/document-model/gen/actions.d.ts.map +1 -0
- package/dist/src/document-model/gen/actions.js +8 -0
- package/dist/src/document-model/gen/actions.js.map +1 -0
- package/dist/src/document-model/gen/constants.d.ts +7 -0
- package/dist/src/document-model/gen/constants.d.ts.map +1 -0
- package/dist/src/document-model/gen/constants.js +34 -0
- package/dist/src/document-model/gen/constants.js.map +1 -0
- package/dist/src/document-model/gen/creators.d.ts +8 -0
- package/dist/src/document-model/gen/creators.d.ts.map +1 -0
- package/dist/src/document-model/gen/creators.js +8 -0
- package/dist/src/document-model/gen/creators.js.map +1 -0
- package/dist/src/document-model/gen/document-model.d.ts +3 -0
- package/dist/src/document-model/gen/document-model.d.ts.map +1 -0
- package/dist/src/document-model/gen/document-model.js +542 -0
- package/dist/src/document-model/gen/document-model.js.map +1 -0
- package/dist/src/document-model/gen/header/actions.d.ts +10 -0
- package/dist/src/document-model/gen/header/actions.d.ts.map +1 -0
- package/dist/src/document-model/gen/header/actions.js +2 -0
- package/dist/src/document-model/gen/header/actions.js.map +1 -0
- package/dist/{node/src → src}/document-model/gen/header/creators.d.ts +3 -2
- package/dist/src/document-model/gen/header/creators.d.ts.map +1 -0
- package/dist/src/document-model/gen/header/creators.js +10 -0
- package/dist/src/document-model/gen/header/creators.js.map +1 -0
- package/dist/src/document-model/gen/header/object.d.ts +13 -0
- package/dist/src/document-model/gen/header/object.d.ts.map +1 -0
- package/dist/src/document-model/gen/header/object.js +23 -0
- package/dist/src/document-model/gen/header/object.js.map +1 -0
- package/dist/{node/src → src}/document-model/gen/header/operations.d.ts +3 -2
- package/dist/src/document-model/gen/header/operations.d.ts.map +1 -0
- package/dist/src/document-model/gen/header/operations.js +2 -0
- package/dist/src/document-model/gen/header/operations.js.map +1 -0
- package/dist/src/document-model/gen/module/actions.d.ts +9 -0
- package/dist/src/document-model/gen/module/actions.d.ts.map +1 -0
- package/dist/src/document-model/gen/module/actions.js +2 -0
- package/dist/src/document-model/gen/module/actions.js.map +1 -0
- package/dist/{node/src → src}/document-model/gen/module/creators.d.ts +3 -2
- package/dist/src/document-model/gen/module/creators.d.ts.map +1 -0
- package/dist/src/document-model/gen/module/creators.js +9 -0
- package/dist/src/document-model/gen/module/creators.js.map +1 -0
- package/dist/src/document-model/gen/module/object.d.ts +12 -0
- package/dist/src/document-model/gen/module/object.d.ts.map +1 -0
- package/dist/src/document-model/gen/module/object.js +20 -0
- package/dist/src/document-model/gen/module/object.js.map +1 -0
- package/dist/{browser/src → src}/document-model/gen/module/operations.d.ts +3 -2
- package/dist/src/document-model/gen/module/operations.d.ts.map +1 -0
- package/dist/src/document-model/gen/module/operations.js +2 -0
- package/dist/src/document-model/gen/module/operations.js.map +1 -0
- package/dist/src/document-model/gen/object.d.ts +29 -0
- package/dist/src/document-model/gen/object.d.ts.map +1 -0
- package/dist/src/document-model/gen/object.js +46 -0
- package/dist/src/document-model/gen/object.js.map +1 -0
- package/dist/src/document-model/gen/operation/actions.d.ts +14 -0
- package/dist/src/document-model/gen/operation/actions.d.ts.map +1 -0
- package/dist/src/document-model/gen/operation/actions.js +2 -0
- package/dist/src/document-model/gen/operation/actions.js.map +1 -0
- package/dist/{browser/src → src}/document-model/gen/operation/creators.d.ts +3 -2
- package/dist/src/document-model/gen/operation/creators.d.ts.map +1 -0
- package/dist/src/document-model/gen/operation/creators.js +20 -0
- package/dist/src/document-model/gen/operation/creators.js.map +1 -0
- package/dist/{node/src → src}/document-model/gen/operation/object.d.ts +7 -5
- package/dist/src/document-model/gen/operation/object.d.ts.map +1 -0
- package/dist/src/document-model/gen/operation/object.js +35 -0
- package/dist/src/document-model/gen/operation/object.js.map +1 -0
- package/dist/{node/src → src}/document-model/gen/operation/operations.d.ts +3 -2
- package/dist/src/document-model/gen/operation/operations.d.ts.map +1 -0
- package/dist/src/document-model/gen/operation/operations.js +2 -0
- package/dist/src/document-model/gen/operation/operations.js.map +1 -0
- package/dist/src/document-model/gen/operation-error/actions.d.ts +11 -0
- package/dist/src/document-model/gen/operation-error/actions.d.ts.map +1 -0
- package/dist/src/document-model/gen/operation-error/actions.js +2 -0
- package/dist/src/document-model/gen/operation-error/actions.js.map +1 -0
- package/dist/{node/src → src}/document-model/gen/operation-error/creators.d.ts +3 -2
- package/dist/src/document-model/gen/operation-error/creators.d.ts.map +1 -0
- package/dist/src/document-model/gen/operation-error/creators.js +17 -0
- package/dist/src/document-model/gen/operation-error/creators.js.map +1 -0
- package/dist/{node/src → src}/document-model/gen/operation-error/object.d.ts +7 -5
- package/dist/src/document-model/gen/operation-error/object.d.ts.map +1 -0
- package/dist/src/document-model/gen/operation-error/object.js +26 -0
- package/dist/src/document-model/gen/operation-error/object.js.map +1 -0
- package/dist/{browser/src → src}/document-model/gen/operation-error/operations.d.ts +3 -2
- package/dist/src/document-model/gen/operation-error/operations.d.ts.map +1 -0
- package/dist/src/document-model/gen/operation-error/operations.js +2 -0
- package/dist/src/document-model/gen/operation-error/operations.js.map +1 -0
- package/dist/src/document-model/gen/operation-example/actions.d.ts +8 -0
- package/dist/src/document-model/gen/operation-example/actions.d.ts.map +1 -0
- package/dist/src/document-model/gen/operation-example/actions.js +2 -0
- package/dist/src/document-model/gen/operation-example/actions.js.map +1 -0
- package/dist/{browser/src → src}/document-model/gen/operation-example/creators.d.ts +3 -2
- package/dist/src/document-model/gen/operation-example/creators.d.ts.map +1 -0
- package/dist/src/document-model/gen/operation-example/creators.js +14 -0
- package/dist/src/document-model/gen/operation-example/creators.js.map +1 -0
- package/dist/src/document-model/gen/operation-example/object.d.ts +12 -0
- package/dist/src/document-model/gen/operation-example/object.d.ts.map +1 -0
- package/dist/src/document-model/gen/operation-example/object.js +17 -0
- package/dist/src/document-model/gen/operation-example/object.js.map +1 -0
- package/dist/{browser/src → src}/document-model/gen/operation-example/operations.d.ts +3 -2
- package/dist/src/document-model/gen/operation-example/operations.d.ts.map +1 -0
- package/dist/src/document-model/gen/operation-example/operations.js +2 -0
- package/dist/src/document-model/gen/operation-example/operations.js.map +1 -0
- package/dist/src/document-model/gen/reducer.d.ts +5 -0
- package/dist/src/document-model/gen/reducer.d.ts.map +1 -0
- package/dist/src/document-model/gen/reducer.js +193 -0
- package/dist/src/document-model/gen/reducer.js.map +1 -0
- package/dist/{browser/src → src}/document-model/gen/schema/types.d.ts +6 -1
- package/dist/src/document-model/gen/schema/types.d.ts.map +1 -0
- package/dist/src/document-model/gen/schema/types.js +2 -0
- package/dist/src/document-model/gen/schema/types.js.map +1 -0
- package/dist/src/document-model/gen/schema/zod.d.ts +454 -0
- package/dist/src/document-model/gen/schema/zod.d.ts.map +1 -0
- package/dist/src/document-model/gen/schema/zod.js +394 -0
- package/dist/src/document-model/gen/schema/zod.js.map +1 -0
- package/dist/src/document-model/gen/state/actions.d.ts +10 -0
- package/dist/src/document-model/gen/state/actions.d.ts.map +1 -0
- package/dist/src/document-model/gen/state/actions.js +2 -0
- package/dist/src/document-model/gen/state/actions.js.map +1 -0
- package/dist/{browser/src → src}/document-model/gen/state/creators.d.ts +3 -2
- package/dist/src/document-model/gen/state/creators.d.ts.map +1 -0
- package/dist/src/document-model/gen/state/creators.js +10 -0
- package/dist/src/document-model/gen/state/creators.js.map +1 -0
- package/dist/src/document-model/gen/state/object.d.ts +13 -0
- package/dist/src/document-model/gen/state/object.d.ts.map +1 -0
- package/dist/src/document-model/gen/state/object.js +23 -0
- package/dist/src/document-model/gen/state/object.js.map +1 -0
- package/dist/{browser/src → src}/document-model/gen/state/operations.d.ts +3 -2
- package/dist/src/document-model/gen/state/operations.d.ts.map +1 -0
- package/dist/src/document-model/gen/state/operations.js +2 -0
- package/dist/src/document-model/gen/state/operations.js.map +1 -0
- package/dist/src/document-model/gen/types.d.ts +7 -0
- package/dist/src/document-model/gen/types.d.ts.map +1 -0
- package/dist/src/document-model/gen/types.js +2 -0
- package/dist/src/document-model/gen/types.js.map +1 -0
- package/dist/src/document-model/gen/utils.d.ts +11 -0
- package/dist/src/document-model/gen/utils.d.ts.map +1 -0
- package/dist/src/document-model/gen/utils.js +30 -0
- package/dist/src/document-model/gen/utils.js.map +1 -0
- package/dist/src/document-model/gen/versioning/actions.d.ts +9 -0
- package/dist/src/document-model/gen/versioning/actions.d.ts.map +1 -0
- package/dist/src/document-model/gen/versioning/actions.js +2 -0
- package/dist/src/document-model/gen/versioning/actions.js.map +1 -0
- package/dist/{browser/src → src}/document-model/gen/versioning/creators.d.ts +3 -2
- package/dist/src/document-model/gen/versioning/creators.d.ts.map +1 -0
- package/dist/src/document-model/gen/versioning/creators.js +13 -0
- package/dist/src/document-model/gen/versioning/creators.js.map +1 -0
- package/dist/src/document-model/gen/versioning/object.d.ts +13 -0
- package/dist/src/document-model/gen/versioning/object.d.ts.map +1 -0
- package/dist/src/document-model/gen/versioning/object.js +20 -0
- package/dist/src/document-model/gen/versioning/object.js.map +1 -0
- package/dist/{browser/src → src}/document-model/gen/versioning/operations.d.ts +3 -2
- package/dist/src/document-model/gen/versioning/operations.d.ts.map +1 -0
- package/dist/src/document-model/gen/versioning/operations.js +2 -0
- package/dist/src/document-model/gen/versioning/operations.js.map +1 -0
- package/dist/src/document-model/module.d.ts +3 -0
- package/dist/src/document-model/module.d.ts.map +1 -0
- package/dist/src/document-model/module.js +13 -0
- package/dist/src/document-model/module.js.map +1 -0
- package/dist/src/document-model/types.d.ts +4 -0
- package/dist/src/document-model/types.d.ts.map +1 -0
- package/dist/src/document-model/types.js +2 -0
- package/dist/src/document-model/types.js.map +1 -0
- package/dist/test/document/crypto.test.d.ts +2 -0
- package/dist/test/document/crypto.test.d.ts.map +1 -0
- package/dist/test/document/crypto.test.js +181 -0
- package/dist/test/document/crypto.test.js.map +1 -0
- package/dist/test/document/event-vs-command.test.d.ts +2 -0
- package/dist/test/document/event-vs-command.test.d.ts.map +1 -0
- package/dist/test/document/event-vs-command.test.js +169 -0
- package/dist/test/document/event-vs-command.test.js.map +1 -0
- package/dist/test/document/local.test.d.ts +2 -0
- package/dist/test/document/local.test.d.ts.map +1 -0
- package/dist/test/document/local.test.js +248 -0
- package/dist/test/document/local.test.js.map +1 -0
- package/dist/test/document/object.test.d.ts +2 -0
- package/dist/test/document/object.test.d.ts.map +1 -0
- package/dist/test/document/object.test.js +13 -0
- package/dist/test/document/object.test.js.map +1 -0
- package/dist/test/document/operation-id.test.d.ts +2 -0
- package/dist/test/document/operation-id.test.d.ts.map +1 -0
- package/dist/test/document/operation-id.test.js +159 -0
- package/dist/test/document/operation-id.test.js.map +1 -0
- package/dist/test/document/prune.test.d.ts +2 -0
- package/dist/test/document/prune.test.d.ts.map +1 -0
- package/dist/test/document/prune.test.js +177 -0
- package/dist/test/document/prune.test.js.map +1 -0
- package/dist/test/document/reducer.test.d.ts +2 -0
- package/dist/test/document/reducer.test.d.ts.map +1 -0
- package/dist/test/document/reducer.test.js +270 -0
- package/dist/test/document/reducer.test.js.map +1 -0
- package/dist/test/document/skip-operations.test.d.ts +2 -0
- package/dist/test/document/skip-operations.test.d.ts.map +1 -0
- package/dist/test/document/skip-operations.test.js +442 -0
- package/dist/test/document/skip-operations.test.js.map +1 -0
- package/dist/test/document/undo-redo.test.d.ts +2 -0
- package/dist/test/document/undo-redo.test.d.ts.map +1 -0
- package/dist/test/document/undo-redo.test.js +377 -0
- package/dist/test/document/undo-redo.test.js.map +1 -0
- package/dist/test/document/utils.test.d.ts +2 -0
- package/dist/test/document/utils.test.d.ts.map +1 -0
- package/dist/test/document/utils.test.js +152 -0
- package/dist/test/document/utils.test.js.map +1 -0
- package/dist/test/document-helpers/addUndo.test.d.ts +2 -0
- package/dist/test/document-helpers/addUndo.test.d.ts.map +1 -0
- package/dist/test/document-helpers/addUndo.test.js +120 -0
- package/dist/test/document-helpers/addUndo.test.js.map +1 -0
- package/dist/test/document-helpers/attachBranch.test.d.ts +2 -0
- package/dist/test/document-helpers/attachBranch.test.d.ts.map +1 -0
- package/dist/test/document-helpers/attachBranch.test.js +364 -0
- package/dist/test/document-helpers/attachBranch.test.js.map +1 -0
- package/dist/test/document-helpers/checkCleanedOperationsIntegrity.test.d.ts +2 -0
- package/dist/test/document-helpers/checkCleanedOperationsIntegrity.test.d.ts.map +1 -0
- package/dist/test/document-helpers/checkCleanedOperationsIntegrity.test.js +252 -0
- package/dist/test/document-helpers/checkCleanedOperationsIntegrity.test.js.map +1 -0
- package/dist/test/document-helpers/conflictResolution.test.d.ts +2 -0
- package/dist/test/document-helpers/conflictResolution.test.d.ts.map +1 -0
- package/dist/test/document-helpers/conflictResolution.test.js +109 -0
- package/dist/test/document-helpers/conflictResolution.test.js.map +1 -0
- package/dist/test/document-helpers/filterDuplicatedOperations.test.d.ts +2 -0
- package/dist/test/document-helpers/filterDuplicatedOperations.test.d.ts.map +1 -0
- package/dist/test/document-helpers/filterDuplicatedOperations.test.js +126 -0
- package/dist/test/document-helpers/filterDuplicatedOperations.test.js.map +1 -0
- package/dist/test/document-helpers/garbageCollect.test.d.ts +2 -0
- package/dist/test/document-helpers/garbageCollect.test.d.ts.map +1 -0
- package/dist/test/document-helpers/garbageCollect.test.js +136 -0
- package/dist/test/document-helpers/garbageCollect.test.js.map +1 -0
- package/dist/test/document-helpers/groupOperationsByScope.test.d.ts +2 -0
- package/dist/test/document-helpers/groupOperationsByScope.test.d.ts.map +1 -0
- package/dist/test/document-helpers/groupOperationsByScope.test.js +98 -0
- package/dist/test/document-helpers/groupOperationsByScope.test.js.map +1 -0
- package/dist/test/document-helpers/merge.test.d.ts +2 -0
- package/dist/test/document-helpers/merge.test.d.ts.map +1 -0
- package/dist/test/document-helpers/merge.test.js +906 -0
- package/dist/test/document-helpers/merge.test.js.map +1 -0
- package/dist/test/document-helpers/nextSkipNumber.test.d.ts +2 -0
- package/dist/test/document-helpers/nextSkipNumber.test.d.ts.map +1 -0
- package/dist/test/document-helpers/nextSkipNumber.test.js +135 -0
- package/dist/test/document-helpers/nextSkipNumber.test.js.map +1 -0
- package/dist/test/document-helpers/prepareOperations.test.d.ts +2 -0
- package/dist/test/document-helpers/prepareOperations.test.d.ts.map +1 -0
- package/dist/test/document-helpers/prepareOperations.test.js +304 -0
- package/dist/test/document-helpers/prepareOperations.test.js.map +1 -0
- package/dist/test/document-helpers/removeExistingOperations.test.d.ts +2 -0
- package/dist/test/document-helpers/removeExistingOperations.test.d.ts.map +1 -0
- package/dist/test/document-helpers/removeExistingOperations.test.js +150 -0
- package/dist/test/document-helpers/removeExistingOperations.test.js.map +1 -0
- package/dist/test/document-helpers/reshuffleByTimestamp.test.d.ts +2 -0
- package/dist/test/document-helpers/reshuffleByTimestamp.test.d.ts.map +1 -0
- package/dist/test/document-helpers/reshuffleByTimestamp.test.js +148 -0
- package/dist/test/document-helpers/reshuffleByTimestamp.test.js.map +1 -0
- package/dist/test/document-helpers/reshuffleByTimestampAndIndex.test.d.ts +2 -0
- package/dist/test/document-helpers/reshuffleByTimestampAndIndex.test.d.ts.map +1 -0
- package/dist/test/document-helpers/reshuffleByTimestampAndIndex.test.js +200 -0
- package/dist/test/document-helpers/reshuffleByTimestampAndIndex.test.js.map +1 -0
- package/dist/test/document-helpers/skipHeaderOperations.test.d.ts +2 -0
- package/dist/test/document-helpers/skipHeaderOperations.test.d.ts.map +1 -0
- package/dist/test/document-helpers/skipHeaderOperations.test.js +74 -0
- package/dist/test/document-helpers/skipHeaderOperations.test.js.map +1 -0
- package/dist/test/document-helpers/sortOperations.test.d.ts +2 -0
- package/dist/test/document-helpers/sortOperations.test.d.ts.map +1 -0
- package/dist/test/document-helpers/sortOperations.test.js +101 -0
- package/dist/test/document-helpers/sortOperations.test.js.map +1 -0
- package/dist/test/document-helpers/split.test.d.ts +2 -0
- package/dist/test/document-helpers/split.test.d.ts.map +1 -0
- package/dist/test/document-helpers/split.test.js +121 -0
- package/dist/test/document-helpers/split.test.js.map +1 -0
- package/dist/{browser/test → test}/document-helpers/utils.d.ts +2 -1
- package/dist/test/document-helpers/utils.d.ts.map +1 -0
- package/dist/test/document-helpers/utils.js +22 -0
- package/dist/test/document-helpers/utils.js.map +1 -0
- package/dist/test/document-model/object.test.d.ts +2 -0
- package/dist/test/document-model/object.test.d.ts.map +1 -0
- package/dist/test/document-model/object.test.js +243 -0
- package/dist/test/document-model/object.test.js.map +1 -0
- package/dist/test/document-model/replay.test.d.ts +2 -0
- package/dist/test/document-model/replay.test.d.ts.map +1 -0
- package/dist/test/document-model/replay.test.js +149 -0
- package/dist/test/document-model/replay.test.js.map +1 -0
- package/dist/test/document-model/skip-operations.test.d.ts +2 -0
- package/dist/test/document-model/skip-operations.test.d.ts.map +1 -0
- package/dist/test/document-model/skip-operations.test.js +220 -0
- package/dist/test/document-model/skip-operations.test.js.map +1 -0
- package/dist/test/document-model/validation.test.d.ts +2 -0
- package/dist/test/document-model/validation.test.d.ts.map +1 -0
- package/dist/test/document-model/validation.test.js +258 -0
- package/dist/test/document-model/validation.test.js.map +1 -0
- package/dist/test/document-model/zip.test.d.ts +2 -0
- package/dist/test/document-model/zip.test.d.ts.map +1 -0
- package/dist/test/document-model/zip.test.js +80 -0
- package/dist/test/document-model/zip.test.js.map +1 -0
- package/dist/test/helpers.d.ts +31 -0
- package/dist/test/helpers.d.ts.map +1 -0
- package/dist/test/helpers.js +71 -0
- package/dist/test/helpers.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/vitest.config.d.ts +3 -0
- package/dist/vitest.config.d.ts.map +1 -0
- package/dist/vitest.config.js +13 -0
- package/dist/vitest.config.js.map +1 -0
- package/package.json +27 -53
- package/dist/browser/cjs/document-model.js +0 -20
- package/dist/browser/cjs/document-model.js.map +0 -1
- package/dist/browser/cjs/document.js +0 -15
- package/dist/browser/cjs/document.js.map +0 -1
- package/dist/browser/cjs/index.js +0 -14
- package/dist/browser/cjs/index.js.map +0 -1
- package/dist/browser/cjs/internal/index-DyKphRZa.js +0 -2215
- package/dist/browser/cjs/internal/index-DyKphRZa.js.map +0 -1
- package/dist/browser/cjs/internal/index-y9w_m1Lo.js +0 -57
- package/dist/browser/cjs/internal/index-y9w_m1Lo.js.map +0 -1
- package/dist/browser/cjs/internal/object-Dbc1GbBl.js +0 -2694
- package/dist/browser/cjs/internal/object-Dbc1GbBl.js.map +0 -1
- package/dist/browser/cjs/package.json +0 -1
- package/dist/browser/document-model.d.ts +0 -2
- package/dist/browser/document.d.ts +0 -2
- package/dist/browser/es/document-model.js +0 -20
- package/dist/browser/es/document-model.js.map +0 -1
- package/dist/browser/es/document.js +0 -15
- package/dist/browser/es/document.js.map +0 -1
- package/dist/browser/es/index.js +0 -14
- package/dist/browser/es/index.js.map +0 -1
- package/dist/browser/es/internal/index-BI16PNmr.js +0 -58
- package/dist/browser/es/internal/index-BI16PNmr.js.map +0 -1
- package/dist/browser/es/internal/index-CiQX4huJ.js +0 -2216
- package/dist/browser/es/internal/index-CiQX4huJ.js.map +0 -1
- package/dist/browser/es/internal/object-BTIqCvb-.js +0 -2695
- package/dist/browser/es/internal/object-BTIqCvb-.js.map +0 -1
- package/dist/browser/es/package.json +0 -1
- package/dist/browser/index.d.ts +0 -6
- package/dist/browser/src/document/actions/index.d.ts +0 -14
- package/dist/browser/src/document/actions/types.d.ts +0 -15
- package/dist/browser/src/document/index.d.ts +0 -6
- package/dist/browser/src/document/reducer.d.ts +0 -65
- package/dist/browser/src/document/schema/index.d.ts +0 -2
- package/dist/browser/src/document/signal.d.ts +0 -29
- package/dist/browser/src/document/types.d.ts +0 -271
- package/dist/browser/src/document/utils/base.d.ts +0 -87
- package/dist/browser/src/document/utils/crypto.d.ts +0 -9
- package/dist/browser/src/document/utils/document-helpers.d.ts +0 -73
- package/dist/browser/src/document/utils/file.d.ts +0 -48
- package/dist/browser/src/document/utils/index.d.ts +0 -6
- package/dist/browser/src/document/utils/node.d.ts +0 -9
- package/dist/browser/src/document/utils/validation.d.ts +0 -2
- package/dist/browser/src/document-model/custom/reducers/header.d.ts +0 -2
- package/dist/browser/src/document-model/custom/reducers/module.d.ts +0 -2
- package/dist/browser/src/document-model/custom/reducers/operation-error.d.ts +0 -2
- package/dist/browser/src/document-model/custom/reducers/operation-example.d.ts +0 -2
- package/dist/browser/src/document-model/custom/reducers/operation.d.ts +0 -2
- package/dist/browser/src/document-model/custom/reducers/state.d.ts +0 -2
- package/dist/browser/src/document-model/custom/reducers/versioning.d.ts +0 -2
- package/dist/browser/src/document-model/gen/actions.d.ts +0 -15
- package/dist/browser/src/document-model/gen/creators.d.ts +0 -7
- package/dist/browser/src/document-model/gen/document-model.d.ts +0 -2
- package/dist/browser/src/document-model/gen/header/actions.d.ts +0 -9
- package/dist/browser/src/document-model/gen/header/creators.d.ts +0 -8
- package/dist/browser/src/document-model/gen/header/object.d.ts +0 -12
- package/dist/browser/src/document-model/gen/header/operations.d.ts +0 -10
- package/dist/browser/src/document-model/gen/index.d.ts +0 -5
- package/dist/browser/src/document-model/gen/module/actions.d.ts +0 -8
- package/dist/browser/src/document-model/gen/module/creators.d.ts +0 -7
- package/dist/browser/src/document-model/gen/module/object.d.ts +0 -11
- package/dist/browser/src/document-model/gen/object.d.ts +0 -28
- package/dist/browser/src/document-model/gen/operation/actions.d.ts +0 -13
- package/dist/browser/src/document-model/gen/operation/object.d.ts +0 -16
- package/dist/browser/src/document-model/gen/operation/operations.d.ts +0 -14
- package/dist/browser/src/document-model/gen/operation-error/actions.d.ts +0 -10
- package/dist/browser/src/document-model/gen/operation-error/creators.d.ts +0 -9
- package/dist/browser/src/document-model/gen/operation-error/object.d.ts +0 -13
- package/dist/browser/src/document-model/gen/operation-example/actions.d.ts +0 -7
- package/dist/browser/src/document-model/gen/operation-example/object.d.ts +0 -10
- package/dist/browser/src/document-model/gen/reducer.d.ts +0 -5
- package/dist/browser/src/document-model/gen/schema/index.d.ts +0 -2
- package/dist/browser/src/document-model/gen/schema/zod.d.ts +0 -453
- package/dist/browser/src/document-model/gen/state/actions.d.ts +0 -9
- package/dist/browser/src/document-model/gen/state/object.d.ts +0 -12
- package/dist/browser/src/document-model/gen/types.d.ts +0 -8
- package/dist/browser/src/document-model/gen/utils.d.ts +0 -6
- package/dist/browser/src/document-model/gen/versioning/actions.d.ts +0 -8
- package/dist/browser/src/document-model/gen/versioning/object.d.ts +0 -11
- package/dist/browser/src/document-model/index.d.ts +0 -76
- package/dist/browser/src/index.d.ts +0 -24
- package/dist/browser/test/document/crypto.test.d.ts +0 -1
- package/dist/browser/test/document/event-vs-command.test.d.ts +0 -1
- package/dist/browser/test/document/local.test.d.ts +0 -1
- package/dist/browser/test/document/object.test.d.ts +0 -1
- package/dist/browser/test/document/operation-id.test.d.ts +0 -1
- package/dist/browser/test/document/prune.test.d.ts +0 -1
- package/dist/browser/test/document/reducer.test.d.ts +0 -1
- package/dist/browser/test/document/skip-operations.test.d.ts +0 -1
- package/dist/browser/test/document/undo-redo.test.d.ts +0 -1
- package/dist/browser/test/document/utils.test.d.ts +0 -1
- package/dist/browser/test/document-helpers/addUndo.test.d.ts +0 -1
- package/dist/browser/test/document-helpers/attachBranch.test.d.ts +0 -1
- package/dist/browser/test/document-helpers/checkCleanedOperationsIntegrity.test.d.ts +0 -1
- package/dist/browser/test/document-helpers/conflictResolution.test.d.ts +0 -1
- package/dist/browser/test/document-helpers/filterDuplicatedOperations.test.d.ts +0 -1
- package/dist/browser/test/document-helpers/garbageCollect.test.d.ts +0 -1
- package/dist/browser/test/document-helpers/groupOperationsByScope.test.d.ts +0 -1
- package/dist/browser/test/document-helpers/merge.test.d.ts +0 -1
- package/dist/browser/test/document-helpers/nextSkipNumber.test.d.ts +0 -1
- package/dist/browser/test/document-helpers/prepareOperations.test.d.ts +0 -1
- package/dist/browser/test/document-helpers/removeExistingOperations.test.d.ts +0 -1
- package/dist/browser/test/document-helpers/reshuffleByTimestamp.test.d.ts +0 -1
- package/dist/browser/test/document-helpers/reshuffleByTimestampAndIndex.test.d.ts +0 -1
- package/dist/browser/test/document-helpers/skipHeaderOperations.test.d.ts +0 -1
- package/dist/browser/test/document-helpers/sortOperations.test.d.ts +0 -1
- package/dist/browser/test/document-helpers/split.test.d.ts +0 -1
- package/dist/browser/test/document-model/object.test.d.ts +0 -1
- package/dist/browser/test/document-model/replay.test.d.ts +0 -1
- package/dist/browser/test/document-model/skip-operations.test.d.ts +0 -1
- package/dist/browser/test/document-model/validation.test.d.ts +0 -1
- package/dist/browser/test/document-model/zip.test.d.ts +0 -1
- package/dist/browser/test/helpers.d.ts +0 -39
- package/dist/browser/vite.config.d.ts +0 -2
- package/dist/browser/vitest.config.d.ts +0 -2
- package/dist/node/cjs/document-model.js +0 -24
- package/dist/node/cjs/document-model.js.map +0 -1
- package/dist/node/cjs/document.js +0 -15
- package/dist/node/cjs/document.js.map +0 -1
- package/dist/node/cjs/index.js +0 -14
- package/dist/node/cjs/index.js.map +0 -1
- package/dist/node/cjs/internal/index-CLCVBs4I.js +0 -57
- package/dist/node/cjs/internal/index-CLCVBs4I.js.map +0 -1
- package/dist/node/cjs/internal/index-Cp37sm40.js +0 -2219
- package/dist/node/cjs/internal/index-Cp37sm40.js.map +0 -1
- package/dist/node/cjs/internal/object-ByNZ3G_j.js +0 -2480
- package/dist/node/cjs/internal/object-ByNZ3G_j.js.map +0 -1
- package/dist/node/cjs/package.json +0 -1
- package/dist/node/document-model.d.ts +0 -2
- package/dist/node/document.d.ts +0 -2
- package/dist/node/es/document-model.js +0 -24
- package/dist/node/es/document-model.js.map +0 -1
- package/dist/node/es/document.js +0 -15
- package/dist/node/es/document.js.map +0 -1
- package/dist/node/es/index.js +0 -14
- package/dist/node/es/index.js.map +0 -1
- package/dist/node/es/internal/index-BXfMlE4L.js +0 -58
- package/dist/node/es/internal/index-BXfMlE4L.js.map +0 -1
- package/dist/node/es/internal/index-ppDSDiFU.js +0 -2220
- package/dist/node/es/internal/index-ppDSDiFU.js.map +0 -1
- package/dist/node/es/internal/object-C8sca9DR.js +0 -2481
- package/dist/node/es/internal/object-C8sca9DR.js.map +0 -1
- package/dist/node/es/package.json +0 -1
- package/dist/node/index.d.ts +0 -6
- package/dist/node/src/document/actions/index.d.ts +0 -14
- package/dist/node/src/document/actions/types.d.ts +0 -15
- package/dist/node/src/document/index.d.ts +0 -6
- package/dist/node/src/document/reducer.d.ts +0 -65
- package/dist/node/src/document/schema/index.d.ts +0 -2
- package/dist/node/src/document/schema/types.d.ts +0 -176
- package/dist/node/src/document/schema/zod.d.ts +0 -116
- package/dist/node/src/document/types.d.ts +0 -271
- package/dist/node/src/document/utils/base.d.ts +0 -87
- package/dist/node/src/document/utils/crypto.d.ts +0 -9
- package/dist/node/src/document/utils/document-helpers.d.ts +0 -73
- package/dist/node/src/document/utils/index.d.ts +0 -6
- package/dist/node/src/document/utils/node.d.ts +0 -9
- package/dist/node/src/document/utils/validation.d.ts +0 -2
- package/dist/node/src/document-model/custom/reducers/header.d.ts +0 -2
- package/dist/node/src/document-model/custom/reducers/module.d.ts +0 -2
- package/dist/node/src/document-model/custom/reducers/operation-error.d.ts +0 -2
- package/dist/node/src/document-model/custom/reducers/operation-example.d.ts +0 -2
- package/dist/node/src/document-model/custom/reducers/operation.d.ts +0 -2
- package/dist/node/src/document-model/custom/reducers/state.d.ts +0 -2
- package/dist/node/src/document-model/custom/reducers/versioning.d.ts +0 -2
- package/dist/node/src/document-model/custom/utils.d.ts +0 -7
- package/dist/node/src/document-model/gen/actions.d.ts +0 -15
- package/dist/node/src/document-model/gen/creators.d.ts +0 -7
- package/dist/node/src/document-model/gen/document-model.d.ts +0 -2
- package/dist/node/src/document-model/gen/header/actions.d.ts +0 -9
- package/dist/node/src/document-model/gen/header/object.d.ts +0 -12
- package/dist/node/src/document-model/gen/index.d.ts +0 -5
- package/dist/node/src/document-model/gen/module/actions.d.ts +0 -8
- package/dist/node/src/document-model/gen/module/object.d.ts +0 -11
- package/dist/node/src/document-model/gen/module/operations.d.ts +0 -9
- package/dist/node/src/document-model/gen/object.d.ts +0 -28
- package/dist/node/src/document-model/gen/operation/actions.d.ts +0 -13
- package/dist/node/src/document-model/gen/operation/creators.d.ts +0 -12
- package/dist/node/src/document-model/gen/operation-error/actions.d.ts +0 -10
- package/dist/node/src/document-model/gen/operation-error/operations.d.ts +0 -11
- package/dist/node/src/document-model/gen/operation-example/actions.d.ts +0 -7
- package/dist/node/src/document-model/gen/operation-example/creators.d.ts +0 -6
- package/dist/node/src/document-model/gen/operation-example/object.d.ts +0 -10
- package/dist/node/src/document-model/gen/operation-example/operations.d.ts +0 -8
- package/dist/node/src/document-model/gen/reducer.d.ts +0 -5
- package/dist/node/src/document-model/gen/schema/index.d.ts +0 -2
- package/dist/node/src/document-model/gen/schema/types.d.ts +0 -453
- package/dist/node/src/document-model/gen/schema/zod.d.ts +0 -453
- package/dist/node/src/document-model/gen/state/actions.d.ts +0 -9
- package/dist/node/src/document-model/gen/state/creators.d.ts +0 -8
- package/dist/node/src/document-model/gen/state/object.d.ts +0 -12
- package/dist/node/src/document-model/gen/state/operations.d.ts +0 -10
- package/dist/node/src/document-model/gen/types.d.ts +0 -8
- package/dist/node/src/document-model/gen/utils.d.ts +0 -6
- package/dist/node/src/document-model/gen/versioning/actions.d.ts +0 -8
- package/dist/node/src/document-model/gen/versioning/creators.d.ts +0 -7
- package/dist/node/src/document-model/gen/versioning/object.d.ts +0 -11
- package/dist/node/src/document-model/gen/versioning/operations.d.ts +0 -9
- package/dist/node/src/document-model/index.d.ts +0 -76
- package/dist/node/src/index.d.ts +0 -24
- package/dist/node/test/document/crypto.test.d.ts +0 -1
- package/dist/node/test/document/event-vs-command.test.d.ts +0 -1
- package/dist/node/test/document/local.test.d.ts +0 -1
- package/dist/node/test/document/object.test.d.ts +0 -1
- package/dist/node/test/document/operation-id.test.d.ts +0 -1
- package/dist/node/test/document/prune.test.d.ts +0 -1
- package/dist/node/test/document/reducer.test.d.ts +0 -1
- package/dist/node/test/document/skip-operations.test.d.ts +0 -1
- package/dist/node/test/document/undo-redo.test.d.ts +0 -1
- package/dist/node/test/document/utils.test.d.ts +0 -1
- package/dist/node/test/document-helpers/addUndo.test.d.ts +0 -1
- package/dist/node/test/document-helpers/attachBranch.test.d.ts +0 -1
- package/dist/node/test/document-helpers/checkCleanedOperationsIntegrity.test.d.ts +0 -1
- package/dist/node/test/document-helpers/conflictResolution.test.d.ts +0 -1
- package/dist/node/test/document-helpers/filterDuplicatedOperations.test.d.ts +0 -1
- package/dist/node/test/document-helpers/garbageCollect.test.d.ts +0 -1
- package/dist/node/test/document-helpers/groupOperationsByScope.test.d.ts +0 -1
- package/dist/node/test/document-helpers/merge.test.d.ts +0 -1
- package/dist/node/test/document-helpers/nextSkipNumber.test.d.ts +0 -1
- package/dist/node/test/document-helpers/prepareOperations.test.d.ts +0 -1
- package/dist/node/test/document-helpers/removeExistingOperations.test.d.ts +0 -1
- package/dist/node/test/document-helpers/reshuffleByTimestamp.test.d.ts +0 -1
- package/dist/node/test/document-helpers/reshuffleByTimestampAndIndex.test.d.ts +0 -1
- package/dist/node/test/document-helpers/skipHeaderOperations.test.d.ts +0 -1
- package/dist/node/test/document-helpers/sortOperations.test.d.ts +0 -1
- package/dist/node/test/document-helpers/split.test.d.ts +0 -1
- package/dist/node/test/document-helpers/utils.d.ts +0 -7
- package/dist/node/test/document-model/object.test.d.ts +0 -1
- package/dist/node/test/document-model/replay.test.d.ts +0 -1
- package/dist/node/test/document-model/skip-operations.test.d.ts +0 -1
- package/dist/node/test/document-model/validation.test.d.ts +0 -1
- package/dist/node/test/document-model/zip.test.d.ts +0 -1
- package/dist/node/test/helpers.d.ts +0 -39
- package/dist/node/vite.config.d.ts +0 -2
- package/dist/node/vitest.config.d.ts +0 -2
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
import { generateUUID, 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
|
+
export function isNoopOperation(op) {
|
|
9
|
+
return (op.type === NOOP &&
|
|
10
|
+
op.skip !== undefined &&
|
|
11
|
+
op.skip > 0 &&
|
|
12
|
+
op.hash !== undefined);
|
|
13
|
+
}
|
|
14
|
+
export function isUndoRedo(action) {
|
|
15
|
+
return [UNDO, REDO].includes(action.type);
|
|
16
|
+
}
|
|
17
|
+
export function isUndo(action) {
|
|
18
|
+
return action.type === UNDO;
|
|
19
|
+
}
|
|
20
|
+
export function isDocumentAction(action) {
|
|
21
|
+
return [SET_NAME, UNDO, REDO, PRUNE, LOAD_STATE].includes(action.type);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Helper function to be used by action creators.
|
|
25
|
+
*
|
|
26
|
+
* @remarks
|
|
27
|
+
* Creates an action with the given type and input properties. The input
|
|
28
|
+
* properties default to an empty object.
|
|
29
|
+
*
|
|
30
|
+
* @typeParam A - Type of the action to be returned.
|
|
31
|
+
*
|
|
32
|
+
* @param type - The type of the action.
|
|
33
|
+
* @param input - The input properties of the action.
|
|
34
|
+
* @param attachments - The attachments included in the action.
|
|
35
|
+
* @param validator - The validator to use for the input properties.
|
|
36
|
+
* @param scope - The scope of the action, can either be 'global' or 'local'.
|
|
37
|
+
* @param skip - The number of operations to skip before this new action is applied.
|
|
38
|
+
*
|
|
39
|
+
* @throws Error if the type is empty or not a string.
|
|
40
|
+
*
|
|
41
|
+
* @returns The new action.
|
|
42
|
+
*/
|
|
43
|
+
export function createAction(type, input, attachments, validator, scope = "global") {
|
|
44
|
+
if (!type) {
|
|
45
|
+
throw new Error("Empty action type");
|
|
46
|
+
}
|
|
47
|
+
if (typeof type !== "string") {
|
|
48
|
+
throw new Error(`Invalid action type: ${JSON.stringify(type)}`);
|
|
49
|
+
}
|
|
50
|
+
const action = {
|
|
51
|
+
type,
|
|
52
|
+
input,
|
|
53
|
+
scope,
|
|
54
|
+
};
|
|
55
|
+
if (attachments) {
|
|
56
|
+
action.attachments = attachments;
|
|
57
|
+
}
|
|
58
|
+
try {
|
|
59
|
+
validator?.().parse(action.input);
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
if (error instanceof ZodError) {
|
|
63
|
+
throw new InvalidActionInputZodError(error.issues);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
throw new InvalidActionInputError(error);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return action;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Helper function to create a document model reducer.
|
|
73
|
+
*
|
|
74
|
+
* @remarks
|
|
75
|
+
* This function creates a new reducer that wraps the provided `reducer` with
|
|
76
|
+
* `documentReducer`, adding support for document actions:
|
|
77
|
+
* - `SET_NAME`
|
|
78
|
+
* - `UNDO`
|
|
79
|
+
* - `REDO`
|
|
80
|
+
* - `PRUNE`
|
|
81
|
+
*
|
|
82
|
+
* It also updates the document-related attributes on every operation.
|
|
83
|
+
*
|
|
84
|
+
* @param reducer - The custom reducer to wrap.
|
|
85
|
+
* @param documentReducer - The document reducer to use.
|
|
86
|
+
*
|
|
87
|
+
* @returns The new reducer.
|
|
88
|
+
*/
|
|
89
|
+
export function createReducer(stateReducer, documentReducer = baseReducer) {
|
|
90
|
+
const reducer = (document, action, dispatch, options) => {
|
|
91
|
+
return documentReducer(document, action, stateReducer, dispatch, options);
|
|
92
|
+
};
|
|
93
|
+
return reducer;
|
|
94
|
+
}
|
|
95
|
+
export function baseCreateExtendedState(initialState, createState) {
|
|
96
|
+
const id = initialState?.id ?? generateUUID();
|
|
97
|
+
return {
|
|
98
|
+
name: "",
|
|
99
|
+
documentType: "",
|
|
100
|
+
revision: {
|
|
101
|
+
global: 0,
|
|
102
|
+
local: 0,
|
|
103
|
+
},
|
|
104
|
+
created: new Date().toISOString(),
|
|
105
|
+
lastModified: new Date().toISOString(),
|
|
106
|
+
attachments: {},
|
|
107
|
+
...initialState,
|
|
108
|
+
id: id,
|
|
109
|
+
slug: initialState?.slug ?? id,
|
|
110
|
+
state: createState?.(initialState?.state) ??
|
|
111
|
+
(initialState?.state ?? {
|
|
112
|
+
global: {},
|
|
113
|
+
local: {},
|
|
114
|
+
}),
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
export function baseCreateDocument(initialState, createState) {
|
|
118
|
+
const state = baseCreateExtendedState(initialState, createState);
|
|
119
|
+
return {
|
|
120
|
+
...state,
|
|
121
|
+
initialState: state,
|
|
122
|
+
operations: { global: [], local: [] },
|
|
123
|
+
clipboard: [],
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
export function hashDocumentStateForScope(document, scope = "global") {
|
|
127
|
+
return hash(stringifyJson(document.state[scope] || ""));
|
|
128
|
+
}
|
|
129
|
+
export function readOnly(value) {
|
|
130
|
+
return Object.freeze(value);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Maps skipped operations in an array of operations.
|
|
134
|
+
* Skipped operations are operations that are ignored during processing.
|
|
135
|
+
* @param operations - The array of operations to map.
|
|
136
|
+
* @param skippedHeadOperations - The number of operations to skip at the head of the array of operations.
|
|
137
|
+
* @returns An array of mapped operations with ignore flag indicating if the operation is skipped.
|
|
138
|
+
* @throws Error if the operation index is invalid and there are missing operations.
|
|
139
|
+
*/
|
|
140
|
+
export function mapSkippedOperations(operations, skippedHeadOperations) {
|
|
141
|
+
const ops = [...operations];
|
|
142
|
+
let skipped = skippedHeadOperations || 0;
|
|
143
|
+
let latestOpIndex = ops.length > 0 ? ops[ops.length - 1].index : 0;
|
|
144
|
+
const scopeOpsWithIgnore = [];
|
|
145
|
+
for (const operation of ops.reverse()) {
|
|
146
|
+
if (skipped > 0) {
|
|
147
|
+
const operationsDiff = latestOpIndex - operation.index;
|
|
148
|
+
skipped -= operationsDiff;
|
|
149
|
+
}
|
|
150
|
+
if (skipped < 0) {
|
|
151
|
+
throw new Error("Invalid operation index, missing operations");
|
|
152
|
+
}
|
|
153
|
+
const mappedOp = {
|
|
154
|
+
ignore: skipped > 0,
|
|
155
|
+
operation,
|
|
156
|
+
};
|
|
157
|
+
// here we add 1 to the skip number because we want to get the number of
|
|
158
|
+
// operations that we want to move the pointer back to get the latest valid operation
|
|
159
|
+
// operation.skip = 1 means that we want to move the pointer back 2 operations to get to the latest valid operation
|
|
160
|
+
const operationSkip = operation.skip > 0 ? operation.skip + 1 : 0;
|
|
161
|
+
if (operationSkip > 0 && operationSkip > skipped) {
|
|
162
|
+
const skipDiff = operationSkip - skipped;
|
|
163
|
+
skipped = skipped + skipDiff;
|
|
164
|
+
}
|
|
165
|
+
latestOpIndex = operation.index;
|
|
166
|
+
scopeOpsWithIgnore.push(mappedOp);
|
|
167
|
+
}
|
|
168
|
+
return scopeOpsWithIgnore.reverse();
|
|
169
|
+
}
|
|
170
|
+
// Flattens the mapped operations (with ignore flag) from all scopes into
|
|
171
|
+
// a single array and sorts them by timestamp
|
|
172
|
+
export function sortMappedOperations(operations) {
|
|
173
|
+
return Object.values(operations)
|
|
174
|
+
.flatMap((array) => array)
|
|
175
|
+
.sort((a, b) => new Date(a.operation.timestamp).getTime() -
|
|
176
|
+
new Date(b.operation.timestamp).getTime());
|
|
177
|
+
}
|
|
178
|
+
// gets the last modified timestamp of a document from§
|
|
179
|
+
// it's operations, falling back to the initial state
|
|
180
|
+
export function getDocumentLastModified(document) {
|
|
181
|
+
const sortedOperations = sortOperations(Object.values(document.operations).flat());
|
|
182
|
+
const timestamp = sortedOperations.at(-1)?.timestamp || document.initialState.lastModified;
|
|
183
|
+
return timestamp;
|
|
184
|
+
}
|
|
185
|
+
// Runs the operations on the initial data using the
|
|
186
|
+
// provided reducer, wrapped with the document reducer.
|
|
187
|
+
// This rebuilds the document according to the provided actions.
|
|
188
|
+
export function replayOperations(initialState, clearedOperations, stateReducer, dispatch, header, documentReducer = baseReducer, skipHeaderOperations = {}, options) {
|
|
189
|
+
// wraps the provided custom reducer with the
|
|
190
|
+
// base document reducer
|
|
191
|
+
const wrappedReducer = createReducer(stateReducer, documentReducer);
|
|
192
|
+
return replayDocument(initialState, clearedOperations, wrappedReducer, dispatch, header, skipHeaderOperations, options);
|
|
193
|
+
}
|
|
194
|
+
// Runs the operations on the initial data using the
|
|
195
|
+
// provided document reducer.
|
|
196
|
+
// This rebuilds the document according to the provided actions.
|
|
197
|
+
export function replayDocument(initialState, operations, reducer, dispatch, header, skipHeaderOperations = {}, options) {
|
|
198
|
+
const { checkHashes = true, reuseOperationResultingState, operationResultingStateParser = parseResultingState, } = options || {};
|
|
199
|
+
let documentState = initialState;
|
|
200
|
+
const operationsToReplay = [];
|
|
201
|
+
const initialOperations = {
|
|
202
|
+
global: [],
|
|
203
|
+
local: [],
|
|
204
|
+
};
|
|
205
|
+
// if operation resulting state is to be used then
|
|
206
|
+
// looks for the last operation with state of each
|
|
207
|
+
// scope to use it as the starting point and only
|
|
208
|
+
// replay operations that follow it
|
|
209
|
+
if (reuseOperationResultingState) {
|
|
210
|
+
for (const [scope, scopeOperations] of Object.entries(operations)) {
|
|
211
|
+
const index = scopeOperations.findLastIndex((s) => !!s.resultingState);
|
|
212
|
+
if (index < 0) {
|
|
213
|
+
operationsToReplay.push(...scopeOperations);
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
const opWithState = scopeOperations[index];
|
|
217
|
+
if (!opWithState.resultingState)
|
|
218
|
+
continue;
|
|
219
|
+
try {
|
|
220
|
+
const scopeState = operationResultingStateParser(opWithState.resultingState);
|
|
221
|
+
documentState = {
|
|
222
|
+
...documentState,
|
|
223
|
+
state: {
|
|
224
|
+
...documentState.state,
|
|
225
|
+
// TODO how to deal with attachments?
|
|
226
|
+
[scope]: scopeState,
|
|
227
|
+
},
|
|
228
|
+
};
|
|
229
|
+
initialOperations[scope].push(...scopeOperations.slice(0, index + 1));
|
|
230
|
+
operationsToReplay.push(...scopeOperations.slice(index + 1));
|
|
231
|
+
}
|
|
232
|
+
catch {
|
|
233
|
+
/* if parsing fails then keeps replays all scope operations */
|
|
234
|
+
operationsToReplay.push(...scopeOperations);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
operationsToReplay.push(...Object.values(operations).flat());
|
|
240
|
+
}
|
|
241
|
+
// builds a new document from the initial data
|
|
242
|
+
const document = baseCreateDocument(documentState);
|
|
243
|
+
if (header?.slug) {
|
|
244
|
+
document.slug = header.slug;
|
|
245
|
+
}
|
|
246
|
+
document.initialState = initialState;
|
|
247
|
+
document.operations = initialOperations;
|
|
248
|
+
let result = document;
|
|
249
|
+
// if there are operations left without resulting state
|
|
250
|
+
// then replays them
|
|
251
|
+
if (operationsToReplay.length) {
|
|
252
|
+
result = operationsToReplay.reduce((document, operation) => {
|
|
253
|
+
const doc = reducer(document, operation, dispatch, {
|
|
254
|
+
skip: operation.skip,
|
|
255
|
+
ignoreSkipOperations: true,
|
|
256
|
+
reuseHash: !checkHashes,
|
|
257
|
+
});
|
|
258
|
+
return doc;
|
|
259
|
+
}, document);
|
|
260
|
+
}
|
|
261
|
+
// if not then updates the document header according
|
|
262
|
+
// to the latest operation of each scope
|
|
263
|
+
else {
|
|
264
|
+
for (const scopeOperations of Object.values(initialOperations)) {
|
|
265
|
+
const lastOperation = scopeOperations.at(-1);
|
|
266
|
+
if (lastOperation) {
|
|
267
|
+
result = updateHeader(result, lastOperation);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
// if hash generation was skipped then checks if the hash
|
|
272
|
+
// of each scope matches the hash of last operation
|
|
273
|
+
if (!checkHashes) {
|
|
274
|
+
for (const scope of Object.keys(result.state)) {
|
|
275
|
+
for (let i = operationsToReplay.length - 1; i >= 0; i--) {
|
|
276
|
+
const operation = operationsToReplay[i];
|
|
277
|
+
if (operation.scope !== scope) {
|
|
278
|
+
continue;
|
|
279
|
+
}
|
|
280
|
+
if (operation.hash !== hashDocumentStateForScope(result, scope)) {
|
|
281
|
+
throw new Error(`Hash mismatch for scope ${scope}`);
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
break;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
// reuses operation timestamp if provided
|
|
290
|
+
const resultOperations = Object.keys(result.operations).reduce((acc, key) => {
|
|
291
|
+
const scope = key;
|
|
292
|
+
return {
|
|
293
|
+
...acc,
|
|
294
|
+
[scope]: [
|
|
295
|
+
...result.operations[scope].map((operation, index) => {
|
|
296
|
+
return {
|
|
297
|
+
...operation,
|
|
298
|
+
timestamp: operations[scope][index]?.timestamp ?? operation.timestamp,
|
|
299
|
+
};
|
|
300
|
+
}),
|
|
301
|
+
],
|
|
302
|
+
};
|
|
303
|
+
}, { global: [], local: [] });
|
|
304
|
+
// gets the last modified timestamp from the latest operation
|
|
305
|
+
const lastModified = Object.values(resultOperations).reduce((acc, curr) => {
|
|
306
|
+
const operation = curr.at(-1);
|
|
307
|
+
if (operation && operation.timestamp > acc) {
|
|
308
|
+
acc = operation.timestamp;
|
|
309
|
+
}
|
|
310
|
+
return acc;
|
|
311
|
+
}, initialState.lastModified);
|
|
312
|
+
return {
|
|
313
|
+
...result,
|
|
314
|
+
operations: resultOperations,
|
|
315
|
+
lastModified,
|
|
316
|
+
meta: header?.meta ?? {},
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
export function parseResultingState(state) {
|
|
320
|
+
const stateType = typeof state;
|
|
321
|
+
if (stateType === "string") {
|
|
322
|
+
return JSON.parse(state);
|
|
323
|
+
}
|
|
324
|
+
else if (stateType === "object") {
|
|
325
|
+
return state;
|
|
326
|
+
}
|
|
327
|
+
else {
|
|
328
|
+
throw new Error(`Providing resulting state is of type: ${stateType}`);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../src/document/utils/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../../../src/document/utils/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,aAAa,MAAM,uBAAuB,CAAC;AAclD,MAAM,UAAU,UAAU,CAAC,MAAiB;IAC1C,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CACb,wCAAwC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAC7D,CAAC;IACJ,CAAC;IAED,OAAO,YAAY,EAAE,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAmB;IAClD,OAAO,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,EAC5C,UAAU,EACV,MAAM,EACN,SAAS,EACT,iBAAiB,GACS;IAC1B,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC;IACjD,OAAO;QACL,gBAAgB,CAAC,SAAS,CAAC,EAAE,aAAa;QAC1C,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,oBAAoB;QACpC,IAAI;QACF,kEAAkE;QAClE,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CACvE;QACD,iBAAiB,EAAE,+CAA+C;KACnE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,GAAG,IAAI,WAAW,EAAE,CAAC;AAErC,MAAM,UAAU,8BAA8B,CAC5C,MAAwC;IAExC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,yBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;IACrE,OAAO,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,EAAiC;IACtD,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IAC9D,OAAO,KAAK,CAAC,SAAS,CAAC,GAAG;SACvB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SAC5D,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,GAAW;IAChC,OAAO,IAAI,UAAU,CACnB,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC;QACxC,OAAO,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACzB,CAAC,CAAC,IAAI,EAAE,CACT,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAAkC,EAClC,UAAmC;IAEnC,MAAM,MAAM,GAAG,6BAA6B,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,8BAA8B,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,MAAM,EAAE,KAAK,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAAwE,EACxE,OAA2B,EAC3B,QAAmB,EACnB,OAA2E,EAC3E,WAAoC;IAEpC,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE;QAClD,SAAS,EAAE,IAAI;QACf,4BAA4B,EAAE,IAAI;KACnC,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,iBAAiB,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;IAC7E,MAAM,SAAS,GAAG,MAAM,uBAAuB,CAC7C;QACE,GAAG,OAAO;QACV,SAAS;QACT,iBAAiB;KAClB,EACD,WAAW,CACZ,CAAC;IAEF,OAAO;QACL,GAAG,SAAS;QACZ,OAAO,EAAE;YACP,GAAG,SAAS,CAAC,OAAO;YACpB,MAAM,EAAE;gBACN,GAAG,SAAS,CAAC,OAAO,EAAE,MAAM;gBAC5B,GAAG,OAAO,CAAC,MAAM;gBACjB,UAAU,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC;aAC9D;SACF;KACW,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,SAAoB,EACpB,MAAwC,EACxC,aAA2C;IAE3C,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;IACjC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAqC,CAAC;IACzE,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,eAAe,GAAG,8BAA8B,CAAC,MAAM,CAAC,CAAC;IAC/D,OAAO,aAAa,CAAC,SAAS,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;AACnE,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { type Action, type DocumentOperations, type Operation, type OperationScope } from "../types.js";
|
|
2
|
+
export type OperationIndex = {
|
|
3
|
+
index: number;
|
|
4
|
+
skip: number;
|
|
5
|
+
id?: string;
|
|
6
|
+
timestamp?: string;
|
|
7
|
+
};
|
|
8
|
+
export declare enum IntegrityIssueType {
|
|
9
|
+
UNEXPECTED_INDEX = "UNEXPECTED_INDEX"
|
|
10
|
+
}
|
|
11
|
+
export declare enum IntegrityIssueSubType {
|
|
12
|
+
DUPLICATED_INDEX = "DUPLICATED_INDEX",
|
|
13
|
+
MISSING_INDEX = "MISSING_INDEX"
|
|
14
|
+
}
|
|
15
|
+
type IntegrityIssue = {
|
|
16
|
+
operation: OperationIndex;
|
|
17
|
+
issue: IntegrityIssueType;
|
|
18
|
+
category: IntegrityIssueSubType;
|
|
19
|
+
message: string;
|
|
20
|
+
};
|
|
21
|
+
type Reshuffle<TOp extends OperationIndex> = (startIndex: OperationIndex, opsA: TOp[], opsB: TOp[]) => TOp[];
|
|
22
|
+
export declare function checkCleanedOperationsIntegrity(sortedOperations: OperationIndex[]): IntegrityIssue[];
|
|
23
|
+
export declare function garbageCollect<TOpIndex extends OperationIndex>(sortedOperations: TOpIndex[]): TOpIndex[];
|
|
24
|
+
export declare function addUndo(sortedOperations: Operation[]): Operation[];
|
|
25
|
+
export declare function sortOperations<TOpIndex extends OperationIndex>(operations: TOpIndex[]): TOpIndex[];
|
|
26
|
+
export declare function reshuffleByTimestamp<TOp extends OperationIndex>(startIndex: OperationIndex, opsA: TOp[], opsB: TOp[]): TOp[];
|
|
27
|
+
export declare function reshuffleByTimestampAndIndex<TOp extends OperationIndex>(startIndex: OperationIndex, opsA: TOp[], opsB: TOp[]): TOp[];
|
|
28
|
+
export declare function operationsAreEqual<TOp>(op1: TOp, op2: TOp): boolean;
|
|
29
|
+
export declare function attachBranch<TOp extends OperationIndex>(trunk: TOp[], newBranch: TOp[]): [TOp[], TOp[]];
|
|
30
|
+
export declare function precedes(op1: OperationIndex, op2: OperationIndex): boolean;
|
|
31
|
+
export declare function split<TOp extends OperationIndex>(sortedTargetOperations: TOp[], sortedMergeOperations: TOp[]): [TOp[], TOp[], TOp[]];
|
|
32
|
+
export declare function merge<TOp extends OperationIndex>(sortedTargetOperations: TOp[], sortedMergeOperations: TOp[], reshuffle: Reshuffle<TOp>): TOp[];
|
|
33
|
+
export declare function nextSkipNumber(sortedOperations: OperationIndex[]): number;
|
|
34
|
+
export declare function checkOperationsIntegrity(operations: Operation[]): IntegrityIssue[];
|
|
35
|
+
export type OperationsByScope = Partial<Record<OperationScope, Operation[]>>;
|
|
36
|
+
export declare function groupOperationsByScope(operations: Operation[]): Partial<Record<OperationScope, Operation[]>>;
|
|
37
|
+
type PrepareOperationsResult = {
|
|
38
|
+
validOperations: Operation[];
|
|
39
|
+
invalidOperations: Operation[];
|
|
40
|
+
duplicatedOperations: Operation[];
|
|
41
|
+
integrityIssues: IntegrityIssue[];
|
|
42
|
+
};
|
|
43
|
+
export declare function prepareOperations(operationsHistory: Operation[], newOperations: Operation[]): PrepareOperationsResult;
|
|
44
|
+
export declare function removeExistingOperations(newOperations: Operation[], operationsHistory: Operation[]): Operation[];
|
|
45
|
+
export type SkipHeaderOperationIndex = Partial<Pick<OperationIndex, "index">> & Pick<OperationIndex, "skip">;
|
|
46
|
+
/**
|
|
47
|
+
* Skips header operations and returns the remaining operations.
|
|
48
|
+
*
|
|
49
|
+
* @param operations - The array of operations.
|
|
50
|
+
* @param skipHeaderOperation - The skip header operation index.
|
|
51
|
+
* @returns The remaining operations after skipping header operations.
|
|
52
|
+
*/
|
|
53
|
+
export declare function skipHeaderOperations<TOpIndex extends OperationIndex>(operations: TOpIndex[], skipHeaderOperation: SkipHeaderOperationIndex): TOpIndex[];
|
|
54
|
+
export declare function garbageCollectDocumentOperations<TAction extends Action = Action>(documentOperations: DocumentOperations<TAction>): DocumentOperations<TAction>;
|
|
55
|
+
/**
|
|
56
|
+
* Filters out duplicated operations from the target operations array based on their IDs.
|
|
57
|
+
* If an operation has an ID, it is considered duplicated if there is another operation in the source operations array with the same ID.
|
|
58
|
+
* If an operation does not have an ID, it is considered unique and will not be filtered out.
|
|
59
|
+
* @param targetOperations - The array of target operations to filter.
|
|
60
|
+
* @param sourceOperations - The array of source operations to compare against.
|
|
61
|
+
* @returns An array of operations with duplicates filtered out.
|
|
62
|
+
*/
|
|
63
|
+
export declare function filterDuplicatedOperations<T extends {
|
|
64
|
+
id?: string | number;
|
|
65
|
+
}>(targetOperations: T[], sourceOperations: T[]): T[];
|
|
66
|
+
export declare function filterDocumentOperationsResultingState(documentOperations?: DocumentOperations): DocumentOperations;
|
|
67
|
+
/**
|
|
68
|
+
* Calculates the difference between two arrays of operations.
|
|
69
|
+
* Returns an array of operations that are present in `clearedOperationsA` but not in `clearedOperationsB`.
|
|
70
|
+
*
|
|
71
|
+
* @template TOp - The type of the operations.
|
|
72
|
+
* @param {TOp[]} clearedOperationsA - The first array of operations.
|
|
73
|
+
* @param {TOp[]} clearedOperationsB - The second array of operations.
|
|
74
|
+
* @returns {TOp[]} - The difference between the two arrays of operations.
|
|
75
|
+
*/
|
|
76
|
+
export declare function diffOperations<TOp extends OperationIndex>(clearedOperationsA: TOp[], clearedOperationsB: TOp[]): TOp[];
|
|
77
|
+
export {};
|
|
78
|
+
//# sourceMappingURL=document-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-helpers.d.ts","sourceRoot":"","sources":["../../../../src/document/utils/document-helpers.ts"],"names":[],"mappings":"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"}
|