UNPKG

dynatrace-cordova-outsystems-plugin

Version:

This plugin gives you the ability to use the Dynatrace instrumentation in your hybrid application (Cordova, Ionic, ..). It uses the Mobile Agent, the JavaScript Agent and the Javascript Bridge. The Mobile Agent will give you all device specific values con

182 lines (153 loc) 3.21 kB
var util = require('util') var isProperty = require('is-property') var INDENT_START = /[\{\[]/ var INDENT_END = /[\}\]]/ // from https://mathiasbynens.be/notes/reserved-keywords var RESERVED = [ 'do', 'if', 'in', 'for', 'let', 'new', 'try', 'var', 'case', 'else', 'enum', 'eval', 'null', 'this', 'true', 'void', 'with', 'await', 'break', 'catch', 'class', 'const', 'false', 'super', 'throw', 'while', 'yield', 'delete', 'export', 'import', 'public', 'return', 'static', 'switch', 'typeof', 'default', 'extends', 'finally', 'package', 'private', 'continue', 'debugger', 'function', 'arguments', 'interface', 'protected', 'implements', 'instanceof', 'NaN', 'undefined' ] var RESERVED_MAP = {} for (var i = 0; i < RESERVED.length; i++) { RESERVED_MAP[RESERVED[i]] = true } var isVariable = function (name) { return isProperty(name) && !RESERVED_MAP.hasOwnProperty(name) } var formats = { s: function(s) { return '' + s }, d: function(d) { return '' + Number(d) }, o: function(o) { return JSON.stringify(o) } } var genfun = function() { var lines = [] var indent = 0 var vars = {} var push = function(str) { var spaces = '' while (spaces.length < indent*2) spaces += ' ' lines.push(spaces+str) } var pushLine = function(line) { if (INDENT_END.test(line.trim()[0]) && INDENT_START.test(line[line.length-1])) { indent-- push(line) indent++ return } if (INDENT_START.test(line[line.length-1])) { push(line) indent++ return } if (INDENT_END.test(line.trim()[0])) { indent-- push(line) return } push(line) } var line = function(fmt) { if (!fmt) return line if (arguments.length === 1 && fmt.indexOf('\n') > -1) { var lines = fmt.trim().split('\n') for (var i = 0; i < lines.length; i++) { pushLine(lines[i].trim()) } } else { pushLine(util.format.apply(util, arguments)) } return line } line.scope = {} line.formats = formats line.sym = function(name) { if (!name || !isVariable(name)) name = 'tmp' if (!vars[name]) vars[name] = 0 return name + (vars[name]++ || '') } line.property = function(obj, name) { if (arguments.length === 1) { name = obj obj = '' } name = name + '' if (isProperty(name)) return (obj ? obj + '.' + name : name) return obj ? obj + '[' + JSON.stringify(name) + ']' : JSON.stringify(name) } line.toString = function() { return lines.join('\n') } line.toFunction = function(scope) { if (!scope) scope = {} var src = 'return ('+line.toString()+')' Object.keys(line.scope).forEach(function (key) { if (!scope[key]) scope[key] = line.scope[key] }) var keys = Object.keys(scope).map(function(key) { return key }) var vals = keys.map(function(key) { return scope[key] }) return Function.apply(null, keys.concat(src)).apply(null, vals) } if (arguments.length) line.apply(null, arguments) return line } genfun.formats = formats module.exports = genfun