Merge pull request #6572 from haadcode/master
Add support for TypedArrays in IPC.
This commit is contained in:
commit
200d09cc70
5 changed files with 36 additions and 2 deletions
|
@ -44,6 +44,7 @@
|
|||
'lib/common/api/deprecate.js',
|
||||
'lib/common/api/deprecations.js',
|
||||
'lib/common/api/is-promise.js',
|
||||
'lib/common/api/is-typed-array.js',
|
||||
'lib/common/api/exports/electron.js',
|
||||
'lib/common/api/native-image.js',
|
||||
'lib/common/api/shell.js',
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
const electron = require('electron')
|
||||
const v8Util = process.atomBinding('v8_util')
|
||||
const {ipcMain, isPromise, webContents} = electron
|
||||
const {ipcMain, isPromise, isTypedArray, webContents} = electron
|
||||
|
||||
const objectsRegistry = require('./objects-registry')
|
||||
|
||||
|
@ -63,6 +63,8 @@ let valueToMeta = function (sender, value, optimizeSimpleObject = false) {
|
|||
meta.type = 'buffer'
|
||||
} else if (Array.isArray(value)) {
|
||||
meta.type = 'array'
|
||||
} else if (isTypedArray(value)) {
|
||||
meta.type = 'typed-array'
|
||||
} else if (value instanceof Error) {
|
||||
meta.type = 'error'
|
||||
} else if (value instanceof Date) {
|
||||
|
@ -149,6 +151,8 @@ const unwrapArgs = function (sender, args) {
|
|||
return unwrapArgs(sender, meta.value)
|
||||
case 'buffer':
|
||||
return new Buffer(meta.value)
|
||||
case 'typed-array':
|
||||
return Buffer.from(meta.value)
|
||||
case 'date':
|
||||
return new Date(meta.value)
|
||||
case 'promise':
|
||||
|
|
|
@ -48,6 +48,11 @@ exports.defineProperties = function (exports) {
|
|||
get: function () {
|
||||
return require('../is-promise')
|
||||
}
|
||||
},
|
||||
isTypedArray: {
|
||||
get: function () {
|
||||
return require('../is-typed-array')
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
17
lib/common/api/is-typed-array.js
Normal file
17
lib/common/api/is-typed-array.js
Normal file
|
@ -0,0 +1,17 @@
|
|||
'use strict'
|
||||
|
||||
module.exports = function isTypedArray (val) {
|
||||
return (
|
||||
val &&
|
||||
(val instanceof Int8Array ||
|
||||
val instanceof Int16Array ||
|
||||
val instanceof Int32Array ||
|
||||
val instanceof Uint8Array ||
|
||||
val instanceof Uint8ClampedArray ||
|
||||
val instanceof Uint16Array ||
|
||||
val instanceof Uint32Array ||
|
||||
val instanceof Float32Array ||
|
||||
val instanceof Float64Array) ||
|
||||
(Object.prototype.toString.call(val).substr(-6, 5) === 'Array')
|
||||
)
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
'use strict'
|
||||
|
||||
const v8Util = process.atomBinding('v8_util')
|
||||
const {ipcRenderer, isPromise, CallbacksRegistry} = require('electron')
|
||||
const {ipcRenderer, isPromise, isTypedArray, CallbacksRegistry} = require('electron')
|
||||
|
||||
const callbacksRegistry = new CallbacksRegistry()
|
||||
|
||||
|
@ -35,6 +35,11 @@ const wrapArgs = function (args, visited) {
|
|||
type: 'buffer',
|
||||
value: Array.prototype.slice.call(value, 0)
|
||||
}
|
||||
} else if (isTypedArray(value)) {
|
||||
return {
|
||||
type: 'typed-array',
|
||||
value: Array.prototype.slice.call(value)
|
||||
}
|
||||
} else if (value instanceof Date) {
|
||||
return {
|
||||
type: 'date',
|
||||
|
@ -164,6 +169,8 @@ const metaToValue = function (meta) {
|
|||
return results
|
||||
case 'buffer':
|
||||
return new Buffer(meta.value)
|
||||
case 'typed-array':
|
||||
return Buffer.from(meta.value)
|
||||
case 'promise':
|
||||
return Promise.resolve({
|
||||
then: metaToValue(meta.then)
|
||||
|
|
Loading…
Reference in a new issue