UNPKG

jaydata

Version:

Cross-platform HTML5 data-management, JavaScript Language Query (JSLQ) support for OData, SQLite, WebSQL, IndexedDB, YQL and Facebook (packaged for Node.JS)

389 lines (343 loc) 11.5 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; var _TypeSystem = require('../TypeSystem.js'); var _TypeSystem2 = _interopRequireDefault(_TypeSystem); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } _TypeSystem2.default.Container.registerConverter('$data.Boolean', { '$data.String': function $dataString(value) { if (value.toLowerCase() == 'true') return true; if (value.toLowerCase() == 'false') return false; return !!value; }, 'default': function _default(value) { return !!value; } }); _TypeSystem2.default.Container.registerConverter('$data.Integer', { 'default': function _default(value) { if (value === Number.POSITIVE_INFINITY || value === Number.NEGATIVE_INFINITY || value === Number.MAX_VALUE || value === Number.MIN_VALUE) { return value; } var r = parseInt(+value, 10); if (isNaN(r)) throw 0; return r; } }); _TypeSystem2.default.Container.registerConverter('$data.Int32', { 'default': function _default(value) { return value | 0; } }); _TypeSystem2.default.Container.registerConverter('$data.Number', { 'default': function _default(value) { var r = +value; if (isNaN(r)) throw 0; return r; } }); _TypeSystem2.default.Container.registerConverter('$data.Byte', { 'default': function _default(value) { return (value | 0) & 0xff; } }); _TypeSystem2.default.Container.registerConverter('$data.Date', { 'default': function _default(value) { var d = new Date(value); if (isNaN(d)) throw 0; return d; } }); _TypeSystem2.default.Container.registerConverter('$data.DateTimeOffset', { '$data.Date': function $dataDate(value) { return value; }, 'default': function _default(value) { var d = new Date(value); if (isNaN(d)) throw 0; return d; } }); (function () { function parseFromString(value) { var regex = /^([0-9]|0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]|[0-9])(:([0-5][0-9]|[0-9])(\.(\d+))?)?$/; var matches = regex.exec(value); if (!matches) throw 0; var time = ''; time += ('00' + matches[1]).slice(-2); time += ':' + ('00' + matches[2]).slice(-2); if (matches[4]) { time += ':' + ('00' + matches[4]).slice(-2); } else { time += ':00'; } if (matches[6]) time += '.' + (matches[6] + '000').slice(0, 3); return time; } _TypeSystem2.default.Container.registerConverter('$data.Time', { '$data.String': parseFromString, '$data.Number': function tt(value) { var metrics = [1000, 60, 60]; var result = [0, 0, 0, value | 0]; for (var i = 0; i < metrics.length; i++) { result[metrics.length - (i + 1)] = result[metrics.length - i] / metrics[i] | 0; result[metrics.length - i] -= result[metrics.length - (i + 1)] * metrics[i]; } var time = ''; for (var i = 0; i < result.length; i++) { if (i < result.length - 1) { time += ('00' + result[i]).slice(-2); if (i < result.length - 2) time += ':'; } else { time += '.' + ('000' + result[i]).slice(-3); } } return parseFromString(time); }, '$data.Date': function $dataDate(value) { var val = value.getHours() + ':' + value.getMinutes() + ':' + value.getSeconds(); var ms = value.getMilliseconds(); if (ms) { val += '.' + ms; } return parseFromString(val); } }); })(); (function () { function parseFromString(value) { var regex = /^(-?)([0-9]{1,4})-(1[0-2]|0[0-9]|[0-9])-([0-2][0-9]|3[0-1]|[0-9])$/; var matches = regex.exec(value); if (!matches) throw 0; var date = matches[1]; date += ('0000' + matches[2]).slice(-4); date += '-' + ('00' + matches[3]).slice(-2); date += '-' + ('00' + matches[4]).slice(-2); return date; } function parseFromDate(value) { var val = value.getFullYear() + '-' + (value.getMonth() + 1) + '-' + value.getDate(); return parseFromString(val); } _TypeSystem2.default.Container.registerConverter('$data.Day', { '$data.String': parseFromString, '$data.Number': function tt(value) { var t = 1000 * 60 * 60 * 24; var day = value * t; if (isNaN(day)) throw 0; return parseFromDate(new Date(day)); }, '$data.Date': parseFromDate }); })(); (function () { function parseFromString(value) { return value; } _TypeSystem2.default.Container.registerConverter('$data.Duration', { '$data.String': parseFromString }); })(); _TypeSystem2.default.Container.registerConverter('$data.Decimal', { '$data.Boolean': function $dataBoolean(value) { return value ? '1' : '0'; }, '$data.Number': function $dataNumber(value) { return value.toString(); }, '$data.String': function $dataString(value) { if (!/^\-?([0-9]+(\.[0-9]+)?|Infinity)$/.test(value)) throw 0; return value; }, '$data.Date': function $dataDate(value) { var r = value.valueOf(); if (isNaN(r)) throw 0; return r.toString(); } }); _TypeSystem2.default.packIEEE754 = function (v, ebits, fbits) { var bias = (1 << ebits - 1) - 1, s, e, f, ln, i, bits, str, bytes; // Compute sign, exponent, fraction if (v !== v) { // NaN // http://dev.w3.org/2006/webapi/WebIDL/#es-type-mapping e = (1 << bias) - 1;f = Math.pow(2, fbits - 1);s = 0; } else if (v === Infinity || v === -Infinity) { e = (1 << bias) - 1;f = 0;s = v < 0 ? 1 : 0; } else if (v === 0) { e = 0;f = 0;s = 1 / v === -Infinity ? 1 : 0; } else { s = v < 0; v = Math.abs(v); if (v >= Math.pow(2, 1 - bias)) { // Normalized ln = Math.min(Math.floor(Math.log(v) / Math.LN2), bias); e = ln + bias; f = Math.round(v * Math.pow(2, fbits - ln) - Math.pow(2, fbits)); } else { // Denormalized e = 0; f = Math.round(v / Math.pow(2, 1 - bias - fbits)); } } // Pack sign, exponent, fraction bits = []; for (i = fbits; i; i -= 1) { bits.push(f % 2 ? 1 : 0);f = Math.floor(f / 2); } for (i = ebits; i; i -= 1) { bits.push(e % 2 ? 1 : 0);e = Math.floor(e / 2); } bits.push(s ? 1 : 0); bits.reverse(); str = bits.join(''); // Bits to bytes bytes = []; while (str.length) { bytes.push(parseInt(str.substring(0, 8), 2)); str = str.substring(8); } return bytes; }; _TypeSystem2.default.unpackIEEE754 = function (bytes, ebits, fbits) { // Bytes to bits var bits = [], i, j, b, str, bias, s, e, f; for (i = bytes.length; i; i -= 1) { b = bytes[i - 1]; for (j = 8; j; j -= 1) { bits.push(b % 2 ? 1 : 0);b = b >> 1; } } bits.reverse(); str = bits.join(''); // Unpack sign, exponent, fraction bias = (1 << ebits - 1) - 1; s = parseInt(str.substring(0, 1), 2) ? -1 : 1; e = parseInt(str.substring(1, 1 + ebits), 2); f = parseInt(str.substring(1 + ebits), 2); // Produce number if (e === (1 << ebits) - 1) { return f !== 0 ? NaN : s * Infinity; } else if (e > 0) { // Normalized return s * Math.pow(2, e - bias) * (1 + f / Math.pow(2, fbits)); } else if (f !== 0) { // Denormalized return s * Math.pow(2, -(bias - 1)) * (f / Math.pow(2, fbits)); } else { return s < 0 ? -0 : 0; } }; _TypeSystem2.default.IEEE754 = function (v, e, f) { return _TypeSystem2.default.unpackIEEE754(_TypeSystem2.default.packIEEE754(v, e, f), e, f); }; _TypeSystem2.default.Container.registerConverter('$data.Float', { 'default': function _default(value) { var r = +value; if (isNaN(r)) throw 0; return _TypeSystem2.default.IEEE754(r, 8, 23); } }); _TypeSystem2.default.Container.registerConverter('$data.Int16', { 'default': function _default(value) { var r = (value | 0) & 0xffff; if (r >= 0x8000) return r - 0x10000; return r; } }); _TypeSystem2.default.Container.registerConverter('$data.Int64', { '$data.Boolean': function $dataBoolean(value) { return value ? '1' : '0'; }, '$data.Number': function $dataNumber(value) { var r = value.toString(); if (r.indexOf('.') > 0) return r.split('.')[0]; if (r.indexOf('.') == 0) throw 0; return r; }, '$data.String': function $dataString(value) { if (!/^\-?([0-9]+(\.[0-9]+)?|Infinity)$/.test(value)) throw 0; if (value.indexOf('.') > 0) return value.split('.')[0]; if (value.indexOf('.') == 0) throw 0; return value; }, '$data.Date': function $dataDate(value) { var r = value.valueOf(); if (isNaN(r)) throw 0; return r.toString(); } }); _TypeSystem2.default.Container.registerConverter('$data.SByte', { 'default': function _default(value) { var r = (value | 0) & 0xff; if (r >= 0x80) return r - 0x100; return r; } }); _TypeSystem2.default.Container.registerConverter('$data.String', { '$data.Date': function $dataDate(value) { return value.toISOString(); }, '$data.ObjectID': function $dataObjectID(value) { return btoa(value.toString()); }, 'default': function _default(value) { if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') return JSON.stringify(value); return value.toString(); } }); _TypeSystem2.default.Container.registerConverter('$data.Object', { '$data.String': function $dataString(value) { return JSON.parse(value); }, '$data.Function': function $dataFunction() { throw 0; } }); _TypeSystem2.default.Container.registerConverter('$data.Array', { '$data.String': function $dataString(value) { var r = JSON.parse(value); if (!Array.isArray(r)) throw 0; return r; } }); _TypeSystem2.default.Container.registerConverter('$data.ObjectID', { '$data.ObjectID': function $dataObjectID(value) { try { return btoa(value.toString()); } catch (e) { return value; } }, '$data.String': function $dataString(id) { return id; } }); _TypeSystem2.default.Container.proxyConverter = function (v) { return v; }; _TypeSystem2.default.Container.defaultConverter = function (type) { return function (v) { return _TypeSystem2.default.Container.convertTo(v, type); }; }; exports.default = _TypeSystem2.default; module.exports = exports['default'];