UNPKG

asn1-ts

Version:

ASN.1 encoding and decoding, including BER, CER, and DER.

74 lines (73 loc) 2.95 kB
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` : "")); }