UNPKG

@clickup/ent-framework

Version:

A PostgreSQL graph-database-alike library with microsharding and row-level security

47 lines 1.67 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.VCTrace = void 0; /** * The upper bound of Date.now() is Number.MAX_SAFE_INTEGER which is 2^53 - 1, * so we have only 10 bits from BigInt (2^63 - 1) left to represent the random * part of the trace value. */ const RANDOM_BITS = 10; const RANDOM_BITS_MASK = Math.pow(2, RANDOM_BITS) - 1; /** * A "trace" objects which allows to group database related stuff while logging * it. Traces are inherited during VC derivation, similar to flavors, but * they're a part of VC core interface to allow faster access. */ class VCTrace { constructor(trace) { this.trace = trace ?? this.createRandomTrace(); } /** * In case the trace was created by this tool, tries to extract the date of * its creation. As a sanity check, verifies that this date is not too far * away from the present time. */ tryExtractCreationDate() { try { const ts = BigInt(this.trace) >> BigInt(RANDOM_BITS); const minTs = Date.now() - 1000 * 3600 * 24 * 365; const maxTs = Date.now() + 1000 * 3600 * 24; return BigInt(minTs) < ts && ts < BigInt(maxTs) ? new Date(Number(ts)) : null; } catch { return null; } } /** * Returns a stringified uint63 (0 - 9223372036854775807). */ createRandomTrace() { return ((BigInt(Date.now()) << BigInt(RANDOM_BITS)) | BigInt(Math.trunc(Math.random() * RANDOM_BITS_MASK) & RANDOM_BITS_MASK)).toString(); } } exports.VCTrace = VCTrace; //# sourceMappingURL=VCTrace.js.map