{"version":3,"sources":["meteor://💻app/packages/logging/logging.js","meteor://💻app/packages/logging/logging_server.js"],"names":["_objectSpread","module","link","default","v","export","Log","Meteor","hasOwn","Object","prototype","hasOwnProperty","info","intercept","interceptedLines","suppress","_intercept","count","_suppress","_intercepted","lines","outputFormat","LEVEL_COLORS","debug","warn","error","META_COLOR","isWin32","process","platform","platformColor","color","endsWith","RESTRICTED_KEYS","FORMATTED_KEYS","logInBrowser","obj","str","format","level","console","log","apply","Function","bind","call","_getCallerDetails","getStack","err","Error","stack","line","split","slice","match","file","details","exec","forEach","arg","intercepted","RegExp","Date","message","String","toString","key","omitCallerDetails","time","isProduction","push","EJSON","stringify","isServer","parse","startsWith","e","options","timeInexact","lineNumber","app","appName","originApp","program","satellite","stderr","keys","length","pad2","n","padStart","pad3","dateStamp","getFullYear","getMonth","getDate","timeStamp","getHours","getMinutes","getSeconds","getMilliseconds","utcOffsetStr","getTimezoneOffset","appInfo","sourceInfoParts","sourceInfo","join","stderrIndicator","metaPrefix","charAt","toUpperCase","Formatter","prettify","metaColor","objFromText","override","require"],"mappings":"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","file":"/packages/logging.js","sourcesContent":["import { Meteor } from 'meteor/meteor';\n\nconst hasOwn = Object.prototype.hasOwnProperty;\n\nfunction Log(...args) {\n Log.info(...args);\n}\n\n/// FOR TESTING\nlet intercept = 0;\nlet interceptedLines = [];\nlet suppress = 0;\n\n// Intercept the next 'count' calls to a Log function. The actual\n// lines printed to the console can be cleared and read by calling\n// Log._intercepted().\nLog._intercept = (count) => {\n intercept += count;\n};\n\n// Suppress the next 'count' calls to a Log function. Use this to stop\n// tests from spamming the console, especially with red errors that\n// might look like a failing test.\nLog._suppress = (count) => {\n suppress += count;\n};\n\n// Returns intercepted lines and resets the intercept counter.\nLog._intercepted = () => {\n const lines = interceptedLines;\n interceptedLines = [];\n intercept = 0;\n return lines;\n};\n\n// Either 'json' or 'colored-text'.\n//\n// When this is set to 'json', print JSON documents that are parsed by another\n// process ('satellite' or 'meteor run'). This other process should call\n// 'Log.format' for nice output.\n//\n// When this is set to 'colored-text', call 'Log.format' before printing.\n// This should be used for logging from within satellite, since there is no\n// other process that will be reading its standard output.\nLog.outputFormat = 'json';\n\nconst LEVEL_COLORS = {\n debug: 'green',\n // leave info as the default color\n warn: 'magenta',\n error: 'red'\n};\n\nconst META_COLOR = 'blue';\n\n// Default colors cause readability problems on Windows Powershell,\n// switch to bright variants. While still capable of millions of\n// operations per second, the benchmark showed a 25%+ increase in\n// ops per second (on Node 8) by caching \"process.platform\".\nconst isWin32 = typeof process === 'object' && process.platform === 'win32';\nconst platformColor = (color) => {\n if (isWin32 && typeof color === 'string' && !color.endsWith('Bright')) {\n return `${color}Bright`;\n }\n return color;\n};\n\n// XXX package\nconst RESTRICTED_KEYS = ['time', 'timeInexact', 'level', 'file', 'line',\n 'program', 'originApp', 'satellite', 'stderr'];\n\nconst FORMATTED_KEYS = [...RESTRICTED_KEYS, 'app', 'message'];\n\nconst logInBrowser = obj => {\n const str = Log.format(obj);\n\n // XXX Some levels should be probably be sent to the server\n const level = obj.level;\n\n if ((typeof console !== 'undefined') && console[level]) {\n console[level](str);\n } else {\n // IE doesn't have console.log.apply, it's not a real Object.\n // http://stackoverflow.com/questions/5538972/console-log-apply-not-working-in-ie9\n // http://patik.com/blog/complete-cross-browser-console-log/\n if (typeof console.log.apply === \"function\") {\n // Most browsers\n console.log.apply(console, [str]);\n\n } else if (typeof Function.prototype.bind === \"function\") {\n // IE9\n const log = Function.prototype.bind.call(console.log, console);\n log.apply(console, [str]);\n }\n }\n};\n\n// @returns {Object: { line: Number, file: String }}\nLog._getCallerDetails = () => {\n const getStack = () => {\n // We do NOT use Error.prepareStackTrace here (a V8 extension that gets us a\n // pre-parsed stack) since it's impossible to compose it with the use of\n // Error.prepareStackTrace used on the server for source maps.\n const err = new Error;\n const stack = err.stack;\n return stack;\n };\n\n const stack = getStack();\n\n if (!stack) return {};\n\n // looking for the first line outside the logging package (or an\n // eval if we find that first)\n let line;\n const lines = stack.split('\\n').slice(1);\n for (line of lines) {\n if (line.match(/^\\s*(at eval \\(eval)|(eval:)/)) {\n return {file: \"eval\"};\n }\n\n if (!line.match(/packages\\/(?:local-test[:_])?logging(?:\\/|\\.js)/)) {\n break;\n }\n }\n\n const details = {};\n\n // The format for FF is 'functionName@filePath:lineNumber'\n // The format for V8 is 'functionName (packages/logging/logging.js:81)' or\n // 'packages/logging/logging.js:81'\n const match = /(?:[@(]| at )([^(]+?):([0-9:]+)(?:\\)|$)/.exec(line);\n if (!match) {\n return details;\n }\n\n // in case the matched block here is line:column\n details.line = match[2].split(':')[0];\n\n // Possible format: https://foo.bar.com/scripts/file.js?random=foobar\n // XXX: if you can write the following in better way, please do it\n // XXX: what about evals?\n details.file = match[1].split('/').slice(-1)[0].split('?')[0];\n\n return details;\n};\n\n['debug', 'info', 'warn', 'error'].forEach((level) => {\n // @param arg {String|Object}\n Log[level] = (arg) => {\n if (suppress) {\n suppress--;\n return;\n }\n\n let intercepted = false;\n if (intercept) {\n intercept--;\n intercepted = true;\n }\n\n let obj = (arg === Object(arg)\n && !(arg instanceof RegExp)\n && !(arg instanceof Date))\n ? arg\n : { message: new String(arg).toString() };\n\n RESTRICTED_KEYS.forEach(key => {\n if (obj[key]) {\n throw new Error(`Can't set '${key}' in log message`);\n }\n });\n\n if (hasOwn.call(obj, 'message') && typeof obj.message !== 'string') {\n throw new Error(\"The 'message' field in log objects must be a string\");\n }\n\n if (!obj.omitCallerDetails) {\n obj = { ...Log._getCallerDetails(), ...obj };\n }\n\n obj.time = new Date();\n obj.level = level;\n\n // If we are in production don't write out debug logs.\n if (level === 'debug' && Meteor.isProduction) {\n return;\n }\n\n if (intercepted) {\n interceptedLines.push(EJSON.stringify(obj));\n } else if (Meteor.isServer) {\n if (Log.outputFormat === 'colored-text') {\n console.log(Log.format(obj, {color: true}));\n } else if (Log.outputFormat === 'json') {\n console.log(EJSON.stringify(obj));\n } else {\n throw new Error(`Unknown logging output format: ${Log.outputFormat}`);\n }\n } else {\n logInBrowser(obj);\n }\n};\n});\n\n\n// tries to parse line as EJSON. returns object if parse is successful, or null if not\nLog.parse = (line) => {\n let obj = null;\n if (line && line.startsWith('{')) { // might be json generated from calling 'Log'\n try { obj = EJSON.parse(line); } catch (e) {}\n }\n\n // XXX should probably check fields other than 'time'\n if (obj && obj.time && (obj.time instanceof Date)) {\n return obj;\n } else {\n return null;\n }\n};\n\n// formats a log object into colored human and machine-readable text\nLog.format = (obj, options = {}) => {\n obj = { ...obj }; // don't mutate the argument\n let {\n time,\n timeInexact,\n level = 'info',\n file,\n line: lineNumber,\n app: appName = '',\n originApp,\n message = '',\n program = '',\n satellite = '',\n stderr = '',\n } = obj;\n\n if (!(time instanceof Date)) {\n throw new Error(\"'time' must be a Date object\");\n }\n\n FORMATTED_KEYS.forEach((key) => { delete obj[key]; });\n\n if (Object.keys(obj).length > 0) {\n if (message) {\n message += ' ';\n }\n message += EJSON.stringify(obj);\n }\n\n const pad2 = n => n.toString().padStart(2, '0');\n const pad3 = n => n.toString().padStart(3, '0');\n\n const dateStamp = time.getFullYear().toString() +\n pad2(time.getMonth() + 1 /*0-based*/) +\n pad2(time.getDate());\n const timeStamp = pad2(time.getHours()) +\n ':' +\n pad2(time.getMinutes()) +\n ':' +\n pad2(time.getSeconds()) +\n '.' +\n pad3(time.getMilliseconds());\n\n // eg in San Francisco in June this will be '(-7)'\n const utcOffsetStr = `(${(-(new Date().getTimezoneOffset() / 60))})`;\n\n let appInfo = '';\n if (appName) {\n appInfo += appName;\n }\n if (originApp && originApp !== appName) {\n appInfo += ` via ${originApp}`;\n }\n if (appInfo) {\n appInfo = `[${appInfo}] `;\n }\n\n const sourceInfoParts = [];\n if (program) {\n sourceInfoParts.push(program);\n }\n if (file) {\n sourceInfoParts.push(file);\n }\n if (lineNumber) {\n sourceInfoParts.push(lineNumber);\n }\n\n let sourceInfo = !sourceInfoParts.length ?\n '' : `(${sourceInfoParts.join(':')}) `;\n\n if (satellite)\n sourceInfo += `[${satellite}]`;\n\n const stderrIndicator = stderr ? '(STDERR) ' : '';\n\n const metaPrefix = [\n level.charAt(0).toUpperCase(),\n dateStamp,\n '-',\n timeStamp,\n utcOffsetStr,\n timeInexact ? '? ' : ' ',\n appInfo,\n sourceInfo,\n stderrIndicator].join('');\n\n\n return Formatter.prettify(metaPrefix, options.color && platformColor(options.metaColor || META_COLOR)) +\n Formatter.prettify(message, options.color && platformColor(LEVEL_COLORS[level]));\n};\n\n// Turn a line of text into a loggable object.\n// @param line {String}\n// @param override {Object}\nLog.objFromText = (line, override) => {\n return {\n message: line,\n level: 'info',\n time: new Date(),\n timeInexact: true,\n ...override\n };\n};\n\nexport { Log };\n","Formatter = {};\nFormatter.prettify = function(line, color){\n if(!color) return line;\n return require(\"chalk\")[color](line);\n}\n"]}