UNPKG

@softchef/cdk-iot-device-management

Version:

IoT device management is composed of things, thing types, thing groups, jobs, files API services. The constructs can be used independently, that are based on full-managed service to create an API Gateway & Lambda function.

151 lines (150 loc) 7.68 kB
import { __read } from "tslib"; import { strictParseByte, strictParseDouble, strictParseFloat32, strictParseShort } from "./parse-utils"; var DAYS = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; var MONTHS = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; export function dateToUtcString(date) { var year = date.getUTCFullYear(); var month = date.getUTCMonth(); var dayOfWeek = date.getUTCDay(); var dayOfMonthInt = date.getUTCDate(); var hoursInt = date.getUTCHours(); var minutesInt = date.getUTCMinutes(); var secondsInt = date.getUTCSeconds(); var dayOfMonthString = dayOfMonthInt < 10 ? "0" + dayOfMonthInt : "" + dayOfMonthInt; var hoursString = hoursInt < 10 ? "0" + hoursInt : "" + hoursInt; var minutesString = minutesInt < 10 ? "0" + minutesInt : "" + minutesInt; var secondsString = secondsInt < 10 ? "0" + secondsInt : "" + secondsInt; return DAYS[dayOfWeek] + ", " + dayOfMonthString + " " + MONTHS[month] + " " + year + " " + hoursString + ":" + minutesString + ":" + secondsString + " GMT"; } var RFC3339 = new RegExp(/^(\d{4})-(\d{2})-(\d{2})[tT](\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?[zZ]$/); export var parseRfc3339DateTime = function (value) { if (value === null || value === undefined) { return undefined; } if (typeof value !== "string") { throw new TypeError("RFC-3339 date-times must be expressed as strings"); } var match = RFC3339.exec(value); if (!match) { throw new TypeError("Invalid RFC-3339 date-time value"); } var _a = __read(match, 8), _ = _a[0], yearStr = _a[1], monthStr = _a[2], dayStr = _a[3], hours = _a[4], minutes = _a[5], seconds = _a[6], fractionalMilliseconds = _a[7]; var year = strictParseShort(stripLeadingZeroes(yearStr)); var month = parseDateValue(monthStr, "month", 1, 12); var day = parseDateValue(dayStr, "day", 1, 31); return buildDate(year, month, day, { hours: hours, minutes: minutes, seconds: seconds, fractionalMilliseconds: fractionalMilliseconds }); }; var IMF_FIXDATE = new RegExp(/^(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d{2}) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d{2}):(\d{2}):(\d{2})(?:\.(\d+))? GMT$/); var RFC_850_DATE = new RegExp(/^(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d{2})-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d{2}) (\d{2}):(\d{2}):(\d{2})(?:\.(\d+))? GMT$/); var ASC_TIME = new RegExp(/^(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( [1-9]|\d{2}) (\d{2}):(\d{2}):(\d{2})(?:\.(\d+))? (\d{4})$/); export var parseRfc7231DateTime = function (value) { if (value === null || value === undefined) { return undefined; } if (typeof value !== "string") { throw new TypeError("RFC-7231 date-times must be expressed as strings"); } var match = IMF_FIXDATE.exec(value); if (match) { var _a = __read(match, 8), _1 = _a[0], dayStr = _a[1], monthStr = _a[2], yearStr = _a[3], hours = _a[4], minutes = _a[5], seconds = _a[6], fractionalMilliseconds = _a[7]; return buildDate(strictParseShort(stripLeadingZeroes(yearStr)), parseMonthByShortName(monthStr), parseDateValue(dayStr, "day", 1, 31), { hours: hours, minutes: minutes, seconds: seconds, fractionalMilliseconds: fractionalMilliseconds }); } match = RFC_850_DATE.exec(value); if (match) { var _b = __read(match, 8), _2 = _b[0], dayStr = _b[1], monthStr = _b[2], yearStr = _b[3], hours = _b[4], minutes = _b[5], seconds = _b[6], fractionalMilliseconds = _b[7]; return adjustRfc850Year(buildDate(parseTwoDigitYear(yearStr), parseMonthByShortName(monthStr), parseDateValue(dayStr, "day", 1, 31), { hours: hours, minutes: minutes, seconds: seconds, fractionalMilliseconds: fractionalMilliseconds, })); } match = ASC_TIME.exec(value); if (match) { var _c = __read(match, 8), _3 = _c[0], monthStr = _c[1], dayStr = _c[2], hours = _c[3], minutes = _c[4], seconds = _c[5], fractionalMilliseconds = _c[6], yearStr = _c[7]; return buildDate(strictParseShort(stripLeadingZeroes(yearStr)), parseMonthByShortName(monthStr), parseDateValue(dayStr.trimLeft(), "day", 1, 31), { hours: hours, minutes: minutes, seconds: seconds, fractionalMilliseconds: fractionalMilliseconds }); } throw new TypeError("Invalid RFC-7231 date-time value"); }; export var parseEpochTimestamp = function (value) { if (value === null || value === undefined) { return undefined; } var valueAsDouble; if (typeof value === "number") { valueAsDouble = value; } else if (typeof value === "string") { valueAsDouble = strictParseDouble(value); } else { throw new TypeError("Epoch timestamps must be expressed as floating point numbers or their string representation"); } if (Number.isNaN(valueAsDouble) || valueAsDouble === Infinity || valueAsDouble === -Infinity) { throw new TypeError("Epoch timestamps must be valid, non-Infinite, non-NaN numerics"); } return new Date(Math.round(valueAsDouble * 1000)); }; var buildDate = function (year, month, day, time) { var adjustedMonth = month - 1; validateDayOfMonth(year, adjustedMonth, day); return new Date(Date.UTC(year, adjustedMonth, day, parseDateValue(time.hours, "hour", 0, 23), parseDateValue(time.minutes, "minute", 0, 59), parseDateValue(time.seconds, "seconds", 0, 60), parseMilliseconds(time.fractionalMilliseconds))); }; var parseTwoDigitYear = function (value) { var thisYear = new Date().getUTCFullYear(); var valueInThisCentury = Math.floor(thisYear / 100) * 100 + strictParseShort(stripLeadingZeroes(value)); if (valueInThisCentury < thisYear) { return valueInThisCentury + 100; } return valueInThisCentury; }; var FIFTY_YEARS_IN_MILLIS = 50 * 365 * 24 * 60 * 60 * 1000; var adjustRfc850Year = function (input) { if (input.getTime() - new Date().getTime() > FIFTY_YEARS_IN_MILLIS) { return new Date(Date.UTC(input.getUTCFullYear() - 100, input.getUTCMonth(), input.getUTCDate(), input.getUTCHours(), input.getUTCMinutes(), input.getUTCSeconds(), input.getUTCMilliseconds())); } return input; }; var parseMonthByShortName = function (value) { var monthIdx = MONTHS.indexOf(value); if (monthIdx < 0) { throw new TypeError("Invalid month: " + value); } return monthIdx + 1; }; var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; var validateDayOfMonth = function (year, month, day) { var maxDays = DAYS_IN_MONTH[month]; if (month === 1 && isLeapYear(year)) { maxDays = 29; } if (day > maxDays) { throw new TypeError("Invalid day for " + MONTHS[month] + " in " + year + ": " + day); } }; var isLeapYear = function (year) { return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0); }; var parseDateValue = function (value, type, lower, upper) { var dateVal = strictParseByte(stripLeadingZeroes(value)); if (dateVal < lower || dateVal > upper) { throw new TypeError(type + " must be between " + lower + " and " + upper + ", inclusive"); } return dateVal; }; var parseMilliseconds = function (value) { if (value === null || value === undefined) { return 0; } return strictParseFloat32("0." + value) * 1000; }; var stripLeadingZeroes = function (value) { var idx = 0; while (idx < value.length - 1 && value.charAt(idx) === "0") { idx++; } if (idx === 0) { return value; } return value.slice(idx); };