libamf
Version:
Action Message Format library for node.js
66 lines (55 loc) • 1.71 kB
JavaScript
const fs = require('fs');
const util = require('util');
/**
* Construct a class using variable string
* @param {String} className
* @exports
* @returns {Object}
*/
exports.constructClass = (className) => {
class Dummy {
constructor() {}
}
return new ({ [className]: class extends Dummy { } })[className]()
};
/**
* A function to convert to a buffer when needed
* @param {Buffer|Array|String} buffer
* @exports
* @returns {Buffer}
*/
exports.convertToBuffer = (buffer) => {
return Buffer.isBuffer(buffer)
? buffer
: Array.isArray(buffer)
? Buffer.from(buffer)
: Buffer.from(buffer.replace(/ /g, ''), 'hex');
};
exports.isAssociativeArray = data => data instanceof Array && Object.keys(data).length !== data.length;
exports.getConstructor = cls => cls.constructor.name !== 'Function' ? cls.constructor : cls;
exports.getAllMethods = function (obj) {
function isGetter(obj, prop) {
return !!obj.__lookupGetter__(prop)
}
let keys = []
let topObject = obj
const onlyOriginalMethods = (p, i, arr) => {
return !isGetter(topObject, p) &&
typeof topObject[p] === 'function' &&
p !== 'constructor' &&
(i === 0 || p !== arr[i - 1]) &&
keys.indexOf(p) === -1
}
do {
const l = Object.getOwnPropertyNames(obj)
.sort()
.filter(onlyOriginalMethods)
keys = keys.concat(l)
// walk-up the prototype chain
obj = Object.getPrototypeOf(obj)
} while (
// not the the Object prototype methods (hasOwnProperty, etc...)
obj && Object.getPrototypeOf(obj)
)
return keys
};