@fluid-experimental/last-edited 2.0.0-dev.6.4.0.192049 → 2.0.0-dev.7.2.0.204906

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 (45) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/api-extractor.json +1 -1
  3. package/api-report/last-edited.api.md +63 -0
  4. package/dist/interfaces.d.ts +12 -0
  5. package/dist/interfaces.d.ts.map +1 -1
  6. package/dist/interfaces.js +3 -0
  7. package/dist/interfaces.js.map +1 -1
  8. package/dist/last-edited-alpha.d.ts +103 -0
  9. package/dist/last-edited-beta.d.ts +103 -0
  10. package/dist/last-edited-public.d.ts +103 -0
  11. package/dist/last-edited-untrimmed.d.ts +103 -0
  12. package/dist/lastEditedTracker.d.ts +2 -0
  13. package/dist/lastEditedTracker.d.ts.map +1 -1
  14. package/dist/lastEditedTracker.js +2 -0
  15. package/dist/lastEditedTracker.js.map +1 -1
  16. package/dist/lastEditedTrackerDataObject.d.ts +2 -0
  17. package/dist/lastEditedTrackerDataObject.d.ts.map +1 -1
  18. package/dist/lastEditedTrackerDataObject.js +2 -0
  19. package/dist/lastEditedTrackerDataObject.js.map +1 -1
  20. package/dist/setup.d.ts +2 -0
  21. package/dist/setup.d.ts.map +1 -1
  22. package/dist/setup.js +2 -0
  23. package/dist/setup.js.map +1 -1
  24. package/dist/tsdoc-metadata.json +1 -1
  25. package/lib/interfaces.d.ts +12 -0
  26. package/lib/interfaces.d.ts.map +1 -1
  27. package/lib/interfaces.js +3 -0
  28. package/lib/interfaces.js.map +1 -1
  29. package/lib/lastEditedTracker.d.ts +2 -0
  30. package/lib/lastEditedTracker.d.ts.map +1 -1
  31. package/lib/lastEditedTracker.js +2 -0
  32. package/lib/lastEditedTracker.js.map +1 -1
  33. package/lib/lastEditedTrackerDataObject.d.ts +2 -0
  34. package/lib/lastEditedTrackerDataObject.d.ts.map +1 -1
  35. package/lib/lastEditedTrackerDataObject.js +2 -0
  36. package/lib/lastEditedTrackerDataObject.js.map +1 -1
  37. package/lib/setup.d.ts +2 -0
  38. package/lib/setup.d.ts.map +1 -1
  39. package/lib/setup.js +2 -0
  40. package/lib/setup.js.map +1 -1
  41. package/package.json +19 -20
  42. package/src/interfaces.ts +12 -0
  43. package/src/lastEditedTracker.ts +2 -0
  44. package/src/lastEditedTrackerDataObject.ts +2 -0
  45. package/src/setup.ts +2 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,57 @@
1
1
  # @fluid-experimental/last-edited
2
2
 
