telefonicaid / iotagent-node-lib

Module to enable IoT Agent developers to build custom agents for their devices that can easily connect to NGSI Context Brokers
https://iotagent-node-lib.rtfd.io/
GNU Affero General Public License v3.0
60 stars 85 forks source link

Missing JEXL default transformations (Floor) #1308

Closed mrutid closed 1 year ago

mrutid commented 1 year ago

I miss some necessary JEXL transformations, here the most recent list (from URBO):

const JexlTransformMap = { jsonparse: str => JSON.parse(str), jsonstringify: obj => JSON.stringify(obj), indexOf: (val, char) => String(val).indexOf(char), length: val => String(val).length, trim: val => String(val).trim(), substr: (val, int1, int2) => String(val).substring(int1, int2), addreduce: arr => arr.reduce((i, v) => i + v), lengtharray: arr => arr.length, typeof: val => typeof val, isarray: arr => Array.isArray(arr), isnan: val => isNaN(val), parseint: (val, radix = 10) => parseInt(val, radix), parsefloat: val => parseFloat(val), toisodate: val => new Date(val).toISOString(), timeoffset: isostr => new Date(isostr).getTimezoneOffset(), tostring: val => val.toString(), urlencode: val => encodeURI(val), urldecode: val => decodeURI(val), replacestr: (str, from, to) => str.replace(from, to), replaceregexp: (str, reg, to) => str.replace(new RegExp(reg), to), // FIME #3987 Old browsers dont support str.replaceAll fn, use replaceallregexp instead // tslint:disable-next-line:max-line-length // support matrix: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replaceAll#browser_compatibility // replaceallstr: (str, from, to) => str.replaceAll(from, to) replaceallregexp: (str, reg, to) => str.replace(new RegExp(reg, 'g'), to), split: (str, ch) => str.split(ch), joinarrtostr: (arr, ch) => arr.join(ch), concatarr: (arr, arr2) => arr.concat(arr2), mapper: (val, values, choices) => choices[values.findIndex(target => target === val)], thmapper: (val, values, choices) => choices[ values.reduce( (acc, curr, i) => (acc === 0 || acc ? acc : val <= curr ? (acc = i) : (acc = null)), null, ) ], bitwisemask: (i, mask, op, shf) => (op === '&' ? parseInt(i, 10) & mask : op === '|' ? parseInt(i, 10) | mask : op === '^' ? parseInt(i, 10) ^ mask : i) >> shf, slice: (arr, init, end) => arr.slice(init, end), addset: (arr, x) => Array.from(new Set(arr).add(x)), removeset: (arr, x) => { const s = new Set(arr); s.delete(x); return Array.from(s); }, touppercase: val => String(val).toUpperCase(), tolowercase: val => String(val).toLowerCase(), floor: val => Math.floor(val), ceil: val => Math.ceil(val), round: val => Math.round(val), toFixed: (val, decimals) => Number.parseFloat(val).toFixed(decimals), getTime: d => new Date(d).getTime(), toISOString: d => new Date(d).toISOString(), // https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString localeString: (d, timezone, options) => new Date(d).toLocaleString(timezone, options), now: () => Date.now(), };

fgalan commented 1 year ago

Fixed in PR https://github.com/telefonicaid/iotagent-node-lib/pull/1309

fgalan commented 1 year ago

..and PR https://github.com/telefonicaid/iotagent-node-lib/pull/1311