| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 | 'use strict';var TIME = /^(\d\d):(\d\d):(\d\d)(\.\d+)?(z|[+-]\d\d:\d\d)?$/i;var DATE_TIME_SEPARATOR = /t|\s/i;var COMPARE_FORMATS = {  date: compareDate,  time: compareTime,  'date-time': compareDateTime};var $dataMetaSchema = {  type: 'object',  required: [ '$data' ],  properties: {    $data: {      type: 'string',      anyOf: [        { format: 'relative-json-pointer' },        { format: 'json-pointer' }      ]    }  },  additionalProperties: false};module.exports = function (minMax) {  var keyword = 'format' + minMax;  return function defFunc(ajv) {    defFunc.definition = {      type: 'string',      inline: require('./dotjs/_formatLimit'),      statements: true,      errors: 'full',      dependencies: ['format'],      metaSchema: {        anyOf: [          {type: 'string'},          $dataMetaSchema        ]      }    };    ajv.addKeyword(keyword, defFunc.definition);    ajv.addKeyword('formatExclusive' + minMax, {      dependencies: ['format' + minMax],      metaSchema: {        anyOf: [          {type: 'boolean'},          $dataMetaSchema        ]      }    });    extendFormats(ajv);    return ajv;  };};function extendFormats(ajv) {  var formats = ajv._formats;  for (var name in COMPARE_FORMATS) {    var format = formats[name];    // the last condition is needed if it's RegExp from another window    if (typeof format != 'object' || format instanceof RegExp || !format.validate)      format = formats[name] = { validate: format };    if (!format.compare)      format.compare = COMPARE_FORMATS[name];  }}function compareDate(d1, d2) {  if (!(d1 && d2)) return;  if (d1 > d2) return 1;  if (d1 < d2) return -1;  if (d1 === d2) return 0;}function compareTime(t1, t2) {  if (!(t1 && t2)) return;  t1 = t1.match(TIME);  t2 = t2.match(TIME);  if (!(t1 && t2)) return;  t1 = t1[1] + t1[2] + t1[3] + (t1[4]||'');  t2 = t2[1] + t2[2] + t2[3] + (t2[4]||'');  if (t1 > t2) return 1;  if (t1 < t2) return -1;  if (t1 === t2) return 0;}function compareDateTime(dt1, dt2) {  if (!(dt1 && dt2)) return;  dt1 = dt1.split(DATE_TIME_SEPARATOR);  dt2 = dt2.split(DATE_TIME_SEPARATOR);  var res = compareDate(dt1[0], dt2[0]);  if (res === undefined) return;  return res || compareTime(dt1[1], dt2[1]);}
 |