ts-force icon indicating copy to clipboard operation
ts-force copied to clipboard

custom formatter?

Open ChuckJonas opened this issue 5 years ago • 2 comments

Since we now wrap the RestObject in proxy a custom formatter would be helpful: https://www.mattzeunert.com/2016/02/19/custom-chrome-devtools-object-formatters.html

ChuckJonas avatar Apr 17 '19 02:04 ChuckJonas

This seems to work ok...

const isRestObject = (obj: any) => {
  let proto = obj.__proto__;
  while (proto) {
    if (proto === RestObject.prototype) {
      return true;
    }
    proto = proto.__proto__;
  }
  return false;
};

// init();

// const proxy_set = new WeakSet();
// window.Proxy = new Proxy(Proxy, {
//       construct(target, args) {
//         const proxy = new target(args[0], args[1]);
//         proxy_set.add(proxy);
//         return proxy;
//       },
// });

window.devtoolsFormatters = [{
  header(obj: any) {
    try {
      if (!isRestObject(obj)) {
      // if (!proxy_set.has(obj)) {
        return null; // ['object', {object: 'no proxy'}];
      }
      const loggedObj: any = JSON.parse(JSON.stringify(obj));
      // loggedObj.constructor = {};
      // loggedObj.constructor.name = obj.constructor.name;

      // obj[i] = rawObj[i];
      // return obj;
      // loggedObj['TESTING'] = obj.constructor.name;
      return ['object', {object: loggedObj}]; //
    } catch (e) {
      return null;
    }
},
  hasBody() {
      return false;
  },
}];

One downside is the objects lose their SObject type (so it just say (object instead of Account)... Seems like there should be some way to fix that

ChuckJonas avatar Apr 26 '19 09:04 ChuckJonas

Node also has a symbol to customize output. https://nodejs.org/api/util.html#util_util_inspect_custom

I believe there are one or more libraries that do this in a way that's compatible with browsers too.

CarsonF avatar Feb 12 '20 20:02 CarsonF