UNPKG

rtech-struct

Version:

Rtech Platform Superstruct Entity

96 lines (78 loc) 2.12 kB
const s = require('superstruct') const moment = require('moment-timezone') const isUuid = require('is-uuid') const Uuid = s.define('Uuid', isUuid.v4) const zdReg = /^(?<dateTime>\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2})(\.\d{3})?Z$/ const isoReg = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?(Z|(\+|\-)\d{2}:?\d{2})$/ const pReg = /^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\s./0-9]*$/ const ZuluDateTimeStruct = s.define('ZuluDateTimeStruct', (date) => { try { // * Test the regex on the date and only get the datetime group without the µs const rgResult = zdReg.exec(date) if (rgResult === null) { return false } // * return the comparison between the formatted date and the datetime group // * if the formatted date does not exist, like 30th of February, they will be different return new Date(date).toISOString().includes(rgResult.groups.dateTime) } catch (error) { return false } }) const isTimezone = (value) => { if (typeof value !== 'string') { return false } return moment.tz.zone(value) !== null } const Timezone = s.define('Timezone', isTimezone) const isEmail = (value) => { if (typeof value !== 'string') { return false } const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/ return emailRegex.test(value) } const Email = s.define('Email', isEmail) const Tz = s.define('Tz', (value) => { try { new Intl.DateTimeFormat('en-US', { timeZone: value }).format() return true } catch (e) { return false } }) const zouloudate = (s) => { return s.pattern(s.string(), zdReg) } const isodate = () => { return s.pattern(s.string(), isoReg) } const phone = (s) => { return s.pattern(s.string(), pReg) } const consts = () => { return { zdReg, pReg, isoReg } } const gpsarray = (s) => { return s.size(s.array(s.pattern(s.string(), /(-)?\d+\.\d+/)), 0, 2) } const gpsstring = (s) => { return s.pattern(s.string(), /(-)?\d+(\.\d+)?,(-)?\d+(\.\d+)?/) } module.exports = { Uuid, zdReg, isoReg, pReg, ZuluDateTimeStruct, Tz, Timezone, Email, zouloudate, isodate, phone, consts, gpsarray, gpsstring }