Module to enable IoT Agent developers to build custom agents for their devices that can easily connect to NGSI Context Brokers
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
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(), };