Add helper for including function properties
This commit is contained in:
parent
3245bb99b2
commit
8b38018ab4
2 changed files with 22 additions and 17 deletions
|
@ -51,6 +51,18 @@ let getObjectPrototype = function (object) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Include properties on member methods
|
||||||
|
const addFunctionProperties = (sender, value, members) => {
|
||||||
|
members.forEach((member) => {
|
||||||
|
if (member.type !== 'method') return
|
||||||
|
const method = value[member.name]
|
||||||
|
member.members = getObjectMembers(method)
|
||||||
|
if (member.members.length > 0) {
|
||||||
|
member.id = objectsRegistry.add(sender, method)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// Convert a real value into meta data.
|
// Convert a real value into meta data.
|
||||||
let valueToMeta = function (sender, value, optimizeSimpleObject = false) {
|
let valueToMeta = function (sender, value, optimizeSimpleObject = false) {
|
||||||
// Determine the type of value.
|
// Determine the type of value.
|
||||||
|
@ -90,17 +102,7 @@ let valueToMeta = function (sender, value, optimizeSimpleObject = false) {
|
||||||
meta.id = objectsRegistry.add(sender, value)
|
meta.id = objectsRegistry.add(sender, value)
|
||||||
meta.members = getObjectMembers(value)
|
meta.members = getObjectMembers(value)
|
||||||
meta.proto = getObjectPrototype(value)
|
meta.proto = getObjectPrototype(value)
|
||||||
|
addFunctionProperties(sender, value, meta.members)
|
||||||
// Include properties on member methods
|
|
||||||
meta.members.forEach((member) => {
|
|
||||||
if (member.type === 'method') {
|
|
||||||
const method = value[member.name]
|
|
||||||
member.members = getObjectMembers(method)
|
|
||||||
if (member.members.length > 0) {
|
|
||||||
member.id = objectsRegistry.add(sender, method)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} else if (meta.type === 'buffer') {
|
} else if (meta.type === 'buffer') {
|
||||||
meta.value = Array.prototype.slice.call(value, 0)
|
meta.value = Array.prototype.slice.call(value, 0)
|
||||||
} else if (meta.type === 'promise') {
|
} else if (meta.type === 'promise') {
|
||||||
|
|
|
@ -135,15 +135,18 @@ const setObjectMembers = function (ref, object, metaId, members) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Object.defineProperty(object, member.name, descriptor)
|
Object.defineProperty(object, member.name, descriptor)
|
||||||
|
addFunctionProperties(object, member)
|
||||||
// Include properties on member methods
|
|
||||||
if (member.type === 'method' && member.members != null && member.members.length > 0) {
|
|
||||||
const method = object[member.name]
|
|
||||||
setObjectMembers(method, method, member.id, member.members)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Include properties on member methods
|
||||||
|
const addFunctionProperties = (object, member) => {
|
||||||
|
if (member.type !== 'method') return
|
||||||
|
if (member.members == null || member.members.length === 0) return
|
||||||
|
const method = object[member.name]
|
||||||
|
setObjectMembers(method, method, member.id, member.members)
|
||||||
|
}
|
||||||
|
|
||||||
// Populate object's prototype from descriptor.
|
// Populate object's prototype from descriptor.
|
||||||
// This matches |getObjectPrototype| in rpc-server.
|
// This matches |getObjectPrototype| in rpc-server.
|
||||||
const setObjectPrototype = function (ref, object, metaId, descriptor) {
|
const setObjectPrototype = function (ref, object, metaId, descriptor) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue