mirror of
https://github.com/LukeHagar/relay.git
synced 2025-12-06 20:57:46 +00:00
saving
This commit is contained in:
104
node_modules/@msgpack/msgpack/dist/timestamp.js
generated
vendored
Normal file
104
node_modules/@msgpack/msgpack/dist/timestamp.js
generated
vendored
Normal file
@@ -0,0 +1,104 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.timestampExtension = exports.decodeTimestampExtension = exports.decodeTimestampToTimeSpec = exports.encodeTimestampExtension = exports.encodeDateToTimeSpec = exports.encodeTimeSpecToTimestamp = exports.EXT_TIMESTAMP = void 0;
|
||||
// https://github.com/msgpack/msgpack/blob/master/spec.md#timestamp-extension-type
|
||||
const DecodeError_1 = require("./DecodeError");
|
||||
const int_1 = require("./utils/int");
|
||||
exports.EXT_TIMESTAMP = -1;
|
||||
const TIMESTAMP32_MAX_SEC = 0x100000000 - 1; // 32-bit unsigned int
|
||||
const TIMESTAMP64_MAX_SEC = 0x400000000 - 1; // 34-bit unsigned int
|
||||
function encodeTimeSpecToTimestamp({ sec, nsec }) {
|
||||
if (sec >= 0 && nsec >= 0 && sec <= TIMESTAMP64_MAX_SEC) {
|
||||
// Here sec >= 0 && nsec >= 0
|
||||
if (nsec === 0 && sec <= TIMESTAMP32_MAX_SEC) {
|
||||
// timestamp 32 = { sec32 (unsigned) }
|
||||
const rv = new Uint8Array(4);
|
||||
const view = new DataView(rv.buffer);
|
||||
view.setUint32(0, sec);
|
||||
return rv;
|
||||
}
|
||||
else {
|
||||
// timestamp 64 = { nsec30 (unsigned), sec34 (unsigned) }
|
||||
const secHigh = sec / 0x100000000;
|
||||
const secLow = sec & 0xffffffff;
|
||||
const rv = new Uint8Array(8);
|
||||
const view = new DataView(rv.buffer);
|
||||
// nsec30 | secHigh2
|
||||
view.setUint32(0, (nsec << 2) | (secHigh & 0x3));
|
||||
// secLow32
|
||||
view.setUint32(4, secLow);
|
||||
return rv;
|
||||
}
|
||||
}
|
||||
else {
|
||||
// timestamp 96 = { nsec32 (unsigned), sec64 (signed) }
|
||||
const rv = new Uint8Array(12);
|
||||
const view = new DataView(rv.buffer);
|
||||
view.setUint32(0, nsec);
|
||||
(0, int_1.setInt64)(view, 4, sec);
|
||||
return rv;
|
||||
}
|
||||
}
|
||||
exports.encodeTimeSpecToTimestamp = encodeTimeSpecToTimestamp;
|
||||
function encodeDateToTimeSpec(date) {
|
||||
const msec = date.getTime();
|
||||
const sec = Math.floor(msec / 1e3);
|
||||
const nsec = (msec - sec * 1e3) * 1e6;
|
||||
// Normalizes { sec, nsec } to ensure nsec is unsigned.
|
||||
const nsecInSec = Math.floor(nsec / 1e9);
|
||||
return {
|
||||
sec: sec + nsecInSec,
|
||||
nsec: nsec - nsecInSec * 1e9,
|
||||
};
|
||||
}
|
||||
exports.encodeDateToTimeSpec = encodeDateToTimeSpec;
|
||||
function encodeTimestampExtension(object) {
|
||||
if (object instanceof Date) {
|
||||
const timeSpec = encodeDateToTimeSpec(object);
|
||||
return encodeTimeSpecToTimestamp(timeSpec);
|
||||
}
|
||||
else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
exports.encodeTimestampExtension = encodeTimestampExtension;
|
||||
function decodeTimestampToTimeSpec(data) {
|
||||
const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
|
||||
// data may be 32, 64, or 96 bits
|
||||
switch (data.byteLength) {
|
||||
case 4: {
|
||||
// timestamp 32 = { sec32 }
|
||||
const sec = view.getUint32(0);
|
||||
const nsec = 0;
|
||||
return { sec, nsec };
|
||||
}
|
||||
case 8: {
|
||||
// timestamp 64 = { nsec30, sec34 }
|
||||
const nsec30AndSecHigh2 = view.getUint32(0);
|
||||
const secLow32 = view.getUint32(4);
|
||||
const sec = (nsec30AndSecHigh2 & 0x3) * 0x100000000 + secLow32;
|
||||
const nsec = nsec30AndSecHigh2 >>> 2;
|
||||
return { sec, nsec };
|
||||
}
|
||||
case 12: {
|
||||
// timestamp 96 = { nsec32 (unsigned), sec64 (signed) }
|
||||
const sec = (0, int_1.getInt64)(view, 4);
|
||||
const nsec = view.getUint32(0);
|
||||
return { sec, nsec };
|
||||
}
|
||||
default:
|
||||
throw new DecodeError_1.DecodeError(`Unrecognized data size for timestamp (expected 4, 8, or 12): ${data.length}`);
|
||||
}
|
||||
}
|
||||
exports.decodeTimestampToTimeSpec = decodeTimestampToTimeSpec;
|
||||
function decodeTimestampExtension(data) {
|
||||
const timeSpec = decodeTimestampToTimeSpec(data);
|
||||
return new Date(timeSpec.sec * 1e3 + timeSpec.nsec / 1e6);
|
||||
}
|
||||
exports.decodeTimestampExtension = decodeTimestampExtension;
|
||||
exports.timestampExtension = {
|
||||
type: exports.EXT_TIMESTAMP,
|
||||
encode: encodeTimestampExtension,
|
||||
decode: decodeTimestampExtension,
|
||||
};
|
||||
//# sourceMappingURL=timestamp.js.map
|
||||
Reference in New Issue
Block a user