jaydata-reso
Version:
Jaydata fork for RESO Web API
345 lines (342 loc) • 19.6 kB
JavaScript
$data.oDataConverter = {
fromDb: {
'$data.Byte': $data.Container.proxyConverter,
'$data.SByte': $data.Container.proxyConverter,
'$data.Decimal': $data.Container.proxyConverter,
'$data.Float': $data.Container.proxyConverter,
'$data.Int16': $data.Container.proxyConverter,
'$data.Int64': $data.Container.proxyConverter,
'$data.ObjectID': $data.Container.proxyConverter,
'$data.Integer': $data.Container.proxyConverter,//function (number) { return (typeof number === 'string' && /^\d+$/.test(number)) ? parseInt(number) : number; },
'$data.Int32': $data.Container.proxyConverter,
'$data.Number': $data.Container.proxyConverter,
'$data.Date': function (dbData) {
if (dbData) {
if (dbData instanceof Date) {
return dbData;
} else if (dbData.substring(0, 6) === '/Date(') {
return new Date(parseInt(dbData.substr(6)));
} else {
//ISODate without Z? Safari compatible with Z
if (dbData.indexOf('Z') === -1 && !dbData.match('T.*[+-]'))
dbData += 'Z';
return new Date(dbData);
}
} else {
return dbData;
}
},
'$data.DateTimeOffset': function (dbData) {
if (dbData) {
if (dbData instanceof Date) {
return dbData;
} else if (dbData.substring(0, 6) === '/Date(') {
return new Date(parseInt(dbData.substr(6)));
} else {
//ISODate without Z? Safari compatible with Z
if (dbData.indexOf('Z') === -1 && !dbData.match('T.*[+-]'))
dbData += 'Z';
return new Date(dbData);
}
} else {
return dbData;
}
},
'$data.Time': $data.Container.proxyConverter,
'$data.String': $data.Container.proxyConverter,
'$data.Boolean': $data.Container.proxyConverter,
'$data.Blob': function (v) {
if (typeof v == 'string'){
try { return $data.Container.convertTo(atob(v), '$data.Blob'); }
catch (e) { return v; }
}else return v;
},
'$data.Object': function (o) { if (o === undefined) { return new $data.Object(); } else if (typeof o === 'string') { return JSON.parse(o); } return o; },
'$data.Array': function (o) { if (o === undefined) { return new $data.Array(); } else if (o instanceof $data.Array) { return o; } return JSON.parse(o); },
'$data.GeographyPoint': function (g) { if (g) { return new $data.GeographyPoint(g); } return g; },
'$data.GeographyLineString': function (g) { if (g) { return new $data.GeographyLineString(g); } return g; },
'$data.GeographyPolygon': function (g) { if (g) { return new $data.GeographyPolygon(g); } return g; },
'$data.GeographyMultiPoint': function (g) { if (g) { return new $data.GeographyMultiPoint(g); } return g; },
'$data.GeographyMultiLineString': function (g) { if (g) { return new $data.GeographyMultiLineString(g); } return g; },
'$data.GeographyMultiPolygon': function (g) { if (g) { return new $data.GeographyMultiPolygon(g); } return g; },
'$data.GeographyCollection': function (g) { if (g) { return new $data.GeographyCollection(g); } return g; },
'$data.GeometryPoint': function (g) { if (g) { return new $data.GeometryPoint(g); } return g; },
'$data.GeometryLineString': function (g) { if (g) { return new $data.GeometryLineString(g); } return g; },
'$data.GeometryPolygon': function (g) { if (g) { return new $data.GeometryPolygon(g); } return g; },
'$data.GeometryMultiPoint': function (g) { if (g) { return new $data.GeometryMultiPoint(g); } return g; },
'$data.GeometryMultiLineString': function (g) { if (g) { return new $data.GeometryMultiLineString(g); } return g; },
'$data.GeometryMultiPolygon': function (g) { if (g) { return new $data.GeometryMultiPolygon(g); } return g; },
'$data.GeometryCollection': function (g) { if (g) { return new $data.GeometryCollection(g); } return g; },
'$data.Guid': function (guid) { return guid ? guid.toString() : guid; }
},
toDb: {
'$data.Entity': $data.Container.proxyConverter,
'$data.Byte': $data.Container.proxyConverter,
'$data.SByte': $data.Container.proxyConverter,
'$data.Decimal': $data.Container.proxyConverter,
'$data.Float': $data.Container.proxyConverter,
'$data.Int16': $data.Container.proxyConverter,
'$data.Int64': $data.Container.proxyConverter,
'$data.ObjectID': $data.Container.proxyConverter,
'$data.Integer': $data.Container.proxyConverter,
'$data.Int32': $data.Container.proxyConverter,
'$data.Number': $data.Container.proxyConverter,
'$data.Date': function (e) { return e ? e.toISOString().replace('Z', '') : e; },
'$data.Time': $data.Container.proxyConverter,
'$data.DateTimeOffset': function(v){ return v ? v.toISOString() : v; },
'$data.String': $data.Container.proxyConverter,
'$data.Boolean': $data.Container.proxyConverter,
'$data.Blob': function (v) { return v ? $data.Blob.toBase64(v) : v; },
'$data.Object': $data.Container.proxyConverter,
'$data.Array': $data.Container.proxyConverter,
'$data.GeographyPoint': $data.Container.proxyConverter,
'$data.GeographyLineString': $data.Container.proxyConverter,
'$data.GeographyPolygon': $data.Container.proxyConverter,
'$data.GeographyMultiPoint': $data.Container.proxyConverter,
'$data.GeographyMultiLineString': $data.Container.proxyConverter,
'$data.GeographyMultiPolygon': $data.Container.proxyConverter,
'$data.GeographyCollection': $data.Container.proxyConverter,
'$data.GeometryPoint': $data.Container.proxyConverter,
'$data.GeometryLineString': $data.Container.proxyConverter,
'$data.GeometryPolygon': $data.Container.proxyConverter,
'$data.GeometryMultiPoint': $data.Container.proxyConverter,
'$data.GeometryMultiLineString': $data.Container.proxyConverter,
'$data.GeometryMultiPolygon': $data.Container.proxyConverter,
'$data.GeometryCollection': $data.Container.proxyConverter,
'$data.Guid': $data.Container.proxyConverter
},
escape: {
'$data.Entity': function (e) { return JSON.stringify(e); },
'$data.Integer': $data.Container.proxyConverter,
'$data.Int32': $data.Container.proxyConverter,
'$data.Number': $data.Container.proxyConverter, // double: 13.5D
'$data.Int16': $data.Container.proxyConverter,
'$data.Byte': $data.Container.proxyConverter,
'$data.SByte': $data.Container.proxyConverter,
'$data.Decimal': function (v) { return v ? v + 'm' : v; },
'$data.Float': function (v) { return v ? v + 'f' : v; },
'$data.Int64': function (v) { return v ? v + 'L' : v; },
'$data.Time': function (v) { return v ? "time'" + v + "'" : v; },
'$data.DateTimeOffset': function (date) { return date ? "datetimeoffset'" + date + "'" : date; },
'$data.Date': function (date) { return date ? "datetime'" + date + "'" : date; },
'$data.String': function (text) { return typeof text === 'string' ? "'" + text.replace(/'/g, "''") + "'" : text; },
'$data.ObjectID': function (text) { return typeof text === 'string' ? "'" + text.replace(/'/g, "''") + "'" : text; },
'$data.Boolean': function (bool) { return typeof bool === 'boolean' ? bool.toString() : bool; },
'$data.Blob': function (b) { return b ? "X'" + $data.Blob.toHexString($data.Container.convertTo(atob(b), $data.Blob)) + "'" : b; },
'$data.Object': function (o) { return JSON.stringify(o); },
'$data.Array': function (o) { return JSON.stringify(o); },
'$data.GeographyPoint': function (g) { if (g) { return $data.GeographyBase.stringifyToUrl(g); } return g; },
'$data.GeographyLineString': function (g) { if (g) { return $data.GeographyBase.stringifyToUrl(g); } return g; },
'$data.GeographyPolygon': function (g) { if (g) { return $data.GeographyBase.stringifyToUrl(g); } return g; },
'$data.GeographyMultiPoint': function (g) { if (g) { return $data.GeographyBase.stringifyToUrl(g); } return g; },
'$data.GeographyMultiLineString': function (g) { if (g) { return $data.GeographyBase.stringifyToUrl(g); } return g; },
'$data.GeographyMultiPolygon': function (g) { if (g) { return $data.GeographyBase.stringifyToUrl(g); } return g; },
'$data.GeographyCollection': function (g) { if (g) { return $data.GeographyBase.stringifyToUrl(g); } return g; },
'$data.GeometryPoint': function (g) { if (g) { return $data.GeometryBase.stringifyToUrl(g); } return g; },
'$data.GeometryLineString': function (g) { if (g) { return $data.GeometryBase.stringifyToUrl(g); } return g; },
'$data.GeometryPolygon': function (g) { if (g) { return $data.GeometryBase.stringifyToUrl(g); } return g; },
'$data.GeometryMultiPoint': function (g) { if (g) { return $data.GeometryBase.stringifyToUrl(g); } return g; },
'$data.GeometryMultiLineString': function (g) { if (g) { return $data.GeometryBase.stringifyToUrl(g); } return g; },
'$data.GeometryMultiPolygon': function (g) { if (g) { return $data.GeometryBase.stringifyToUrl(g); } return g; },
'$data.GeometryCollection': function (g) { if (g) { return $data.GeometryBase.stringifyToUrl(g); } return g; },
'$data.Guid': function (guid) { return guid ? ("guid'" + guid.toString() + "'") : guid; }
},
unescape: {
'$data.Entity': function (v, c) {
var config = c || {};
var value = JSON.parse(v);
if (value && config.type) {
var type = Container.resolveType(config.type);
/*Todo converter*/
return new type(value, { converters: undefined });
}
return value;
},
'$data.Number': function (v) { return JSON.parse(v); },
'$data.Integer': function (v) { return JSON.parse(v); },
'$data.Int32': function (v) { return JSON.parse(v); },
'$data.Byte': function (v) { return JSON.parse(v); },
'$data.SByte': function (v) { return JSON.parse(v); },
'$data.Decimal': function (v) {
if (typeof v === 'string' && v.toLowerCase().lastIndexOf('m') === v.length - 1) {
return v.substr(0, v.length - 1);
} else {
return v;
}
},
'$data.Float': function (v) {
if (typeof v === 'string' && v.toLowerCase().lastIndexOf('f') === v.length - 1) {
return v.substr(0, v.length - 1);
} else {
return v;
}
},
'$data.Int16': function (v) { return JSON.parse(v); },
'$data.Int64': function (v) {
if (typeof v === 'string' && v.toLowerCase().lastIndexOf('l') === v.length - 1) {
return v.substr(0, v.length - 1);
} else {
return v;
}
},
'$data.Boolean': function (v) { return JSON.parse(v); },
'$data.Date': function (v) {
if (typeof v === 'string' && /^datetime'/.test(v)) {
return v.slice(9, v.length - 1);
}
return v;
},
'$data.String': function (v) {
if (typeof v === 'string' && v.indexOf("'") === 0 && v.lastIndexOf("'") === v.length - 1) {
return v.slice(1, v.length - 1);
} else {
return v;
}
},
'$data.ObjectID': function (v) {
if (typeof v === 'string' && v.indexOf("'") === 0 && v.lastIndexOf("'") === v.length - 1) {
return v.slice(1, v.length - 1);
} else {
return v;
}
},
'$data.Guid': function (v) {
if (/^guid'\w{8}-\w{4}-\w{4}-\w{4}-\w{12}'$/.test(v)) {
var data = v.slice(5, v.length - 1)
return $data.parseGuid(data).toString();
}
return v;
},
'$data.Array': function (v, c) {
var config = c || {};
var value = JSON.parse(v) || [];
if (value && config.elementType) {
var type = Container.resolveType(config.elementType);
var typeName = Container.resolveName(type);
if (type && type.isAssignableTo && type.isAssignableTo($data.Entity)) {
typeName = $data.Entity.fullName;
}
if (Array.isArray(value)) {
var converter = $data.oDataConverter.unescape[typeName];
for (var i = 0; i < value.length; i++) {
value[i] = converter ? converter(value[i]) : value[i];
}
}
return value;
}
return value;
},
'$data.DateTimeOffset': function (v) {
if (typeof v === 'string' && /^datetimeoffset'/.test(v)) {
return $data.Container.convertTo(v.slice(15, v.length - 1), $data.DateTimeOffset);
}
return v;
},
'$data.Time': function (v) {
if (typeof v === 'string' && /^time'/.test(v)) {
return $data.Container.convertTo(v.slice(5, v.length - 1), $data.Time);
}
return v;
},
'$data.Blob': function(v){
if (typeof v === 'string'){
if (/^X'/.test(v)){
return $data.Blob.createFromHexString(v.slice(2, v.length - 1));
}else if (/^binary'/.test(v)){
return $data.Blob.createFromHexString(v.slice(7, v.length - 1));
}
}
return v;
},
'$data.Object': function (v) { return JSON.parse(v); },
'$data.GeographyPoint': function (v) {
if (/^geography'POINT\(/i.test(v)) {
var data = v.slice(10, v.length - 1);
return $data.GeographyBase.parseFromString(data);
}
return v;
},
'$data.GeographyPolygon': function (v) {
if (/^geography'POLYGON\(/i.test(v)) {
var data = v.slice(10, v.length - 1);
return $data.GeographyBase.parseFromString(data);
}
return v;
},
'$data.GeometryPoint': function (v) {
if (/^geometry'POINT\(/i.test(v)) {
var data = v.slice(9, v.length - 1);
return $data.GeometryBase.parseFromString(data);
}
return v;
},
'$data.GeometryPolygon': function (v) {
if (/^geometry'POLYGON\(/i.test(v)) {
var data = v.slice(9, v.length - 1);
return $data.GeometryBase.parseFromString(data);
}
return v;
}
},
xmlEscape: {
'$data.Byte': function (v) { return v.toString(); },
'$data.SByte': function (v) { return v.toString(); },
'$data.Decimal': function (v) { return v.toString(); },
'$data.Float': function (v) { return v.toString(); },
'$data.Int16': function (v) { return v.toString(); },
'$data.Int64': function (v) { return v.toString(); },
'$data.Integer': function (v) { return v.toString(); },
'$data.Int32': function (v) { return v.toString(); },
'$data.Boolean': function (v) { return v.toString(); },
'$data.Blob': function (v) { return $data.Blob.toBase64(v); },
'$data.Date': function (v) { return v.toISOString().replace('Z', ''); },
'$data.DateTimeOffset': function(v){ return v.toISOString(); },
'$data.Time': function (v) { return v.toString(); },
'$data.Number': function (v) { return v.toString(); },
'$data.Integer': function (v) { return v.toString(); },
'$data.Int32': function (v) { return v.toString(); },
'$data.String': function (v) { return v.toString(); },
'$data.ObjectID': function (v) { return v.toString(); },
'$data.Object': function (v) { return JSON.stringify(v); },
'$data.Guid': function (v) { return v.toString(); }/*,
'$data.GeographyPoint': function (v) { return this._buildSpatialPoint(v, 'http://www.opengis.net/def/crs/EPSG/0/4326'); },
'$data.GeometryPoint': function (v) { return this._buildSpatialPoint(v, 'http://www.opengis.net/def/crs/EPSG/0/0'); },
'$data.GeographyLineString': function (v) { return this._buildSpatialLineString(v, 'http://www.opengis.net/def/crs/EPSG/0/4326'); },
'$data.GeometryLineString': function (v) { return this._buildSpatialLineString(v, 'http://www.opengis.net/def/crs/EPSG/0/0'); }*/
},
simple: { //$value, $count
'$data.Byte': function (v) { return v.toString(); },
'$data.SByte': function (v) { return v.toString(); },
'$data.Decimal': function (v) { return v.toString(); },
'$data.Float': function (v) { return v.toString(); },
'$data.Int16': function (v) { return v.toString(); },
'$data.Int64': function (v) { return v.toString(); },
'$data.ObjectID': function (o) { return o.toString(); },
'$data.Integer': function (o) { return o.toString(); },
'$data.Int32': function (o) { return o.toString(); },
'$data.Number': function (o) { return o.toString(); },
'$data.Date': function (o) { return o instanceof $data.Date ? o.toISOString().replace('Z', '') : o.toString() },
'$data.DateTimeOffset': function(v){ return v ? v.toISOString() : v; },
'$data.Time': function (o) { return o.toString(); },
'$data.String': function (o) { return o.toString(); },
'$data.Boolean': function (o) { return o.toString(); },
'$data.Blob': function (o) { return o; },
'$data.Object': function (o) { return JSON.stringify(o); },
'$data.Array': function (o) { return JSON.stringify(o); },
'$data.Guid': function (o) { return o.toString(); },
'$data.GeographyPoint': function (o) { return JSON.stringify(o); },
'$data.GeometryPoint': function (o) { return JSON.stringify(o); },
'$data.GeographyLineString': function (o) { return JSON.stringify(o); },
'$data.GeographyPolygon': function (o) { return JSON.stringify(o); },
'$data.GeographyMultiPoint': function (o) { return JSON.stringify(o); },
'$data.GeographyMultiLineString': function (o) { return JSON.stringify(o); },
'$data.GeographyMultiPolygon': function (o) { return JSON.stringify(o); },
'$data.GeographyCollection': function (o) { return JSON.stringify(o); },
'$data.GeometryLineString': function (o) { return JSON.stringify(o); },
'$data.GeometryPolygon': function (o) { return JSON.stringify(o); },
'$data.GeometryMultiPoint': function (o) { return JSON.stringify(o); },
'$data.GeometryMultiLineString': function (o) { return JSON.stringify(o); },
'$data.GeometryMultiPolygon': function (o) { return JSON.stringify(o); },
'$data.GeometryCollection': function (o) { return JSON.stringify(o); }
}
};