Beispiel #1
0
 valueToMeta = function(value) {
   var field, prop, ret;
   if (Array.isArray(value)) {
     return {
       type: 'array',
       value: wrapArgs(value, visited)
     };
   } else if (Buffer.isBuffer(value)) {
     return {
       type: 'buffer',
       value: Array.prototype.slice.call(value, 0)
     };
   } else if (value instanceof Date) {
     return {
       type: 'date',
       value: value.getTime()
     };
   } else if ((value != null ? value.constructor.name : void 0) === 'Promise') {
     return {
       type: 'promise',
       then: valueToMeta(value.then.bind(value))
     };
   } else if ((value != null) && typeof value === 'object' && v8Util.getHiddenValue(value, 'atomId')) {
     return {
       type: 'remote-object',
       id: v8Util.getHiddenValue(value, 'atomId')
     };
   } else if ((value != null) && typeof value === 'object') {
     ret = {
       type: 'object',
       name: value.constructor.name,
       members: []
     };
     for (prop in value) {
       field = value[prop];
       ret.members.push({
         name: prop,
         value: valueToMeta(isCircular(field, visited) ? null : field)
       });
     }
     return ret;
   } else if (typeof value === 'function' && v8Util.getHiddenValue(value, 'returnValue')) {
     return {
       type: 'function-with-return-value',
       value: valueToMeta(value())
     };
   } else if (typeof value === 'function') {
     return {
       type: 'function',
       id: callbacksRegistry.add(value),
       location: v8Util.getHiddenValue(value, 'location')
     };
   } else {
     return {
       type: 'value',
       value: value
     };
   }
 };
Beispiel #2
0
ipcRenderer.on('ELECTRON_RENDERER_RELEASE_CALLBACK', function (event, id) {
  callbacksRegistry.remove(id)
})
Beispiel #3
0
ipcRenderer.on('ELECTRON_RENDERER_CALLBACK', function (event, id, args) {
  callbacksRegistry.apply(id, metaToValue(args))
})
Beispiel #4
0
  const valueToMeta = (value) => {
    // Check for circular reference.
    if (visited.has(value)) {
      return {
        type: 'value',
        value: null
      }
    }

    if (Array.isArray(value)) {
      visited.add(value)
      let meta = {
        type: 'array',
        value: wrapArgs(value, visited)
      }
      visited.delete(value)
      return meta
    } else if (ArrayBuffer.isView(value)) {
      return {
        type: 'buffer',
        value: Buffer.from(value)
      }
    } else if (value instanceof Date) {
      return {
        type: 'date',
        value: value.getTime()
      }
    } else if ((value != null) && typeof value === 'object') {
      if (isPromise(value)) {
        return {
          type: 'promise',
          then: valueToMeta(function (onFulfilled, onRejected) {
            value.then(onFulfilled, onRejected)
          })
        }
      } else if (v8Util.getHiddenValue(value, 'atomId')) {
        return {
          type: 'remote-object',
          id: v8Util.getHiddenValue(value, 'atomId')
        }
      }

      let meta = {
        type: 'object',
        name: value.constructor ? value.constructor.name : '',
        members: []
      }
      visited.add(value)
      for (let prop in value) {
        meta.members.push({
          name: prop,
          value: valueToMeta(value[prop])
        })
      }
      visited.delete(value)
      return meta
    } else if (typeof value === 'function' && v8Util.getHiddenValue(value, 'returnValue')) {
      return {
        type: 'function-with-return-value',
        value: valueToMeta(value())
      }
    } else if (typeof value === 'function') {
      return {
        type: 'function',
        id: callbacksRegistry.add(value),
        location: v8Util.getHiddenValue(value, 'location'),
        length: value.length
      }
    } else {
      return {
        type: 'value',
        value: value
      }
    }
  }
Beispiel #5
0
ipcRenderer.on('ATOM_RENDERER_RELEASE_CALLBACK', function(event, id) {
  return callbacksRegistry.remove(id);
});
Beispiel #6
0
ipcRenderer.on('ATOM_RENDERER_CALLBACK', function(event, id, args) {
  return callbacksRegistry.apply(id, metaToValue(args));
});