asn1-ts
Version:
ASN.1 encoding and decoding, including BER, CER, and DER.
74 lines (73 loc) • 2.95 kB
JavaScript
import convertTextToBytes from "../../../utils/convertTextToBytes.mjs";
export default function encodeDuration(value) {
if (value.weeks) {
if (!value.fractional_part) {
return convertTextToBytes(`${value.weeks}W`);
}
else {
const integralAmount = value.weeks;
const fractional_value = (typeof value.fractional_part.fractional_value === "bigint")
? Number(value.fractional_part.fractional_value)
: value.fractional_part.fractional_value;
const number_of_digits = (typeof value.fractional_part.number_of_digits === "bigint")
? Number(value.fractional_part.number_of_digits)
: value.fractional_part.number_of_digits;
const fraction = (fractional_value / Math.pow(10, number_of_digits));
return convertTextToBytes(integralAmount.toString()
+ fraction.toString().slice(1)
+ "W");
}
}
let years = (typeof value.years === "bigint")
? Number(value.years)
: value.years;
let months = (typeof value.months === "bigint")
? Number(value.months)
: value.months;
let days = (typeof value.days === "bigint")
? Number(value.days)
: value.days;
let hours = (typeof value.hours === "bigint")
? Number(value.hours)
: value.hours;
let minutes = (typeof value.minutes === "bigint")
? Number(value.minutes)
: value.minutes;
let seconds = (typeof value.seconds === "bigint")
? Number(value.seconds)
: value.seconds;
if (value.fractional_part) {
const fractional_value = (typeof value.fractional_part.fractional_value === "bigint")
? Number(value.fractional_part.fractional_value)
: value.fractional_part.fractional_value;
const number_of_digits = (typeof value.fractional_part.number_of_digits === "bigint")
? Number(value.fractional_part.number_of_digits)
: value.fractional_part.number_of_digits;
const fraction = fractional_value / Math.pow(10, number_of_digits);
if (seconds !== undefined) {
seconds += fraction;
}
else if (minutes !== undefined) {
minutes += fraction;
}
else if (hours !== undefined) {
hours += fraction;
}
else if (days !== undefined) {
days += fraction;
}
else if (months !== undefined) {
months += fraction;
}
else if (years !== undefined) {
years += fraction;
}
}
return convertTextToBytes((years ? `${years}Y` : "")
+ (months ? `${months}M` : "")
+ (days ? `${days}D` : "")
+ ((hours || minutes || seconds) ? "T" : "")
+ (hours ? `${hours}H` : "")
+ (minutes ? `${minutes}M` : "")
+ (seconds ? `${seconds}S` : ""));
}