3
+ ## 2.0.0-internal.7.1.0
4
+
5
+ Dependency updates only.
6
+
7
+ ## 2.0.0-internal.7.0.0
8
+
9
+ ### Major Changes
10
+
11
+ - Dependencies on @fluidframework/protocol-definitions package updated to 3.0.0 [871b3493dd](https://github.com/microsoft/FluidFramework/commits/871b3493dd0d7ea3a89be64998ceb6cb9021a04e)
12
+
13
+ This included the following changes from the protocol-definitions release:
14
+
15
+ - Updating signal interfaces for some planned improvements. The intention is split the interface between signals
16
+ submitted by clients to the server and the resulting signals sent from the server to clients.
17
+ - A new optional type member is available on the ISignalMessage interface and a new ISentSignalMessage interface has
18
+ been added, which will be the typing for signals sent from the client to the server. Both extend a new
19
+ ISignalMessageBase interface that contains common members.
20
+ - The @fluidframework/common-definitions package dependency has been updated to version 1.0.0.
21
+
22
+ - Server upgrade: dependencies on Fluid server packages updated to 2.0.1 [871b3493dd](https://github.com/microsoft/FluidFramework/commits/871b3493dd0d7ea3a89be64998ceb6cb9021a04e)
23
+
24
+ Dependencies on the following Fluid server package have been updated to version 2.0.1:
25
+
26
+ - @fluidframework/gitresources: 2.0.1
27
+ - @fluidframework/server-kafka-orderer: 2.0.1
28
+ - @fluidframework/server-lambdas: 2.0.1
29
+ - @fluidframework/server-lambdas-driver: 2.0.1
30
+ - @fluidframework/server-local-server: 2.0.1
31
+ - @fluidframework/server-memory-orderer: 2.0.1
32
+ - @fluidframework/protocol-base: 2.0.1
33
+ - @fluidframework/server-routerlicious: 2.0.1
34
+ - @fluidframework/server-routerlicious-base: 2.0.1
35
+ - @fluidframework/server-services: 2.0.1
36
+ - @fluidframework/server-services-client: 2.0.1
37
+ - @fluidframework/server-services-core: 2.0.1
38
+ - @fluidframework/server-services-ordering-kafkanode: 2.0.1
39
+ - @fluidframework/server-services-ordering-rdkafka: 2.0.1
40
+ - @fluidframework/server-services-ordering-zookeeper: 2.0.1
41
+ - @fluidframework/server-services-shared: 2.0.1
42
+ - @fluidframework/server-services-telemetry: 2.0.1
43
+ - @fluidframework/server-services-utils: 2.0.1
44
+ - @fluidframework/server-test-utils: 2.0.1
45
+ - tinylicious: 2.0.1
46
+
47
+ - Minimum TypeScript version now 5.1.6 [871b3493dd](https://github.com/microsoft/FluidFramework/commits/871b3493dd0d7ea3a89be64998ceb6cb9021a04e)
48
+
49
+ The minimum supported TypeScript version for Fluid 2.0 clients is now 5.1.6.
50
+
51
+ ## 2.0.0-internal.6.4.0
52
+
53
+ Dependency updates only.
54
+
3
55
  ## 2.0.0-internal.6.3.0
4
56
 
5
57
  Dependency updates only.
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
3
- "extends": "@fluidframework/build-common/api-extractor-common.json"
3
+ "extends": "@fluidframework/build-common/api-extractor-base.json"
4
4
  }
@@ -0,0 +1,63 @@
1
+ ## API Report File for "@fluid-experimental/last-edited"
2
+
3
+ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
4
+
5
+ ```ts
6
+
7
+ import { DataObject } from '@fluidframework/aqueduct';
8
+ import { DataObjectFactory } from '@fluidframework/aqueduct';
9
+ import { IContainerRuntime } from '@fluidframework/container-runtime-definitions';
10
+ import { ISequencedDocumentMessage } from '@fluidframework/protocol-definitions';
11
+ import { IUser } from '@fluidframework/protocol-definitions';
12
+ import { SharedSummaryBlock } from '@fluidframework/shared-summary-block';
13
+
14
+ // @public (undocumented)
15
+ export const IFluidLastEditedTracker: keyof IProvideFluidLastEditedTracker;
16
+
17
+ // @public (undocumented)
18
+ export interface IFluidLastEditedTracker extends IProvideFluidLastEditedTracker {
19
+ getLastEditDetails(): ILastEditDetails | undefined;
20
+ updateLastEditDetails(lastEditDetails: ILastEditDetails): void;
21
+ }
22
+
23
+ // @public (undocumented)
24
+ export interface ILastEditDetails {
25
+ // (undocumented)
26
+ timestamp: number;
27
+ // (undocumented)
28
+ user: IUser;
29
+ }
30
+
31
+ // @public (undocumented)
32
+ export interface IProvideFluidLastEditedTracker {
33
+ // (undocumented)
34
+ readonly IFluidLastEditedTracker: IFluidLastEditedTracker;
35
+ }
36
+
37
+ // @public
38
+ export class LastEditedTracker implements IFluidLastEditedTracker {
39
+ constructor(sharedSummaryBlock: SharedSummaryBlock);
40
+ getLastEditDetails(): ILastEditDetails | undefined;
41
+ // (undocumented)
42
+ get IFluidLastEditedTracker(): LastEditedTracker;
43
+ updateLastEditDetails(lastEditDetails: ILastEditDetails): void;
44
+ }
45
+
46
+ // @public
47
+ export class LastEditedTrackerDataObject extends DataObject implements IProvideFluidLastEditedTracker {
48
+ // (undocumented)
49
+ static getFactory(): DataObjectFactory<LastEditedTrackerDataObject>;
50
+ // (undocumented)
51
+ protected hasInitialized(): Promise<void>;
52
+ // (undocumented)
53
+ get IFluidLastEditedTracker(): LastEditedTracker;
54
+ // (undocumented)
55
+ protected initializingFirstTime(): Promise<void>;
56
+ }
57
+
58
+ // @public
59
+ export function setupLastEditedTrackerForContainer(lastEditedTracker: IFluidLastEditedTracker, runtime: IContainerRuntime, shouldDiscardMessageFn?: (message: ISequencedDocumentMessage) => boolean): void;
60
+
61
+ // (No @packageDocumentation comment for this package)
62
+
63
+ ```
@@ -3,10 +3,19 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  import { IUser } from "@fluidframework/protocol-definitions";
6
+ /**
7
+ * @public
8
+ */
6
9
  export declare const IFluidLastEditedTracker: keyof IProvideFluidLastEditedTracker;
10
+ /**
11
+ * @public
12
+ */
7
13
  export interface IProvideFluidLastEditedTracker {
8
14
  readonly IFluidLastEditedTracker: IFluidLastEditedTracker;
9
15
  }
16
+ /**
17
+ * @public
18
+ */
10
19
  export interface IFluidLastEditedTracker extends IProvideFluidLastEditedTracker {
11
20
  /**
12
21
  * Returns the details of the last edit to the container.
@@ -17,6 +26,9 @@ export interface IFluidLastEditedTracker extends IProvideFluidLastEditedTracker
17
26
  */
18
27
  updateLastEditDetails(lastEditDetails: ILastEditDetails): void;
19
28
  }
29
+ /**
30
+ * @public
31
+ */
20
32
  export interface ILastEditDetails {
21
33
  user: IUser;
22
34
  timestamp: number;
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,sCAAsC,CAAC;AAE7D,eAAO,MAAM,uBAAuB,EAAE,MAAM,8BAClB,CAAC;AAE3B,MAAM,WAAW,8BAA8B;IAC9C,QAAQ,CAAC,uBAAuB,EAAE,uBAAuB,CAAC;CAC1D;AAED,MAAM,WAAW,uBAAwB,SAAQ,8BAA8B;IAC9E;;OAEG;IACH,kBAAkB,IAAI,gBAAgB,GAAG,SAAS,CAAC;IAEnD;;OAEG;IACH,qBAAqB,CAAC,eAAe,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAC/D;AAED,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,KAAK,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CAClB"}
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,sCAAsC,CAAC;AAE7D;;GAEG;AACH,eAAO,MAAM,uBAAuB,EAAE,MAAM,8BAClB,CAAC;AAE3B;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC9C,QAAQ,CAAC,uBAAuB,EAAE,uBAAuB,CAAC;CAC1D;AAED;;GAEG;AACH,MAAM,WAAW,uBAAwB,SAAQ,8BAA8B;IAC9E;;OAEG;IACH,kBAAkB,IAAI,gBAAgB,GAAG,SAAS,CAAC;IAEnD;;OAEG;IACH,qBAAqB,CAAC,eAAe,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAC/D;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,KAAK,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CAClB"}
@@ -5,5 +5,8 @@
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.IFluidLastEditedTracker = void 0;
8
+ /**
9
+ * @public
10
+ */
8
11
  exports.IFluidLastEditedTracker = "IFluidLastEditedTracker";
9
12
  //# sourceMappingURL=interfaces.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAIU,QAAA,uBAAuB,GACnC,yBAAyB,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { IUser } from \"@fluidframework/protocol-definitions\";\n\nexport const IFluidLastEditedTracker: keyof IProvideFluidLastEditedTracker =\n\t\"IFluidLastEditedTracker\";\n\nexport interface IProvideFluidLastEditedTracker {\n\treadonly IFluidLastEditedTracker: IFluidLastEditedTracker;\n}\n\nexport interface IFluidLastEditedTracker extends IProvideFluidLastEditedTracker {\n\t/**\n\t * Returns the details of the last edit to the container.\n\t */\n\tgetLastEditDetails(): ILastEditDetails | undefined;\n\n\t/**\n\t * Updates the details of last edit to the container.\n\t */\n\tupdateLastEditDetails(lastEditDetails: ILastEditDetails): void;\n}\n\nexport interface ILastEditDetails {\n\tuser: IUser;\n\ttimestamp: number;\n}\n"]}
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAIH;;GAEG;AACU,QAAA,uBAAuB,GACnC,yBAAyB,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { IUser } from \"@fluidframework/protocol-definitions\";\n\n/**\n * @public\n */\nexport const IFluidLastEditedTracker: keyof IProvideFluidLastEditedTracker =\n\t\"IFluidLastEditedTracker\";\n\n/**\n * @public\n */\nexport interface IProvideFluidLastEditedTracker {\n\treadonly IFluidLastEditedTracker: IFluidLastEditedTracker;\n}\n\n/**\n * @public\n */\nexport interface IFluidLastEditedTracker extends IProvideFluidLastEditedTracker {\n\t/**\n\t * Returns the details of the last edit to the container.\n\t */\n\tgetLastEditDetails(): ILastEditDetails | undefined;\n\n\t/**\n\t * Updates the details of last edit to the container.\n\t */\n\tupdateLastEditDetails(lastEditDetails: ILastEditDetails): void;\n}\n\n/**\n * @public\n */\nexport interface ILastEditDetails {\n\tuser: IUser;\n\ttimestamp: number;\n}\n"]}
@@ -0,0 +1,103 @@
1
+ import { DataObject } from '@fluidframework/aqueduct';
2
+ import { DataObjectFactory } from '@fluidframework/aqueduct';
3
+ import { IContainerRuntime } from '@fluidframework/container-runtime-definitions';
4
+ import { ISequencedDocumentMessage } from '@fluidframework/protocol-definitions';
5
+ import { IUser } from '@fluidframework/protocol-definitions';
6
+ import { SharedSummaryBlock } from '@fluidframework/shared-summary-block';
7
+
8
+ /**
9
+ * @public
10
+ */
11
+ export declare const IFluidLastEditedTracker: keyof IProvideFluidLastEditedTracker;
12
+
13
+ /**
14
+ * @public
15
+ */
16
+ export declare interface IFluidLastEditedTracker extends IProvideFluidLastEditedTracker {
17
+ /**
18
+ * Returns the details of the last edit to the container.
19
+ */
20
+ getLastEditDetails(): ILastEditDetails | undefined;
21
+ /**
22
+ * Updates the details of last edit to the container.
23
+ */
24
+ updateLastEditDetails(lastEditDetails: ILastEditDetails): void;
25
+ }
26
+
27
+ /**
28
+ * @public
29
+ */
30
+ export declare interface ILastEditDetails {
31
+ user: IUser;
32
+ timestamp: number;
33
+ }
34
+
35
+ /**
36
+ * @public
37
+ */
38
+ export declare interface IProvideFluidLastEditedTracker {
39
+ readonly IFluidLastEditedTracker: IFluidLastEditedTracker;
40
+ }
41
+
42
+ /**
43
+ * Tracks the last edit details such as the last edited user details and the last edited timestamp. The last edited
44
+ * details should be updated (via updateLastEditDetails) in response to a remote op since it uses shared summary block
45
+ * as storage.
46
+ *
47
+ * @public
48
+ */
49
+ export declare class LastEditedTracker implements IFluidLastEditedTracker {
50
+ private readonly sharedSummaryBlock;
51
+ private readonly lastEditedDetailsKey;
52
+ /**
53
+ * Creates a LastEditedTracker object.
54
+ * @param sharedSummaryBlock - The shared summary block where the details will be stored.
55
+ */
56
+ constructor(sharedSummaryBlock: SharedSummaryBlock);
57
+ get IFluidLastEditedTracker(): LastEditedTracker;
58
+ /**
59
+ * {@inheritDoc (IFluidLastEditedTracker:interface).getLastEditDetails}
60
+ */
61
+ getLastEditDetails(): ILastEditDetails | undefined;
62
+ /**
63
+ * {@inheritDoc (IFluidLastEditedTracker:interface).updateLastEditDetails}
64
+ */
65
+ updateLastEditDetails(lastEditDetails: ILastEditDetails): void;
66
+ }
67
+
68
+ /**
69
+ * LastEditedTrackerDataObject creates a LastEditedTracker that keeps track of the latest edits to the document.
70
+ *
71
+ * @public
72
+ */
73
+ export declare class LastEditedTrackerDataObject extends DataObject implements IProvideFluidLastEditedTracker {
74
+ private static readonly factory;
75
+ static getFactory(): DataObjectFactory<LastEditedTrackerDataObject>;
76
+ private readonly sharedSummaryBlockId;
77
+ private _lastEditedTracker;
78
+ private get lastEditedTracker();
79
+ get IFluidLastEditedTracker(): LastEditedTracker;
80
+ protected initializingFirstTime(): Promise<void>;
81
+ protected hasInitialized(): Promise<void>;
82
+ }
83
+
84
+ /**
85
+ * Helper function to set up a data object that provides IFluidLastEditedTracker to track last edited in a Container.
86
+ *
87
+ * It does the following:
88
+ *
89
+ * - Registers an "op" listener on the runtime. On each message, it calls the shouldDiscardMessageFn to check
90
+ * if the message should be discarded. It also discards all scheduler message. If a message is not discarded,
91
+ * it passes the last edited information from the message to the last edited tracker.
92
+ *
93
+ * - The last edited information from the last message received before the lastEditedTracker is
94
+ * loaded is stored and passed to the tracker once it loads.
95
+ * @param lastEditedTracker - The last edited tracker.
96
+ * @param runtime - The container runtime whose messages are to be tracked.
97
+ * @param shouldDiscardMessageFn - Function that tells if a message should not be considered in computing last edited.
98
+ *
99
+ * @public
100
+ */
101
+ export declare function setupLastEditedTrackerForContainer(lastEditedTracker: IFluidLastEditedTracker, runtime: IContainerRuntime, shouldDiscardMessageFn?: (message: ISequencedDocumentMessage) => boolean): void;
102
+
103
+ export { }
@@ -0,0 +1,103 @@
1
+ import { DataObject } from '@fluidframework/aqueduct';
2
+ import { DataObjectFactory } from '@fluidframework/aqueduct';
3
+ import { IContainerRuntime } from '@fluidframework/container-runtime-definitions';
4
+ import { ISequencedDocumentMessage } from '@fluidframework/protocol-definitions';
5
+ import { IUser } from '@fluidframework/protocol-definitions';
6
+ import { SharedSummaryBlock } from '@fluidframework/shared-summary-block';
7
+
8
+ /**
9
+ * @public
10
+ */
11
+ export declare const IFluidLastEditedTracker: keyof IProvideFluidLastEditedTracker;
12
+
13
+ /**
14
+ * @public
15
+ */
16
+ export declare interface IFluidLastEditedTracker extends IProvideFluidLastEditedTracker {
17
+ /**
18
+ * Returns the details of the last edit to the container.
19
+ */
20
+ getLastEditDetails(): ILastEditDetails | undefined;
21
+ /**
22
+ * Updates the details of last edit to the container.
23
+ */
24
+ updateLastEditDetails(lastEditDetails: ILastEditDetails): void;
25
+ }
26
+
27
+ /**
28
+ * @public
29
+ */
30
+ export declare interface ILastEditDetails {
31
+ user: IUser;
32
+ timestamp: number;
33
+ }
34
+
35
+ /**
36
+ * @public
37
+ */
38
+ export declare interface IProvideFluidLastEditedTracker {
39
+ readonly IFluidLastEditedTracker: IFluidLastEditedTracker;
40
+ }
41
+
42
+ /**
43
+ * Tracks the last edit details such as the last edited user details and the last edited timestamp. The last edited
44
+ * details should be updated (via updateLastEditDetails) in response to a remote op since it uses shared summary block
45
+ * as storage.
46
+ *
47
+ * @public
48
+ */
49
+ export declare class LastEditedTracker implements IFluidLastEditedTracker {
50
+ private readonly sharedSummaryBlock;
51
+ private readonly lastEditedDetailsKey;
52
+ /**
53
+ * Creates a LastEditedTracker object.
54
+ * @param sharedSummaryBlock - The shared summary block where the details will be stored.
55
+ */
56
+ constructor(sharedSummaryBlock: SharedSummaryBlock);
57
+ get IFluidLastEditedTracker(): LastEditedTracker;
58
+ /**
59
+ * {@inheritDoc (IFluidLastEditedTracker:interface).getLastEditDetails}
60
+ */
61
+ getLastEditDetails(): ILastEditDetails | undefined;
62
+ /**
63
+ * {@inheritDoc (IFluidLastEditedTracker:interface).updateLastEditDetails}
64
+ */
65
+ updateLastEditDetails(lastEditDetails: ILastEditDetails): void;
66
+ }
67
+
68
+ /**
69
+ * LastEditedTrackerDataObject creates a LastEditedTracker that keeps track of the latest edits to the document.
70
+ *
71
+ * @public
72
+ */
73
+ export declare class LastEditedTrackerDataObject extends DataObject implements IProvideFluidLastEditedTracker {
74
+ private static readonly factory;
75
+ static getFactory(): DataObjectFactory<LastEditedTrackerDataObject>;
76
+ private readonly sharedSummaryBlockId;
77
+ private _lastEditedTracker;
78
+ private get lastEditedTracker();
79
+ get IFluidLastEditedTracker(): LastEditedTracker;
80
+ protected initializingFirstTime(): Promise<void>;
81
+ protected hasInitialized(): Promise<void>;
82
+ }
83
+
84
+ /**
85
+ * Helper function to set up a data object that provides IFluidLastEditedTracker to track last edited in a Container.
86
+ *
87
+ * It does the following:
88
+ *
89
+ * - Registers an "op" listener on the runtime. On each message, it calls the shouldDiscardMessageFn to check
90
+ * if the message should be discarded. It also discards all scheduler message. If a message is not discarded,
91
+ * it passes the last edited information from the message to the last edited tracker.
92
+ *
93
+ * - The last edited information from the last message received before the lastEditedTracker is
94
+ * loaded is stored and passed to the tracker once it loads.
95
+ * @param lastEditedTracker - The last edited tracker.
96
+ * @param runtime - The container runtime whose messages are to be tracked.
97
+ * @param shouldDiscardMessageFn - Function that tells if a message should not be considered in computing last edited.
98
+ *
99
+ * @public
100
+ */
101
+ export declare function setupLastEditedTrackerForContainer(lastEditedTracker: IFluidLastEditedTracker, runtime: IContainerRuntime, shouldDiscardMessageFn?: (message: ISequencedDocumentMessage) => boolean): void;
102
+
103
+ export { }
@@ -0,0 +1,103 @@
1
+ import { DataObject } from '@fluidframework/aqueduct';
2
+ import { DataObjectFactory } from '@fluidframework/aqueduct';
3
+ import { IContainerRuntime } from '@fluidframework/container-runtime-definitions';
4
+ import { ISequencedDocumentMessage } from '@fluidframework/protocol-definitions';
5
+ import { IUser } from '@fluidframework/protocol-definitions';
6
+ import { SharedSummaryBlock } from '@fluidframework/shared-summary-block';
7
+
8
+ /**
9
+ * @public
10
+ */
11
+ export declare const IFluidLastEditedTracker: keyof IProvideFluidLastEditedTracker;
12
+
13
+ /**
14
+ * @public
15
+ */
16
+ export declare interface IFluidLastEditedTracker extends IProvideFluidLastEditedTracker {
17
+ /**
18
+ * Returns the details of the last edit to the container.
19
+ */
20
+ getLastEditDetails(): ILastEditDetails | undefined;
21
+ /**
22
+ * Updates the details of last edit to the container.
23
+ */
24
+ updateLastEditDetails(lastEditDetails: ILastEditDetails): void;
25
+ }
26
+
27
+ /**
28
+ * @public
29
+ */
30
+ export declare interface ILastEditDetails {
31
+ user: IUser;
32
+ timestamp: number;
33
+ }
34
+
35
+ /**
36
+ * @public
37
+ */
38
+ export declare interface IProvideFluidLastEditedTracker {
39
+ readonly IFluidLastEditedTracker: IFluidLastEditedTracker;
40
+ }
41
+
42
+ /**
43
+ * Tracks the last edit details such as the last edited user details and the last edited timestamp. The last edited
44
+ * details should be updated (via updateLastEditDetails) in response to a remote op since it uses shared summary block
45
+ * as storage.
46
+ *
47
+ * @public
48
+ */
49
+ export declare class LastEditedTracker implements IFluidLastEditedTracker {
50
+ private readonly sharedSummaryBlock;
51
+ private readonly lastEditedDetailsKey;
52
+ /**
53
+ * Creates a LastEditedTracker object.
54
+ * @param sharedSummaryBlock - The shared summary block where the details will be stored.
55
+ */
56
+ constructor(sharedSummaryBlock: SharedSummaryBlock);
57
+ get IFluidLastEditedTracker(): LastEditedTracker;
58
+ /**
59
+ * {@inheritDoc (IFluidLastEditedTracker:interface).getLastEditDetails}
60
+ */
61
+ getLastEditDetails(): ILastEditDetails | undefined;
62
+ /**
63
+ * {@inheritDoc (IFluidLastEditedTracker:interface).updateLastEditDetails}
64
+ */
65
+ updateLastEditDetails(lastEditDetails: ILastEditDetails): void;
66
+ }
67
+
68
+ /**
69
+ * LastEditedTrackerDataObject creates a LastEditedTracker that keeps track of the latest edits to the document.
70
+ *
71
+ * @public
72
+ */
73
+ export declare class LastEditedTrackerDataObject extends DataObject implements IProvideFluidLastEditedTracker {
74
+ private static readonly factory;
75
+ static getFactory(): DataObjectFactory<LastEditedTrackerDataObject>;
76
+ private readonly sharedSummaryBlockId;
77
+ private _lastEditedTracker;
78
+ private get lastEditedTracker();
79
+ get IFluidLastEditedTracker(): LastEditedTracker;
80
+ protected initializingFirstTime(): Promise<void>;
81
+ protected hasInitialized(): Promise<void>;
82
+ }
83
+
84
+ /**
85
+ * Helper function to set up a data object that provides IFluidLastEditedTracker to track last edited in a Container.
86
+ *
87
+ * It does the following:
88
+ *
89
+ * - Registers an "op" listener on the runtime. On each message, it calls the shouldDiscardMessageFn to check
90
+ * if the message should be discarded. It also discards all scheduler message. If a message is not discarded,
91
+ * it passes the last edited information from the message to the last edited tracker.
92
+ *
93
+ * - The last edited information from the last message received before the lastEditedTracker is
94
+ * loaded is stored and passed to the tracker once it loads.
95
+ * @param lastEditedTracker - The last edited tracker.
96
+ * @param runtime - The container runtime whose messages are to be tracked.
97
+ * @param shouldDiscardMessageFn - Function that tells if a message should not be considered in computing last edited.
98
+ *
99
+ * @public
100
+ */
101
+ export declare function setupLastEditedTrackerForContainer(lastEditedTracker: IFluidLastEditedTracker, runtime: IContainerRuntime, shouldDiscardMessageFn?: (message: ISequencedDocumentMessage) => boolean): void;
102
+
103
+ export { }
@@ -0,0 +1,103 @@
1
+ import { DataObject } from '@fluidframework/aqueduct';
2
+ import { DataObjectFactory } from '@fluidframework/aqueduct';
3
+ import { IContainerRuntime } from '@fluidframework/container-runtime-definitions';
4
+ import { ISequencedDocumentMessage } from '@fluidframework/protocol-definitions';
5
+ import { IUser } from '@fluidframework/protocol-definitions';
6
+ import { SharedSummaryBlock } from '@fluidframework/shared-summary-block';
7
+
8
+ /**
9
+ * @public
10
+ */
11
+ export declare const IFluidLastEditedTracker: keyof IProvideFluidLastEditedTracker;
12
+
13
+ /**
14
+ * @public
15
+ */
16
+ export declare interface IFluidLastEditedTracker extends IProvideFluidLastEditedTracker {
17
+ /**
18
+ * Returns the details of the last edit to the container.
19
+ */
20
+ getLastEditDetails(): ILastEditDetails | undefined;
21
+ /**
22
+ * Updates the details of last edit to the container.
23
+ */
24
+ updateLastEditDetails(lastEditDetails: ILastEditDetails): void;
25
+ }
26
+
27
+ /**
28
+ * @public
29
+ */
30
+ export declare interface ILastEditDetails {
31
+ user: IUser;
32
+ timestamp: number;
33
+ }
34
+
35
+ /**
36
+ * @public
37
+ */
38
+ export declare interface IProvideFluidLastEditedTracker {
39
+ readonly IFluidLastEditedTracker: IFluidLastEditedTracker;
40
+ }
41
+
42
+ /**
43
+ * Tracks the last edit details such as the last edited user details and the last edited timestamp. The last edited
44
+ * details should be updated (via updateLastEditDetails) in response to a remote op since it uses shared summary block
45
+ * as storage.
46
+ *
47
+ * @public
48
+ */
49
+ export declare class LastEditedTracker implements IFluidLastEditedTracker {
50
+ private readonly sharedSummaryBlock;
51
+ private readonly lastEditedDetailsKey;
52
+ /**
53
+ * Creates a LastEditedTracker object.
54
+ * @param sharedSummaryBlock - The shared summary block where the details will be stored.
55
+ */
56
+ constructor(sharedSummaryBlock: SharedSummaryBlock);
57
+ get IFluidLastEditedTracker(): LastEditedTracker;
58
+ /**
59
+ * {@inheritDoc (IFluidLastEditedTracker:interface).getLastEditDetails}
60
+ */
61
+ getLastEditDetails(): ILastEditDetails | undefined;
62
+ /**
63
+ * {@inheritDoc (IFluidLastEditedTracker:interface).updateLastEditDetails}
64
+ */
65
+ updateLastEditDetails(lastEditDetails: ILastEditDetails): void;
66
+ }
67
+
68
+ /**
69
+ * LastEditedTrackerDataObject creates a LastEditedTracker that keeps track of the latest edits to the document.
70
+ *
71
+ * @public
72
+ */
73
+ export declare class LastEditedTrackerDataObject extends DataObject implements IProvideFluidLastEditedTracker {
74
+ private static readonly factory;
75
+ static getFactory(): DataObjectFactory<LastEditedTrackerDataObject>;
76
+ private readonly sharedSummaryBlockId;
77
+ private _lastEditedTracker;
78
+ private get lastEditedTracker();
79
+ get IFluidLastEditedTracker(): LastEditedTracker;
80
+ protected initializingFirstTime(): Promise<void>;
81
+ protected hasInitialized(): Promise<void>;
82
+ }
83
+
84
+ /**
85
+ * Helper function to set up a data object that provides IFluidLastEditedTracker to track last edited in a Container.
86
+ *
87
+ * It does the following:
88
+ *
89
+ * - Registers an "op" listener on the runtime. On each message, it calls the shouldDiscardMessageFn to check
90
+ * if the message should be discarded. It also discards all scheduler message. If a message is not discarded,
91
+ * it passes the last edited information from the message to the last edited tracker.
92
+ *
93
+ * - The last edited information from the last message received before the lastEditedTracker is
94
+ * loaded is stored and passed to the tracker once it loads.
95
+ * @param lastEditedTracker - The last edited tracker.
96
+ * @param runtime - The container runtime whose messages are to be tracked.
97
+ * @param shouldDiscardMessageFn - Function that tells if a message should not be considered in computing last edited.
98
+ *
99
+ * @public
100
+ */
101
+ export declare function setupLastEditedTrackerForContainer(lastEditedTracker: IFluidLastEditedTracker, runtime: IContainerRuntime, shouldDiscardMessageFn?: (message: ISequencedDocumentMessage) => boolean): void;
102
+
103
+ export { }
@@ -8,6 +8,8 @@ import { IFluidLastEditedTracker, ILastEditDetails } from "./interfaces";
8
8
  * Tracks the last edit details such as the last edited user details and the last edited timestamp. The last edited
9
9
  * details should be updated (via updateLastEditDetails) in response to a remote op since it uses shared summary block
10
10
  * as storage.
11
+ *
12
+ * @public
11
13
  */
12
14
  export declare class LastEditedTracker implements IFluidLastEditedTracker {
13
15
  private readonly sharedSummaryBlock;
@@ -1 +1 @@
1
- {"version":3,"file":"lastEditedTracker.d.ts","sourceRoot":"","sources":["../src/lastEditedTracker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEzE;;;;GAIG;AACH,qBAAa,iBAAkB,YAAW,uBAAuB;IAOpD,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IAN/C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAwB;IAE7D;;;OAGG;gBAC0B,kBAAkB,EAAE,kBAAkB;IAEnE,IAAW,uBAAuB,IAAI,iBAAiB,CAEtD;IAED;;OAEG;IACI,kBAAkB,IAAI,gBAAgB,GAAG,SAAS;IAIzD;;OAEG;IACI,qBAAqB,CAAC,eAAe,EAAE,gBAAgB,GAAG,IAAI;CAGrE"}
1
+ {"version":3,"file":"lastEditedTracker.d.ts","sourceRoot":"","sources":["../src/lastEditedTracker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEzE;;;;;;GAMG;AACH,qBAAa,iBAAkB,YAAW,uBAAuB;IAOpD,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IAN/C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAwB;IAE7D;;;OAGG;gBAC0B,kBAAkB,EAAE,kBAAkB;IAEnE,IAAW,uBAAuB,IAAI,iBAAiB,CAEtD;IAED;;OAEG;IACI,kBAAkB,IAAI,gBAAgB,GAAG,SAAS;IAIzD;;OAEG;IACI,qBAAqB,CAAC,eAAe,EAAE,gBAAgB,GAAG,IAAI;CAGrE"}
@@ -9,6 +9,8 @@ exports.LastEditedTracker = void 0;
9
9
  * Tracks the last edit details such as the last edited user details and the last edited timestamp. The last edited
10
10
  * details should be updated (via updateLastEditDetails) in response to a remote op since it uses shared summary block
11
11
  * as storage.
12
+ *
13
+ * @public
12
14
  */
13
15
  class LastEditedTracker {
14
16
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"lastEditedTracker.js","sourceRoot":"","sources":["../src/lastEditedTracker.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAKH;;;;GAIG;AACH,MAAa,iBAAiB;IAG7B;;;OAGG;IACH,YAA6B,kBAAsC;QAAtC,uBAAkB,GAAlB,kBAAkB,CAAoB;QANlD,yBAAoB,GAAG,oBAAoB,CAAC;IAMS,CAAC;IAEvE,IAAW,uBAAuB;QACjC,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;OAEG;IACI,kBAAkB;QACxB,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAmB,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACjF,CAAC;IAED;;OAEG;IACI,qBAAqB,CAAC,eAAiC;QAC7D,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAAC;IACzE,CAAC;CACD;AA1BD,8CA0BC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { SharedSummaryBlock } from \"@fluidframework/shared-summary-block\";\nimport { IFluidLastEditedTracker, ILastEditDetails } from \"./interfaces\";\n\n/**\n * Tracks the last edit details such as the last edited user details and the last edited timestamp. The last edited\n * details should be updated (via updateLastEditDetails) in response to a remote op since it uses shared summary block\n * as storage.\n */\nexport class LastEditedTracker implements IFluidLastEditedTracker {\n\tprivate readonly lastEditedDetailsKey = \"lastEditDetailsKey\";\n\n\t/**\n\t * Creates a LastEditedTracker object.\n\t * @param sharedSummaryBlock - The shared summary block where the details will be stored.\n\t */\n\tconstructor(private readonly sharedSummaryBlock: SharedSummaryBlock) {}\n\n\tpublic get IFluidLastEditedTracker(): LastEditedTracker {\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc (IFluidLastEditedTracker:interface).getLastEditDetails}\n\t */\n\tpublic getLastEditDetails(): ILastEditDetails | undefined {\n\t\treturn this.sharedSummaryBlock.get<ILastEditDetails>(this.lastEditedDetailsKey);\n\t}\n\n\t/**\n\t * {@inheritDoc (IFluidLastEditedTracker:interface).updateLastEditDetails}\n\t */\n\tpublic updateLastEditDetails(lastEditDetails: ILastEditDetails): void {\n\t\tthis.sharedSummaryBlock.set(this.lastEditedDetailsKey, lastEditDetails);\n\t}\n}\n"]}
1
+ {"version":3,"file":"lastEditedTracker.js","sourceRoot":"","sources":["../src/lastEditedTracker.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAKH;;;;;;GAMG;AACH,MAAa,iBAAiB;IAG7B;;;OAGG;IACH,YAA6B,kBAAsC;QAAtC,uBAAkB,GAAlB,kBAAkB,CAAoB;QANlD,yBAAoB,GAAG,oBAAoB,CAAC;IAMS,CAAC;IAEvE,IAAW,uBAAuB;QACjC,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;OAEG;IACI,kBAAkB;QACxB,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAmB,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACjF,CAAC;IAED;;OAEG;IACI,qBAAqB,CAAC,eAAiC;QAC7D,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAAC;IACzE,CAAC;CACD;AA1BD,8CA0BC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { SharedSummaryBlock } from \"@fluidframework/shared-summary-block\";\nimport { IFluidLastEditedTracker, ILastEditDetails } from \"./interfaces\";\n\n/**\n * Tracks the last edit details such as the last edited user details and the last edited timestamp. The last edited\n * details should be updated (via updateLastEditDetails) in response to a remote op since it uses shared summary block\n * as storage.\n *\n * @public\n */\nexport class LastEditedTracker implements IFluidLastEditedTracker {\n\tprivate readonly lastEditedDetailsKey = \"lastEditDetailsKey\";\n\n\t/**\n\t * Creates a LastEditedTracker object.\n\t * @param sharedSummaryBlock - The shared summary block where the details will be stored.\n\t */\n\tconstructor(private readonly sharedSummaryBlock: SharedSummaryBlock) {}\n\n\tpublic get IFluidLastEditedTracker(): LastEditedTracker {\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc (IFluidLastEditedTracker:interface).getLastEditDetails}\n\t */\n\tpublic getLastEditDetails(): ILastEditDetails | undefined {\n\t\treturn this.sharedSummaryBlock.get<ILastEditDetails>(this.lastEditedDetailsKey);\n\t}\n\n\t/**\n\t * {@inheritDoc (IFluidLastEditedTracker:interface).updateLastEditDetails}\n\t */\n\tpublic updateLastEditDetails(lastEditDetails: ILastEditDetails): void {\n\t\tthis.sharedSummaryBlock.set(this.lastEditedDetailsKey, lastEditDetails);\n\t}\n}\n"]}
@@ -7,6 +7,8 @@ import { LastEditedTracker } from "./lastEditedTracker";
7
7
  import { IProvideFluidLastEditedTracker } from "./interfaces";
8
8
  /**
9
9
  * LastEditedTrackerDataObject creates a LastEditedTracker that keeps track of the latest edits to the document.
10
+ *
11
+ * @public
10
12
  */
11
13
  export declare class LastEditedTrackerDataObject extends DataObject implements IProvideFluidLastEditedTracker {
12
14
  private static readonly factory;
@@ -1 +1 @@
1
- {"version":3,"file":"lastEditedTrackerDataObject.d.ts","sourceRoot":"","sources":["../src/lastEditedTrackerDataObject.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAE9D;;GAEG;AACH,qBAAa,2BACZ,SAAQ,UACR,YAAW,8BAA8B;IAEzC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAO5B;WAEW,UAAU,IAAI,iBAAiB,CAAC,2BAA2B,CAAC;IAI1E,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA6B;IAClE,OAAO,CAAC,kBAAkB,CAAgC;IAE1D,OAAO,KAAK,iBAAiB,GAM5B;IAED,IAAW,uBAAuB,IAAI,iBAAiB,CAEtD;cAEe,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;cAKtC,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;CAM/C"}
1
+ {"version":3,"file":"lastEditedTrackerDataObject.d.ts","sourceRoot":"","sources":["../src/lastEditedTrackerDataObject.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAE9D;;;;GAIG;AACH,qBAAa,2BACZ,SAAQ,UACR,YAAW,8BAA8B;IAEzC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAO5B;WAEW,UAAU,IAAI,iBAAiB,CAAC,2BAA2B,CAAC;IAI1E,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA6B;IAClE,OAAO,CAAC,kBAAkB,CAAgC;IAE1D,OAAO,KAAK,iBAAiB,GAM5B;IAED,IAAW,uBAAuB,IAAI,iBAAiB,CAEtD;cAEe,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;cAKtC,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;CAM/C"}
@@ -10,6 +10,8 @@ const shared_summary_block_1 = require("@fluidframework/shared-summary-block");
10
10
  const lastEditedTracker_1 = require("./lastEditedTracker");
11
11
  /**
12
12
  * LastEditedTrackerDataObject creates a LastEditedTracker that keeps track of the latest edits to the document.
13
+ *
14
+ * @public
13
15
  */
14
16
  class LastEditedTrackerDataObject extends aqueduct_1.DataObject {
15
17
  constructor() {
@@ -1 +1 @@
1
- {"version":3,"file":"lastEditedTrackerDataObject.js","sourceRoot":"","sources":["../src/lastEditedTrackerDataObject.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,uDAAyE;AAEzE,+EAA0E;AAC1E,2DAAwD;AAGxD;;GAEG;AACH,MAAa,2BACZ,SAAQ,qBAAU;IADnB;;QAiBkB,yBAAoB,GAAG,yBAAyB,CAAC;IA0BnE,CAAC;IA9BO,MAAM,CAAC,UAAU;QACvB,OAAO,2BAA2B,CAAC,OAAO,CAAC;IAC5C,CAAC;IAKD,IAAY,iBAAiB;QAC5B,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS,EAAE;YAC1C,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;SACpE;QAED,OAAO,IAAI,CAAC,kBAAkB,CAAC;IAChC,CAAC;IAED,IAAW,uBAAuB;QACjC,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAC/B,CAAC;IAES,KAAK,CAAC,qBAAqB;QACpC,MAAM,kBAAkB,GAAG,yCAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACrE,CAAC;IAES,KAAK,CAAC,cAAc;QAC7B,MAAM,kBAAkB;QACvB,oEAAoE;QACpE,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAmC,IAAI,CAAC,oBAAoB,CAAE,CAAC,GAAG,EAAE,CAAC;QACzF,IAAI,CAAC,kBAAkB,GAAG,IAAI,qCAAiB,CAAC,kBAAkB,CAAC,CAAC;IACrE,CAAC;;AA1CF,kEA2CC;AAvCwB,mCAAO,GAC9B,IAAI,4BAAiB,CACpB,iCAAiC,EACjC,2BAA2B,EAC3B,CAAC,yCAAkB,CAAC,UAAU,EAAE,CAAC,EACjC,EAAE,EACF,SAAS,CACT,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { DataObject, DataObjectFactory } from \"@fluidframework/aqueduct\";\nimport { IFluidHandle } from \"@fluidframework/core-interfaces\";\nimport { SharedSummaryBlock } from \"@fluidframework/shared-summary-block\";\nimport { LastEditedTracker } from \"./lastEditedTracker\";\nimport { IProvideFluidLastEditedTracker } from \"./interfaces\";\n\n/**\n * LastEditedTrackerDataObject creates a LastEditedTracker that keeps track of the latest edits to the document.\n */\nexport class LastEditedTrackerDataObject\n\textends DataObject\n\timplements IProvideFluidLastEditedTracker\n{\n\tprivate static readonly factory: DataObjectFactory<LastEditedTrackerDataObject> =\n\t\tnew DataObjectFactory(\n\t\t\t\"@fluid-experimental/last-edited\",\n\t\t\tLastEditedTrackerDataObject,\n\t\t\t[SharedSummaryBlock.getFactory()],\n\t\t\t{},\n\t\t\tundefined,\n\t\t);\n\n\tpublic static getFactory(): DataObjectFactory<LastEditedTrackerDataObject> {\n\t\treturn LastEditedTrackerDataObject.factory;\n\t}\n\n\tprivate readonly sharedSummaryBlockId = \"shared-summary-block-id\";\n\tprivate _lastEditedTracker: LastEditedTracker | undefined;\n\n\tprivate get lastEditedTracker(): LastEditedTracker {\n\t\tif (this._lastEditedTracker === undefined) {\n\t\t\tthrow new Error(\"Last Edited tracker was not initialized properly\");\n\t\t}\n\n\t\treturn this._lastEditedTracker;\n\t}\n\n\tpublic get IFluidLastEditedTracker(): LastEditedTracker {\n\t\treturn this.lastEditedTracker;\n\t}\n\n\tprotected async initializingFirstTime(): Promise<void> {\n\t\tconst sharedSummaryBlock = SharedSummaryBlock.create(this.runtime);\n\t\tthis.root.set(this.sharedSummaryBlockId, sharedSummaryBlock.handle);\n\t}\n\n\tprotected async hasInitialized(): Promise<void> {\n\t\tconst sharedSummaryBlock =\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tawait this.root.get<IFluidHandle<SharedSummaryBlock>>(this.sharedSummaryBlockId)!.get();\n\t\tthis._lastEditedTracker = new LastEditedTracker(sharedSummaryBlock);\n\t}\n}\n"]}
1
+ {"version":3,"file":"lastEditedTrackerDataObject.js","sourceRoot":"","sources":["../src/lastEditedTrackerDataObject.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,uDAAyE;AAEzE,+EAA0E;AAC1E,2DAAwD;AAGxD;;;;GAIG;AACH,MAAa,2BACZ,SAAQ,qBAAU;IADnB;;QAiBkB,yBAAoB,GAAG,yBAAyB,CAAC;IA0BnE,CAAC;IA9BO,MAAM,CAAC,UAAU;QACvB,OAAO,2BAA2B,CAAC,OAAO,CAAC;IAC5C,CAAC;IAKD,IAAY,iBAAiB;QAC5B,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS,EAAE;YAC1C,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;SACpE;QAED,OAAO,IAAI,CAAC,kBAAkB,CAAC;IAChC,CAAC;IAED,IAAW,uBAAuB;QACjC,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAC/B,CAAC;IAES,KAAK,CAAC,qBAAqB;QACpC,MAAM,kBAAkB,GAAG,yCAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACrE,CAAC;IAES,KAAK,CAAC,cAAc;QAC7B,MAAM,kBAAkB;QACvB,oEAAoE;QACpE,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAmC,IAAI,CAAC,oBAAoB,CAAE,CAAC,GAAG,EAAE,CAAC;QACzF,IAAI,CAAC,kBAAkB,GAAG,IAAI,qCAAiB,CAAC,kBAAkB,CAAC,CAAC;IACrE,CAAC;;AA1CF,kEA2CC;AAvCwB,mCAAO,GAC9B,IAAI,4BAAiB,CACpB,iCAAiC,EACjC,2BAA2B,EAC3B,CAAC,yCAAkB,CAAC,UAAU,EAAE,CAAC,EACjC,EAAE,EACF,SAAS,CACT,AAP6B,CAO5B","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { DataObject, DataObjectFactory } from \"@fluidframework/aqueduct\";\nimport { IFluidHandle } from \"@fluidframework/core-interfaces\";\nimport { SharedSummaryBlock } from \"@fluidframework/shared-summary-block\";\nimport { LastEditedTracker } from \"./lastEditedTracker\";\nimport { IProvideFluidLastEditedTracker } from \"./interfaces\";\n\n/**\n * LastEditedTrackerDataObject creates a LastEditedTracker that keeps track of the latest edits to the document.\n *\n * @public\n */\nexport class LastEditedTrackerDataObject\n\textends DataObject\n\timplements IProvideFluidLastEditedTracker\n{\n\tprivate static readonly factory: DataObjectFactory<LastEditedTrackerDataObject> =\n\t\tnew DataObjectFactory(\n\t\t\t\"@fluid-experimental/last-edited\",\n\t\t\tLastEditedTrackerDataObject,\n\t\t\t[SharedSummaryBlock.getFactory()],\n\t\t\t{},\n\t\t\tundefined,\n\t\t);\n\n\tpublic static getFactory(): DataObjectFactory<LastEditedTrackerDataObject> {\n\t\treturn LastEditedTrackerDataObject.factory;\n\t}\n\n\tprivate readonly sharedSummaryBlockId = \"shared-summary-block-id\";\n\tprivate _lastEditedTracker: LastEditedTracker | undefined;\n\n\tprivate get lastEditedTracker(): LastEditedTracker {\n\t\tif (this._lastEditedTracker === undefined) {\n\t\t\tthrow new Error(\"Last Edited tracker was not initialized properly\");\n\t\t}\n\n\t\treturn this._lastEditedTracker;\n\t}\n\n\tpublic get IFluidLastEditedTracker(): LastEditedTracker {\n\t\treturn this.lastEditedTracker;\n\t}\n\n\tprotected async initializingFirstTime(): Promise<void> {\n\t\tconst sharedSummaryBlock = SharedSummaryBlock.create(this.runtime);\n\t\tthis.root.set(this.sharedSummaryBlockId, sharedSummaryBlock.handle);\n\t}\n\n\tprotected async hasInitialized(): Promise<void> {\n\t\tconst sharedSummaryBlock =\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tawait this.root.get<IFluidHandle<SharedSummaryBlock>>(this.sharedSummaryBlockId)!.get();\n\t\tthis._lastEditedTracker = new LastEditedTracker(sharedSummaryBlock);\n\t}\n}\n"]}
package/dist/setup.d.ts CHANGED
@@ -19,6 +19,8 @@ import { IFluidLastEditedTracker } from "./interfaces";
19
19
  * @param lastEditedTracker - The last edited tracker.
20
20
  * @param runtime - The container runtime whose messages are to be tracked.
21
21
  * @param shouldDiscardMessageFn - Function that tells if a message should not be considered in computing last edited.
22
+ *
23
+ * @public
22
24
  */
23
25
  export declare function setupLastEditedTrackerForContainer(lastEditedTracker: IFluidLastEditedTracker, runtime: IContainerRuntime, shouldDiscardMessageFn?: (message: ISequencedDocumentMessage) => boolean): void;
24
26
  //# sourceMappingURL=setup.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,yBAAyB,EAAkB,MAAM,sCAAsC,CAAC;AAEjG,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAoB,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAoCzE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kCAAkC,CACjD,iBAAiB,EAAE,uBAAuB,EAC1C,OAAO,EAAE,iBAAiB,EAC1B,sBAAsB,GAAE,CACvB,OAAO,EAAE,yBAAyB,KAC9B,OAAqC,GACxC,IAAI,CAkBN"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,yBAAyB,EAAkB,MAAM,sCAAsC,CAAC;AAEjG,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAoB,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAoCzE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kCAAkC,CACjD,iBAAiB,EAAE,uBAAuB,EAC1C,OAAO,EAAE,iBAAiB,EAC1B,sBAAsB,GAAE,CACvB,OAAO,EAAE,yBAAyB,KAC9B,OAAqC,GACxC,IAAI,CAkBN"}
package/dist/setup.js CHANGED
@@ -48,6 +48,8 @@ function getLastEditDetailsFromMessage(message, quorum) {
48
48
  * @param lastEditedTracker - The last edited tracker.
49
49
  * @param runtime - The container runtime whose messages are to be tracked.
50
50
  * @param shouldDiscardMessageFn - Function that tells if a message should not be considered in computing last edited.
51
+ *
52
+ * @public
51
53
  */
52
54
  function setupLastEditedTrackerForContainer(lastEditedTracker, runtime, shouldDiscardMessageFn = shouldDiscardMessageDefault) {
53
55
  // Register an op listener on the runtime. If the lastEditedTracker has loaded,
package/dist/setup.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAGH,yEAAyE;AAIzE;;;;;;GAMG;AACH,MAAM,2BAA2B,GAAG,CAAC,OAAkC,EAAW,EAAE,CACnF,OAAO,CAAC,IAAI,KAAK,wCAAoB,CAAC,MAAM;IAC5C,OAAO,CAAC,IAAI,KAAK,wCAAoB,CAAC,gBAAgB;IACtD,OAAO,CAAC,IAAI,KAAK,wCAAoB,CAAC,KAAK,CAAC;AAE7C;;;GAGG;AACH,SAAS,6BAA6B,CACrC,OAAkC,EAClC,MAAsB;IAEtB,+FAA+F;IAC/F,4EAA4E;IAC5E,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,QAAkB,CAAC,CAAC;IACrE,MAAM,IAAI,GAAG,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC;IAC1C,IAAI,IAAI,KAAK,SAAS,EAAE;QACvB,MAAM,eAAe,GAAqB;YACzC,IAAI;YACJ,SAAS,EAAE,OAAO,CAAC,SAAS;SAC5B,CAAC;QACF,OAAO,eAAe,CAAC;KACvB;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAgB,kCAAkC,CACjD,iBAA0C,EAC1C,OAA0B,EAC1B,yBAEe,2BAA2B;IAE1C,+EAA+E;IAC/E,+CAA+C;IAC/C,8GAA8G;IAC9G,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,OAAkC,EAAE,cAAwB,EAAE,EAAE;QACjF,6EAA6E;QAC7E,IAAI,cAAc,KAAK,KAAK,IAAI,sBAAsB,CAAC,OAAO,CAAC,EAAE;YAChE,OAAO;SACP;QAED,6EAA6E;QAC7E,MAAM,eAAe,GAAG,6BAA6B,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QACpF,IAAI,eAAe,KAAK,SAAS,EAAE;YAClC,OAAO;SACP;QAED,iBAAiB,CAAC,qBAAqB,CAAC,eAAe,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACJ,CAAC;AAxBD,gFAwBC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ISequencedDocumentMessage, IQuorumClients } from \"@fluidframework/protocol-definitions\";\nimport { ContainerMessageType } from \"@fluidframework/container-runtime\";\nimport { IContainerRuntime } from \"@fluidframework/container-runtime-definitions\";\nimport { ILastEditDetails, IFluidLastEditedTracker } from \"./interfaces\";\n\n/**\n * Default implementation of {@link setupLastEditedTrackerForContainer}'s `shouldDiscardMessageFn` parameter,\n * which tells that all messages other than {@link @fluidframework/container-runtime#ContainerMessageType.Alias},\n * {@link @fluidframework/container-runtime#ContainerMessageType.Attach}, and\n * {@link @fluidframework/container-runtime#ContainerMessageType.FluidDataStoreOp} type messages should be\n * discarded.\n */\nconst shouldDiscardMessageDefault = (message: ISequencedDocumentMessage): boolean =>\n\tmessage.type !== ContainerMessageType.Attach &&\n\tmessage.type !== ContainerMessageType.FluidDataStoreOp &&\n\tmessage.type !== ContainerMessageType.Alias;\n\n/**\n * Extracts the user information and timestamp from a message. Returns undefined if the user information for the\n * client who sent the message doesn't exist in the quorum.\n */\nfunction getLastEditDetailsFromMessage(\n\tmessage: ISequencedDocumentMessage,\n\tquorum: IQuorumClients,\n): ILastEditDetails | undefined {\n\t// TODO: Verify whether this should be able to handle server-generated ops (with null clientId)\n\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n\tconst sequencedClient = quorum.getMember(message.clientId as string);\n\tconst user = sequencedClient?.client.user;\n\tif (user !== undefined) {\n\t\tconst lastEditDetails: ILastEditDetails = {\n\t\t\tuser,\n\t\t\ttimestamp: message.timestamp,\n\t\t};\n\t\treturn lastEditDetails;\n\t}\n\treturn undefined;\n}\n\n/**\n * Helper function to set up a data object that provides IFluidLastEditedTracker to track last edited in a Container.\n *\n * It does the following:\n *\n * - Registers an \"op\" listener on the runtime. On each message, it calls the shouldDiscardMessageFn to check\n * if the message should be discarded. It also discards all scheduler message. If a message is not discarded,\n * it passes the last edited information from the message to the last edited tracker.\n *\n * - The last edited information from the last message received before the lastEditedTracker is\n * loaded is stored and passed to the tracker once it loads.\n * @param lastEditedTracker - The last edited tracker.\n * @param runtime - The container runtime whose messages are to be tracked.\n * @param shouldDiscardMessageFn - Function that tells if a message should not be considered in computing last edited.\n */\nexport function setupLastEditedTrackerForContainer(\n\tlastEditedTracker: IFluidLastEditedTracker,\n\truntime: IContainerRuntime,\n\tshouldDiscardMessageFn: (\n\t\tmessage: ISequencedDocumentMessage,\n\t) => boolean = shouldDiscardMessageDefault,\n): void {\n\t// Register an op listener on the runtime. If the lastEditedTracker has loaded,\n\t// it passes the last edited information to its\n\t// last edited tracker. If the lastEditedTracker hasn't loaded, store the last edited information temporarily.\n\truntime.on(\"op\", (message: ISequencedDocumentMessage, runtimeMessage?: boolean) => {\n\t\t// If this message should be discarded as per shouldDiscardMessageFn, return.\n\t\tif (runtimeMessage === false || shouldDiscardMessageFn(message)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Get the last edited details from the message. If it doesn't exist, return.\n\t\tconst lastEditDetails = getLastEditDetailsFromMessage(message, runtime.getQuorum());\n\t\tif (lastEditDetails === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tlastEditedTracker.updateLastEditDetails(lastEditDetails);\n\t});\n}\n"]}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAGH,yEAAyE;AAIzE;;;;;;GAMG;AACH,MAAM,2BAA2B,GAAG,CAAC,OAAkC,EAAW,EAAE,CACnF,OAAO,CAAC,IAAI,KAAK,wCAAoB,CAAC,MAAM;IAC5C,OAAO,CAAC,IAAI,KAAK,wCAAoB,CAAC,gBAAgB;IACtD,OAAO,CAAC,IAAI,KAAK,wCAAoB,CAAC,KAAK,CAAC;AAE7C;;;GAGG;AACH,SAAS,6BAA6B,CACrC,OAAkC,EAClC,MAAsB;IAEtB,+FAA+F;IAC/F,4EAA4E;IAC5E,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,QAAkB,CAAC,CAAC;IACrE,MAAM,IAAI,GAAG,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC;IAC1C,IAAI,IAAI,KAAK,SAAS,EAAE;QACvB,MAAM,eAAe,GAAqB;YACzC,IAAI;YACJ,SAAS,EAAE,OAAO,CAAC,SAAS;SAC5B,CAAC;QACF,OAAO,eAAe,CAAC;KACvB;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,kCAAkC,CACjD,iBAA0C,EAC1C,OAA0B,EAC1B,yBAEe,2BAA2B;IAE1C,+EAA+E;IAC/E,+CAA+C;IAC/C,8GAA8G;IAC9G,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,OAAkC,EAAE,cAAwB,EAAE,EAAE;QACjF,6EAA6E;QAC7E,IAAI,cAAc,KAAK,KAAK,IAAI,sBAAsB,CAAC,OAAO,CAAC,EAAE;YAChE,OAAO;SACP;QAED,6EAA6E;QAC7E,MAAM,eAAe,GAAG,6BAA6B,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QACpF,IAAI,eAAe,KAAK,SAAS,EAAE;YAClC,OAAO;SACP;QAED,iBAAiB,CAAC,qBAAqB,CAAC,eAAe,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACJ,CAAC;AAxBD,gFAwBC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ISequencedDocumentMessage, IQuorumClients } from \"@fluidframework/protocol-definitions\";\nimport { ContainerMessageType } from \"@fluidframework/container-runtime\";\nimport { IContainerRuntime } from \"@fluidframework/container-runtime-definitions\";\nimport { ILastEditDetails, IFluidLastEditedTracker } from \"./interfaces\";\n\n/**\n * Default implementation of {@link setupLastEditedTrackerForContainer}'s `shouldDiscardMessageFn` parameter,\n * which tells that all messages other than {@link @fluidframework/container-runtime#ContainerMessageType.Alias},\n * {@link @fluidframework/container-runtime#ContainerMessageType.Attach}, and\n * {@link @fluidframework/container-runtime#ContainerMessageType.FluidDataStoreOp} type messages should be\n * discarded.\n */\nconst shouldDiscardMessageDefault = (message: ISequencedDocumentMessage): boolean =>\n\tmessage.type !== ContainerMessageType.Attach &&\n\tmessage.type !== ContainerMessageType.FluidDataStoreOp &&\n\tmessage.type !== ContainerMessageType.Alias;\n\n/**\n * Extracts the user information and timestamp from a message. Returns undefined if the user information for the\n * client who sent the message doesn't exist in the quorum.\n */\nfunction getLastEditDetailsFromMessage(\n\tmessage: ISequencedDocumentMessage,\n\tquorum: IQuorumClients,\n): ILastEditDetails | undefined {\n\t// TODO: Verify whether this should be able to handle server-generated ops (with null clientId)\n\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n\tconst sequencedClient = quorum.getMember(message.clientId as string);\n\tconst user = sequencedClient?.client.user;\n\tif (user !== undefined) {\n\t\tconst lastEditDetails: ILastEditDetails = {\n\t\t\tuser,\n\t\t\ttimestamp: message.timestamp,\n\t\t};\n\t\treturn lastEditDetails;\n\t}\n\treturn undefined;\n}\n\n/**\n * Helper function to set up a data object that provides IFluidLastEditedTracker to track last edited in a Container.\n *\n * It does the following:\n *\n * - Registers an \"op\" listener on the runtime. On each message, it calls the shouldDiscardMessageFn to check\n * if the message should be discarded. It also discards all scheduler message. If a message is not discarded,\n * it passes the last edited information from the message to the last edited tracker.\n *\n * - The last edited information from the last message received before the lastEditedTracker is\n * loaded is stored and passed to the tracker once it loads.\n * @param lastEditedTracker - The last edited tracker.\n * @param runtime - The container runtime whose messages are to be tracked.\n * @param shouldDiscardMessageFn - Function that tells if a message should not be considered in computing last edited.\n *\n * @public\n */\nexport function setupLastEditedTrackerForContainer(\n\tlastEditedTracker: IFluidLastEditedTracker,\n\truntime: IContainerRuntime,\n\tshouldDiscardMessageFn: (\n\t\tmessage: ISequencedDocumentMessage,\n\t) => boolean = shouldDiscardMessageDefault,\n): void {\n\t// Register an op listener on the runtime. If the lastEditedTracker has loaded,\n\t// it passes the last edited information to its\n\t// last edited tracker. If the lastEditedTracker hasn't loaded, store the last edited information temporarily.\n\truntime.on(\"op\", (message: ISequencedDocumentMessage, runtimeMessage?: boolean) => {\n\t\t// If this message should be discarded as per shouldDiscardMessageFn, return.\n\t\tif (runtimeMessage === false || shouldDiscardMessageFn(message)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Get the last edited details from the message. If it doesn't exist, return.\n\t\tconst lastEditDetails = getLastEditDetailsFromMessage(message, runtime.getQuorum());\n\t\tif (lastEditDetails === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tlastEditedTracker.updateLastEditDetails(lastEditDetails);\n\t});\n}\n"]}
@@ -5,7 +5,7 @@
5
5
  "toolPackages": [
6
6
  {
7
7
  "packageName": "@microsoft/api-extractor",
8
- "packageVersion": "7.34.9"
8
+ "packageVersion": "7.38.0"
9
9
  }
10
10
  ]
11
11
  }
@@ -3,10 +3,19 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  import { IUser } from "@fluidframework/protocol-definitions";
6
+ /**
7
+ * @public
8
+ */
6
9
  export declare const IFluidLastEditedTracker: keyof IProvideFluidLastEditedTracker;
10
+ /**
11
+ * @public
12
+ */
7
13
  export interface IProvideFluidLastEditedTracker {
8
14
  readonly IFluidLastEditedTracker: IFluidLastEditedTracker;
9
15
  }
16
+ /**
17
+ * @public
18
+ */
10
19
  export interface IFluidLastEditedTracker extends IProvideFluidLastEditedTracker {
11
20
  /**
12
21
  * Returns the details of the last edit to the container.
@@ -17,6 +26,9 @@ export interface IFluidLastEditedTracker extends IProvideFluidLastEditedTracker
17
26
  */
18
27
  updateLastEditDetails(lastEditDetails: ILastEditDetails): void;
19
28
  }
29
+ /**
30
+ * @public
31
+ */
20
32
  export interface ILastEditDetails {
21
33
  user: IUser;
22
34
  timestamp: number;
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,sCAAsC,CAAC;AAE7D,eAAO,MAAM,uBAAuB,EAAE,MAAM,8BAClB,CAAC;AAE3B,MAAM,WAAW,8BAA8B;IAC9C,QAAQ,CAAC,uBAAuB,EAAE,uBAAuB,CAAC;CAC1D;AAED,MAAM,WAAW,uBAAwB,SAAQ,8BAA8B;IAC9E;;OAEG;IACH,kBAAkB,IAAI,gBAAgB,GAAG,SAAS,CAAC;IAEnD;;OAEG;IACH,qBAAqB,CAAC,eAAe,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAC/D;AAED,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,KAAK,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CAClB"}
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,sCAAsC,CAAC;AAE7D;;GAEG;AACH,eAAO,MAAM,uBAAuB,EAAE,MAAM,8BAClB,CAAC;AAE3B;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC9C,QAAQ,CAAC,uBAAuB,EAAE,uBAAuB,CAAC;CAC1D;AAED;;GAEG;AACH,MAAM,WAAW,uBAAwB,SAAQ,8BAA8B;IAC9E;;OAEG;IACH,kBAAkB,IAAI,gBAAgB,GAAG,SAAS,CAAC;IAEnD;;OAEG;IACH,qBAAqB,CAAC,eAAe,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAC/D;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,KAAK,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CAClB"}
package/lib/interfaces.js CHANGED
@@ -2,5 +2,8 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
+ /**
6
+ * @public
7
+ */
5
8
  export const IFluidLastEditedTracker = "IFluidLastEditedTracker";
6
9
  //# sourceMappingURL=interfaces.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,CAAC,MAAM,uBAAuB,GACnC,yBAAyB,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { IUser } from \"@fluidframework/protocol-definitions\";\n\nexport const IFluidLastEditedTracker: keyof IProvideFluidLastEditedTracker =\n\t\"IFluidLastEditedTracker\";\n\nexport interface IProvideFluidLastEditedTracker {\n\treadonly IFluidLastEditedTracker: IFluidLastEditedTracker;\n}\n\nexport interface IFluidLastEditedTracker extends IProvideFluidLastEditedTracker {\n\t/**\n\t * Returns the details of the last edit to the container.\n\t */\n\tgetLastEditDetails(): ILastEditDetails | undefined;\n\n\t/**\n\t * Updates the details of last edit to the container.\n\t */\n\tupdateLastEditDetails(lastEditDetails: ILastEditDetails): void;\n}\n\nexport interface ILastEditDetails {\n\tuser: IUser;\n\ttimestamp: number;\n}\n"]}
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GACnC,yBAAyB,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { IUser } from \"@fluidframework/protocol-definitions\";\n\n/**\n * @public\n */\nexport const IFluidLastEditedTracker: keyof IProvideFluidLastEditedTracker =\n\t\"IFluidLastEditedTracker\";\n\n/**\n * @public\n */\nexport interface IProvideFluidLastEditedTracker {\n\treadonly IFluidLastEditedTracker: IFluidLastEditedTracker;\n}\n\n/**\n * @public\n */\nexport interface IFluidLastEditedTracker extends IProvideFluidLastEditedTracker {\n\t/**\n\t * Returns the details of the last edit to the container.\n\t */\n\tgetLastEditDetails(): ILastEditDetails | undefined;\n\n\t/**\n\t * Updates the details of last edit to the container.\n\t */\n\tupdateLastEditDetails(lastEditDetails: ILastEditDetails): void;\n}\n\n/**\n * @public\n */\nexport interface ILastEditDetails {\n\tuser: IUser;\n\ttimestamp: number;\n}\n"]}
@@ -8,6 +8,8 @@ import { IFluidLastEditedTracker, ILastEditDetails } from "./interfaces";
8
8
  * Tracks the last edit details such as the last edited user details and the last edited timestamp. The last edited
9
9
  * details should be updated (via updateLastEditDetails) in response to a remote op since it uses shared summary block
10
10
  * as storage.
11
+ *
12
+ * @public
11
13
  */
12
14
  export declare class LastEditedTracker implements IFluidLastEditedTracker {
13
15
  private readonly sharedSummaryBlock;
@@ -1 +1 @@
1
- {"version":3,"file":"lastEditedTracker.d.ts","sourceRoot":"","sources":["../src/lastEditedTracker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEzE;;;;GAIG;AACH,qBAAa,iBAAkB,YAAW,uBAAuB;IAOpD,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IAN/C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAwB;IAE7D;;;OAGG;gBAC0B,kBAAkB,EAAE,kBAAkB;IAEnE,IAAW,uBAAuB,IAAI,iBAAiB,CAEtD;IAED;;OAEG;IACI,kBAAkB,IAAI,gBAAgB,GAAG,SAAS;IAIzD;;OAEG;IACI,qBAAqB,CAAC,eAAe,EAAE,gBAAgB,GAAG,IAAI;CAGrE"}
1
+ {"version":3,"file":"lastEditedTracker.d.ts","sourceRoot":"","sources":["../src/lastEditedTracker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEzE;;;;;;GAMG;AACH,qBAAa,iBAAkB,YAAW,uBAAuB;IAOpD,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IAN/C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAwB;IAE7D;;;OAGG;gBAC0B,kBAAkB,EAAE,kBAAkB;IAEnE,IAAW,uBAAuB,IAAI,iBAAiB,CAEtD;IAED;;OAEG;IACI,kBAAkB,IAAI,gBAAgB,GAAG,SAAS;IAIzD;;OAEG;IACI,qBAAqB,CAAC,eAAe,EAAE,gBAAgB,GAAG,IAAI;CAGrE"}
@@ -6,6 +6,8 @@
6
6
  * Tracks the last edit details such as the last edited user details and the last edited timestamp. The last edited
7
7
  * details should be updated (via updateLastEditDetails) in response to a remote op since it uses shared summary block
8
8
  * as storage.
9
+ *
10
+ * @public
9
11
  */
10
12
  export class LastEditedTracker {
11
13
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"lastEditedTracker.js","sourceRoot":"","sources":["../src/lastEditedTracker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;;;GAIG;AACH,MAAM,OAAO,iBAAiB;IAG7B;;;OAGG;IACH,YAA6B,kBAAsC;QAAtC,uBAAkB,GAAlB,kBAAkB,CAAoB;QANlD,yBAAoB,GAAG,oBAAoB,CAAC;IAMS,CAAC;IAEvE,IAAW,uBAAuB;QACjC,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;OAEG;IACI,kBAAkB;QACxB,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAmB,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACjF,CAAC;IAED;;OAEG;IACI,qBAAqB,CAAC,eAAiC;QAC7D,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAAC;IACzE,CAAC;CACD","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { SharedSummaryBlock } from \"@fluidframework/shared-summary-block\";\nimport { IFluidLastEditedTracker, ILastEditDetails } from \"./interfaces\";\n\n/**\n * Tracks the last edit details such as the last edited user details and the last edited timestamp. The last edited\n * details should be updated (via updateLastEditDetails) in response to a remote op since it uses shared summary block\n * as storage.\n */\nexport class LastEditedTracker implements IFluidLastEditedTracker {\n\tprivate readonly lastEditedDetailsKey = \"lastEditDetailsKey\";\n\n\t/**\n\t * Creates a LastEditedTracker object.\n\t * @param sharedSummaryBlock - The shared summary block where the details will be stored.\n\t */\n\tconstructor(private readonly sharedSummaryBlock: SharedSummaryBlock) {}\n\n\tpublic get IFluidLastEditedTracker(): LastEditedTracker {\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc (IFluidLastEditedTracker:interface).getLastEditDetails}\n\t */\n\tpublic getLastEditDetails(): ILastEditDetails | undefined {\n\t\treturn this.sharedSummaryBlock.get<ILastEditDetails>(this.lastEditedDetailsKey);\n\t}\n\n\t/**\n\t * {@inheritDoc (IFluidLastEditedTracker:interface).updateLastEditDetails}\n\t */\n\tpublic updateLastEditDetails(lastEditDetails: ILastEditDetails): void {\n\t\tthis.sharedSummaryBlock.set(this.lastEditedDetailsKey, lastEditDetails);\n\t}\n}\n"]}
1
+ {"version":3,"file":"lastEditedTracker.js","sourceRoot":"","sources":["../src/lastEditedTracker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;;;;;GAMG;AACH,MAAM,OAAO,iBAAiB;IAG7B;;;OAGG;IACH,YAA6B,kBAAsC;QAAtC,uBAAkB,GAAlB,kBAAkB,CAAoB;QANlD,yBAAoB,GAAG,oBAAoB,CAAC;IAMS,CAAC;IAEvE,IAAW,uBAAuB;QACjC,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;OAEG;IACI,kBAAkB;QACxB,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAmB,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACjF,CAAC;IAED;;OAEG;IACI,qBAAqB,CAAC,eAAiC;QAC7D,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAAC;IACzE,CAAC;CACD","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { SharedSummaryBlock } from \"@fluidframework/shared-summary-block\";\nimport { IFluidLastEditedTracker, ILastEditDetails } from \"./interfaces\";\n\n/**\n * Tracks the last edit details such as the last edited user details and the last edited timestamp. The last edited\n * details should be updated (via updateLastEditDetails) in response to a remote op since it uses shared summary block\n * as storage.\n *\n * @public\n */\nexport class LastEditedTracker implements IFluidLastEditedTracker {\n\tprivate readonly lastEditedDetailsKey = \"lastEditDetailsKey\";\n\n\t/**\n\t * Creates a LastEditedTracker object.\n\t * @param sharedSummaryBlock - The shared summary block where the details will be stored.\n\t */\n\tconstructor(private readonly sharedSummaryBlock: SharedSummaryBlock) {}\n\n\tpublic get IFluidLastEditedTracker(): LastEditedTracker {\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc (IFluidLastEditedTracker:interface).getLastEditDetails}\n\t */\n\tpublic getLastEditDetails(): ILastEditDetails | undefined {\n\t\treturn this.sharedSummaryBlock.get<ILastEditDetails>(this.lastEditedDetailsKey);\n\t}\n\n\t/**\n\t * {@inheritDoc (IFluidLastEditedTracker:interface).updateLastEditDetails}\n\t */\n\tpublic updateLastEditDetails(lastEditDetails: ILastEditDetails): void {\n\t\tthis.sharedSummaryBlock.set(this.lastEditedDetailsKey, lastEditDetails);\n\t}\n}\n"]}
@@ -7,6 +7,8 @@ import { LastEditedTracker } from "./lastEditedTracker";
7
7
  import { IProvideFluidLastEditedTracker } from "./interfaces";
8
8
  /**
9
9
  * LastEditedTrackerDataObject creates a LastEditedTracker that keeps track of the latest edits to the document.
10
+ *
11
+ * @public
10
12
  */
11
13
  export declare class LastEditedTrackerDataObject extends DataObject implements IProvideFluidLastEditedTracker {
12
14
  private static readonly factory;
@@ -1 +1 @@
1
- {"version":3,"file":"lastEditedTrackerDataObject.d.ts","sourceRoot":"","sources":["../src/lastEditedTrackerDataObject.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAE9D;;GAEG;AACH,qBAAa,2BACZ,SAAQ,UACR,YAAW,8BAA8B;IAEzC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAO5B;WAEW,UAAU,IAAI,iBAAiB,CAAC,2BAA2B,CAAC;IAI1E,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA6B;IAClE,OAAO,CAAC,kBAAkB,CAAgC;IAE1D,OAAO,KAAK,iBAAiB,GAM5B;IAED,IAAW,uBAAuB,IAAI,iBAAiB,CAEtD;cAEe,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;cAKtC,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;CAM/C"}
1
+ {"version":3,"file":"lastEditedTrackerDataObject.d.ts","sourceRoot":"","sources":["../src/lastEditedTrackerDataObject.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAE9D;;;;GAIG;AACH,qBAAa,2BACZ,SAAQ,UACR,YAAW,8BAA8B;IAEzC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAO5B;WAEW,UAAU,IAAI,iBAAiB,CAAC,2BAA2B,CAAC;IAI1E,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA6B;IAClE,OAAO,CAAC,kBAAkB,CAAgC;IAE1D,OAAO,KAAK,iBAAiB,GAM5B;IAED,IAAW,uBAAuB,IAAI,iBAAiB,CAEtD;cAEe,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;cAKtC,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;CAM/C"}
@@ -7,6 +7,8 @@ import { SharedSummaryBlock } from "@fluidframework/shared-summary-block";
7
7
  import { LastEditedTracker } from "./lastEditedTracker";
8
8
  /**
9
9
  * LastEditedTrackerDataObject creates a LastEditedTracker that keeps track of the latest edits to the document.
10
+ *
11
+ * @public
10
12
  */
11
13
  export class LastEditedTrackerDataObject extends DataObject {
12
14
  constructor() {
@@ -1 +1 @@
1
- {"version":3,"file":"lastEditedTrackerDataObject.js","sourceRoot":"","sources":["../src/lastEditedTrackerDataObject.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAEzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD;;GAEG;AACH,MAAM,OAAO,2BACZ,SAAQ,UAAU;IADnB;;QAiBkB,yBAAoB,GAAG,yBAAyB,CAAC;IA0BnE,CAAC;IA9BO,MAAM,CAAC,UAAU;QACvB,OAAO,2BAA2B,CAAC,OAAO,CAAC;IAC5C,CAAC;IAKD,IAAY,iBAAiB;QAC5B,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS,EAAE;YAC1C,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;SACpE;QAED,OAAO,IAAI,CAAC,kBAAkB,CAAC;IAChC,CAAC;IAED,IAAW,uBAAuB;QACjC,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAC/B,CAAC;IAES,KAAK,CAAC,qBAAqB;QACpC,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACrE,CAAC;IAES,KAAK,CAAC,cAAc;QAC7B,MAAM,kBAAkB;QACvB,oEAAoE;QACpE,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAmC,IAAI,CAAC,oBAAoB,CAAE,CAAC,GAAG,EAAE,CAAC;QACzF,IAAI,CAAC,kBAAkB,GAAG,IAAI,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IACrE,CAAC;;AAtCuB,mCAAO,GAC9B,IAAI,iBAAiB,CACpB,iCAAiC,EACjC,2BAA2B,EAC3B,CAAC,kBAAkB,CAAC,UAAU,EAAE,CAAC,EACjC,EAAE,EACF,SAAS,CACT,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { DataObject, DataObjectFactory } from \"@fluidframework/aqueduct\";\nimport { IFluidHandle } from \"@fluidframework/core-interfaces\";\nimport { SharedSummaryBlock } from \"@fluidframework/shared-summary-block\";\nimport { LastEditedTracker } from \"./lastEditedTracker\";\nimport { IProvideFluidLastEditedTracker } from \"./interfaces\";\n\n/**\n * LastEditedTrackerDataObject creates a LastEditedTracker that keeps track of the latest edits to the document.\n */\nexport class LastEditedTrackerDataObject\n\textends DataObject\n\timplements IProvideFluidLastEditedTracker\n{\n\tprivate static readonly factory: DataObjectFactory<LastEditedTrackerDataObject> =\n\t\tnew DataObjectFactory(\n\t\t\t\"@fluid-experimental/last-edited\",\n\t\t\tLastEditedTrackerDataObject,\n\t\t\t[SharedSummaryBlock.getFactory()],\n\t\t\t{},\n\t\t\tundefined,\n\t\t);\n\n\tpublic static getFactory(): DataObjectFactory<LastEditedTrackerDataObject> {\n\t\treturn LastEditedTrackerDataObject.factory;\n\t}\n\n\tprivate readonly sharedSummaryBlockId = \"shared-summary-block-id\";\n\tprivate _lastEditedTracker: LastEditedTracker | undefined;\n\n\tprivate get lastEditedTracker(): LastEditedTracker {\n\t\tif (this._lastEditedTracker === undefined) {\n\t\t\tthrow new Error(\"Last Edited tracker was not initialized properly\");\n\t\t}\n\n\t\treturn this._lastEditedTracker;\n\t}\n\n\tpublic get IFluidLastEditedTracker(): LastEditedTracker {\n\t\treturn this.lastEditedTracker;\n\t}\n\n\tprotected async initializingFirstTime(): Promise<void> {\n\t\tconst sharedSummaryBlock = SharedSummaryBlock.create(this.runtime);\n\t\tthis.root.set(this.sharedSummaryBlockId, sharedSummaryBlock.handle);\n\t}\n\n\tprotected async hasInitialized(): Promise<void> {\n\t\tconst sharedSummaryBlock =\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tawait this.root.get<IFluidHandle<SharedSummaryBlock>>(this.sharedSummaryBlockId)!.get();\n\t\tthis._lastEditedTracker = new LastEditedTracker(sharedSummaryBlock);\n\t}\n}\n"]}
1
+ {"version":3,"file":"lastEditedTrackerDataObject.js","sourceRoot":"","sources":["../src/lastEditedTrackerDataObject.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAEzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD;;;;GAIG;AACH,MAAM,OAAO,2BACZ,SAAQ,UAAU;IADnB;;QAiBkB,yBAAoB,GAAG,yBAAyB,CAAC;IA0BnE,CAAC;IA9BO,MAAM,CAAC,UAAU;QACvB,OAAO,2BAA2B,CAAC,OAAO,CAAC;IAC5C,CAAC;IAKD,IAAY,iBAAiB;QAC5B,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS,EAAE;YAC1C,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;SACpE;QAED,OAAO,IAAI,CAAC,kBAAkB,CAAC;IAChC,CAAC;IAED,IAAW,uBAAuB;QACjC,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAC/B,CAAC;IAES,KAAK,CAAC,qBAAqB;QACpC,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACrE,CAAC;IAES,KAAK,CAAC,cAAc;QAC7B,MAAM,kBAAkB;QACvB,oEAAoE;QACpE,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAmC,IAAI,CAAC,oBAAoB,CAAE,CAAC,GAAG,EAAE,CAAC;QACzF,IAAI,CAAC,kBAAkB,GAAG,IAAI,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IACrE,CAAC;;AAtCuB,mCAAO,GAC9B,IAAI,iBAAiB,CACpB,iCAAiC,EACjC,2BAA2B,EAC3B,CAAC,kBAAkB,CAAC,UAAU,EAAE,CAAC,EACjC,EAAE,EACF,SAAS,CACT,AAP6B,CAO5B","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { DataObject, DataObjectFactory } from \"@fluidframework/aqueduct\";\nimport { IFluidHandle } from \"@fluidframework/core-interfaces\";\nimport { SharedSummaryBlock } from \"@fluidframework/shared-summary-block\";\nimport { LastEditedTracker } from \"./lastEditedTracker\";\nimport { IProvideFluidLastEditedTracker } from \"./interfaces\";\n\n/**\n * LastEditedTrackerDataObject creates a LastEditedTracker that keeps track of the latest edits to the document.\n *\n * @public\n */\nexport class LastEditedTrackerDataObject\n\textends DataObject\n\timplements IProvideFluidLastEditedTracker\n{\n\tprivate static readonly factory: DataObjectFactory<LastEditedTrackerDataObject> =\n\t\tnew DataObjectFactory(\n\t\t\t\"@fluid-experimental/last-edited\",\n\t\t\tLastEditedTrackerDataObject,\n\t\t\t[SharedSummaryBlock.getFactory()],\n\t\t\t{},\n\t\t\tundefined,\n\t\t);\n\n\tpublic static getFactory(): DataObjectFactory<LastEditedTrackerDataObject> {\n\t\treturn LastEditedTrackerDataObject.factory;\n\t}\n\n\tprivate readonly sharedSummaryBlockId = \"shared-summary-block-id\";\n\tprivate _lastEditedTracker: LastEditedTracker | undefined;\n\n\tprivate get lastEditedTracker(): LastEditedTracker {\n\t\tif (this._lastEditedTracker === undefined) {\n\t\t\tthrow new Error(\"Last Edited tracker was not initialized properly\");\n\t\t}\n\n\t\treturn this._lastEditedTracker;\n\t}\n\n\tpublic get IFluidLastEditedTracker(): LastEditedTracker {\n\t\treturn this.lastEditedTracker;\n\t}\n\n\tprotected async initializingFirstTime(): Promise<void> {\n\t\tconst sharedSummaryBlock = SharedSummaryBlock.create(this.runtime);\n\t\tthis.root.set(this.sharedSummaryBlockId, sharedSummaryBlock.handle);\n\t}\n\n\tprotected async hasInitialized(): Promise<void> {\n\t\tconst sharedSummaryBlock =\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tawait this.root.get<IFluidHandle<SharedSummaryBlock>>(this.sharedSummaryBlockId)!.get();\n\t\tthis._lastEditedTracker = new LastEditedTracker(sharedSummaryBlock);\n\t}\n}\n"]}
package/lib/setup.d.ts CHANGED
@@ -19,6 +19,8 @@ import { IFluidLastEditedTracker } from "./interfaces";
19
19
  * @param lastEditedTracker - The last edited tracker.
20
20
  * @param runtime - The container runtime whose messages are to be tracked.
21
21
  * @param shouldDiscardMessageFn - Function that tells if a message should not be considered in computing last edited.
22
+ *
23
+ * @public
22
24
  */
23
25
  export declare function setupLastEditedTrackerForContainer(lastEditedTracker: IFluidLastEditedTracker, runtime: IContainerRuntime, shouldDiscardMessageFn?: (message: ISequencedDocumentMessage) => boolean): void;
24
26
  //# sourceMappingURL=setup.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,yBAAyB,EAAkB,MAAM,sCAAsC,CAAC;AAEjG,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAoB,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAoCzE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kCAAkC,CACjD,iBAAiB,EAAE,uBAAuB,EAC1C,OAAO,EAAE,iBAAiB,EAC1B,sBAAsB,GAAE,CACvB,OAAO,EAAE,yBAAyB,KAC9B,OAAqC,GACxC,IAAI,CAkBN"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,yBAAyB,EAAkB,MAAM,sCAAsC,CAAC;AAEjG,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAoB,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAoCzE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kCAAkC,CACjD,iBAAiB,EAAE,uBAAuB,EAC1C,OAAO,EAAE,iBAAiB,EAC1B,sBAAsB,GAAE,CACvB,OAAO,EAAE,yBAAyB,KAC9B,OAAqC,GACxC,IAAI,CAkBN"}
package/lib/setup.js CHANGED
@@ -45,6 +45,8 @@ function getLastEditDetailsFromMessage(message, quorum) {
45
45
  * @param lastEditedTracker - The last edited tracker.
46
46
  * @param runtime - The container runtime whose messages are to be tracked.
47
47
  * @param shouldDiscardMessageFn - Function that tells if a message should not be considered in computing last edited.
48
+ *
49
+ * @public
48
50
  */
49
51
  export function setupLastEditedTrackerForContainer(lastEditedTracker, runtime, shouldDiscardMessageFn = shouldDiscardMessageDefault) {
50
52
  // Register an op listener on the runtime. If the lastEditedTracker has loaded,
package/lib/setup.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAIzE;;;;;;GAMG;AACH,MAAM,2BAA2B,GAAG,CAAC,OAAkC,EAAW,EAAE,CACnF,OAAO,CAAC,IAAI,KAAK,oBAAoB,CAAC,MAAM;IAC5C,OAAO,CAAC,IAAI,KAAK,oBAAoB,CAAC,gBAAgB;IACtD,OAAO,CAAC,IAAI,KAAK,oBAAoB,CAAC,KAAK,CAAC;AAE7C;;;GAGG;AACH,SAAS,6BAA6B,CACrC,OAAkC,EAClC,MAAsB;IAEtB,+FAA+F;IAC/F,4EAA4E;IAC5E,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,QAAkB,CAAC,CAAC;IACrE,MAAM,IAAI,GAAG,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC;IAC1C,IAAI,IAAI,KAAK,SAAS,EAAE;QACvB,MAAM,eAAe,GAAqB;YACzC,IAAI;YACJ,SAAS,EAAE,OAAO,CAAC,SAAS;SAC5B,CAAC;QACF,OAAO,eAAe,CAAC;KACvB;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,kCAAkC,CACjD,iBAA0C,EAC1C,OAA0B,EAC1B,yBAEe,2BAA2B;IAE1C,+EAA+E;IAC/E,+CAA+C;IAC/C,8GAA8G;IAC9G,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,OAAkC,EAAE,cAAwB,EAAE,EAAE;QACjF,6EAA6E;QAC7E,IAAI,cAAc,KAAK,KAAK,IAAI,sBAAsB,CAAC,OAAO,CAAC,EAAE;YAChE,OAAO;SACP;QAED,6EAA6E;QAC7E,MAAM,eAAe,GAAG,6BAA6B,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QACpF,IAAI,eAAe,KAAK,SAAS,EAAE;YAClC,OAAO;SACP;QAED,iBAAiB,CAAC,qBAAqB,CAAC,eAAe,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACJ,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ISequencedDocumentMessage, IQuorumClients } from \"@fluidframework/protocol-definitions\";\nimport { ContainerMessageType } from \"@fluidframework/container-runtime\";\nimport { IContainerRuntime } from \"@fluidframework/container-runtime-definitions\";\nimport { ILastEditDetails, IFluidLastEditedTracker } from \"./interfaces\";\n\n/**\n * Default implementation of {@link setupLastEditedTrackerForContainer}'s `shouldDiscardMessageFn` parameter,\n * which tells that all messages other than {@link @fluidframework/container-runtime#ContainerMessageType.Alias},\n * {@link @fluidframework/container-runtime#ContainerMessageType.Attach}, and\n * {@link @fluidframework/container-runtime#ContainerMessageType.FluidDataStoreOp} type messages should be\n * discarded.\n */\nconst shouldDiscardMessageDefault = (message: ISequencedDocumentMessage): boolean =>\n\tmessage.type !== ContainerMessageType.Attach &&\n\tmessage.type !== ContainerMessageType.FluidDataStoreOp &&\n\tmessage.type !== ContainerMessageType.Alias;\n\n/**\n * Extracts the user information and timestamp from a message. Returns undefined if the user information for the\n * client who sent the message doesn't exist in the quorum.\n */\nfunction getLastEditDetailsFromMessage(\n\tmessage: ISequencedDocumentMessage,\n\tquorum: IQuorumClients,\n): ILastEditDetails | undefined {\n\t// TODO: Verify whether this should be able to handle server-generated ops (with null clientId)\n\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n\tconst sequencedClient = quorum.getMember(message.clientId as string);\n\tconst user = sequencedClient?.client.user;\n\tif (user !== undefined) {\n\t\tconst lastEditDetails: ILastEditDetails = {\n\t\t\tuser,\n\t\t\ttimestamp: message.timestamp,\n\t\t};\n\t\treturn lastEditDetails;\n\t}\n\treturn undefined;\n}\n\n/**\n * Helper function to set up a data object that provides IFluidLastEditedTracker to track last edited in a Container.\n *\n * It does the following:\n *\n * - Registers an \"op\" listener on the runtime. On each message, it calls the shouldDiscardMessageFn to check\n * if the message should be discarded. It also discards all scheduler message. If a message is not discarded,\n * it passes the last edited information from the message to the last edited tracker.\n *\n * - The last edited information from the last message received before the lastEditedTracker is\n * loaded is stored and passed to the tracker once it loads.\n * @param lastEditedTracker - The last edited tracker.\n * @param runtime - The container runtime whose messages are to be tracked.\n * @param shouldDiscardMessageFn - Function that tells if a message should not be considered in computing last edited.\n */\nexport function setupLastEditedTrackerForContainer(\n\tlastEditedTracker: IFluidLastEditedTracker,\n\truntime: IContainerRuntime,\n\tshouldDiscardMessageFn: (\n\t\tmessage: ISequencedDocumentMessage,\n\t) => boolean = shouldDiscardMessageDefault,\n): void {\n\t// Register an op listener on the runtime. If the lastEditedTracker has loaded,\n\t// it passes the last edited information to its\n\t// last edited tracker. If the lastEditedTracker hasn't loaded, store the last edited information temporarily.\n\truntime.on(\"op\", (message: ISequencedDocumentMessage, runtimeMessage?: boolean) => {\n\t\t// If this message should be discarded as per shouldDiscardMessageFn, return.\n\t\tif (runtimeMessage === false || shouldDiscardMessageFn(message)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Get the last edited details from the message. If it doesn't exist, return.\n\t\tconst lastEditDetails = getLastEditDetailsFromMessage(message, runtime.getQuorum());\n\t\tif (lastEditDetails === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tlastEditedTracker.updateLastEditDetails(lastEditDetails);\n\t});\n}\n"]}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAIzE;;;;;;GAMG;AACH,MAAM,2BAA2B,GAAG,CAAC,OAAkC,EAAW,EAAE,CACnF,OAAO,CAAC,IAAI,KAAK,oBAAoB,CAAC,MAAM;IAC5C,OAAO,CAAC,IAAI,KAAK,oBAAoB,CAAC,gBAAgB;IACtD,OAAO,CAAC,IAAI,KAAK,oBAAoB,CAAC,KAAK,CAAC;AAE7C;;;GAGG;AACH,SAAS,6BAA6B,CACrC,OAAkC,EAClC,MAAsB;IAEtB,+FAA+F;IAC/F,4EAA4E;IAC5E,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,QAAkB,CAAC,CAAC;IACrE,MAAM,IAAI,GAAG,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC;IAC1C,IAAI,IAAI,KAAK,SAAS,EAAE;QACvB,MAAM,eAAe,GAAqB;YACzC,IAAI;YACJ,SAAS,EAAE,OAAO,CAAC,SAAS;SAC5B,CAAC;QACF,OAAO,eAAe,CAAC;KACvB;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,kCAAkC,CACjD,iBAA0C,EAC1C,OAA0B,EAC1B,yBAEe,2BAA2B;IAE1C,+EAA+E;IAC/E,+CAA+C;IAC/C,8GAA8G;IAC9G,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,OAAkC,EAAE,cAAwB,EAAE,EAAE;QACjF,6EAA6E;QAC7E,IAAI,cAAc,KAAK,KAAK,IAAI,sBAAsB,CAAC,OAAO,CAAC,EAAE;YAChE,OAAO;SACP;QAED,6EAA6E;QAC7E,MAAM,eAAe,GAAG,6BAA6B,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QACpF,IAAI,eAAe,KAAK,SAAS,EAAE;YAClC,OAAO;SACP;QAED,iBAAiB,CAAC,qBAAqB,CAAC,eAAe,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACJ,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ISequencedDocumentMessage, IQuorumClients } from \"@fluidframework/protocol-definitions\";\nimport { ContainerMessageType } from \"@fluidframework/container-runtime\";\nimport { IContainerRuntime } from \"@fluidframework/container-runtime-definitions\";\nimport { ILastEditDetails, IFluidLastEditedTracker } from \"./interfaces\";\n\n/**\n * Default implementation of {@link setupLastEditedTrackerForContainer}'s `shouldDiscardMessageFn` parameter,\n * which tells that all messages other than {@link @fluidframework/container-runtime#ContainerMessageType.Alias},\n * {@link @fluidframework/container-runtime#ContainerMessageType.Attach}, and\n * {@link @fluidframework/container-runtime#ContainerMessageType.FluidDataStoreOp} type messages should be\n * discarded.\n */\nconst shouldDiscardMessageDefault = (message: ISequencedDocumentMessage): boolean =>\n\tmessage.type !== ContainerMessageType.Attach &&\n\tmessage.type !== ContainerMessageType.FluidDataStoreOp &&\n\tmessage.type !== ContainerMessageType.Alias;\n\n/**\n * Extracts the user information and timestamp from a message. Returns undefined if the user information for the\n * client who sent the message doesn't exist in the quorum.\n */\nfunction getLastEditDetailsFromMessage(\n\tmessage: ISequencedDocumentMessage,\n\tquorum: IQuorumClients,\n): ILastEditDetails | undefined {\n\t// TODO: Verify whether this should be able to handle server-generated ops (with null clientId)\n\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n\tconst sequencedClient = quorum.getMember(message.clientId as string);\n\tconst user = sequencedClient?.client.user;\n\tif (user !== undefined) {\n\t\tconst lastEditDetails: ILastEditDetails = {\n\t\t\tuser,\n\t\t\ttimestamp: message.timestamp,\n\t\t};\n\t\treturn lastEditDetails;\n\t}\n\treturn undefined;\n}\n\n/**\n * Helper function to set up a data object that provides IFluidLastEditedTracker to track last edited in a Container.\n *\n * It does the following:\n *\n * - Registers an \"op\" listener on the runtime. On each message, it calls the shouldDiscardMessageFn to check\n * if the message should be discarded. It also discards all scheduler message. If a message is not discarded,\n * it passes the last edited information from the message to the last edited tracker.\n *\n * - The last edited information from the last message received before the lastEditedTracker is\n * loaded is stored and passed to the tracker once it loads.\n * @param lastEditedTracker - The last edited tracker.\n * @param runtime - The container runtime whose messages are to be tracked.\n * @param shouldDiscardMessageFn - Function that tells if a message should not be considered in computing last edited.\n *\n * @public\n */\nexport function setupLastEditedTrackerForContainer(\n\tlastEditedTracker: IFluidLastEditedTracker,\n\truntime: IContainerRuntime,\n\tshouldDiscardMessageFn: (\n\t\tmessage: ISequencedDocumentMessage,\n\t) => boolean = shouldDiscardMessageDefault,\n): void {\n\t// Register an op listener on the runtime. If the lastEditedTracker has loaded,\n\t// it passes the last edited information to its\n\t// last edited tracker. If the lastEditedTracker hasn't loaded, store the last edited information temporarily.\n\truntime.on(\"op\", (message: ISequencedDocumentMessage, runtimeMessage?: boolean) => {\n\t\t// If this message should be discarded as per shouldDiscardMessageFn, return.\n\t\tif (runtimeMessage === false || shouldDiscardMessageFn(message)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Get the last edited details from the message. If it doesn't exist, return.\n\t\tconst lastEditDetails = getLastEditDetailsFromMessage(message, runtime.getQuorum());\n\t\tif (lastEditDetails === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tlastEditedTracker.updateLastEditDetails(lastEditDetails);\n\t});\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluid-experimental/last-edited",
3
- "version": "2.0.0-dev.6.4.0.192049",
3
+ "version": "2.0.0-dev.7.2.0.204906",
4
4
  "description": "Tracks the last edited information in the Container.",
5
5
  "homepage": "https://fluidframework.com",
6
6
  "repository": {
@@ -35,27 +35,26 @@
35
35
  "temp-directory": "nyc/.nyc_output"
36
36
  },
37
37
  "dependencies": {
38
- "@fluidframework/aqueduct": "2.0.0-dev.6.4.0.192049",
39
- "@fluidframework/container-runtime": "2.0.0-dev.6.4.0.192049",
40
- "@fluidframework/container-runtime-definitions": "2.0.0-dev.6.4.0.192049",
41
- "@fluidframework/core-interfaces": "2.0.0-dev.6.4.0.192049",
42
- "@fluidframework/protocol-definitions": "^1.1.0",
43
- "@fluidframework/runtime-utils": "2.0.0-dev.6.4.0.192049",
44
- "@fluidframework/shared-summary-block": "2.0.0-dev.6.4.0.192049"
38
+ "@fluidframework/aqueduct": "2.0.0-dev.7.2.0.204906",
39
+ "@fluidframework/container-runtime": "2.0.0-dev.7.2.0.204906",
40
+ "@fluidframework/container-runtime-definitions": "2.0.0-dev.7.2.0.204906",
41
+ "@fluidframework/core-interfaces": "2.0.0-dev.7.2.0.204906",
42
+ "@fluidframework/protocol-definitions": "^3.0.0",
43
+ "@fluidframework/runtime-utils": "2.0.0-dev.7.2.0.204906",
44
+ "@fluidframework/shared-summary-block": "2.0.0-dev.7.2.0.204906"
45
45
  },
46
46
  "devDependencies": {
47
- "@fluid-tools/build-cli": "^0.22.0",
48
- "@fluidframework/build-common": "^2.0.0",
49
- "@fluidframework/build-tools": "^0.22.0",
50
- "@fluidframework/eslint-config-fluid": "^2.1.0",
51
- "@fluidframework/mocha-test-setup": "2.0.0-dev.6.4.0.192049",
52
- "@microsoft/api-extractor": "^7.34.4",
47
+ "@fluid-tools/build-cli": "0.26.0-203096",
48
+ "@fluidframework/build-common": "^2.0.2",
49
+ "@fluidframework/build-tools": "0.26.0-203096",
50
+ "@fluidframework/eslint-config-fluid": "^3.0.0",
51
+ "@fluidframework/mocha-test-setup": "2.0.0-dev.7.2.0.204906",
52
+ "@microsoft/api-extractor": "^7.37.0",
53
53
  "@types/node": "^16.18.38",
54
- "copyfiles": "^2.4.1",
55
- "eslint": "~8.6.0",
56
- "prettier": "~2.6.2",
54
+ "eslint": "~8.50.0",
55
+ "prettier": "~3.0.3",
57
56
  "rimraf": "^4.4.0",
58
- "typescript": "~4.5.5"
57
+ "typescript": "~5.1.6"
59
58
  },
60
59
  "typeValidation": {
61
60
  "disabled": true,
@@ -65,9 +64,9 @@
65
64
  "build": "fluid-build . --task build",
66
65
  "build:compile": "fluid-build . --task compile",
67
66
  "build:compile:min": "npm run build:compile",
68
- "build:docs": "api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/",
67
+ "build:docs": "api-extractor run --local",
69
68
  "build:esnext": "tsc --project ./tsconfig.esnext.json",
70
- "ci:build:docs": "api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/",
69
+ "ci:build:docs": "api-extractor run",
71
70
  "clean": "rimraf --glob 'dist' 'lib' '*.tsbuildinfo' '*.build.log' '_api-extractor-temp'",
72
71
  "eslint": "eslint --format stylish src",
73
72
  "eslint:fix": "eslint --format stylish src --fix --fix-type problem,suggestion,layout",
package/src/interfaces.ts CHANGED
@@ -5,13 +5,22 @@
5
5
 
6
6
  import { IUser } from "@fluidframework/protocol-definitions";
7
7
 
8
+ /**
9
+ * @public
10
+ */
8
11
  export const IFluidLastEditedTracker: keyof IProvideFluidLastEditedTracker =
9
12
  "IFluidLastEditedTracker";
10
13
 
14
+ /**
15
+ * @public
16
+ */
11
17
  export interface IProvideFluidLastEditedTracker {
12
18
  readonly IFluidLastEditedTracker: IFluidLastEditedTracker;
13
19
  }
14
20
 
21
+ /**
22
+ * @public
23
+ */
15
24
  export interface IFluidLastEditedTracker extends IProvideFluidLastEditedTracker {
16
25
  /**
17
26
  * Returns the details of the last edit to the container.
@@ -24,6 +33,9 @@ export interface IFluidLastEditedTracker extends IProvideFluidLastEditedTracker
24
33
  updateLastEditDetails(lastEditDetails: ILastEditDetails): void;
25
34
  }
26
35
 
36
+ /**
37
+ * @public
38
+ */
27
39
  export interface ILastEditDetails {
28
40
  user: IUser;
29
41
  timestamp: number;
@@ -10,6 +10,8 @@ import { IFluidLastEditedTracker, ILastEditDetails } from "./interfaces";
10
10
  * Tracks the last edit details such as the last edited user details and the last edited timestamp. The last edited
11
11
  * details should be updated (via updateLastEditDetails) in response to a remote op since it uses shared summary block
12
12
  * as storage.
13
+ *
14
+ * @public
13
15
  */
14
16
  export class LastEditedTracker implements IFluidLastEditedTracker {
15
17
  private readonly lastEditedDetailsKey = "lastEditDetailsKey";
@@ -11,6 +11,8 @@ import { IProvideFluidLastEditedTracker } from "./interfaces";
11
11
 
12
12
  /**
13
13
  * LastEditedTrackerDataObject creates a LastEditedTracker that keeps track of the latest edits to the document.
14
+ *
15
+ * @public
14
16
  */
15
17
  export class LastEditedTrackerDataObject
16
18
  extends DataObject
package/src/setup.ts CHANGED
@@ -56,6 +56,8 @@ function getLastEditDetailsFromMessage(
56
56
  * @param lastEditedTracker - The last edited tracker.
57
57
  * @param runtime - The container runtime whose messages are to be tracked.
58
58
  * @param shouldDiscardMessageFn - Function that tells if a message should not be considered in computing last edited.
59
+ *
60
+ * @public
59
61
  */
60
62
  export function setupLastEditedTrackerForContainer(
61
63
  lastEditedTracker: IFluidLastEditedTracker,