@fluidframework/matrix 2.0.0-internal.3.0.1 → 2.0.0-internal.3.1.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.
Files changed (110) hide show
  1. package/.eslintrc.js +20 -21
  2. package/.mocharc.js +2 -2
  3. package/README.md +21 -21
  4. package/api-extractor.json +2 -2
  5. package/bench/bsp-set-optimizations.md +5 -5
  6. package/bench/src/index.ts +38 -20
  7. package/bench/src/read/map.ts +16 -10
  8. package/bench/src/read/nativearray.ts +16 -10
  9. package/bench/src/read/test.ts +17 -19
  10. package/bench/src/read/tiled.ts +240 -181
  11. package/bench/src/util.ts +19 -18
  12. package/bench/tsconfig.json +8 -13
  13. package/dist/bspSet.d.ts.map +1 -1
  14. package/dist/bspSet.js.map +1 -1
  15. package/dist/handlecache.d.ts.map +1 -1
  16. package/dist/handlecache.js +1 -3
  17. package/dist/handlecache.js.map +1 -1
  18. package/dist/handletable.d.ts.map +1 -1
  19. package/dist/handletable.js +7 -3
  20. package/dist/handletable.js.map +1 -1
  21. package/dist/matrix.d.ts +1 -1
  22. package/dist/matrix.d.ts.map +1 -1
  23. package/dist/matrix.js +28 -19
  24. package/dist/matrix.js.map +1 -1
  25. package/dist/ops.d.ts.map +1 -1
  26. package/dist/ops.js.map +1 -1
  27. package/dist/packageVersion.d.ts +1 -1
  28. package/dist/packageVersion.js +1 -1
  29. package/dist/packageVersion.js.map +1 -1
  30. package/dist/permutationvector.d.ts.map +1 -1
  31. package/dist/permutationvector.js +15 -8
  32. package/dist/permutationvector.js.map +1 -1
  33. package/dist/productSet.d.ts.map +1 -1
  34. package/dist/productSet.js +6 -3
  35. package/dist/productSet.js.map +1 -1
  36. package/dist/range.d.ts.map +1 -1
  37. package/dist/range.js.map +1 -1
  38. package/dist/runtime.d.ts.map +1 -1
  39. package/dist/runtime.js.map +1 -1
  40. package/dist/serialization.d.ts.map +1 -1
  41. package/dist/serialization.js.map +1 -1
  42. package/dist/sparsearray2d.d.ts.map +1 -1
  43. package/dist/sparsearray2d.js +12 -12
  44. package/dist/sparsearray2d.js.map +1 -1
  45. package/dist/split.d.ts.map +1 -1
  46. package/dist/split.js +5 -3
  47. package/dist/split.js.map +1 -1
  48. package/dist/types.d.ts.map +1 -1
  49. package/dist/types.js.map +1 -1
  50. package/dist/undoprovider.d.ts.map +1 -1
  51. package/dist/undoprovider.js.map +1 -1
  52. package/lib/bspSet.d.ts.map +1 -1
  53. package/lib/bspSet.js.map +1 -1
  54. package/lib/handlecache.d.ts.map +1 -1
  55. package/lib/handlecache.js +1 -3
  56. package/lib/handlecache.js.map +1 -1
  57. package/lib/handletable.d.ts.map +1 -1
  58. package/lib/handletable.js +7 -3
  59. package/lib/handletable.js.map +1 -1
  60. package/lib/matrix.d.ts +1 -1
  61. package/lib/matrix.d.ts.map +1 -1
  62. package/lib/matrix.js +29 -20
  63. package/lib/matrix.js.map +1 -1
  64. package/lib/ops.d.ts.map +1 -1
  65. package/lib/ops.js.map +1 -1
  66. package/lib/packageVersion.d.ts +1 -1
  67. package/lib/packageVersion.js +1 -1
  68. package/lib/packageVersion.js.map +1 -1
  69. package/lib/permutationvector.d.ts.map +1 -1
  70. package/lib/permutationvector.js +15 -8
  71. package/lib/permutationvector.js.map +1 -1
  72. package/lib/productSet.d.ts.map +1 -1
  73. package/lib/productSet.js +6 -3
  74. package/lib/productSet.js.map +1 -1
  75. package/lib/range.d.ts.map +1 -1
  76. package/lib/range.js.map +1 -1
  77. package/lib/runtime.d.ts.map +1 -1
  78. package/lib/runtime.js.map +1 -1
  79. package/lib/serialization.d.ts.map +1 -1
  80. package/lib/serialization.js.map +1 -1
  81. package/lib/sparsearray2d.d.ts.map +1 -1
  82. package/lib/sparsearray2d.js +12 -12
  83. package/lib/sparsearray2d.js.map +1 -1
  84. package/lib/split.d.ts.map +1 -1
  85. package/lib/split.js +5 -3
  86. package/lib/split.js.map +1 -1
  87. package/lib/types.d.ts.map +1 -1
  88. package/lib/types.js.map +1 -1
  89. package/lib/undoprovider.d.ts.map +1 -1
  90. package/lib/undoprovider.js +1 -1
  91. package/lib/undoprovider.js.map +1 -1
  92. package/package.json +117 -116
  93. package/prettier.config.cjs +1 -1
  94. package/src/bspSet.ts +507 -434
  95. package/src/handlecache.ts +114 -112
  96. package/src/handletable.ts +66 -62
  97. package/src/matrix.ts +781 -710
  98. package/src/ops.ts +11 -11
  99. package/src/packageVersion.ts +1 -1
  100. package/src/permutationvector.ts +425 -368
  101. package/src/productSet.ts +852 -788
  102. package/src/range.ts +8 -8
  103. package/src/runtime.ts +35 -35
  104. package/src/serialization.ts +13 -9
  105. package/src/sparsearray2d.ts +196 -192
  106. package/src/split.ts +111 -90
  107. package/src/types.ts +3 -3
  108. package/src/undoprovider.ts +161 -144
  109. package/tsconfig.esnext.json +6 -6
  110. package/tsconfig.json +8 -12
