pp_js.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. package jsre
  2. const pp_js = `
  3. function pp(object, indent) {
  4. try {
  5. JSON.stringify(object)
  6. } catch(e) {
  7. return pp(e, indent);
  8. }
  9. var str = "";
  10. if(object instanceof Array) {
  11. str += "[";
  12. for(var i = 0, l = object.length; i < l; i++) {
  13. str += pp(object[i], indent);
  14. if(i < l-1) {
  15. str += ", ";
  16. }
  17. }
  18. str += " ]";
  19. } else if (object instanceof Error) {
  20. str += "\033[31m" + "Error:\033[0m " + object.message;
  21. } else if (isBigNumber(object)) {
  22. str += "\033[32m'" + object.toString(10) + "'";
  23. } else if(typeof(object) === "object") {
  24. str += "{\n";
  25. indent += " ";
  26. var fields = getFields(object);
  27. var last = fields[fields.length - 1];
  28. fields.forEach(function (key) {
  29. str += indent + key + ": ";
  30. try {
  31. str += pp(object[key], indent);
  32. } catch (e) {
  33. str += pp(e, indent);
  34. }
  35. if(key !== last) {
  36. str += ",";
  37. }
  38. str += "\n";
  39. });
  40. str += indent.substr(2, indent.length) + "}";
  41. } else if(typeof(object) === "string") {
  42. str += "\033[32m'" + object + "'";
  43. } else if(typeof(object) === "undefined") {
  44. str += "\033[1m\033[30m" + object;
  45. } else if(typeof(object) === "number") {
  46. str += "\033[31m" + object;
  47. } else if(typeof(object) === "function") {
  48. str += "\033[35m" + object.toString().split(" {")[0];
  49. } else {
  50. str += object;
  51. }
  52. str += "\033[0m";
  53. return str;
  54. }
  55. var redundantFields = [
  56. 'valueOf',
  57. 'toString',
  58. 'toLocaleString',
  59. 'hasOwnProperty',
  60. 'isPrototypeOf',
  61. 'propertyIsEnumerable',
  62. 'constructor'
  63. ];
  64. var getFields = function (object) {
  65. var members = Object.getOwnPropertyNames(object);
  66. if (object.constructor && object.constructor.prototype) {
  67. members = members.concat(Object.getOwnPropertyNames(object.constructor.prototype));
  68. }
  69. var fields = members.filter(function (member) {
  70. return !isMemberFunction(object, member)
  71. }).sort()
  72. var funcs = members.filter(function (member) {
  73. return isMemberFunction(object, member)
  74. }).sort()
  75. var results = fields.concat(funcs);
  76. return results.filter(function (field) {
  77. return redundantFields.indexOf(field) === -1;
  78. });
  79. };
  80. var isMemberFunction = function(object, member) {
  81. try {
  82. return typeof(object[member]) === "function";
  83. } catch(e) {
  84. return false;
  85. }
  86. }
  87. var isBigNumber = function (object) {
  88. var result = typeof BigNumber !== 'undefined' && object instanceof BigNumber;
  89. if (!result) {
  90. if(typeof(object) === "object") {
  91. result = object.constructor.toString().indexOf("function BigNumber(") == 0;
  92. }
  93. }
  94. return result
  95. };
  96. function prettyPrint(/* */) {
  97. var args = arguments;
  98. var ret = "";
  99. for(var i = 0, l = args.length; i < l; i++) {
  100. ret += pp(args[i], "") + "\n";
  101. }
  102. return ret;
  103. }
  104. var print = prettyPrint;
  105. `