UNPKG

trader-server

Version:

OData server for testing strategies, simulating and real trading.

60 lines (57 loc) 2.31 kB
function integer(value:string):number { return +value; } function float(value:string):number { switch (value){ case 'INF': return Infinity; case '-INF': return -Infinity; default: return +value; } } export class Literal{ constructor(type:string, value:string){ let result = (this[type] || (_ => _))(value); this.valueOf = () => result; } static convert(type:string, value:string):any { return (new Literal(type, value)).valueOf(); } 'Edm.String'(value:string){ return decodeURIComponent(value).slice(1, -1).replace(/''/g, "'"); } 'Edm.Byte'(value:string){ return integer(value); } 'Edm.SByte'(value:string){ return integer(value); } 'Edm.Int16'(value:string){ return integer(value); } 'Edm.Int32'(value:string){ return integer(value); } 'Edm.Int64'(value:string){ return integer(value); } 'Edm.Decimal'(value:string){ return float(value); } 'Edm.Double'(value:string){ return float(value); } 'Edm.Single'(value:string){ return float(value); } 'Edm.Boolean'(value:string){ value = value || ''; switch (value.toLowerCase()){ case 'true': return true; case 'false': return false; default: return undefined; } } 'Edm.Guid'(value:string){ return decodeURIComponent(value); } 'Edm.Date'(value:string){ return value; } 'Edm.DateTimeOffset'(value:string){ return new Date(value); } 'null'(value:string){ return null; } 'Edm.TimeOfDay'(value:string){ return new Date(`1970-01-01T${value}Z`); } 'Edm.Duration'(value:string){ var m = value.match(/P([0-9]*D)?T?([0-9]{1,2}H)?([0-9]{1,2}M)?([\.0-9]*S)?/); if (m){ var d = new Date(0); for (var i = 1; i < m.length; i++){ switch (m[i].slice(-1)){ case 'D': d.setDate(parseInt(m[i])); continue; case 'H': d.setHours(parseInt(m[i])); continue; case 'M': d.setMinutes(parseInt(m[i])); continue; case 'S': d.setSeconds(parseFloat(m[i])); continue; } } return d.getTime(); } throw new Error('Invalid Duration'); } }