@clickup/ent-framework
Version:
A PostgreSQL graph-database-alike library with microsharding and row-level security
47 lines • 1.67 kB
JavaScript
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
;