@dxos/timeframe 0.8.2-main.fbd8ed0 → 0.8.2-staging.4d6ad0f

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/timeframe.ts"],
4
- "sourcesContent": ["//\n// Copyright 2020 DXOS.org\n//\n\nimport { inspect } from 'node:util';\n\nimport { equalsSymbol, type Equatable } from '@dxos/debug';\nimport { type PublicKey } from '@dxos/keys';\n\ntype Entry = {\n key: PublicKey;\n seq: number;\n};\n\n/**\n * A vector clock that implements ordering over a set of feed messages.\n */\nexport class Timeframe implements Equatable {\n private readonly _frames = new Map<string, Entry>();\n\n constructor(frames: [PublicKey, number][] = []) {\n for (const [key, seq] of frames) {\n this.set(key, seq);\n }\n }\n\n toJSON() {\n return this.frames().reduce((frames: Record<string, number>, [key, seq]) => {\n frames[key.truncate()] = seq;\n return frames;\n }, {});\n }\n\n toString() {\n return `(${this.frames()\n .map(([key, seq]) => `${key.truncate()}[${seq}]`)\n .join(', ')})`;\n }\n\n equals(object: Timeframe) {\n return this.size() === object.size() && this.frames().every(([key, seq]) => object.get(key) === seq);\n }\n\n // TODO(burdon): Rename getFrame.\n get(key: PublicKey): number | undefined {\n return this._frames.get(key.toHex())?.seq;\n }\n\n // TODO(burdon): Rename setFrame.\n set(key: PublicKey, seq: number) {\n const hex = key.toHex();\n this._frames.set(hex, { key, seq });\n }\n\n // TODO(burdon): Change to getter.\n frames(): [PublicKey, number][] {\n return Array.from(this._frames.values()).map(({ key, seq }) => [key, seq]);\n }\n\n // TODO(burdon): Change to getter.\n size() {\n return this._frames.size;\n }\n\n // TODO(burdon): Change to getter (empty).\n isEmpty() {\n return this.size() === 0;\n }\n\n /**\n * Returns a new timeframe with specified keys removed.\n * @param keys\n */\n withoutKeys(keys: PublicKey[]): Timeframe {\n return new Timeframe(this.frames().filter(([frameKey]) => keys.every((key) => !key.equals(frameKey))));\n }\n\n map(fn: (frame: [key: PublicKey, seq: number]) => [PublicKey, number]): Timeframe {\n return new Timeframe(this.frames().map(fn));\n }\n\n /**\n * Returns a total amount of messages represented by this timeframe.\n */\n totalMessages(): number {\n return Array.from(this._frames.values()).reduce((result, { seq }) => result + seq + 1, 0);\n }\n\n /**\n * Returns a total amount of messages that are present in this timeframe but are missing in `base`.\n */\n newMessages(base: Timeframe) {\n return Array.from(this._frames.entries()).reduce(\n (result, [hex, { seq }]) => result + Math.max(seq - (base._frames.get(hex)?.seq ?? -1), 0),\n 0,\n );\n }\n\n /**\n * Used by NodeJS to get textual representation of this object in `console.log`.\n */\n [inspect.custom]() {\n return `Timeframe${this.toString()}`;\n }\n\n [equalsSymbol](other: any) {\n if (!(other instanceof Timeframe)) {\n return false;\n }\n\n return this.equals(other);\n }\n\n /**\n * Merges the values, updating the highest sequence numbers.\n * @param timeframes\n */\n static merge(...timeframes: Timeframe[]): Timeframe {\n const result = new Timeframe();\n for (const timeframe of timeframes) {\n for (const [hex, entry] of timeframe._frames) {\n const currentEntry = result._frames.get(hex);\n if (currentEntry === undefined || entry.seq > currentEntry.seq) {\n result._frames.set(hex, entry);\n }\n }\n }\n\n return result;\n }\n\n /**\n * Compares two timeframes and returns an array of frames from the first timeframe where the sequence number\n * is greater than the associated sequence number from the second timeframe.\n */\n static dependencies(tf1: Timeframe, tf2: Timeframe): Timeframe {\n const result = new Timeframe();\n for (const [hex, entry] of tf1._frames) {\n const otherEntry = tf2._frames.get(hex);\n if (otherEntry === undefined || otherEntry.seq < entry.seq) {\n result._frames.set(hex, entry);\n }\n }\n\n return result;\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["inspect", "equalsSymbol", "Timeframe", "constructor", "frames", "_frames", "Map", "key", "seq", "set", "toJSON", "reduce", "truncate", "toString", "map", "join", "equals", "object", "size", "every", "get", "toHex", "hex", "Array", "from", "values", "isEmpty", "withoutKeys", "keys", "filter", "frameKey", "fn", "totalMessages", "result", "newMessages", "base", "entries", "Math", "max", "inspect", "custom", "equalsSymbol", "other", "merge", "timeframes", "timeframe", "entry", "currentEntry", "undefined", "dependencies", "tf1", "tf2", "otherEntry"]
4
+ "sourcesContent": ["//\n// Copyright 2020 DXOS.org\n//\n\nimport { inspect } from 'node:util';\n\nimport { equalsSymbol, type Equatable } from '@dxos/debug';\nimport { type PublicKey } from '@dxos/keys';\n\ntype Entry = {\n key: PublicKey;\n seq: number;\n};\n\n/**\n * A vector clock that implements ordering over a set of feed messages.\n */\nexport class Timeframe implements Equatable {\n private readonly _frames = new Map<string, Entry>();\n\n constructor(frames: [PublicKey, number][] = []) {\n for (const [key, seq] of frames) {\n this.set(key, seq);\n }\n }\n\n toJSON(): Record<string, number> {\n return this.frames().reduce((frames: Record<string, number>, [key, seq]) => {\n frames[key.truncate()] = seq;\n return frames;\n }, {});\n }\n\n toString(): string {\n return `(${this.frames()\n .map(([key, seq]) => `${key.truncate()}[${seq}]`)\n .join(', ')})`;\n }\n\n equals(object: Timeframe): boolean {\n return this.size() === object.size() && this.frames().every(([key, seq]) => object.get(key) === seq);\n }\n\n // TODO(burdon): Rename getFrame.\n get(key: PublicKey): number | undefined {\n return this._frames.get(key.toHex())?.seq;\n }\n\n // TODO(burdon): Rename setFrame.\n set(key: PublicKey, seq: number): void {\n const hex = key.toHex();\n this._frames.set(hex, { key, seq });\n }\n\n // TODO(burdon): Change to getter.\n frames(): [PublicKey, number][] {\n return Array.from(this._frames.values()).map(({ key, seq }) => [key, seq]);\n }\n\n // TODO(burdon): Change to getter.\n size(): number {\n return this._frames.size;\n }\n\n // TODO(burdon): Change to getter (empty).\n isEmpty(): boolean {\n return this.size() === 0;\n }\n\n /**\n * Returns a new timeframe with specified keys removed.\n * @param keys\n */\n withoutKeys(keys: PublicKey[]): Timeframe {\n return new Timeframe(this.frames().filter(([frameKey]) => keys.every((key) => !key.equals(frameKey))));\n }\n\n map(fn: (frame: [key: PublicKey, seq: number]) => [PublicKey, number]): Timeframe {\n return new Timeframe(this.frames().map(fn));\n }\n\n /**\n * Returns a total amount of messages represented by this timeframe.\n */\n totalMessages(): number {\n return Array.from(this._frames.values()).reduce((result, { seq }) => result + seq + 1, 0);\n }\n\n /**\n * Returns a total amount of messages that are present in this timeframe but are missing in `base`.\n */\n newMessages(base: Timeframe): number {\n return Array.from(this._frames.entries()).reduce(\n (result, [hex, { seq }]) => result + Math.max(seq - (base._frames.get(hex)?.seq ?? -1), 0),\n 0,\n );\n }\n\n /**\n * Used by NodeJS to get textual representation of this object in `console.log`.\n */\n [inspect.custom](): string {\n return `Timeframe${this.toString()}`;\n }\n\n [equalsSymbol](other: any): boolean {\n if (!(other instanceof Timeframe)) {\n return false;\n }\n\n return this.equals(other);\n }\n\n /**\n * Merges the values, updating the highest sequence numbers.\n * @param timeframes\n */\n static merge(...timeframes: Timeframe[]): Timeframe {\n const result = new Timeframe();\n for (const timeframe of timeframes) {\n for (const [hex, entry] of timeframe._frames) {\n const currentEntry = result._frames.get(hex);\n if (currentEntry === undefined || entry.seq > currentEntry.seq) {\n result._frames.set(hex, entry);\n }\n }\n }\n\n return result;\n }\n\n /**\n * Compares two timeframes and returns an array of frames from the first timeframe where the sequence number\n * is greater than the associated sequence number from the second timeframe.\n */\n static dependencies(tf1: Timeframe, tf2: Timeframe): Timeframe {\n const result = new Timeframe();\n for (const [hex, entry] of tf1._frames) {\n const otherEntry = tf2._frames.get(hex);\n if (otherEntry === undefined || otherEntry.seq < entry.seq) {\n result._frames.set(hex, entry);\n }\n }\n\n return result;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["inspect", "equalsSymbol", "Timeframe", "frames", "_frames", "Map", "key", "seq", "set", "toJSON", "reduce", "truncate", "toString", "map", "join", "equals", "object", "size", "every", "get", "toHex", "hex", "Array", "from", "values", "isEmpty", "withoutKeys", "keys", "filter", "frameKey", "fn", "totalMessages", "result", "newMessages", "base", "entries", "Math", "max", "inspect", "custom", "equalsSymbol", "other", "merge", "timeframes", "timeframe", "entry", "currentEntry", "undefined", "dependencies", "tf1", "tf2", "otherEntry"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"packages/common/timeframe/src/timeframe.ts":{"bytes":13901,"imports":[{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true}],"format":"esm"},"packages/common/timeframe/src/index.ts":{"bytes":498,"imports":[{"path":"packages/common/timeframe/src/timeframe.ts","kind":"import-statement","original":"./timeframe"}],"format":"esm"}},"outputs":{"packages/common/timeframe/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":7076},"packages/common/timeframe/dist/lib/browser/index.mjs":{"imports":[{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true}],"exports":["Timeframe"],"entryPoint":"packages/common/timeframe/src/index.ts","inputs":{"packages/common/timeframe/src/timeframe.ts":{"bytesInOutput":3277},"packages/common/timeframe/src/index.ts":{"bytesInOutput":0}},"bytes":3416}}}
1
+ {"inputs":{"packages/common/timeframe/src/timeframe.ts":{"bytes":13817,"imports":[{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true}],"format":"esm"},"packages/common/timeframe/src/index.ts":{"bytes":470,"imports":[{"path":"packages/common/timeframe/src/timeframe.ts","kind":"import-statement","original":"./timeframe"}],"format":"esm"}},"outputs":{"packages/common/timeframe/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":7157},"packages/common/timeframe/dist/lib/browser/index.mjs":{"imports":[{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true}],"exports":["Timeframe"],"entryPoint":"packages/common/timeframe/src/index.ts","inputs":{"packages/common/timeframe/src/timeframe.ts":{"bytesInOutput":3277},"packages/common/timeframe/src/index.ts":{"bytesInOutput":0}},"bytes":3416}}}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/timeframe.ts"],
4
- "sourcesContent": ["//\n// Copyright 2020 DXOS.org\n//\n\nimport { inspect } from 'node:util';\n\nimport { equalsSymbol, type Equatable } from '@dxos/debug';\nimport { type PublicKey } from '@dxos/keys';\n\ntype Entry = {\n key: PublicKey;\n seq: number;\n};\n\n/**\n * A vector clock that implements ordering over a set of feed messages.\n */\nexport class Timeframe implements Equatable {\n private readonly _frames = new Map<string, Entry>();\n\n constructor(frames: [PublicKey, number][] = []) {\n for (const [key, seq] of frames) {\n this.set(key, seq);\n }\n }\n\n toJSON() {\n return this.frames().reduce((frames: Record<string, number>, [key, seq]) => {\n frames[key.truncate()] = seq;\n return frames;\n }, {});\n }\n\n toString() {\n return `(${this.frames()\n .map(([key, seq]) => `${key.truncate()}[${seq}]`)\n .join(', ')})`;\n }\n\n equals(object: Timeframe) {\n return this.size() === object.size() && this.frames().every(([key, seq]) => object.get(key) === seq);\n }\n\n // TODO(burdon): Rename getFrame.\n get(key: PublicKey): number | undefined {\n return this._frames.get(key.toHex())?.seq;\n }\n\n // TODO(burdon): Rename setFrame.\n set(key: PublicKey, seq: number) {\n const hex = key.toHex();\n this._frames.set(hex, { key, seq });\n }\n\n // TODO(burdon): Change to getter.\n frames(): [PublicKey, number][] {\n return Array.from(this._frames.values()).map(({ key, seq }) => [key, seq]);\n }\n\n // TODO(burdon): Change to getter.\n size() {\n return this._frames.size;\n }\n\n // TODO(burdon): Change to getter (empty).\n isEmpty() {\n return this.size() === 0;\n }\n\n /**\n * Returns a new timeframe with specified keys removed.\n * @param keys\n */\n withoutKeys(keys: PublicKey[]): Timeframe {\n return new Timeframe(this.frames().filter(([frameKey]) => keys.every((key) => !key.equals(frameKey))));\n }\n\n map(fn: (frame: [key: PublicKey, seq: number]) => [PublicKey, number]): Timeframe {\n return new Timeframe(this.frames().map(fn));\n }\n\n /**\n * Returns a total amount of messages represented by this timeframe.\n */\n totalMessages(): number {\n return Array.from(this._frames.values()).reduce((result, { seq }) => result + seq + 1, 0);\n }\n\n /**\n * Returns a total amount of messages that are present in this timeframe but are missing in `base`.\n */\n newMessages(base: Timeframe) {\n return Array.from(this._frames.entries()).reduce(\n (result, [hex, { seq }]) => result + Math.max(seq - (base._frames.get(hex)?.seq ?? -1), 0),\n 0,\n );\n }\n\n /**\n * Used by NodeJS to get textual representation of this object in `console.log`.\n */\n [inspect.custom]() {\n return `Timeframe${this.toString()}`;\n }\n\n [equalsSymbol](other: any) {\n if (!(other instanceof Timeframe)) {\n return false;\n }\n\n return this.equals(other);\n }\n\n /**\n * Merges the values, updating the highest sequence numbers.\n * @param timeframes\n */\n static merge(...timeframes: Timeframe[]): Timeframe {\n const result = new Timeframe();\n for (const timeframe of timeframes) {\n for (const [hex, entry] of timeframe._frames) {\n const currentEntry = result._frames.get(hex);\n if (currentEntry === undefined || entry.seq > currentEntry.seq) {\n result._frames.set(hex, entry);\n }\n }\n }\n\n return result;\n }\n\n /**\n * Compares two timeframes and returns an array of frames from the first timeframe where the sequence number\n * is greater than the associated sequence number from the second timeframe.\n */\n static dependencies(tf1: Timeframe, tf2: Timeframe): Timeframe {\n const result = new Timeframe();\n for (const [hex, entry] of tf1._frames) {\n const otherEntry = tf2._frames.get(hex);\n if (otherEntry === undefined || otherEntry.seq < entry.seq) {\n result._frames.set(hex, entry);\n }\n }\n\n return result;\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["Timeframe", "constructor", "frames", "_frames", "Map", "key", "seq", "set", "toJSON", "reduce", "truncate", "toString", "map", "join", "equals", "object", "size", "every", "get", "toHex", "hex", "Array", "from", "values", "isEmpty", "withoutKeys", "keys", "filter", "frameKey", "fn", "totalMessages", "result", "newMessages", "base", "entries", "Math", "max", "inspect", "custom", "equalsSymbol", "other", "merge", "timeframes", "timeframe", "entry", "currentEntry", "undefined", "dependencies", "tf1", "tf2", "otherEntry"]
4
+ "sourcesContent": ["//\n// Copyright 2020 DXOS.org\n//\n\nimport { inspect } from 'node:util';\n\nimport { equalsSymbol, type Equatable } from '@dxos/debug';\nimport { type PublicKey } from '@dxos/keys';\n\ntype Entry = {\n key: PublicKey;\n seq: number;\n};\n\n/**\n * A vector clock that implements ordering over a set of feed messages.\n */\nexport class Timeframe implements Equatable {\n private readonly _frames = new Map<string, Entry>();\n\n constructor(frames: [PublicKey, number][] = []) {\n for (const [key, seq] of frames) {\n this.set(key, seq);\n }\n }\n\n toJSON(): Record<string, number> {\n return this.frames().reduce((frames: Record<string, number>, [key, seq]) => {\n frames[key.truncate()] = seq;\n return frames;\n }, {});\n }\n\n toString(): string {\n return `(${this.frames()\n .map(([key, seq]) => `${key.truncate()}[${seq}]`)\n .join(', ')})`;\n }\n\n equals(object: Timeframe): boolean {\n return this.size() === object.size() && this.frames().every(([key, seq]) => object.get(key) === seq);\n }\n\n // TODO(burdon): Rename getFrame.\n get(key: PublicKey): number | undefined {\n return this._frames.get(key.toHex())?.seq;\n }\n\n // TODO(burdon): Rename setFrame.\n set(key: PublicKey, seq: number): void {\n const hex = key.toHex();\n this._frames.set(hex, { key, seq });\n }\n\n // TODO(burdon): Change to getter.\n frames(): [PublicKey, number][] {\n return Array.from(this._frames.values()).map(({ key, seq }) => [key, seq]);\n }\n\n // TODO(burdon): Change to getter.\n size(): number {\n return this._frames.size;\n }\n\n // TODO(burdon): Change to getter (empty).\n isEmpty(): boolean {\n return this.size() === 0;\n }\n\n /**\n * Returns a new timeframe with specified keys removed.\n * @param keys\n */\n withoutKeys(keys: PublicKey[]): Timeframe {\n return new Timeframe(this.frames().filter(([frameKey]) => keys.every((key) => !key.equals(frameKey))));\n }\n\n map(fn: (frame: [key: PublicKey, seq: number]) => [PublicKey, number]): Timeframe {\n return new Timeframe(this.frames().map(fn));\n }\n\n /**\n * Returns a total amount of messages represented by this timeframe.\n */\n totalMessages(): number {\n return Array.from(this._frames.values()).reduce((result, { seq }) => result + seq + 1, 0);\n }\n\n /**\n * Returns a total amount of messages that are present in this timeframe but are missing in `base`.\n */\n newMessages(base: Timeframe): number {\n return Array.from(this._frames.entries()).reduce(\n (result, [hex, { seq }]) => result + Math.max(seq - (base._frames.get(hex)?.seq ?? -1), 0),\n 0,\n );\n }\n\n /**\n * Used by NodeJS to get textual representation of this object in `console.log`.\n */\n [inspect.custom](): string {\n return `Timeframe${this.toString()}`;\n }\n\n [equalsSymbol](other: any): boolean {\n if (!(other instanceof Timeframe)) {\n return false;\n }\n\n return this.equals(other);\n }\n\n /**\n * Merges the values, updating the highest sequence numbers.\n * @param timeframes\n */\n static merge(...timeframes: Timeframe[]): Timeframe {\n const result = new Timeframe();\n for (const timeframe of timeframes) {\n for (const [hex, entry] of timeframe._frames) {\n const currentEntry = result._frames.get(hex);\n if (currentEntry === undefined || entry.seq > currentEntry.seq) {\n result._frames.set(hex, entry);\n }\n }\n }\n\n return result;\n }\n\n /**\n * Compares two timeframes and returns an array of frames from the first timeframe where the sequence number\n * is greater than the associated sequence number from the second timeframe.\n */\n static dependencies(tf1: Timeframe, tf2: Timeframe): Timeframe {\n const result = new Timeframe();\n for (const [hex, entry] of tf1._frames) {\n const otherEntry = tf2._frames.get(hex);\n if (otherEntry === undefined || otherEntry.seq < entry.seq) {\n result._frames.set(hex, entry);\n }\n }\n\n return result;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["Timeframe", "frames", "_frames", "Map", "key", "seq", "set", "toJSON", "reduce", "truncate", "toString", "map", "join", "equals", "object", "size", "every", "get", "toHex", "hex", "Array", "from", "values", "isEmpty", "withoutKeys", "keys", "filter", "frameKey", "fn", "totalMessages", "result", "newMessages", "base", "entries", "Math", "max", "inspect", "custom", "equalsSymbol", "other", "merge", "timeframes", "timeframe", "entry", "currentEntry", "undefined", "dependencies", "tf1", "tf2", "otherEntry"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"packages/common/timeframe/src/timeframe.ts":{"bytes":13901,"imports":[{"path":"node:util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true}],"format":"esm"},"packages/common/timeframe/src/index.ts":{"bytes":498,"imports":[{"path":"packages/common/timeframe/src/timeframe.ts","kind":"import-statement","original":"./timeframe"}],"format":"esm"}},"outputs":{"packages/common/timeframe/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":7074},"packages/common/timeframe/dist/lib/node/index.cjs":{"imports":[{"path":"node:util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true}],"exports":["Timeframe"],"entryPoint":"packages/common/timeframe/src/index.ts","inputs":{"packages/common/timeframe/src/timeframe.ts":{"bytesInOutput":3267},"packages/common/timeframe/src/index.ts":{"bytesInOutput":0}},"bytes":3372}}}
1
+ {"inputs":{"packages/common/timeframe/src/timeframe.ts":{"bytes":13817,"imports":[{"path":"node:util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true}],"format":"esm"},"packages/common/timeframe/src/index.ts":{"bytes":470,"imports":[{"path":"packages/common/timeframe/src/timeframe.ts","kind":"import-statement","original":"./timeframe"}],"format":"esm"}},"outputs":{"packages/common/timeframe/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":7155},"packages/common/timeframe/dist/lib/node/index.cjs":{"imports":[{"path":"node:util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true}],"exports":["Timeframe"],"entryPoint":"packages/common/timeframe/src/index.ts","inputs":{"packages/common/timeframe/src/timeframe.ts":{"bytesInOutput":3267},"packages/common/timeframe/src/index.ts":{"bytesInOutput":0}},"bytes":3372}}}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/timeframe.ts"],
4
- "sourcesContent": ["//\n// Copyright 2020 DXOS.org\n//\n\nimport { inspect } from 'node:util';\n\nimport { equalsSymbol, type Equatable } from '@dxos/debug';\nimport { type PublicKey } from '@dxos/keys';\n\ntype Entry = {\n key: PublicKey;\n seq: number;\n};\n\n/**\n * A vector clock that implements ordering over a set of feed messages.\n */\nexport class Timeframe implements Equatable {\n private readonly _frames = new Map<string, Entry>();\n\n constructor(frames: [PublicKey, number][] = []) {\n for (const [key, seq] of frames) {\n this.set(key, seq);\n }\n }\n\n toJSON() {\n return this.frames().reduce((frames: Record<string, number>, [key, seq]) => {\n frames[key.truncate()] = seq;\n return frames;\n }, {});\n }\n\n toString() {\n return `(${this.frames()\n .map(([key, seq]) => `${key.truncate()}[${seq}]`)\n .join(', ')})`;\n }\n\n equals(object: Timeframe) {\n return this.size() === object.size() && this.frames().every(([key, seq]) => object.get(key) === seq);\n }\n\n // TODO(burdon): Rename getFrame.\n get(key: PublicKey): number | undefined {\n return this._frames.get(key.toHex())?.seq;\n }\n\n // TODO(burdon): Rename setFrame.\n set(key: PublicKey, seq: number) {\n const hex = key.toHex();\n this._frames.set(hex, { key, seq });\n }\n\n // TODO(burdon): Change to getter.\n frames(): [PublicKey, number][] {\n return Array.from(this._frames.values()).map(({ key, seq }) => [key, seq]);\n }\n\n // TODO(burdon): Change to getter.\n size() {\n return this._frames.size;\n }\n\n // TODO(burdon): Change to getter (empty).\n isEmpty() {\n return this.size() === 0;\n }\n\n /**\n * Returns a new timeframe with specified keys removed.\n * @param keys\n */\n withoutKeys(keys: PublicKey[]): Timeframe {\n return new Timeframe(this.frames().filter(([frameKey]) => keys.every((key) => !key.equals(frameKey))));\n }\n\n map(fn: (frame: [key: PublicKey, seq: number]) => [PublicKey, number]): Timeframe {\n return new Timeframe(this.frames().map(fn));\n }\n\n /**\n * Returns a total amount of messages represented by this timeframe.\n */\n totalMessages(): number {\n return Array.from(this._frames.values()).reduce((result, { seq }) => result + seq + 1, 0);\n }\n\n /**\n * Returns a total amount of messages that are present in this timeframe but are missing in `base`.\n */\n newMessages(base: Timeframe) {\n return Array.from(this._frames.entries()).reduce(\n (result, [hex, { seq }]) => result + Math.max(seq - (base._frames.get(hex)?.seq ?? -1), 0),\n 0,\n );\n }\n\n /**\n * Used by NodeJS to get textual representation of this object in `console.log`.\n */\n [inspect.custom]() {\n return `Timeframe${this.toString()}`;\n }\n\n [equalsSymbol](other: any) {\n if (!(other instanceof Timeframe)) {\n return false;\n }\n\n return this.equals(other);\n }\n\n /**\n * Merges the values, updating the highest sequence numbers.\n * @param timeframes\n */\n static merge(...timeframes: Timeframe[]): Timeframe {\n const result = new Timeframe();\n for (const timeframe of timeframes) {\n for (const [hex, entry] of timeframe._frames) {\n const currentEntry = result._frames.get(hex);\n if (currentEntry === undefined || entry.seq > currentEntry.seq) {\n result._frames.set(hex, entry);\n }\n }\n }\n\n return result;\n }\n\n /**\n * Compares two timeframes and returns an array of frames from the first timeframe where the sequence number\n * is greater than the associated sequence number from the second timeframe.\n */\n static dependencies(tf1: Timeframe, tf2: Timeframe): Timeframe {\n const result = new Timeframe();\n for (const [hex, entry] of tf1._frames) {\n const otherEntry = tf2._frames.get(hex);\n if (otherEntry === undefined || otherEntry.seq < entry.seq) {\n result._frames.set(hex, entry);\n }\n }\n\n return result;\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["inspect", "equalsSymbol", "Timeframe", "constructor", "frames", "_frames", "Map", "key", "seq", "set", "toJSON", "reduce", "truncate", "toString", "map", "join", "equals", "object", "size", "every", "get", "toHex", "hex", "Array", "from", "values", "isEmpty", "withoutKeys", "keys", "filter", "frameKey", "fn", "totalMessages", "result", "newMessages", "base", "entries", "Math", "max", "inspect", "custom", "equalsSymbol", "other", "merge", "timeframes", "timeframe", "entry", "currentEntry", "undefined", "dependencies", "tf1", "tf2", "otherEntry"]
4
+ "sourcesContent": ["//\n// Copyright 2020 DXOS.org\n//\n\nimport { inspect } from 'node:util';\n\nimport { equalsSymbol, type Equatable } from '@dxos/debug';\nimport { type PublicKey } from '@dxos/keys';\n\ntype Entry = {\n key: PublicKey;\n seq: number;\n};\n\n/**\n * A vector clock that implements ordering over a set of feed messages.\n */\nexport class Timeframe implements Equatable {\n private readonly _frames = new Map<string, Entry>();\n\n constructor(frames: [PublicKey, number][] = []) {\n for (const [key, seq] of frames) {\n this.set(key, seq);\n }\n }\n\n toJSON(): Record<string, number> {\n return this.frames().reduce((frames: Record<string, number>, [key, seq]) => {\n frames[key.truncate()] = seq;\n return frames;\n }, {});\n }\n\n toString(): string {\n return `(${this.frames()\n .map(([key, seq]) => `${key.truncate()}[${seq}]`)\n .join(', ')})`;\n }\n\n equals(object: Timeframe): boolean {\n return this.size() === object.size() && this.frames().every(([key, seq]) => object.get(key) === seq);\n }\n\n // TODO(burdon): Rename getFrame.\n get(key: PublicKey): number | undefined {\n return this._frames.get(key.toHex())?.seq;\n }\n\n // TODO(burdon): Rename setFrame.\n set(key: PublicKey, seq: number): void {\n const hex = key.toHex();\n this._frames.set(hex, { key, seq });\n }\n\n // TODO(burdon): Change to getter.\n frames(): [PublicKey, number][] {\n return Array.from(this._frames.values()).map(({ key, seq }) => [key, seq]);\n }\n\n // TODO(burdon): Change to getter.\n size(): number {\n return this._frames.size;\n }\n\n // TODO(burdon): Change to getter (empty).\n isEmpty(): boolean {\n return this.size() === 0;\n }\n\n /**\n * Returns a new timeframe with specified keys removed.\n * @param keys\n */\n withoutKeys(keys: PublicKey[]): Timeframe {\n return new Timeframe(this.frames().filter(([frameKey]) => keys.every((key) => !key.equals(frameKey))));\n }\n\n map(fn: (frame: [key: PublicKey, seq: number]) => [PublicKey, number]): Timeframe {\n return new Timeframe(this.frames().map(fn));\n }\n\n /**\n * Returns a total amount of messages represented by this timeframe.\n */\n totalMessages(): number {\n return Array.from(this._frames.values()).reduce((result, { seq }) => result + seq + 1, 0);\n }\n\n /**\n * Returns a total amount of messages that are present in this timeframe but are missing in `base`.\n */\n newMessages(base: Timeframe): number {\n return Array.from(this._frames.entries()).reduce(\n (result, [hex, { seq }]) => result + Math.max(seq - (base._frames.get(hex)?.seq ?? -1), 0),\n 0,\n );\n }\n\n /**\n * Used by NodeJS to get textual representation of this object in `console.log`.\n */\n [inspect.custom](): string {\n return `Timeframe${this.toString()}`;\n }\n\n [equalsSymbol](other: any): boolean {\n if (!(other instanceof Timeframe)) {\n return false;\n }\n\n return this.equals(other);\n }\n\n /**\n * Merges the values, updating the highest sequence numbers.\n * @param timeframes\n */\n static merge(...timeframes: Timeframe[]): Timeframe {\n const result = new Timeframe();\n for (const timeframe of timeframes) {\n for (const [hex, entry] of timeframe._frames) {\n const currentEntry = result._frames.get(hex);\n if (currentEntry === undefined || entry.seq > currentEntry.seq) {\n result._frames.set(hex, entry);\n }\n }\n }\n\n return result;\n }\n\n /**\n * Compares two timeframes and returns an array of frames from the first timeframe where the sequence number\n * is greater than the associated sequence number from the second timeframe.\n */\n static dependencies(tf1: Timeframe, tf2: Timeframe): Timeframe {\n const result = new Timeframe();\n for (const [hex, entry] of tf1._frames) {\n const otherEntry = tf2._frames.get(hex);\n if (otherEntry === undefined || otherEntry.seq < entry.seq) {\n result._frames.set(hex, entry);\n }\n }\n\n return result;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["inspect", "equalsSymbol", "Timeframe", "frames", "_frames", "Map", "key", "seq", "set", "toJSON", "reduce", "truncate", "toString", "map", "join", "equals", "object", "size", "every", "get", "toHex", "hex", "Array", "from", "values", "isEmpty", "withoutKeys", "keys", "filter", "frameKey", "fn", "totalMessages", "result", "newMessages", "base", "entries", "Math", "max", "inspect", "custom", "equalsSymbol", "other", "merge", "timeframes", "timeframe", "entry", "currentEntry", "undefined", "dependencies", "tf1", "tf2", "otherEntry"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"packages/common/timeframe/src/timeframe.ts":{"bytes":13901,"imports":[{"path":"node:util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true}],"format":"esm"},"packages/common/timeframe/src/index.ts":{"bytes":498,"imports":[{"path":"packages/common/timeframe/src/timeframe.ts","kind":"import-statement","original":"./timeframe"}],"format":"esm"}},"outputs":{"packages/common/timeframe/dist/lib/node-esm/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":7076},"packages/common/timeframe/dist/lib/node-esm/index.mjs":{"imports":[{"path":"node:util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true}],"exports":["Timeframe"],"entryPoint":"packages/common/timeframe/src/index.ts","inputs":{"packages/common/timeframe/src/timeframe.ts":{"bytesInOutput":3267},"packages/common/timeframe/src/index.ts":{"bytesInOutput":0}},"bytes":3465}}}
1
+ {"inputs":{"packages/common/timeframe/src/timeframe.ts":{"bytes":13817,"imports":[{"path":"node:util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true}],"format":"esm"},"packages/common/timeframe/src/index.ts":{"bytes":470,"imports":[{"path":"packages/common/timeframe/src/timeframe.ts","kind":"import-statement","original":"./timeframe"}],"format":"esm"}},"outputs":{"packages/common/timeframe/dist/lib/node-esm/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":7157},"packages/common/timeframe/dist/lib/node-esm/index.mjs":{"imports":[{"path":"node:util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true}],"exports":["Timeframe"],"entryPoint":"packages/common/timeframe/src/index.ts","inputs":{"packages/common/timeframe/src/timeframe.ts":{"bytesInOutput":3267},"packages/common/timeframe/src/index.ts":{"bytesInOutput":0}},"bytes":3465}}}
@@ -1 +1 @@
1
- {"version":3,"file":"timeframe.d.ts","sourceRoot":"","sources":["../../../src/timeframe.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAO5C;;GAEG;AACH,qBAAa,SAAU,YAAW,SAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;gBAExC,MAAM,GAAE,CAAC,SAAS,EAAE,MAAM,CAAC,EAAO;IAM9C,MAAM;IAON,QAAQ;IAMR,MAAM,CAAC,MAAM,EAAE,SAAS;IAKxB,GAAG,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS;IAKvC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM;IAM/B,MAAM,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE;IAK/B,IAAI;IAKJ,OAAO;IAIP;;;OAGG;IACH,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,SAAS;IAIzC,GAAG,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,SAAS;IAIjF;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,SAAS;IAO3B;;OAEG;IACH,CAAC,OAAO,CAAC,MAAM,CAAC;IAIhB,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,GAAG;IAQzB;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,EAAE,SAAS,EAAE,GAAG,SAAS;IAcnD;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,GAAG,SAAS;CAW/D"}
1
+ {"version":3,"file":"timeframe.d.ts","sourceRoot":"","sources":["../../../src/timeframe.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAO5C;;GAEG;AACH,qBAAa,SAAU,YAAW,SAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;gBAExC,MAAM,GAAE,CAAC,SAAS,EAAE,MAAM,CAAC,EAAO;IAM9C,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAOhC,QAAQ,IAAI,MAAM;IAMlB,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO;IAKlC,GAAG,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS;IAKvC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAMtC,MAAM,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE;IAK/B,IAAI,IAAI,MAAM;IAKd,OAAO,IAAI,OAAO;IAIlB;;;OAGG;IACH,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,SAAS;IAIzC,GAAG,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,SAAS;IAIjF;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;IAOpC;;OAEG;IACH,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM;IAI1B,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAQnC;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,EAAE,SAAS,EAAE,GAAG,SAAS;IAcnD;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,GAAG,SAAS;CAW/D"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/timeframe",
3
- "version": "0.8.2-main.fbd8ed0",
3
+ "version": "0.8.2-staging.4d6ad0f",
4
4
  "description": "Timeframe vector clock.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -27,11 +27,11 @@
27
27
  "src"
28
28
  ],
29
29
  "dependencies": {
30
- "@dxos/debug": "0.8.2-main.fbd8ed0",
31
- "@dxos/node-std": "0.8.2-main.fbd8ed0",
32
- "@dxos/log": "0.8.2-main.fbd8ed0",
33
- "@dxos/util": "0.8.2-main.fbd8ed0",
34
- "@dxos/keys": "0.8.2-main.fbd8ed0"
30
+ "@dxos/keys": "0.8.2-staging.4d6ad0f",
31
+ "@dxos/debug": "0.8.2-staging.4d6ad0f",
32
+ "@dxos/log": "0.8.2-staging.4d6ad0f",
33
+ "@dxos/node-std": "0.8.2-staging.4d6ad0f",
34
+ "@dxos/util": "0.8.2-staging.4d6ad0f"
35
35
  },
36
36
  "publishConfig": {
37
37
  "access": "public"
package/src/timeframe.ts CHANGED
@@ -24,20 +24,20 @@ export class Timeframe implements Equatable {
24
24
  }
25
25
  }
26
26
 
27
- toJSON() {
27
+ toJSON(): Record<string, number> {
28
28
  return this.frames().reduce((frames: Record<string, number>, [key, seq]) => {
29
29
  frames[key.truncate()] = seq;
30
30
  return frames;
31
31
  }, {});
32
32
  }
33
33
 
34
- toString() {
34
+ toString(): string {
35
35
  return `(${this.frames()
36
36
  .map(([key, seq]) => `${key.truncate()}[${seq}]`)
37
37
  .join(', ')})`;
38
38
  }
39
39
 
40
- equals(object: Timeframe) {
40
+ equals(object: Timeframe): boolean {
41
41
  return this.size() === object.size() && this.frames().every(([key, seq]) => object.get(key) === seq);
42
42
  }
43
43
 
@@ -47,7 +47,7 @@ export class Timeframe implements Equatable {
47
47
  }
48
48
 
49
49
  // TODO(burdon): Rename setFrame.
50
- set(key: PublicKey, seq: number) {
50
+ set(key: PublicKey, seq: number): void {
51
51
  const hex = key.toHex();
52
52
  this._frames.set(hex, { key, seq });
53
53
  }
@@ -58,12 +58,12 @@ export class Timeframe implements Equatable {
58
58
  }
59
59
 
60
60
  // TODO(burdon): Change to getter.
61
- size() {
61
+ size(): number {
62
62
  return this._frames.size;
63
63
  }
64
64
 
65
65
  // TODO(burdon): Change to getter (empty).
66
- isEmpty() {
66
+ isEmpty(): boolean {
67
67
  return this.size() === 0;
68
68
  }
69
69
 
@@ -89,7 +89,7 @@ export class Timeframe implements Equatable {
89
89
  /**
90
90
  * Returns a total amount of messages that are present in this timeframe but are missing in `base`.
91
91
  */
92
- newMessages(base: Timeframe) {
92
+ newMessages(base: Timeframe): number {
93
93
  return Array.from(this._frames.entries()).reduce(
94
94
  (result, [hex, { seq }]) => result + Math.max(seq - (base._frames.get(hex)?.seq ?? -1), 0),
95
95
  0,
@@ -99,11 +99,11 @@ export class Timeframe implements Equatable {
99
99
  /**
100
100
  * Used by NodeJS to get textual representation of this object in `console.log`.
101
101
  */
102
- [inspect.custom]() {
102
+ [inspect.custom](): string {
103
103
  return `Timeframe${this.toString()}`;
104
104
  }
105
105
 
106
- [equalsSymbol](other: any) {
106
+ [equalsSymbol](other: any): boolean {
107
107
  if (!(other instanceof Timeframe)) {
108
108
  return false;
109
109
  }