@@ -1 +1 @@
1
- {"version":3,"file":"undoprovider.js","sourceRoot":"","sources":["../src/undoprovider.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/common-utils\";\nimport { TrackingGroup, MergeTreeDeltaOperationType, MergeTreeDeltaType } from \"@fluidframework/merge-tree\";\nimport { MatrixItem, SharedMatrix } from \"./matrix\";\nimport { Handle, isHandleValid } from \"./handletable\";\nimport { PermutationSegment, PermutationVector } from \"./permutationvector\";\nimport { IUndoConsumer } from \"./types\";\n\nexport class VectorUndoProvider {\n // 'currentGroup' and 'currentOp' are used while applying an IRevertable.revert() to coalesce\n // the recorded into a single IRevertable / tracking group as they move between the undo <->\n // redo stacks.\n private currentGroup?: TrackingGroup;\n private currentOp?: MergeTreeDeltaType;\n\n constructor(\n private readonly manager: IUndoConsumer,\n private readonly undoInsert: (segment: PermutationSegment) => void,\n private readonly undoRemove: (segment: PermutationSegment) => void,\n ) { }\n\n public record(operation: MergeTreeDeltaOperationType, ranges: { segment: PermutationSegment; }[]) {\n if (ranges.length > 0) {\n // Link each segment to a new TrackingGroup. A TrackingGroup keeps track of the original\n // set of linked segments, including any fragmentatiton that occurs due to future splitting.\n //\n // A TrackingGroup also prevents removed segments from being unlinked from the tree during\n // Zamboni and guarantees segments will not be merged/coalesced with segments outside of the\n // current tracking group.\n //\n // These properties allow us to rely on MergeTree.getPosition() to find the locations/lengths\n // of all content contained within the tracking group in the future.\n\n // If we are in the process of reverting, the `IRevertible.revert()` will provide the tracking\n // group so that we can preserve the original segment ranges as a single op/group as we move\n // ops between the undo <-> redo stacks.\n const trackingGroup = this.currentGroup ?? new TrackingGroup();\n for (const range of ranges) {\n trackingGroup.link(range.segment);\n }\n\n // For SharedMatrix, each IRevertibles always holds a single row/col operation.\n // Therefore, 'currentOp' must either be undefined or equal to the current op.\n assert(this.currentOp === undefined || this.currentOp === operation,\n 0x02a /* \"On vector undo, unexpected 'currentOp' type/state!\" */);\n\n switch (operation) {\n case MergeTreeDeltaType.INSERT:\n if (this.currentOp !== MergeTreeDeltaType.INSERT) {\n this.pushRevertible(trackingGroup, this.undoInsert);\n }\n break;\n\n case MergeTreeDeltaType.REMOVE: {\n if (this.currentOp !== MergeTreeDeltaType.REMOVE) {\n this.pushRevertible(trackingGroup, this.undoRemove);\n }\n break;\n }\n\n default:\n throw new Error(\"operation type not revertible\");\n }\n\n // If we are in the process of reverting, set 'currentOp' to remind ourselves not to push\n // another revertible until `IRevertable.revert()` finishes the current op and clears this\n // field.\n if (this.currentGroup !== undefined) {\n this.currentOp = operation;\n }\n }\n }\n\n private pushRevertible(trackingGroup: TrackingGroup, callback: (segment: PermutationSegment) => void) {\n const revertible = {\n revert: () => {\n assert(this.currentGroup === undefined && this.currentOp === undefined,\n 0x02b /* \"Must not nest calls to IRevertible.revert()\" */);\n\n this.currentGroup = new TrackingGroup();\n\n try {\n while (trackingGroup.size > 0) {\n const segment = trackingGroup.segments[0] as PermutationSegment;\n\n // Unlink 'segment' from the current tracking group before invoking the callback\n // to exclude the current undo/redo segment from those copied to the replacement\n // segment (if any). (See 'PermutationSegment.transferToReplacement()')\n segment.trackingCollection.unlink(trackingGroup);\n\n callback(segment);\n }\n } finally {\n this.currentOp = undefined;\n this.currentGroup = undefined;\n }\n },\n discard: () => {\n while (trackingGroup.size > 0) {\n trackingGroup.unlink(trackingGroup.segments[0]);\n }\n },\n };\n\n this.manager.pushToCurrentOperation(revertible);\n\n return revertible;\n }\n}\n\nexport class MatrixUndoProvider<T> {\n constructor(\n private readonly consumer: IUndoConsumer,\n private readonly matrix: SharedMatrix<T>,\n private readonly rows: PermutationVector,\n private readonly cols: PermutationVector,\n ) {\n rows.undo = new VectorUndoProvider(\n consumer,\n /* undoInsert: */ (segment: PermutationSegment) => {\n const start = this.rows.getPosition(segment);\n this.matrix.removeRows(start, segment.cachedLength);\n },\n /* undoRemove: */ (segment: PermutationSegment) => {\n this.matrix._undoRemoveRows(segment);\n },\n );\n cols.undo = new VectorUndoProvider(\n consumer,\n /* undoInsert: */ (segment: PermutationSegment) => {\n const start = this.cols.getPosition(segment);\n this.matrix.removeCols(start, segment.cachedLength);\n },\n /* undoRemove: */ (segment: PermutationSegment) => {\n this.matrix._undoRemoveCols(segment);\n },\n );\n }\n\n cellSet(rowHandle: Handle, colHandle: Handle, oldValue: MatrixItem<T>) {\n assert(isHandleValid(rowHandle) && isHandleValid(colHandle),\n 0x02c /* \"On cellSet(), invalid row and/or column handles!\" */);\n\n if (this.consumer !== undefined) {\n this.consumer.pushToCurrentOperation({\n revert: () => {\n this.matrix.setCell(\n this.rows.handleToPosition(rowHandle),\n this.cols.handleToPosition(colHandle),\n oldValue);\n },\n discard: () => {},\n });\n }\n }\n}\n"]}
1
+ {"version":3,"file":"undoprovider.js","sourceRoot":"","sources":["../src/undoprovider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AACtD,OAAO,EACN,aAAa,EAEb,kBAAkB,GAClB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAU,aAAa,EAAE,MAAM,eAAe,CAAC;AAItD,MAAM,OAAO,kBAAkB;IAO9B,YACkB,OAAsB,EACtB,UAAiD,EACjD,UAAiD;QAFjD,YAAO,GAAP,OAAO,CAAe;QACtB,eAAU,GAAV,UAAU,CAAuC;QACjD,eAAU,GAAV,UAAU,CAAuC;IAChE,CAAC;IAEG,MAAM,CACZ,SAAsC,EACtC,MAAyC;;QAEzC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YACtB,yFAAyF;YACzF,4FAA4F;YAC5F,EAAE;YACF,0FAA0F;YAC1F,4FAA4F;YAC5F,0BAA0B;YAC1B,EAAE;YACF,6FAA6F;YAC7F,oEAAoE;YAEpE,8FAA8F;YAC9F,4FAA4F;YAC5F,wCAAwC;YACxC,MAAM,aAAa,GAAG,MAAA,IAAI,CAAC,YAAY,mCAAI,IAAI,aAAa,EAAE,CAAC;YAC/D,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;gBAC3B,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;aAClC;YAED,+EAA+E;YAC/E,8EAA8E;YAC9E,MAAM,CACL,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAC5D,KAAK,CAAC,0DAA0D,CAChE,CAAC;YAEF,QAAQ,SAAS,EAAE;gBAClB,KAAK,kBAAkB,CAAC,MAAM;oBAC7B,IAAI,IAAI,CAAC,SAAS,KAAK,kBAAkB,CAAC,MAAM,EAAE;wBACjD,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;qBACpD;oBACD,MAAM;gBAEP,KAAK,kBAAkB,CAAC,MAAM,CAAC,CAAC;oBAC/B,IAAI,IAAI,CAAC,SAAS,KAAK,kBAAkB,CAAC,MAAM,EAAE;wBACjD,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;qBACpD;oBACD,MAAM;iBACN;gBAED;oBACC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;aAClD;YAED,yFAAyF;YACzF,0FAA0F;YAC1F,SAAS;YACT,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;gBACpC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;aAC3B;SACD;IACF,CAAC;IAEO,cAAc,CACrB,aAA4B,EAC5B,QAA+C;QAE/C,MAAM,UAAU,GAAG;YAClB,MAAM,EAAE,GAAG,EAAE;gBACZ,MAAM,CACL,IAAI,CAAC,YAAY,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAC/D,KAAK,CAAC,mDAAmD,CACzD,CAAC;gBAEF,IAAI,CAAC,YAAY,GAAG,IAAI,aAAa,EAAE,CAAC;gBAExC,IAAI;oBACH,OAAO,aAAa,CAAC,IAAI,GAAG,CAAC,EAAE;wBAC9B,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAuB,CAAC;wBAEhE,gFAAgF;wBAChF,gFAAgF;wBAChF,uEAAuE;wBACvE,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;wBAEjD,QAAQ,CAAC,OAAO,CAAC,CAAC;qBAClB;iBACD;wBAAS;oBACT,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;oBAC3B,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;iBAC9B;YACF,CAAC;YACD,OAAO,EAAE,GAAG,EAAE;gBACb,OAAO,aAAa,CAAC,IAAI,GAAG,CAAC,EAAE;oBAC9B,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;iBAChD;YACF,CAAC;SACD,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;QAEhD,OAAO,UAAU,CAAC;IACnB,CAAC;CACD;AAED,MAAM,OAAO,kBAAkB;IAC9B,YACkB,QAAuB,EACvB,MAAuB,EACvB,IAAuB,EACvB,IAAuB;QAHvB,aAAQ,GAAR,QAAQ,CAAe;QACvB,WAAM,GAAN,MAAM,CAAiB;QACvB,SAAI,GAAJ,IAAI,CAAmB;QACvB,SAAI,GAAJ,IAAI,CAAmB;QAExC,IAAI,CAAC,IAAI,GAAG,IAAI,kBAAkB,CACjC,QAAQ;QACR,iBAAiB,CAAC,CAAC,OAA2B,EAAE,EAAE;YACjD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;QACrD,CAAC;QACD,iBAAiB,CAAC,CAAC,OAA2B,EAAE,EAAE;YACjD,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC,CACD,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,IAAI,kBAAkB,CACjC,QAAQ;QACR,iBAAiB,CAAC,CAAC,OAA2B,EAAE,EAAE;YACjD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;QACrD,CAAC;QACD,iBAAiB,CAAC,CAAC,OAA2B,EAAE,EAAE;YACjD,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC,CACD,CAAC;IACH,CAAC;IAED,OAAO,CAAC,SAAiB,EAAE,SAAiB,EAAE,QAAuB;QACpE,MAAM,CACL,aAAa,CAAC,SAAS,CAAC,IAAI,aAAa,CAAC,SAAS,CAAC,EACpD,KAAK,CAAC,wDAAwD,CAC9D,CAAC;QAEF,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;YAChC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC;gBACpC,MAAM,EAAE,GAAG,EAAE;oBACZ,IAAI,CAAC,MAAM,CAAC,OAAO,CAClB,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,EACrC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,EACrC,QAAQ,CACR,CAAC;gBACH,CAAC;gBACD,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;aACjB,CAAC,CAAC;SACH;IACF,CAAC;CACD","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/common-utils\";\nimport {\n\tTrackingGroup,\n\tMergeTreeDeltaOperationType,\n\tMergeTreeDeltaType,\n} from \"@fluidframework/merge-tree\";\nimport { MatrixItem, SharedMatrix } from \"./matrix\";\nimport { Handle, isHandleValid } from \"./handletable\";\nimport { PermutationSegment, PermutationVector } from \"./permutationvector\";\nimport { IUndoConsumer } from \"./types\";\n\nexport class VectorUndoProvider {\n\t// 'currentGroup' and 'currentOp' are used while applying an IRevertable.revert() to coalesce\n\t// the recorded into a single IRevertable / tracking group as they move between the undo <->\n\t// redo stacks.\n\tprivate currentGroup?: TrackingGroup;\n\tprivate currentOp?: MergeTreeDeltaType;\n\n\tconstructor(\n\t\tprivate readonly manager: IUndoConsumer,\n\t\tprivate readonly undoInsert: (segment: PermutationSegment) => void,\n\t\tprivate readonly undoRemove: (segment: PermutationSegment) => void,\n\t) {}\n\n\tpublic record(\n\t\toperation: MergeTreeDeltaOperationType,\n\t\tranges: { segment: PermutationSegment }[],\n\t) {\n\t\tif (ranges.length > 0) {\n\t\t\t// Link each segment to a new TrackingGroup. A TrackingGroup keeps track of the original\n\t\t\t// set of linked segments, including any fragmentatiton that occurs due to future splitting.\n\t\t\t//\n\t\t\t// A TrackingGroup also prevents removed segments from being unlinked from the tree during\n\t\t\t// Zamboni and guarantees segments will not be merged/coalesced with segments outside of the\n\t\t\t// current tracking group.\n\t\t\t//\n\t\t\t// These properties allow us to rely on MergeTree.getPosition() to find the locations/lengths\n\t\t\t// of all content contained within the tracking group in the future.\n\n\t\t\t// If we are in the process of reverting, the `IRevertible.revert()` will provide the tracking\n\t\t\t// group so that we can preserve the original segment ranges as a single op/group as we move\n\t\t\t// ops between the undo <-> redo stacks.\n\t\t\tconst trackingGroup = this.currentGroup ?? new TrackingGroup();\n\t\t\tfor (const range of ranges) {\n\t\t\t\ttrackingGroup.link(range.segment);\n\t\t\t}\n\n\t\t\t// For SharedMatrix, each IRevertibles always holds a single row/col operation.\n\t\t\t// Therefore, 'currentOp' must either be undefined or equal to the current op.\n\t\t\tassert(\n\t\t\t\tthis.currentOp === undefined || this.currentOp === operation,\n\t\t\t\t0x02a /* \"On vector undo, unexpected 'currentOp' type/state!\" */,\n\t\t\t);\n\n\t\t\tswitch (operation) {\n\t\t\t\tcase MergeTreeDeltaType.INSERT:\n\t\t\t\t\tif (this.currentOp !== MergeTreeDeltaType.INSERT) {\n\t\t\t\t\t\tthis.pushRevertible(trackingGroup, this.undoInsert);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MergeTreeDeltaType.REMOVE: {\n\t\t\t\t\tif (this.currentOp !== MergeTreeDeltaType.REMOVE) {\n\t\t\t\t\t\tthis.pushRevertible(trackingGroup, this.undoRemove);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"operation type not revertible\");\n\t\t\t}\n\n\t\t\t// If we are in the process of reverting, set 'currentOp' to remind ourselves not to push\n\t\t\t// another revertible until `IRevertable.revert()` finishes the current op and clears this\n\t\t\t// field.\n\t\t\tif (this.currentGroup !== undefined) {\n\t\t\t\tthis.currentOp = operation;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate pushRevertible(\n\t\ttrackingGroup: TrackingGroup,\n\t\tcallback: (segment: PermutationSegment) => void,\n\t) {\n\t\tconst revertible = {\n\t\t\trevert: () => {\n\t\t\t\tassert(\n\t\t\t\t\tthis.currentGroup === undefined && this.currentOp === undefined,\n\t\t\t\t\t0x02b /* \"Must not nest calls to IRevertible.revert()\" */,\n\t\t\t\t);\n\n\t\t\t\tthis.currentGroup = new TrackingGroup();\n\n\t\t\t\ttry {\n\t\t\t\t\twhile (trackingGroup.size > 0) {\n\t\t\t\t\t\tconst segment = trackingGroup.segments[0] as PermutationSegment;\n\n\t\t\t\t\t\t// Unlink 'segment' from the current tracking group before invoking the callback\n\t\t\t\t\t\t// to exclude the current undo/redo segment from those copied to the replacement\n\t\t\t\t\t\t// segment (if any). (See 'PermutationSegment.transferToReplacement()')\n\t\t\t\t\t\tsegment.trackingCollection.unlink(trackingGroup);\n\n\t\t\t\t\t\tcallback(segment);\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\tthis.currentOp = undefined;\n\t\t\t\t\tthis.currentGroup = undefined;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdiscard: () => {\n\t\t\t\twhile (trackingGroup.size > 0) {\n\t\t\t\t\ttrackingGroup.unlink(trackingGroup.segments[0]);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\n\t\tthis.manager.pushToCurrentOperation(revertible);\n\n\t\treturn revertible;\n\t}\n}\n\nexport class MatrixUndoProvider<T> {\n\tconstructor(\n\t\tprivate readonly consumer: IUndoConsumer,\n\t\tprivate readonly matrix: SharedMatrix<T>,\n\t\tprivate readonly rows: PermutationVector,\n\t\tprivate readonly cols: PermutationVector,\n\t) {\n\t\trows.undo = new VectorUndoProvider(\n\t\t\tconsumer,\n\t\t\t/* undoInsert: */ (segment: PermutationSegment) => {\n\t\t\t\tconst start = this.rows.getPosition(segment);\n\t\t\t\tthis.matrix.removeRows(start, segment.cachedLength);\n\t\t\t},\n\t\t\t/* undoRemove: */ (segment: PermutationSegment) => {\n\t\t\t\tthis.matrix._undoRemoveRows(segment);\n\t\t\t},\n\t\t);\n\t\tcols.undo = new VectorUndoProvider(\n\t\t\tconsumer,\n\t\t\t/* undoInsert: */ (segment: PermutationSegment) => {\n\t\t\t\tconst start = this.cols.getPosition(segment);\n\t\t\t\tthis.matrix.removeCols(start, segment.cachedLength);\n\t\t\t},\n\t\t\t/* undoRemove: */ (segment: PermutationSegment) => {\n\t\t\t\tthis.matrix._undoRemoveCols(segment);\n\t\t\t},\n\t\t);\n\t}\n\n\tcellSet(rowHandle: Handle, colHandle: Handle, oldValue: MatrixItem<T>) {\n\t\tassert(\n\t\t\tisHandleValid(rowHandle) && isHandleValid(colHandle),\n\t\t\t0x02c /* \"On cellSet(), invalid row and/or column handles!\" */,\n\t\t);\n\n\t\tif (this.consumer !== undefined) {\n\t\t\tthis.consumer.pushToCurrentOperation({\n\t\t\t\trevert: () => {\n\t\t\t\t\tthis.matrix.setCell(\n\t\t\t\t\t\tthis.rows.handleToPosition(rowHandle),\n\t\t\t\t\t\tthis.cols.handleToPosition(colHandle),\n\t\t\t\t\t\toldValue,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tdiscard: () => {},\n\t\t\t});\n\t\t}\n\t}\n}\n"]}
package/package.json CHANGED
@@ -1,118 +1,119 @@
1
1
  {
2
- "name": "@fluidframework/matrix",
3
- "version": "2.0.0-internal.3.0.1",
4
- "description": "Distributed matrix",
5
- "homepage": "https://fluidframework.com",
6
- "repository": {
7
- "type": "git",
8
- "url": "https://github.com/microsoft/FluidFramework.git",
9
- "directory": "packages/dds/matrix"
10
- },
11
- "license": "MIT",
12
- "author": "Microsoft and contributors",
13
- "sideEffects": false,
14
- "main": "dist/index.js",
15
- "module": "lib/index.js",
16
- "types": "dist/index.d.ts",
17
- "scripts": {
18
- "bench": "cd bench && node --expose-gc -r ts-node/register src/index.ts",
19
- "bench:profile": "cd bench && tsc && node -r ts-node/register --prof src/index.ts --runInBand && node --prof-process isolate-0x*-v8.log > profile.txt && rm isolate-0x*-v8.log && cat profile.txt",
20
- "build": "npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs",
21
- "build:commonjs": "npm run tsc && npm run typetests:gen && npm run build:test",
22
- "build:compile": "concurrently npm:build:commonjs npm:build:esnext",
23
- "build:docs": "api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/",
24
- "build:esnext": "tsc --project ./tsconfig.esnext.json",
25
- "build:full": "npm run build",
26
- "build:full:compile": "npm run build:compile",
27
- "build:genver": "gen-version",
28
- "build:test": "tsc --project ./src/test/tsconfig.json",
29
- "ci:build:docs": "api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/",
30
- "clean": "rimraf dist lib bench/dist *.tsbuildinfo *.build.log",
31
- "eslint": "eslint --format stylish src",
32
- "eslint:fix": "eslint --format stylish src --fix --fix-type problem,suggestion,layout",
33
- "format": "npm run prettier:fix",
34
- "lint": "npm run eslint",
35
- "lint:fix": "npm run eslint:fix",
36
- "postpack": "tar -cf ./matrix.test-files.tar ./src/test ./dist/test",
37
- "prettier": "prettier --check . --ignore-path ../../../.prettierignore",
38
- "prettier:fix": "prettier --write . --ignore-path ../../../.prettierignore",
39
- "stress": "mocha --recursive dist/test/**/*.spec.js --exit -r node_modules/@fluidframework/mocha-test-setup --unhandled-rejections=strict --fgrep stress-loop",
40
- "test": "npm run test:mocha",
41
- "test:coverage": "nyc npm test -- --reporter xunit --reporter-option output=nyc/junit-report.xml --exit",
42
- "test:memory": "mocha --config src/test/memory/.mocharc.js",
43
- "test:memory-profiling:report": "mocha --config src/test/memory/.mocharc.js",
44
- "test:mocha": "npm run stress -- --invert",
45
- "test:mocha:verbose": "cross-env FLUID_TEST_VERBOSE=1 npm run test:mocha",
46
- "tsc": "tsc",
47
- "typetests:gen": "flub generate typetests --generate --dir .",
48
- "typetests:prepare": "flub generate typetests --prepare --dir . --pin"
49
- },
50
- "nyc": {
51
- "all": true,
52
- "cache-dir": "nyc/.cache",
53
- "exclude-after-remap": false,
54
- "include": [
55
- "src/**/*.ts",
56
- "dist/**/*.js"
57
- ],
58
- "report-dir": "nyc/report",
59
- "reporter": [
60
- "cobertura",
61
- "html",
62
- "text"
63
- ],
64
- "temp-directory": "nyc/.nyc_output"
65
- },
66
- "dependencies": {
67
- "@fluidframework/common-definitions": "^0.20.1",
68
- "@fluidframework/common-utils": "^1.0.0",
69
- "@fluidframework/core-interfaces": ">=2.0.0-internal.3.0.1 <2.0.0-internal.4.0.0",
70
- "@fluidframework/datastore-definitions": ">=2.0.0-internal.3.0.1 <2.0.0-internal.4.0.0",
71
- "@fluidframework/merge-tree": ">=2.0.0-internal.3.0.1 <2.0.0-internal.4.0.0",
72
- "@fluidframework/protocol-base": "^0.1038.2000",
73
- "@fluidframework/protocol-definitions": "^1.1.0",
74
- "@fluidframework/runtime-definitions": ">=2.0.0-internal.3.0.1 <2.0.0-internal.4.0.0",
75
- "@fluidframework/runtime-utils": ">=2.0.0-internal.3.0.1 <2.0.0-internal.4.0.0",
76
- "@fluidframework/shared-object-base": ">=2.0.0-internal.3.0.1 <2.0.0-internal.4.0.0",
77
- "@fluidframework/telemetry-utils": ">=2.0.0-internal.3.0.1 <2.0.0-internal.4.0.0",
78
- "@tiny-calc/nano": "0.0.0-alpha.5",
79
- "events": "^3.1.0",
80
- "tslib": "^1.10.0"
81
- },
82
- "devDependencies": {
83
- "@fluid-internal/test-dds-utils": ">=2.0.0-internal.3.0.1 <2.0.0-internal.4.0.0",
84
- "@fluid-tools/benchmark": "^0.45.0",
85
- "@fluid-tools/build-cli": "^0.8.0",
86
- "@fluidframework/build-common": "^1.1.0",
87
- "@fluidframework/build-tools": "^0.8.0",
88
- "@fluidframework/eslint-config-fluid": "^2.0.0",
89
- "@fluidframework/matrix-previous": "npm:@fluidframework/matrix@2.0.0-internal.2.2.0",
90
- "@fluidframework/mocha-test-setup": ">=2.0.0-internal.3.0.1 <2.0.0-internal.4.0.0",
91
- "@fluidframework/test-runtime-utils": ">=2.0.0-internal.3.0.1 <2.0.0-internal.4.0.0",
92
- "@microsoft/api-extractor": "^7.22.2",
93
- "@rushstack/eslint-config": "^2.5.1",
94
- "@tiny-calc/micro": "0.0.0-alpha.5",
95
- "@types/mocha": "^9.1.1",
96
- "@types/node": "^14.18.36",
97
- "best-random": "^1.0.0",
98
- "concurrently": "^6.2.0",
99
- "copyfiles": "^2.4.1",
100
- "cross-env": "^7.0.2",
101
- "eslint": "~8.6.0",
102
- "hotloop": "^1.2.0",
103
- "mocha": "^10.0.0",
104
- "nyc": "^15.0.0",
105
- "prettier": "~2.6.2",
106
- "rimraf": "^2.6.2",
107
- "source-map-support": "^0.5.16",
108
- "ts-node": "^7.0.1",
109
- "typescript": "~4.5.5",
110
- "uuid": "^8.3.1"
111
- },
112
- "typeValidation": {
113
- "version": "2.0.0-internal.3.0.0",
114
- "baselineRange": ">=2.0.0-internal.2.0.0 <2.0.0-internal.3.0.0",
115
- "baselineVersion": "2.0.0-internal.2.1.1",
116
- "broken": {}
117
- }
2
+ "name": "@fluidframework/matrix",
3
+ "version": "2.0.0-internal.3.1.0",
4
+ "description": "Distributed matrix",
5
+ "homepage": "https://fluidframework.com",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/microsoft/FluidFramework.git",
9
+ "directory": "packages/dds/matrix"
10
+ },
11
+ "license": "MIT",
12
+ "author": "Microsoft and contributors",
13
+ "sideEffects": false,
14
+ "main": "dist/index.js",
15
+ "module": "lib/index.js",
16
+ "types": "dist/index.d.ts",
17
+ "scripts": {
18
+ "bench": "cd bench && node --expose-gc -r ts-node/register src/index.ts",
19
+ "bench:profile": "cd bench && tsc && node -r ts-node/register --prof src/index.ts --runInBand && node --prof-process isolate-0x*-v8.log > profile.txt && rm isolate-0x*-v8.log && cat profile.txt",
20
+ "build": "npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs",
21
+ "build:commonjs": "npm run tsc && npm run typetests:gen && npm run build:test",
22
+ "build:compile": "concurrently npm:build:commonjs npm:build:esnext",
23
+ "build:docs": "api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/",
24
+ "build:esnext": "tsc --project ./tsconfig.esnext.json",
25
+ "build:full": "npm run build",
26
+ "build:full:compile": "npm run build:compile",
27
+ "build:genver": "gen-version",
28
+ "build:test": "tsc --project ./src/test/tsconfig.json",
29
+ "ci:build:docs": "api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/",
30
+ "clean": "rimraf dist lib bench/dist *.tsbuildinfo *.build.log",
31
+ "eslint": "eslint --format stylish src",
32
+ "eslint:fix": "eslint --format stylish src --fix --fix-type problem,suggestion,layout",
33
+ "format": "npm run prettier:fix",
34
+ "lint": "npm run prettier && npm run eslint",
35
+ "lint:fix": "npm run prettier:fix && npm run eslint:fix",
36
+ "postpack": "tar -cf ./matrix.test-files.tar ./src/test ./dist/test",
37
+ "prettier": "prettier --check . --ignore-path ../../../.prettierignore",
38
+ "prettier:fix": "prettier --write . --ignore-path ../../../.prettierignore",
39
+ "stress": "mocha --recursive dist/test/**/*.spec.js --exit -r node_modules/@fluidframework/mocha-test-setup --unhandled-rejections=strict --fgrep stress-loop",
40
+ "test": "npm run test:mocha",
41
+ "test:coverage": "nyc npm test -- --reporter xunit --reporter-option output=nyc/junit-report.xml --exit",
42
+ "test:memory": "mocha --config src/test/memory/.mocharc.js",
43
+ "test:memory-profiling:report": "mocha --config src/test/memory/.mocharc.js",
44
+ "test:mocha": "npm run stress -- --invert",
45
+ "test:mocha:verbose": "cross-env FLUID_TEST_VERBOSE=1 npm run test:mocha",
46
+ "tsc": "tsc",
47
+ "typetests:gen": "flub generate typetests --generate --dir .",
48
+ "typetests:prepare": "flub generate typetests --prepare --dir . --pin"
49
+ },
50
+ "nyc": {
51
+ "all": true,
52
+ "cache-dir": "nyc/.cache",
53
+ "exclude-after-remap": false,
54
+ "include": [
55
+ "src/**/*.ts",
56
+ "dist/**/*.js"
57
+ ],
58
+ "report-dir": "nyc/report",
59
+ "reporter": [
60
+ "cobertura",
61
+ "html",
62
+ "text"
63
+ ],
64
+ "temp-directory": "nyc/.nyc_output"
65
+ },
66
+ "dependencies": {
67
+ "@fluidframework/common-definitions": "^0.20.1",
68
+ "@fluidframework/common-utils": "^1.0.0",
69
+ "@fluidframework/core-interfaces": ">=2.0.0-internal.3.1.0 <2.0.0-internal.4.0.0",
70
+ "@fluidframework/datastore-definitions": ">=2.0.0-internal.3.1.0 <2.0.0-internal.4.0.0",
71
+ "@fluidframework/merge-tree": ">=2.0.0-internal.3.1.0 <2.0.0-internal.4.0.0",
72
+ "@fluidframework/protocol-base": "^0.1038.2000",
73
+ "@fluidframework/protocol-definitions": "^1.1.0",
74
+ "@fluidframework/runtime-definitions": ">=2.0.0-internal.3.1.0 <2.0.0-internal.4.0.0",
75
+ "@fluidframework/runtime-utils": ">=2.0.0-internal.3.1.0 <2.0.0-internal.4.0.0",
76
+ "@fluidframework/shared-object-base": ">=2.0.0-internal.3.1.0 <2.0.0-internal.4.0.0",
77
+ "@fluidframework/telemetry-utils": ">=2.0.0-internal.3.1.0 <2.0.0-internal.4.0.0",
78
+ "@tiny-calc/nano": "0.0.0-alpha.5",
79
+ "events": "^3.1.0",
80
+ "tslib": "^1.10.0"
81
+ },
82
+ "devDependencies": {
83
+ "@fluid-internal/test-dds-utils": ">=2.0.0-internal.3.1.0 <2.0.0-internal.4.0.0",
84
+ "@fluid-tools/benchmark": "^0.45.0",
85
+ "@fluid-tools/build-cli": "^0.9.0",
86
+ "@fluidframework/build-common": "^1.1.0",
87
+ "@fluidframework/build-tools": "^0.9.0",
88
+ "@fluidframework/eslint-config-fluid": "^2.0.0",
89
+ "@fluidframework/matrix-previous": "npm:@fluidframework/matrix@2.0.0-internal.3.0.0",
90
+ "@fluidframework/mocha-test-setup": ">=2.0.0-internal.3.1.0 <2.0.0-internal.4.0.0",
91
+ "@fluidframework/test-runtime-utils": ">=2.0.0-internal.3.1.0 <2.0.0-internal.4.0.0",
92
+ "@microsoft/api-extractor": "^7.22.2",
93
+ "@rushstack/eslint-config": "^2.5.1",
94
+ "@tiny-calc/micro": "0.0.0-alpha.5",
95
+ "@types/mocha": "^9.1.1",
96
+ "@types/node": "^14.18.36",
97
+ "best-random": "^1.0.0",
98
+ "concurrently": "^6.2.0",
99
+ "copyfiles": "^2.4.1",
100
+ "cross-env": "^7.0.2",
101
+ "eslint": "~8.6.0",
102
+ "hotloop": "^1.2.0",
103
+ "mocha": "^10.0.0",
104
+ "nyc": "^15.0.0",
105
+ "prettier": "~2.6.2",
106
+ "rimraf": "^2.6.2",
107
+ "source-map-support": "^0.5.16",
108
+ "ts-node": "^7.0.1",
109
+ "typescript": "~4.5.5",
110
+ "uuid": "^8.3.1"
111
+ },
112
+ "typeValidation": {
113
+ "version": "2.0.0-internal.3.1.0",
114
+ "previousVersionStyle": "~previousMinor",
115
+ "baselineRange": ">=2.0.0-internal.3.0.0 <2.0.0-internal.3.1.0",
116
+ "baselineVersion": "2.0.0-internal.3.0.0",
117
+ "broken": {}
118
+ }
118
119
  }
@@ -4,5 +4,5 @@
4
4
  */
5
5
 
6
6
  module.exports = {
7
- ...require("@fluidframework/build-common/prettier.config.cjs"),
7
+ ...require("@fluidframework/build-common/prettier.config.cjs"),
8
8
  };