1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- 'use strict';
- /*
- this seems to be not only shorter, but faster than
- string.replace(/\\/g, '\\\\').
- replace(/\u0008/g, '\\b').
- replace(/\t/g, '\\t').
- replace(/\n/g, '\\n').
- replace(/\f/g, '\\f').
- replace(/\r/g, '\\r').
- replace(/'/g, '\\\'').
- replace(/"/g, '\\"');
- or string.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&")
- see http://jsperf.com/string-escape-regexp-vs-json-stringify
- */
- function srcEscape(str) {
- return JSON.stringify({
- [str]: 1
- }).slice(1, -3);
- }
- exports.srcEscape = srcEscape;
- let highlightFn;
- let cardinalRecommended = false;
- try {
- highlightFn = require('cardinal').highlight;
- } catch (err) {
- highlightFn = text => {
- if (!cardinalRecommended) {
- // eslint-disable-next-line no-console
- console.log('For nicer debug output consider install cardinal@^2.0.0');
- cardinalRecommended = true;
- }
- return text;
- };
- }
- /**
- * Prints debug message with code frame, will try to use `cardinal` if available.
- */
- function printDebugWithCode(msg, code) {
- // eslint-disable-next-line no-console
- console.log(`\n\n${msg}:\n`);
- // eslint-disable-next-line no-console
- console.log(`${highlightFn(code)}\n`);
- }
- exports.printDebugWithCode = printDebugWithCode;
|