@fluid-experimental/attributor 3.3.0 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/dist/encoders.d.ts +0 -6
- package/dist/encoders.d.ts.map +1 -1
- package/dist/encoders.js +0 -6
- package/dist/encoders.js.map +1 -1
- package/lib/encoders.d.ts +0 -6
- package/lib/encoders.d.ts.map +1 -1
- package/lib/encoders.js +0 -6
- package/lib/encoders.js.map +1 -1
- package/package.json +17 -17
- package/src/encoders.ts +0 -6
package/CHANGELOG.md
CHANGED
package/dist/encoders.d.ts
CHANGED
|
@@ -22,13 +22,7 @@ export declare class AttributorSerializer implements IAttributorSerializer {
|
|
|
22
22
|
private readonly makeAttributor;
|
|
23
23
|
private readonly timestampEncoder;
|
|
24
24
|
constructor(makeAttributor: (entries: Iterable<[number, AttributionInfo]>) => IAttributor, timestampEncoder: TimestampEncoder);
|
|
25
|
-
/**
|
|
26
|
-
* {@inheritDoc Encoder.encode}
|
|
27
|
-
*/
|
|
28
25
|
encode(attributor: IAttributor): SerializedAttributor;
|
|
29
|
-
/**
|
|
30
|
-
* {@inheritDoc Encoder.decode}
|
|
31
|
-
*/
|
|
32
26
|
decode(encoded: SerializedAttributor): IAttributor;
|
|
33
27
|
}
|
|
34
28
|
/**
|
package/dist/encoders.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encoders.d.ts","sourceRoot":"","sources":["../src/encoders.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAEpF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,KAAK,gBAAgB,EAAyB,MAAM,qBAAqB,CAAC;AAEnF,MAAM,WAAW,OAAO,CAAC,QAAQ,EAAE,QAAQ;IAC1C,MAAM,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACpC,MAAM,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,CAAC;CACpC;AAID,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAE3D,eAAO,MAAM,YAAY,EAAE,gBAwB1B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;AAE/E,MAAM,WAAW,oBAAoB;IACpC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAA+D;IAC1F,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,eAAe,EAAE,gBAAgB,EAAE,CAAC;CACpC;AAED,qBAAa,oBAAqB,YAAW,qBAAqB;IAEhE,OAAO,CAAC,QAAQ,CAAC,cAAc;IAG/B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAHhB,cAAc,EAAE,CAChC,OAAO,EAAE,QAAQ,CAAC,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,KACxC,WAAW,EACC,gBAAgB,EAAE,gBAAgB;
|
|
1
|
+
{"version":3,"file":"encoders.d.ts","sourceRoot":"","sources":["../src/encoders.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAEpF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,KAAK,gBAAgB,EAAyB,MAAM,qBAAqB,CAAC;AAEnF,MAAM,WAAW,OAAO,CAAC,QAAQ,EAAE,QAAQ;IAC1C,MAAM,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACpC,MAAM,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,CAAC;CACpC;AAID,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAE3D,eAAO,MAAM,YAAY,EAAE,gBAwB1B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;AAE/E,MAAM,WAAW,oBAAoB;IACpC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAA+D;IAC1F,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,eAAe,EAAE,gBAAgB,EAAE,CAAC;CACpC;AAED,qBAAa,oBAAqB,YAAW,qBAAqB;IAEhE,OAAO,CAAC,QAAQ,CAAC,cAAc;IAG/B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAHhB,cAAc,EAAE,CAChC,OAAO,EAAE,QAAQ,CAAC,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,KACxC,WAAW,EACC,gBAAgB,EAAE,gBAAgB;IAG7C,MAAM,CAAC,UAAU,EAAE,WAAW,GAAG,oBAAoB;IAsBrD,MAAM,CAAC,OAAO,EAAE,oBAAoB,GAAG,WAAW;CAiBzD;AAED;;GAEG;AACH,eAAO,MAAM,KAAK,GAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAC/B,GAAG,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,EAClB,GAAG,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,KAChB,OAAO,CAAC,EAAE,EAAE,EAAE,CAGf,CAAC"}
|
package/dist/encoders.js
CHANGED
|
@@ -35,9 +35,6 @@ class AttributorSerializer {
|
|
|
35
35
|
this.makeAttributor = makeAttributor;
|
|
36
36
|
this.timestampEncoder = timestampEncoder;
|
|
37
37
|
}
|
|
38
|
-
/**
|
|
39
|
-
* {@inheritDoc Encoder.encode}
|
|
40
|
-
*/
|
|
41
38
|
encode(attributor) {
|
|
42
39
|
const interner = new stringInterner_js_1.MutableStringInterner();
|
|
43
40
|
const seqs = [];
|
|
@@ -57,9 +54,6 @@ class AttributorSerializer {
|
|
|
57
54
|
};
|
|
58
55
|
return serialized;
|
|
59
56
|
}
|
|
60
|
-
/**
|
|
61
|
-
* {@inheritDoc Encoder.decode}
|
|
62
|
-
*/
|
|
63
57
|
decode(encoded) {
|
|
64
58
|
const interner = new stringInterner_js_1.MutableStringInterner(encoded.interner);
|
|
65
59
|
const { seqs, timestamps: encodedTimestamps, attributionRefs } = encoded;
|
package/dist/encoders.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encoders.js","sourceRoot":"","sources":["../src/encoders.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,kEAA6D;AAK7D,2DAAmF;AAWtE,QAAA,YAAY,GAAqB;IAC7C,MAAM,EAAE,CAAC,UAAoB,EAAE,EAAE;QAChC,MAAM,eAAe,GAAa,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5E,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;YACnD,eAAe,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;YACtC,IAAI,GAAG,SAAS,CAAC;QAClB,CAAC;QAED,OAAO,eAAe,CAAC;IACxB,CAAC;IACD,MAAM,EAAE,CAAC,OAAgB,EAAE,EAAE;QAC5B,IAAA,iBAAM,EACL,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EACtB,KAAK,CAAC,sDAAsD,CAC5D,CAAC;QACF,MAAM,UAAU,GAAa,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACpE,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,aAAa,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;YAC5B,UAAU,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC;QAC/B,CAAC;QACD,OAAO,UAAU,CAAC;IACnB,CAAC;CACD,CAAC;AAWF,MAAa,oBAAoB;IAEd;IAGA;IAJlB,YACkB,cAED,EACC,gBAAkC;QAHlC,mBAAc,GAAd,cAAc,CAEf;QACC,qBAAgB,GAAhB,gBAAgB,CAAkB;IACjD,CAAC;
|
|
1
|
+
{"version":3,"file":"encoders.js","sourceRoot":"","sources":["../src/encoders.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport type { IUser } from \"@fluidframework/driver-definitions\";\nimport type { AttributionInfo } from \"@fluidframework/runtime-definitions/internal\";\n\nimport type { IAttributor } from \"./attributor.js\";\nimport { type InternedStringId, MutableStringInterner } from \"./stringInterner.js\";\n\nexport interface Encoder<TDecoded, TEncoded> {\n\tencode(decoded: TDecoded): TEncoded;\n\tdecode(encoded: TEncoded): TDecoded;\n}\n\n// Note: the encoded format doesn't matter as long as it's serializable;\n// these types could be weakened.\nexport type TimestampEncoder = Encoder<number[], number[]>;\n\nexport const deltaEncoder: TimestampEncoder = {\n\tencode: (timestamps: number[]) => {\n\t\tconst deltaTimestamps: number[] = Array.from({ length: timestamps.length });\n\t\tlet prev = 0;\n\t\tfor (const [i, timestamp] of timestamps.entries()) {\n\t\t\tdeltaTimestamps[i] = timestamp - prev;\n\t\t\tprev = timestamp;\n\t\t}\n\n\t\treturn deltaTimestamps;\n\t},\n\tdecode: (encoded: unknown) => {\n\t\tassert(\n\t\t\tArray.isArray(encoded),\n\t\t\t0x4b0 /* Encoded timestamps should be an array of numbers */,\n\t\t);\n\t\tconst timestamps: number[] = Array.from({ length: encoded.length });\n\t\tlet cumulativeSum = 0;\n\t\tfor (let i = 0; i < encoded.length; i++) {\n\t\t\tcumulativeSum += encoded[i];\n\t\t\ttimestamps[i] = cumulativeSum;\n\t\t}\n\t\treturn timestamps;\n\t},\n};\n\nexport type IAttributorSerializer = Encoder<IAttributor, SerializedAttributor>;\n\nexport interface SerializedAttributor {\n\tinterner: readonly string[] /* result of calling getSerializable() on a StringInterner */;\n\tseqs: number[];\n\ttimestamps: number[];\n\tattributionRefs: InternedStringId[];\n}\n\nexport class AttributorSerializer implements IAttributorSerializer {\n\tpublic constructor(\n\t\tprivate readonly makeAttributor: (\n\t\t\tentries: Iterable<[number, AttributionInfo]>,\n\t\t) => IAttributor,\n\t\tprivate readonly timestampEncoder: TimestampEncoder,\n\t) {}\n\n\tpublic encode(attributor: IAttributor): SerializedAttributor {\n\t\tconst interner = new MutableStringInterner();\n\t\tconst seqs: number[] = [];\n\t\tconst timestamps: number[] = [];\n\t\tconst attributionRefs: InternedStringId[] = [];\n\t\tfor (const [seq, { user, timestamp }] of attributor.entries()) {\n\t\t\tseqs.push(seq);\n\t\t\ttimestamps.push(timestamp);\n\t\t\tconst ref = interner.getOrCreateInternedId(JSON.stringify(user));\n\t\t\tattributionRefs.push(ref);\n\t\t}\n\n\t\tconst serialized: SerializedAttributor = {\n\t\t\tinterner: interner.getSerializable(),\n\t\t\tseqs,\n\t\t\ttimestamps: this.timestampEncoder.encode(timestamps),\n\t\t\tattributionRefs,\n\t\t};\n\n\t\treturn serialized;\n\t}\n\n\tpublic decode(encoded: SerializedAttributor): IAttributor {\n\t\tconst interner = new MutableStringInterner(encoded.interner);\n\t\tconst { seqs, timestamps: encodedTimestamps, attributionRefs } = encoded;\n\t\tconst timestamps = this.timestampEncoder.decode(encodedTimestamps);\n\t\tassert(\n\t\t\tseqs.length === timestamps.length && timestamps.length === attributionRefs.length,\n\t\t\t0x4b1 /* serialized attribution columns should have the same length */,\n\t\t);\n\t\tconst entries: [number, AttributionInfo][] = Array.from({ length: seqs.length });\n\t\tfor (const [i, key] of seqs.entries()) {\n\t\t\tconst timestamp = timestamps[i];\n\t\t\tconst ref = attributionRefs[i];\n\t\t\tconst user = JSON.parse(interner.getString(ref)) as IUser;\n\t\t\tentries[i] = [key, { user, timestamp }];\n\t\t}\n\t\treturn this.makeAttributor(entries);\n\t}\n}\n\n/**\n * Creates an encoder which composes `a` and `b`.\n */\nexport const chain = <T1, T2, T3>(\n\ta: Encoder<T1, T2>,\n\tb: Encoder<T2, T3>,\n): Encoder<T1, T3> => ({\n\tencode: (content) => b.encode(a.encode(content)),\n\tdecode: (content) => a.decode(b.decode(content)),\n});\n"]}
|
package/lib/encoders.d.ts
CHANGED
|
@@ -22,13 +22,7 @@ export declare class AttributorSerializer implements IAttributorSerializer {
|
|
|
22
22
|
private readonly makeAttributor;
|
|
23
23
|
private readonly timestampEncoder;
|
|
24
24
|
constructor(makeAttributor: (entries: Iterable<[number, AttributionInfo]>) => IAttributor, timestampEncoder: TimestampEncoder);
|
|
25
|
-
/**
|
|
26
|
-
* {@inheritDoc Encoder.encode}
|
|
27
|
-
*/
|
|
28
25
|
encode(attributor: IAttributor): SerializedAttributor;
|
|
29
|
-
/**
|
|
30
|
-
* {@inheritDoc Encoder.decode}
|
|
31
|
-
*/
|
|
32
26
|
decode(encoded: SerializedAttributor): IAttributor;
|
|
33
27
|
}
|
|
34
28
|
/**
|
package/lib/encoders.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encoders.d.ts","sourceRoot":"","sources":["../src/encoders.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAEpF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,KAAK,gBAAgB,EAAyB,MAAM,qBAAqB,CAAC;AAEnF,MAAM,WAAW,OAAO,CAAC,QAAQ,EAAE,QAAQ;IAC1C,MAAM,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACpC,MAAM,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,CAAC;CACpC;AAID,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAE3D,eAAO,MAAM,YAAY,EAAE,gBAwB1B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;AAE/E,MAAM,WAAW,oBAAoB;IACpC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAA+D;IAC1F,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,eAAe,EAAE,gBAAgB,EAAE,CAAC;CACpC;AAED,qBAAa,oBAAqB,YAAW,qBAAqB;IAEhE,OAAO,CAAC,QAAQ,CAAC,cAAc;IAG/B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAHhB,cAAc,EAAE,CAChC,OAAO,EAAE,QAAQ,CAAC,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,KACxC,WAAW,EACC,gBAAgB,EAAE,gBAAgB;
|
|
1
|
+
{"version":3,"file":"encoders.d.ts","sourceRoot":"","sources":["../src/encoders.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAEpF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,KAAK,gBAAgB,EAAyB,MAAM,qBAAqB,CAAC;AAEnF,MAAM,WAAW,OAAO,CAAC,QAAQ,EAAE,QAAQ;IAC1C,MAAM,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACpC,MAAM,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,CAAC;CACpC;AAID,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAE3D,eAAO,MAAM,YAAY,EAAE,gBAwB1B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;AAE/E,MAAM,WAAW,oBAAoB;IACpC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAA+D;IAC1F,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,eAAe,EAAE,gBAAgB,EAAE,CAAC;CACpC;AAED,qBAAa,oBAAqB,YAAW,qBAAqB;IAEhE,OAAO,CAAC,QAAQ,CAAC,cAAc;IAG/B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAHhB,cAAc,EAAE,CAChC,OAAO,EAAE,QAAQ,CAAC,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,KACxC,WAAW,EACC,gBAAgB,EAAE,gBAAgB;IAG7C,MAAM,CAAC,UAAU,EAAE,WAAW,GAAG,oBAAoB;IAsBrD,MAAM,CAAC,OAAO,EAAE,oBAAoB,GAAG,WAAW;CAiBzD;AAED;;GAEG;AACH,eAAO,MAAM,KAAK,GAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAC/B,GAAG,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,EAClB,GAAG,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,KAChB,OAAO,CAAC,EAAE,EAAE,EAAE,CAGf,CAAC"}
|
package/lib/encoders.js
CHANGED
|
@@ -32,9 +32,6 @@ export class AttributorSerializer {
|
|
|
32
32
|
this.makeAttributor = makeAttributor;
|
|
33
33
|
this.timestampEncoder = timestampEncoder;
|
|
34
34
|
}
|
|
35
|
-
/**
|
|
36
|
-
* {@inheritDoc Encoder.encode}
|
|
37
|
-
*/
|
|
38
35
|
encode(attributor) {
|
|
39
36
|
const interner = new MutableStringInterner();
|
|
40
37
|
const seqs = [];
|
|
@@ -54,9 +51,6 @@ export class AttributorSerializer {
|
|
|
54
51
|
};
|
|
55
52
|
return serialized;
|
|
56
53
|
}
|
|
57
|
-
/**
|
|
58
|
-
* {@inheritDoc Encoder.decode}
|
|
59
|
-
*/
|
|
60
54
|
decode(encoded) {
|
|
61
55
|
const interner = new MutableStringInterner(encoded.interner);
|
|
62
56
|
const { seqs, timestamps: encodedTimestamps, attributionRefs } = encoded;
|
package/lib/encoders.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encoders.js","sourceRoot":"","sources":["../src/encoders.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAK7D,OAAO,EAAyB,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAWnF,MAAM,CAAC,MAAM,YAAY,GAAqB;IAC7C,MAAM,EAAE,CAAC,UAAoB,EAAE,EAAE;QAChC,MAAM,eAAe,GAAa,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5E,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;YACnD,eAAe,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;YACtC,IAAI,GAAG,SAAS,CAAC;QAClB,CAAC;QAED,OAAO,eAAe,CAAC;IACxB,CAAC;IACD,MAAM,EAAE,CAAC,OAAgB,EAAE,EAAE;QAC5B,MAAM,CACL,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EACtB,KAAK,CAAC,sDAAsD,CAC5D,CAAC;QACF,MAAM,UAAU,GAAa,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACpE,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,aAAa,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;YAC5B,UAAU,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC;QAC/B,CAAC;QACD,OAAO,UAAU,CAAC;IACnB,CAAC;CACD,CAAC;AAWF,MAAM,OAAO,oBAAoB;IAEd;IAGA;IAJlB,YACkB,cAED,EACC,gBAAkC;QAHlC,mBAAc,GAAd,cAAc,CAEf;QACC,qBAAgB,GAAhB,gBAAgB,CAAkB;IACjD,CAAC;
|
|
1
|
+
{"version":3,"file":"encoders.js","sourceRoot":"","sources":["../src/encoders.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport type { IUser } from \"@fluidframework/driver-definitions\";\nimport type { AttributionInfo } from \"@fluidframework/runtime-definitions/internal\";\n\nimport type { IAttributor } from \"./attributor.js\";\nimport { type InternedStringId, MutableStringInterner } from \"./stringInterner.js\";\n\nexport interface Encoder<TDecoded, TEncoded> {\n\tencode(decoded: TDecoded): TEncoded;\n\tdecode(encoded: TEncoded): TDecoded;\n}\n\n// Note: the encoded format doesn't matter as long as it's serializable;\n// these types could be weakened.\nexport type TimestampEncoder = Encoder<number[], number[]>;\n\nexport const deltaEncoder: TimestampEncoder = {\n\tencode: (timestamps: number[]) => {\n\t\tconst deltaTimestamps: number[] = Array.from({ length: timestamps.length });\n\t\tlet prev = 0;\n\t\tfor (const [i, timestamp] of timestamps.entries()) {\n\t\t\tdeltaTimestamps[i] = timestamp - prev;\n\t\t\tprev = timestamp;\n\t\t}\n\n\t\treturn deltaTimestamps;\n\t},\n\tdecode: (encoded: unknown) => {\n\t\tassert(\n\t\t\tArray.isArray(encoded),\n\t\t\t0x4b0 /* Encoded timestamps should be an array of numbers */,\n\t\t);\n\t\tconst timestamps: number[] = Array.from({ length: encoded.length });\n\t\tlet cumulativeSum = 0;\n\t\tfor (let i = 0; i < encoded.length; i++) {\n\t\t\tcumulativeSum += encoded[i];\n\t\t\ttimestamps[i] = cumulativeSum;\n\t\t}\n\t\treturn timestamps;\n\t},\n};\n\nexport type IAttributorSerializer = Encoder<IAttributor, SerializedAttributor>;\n\nexport interface SerializedAttributor {\n\tinterner: readonly string[] /* result of calling getSerializable() on a StringInterner */;\n\tseqs: number[];\n\ttimestamps: number[];\n\tattributionRefs: InternedStringId[];\n}\n\nexport class AttributorSerializer implements IAttributorSerializer {\n\tpublic constructor(\n\t\tprivate readonly makeAttributor: (\n\t\t\tentries: Iterable<[number, AttributionInfo]>,\n\t\t) => IAttributor,\n\t\tprivate readonly timestampEncoder: TimestampEncoder,\n\t) {}\n\n\tpublic encode(attributor: IAttributor): SerializedAttributor {\n\t\tconst interner = new MutableStringInterner();\n\t\tconst seqs: number[] = [];\n\t\tconst timestamps: number[] = [];\n\t\tconst attributionRefs: InternedStringId[] = [];\n\t\tfor (const [seq, { user, timestamp }] of attributor.entries()) {\n\t\t\tseqs.push(seq);\n\t\t\ttimestamps.push(timestamp);\n\t\t\tconst ref = interner.getOrCreateInternedId(JSON.stringify(user));\n\t\t\tattributionRefs.push(ref);\n\t\t}\n\n\t\tconst serialized: SerializedAttributor = {\n\t\t\tinterner: interner.getSerializable(),\n\t\t\tseqs,\n\t\t\ttimestamps: this.timestampEncoder.encode(timestamps),\n\t\t\tattributionRefs,\n\t\t};\n\n\t\treturn serialized;\n\t}\n\n\tpublic decode(encoded: SerializedAttributor): IAttributor {\n\t\tconst interner = new MutableStringInterner(encoded.interner);\n\t\tconst { seqs, timestamps: encodedTimestamps, attributionRefs } = encoded;\n\t\tconst timestamps = this.timestampEncoder.decode(encodedTimestamps);\n\t\tassert(\n\t\t\tseqs.length === timestamps.length && timestamps.length === attributionRefs.length,\n\t\t\t0x4b1 /* serialized attribution columns should have the same length */,\n\t\t);\n\t\tconst entries: [number, AttributionInfo][] = Array.from({ length: seqs.length });\n\t\tfor (const [i, key] of seqs.entries()) {\n\t\t\tconst timestamp = timestamps[i];\n\t\t\tconst ref = attributionRefs[i];\n\t\t\tconst user = JSON.parse(interner.getString(ref)) as IUser;\n\t\t\tentries[i] = [key, { user, timestamp }];\n\t\t}\n\t\treturn this.makeAttributor(entries);\n\t}\n}\n\n/**\n * Creates an encoder which composes `a` and `b`.\n */\nexport const chain = <T1, T2, T3>(\n\ta: Encoder<T1, T2>,\n\tb: Encoder<T2, T3>,\n): Encoder<T1, T3> => ({\n\tencode: (content) => b.encode(a.encode(content)),\n\tdecode: (content) => a.decode(b.decode(content)),\n});\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fluid-experimental/attributor",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.5.0",
|
|
4
4
|
"description": "Operation attributor",
|
|
5
5
|
"homepage": "https://fluidframework.com",
|
|
6
6
|
"repository": {
|
|
@@ -41,31 +41,31 @@
|
|
|
41
41
|
"temp-directory": "nyc/.nyc_output"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@fluid-internal/client-utils": "~3.
|
|
45
|
-
"@fluidframework/container-definitions": "~3.
|
|
46
|
-
"@fluidframework/container-runtime": "~3.
|
|
47
|
-
"@fluidframework/core-interfaces": "~3.
|
|
48
|
-
"@fluidframework/core-utils": "~3.
|
|
49
|
-
"@fluidframework/datastore": "~3.
|
|
50
|
-
"@fluidframework/datastore-definitions": "~3.
|
|
51
|
-
"@fluidframework/driver-definitions": "~3.
|
|
52
|
-
"@fluidframework/runtime-definitions": "~3.
|
|
53
|
-
"@fluidframework/runtime-utils": "~3.
|
|
54
|
-
"@fluidframework/telemetry-utils": "~3.
|
|
44
|
+
"@fluid-internal/client-utils": "~3.5.0",
|
|
45
|
+
"@fluidframework/container-definitions": "~3.5.0",
|
|
46
|
+
"@fluidframework/container-runtime": "~3.5.0",
|
|
47
|
+
"@fluidframework/core-interfaces": "~3.5.0",
|
|
48
|
+
"@fluidframework/core-utils": "~3.5.0",
|
|
49
|
+
"@fluidframework/datastore": "~3.5.0",
|
|
50
|
+
"@fluidframework/datastore-definitions": "~3.5.0",
|
|
51
|
+
"@fluidframework/driver-definitions": "~3.5.0",
|
|
52
|
+
"@fluidframework/runtime-definitions": "~3.5.0",
|
|
53
|
+
"@fluidframework/runtime-utils": "~3.5.0",
|
|
54
|
+
"@fluidframework/telemetry-utils": "~3.5.0",
|
|
55
55
|
"lz4js": "^0.2.0"
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
58
|
"@arethetypeswrong/cli": "^0.18.5",
|
|
59
59
|
"@biomejs/biome": "~2.4.5",
|
|
60
|
-
"@fluid-internal/mocha-test-setup": "~3.
|
|
61
|
-
"@fluid-private/stochastic-test-utils": "~3.
|
|
60
|
+
"@fluid-internal/mocha-test-setup": "~3.5.0",
|
|
61
|
+
"@fluid-private/stochastic-test-utils": "~3.5.0",
|
|
62
62
|
"@fluid-tools/build-cli": "^0.67.0",
|
|
63
63
|
"@fluidframework/build-common": "^2.0.3",
|
|
64
64
|
"@fluidframework/build-tools": "^0.67.0",
|
|
65
65
|
"@fluidframework/eslint-config-fluid": "^14.0.0",
|
|
66
|
-
"@fluidframework/merge-tree": "~3.
|
|
67
|
-
"@fluidframework/sequence": "~3.
|
|
68
|
-
"@fluidframework/test-runtime-utils": "~3.
|
|
66
|
+
"@fluidframework/merge-tree": "~3.5.0",
|
|
67
|
+
"@fluidframework/sequence": "~3.5.0",
|
|
68
|
+
"@fluidframework/test-runtime-utils": "~3.5.0",
|
|
69
69
|
"@microsoft/api-extractor": "7.58.1",
|
|
70
70
|
"@types/mocha": "^10.0.10",
|
|
71
71
|
"@types/node": "~22.19.17",
|
package/src/encoders.ts
CHANGED
|
@@ -62,9 +62,6 @@ export class AttributorSerializer implements IAttributorSerializer {
|
|
|
62
62
|
private readonly timestampEncoder: TimestampEncoder,
|
|
63
63
|
) {}
|
|
64
64
|
|
|
65
|
-
/**
|
|
66
|
-
* {@inheritDoc Encoder.encode}
|
|
67
|
-
*/
|
|
68
65
|
public encode(attributor: IAttributor): SerializedAttributor {
|
|
69
66
|
const interner = new MutableStringInterner();
|
|
70
67
|
const seqs: number[] = [];
|
|
@@ -87,9 +84,6 @@ export class AttributorSerializer implements IAttributorSerializer {
|
|
|
87
84
|
return serialized;
|
|
88
85
|
}
|
|
89
86
|
|
|
90
|
-
/**
|
|
91
|
-
* {@inheritDoc Encoder.decode}
|
|
92
|
-
*/
|
|
93
87
|
public decode(encoded: SerializedAttributor): IAttributor {
|
|
94
88
|
const interner = new MutableStringInterner(encoded.interner);
|
|
95
89
|
const { seqs, timestamps: encodedTimestamps, attributionRefs } = encoded;
|