Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

classer

Package Overview
Dependencies
Maintainers
1
Versions
15
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

classer - npm Package Compare versions

Comparing version 1.0.1 to 1.1.0

326

dist.es5/main/index.js

@@ -45,118 +45,4 @@ 'use strict';

// export module
var local = module.exports = function () {};
var local = module.exports = {};
// allow class to be instantiated without `new`
local.export = function (y_class, f_operator) {
var h_static = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2];
// cover class with `new`-less function
var f_cover = function f_cover() {
for (var _len = arguments.length, a_args = Array(_len), _key = 0; _key < _len; _key++) {
a_args[_key] = arguments[_key];
}
// create class instance
var k_instance = new (Function.prototype.bind.apply(y_class, [null].concat(a_args)))();
// use operator
if ('function' === typeof f_operator) {
// bind instance to operator
f_operator = Function.prototype.bind.apply(f_operator, [k_instance]);
// set operator prototype chain to instance prototype chain
Object.setPrototypeOf(f_operator, Object.getPrototypeOf(k_instance));
// build prototype chain array
var a_inverse_prototype_chain = [];
var d_pc_node = k_instance;
do {
// add this prototype object to the chain
a_inverse_prototype_chain.unshift(d_pc_node);
// advance up the prototype chain
d_pc_node = Object.getPrototypeOf(d_pc_node);
} while (d_pc_node !== Object.prototype);
// override operator's own properties with all from prototype chain
a_inverse_prototype_chain.forEach(function (d_ipc_node) {
// bind all own properties of protoype to function
Object.getOwnPropertyNames(d_ipc_node).forEach(function (s_property) {
// ref property descriptor
var h_property_descriptor = Object.getOwnPropertyDescriptor(d_ipc_node, s_property);
// property value is a function
if ('function' === typeof h_property_descriptor.value) {
// define method on operator's own property
Object.defineProperty(f_operator, s_property,
// except, override descriptor
Object.assign(h_property_descriptor, {
// by binding instance to the function
value: d_ipc_node[s_property].bind(k_instance)
}));
}
// property is something else
else {
// it has a [[Getter]] function
if ('function' === typeof h_property_descriptor.get) {
// bind the instance to the getter function definition
h_property_descriptor.get = h_property_descriptor.get.bind(k_instance);
}
// it has a [[Setter]] function
if ('function' === typeof h_property_descriptor.set) {
// bind the instance to the setter function definition
h_property_descriptor.set = h_property_descriptor.set.bind(k_instance);
}
// use the descriptor to mirror the property on the operator
Object.defineProperty(f_operator, s_property, h_property_descriptor);
}
});
});
// return operator/instance handle
return f_operator;
}
// return instance
return k_instance;
};
// copy-assign public static members from class onto class cover
Object.getOwnPropertyNames(y_class).forEach(function (s_property) {
Object.defineProperty(f_cover, s_property, Object.getOwnPropertyDescriptor(y_class, s_property));
});
// ammend public static members
Object.keys(h_static).forEach(function (s_property) {
// ref public static member descriptor
var h_psm_descriptor = Object.getOwnPropertyDescriptor(h_static, s_property);
// define actual property on class
Object.defineProperty(y_class, s_property, h_psm_descriptor);
// define proxy property on class cover (getters/setters for class ref to access/mutate public static members)
Object.defineProperty(f_cover, s_property, {
// inherit from actual property
configurable: h_psm_descriptor.configurable,
enumerable: h_psm_descriptor.enumerable,
// define proxy getter
get: function get() {
return y_class[s_property];
},
// define proxy setter
set: function set(z_value) {
y_class[s_property] = z_value;
}
});
});
// return cover
return f_cover;
};
// create a logger instance

@@ -197,4 +83,4 @@ local.logger = function (y_class) {

for (var _len2 = arguments.length, a_args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
a_args[_key2 - 1] = arguments[_key2];
for (var _len = arguments.length, a_args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
a_args[_key - 1] = arguments[_key];
}

@@ -210,4 +96,4 @@

for (var _len3 = arguments.length, a_args = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
a_args[_key3 - 1] = arguments[_key3];
for (var _len2 = arguments.length, a_args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
a_args[_key2 - 1] = arguments[_key2];
}

@@ -232,4 +118,4 @@

for (var _len4 = arguments.length, a_args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
a_args[_key4 - 1] = arguments[_key4];
for (var _len3 = arguments.length, a_args = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
a_args[_key3 - 1] = arguments[_key3];
}

@@ -245,4 +131,4 @@

for (var _len5 = arguments.length, a_args = Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {
a_args[_key5 - 1] = arguments[_key5];
for (var _len4 = arguments.length, a_args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
a_args[_key4 - 1] = arguments[_key4];
}

@@ -259,2 +145,194 @@

};
//# sourceMappingURL=data:application/json;base64,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ZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKmVzbGludC1lbnYgbm9kZSwgYnJvd3NlciovXG4vKmVzbGludCBuby1jb25zb2xlOiAwKi9cblxuLy8gZGVmYXVsdCBmb3JlZ3JvdW5kIHNlcXVlbmNlXG5jb25zdCBTX0RFRkFVTFRfQ09MT1IgPSAnXFx1MDAxYlszOW0nO1xuXG4vL1xuY29uc3QgSF9MRVZFTF9DT0xPUlMgPSB7XG5cdGZhaWw6IHtcblx0XHRzZXF1ZW5jZTogJ1xcdTAwMWJbMzg7NTsxOTZtJywgLy8gYmxvb2QgKDE5Nilcblx0XHRjb2xvcjogJ3JlZCcsIC8vIGZvciBicm93c2VyXG5cdFx0Y2hhbm5lbDogJ2Vycm9yJyxcblx0fSxcblx0ZXJyb3I6IHtcblx0XHRzZXF1ZW5jZTogJ1xcdTAwMWJbMzFtJywgLy8gcmVkXG5cdFx0Y2hhbm5lbDogJ2Vycm9yJyxcblx0fSxcblx0d2Fybjoge1xuXHRcdHNlcXVlbmNlOiAnXFx1MDAxYlszODs1OzIwOG0nLCAvLyBnb2xkZW4gKDIwOClcblx0XHRjaGFubmVsOiAnd2FybicsXG5cdH0sXG5cdGluZm86IHtcblx0XHRzZXF1ZW5jZTogJ1xcdTAwMWJbMzRtJywgLy8gYmx1ZVxuXHRcdGNoYW5uZWw6ICdpbmZvJyxcblx0fSxcblx0Z29vZDoge1xuXHRcdHNlcXVlbmNlOiAnXFx1MDAxYlszMm0nLCAvLyBncmVlblxuXHRcdGNvbG9yOiAnbGltZWdyZWVuJyxcblx0XHRjaGFubmVsOiAnbG9nJyxcblx0fSxcblx0b3V0OiB7XG5cdFx0c2VxdWVuY2U6ICdcXHUwMDFiWzk2bScsIC8vIGxpZ2h0IGN5YW5cblx0XHRjb2xvcjogJ2N5YW4nLFxuXHRcdGNoYW5uZWw6ICdsb2cnLFxuXHR9LFxuXHRsb2c6IHtcblx0XHRzZXF1ZW5jZTogJ1xcdTAwMWJbMzltJywgLy8gZGVmYXVsdCBmb3JlZ3JvdW5kIHNlcXVlbmNlXG5cdFx0Y2hhbm5lbDogJ2xvZycsXG5cdH0sXG59O1xuXG4vLyBleHBvcnQgbW9kdWxlXG5jb25zdCBsb2NhbCA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKXt9O1xuXG4vLyBhbGxvdyBjbGFzcyB0byBiZSBpbnN0YW50aWF0ZWQgd2l0aG91dCBgbmV3YFxubG9jYWwuZXhwb3J0ID0gZnVuY3Rpb24oeV9jbGFzcywgZl9vcGVyYXRvciwgaF9zdGF0aWM9ZmFsc2UpIHtcblx0Ly8gY292ZXIgY2xhc3Mgd2l0aCBgbmV3YC1sZXNzIGZ1bmN0aW9uXG5cdGxldCBmX2NvdmVyID0gZnVuY3Rpb24oLi4uYV9hcmdzKSB7XG5cblx0XHQvLyBjcmVhdGUgY2xhc3MgaW5zdGFuY2Vcblx0XHRsZXQga19pbnN0YW5jZSA9IG5ldyB5X2NsYXNzKC4uLmFfYXJncyk7XG5cblx0XHQvLyB1c2Ugb3BlcmF0b3Jcblx0XHRpZignZnVuY3Rpb24nID09PSB0eXBlb2YgZl9vcGVyYXRvcikge1xuXG5cdFx0XHQvLyBiaW5kIGluc3RhbmNlIHRvIG9wZXJhdG9yXG5cdFx0XHRmX29wZXJhdG9yID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoZl9vcGVyYXRvciwgW2tfaW5zdGFuY2VdKTtcblxuXHRcdFx0Ly8gc2V0IG9wZXJhdG9yIHByb3RvdHlwZSBjaGFpbiB0byBpbnN0YW5jZSBwcm90b3R5cGUgY2hhaW5cblx0XHRcdE9iamVjdC5zZXRQcm90b3R5cGVPZihmX29wZXJhdG9yLCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoa19pbnN0YW5jZSkpO1xuXG5cdFx0XHQvLyBidWlsZCBwcm90b3R5cGUgY2hhaW4gYXJyYXlcblx0XHRcdGxldCBhX2ludmVyc2VfcHJvdG90eXBlX2NoYWluID0gW107XG5cdFx0XHRsZXQgZF9wY19ub2RlID0ga19pbnN0YW5jZTtcblx0XHRcdGRvIHtcblx0XHRcdFx0Ly8gYWRkIHRoaXMgcHJvdG90eXBlIG9iamVjdCB0byB0aGUgY2hhaW5cblx0XHRcdFx0YV9pbnZlcnNlX3Byb3RvdHlwZV9jaGFpbi51bnNoaWZ0KGRfcGNfbm9kZSk7XG5cblx0XHRcdFx0Ly8gYWR2YW5jZSB1cCB0aGUgcHJvdG90eXBlIGNoYWluXG5cdFx0XHRcdGRfcGNfbm9kZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihkX3BjX25vZGUpO1xuXHRcdFx0fSB3aGlsZShkX3BjX25vZGUgIT09IE9iamVjdC5wcm90b3R5cGUpO1xuXG5cdFx0XHQvLyBvdmVycmlkZSBvcGVyYXRvcidzIG93biBwcm9wZXJ0aWVzIHdpdGggYWxsIGZyb20gcHJvdG90eXBlIGNoYWluXG5cdFx0XHRhX2ludmVyc2VfcHJvdG90eXBlX2NoYWluLmZvckVhY2goKGRfaXBjX25vZGUpID0+IHtcblxuXHRcdFx0XHQvLyBiaW5kIGFsbCBvd24gcHJvcGVydGllcyBvZiBwcm90b3lwZSB0byBmdW5jdGlvblxuXHRcdFx0XHRPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhkX2lwY19ub2RlKS5mb3JFYWNoKChzX3Byb3BlcnR5KSA9PiB7XG5cdFx0XHRcdFx0Ly8gcmVmIHByb3BlcnR5IGRlc2NyaXB0b3Jcblx0XHRcdFx0XHRsZXQgaF9wcm9wZXJ0eV9kZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkX2lwY19ub2RlLCBzX3Byb3BlcnR5KTtcblxuXHRcdFx0XHRcdC8vIHByb3BlcnR5IHZhbHVlIGlzIGEgZnVuY3Rpb25cblx0XHRcdFx0XHRpZignZnVuY3Rpb24nID09PSB0eXBlb2YgaF9wcm9wZXJ0eV9kZXNjcmlwdG9yLnZhbHVlKSB7XG5cdFx0XHRcdFx0XHQvLyBkZWZpbmUgbWV0aG9kIG9uIG9wZXJhdG9yJ3Mgb3duIHByb3BlcnR5XG5cdFx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZl9vcGVyYXRvciwgc19wcm9wZXJ0eSxcblx0XHRcdFx0XHRcdFx0Ly8gZXhjZXB0LCBvdmVycmlkZSBkZXNjcmlwdG9yXG5cdFx0XHRcdFx0XHRcdE9iamVjdC5hc3NpZ24oaF9wcm9wZXJ0eV9kZXNjcmlwdG9yLCB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gYnkgYmluZGluZyBpbnN0YW5jZSB0byB0aGUgZnVuY3Rpb25cblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogZF9pcGNfbm9kZVtzX3Byb3BlcnR5XS5iaW5kKGtfaW5zdGFuY2UpLFxuXHRcdFx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIHByb3BlcnR5IGlzIHNvbWV0aGluZyBlbHNlXG5cdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBpdCBoYXMgYSBbW0dldHRlcl1dIGZ1bmN0aW9uXG5cdFx0XHRcdFx0XHRpZignZnVuY3Rpb24nID09PSB0eXBlb2YgaF9wcm9wZXJ0eV9kZXNjcmlwdG9yLmdldCkge1xuXHRcdFx0XHRcdFx0XHQvLyBiaW5kIHRoZSBpbnN0YW5jZSB0byB0aGUgZ2V0dGVyIGZ1bmN0aW9uIGRlZmluaXRpb25cblx0XHRcdFx0XHRcdFx0aF9wcm9wZXJ0eV9kZXNjcmlwdG9yLmdldCA9IGhfcHJvcGVydHlfZGVzY3JpcHRvci5nZXQuYmluZChrX2luc3RhbmNlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC8vIGl0IGhhcyBhIFtbU2V0dGVyXV0gZnVuY3Rpb25cblx0XHRcdFx0XHRcdGlmKCdmdW5jdGlvbicgPT09IHR5cGVvZiBoX3Byb3BlcnR5X2Rlc2NyaXB0b3Iuc2V0KSB7XG5cdFx0XHRcdFx0XHRcdC8vIGJpbmQgdGhlIGluc3RhbmNlIHRvIHRoZSBzZXR0ZXIgZnVuY3Rpb24gZGVmaW5pdGlvblxuXHRcdFx0XHRcdFx0XHRoX3Byb3BlcnR5X2Rlc2NyaXB0b3Iuc2V0ID0gaF9wcm9wZXJ0eV9kZXNjcmlwdG9yLnNldC5iaW5kKGtfaW5zdGFuY2UpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyB1c2UgdGhlIGRlc2NyaXB0b3IgdG8gbWlycm9yIHRoZSBwcm9wZXJ0eSBvbiB0aGUgb3BlcmF0b3Jcblx0XHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmX29wZXJhdG9yLCBzX3Byb3BlcnR5LCBoX3Byb3BlcnR5X2Rlc2NyaXB0b3IpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gcmV0dXJuIG9wZXJhdG9yL2luc3RhbmNlIGhhbmRsZVxuXHRcdFx0cmV0dXJuIGZfb3BlcmF0b3I7XG5cdFx0fVxuXG5cdFx0Ly8gcmV0dXJuIGluc3RhbmNlXG5cdFx0cmV0dXJuIGtfaW5zdGFuY2U7XG5cdH07XG5cblx0Ly8gY29weS1hc3NpZ24gcHVibGljIHN0YXRpYyBtZW1iZXJzIGZyb20gY2xhc3Mgb250byBjbGFzcyBjb3ZlclxuXHRPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh5X2NsYXNzKS5mb3JFYWNoKChzX3Byb3BlcnR5KSA9PiB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGZfY292ZXIsIHNfcHJvcGVydHksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoeV9jbGFzcywgc19wcm9wZXJ0eSkpO1xuXHR9KTtcblxuXHQvLyBhbW1lbmQgcHVibGljIHN0YXRpYyBtZW1iZXJzXG5cdE9iamVjdC5rZXlzKGhfc3RhdGljKS5mb3JFYWNoKChzX3Byb3BlcnR5KSA9PiB7XG5cdFx0Ly8gcmVmIHB1YmxpYyBzdGF0aWMgbWVtYmVyIGRlc2NyaXB0b3Jcblx0XHRsZXQgaF9wc21fZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaF9zdGF0aWMsIHNfcHJvcGVydHkpO1xuXG5cdFx0Ly8gZGVmaW5lIGFjdHVhbCBwcm9wZXJ0eSBvbiBjbGFzc1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5X2NsYXNzLCBzX3Byb3BlcnR5LCBoX3BzbV9kZXNjcmlwdG9yKTtcblxuXHRcdC8vIGRlZmluZSBwcm94eSBwcm9wZXJ0eSBvbiBjbGFzcyBjb3ZlciAoZ2V0dGVycy9zZXR0ZXJzIGZvciBjbGFzcyByZWYgdG8gYWNjZXNzL211dGF0ZSBwdWJsaWMgc3RhdGljIG1lbWJlcnMpXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGZfY292ZXIsIHNfcHJvcGVydHksIHtcblx0XHRcdC8vIGluaGVyaXQgZnJvbSBhY3R1YWwgcHJvcGVydHlcblx0XHRcdGNvbmZpZ3VyYWJsZTogaF9wc21fZGVzY3JpcHRvci5jb25maWd1cmFibGUsXG5cdFx0XHRlbnVtZXJhYmxlOiBoX3BzbV9kZXNjcmlwdG9yLmVudW1lcmFibGUsXG5cblx0XHRcdC8vIGRlZmluZSBwcm94eSBnZXR0ZXJcblx0XHRcdGdldCgpIHtcblx0XHRcdFx0cmV0dXJuIHlfY2xhc3Nbc19wcm9wZXJ0eV07XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBkZWZpbmUgcHJveHkgc2V0dGVyXG5cdFx0XHRzZXQoel92YWx1ZSkge1xuXHRcdFx0XHR5X2NsYXNzW3NfcHJvcGVydHldID0gel92YWx1ZTtcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH0pO1xuXG5cdC8vIHJldHVybiBjb3ZlclxuXHRyZXR1cm4gZl9jb3Zlcjtcbn07XG5cbi8vIGNyZWF0ZSBhIGxvZ2dlciBpbnN0YW5jZVxubG9jYWwubG9nZ2VyID0gZnVuY3Rpb24oeV9jbGFzcywgaF9zdGF0aWM9e30pIHtcblxuXHQvLyBwcmVwIGNsYXNzIG5hbWVcblx0bGV0IHNfY2xhc3NfbmFtZSA9IHlfY2xhc3MrJyc7XG5cblx0Ly8gcmVjZWl2ZWQgY2xhc3Ncblx0aWYoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIHlfY2xhc3MpIHtcblxuXHRcdC8vIHNldCBjbGFzcyBuYW1lXG5cdFx0c19jbGFzc19uYW1lID0geV9jbGFzcy5uYW1lO1xuXG5cdFx0Ly8gZGVmaW5lIHN0YXRpYyBtZW1iZXJzXG5cdFx0Zm9yKGxldCBzX2tleSBpbiBoX3N0YXRpYykge1xuXHRcdFx0aF9zdGF0aWNbc19rZXldID0gaF9zdGF0aWNbc19rZXldO1xuXHRcdH1cblx0fVxuXG5cdC8vIHByZXAgZXhwb3J0XG5cdGxldCBoX2xvY2FsID0ge307XG5cblx0Ly8gbm9kZWpzXG5cdGlmKHByb2Nlc3MgJiYgcHJvY2Vzcy51cHRpbWUpIHtcblx0XHQvLyBzZXQgbG9nZ2VyIGFjdGlvbnNcblx0XHRmb3IobGV0IHNfbGV2ZWwgaW4gSF9MRVZFTF9DT0xPUlMpIHtcblx0XHRcdC8vIGZhaWwgaGF1bHRzIHNjcmlwdCBleGVjdXRpb25cblx0XHRcdGlmKCdmYWlsJyA9PT0gc19sZXZlbCkge1xuXHRcdFx0XHRoX2xvY2FsW3NfbGV2ZWxdID0gKGZ1bmN0aW9uKHNfbXNnLCAuLi5hX2FyZ3MpIHtcblx0XHRcdFx0XHRsZXQgZV90aHJvdyA9IG5ldyBFcnJvcigpO1xuXHRcdFx0XHRcdGxldCBzX3N0YWNrID0gZV90aHJvdy5zdGFjay5zcGxpdCgvXFxuL2cpLnNsaWNlKDIpLmpvaW4oJ1xcbicpO1xuXHRcdFx0XHRcdGNvbnNvbGVbdGhpcy5jaGFubmVsXShcblx0XHRcdFx0XHRcdGBbJHt0aGlzLnNlcXVlbmNlfSR7c19jbGFzc19uYW1lfSR7U19ERUZBVUxUX0NPTE9SfV0rJHtcblx0XHRcdFx0XHRcdFx0cHJvY2Vzcy51cHRpbWUoKVxuXHRcdFx0XHRcdFx0fXMvICR7dGhpcy5zZXF1ZW5jZX0ke3NfbXNnfVxcbiR7XG5cdFx0XHRcdFx0XHRcdHNfc3RhY2tcblx0XHRcdFx0XHRcdH0ke1NfREVGQVVMVF9DT0xPUn1gLCAuLi5hX2FyZ3MpO1xuXHRcdFx0XHRcdGVfdGhyb3cuc3RhY2sgPSBgRXJyb3JcXG4ke3Nfc3RhY2t9YDtcblx0XHRcdFx0XHR0aHJvdyBlX3Rocm93O1xuXHRcdFx0XHR9KS5iaW5kKEhfTEVWRUxfQ09MT1JTW3NfbGV2ZWxdKTtcblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRoX2xvY2FsW3NfbGV2ZWxdID0gKGZ1bmN0aW9uKHNfbXNnLCAuLi5hX2FyZ3MpIHtcblx0XHRcdFx0XHRjb25zb2xlW3RoaXMuY2hhbm5lbF0oXG5cdFx0XHRcdFx0XHRgWyR7dGhpcy5zZXF1ZW5jZX0ke3NfY2xhc3NfbmFtZX0ke1NfREVGQVVMVF9DT0xPUn1dKyR7XG5cdFx0XHRcdFx0XHRcdHByb2Nlc3MudXB0aW1lKClcblx0XHRcdFx0XHRcdH1zLyAke3RoaXMuc2VxdWVuY2V9JHtzX21zZ30ke1NfREVGQVVMVF9DT0xPUn1gLCAuLi5hX2FyZ3MpO1xuXHRcdFx0XHR9KS5iaW5kKEhfTEVWRUxfQ09MT1JTW3NfbGV2ZWxdKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Ly8gYnJvd3NlclxuXHRlbHNlIGlmKHdpbmRvdyAmJiB3aW5kb3cucGVyZm9ybWFuY2UpIHtcblx0XHQvLyBzZXQgbG9nZ2VyIGFjdGlvbnNcblx0XHRmb3IobGV0IHNfbGV2ZWwgaW4gSF9MRVZFTF9DT0xPUlMpIHtcblx0XHRcdC8vIGZhaWwgaGF1bHQgc2NyaXB0IGV4ZWN1dGlvblxuXHRcdFx0aWYoJ2ZhaWwnID09PSBzX2xldmVsKSB7XG5cdFx0XHRcdGhfbG9jYWxbc19sZXZlbF0gPSAoZnVuY3Rpb24oc19tc2csIC4uLmFfYXJncykge1xuXHRcdFx0XHRcdGxldCBlX3Rocm93ID0gbmV3IEVycm9yKCk7XG5cdFx0XHRcdFx0bGV0IHNfc3RhY2sgPSBlX3Rocm93LnN0YWNrLnNwbGl0KC9cXG4vZykuc2xpY2UoMikuam9pbignXFxuJyk7XG5cdFx0XHRcdFx0Y29uc29sZVt0aGlzLmNoYW5uZWxdKFxuXHRcdFx0XHRcdFx0YFslYyR7c19jbGFzc19uYW1lfSVjXSske1xuXHRcdFx0XHRcdFx0XHQoKERhdGUubm93KCkgLSB3aW5kb3cucGVyZm9ybWFuY2UudGltaW5nLmRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0KSouMDAxKS50b0ZpeGVkKDMpXG5cdFx0XHRcdFx0XHR9cy8gJWMke3NfbXNnfVxcbiR7XG5cdFx0XHRcdFx0XHRcdHNfc3RhY2tcblx0XHRcdFx0XHRcdH1gLCAnY29sb3I6Jyt0aGlzLmNvbG9yLCAnY29sb3I6aW5oZXJpdCcsIC4uLmFfYXJncywgJ2NvbG9yOicrdGhpcy5jb2xvcik7XG5cdFx0XHRcdFx0ZV90aHJvdy5zdGFjayA9IGBFcnJvclxcbiR7c19zdGFja31gO1xuXHRcdFx0XHRcdHRocm93IGVfdGhyb3c7XG5cdFx0XHRcdH0pLmJpbmQoSF9MRVZFTF9DT0xPUlNbc19sZXZlbF0pO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdGhfbG9jYWxbc19sZXZlbF0gPSAoZnVuY3Rpb24oc19tc2csIC4uLmFfYXJncykge1xuXHRcdFx0XHRcdGNvbnNvbGVbdGhpcy5jaGFubmVsXShcblx0XHRcdFx0XHRcdGBbJWMke3NfY2xhc3NfbmFtZX0lY10rJHtcblx0XHRcdFx0XHRcdFx0KChEYXRlLm5vdygpIC0gd2luZG93LnBlcmZvcm1hbmNlLnRpbWluZy5kb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCkqLjAwMSkudG9GaXhlZCgzKVxuXHRcdFx0XHRcdFx0fXMvICVjJHtzX21zZ31gLCAnY29sb3I6Jyt0aGlzLmNvbG9yLCAnY29sb3I6aW5oZXJpdCcsIC4uLmFfYXJncywgJ2NvbG9yOicrdGhpcy5jb2xvcik7XG5cdFx0XHRcdH0pLmJpbmQoSF9MRVZFTF9DT0xPUlNbc19sZXZlbF0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIHJldHVybiBsb2dnZXJcblx0cmV0dXJuIGhfbG9jYWw7XG59O1xuXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0=
// override operator's property to mirror prototype property
var bind_property = function bind_property(f_operator, s_property, d_ipc_node, k_instance) {
// ref property descriptor
var h_property_descriptor = Object.getOwnPropertyDescriptor(d_ipc_node, s_property);
// property value is a function
if ('function' === typeof h_property_descriptor.value) {
// define method on operator's own property
Object.defineProperty(f_operator, s_property,
// except, override descriptor
Object.assign(h_property_descriptor, {
// by binding instance to the function
value: d_ipc_node[s_property].bind(k_instance)
}));
}
// property is something else
else {
// it has a [[Getter]] function
if ('function' === typeof h_property_descriptor.get) {
// bind the instance to the getter function definition
h_property_descriptor.get = h_property_descriptor.get.bind(k_instance);
}
// it has a [[Setter]] function
if ('function' === typeof h_property_descriptor.set) {
// bind the instance to the setter function definition
h_property_descriptor.set = h_property_descriptor.set.bind(k_instance);
}
// use the descriptor to mirror the property on the operator
Object.defineProperty(f_operator, s_property, h_property_descriptor);
}
};
// set prototype of operator to instance and override function's own properties
var bind_operator_proxy = function bind_operator_proxy(f_operator, k_instance) {
// bind instance to operator
f_operator = Function.prototype.bind.apply(f_operator, [k_instance]);
// set prototype of operator to the instance itself
Object.setPrototypeOf(f_operator, k_instance);
// build prototype chain array
var a_inverse_prototype_chain = [];
var d_pc_node = k_instance;
do {
// add this prototype object to the chain
a_inverse_prototype_chain.unshift(d_pc_node);
// advance up the prototype chain
d_pc_node = Object.getPrototypeOf(d_pc_node);
} while (d_pc_node !== Object.prototype);
// override operator's own 'length' and 'name' properties with those from prototype chain if they exist
a_inverse_prototype_chain.forEach(function (d_ipc_node) {
// override length property
if (d_ipc_node.hasOwnProperty('length')) {
bind_property(f_operator, 'length', d_ipc_node, k_instance);
}
// override name property
if (d_ipc_node.hasOwnProperty('name')) {
bind_property(f_operator, 'name', d_ipc_node, k_instance);
}
});
// return operator/instance handle
return f_operator;
};
// extend class with static members, proxy members on cover object
var copy_assign_static_proxy = function copy_assign_static_proxy(f_cover, y_class, h_static) {
// copy-assign public static members from class onto class cover
Object.getOwnPropertyNames(y_class).forEach(function (s_property) {
Object.defineProperty(f_cover, s_property, Object.getOwnPropertyDescriptor(y_class, s_property));
});
// ammend public static members
Object.keys(h_static).forEach(function (s_property) {
// ref public static member descriptor
var h_psm_descriptor = Object.getOwnPropertyDescriptor(h_static, s_property);
// define actual property on class
Object.defineProperty(y_class, s_property, h_psm_descriptor);
// define proxy property on class cover (getters/setters for class ref to access/mutate public static members)
Object.defineProperty(f_cover, s_property, {
// inherit from actual property
configurable: h_psm_descriptor.configurable,
enumerable: h_psm_descriptor.enumerable,
// define proxy getter
get: function get() {
return y_class[s_property];
},
// define proxy setter
set: function set(z_value) {
y_class[s_property] = z_value;
}
});
});
// return cover
return f_cover;
};
// allow class to be instantiated without `new`
local.export = function (y_class, f_operator) {
var h_static = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];
// cover class with `new`-less function
var f_cover = function f_cover() {
for (var _len5 = arguments.length, a_args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
a_args[_key5] = arguments[_key5];
}
// create class instance
var k_instance = new (Function.prototype.bind.apply(y_class, [null].concat(a_args)))();
// use operator
if ('function' === typeof f_operator) {
// called with `new`
if (new.target) {
throw 'cannot return operator function when using \'new\' keyword';
}
// bind operator proxy
return bind_operator_proxy(f_operator, k_instance);
}
// return instance
return k_instance;
};
// assign static members
return copy_assign_static_proxy(f_cover, y_class, h_static);
};
// allow class to be instantiated asynchronously
local.exportAsync = function (y_class, f_operator) {
var h_static = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];
// constructor cover
var f_cover = function f_cover() {
for (var _len6 = arguments.length, a_args = Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
a_args[_key6] = arguments[_key6];
}
// ref callback at end
var f_okay_instance = a_args[a_args.length - 1];
// prep instance
var k_instance = void 0;
// async callback function
if ('function' === typeof f_okay_instance) {
// asynchronously return instance to caller
var f_okay_constructor = function f_okay_constructor() {
// use operator
if ('function' === typeof f_operator) {
// bind operator proxy
f_okay_instance(bind_operator_proxy(f_operator, k_instance));
}
// no operator
else {
// all done :)
f_okay_instance(k_instance);
}
};
// replace last arg
a_args[a_args.length - 1] = f_okay_constructor;
// create instance
k_instance = new (Function.prototype.bind.apply(y_class, [null].concat(a_args)))();
}
// no callback given
else {
throw 'class ' + y_class.name + ' requires asynchronous construction. expected last argument to be callback function';
}
};
// assign static members
return copy_assign_static_proxy(f_cover, y_class, h_static);
};
//# sourceMappingURL=data:application/json;base64,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LEdBQWMsQ0FBZCxDQUFQLEdBQTBCLGtCQUExQjs7O0FBakJ5QyxhQW9CekMsc0NBQWlCLHVCQUFXLFdBQTVCLENBcEJ5Qzs7O0FBQTFDLE9BdUJLO0FBQ0oscUJBQWUsUUFBUSxJQUFSLHdGQUFmLENBREk7SUF2Qkw7RUFUYTs7O0FBSGdELFFBeUN2RCx5QkFBeUIsT0FBekIsRUFBa0MsT0FBbEMsRUFBMkMsUUFBM0MsQ0FBUCxDQXpDOEQ7Q0FBM0MiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKmVzbGludC1lbnYgbm9kZSwgYnJvd3NlciovXG4vKmVzbGludCBuby1jb25zb2xlOiAwKi9cblxuLy8gZGVmYXVsdCBmb3JlZ3JvdW5kIHNlcXVlbmNlXG5jb25zdCBTX0RFRkFVTFRfQ09MT1IgPSAnXFx1MDAxYlszOW0nO1xuXG4vL1xuY29uc3QgSF9MRVZFTF9DT0xPUlMgPSB7XG5cdGZhaWw6IHtcblx0XHRzZXF1ZW5jZTogJ1xcdTAwMWJbMzg7NTsxOTZtJywgLy8gYmxvb2QgKDE5Nilcblx0XHRjb2xvcjogJ3JlZCcsIC8vIGZvciBicm93c2VyXG5cdFx0Y2hhbm5lbDogJ2Vycm9yJyxcblx0fSxcblx0ZXJyb3I6IHtcblx0XHRzZXF1ZW5jZTogJ1xcdTAwMWJbMzFtJywgLy8gcmVkXG5cdFx0Y2hhbm5lbDogJ2Vycm9yJyxcblx0fSxcblx0d2Fybjoge1xuXHRcdHNlcXVlbmNlOiAnXFx1MDAxYlszODs1OzIwOG0nLCAvLyBnb2xkZW4gKDIwOClcblx0XHRjaGFubmVsOiAnd2FybicsXG5cdH0sXG5cdGluZm86IHtcblx0XHRzZXF1ZW5jZTogJ1xcdTAwMWJbMzRtJywgLy8gYmx1ZVxuXHRcdGNoYW5uZWw6ICdpbmZvJyxcblx0fSxcblx0Z29vZDoge1xuXHRcdHNlcXVlbmNlOiAnXFx1MDAxYlszMm0nLCAvLyBncmVlblxuXHRcdGNvbG9yOiAnbGltZWdyZWVuJyxcblx0XHRjaGFubmVsOiAnbG9nJyxcblx0fSxcblx0b3V0OiB7XG5cdFx0c2VxdWVuY2U6ICdcXHUwMDFiWzk2bScsIC8vIGxpZ2h0IGN5YW5cblx0XHRjb2xvcjogJ2N5YW4nLFxuXHRcdGNoYW5uZWw6ICdsb2cnLFxuXHR9LFxuXHRsb2c6IHtcblx0XHRzZXF1ZW5jZTogJ1xcdTAwMWJbMzltJywgLy8gZGVmYXVsdCBmb3JlZ3JvdW5kIHNlcXVlbmNlXG5cdFx0Y2hhbm5lbDogJ2xvZycsXG5cdH0sXG59O1xuXG4vLyBleHBvcnQgbW9kdWxlXG5jb25zdCBsb2NhbCA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cblxuLy8gY3JlYXRlIGEgbG9nZ2VyIGluc3RhbmNlXG5sb2NhbC5sb2dnZXIgPSBmdW5jdGlvbih5X2NsYXNzLCBoX3N0YXRpYz17fSkge1xuXG5cdC8vIHByZXAgY2xhc3MgbmFtZVxuXHRsZXQgc19jbGFzc19uYW1lID0geV9jbGFzcysnJztcblxuXHQvLyByZWNlaXZlZCBjbGFzc1xuXHRpZignZnVuY3Rpb24nID09PSB0eXBlb2YgeV9jbGFzcykge1xuXG5cdFx0Ly8gc2V0IGNsYXNzIG5hbWVcblx0XHRzX2NsYXNzX25hbWUgPSB5X2NsYXNzLm5hbWU7XG5cblx0XHQvLyBkZWZpbmUgc3RhdGljIG1lbWJlcnNcblx0XHRmb3IobGV0IHNfa2V5IGluIGhfc3RhdGljKSB7XG5cdFx0XHRoX3N0YXRpY1tzX2tleV0gPSBoX3N0YXRpY1tzX2tleV07XG5cdFx0fVxuXHR9XG5cblx0Ly8gcHJlcCBleHBvcnRcblx0bGV0IGhfbG9jYWwgPSB7fTtcblxuXHQvLyBub2RlanNcblx0aWYocHJvY2VzcyAmJiBwcm9jZXNzLnVwdGltZSkge1xuXHRcdC8vIHNldCBsb2dnZXIgYWN0aW9uc1xuXHRcdGZvcihsZXQgc19sZXZlbCBpbiBIX0xFVkVMX0NPTE9SUykge1xuXHRcdFx0Ly8gZmFpbCBoYXVsdHMgc2NyaXB0IGV4ZWN1dGlvblxuXHRcdFx0aWYoJ2ZhaWwnID09PSBzX2xldmVsKSB7XG5cdFx0XHRcdGhfbG9jYWxbc19sZXZlbF0gPSAoZnVuY3Rpb24oc19tc2csIC4uLmFfYXJncykge1xuXHRcdFx0XHRcdGxldCBlX3Rocm93ID0gbmV3IEVycm9yKCk7XG5cdFx0XHRcdFx0bGV0IHNfc3RhY2sgPSBlX3Rocm93LnN0YWNrLnNwbGl0KC9cXG4vZykuc2xpY2UoMikuam9pbignXFxuJyk7XG5cdFx0XHRcdFx0Y29uc29sZVt0aGlzLmNoYW5uZWxdKFxuXHRcdFx0XHRcdFx0YFske3RoaXMuc2VxdWVuY2V9JHtzX2NsYXNzX25hbWV9JHtTX0RFRkFVTFRfQ09MT1J9XSske1xuXHRcdFx0XHRcdFx0XHRwcm9jZXNzLnVwdGltZSgpXG5cdFx0XHRcdFx0XHR9cy8gJHt0aGlzLnNlcXVlbmNlfSR7c19tc2d9XFxuJHtcblx0XHRcdFx0XHRcdFx0c19zdGFja1xuXHRcdFx0XHRcdFx0fSR7U19ERUZBVUxUX0NPTE9SfWAsIC4uLmFfYXJncyk7XG5cdFx0XHRcdFx0ZV90aHJvdy5zdGFjayA9IGBFcnJvclxcbiR7c19zdGFja31gO1xuXHRcdFx0XHRcdHRocm93IGVfdGhyb3c7XG5cdFx0XHRcdH0pLmJpbmQoSF9MRVZFTF9DT0xPUlNbc19sZXZlbF0pO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdGhfbG9jYWxbc19sZXZlbF0gPSAoZnVuY3Rpb24oc19tc2csIC4uLmFfYXJncykge1xuXHRcdFx0XHRcdGNvbnNvbGVbdGhpcy5jaGFubmVsXShcblx0XHRcdFx0XHRcdGBbJHt0aGlzLnNlcXVlbmNlfSR7c19jbGFzc19uYW1lfSR7U19ERUZBVUxUX0NPTE9SfV0rJHtcblx0XHRcdFx0XHRcdFx0cHJvY2Vzcy51cHRpbWUoKVxuXHRcdFx0XHRcdFx0fXMvICR7dGhpcy5zZXF1ZW5jZX0ke3NfbXNnfSR7U19ERUZBVUxUX0NPTE9SfWAsIC4uLmFfYXJncyk7XG5cdFx0XHRcdH0pLmJpbmQoSF9MRVZFTF9DT0xPUlNbc19sZXZlbF0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHQvLyBicm93c2VyXG5cdGVsc2UgaWYod2luZG93ICYmIHdpbmRvdy5wZXJmb3JtYW5jZSkge1xuXHRcdC8vIHNldCBsb2dnZXIgYWN0aW9uc1xuXHRcdGZvcihsZXQgc19sZXZlbCBpbiBIX0xFVkVMX0NPTE9SUykge1xuXHRcdFx0Ly8gZmFpbCBoYXVsdCBzY3JpcHQgZXhlY3V0aW9uXG5cdFx0XHRpZignZmFpbCcgPT09IHNfbGV2ZWwpIHtcblx0XHRcdFx0aF9sb2NhbFtzX2xldmVsXSA9IChmdW5jdGlvbihzX21zZywgLi4uYV9hcmdzKSB7XG5cdFx0XHRcdFx0bGV0IGVfdGhyb3cgPSBuZXcgRXJyb3IoKTtcblx0XHRcdFx0XHRsZXQgc19zdGFjayA9IGVfdGhyb3cuc3RhY2suc3BsaXQoL1xcbi9nKS5zbGljZSgyKS5qb2luKCdcXG4nKTtcblx0XHRcdFx0XHRjb25zb2xlW3RoaXMuY2hhbm5lbF0oXG5cdFx0XHRcdFx0XHRgWyVjJHtzX2NsYXNzX25hbWV9JWNdKyR7XG5cdFx0XHRcdFx0XHRcdCgoRGF0ZS5ub3coKSAtIHdpbmRvdy5wZXJmb3JtYW5jZS50aW1pbmcuZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQpKi4wMDEpLnRvRml4ZWQoMylcblx0XHRcdFx0XHRcdH1zLyAlYyR7c19tc2d9XFxuJHtcblx0XHRcdFx0XHRcdFx0c19zdGFja1xuXHRcdFx0XHRcdFx0fWAsICdjb2xvcjonK3RoaXMuY29sb3IsICdjb2xvcjppbmhlcml0JywgLi4uYV9hcmdzLCAnY29sb3I6Jyt0aGlzLmNvbG9yKTtcblx0XHRcdFx0XHRlX3Rocm93LnN0YWNrID0gYEVycm9yXFxuJHtzX3N0YWNrfWA7XG5cdFx0XHRcdFx0dGhyb3cgZV90aHJvdztcblx0XHRcdFx0fSkuYmluZChIX0xFVkVMX0NPTE9SU1tzX2xldmVsXSk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0aF9sb2NhbFtzX2xldmVsXSA9IChmdW5jdGlvbihzX21zZywgLi4uYV9hcmdzKSB7XG5cdFx0XHRcdFx0Y29uc29sZVt0aGlzLmNoYW5uZWxdKFxuXHRcdFx0XHRcdFx0YFslYyR7c19jbGFzc19uYW1lfSVjXSske1xuXHRcdFx0XHRcdFx0XHQoKERhdGUubm93KCkgLSB3aW5kb3cucGVyZm9ybWFuY2UudGltaW5nLmRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0KSouMDAxKS50b0ZpeGVkKDMpXG5cdFx0XHRcdFx0XHR9cy8gJWMke3NfbXNnfWAsICdjb2xvcjonK3RoaXMuY29sb3IsICdjb2xvcjppbmhlcml0JywgLi4uYV9hcmdzLCAnY29sb3I6Jyt0aGlzLmNvbG9yKTtcblx0XHRcdFx0fSkuYmluZChIX0xFVkVMX0NPTE9SU1tzX2xldmVsXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gcmV0dXJuIGxvZ2dlclxuXHRyZXR1cm4gaF9sb2NhbDtcbn07XG5cblxuLy8gb3ZlcnJpZGUgb3BlcmF0b3IncyBwcm9wZXJ0eSB0byBtaXJyb3IgcHJvdG90eXBlIHByb3BlcnR5XG5jb25zdCBiaW5kX3Byb3BlcnR5ID0gKGZfb3BlcmF0b3IsIHNfcHJvcGVydHksIGRfaXBjX25vZGUsIGtfaW5zdGFuY2UpID0+IHtcblxuXHQvLyByZWYgcHJvcGVydHkgZGVzY3JpcHRvclxuXHRsZXQgaF9wcm9wZXJ0eV9kZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkX2lwY19ub2RlLCBzX3Byb3BlcnR5KTtcblxuXHQvLyBwcm9wZXJ0eSB2YWx1ZSBpcyBhIGZ1bmN0aW9uXG5cdGlmKCdmdW5jdGlvbicgPT09IHR5cGVvZiBoX3Byb3BlcnR5X2Rlc2NyaXB0b3IudmFsdWUpIHtcblx0XHQvLyBkZWZpbmUgbWV0aG9kIG9uIG9wZXJhdG9yJ3Mgb3duIHByb3BlcnR5XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGZfb3BlcmF0b3IsIHNfcHJvcGVydHksXG5cdFx0XHQvLyBleGNlcHQsIG92ZXJyaWRlIGRlc2NyaXB0b3Jcblx0XHRcdE9iamVjdC5hc3NpZ24oaF9wcm9wZXJ0eV9kZXNjcmlwdG9yLCB7XG5cdFx0XHRcdC8vIGJ5IGJpbmRpbmcgaW5zdGFuY2UgdG8gdGhlIGZ1bmN0aW9uXG5cdFx0XHRcdHZhbHVlOiBkX2lwY19ub2RlW3NfcHJvcGVydHldLmJpbmQoa19pbnN0YW5jZSksXG5cdFx0XHR9KSk7XG5cdH1cblx0Ly8gcHJvcGVydHkgaXMgc29tZXRoaW5nIGVsc2Vcblx0ZWxzZSB7XG5cdFx0Ly8gaXQgaGFzIGEgW1tHZXR0ZXJdXSBmdW5jdGlvblxuXHRcdGlmKCdmdW5jdGlvbicgPT09IHR5cGVvZiBoX3Byb3BlcnR5X2Rlc2NyaXB0b3IuZ2V0KSB7XG5cdFx0XHQvLyBiaW5kIHRoZSBpbnN0YW5jZSB0byB0aGUgZ2V0dGVyIGZ1bmN0aW9uIGRlZmluaXRpb25cblx0XHRcdGhfcHJvcGVydHlfZGVzY3JpcHRvci5nZXQgPSBoX3Byb3BlcnR5X2Rlc2NyaXB0b3IuZ2V0LmJpbmQoa19pbnN0YW5jZSk7XG5cdFx0fVxuXHRcdC8vIGl0IGhhcyBhIFtbU2V0dGVyXV0gZnVuY3Rpb25cblx0XHRpZignZnVuY3Rpb24nID09PSB0eXBlb2YgaF9wcm9wZXJ0eV9kZXNjcmlwdG9yLnNldCkge1xuXHRcdFx0Ly8gYmluZCB0aGUgaW5zdGFuY2UgdG8gdGhlIHNldHRlciBmdW5jdGlvbiBkZWZpbml0aW9uXG5cdFx0XHRoX3Byb3BlcnR5X2Rlc2NyaXB0b3Iuc2V0ID0gaF9wcm9wZXJ0eV9kZXNjcmlwdG9yLnNldC5iaW5kKGtfaW5zdGFuY2UpO1xuXHRcdH1cblxuXHRcdC8vIHVzZSB0aGUgZGVzY3JpcHRvciB0byBtaXJyb3IgdGhlIHByb3BlcnR5IG9uIHRoZSBvcGVyYXRvclxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmX29wZXJhdG9yLCBzX3Byb3BlcnR5LCBoX3Byb3BlcnR5X2Rlc2NyaXB0b3IpO1xuXHR9XG59O1xuXG4vLyBzZXQgcHJvdG90eXBlIG9mIG9wZXJhdG9yIHRvIGluc3RhbmNlIGFuZCBvdmVycmlkZSBmdW5jdGlvbidzIG93biBwcm9wZXJ0aWVzXG5jb25zdCBiaW5kX29wZXJhdG9yX3Byb3h5ID0gKGZfb3BlcmF0b3IsIGtfaW5zdGFuY2UpID0+IHtcblxuXHQvLyBiaW5kIGluc3RhbmNlIHRvIG9wZXJhdG9yXG5cdGZfb3BlcmF0b3IgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseShmX29wZXJhdG9yLCBba19pbnN0YW5jZV0pO1xuXG5cdC8vIHNldCBwcm90b3R5cGUgb2Ygb3BlcmF0b3IgdG8gdGhlIGluc3RhbmNlIGl0c2VsZlxuXHRPYmplY3Quc2V0UHJvdG90eXBlT2YoZl9vcGVyYXRvciwga19pbnN0YW5jZSk7XG5cblx0Ly8gYnVpbGQgcHJvdG90eXBlIGNoYWluIGFycmF5XG5cdGxldCBhX2ludmVyc2VfcHJvdG90eXBlX2NoYWluID0gW107XG5cdGxldCBkX3BjX25vZGUgPSBrX2luc3RhbmNlO1xuXHRkbyB7XG5cdFx0Ly8gYWRkIHRoaXMgcHJvdG90eXBlIG9iamVjdCB0byB0aGUgY2hhaW5cblx0XHRhX2ludmVyc2VfcHJvdG90eXBlX2NoYWluLnVuc2hpZnQoZF9wY19ub2RlKTtcblxuXHRcdC8vIGFkdmFuY2UgdXAgdGhlIHByb3RvdHlwZSBjaGFpblxuXHRcdGRfcGNfbm9kZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihkX3BjX25vZGUpO1xuXHR9IHdoaWxlKGRfcGNfbm9kZSAhPT0gT2JqZWN0LnByb3RvdHlwZSk7XG5cblx0Ly8gb3ZlcnJpZGUgb3BlcmF0b3IncyBvd24gJ2xlbmd0aCcgYW5kICduYW1lJyBwcm9wZXJ0aWVzIHdpdGggdGhvc2UgZnJvbSBwcm90b3R5cGUgY2hhaW4gaWYgdGhleSBleGlzdFxuXHRhX2ludmVyc2VfcHJvdG90eXBlX2NoYWluLmZvckVhY2goKGRfaXBjX25vZGUpID0+IHtcblx0XHQvLyBvdmVycmlkZSBsZW5ndGggcHJvcGVydHlcblx0XHRpZihkX2lwY19ub2RlLmhhc093blByb3BlcnR5KCdsZW5ndGgnKSkge1xuXHRcdFx0YmluZF9wcm9wZXJ0eShmX29wZXJhdG9yLCAnbGVuZ3RoJywgZF9pcGNfbm9kZSwga19pbnN0YW5jZSk7XG5cdFx0fVxuXHRcdC8vIG92ZXJyaWRlIG5hbWUgcHJvcGVydHlcblx0XHRpZihkX2lwY19ub2RlLmhhc093blByb3BlcnR5KCduYW1lJykpIHtcblx0XHRcdGJpbmRfcHJvcGVydHkoZl9vcGVyYXRvciwgJ25hbWUnLCBkX2lwY19ub2RlLCBrX2luc3RhbmNlKTtcblx0XHR9XG5cdH0pO1xuXG5cdC8vIHJldHVybiBvcGVyYXRvci9pbnN0YW5jZSBoYW5kbGVcblx0cmV0dXJuIGZfb3BlcmF0b3I7XG59O1xuXG4vLyBleHRlbmQgY2xhc3Mgd2l0aCBzdGF0aWMgbWVtYmVycywgcHJveHkgbWVtYmVycyBvbiBjb3ZlciBvYmplY3RcbmNvbnN0IGNvcHlfYXNzaWduX3N0YXRpY19wcm94eSA9IChmX2NvdmVyLCB5X2NsYXNzLCBoX3N0YXRpYykgPT4ge1xuXG5cdC8vIGNvcHktYXNzaWduIHB1YmxpYyBzdGF0aWMgbWVtYmVycyBmcm9tIGNsYXNzIG9udG8gY2xhc3MgY292ZXJcblx0T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoeV9jbGFzcykuZm9yRWFjaCgoc19wcm9wZXJ0eSkgPT4ge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmX2NvdmVyLCBzX3Byb3BlcnR5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHlfY2xhc3MsIHNfcHJvcGVydHkpKTtcblx0fSk7XG5cblx0Ly8gYW1tZW5kIHB1YmxpYyBzdGF0aWMgbWVtYmVyc1xuXHRPYmplY3Qua2V5cyhoX3N0YXRpYykuZm9yRWFjaCgoc19wcm9wZXJ0eSkgPT4ge1xuXHRcdC8vIHJlZiBwdWJsaWMgc3RhdGljIG1lbWJlciBkZXNjcmlwdG9yXG5cdFx0bGV0IGhfcHNtX2Rlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGhfc3RhdGljLCBzX3Byb3BlcnR5KTtcblxuXHRcdC8vIGRlZmluZSBhY3R1YWwgcHJvcGVydHkgb24gY2xhc3Ncblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoeV9jbGFzcywgc19wcm9wZXJ0eSwgaF9wc21fZGVzY3JpcHRvcik7XG5cblx0XHQvLyBkZWZpbmUgcHJveHkgcHJvcGVydHkgb24gY2xhc3MgY292ZXIgKGdldHRlcnMvc2V0dGVycyBmb3IgY2xhc3MgcmVmIHRvIGFjY2Vzcy9tdXRhdGUgcHVibGljIHN0YXRpYyBtZW1iZXJzKVxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmX2NvdmVyLCBzX3Byb3BlcnR5LCB7XG5cdFx0XHQvLyBpbmhlcml0IGZyb20gYWN0dWFsIHByb3BlcnR5XG5cdFx0XHRjb25maWd1cmFibGU6IGhfcHNtX2Rlc2NyaXB0b3IuY29uZmlndXJhYmxlLFxuXHRcdFx0ZW51bWVyYWJsZTogaF9wc21fZGVzY3JpcHRvci5lbnVtZXJhYmxlLFxuXG5cdFx0XHQvLyBkZWZpbmUgcHJveHkgZ2V0dGVyXG5cdFx0XHRnZXQoKSB7XG5cdFx0XHRcdHJldHVybiB5X2NsYXNzW3NfcHJvcGVydHldO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gZGVmaW5lIHByb3h5IHNldHRlclxuXHRcdFx0c2V0KHpfdmFsdWUpIHtcblx0XHRcdFx0eV9jbGFzc1tzX3Byb3BlcnR5XSA9IHpfdmFsdWU7XG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9KTtcblxuXHQvLyByZXR1cm4gY292ZXJcblx0cmV0dXJuIGZfY292ZXI7XG59O1xuXG5cbi8vIGFsbG93IGNsYXNzIHRvIGJlIGluc3RhbnRpYXRlZCB3aXRob3V0IGBuZXdgXG5sb2NhbC5leHBvcnQgPSBmdW5jdGlvbih5X2NsYXNzLCBmX29wZXJhdG9yLCBoX3N0YXRpYz17fSkge1xuXHQvLyBjb3ZlciBjbGFzcyB3aXRoIGBuZXdgLWxlc3MgZnVuY3Rpb25cblx0bGV0IGZfY292ZXIgPSBmdW5jdGlvbiguLi5hX2FyZ3MpIHtcblxuXHRcdC8vIGNyZWF0ZSBjbGFzcyBpbnN0YW5jZVxuXHRcdGxldCBrX2luc3RhbmNlID0gbmV3IHlfY2xhc3MoLi4uYV9hcmdzKTtcblxuXHRcdC8vIHVzZSBvcGVyYXRvclxuXHRcdGlmKCdmdW5jdGlvbicgPT09IHR5cGVvZiBmX29wZXJhdG9yKSB7XG5cblx0XHRcdC8vIGNhbGxlZCB3aXRoIGBuZXdgXG5cdFx0XHRpZihuZXcudGFyZ2V0KSB7XG5cdFx0XHRcdHRocm93IGBjYW5ub3QgcmV0dXJuIG9wZXJhdG9yIGZ1bmN0aW9uIHdoZW4gdXNpbmcgJ25ldycga2V5d29yZGA7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGJpbmQgb3BlcmF0b3IgcHJveHlcblx0XHRcdHJldHVybiBiaW5kX29wZXJhdG9yX3Byb3h5KGZfb3BlcmF0b3IsIGtfaW5zdGFuY2UpO1xuXHRcdH1cblxuXHRcdC8vIHJldHVybiBpbnN0YW5jZVxuXHRcdHJldHVybiBrX2luc3RhbmNlO1xuXHR9O1xuXG5cdC8vIGFzc2lnbiBzdGF0aWMgbWVtYmVyc1xuXHRyZXR1cm4gY29weV9hc3NpZ25fc3RhdGljX3Byb3h5KGZfY292ZXIsIHlfY2xhc3MsIGhfc3RhdGljKTtcbn07XG5cblxuLy8gYWxsb3cgY2xhc3MgdG8gYmUgaW5zdGFudGlhdGVkIGFzeW5jaHJvbm91c2x5XG5sb2NhbC5leHBvcnRBc3luYyA9IGZ1bmN0aW9uKHlfY2xhc3MsIGZfb3BlcmF0b3IsIGhfc3RhdGljPXt9KSB7XG5cblx0Ly8gY29uc3RydWN0b3IgY292ZXJcblx0bGV0IGZfY292ZXIgPSBmdW5jdGlvbiguLi5hX2FyZ3MpIHtcblxuXHRcdC8vIHJlZiBjYWxsYmFjayBhdCBlbmRcblx0XHRsZXQgZl9va2F5X2luc3RhbmNlID0gYV9hcmdzW2FfYXJncy5sZW5ndGgtMV07XG5cblx0XHQvLyBwcmVwIGluc3RhbmNlXG5cdFx0bGV0IGtfaW5zdGFuY2U7XG5cblx0XHQvLyBhc3luYyBjYWxsYmFjayBmdW5jdGlvblxuXHRcdGlmKCdmdW5jdGlvbicgPT09IHR5cGVvZiBmX29rYXlfaW5zdGFuY2UpIHtcblx0XHRcdC8vIGFzeW5jaHJvbm91c2x5IHJldHVybiBpbnN0YW5jZSB0byBjYWxsZXJcblx0XHRcdGNvbnN0IGZfb2theV9jb25zdHJ1Y3RvciA9ICgpID0+IHtcblxuXHRcdFx0XHQvLyB1c2Ugb3BlcmF0b3Jcblx0XHRcdFx0aWYoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGZfb3BlcmF0b3IpIHtcblx0XHRcdFx0XHQvLyBiaW5kIG9wZXJhdG9yIHByb3h5XG5cdFx0XHRcdFx0Zl9va2F5X2luc3RhbmNlKGJpbmRfb3BlcmF0b3JfcHJveHkoZl9vcGVyYXRvciwga19pbnN0YW5jZSkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIG5vIG9wZXJhdG9yXG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdC8vIGFsbCBkb25lIDopXG5cdFx0XHRcdFx0Zl9va2F5X2luc3RhbmNlKGtfaW5zdGFuY2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0XHQvLyByZXBsYWNlIGxhc3QgYXJnXG5cdFx0XHRhX2FyZ3NbYV9hcmdzLmxlbmd0aC0xXSA9IGZfb2theV9jb25zdHJ1Y3RvcjtcblxuXHRcdFx0Ly8gY3JlYXRlIGluc3RhbmNlXG5cdFx0XHRrX2luc3RhbmNlID0gbmV3IHlfY2xhc3MoLi4uYV9hcmdzKTtcblx0XHR9XG5cdFx0Ly8gbm8gY2FsbGJhY2sgZ2l2ZW5cblx0XHRlbHNlIHtcblx0XHRcdHRocm93IGBjbGFzcyAke3lfY2xhc3MubmFtZX0gcmVxdWlyZXMgYXN5bmNocm9ub3VzIGNvbnN0cnVjdGlvbi4gZXhwZWN0ZWQgbGFzdCBhcmd1bWVudCB0byBiZSBjYWxsYmFjayBmdW5jdGlvbmA7XG5cdFx0fVxuXHR9O1xuXG5cdC8vIGFzc2lnbiBzdGF0aWMgbWVtYmVyc1xuXHRyZXR1cm4gY29weV9hc3NpZ25fc3RhdGljX3Byb3h5KGZfY292ZXIsIHlfY2xhc3MsIGhfc3RhdGljKTtcbn07XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0=

@@ -43,112 +43,5 @@ /*eslint-env node, browser*/

// export module
const local = module.exports = function(){};
const local = module.exports = {};
// allow class to be instantiated without `new`
local.export = function(y_class, f_operator, h_static=false) {
// cover class with `new`-less function
let f_cover = function(...a_args) {
// create class instance
let k_instance = new y_class(...a_args);
// use operator
if('function' === typeof f_operator) {
// bind instance to operator
f_operator = Function.prototype.bind.apply(f_operator, [k_instance]);
// set operator prototype chain to instance prototype chain
Object.setPrototypeOf(f_operator, Object.getPrototypeOf(k_instance));
// build prototype chain array
let a_inverse_prototype_chain = [];
let d_pc_node = k_instance;
do {
// add this prototype object to the chain
a_inverse_prototype_chain.unshift(d_pc_node);
// advance up the prototype chain
d_pc_node = Object.getPrototypeOf(d_pc_node);
} while(d_pc_node !== Object.prototype);
// override operator's own properties with all from prototype chain
a_inverse_prototype_chain.forEach((d_ipc_node) => {
// bind all own properties of protoype to function
Object.getOwnPropertyNames(d_ipc_node).forEach((s_property) => {
// ref property descriptor
let h_property_descriptor = Object.getOwnPropertyDescriptor(d_ipc_node, s_property);
// property value is a function
if('function' === typeof h_property_descriptor.value) {
// define method on operator's own property
Object.defineProperty(f_operator, s_property,
// except, override descriptor
Object.assign(h_property_descriptor, {
// by binding instance to the function
value: d_ipc_node[s_property].bind(k_instance),
}));
}
// property is something else
else {
// it has a [[Getter]] function
if('function' === typeof h_property_descriptor.get) {
// bind the instance to the getter function definition
h_property_descriptor.get = h_property_descriptor.get.bind(k_instance);
}
// it has a [[Setter]] function
if('function' === typeof h_property_descriptor.set) {
// bind the instance to the setter function definition
h_property_descriptor.set = h_property_descriptor.set.bind(k_instance);
}
// use the descriptor to mirror the property on the operator
Object.defineProperty(f_operator, s_property, h_property_descriptor);
}
});
});
// return operator/instance handle
return f_operator;
}
// return instance
return k_instance;
};
// copy-assign public static members from class onto class cover
Object.getOwnPropertyNames(y_class).forEach((s_property) => {
Object.defineProperty(f_cover, s_property, Object.getOwnPropertyDescriptor(y_class, s_property));
});
// ammend public static members
Object.keys(h_static).forEach((s_property) => {
// ref public static member descriptor
let h_psm_descriptor = Object.getOwnPropertyDescriptor(h_static, s_property);
// define actual property on class
Object.defineProperty(y_class, s_property, h_psm_descriptor);
// define proxy property on class cover (getters/setters for class ref to access/mutate public static members)
Object.defineProperty(f_cover, s_property, {
// inherit from actual property
configurable: h_psm_descriptor.configurable,
enumerable: h_psm_descriptor.enumerable,
// define proxy getter
get() {
return y_class[s_property];
},
// define proxy setter
set(z_value) {
y_class[s_property] = z_value;
},
});
});
// return cover
return f_cover;
};
// create a logger instance

@@ -238,1 +131,184 @@ local.logger = function(y_class, h_static={}) {

// override operator's property to mirror prototype property
const bind_property = (f_operator, s_property, d_ipc_node, k_instance) => {
// ref property descriptor
let h_property_descriptor = Object.getOwnPropertyDescriptor(d_ipc_node, s_property);
// property value is a function
if('function' === typeof h_property_descriptor.value) {
// define method on operator's own property
Object.defineProperty(f_operator, s_property,
// except, override descriptor
Object.assign(h_property_descriptor, {
// by binding instance to the function
value: d_ipc_node[s_property].bind(k_instance),
}));
}
// property is something else
else {
// it has a [[Getter]] function
if('function' === typeof h_property_descriptor.get) {
// bind the instance to the getter function definition
h_property_descriptor.get = h_property_descriptor.get.bind(k_instance);
}
// it has a [[Setter]] function
if('function' === typeof h_property_descriptor.set) {
// bind the instance to the setter function definition
h_property_descriptor.set = h_property_descriptor.set.bind(k_instance);
}
// use the descriptor to mirror the property on the operator
Object.defineProperty(f_operator, s_property, h_property_descriptor);
}
};
// set prototype of operator to instance and override function's own properties
const bind_operator_proxy = (f_operator, k_instance) => {
// bind instance to operator
f_operator = Function.prototype.bind.apply(f_operator, [k_instance]);
// set prototype of operator to the instance itself
Object.setPrototypeOf(f_operator, k_instance);
// build prototype chain array
let a_inverse_prototype_chain = [];
let d_pc_node = k_instance;
do {
// add this prototype object to the chain
a_inverse_prototype_chain.unshift(d_pc_node);
// advance up the prototype chain
d_pc_node = Object.getPrototypeOf(d_pc_node);
} while(d_pc_node !== Object.prototype);
// override operator's own 'length' and 'name' properties with those from prototype chain if they exist
a_inverse_prototype_chain.forEach((d_ipc_node) => {
// override length property
if(d_ipc_node.hasOwnProperty('length')) {
bind_property(f_operator, 'length', d_ipc_node, k_instance);
}
// override name property
if(d_ipc_node.hasOwnProperty('name')) {
bind_property(f_operator, 'name', d_ipc_node, k_instance);
}
});
// return operator/instance handle
return f_operator;
};
// extend class with static members, proxy members on cover object
const copy_assign_static_proxy = (f_cover, y_class, h_static) => {
// copy-assign public static members from class onto class cover
Object.getOwnPropertyNames(y_class).forEach((s_property) => {
Object.defineProperty(f_cover, s_property, Object.getOwnPropertyDescriptor(y_class, s_property));
});
// ammend public static members
Object.keys(h_static).forEach((s_property) => {
// ref public static member descriptor
let h_psm_descriptor = Object.getOwnPropertyDescriptor(h_static, s_property);
// define actual property on class
Object.defineProperty(y_class, s_property, h_psm_descriptor);
// define proxy property on class cover (getters/setters for class ref to access/mutate public static members)
Object.defineProperty(f_cover, s_property, {
// inherit from actual property
configurable: h_psm_descriptor.configurable,
enumerable: h_psm_descriptor.enumerable,
// define proxy getter
get() {
return y_class[s_property];
},
// define proxy setter
set(z_value) {
y_class[s_property] = z_value;
},
});
});
// return cover
return f_cover;
};
// allow class to be instantiated without `new`
local.export = function(y_class, f_operator, h_static={}) {
// cover class with `new`-less function
let f_cover = function(...a_args) {
// create class instance
let k_instance = new y_class(...a_args);
// use operator
if('function' === typeof f_operator) {
// called with `new`
if(new.target) {
throw `cannot return operator function when using 'new' keyword`;
}
// bind operator proxy
return bind_operator_proxy(f_operator, k_instance);
}
// return instance
return k_instance;
};
// assign static members
return copy_assign_static_proxy(f_cover, y_class, h_static);
};
// allow class to be instantiated asynchronously
local.exportAsync = function(y_class, f_operator, h_static={}) {
// constructor cover
let f_cover = function(...a_args) {
// ref callback at end
let f_okay_instance = a_args[a_args.length-1];
// prep instance
let k_instance;
// async callback function
if('function' === typeof f_okay_instance) {
// asynchronously return instance to caller
const f_okay_constructor = () => {
// use operator
if('function' === typeof f_operator) {
// bind operator proxy
f_okay_instance(bind_operator_proxy(f_operator, k_instance));
}
// no operator
else {
// all done :)
f_okay_instance(k_instance);
}
};
// replace last arg
a_args[a_args.length-1] = f_okay_constructor;
// create instance
k_instance = new y_class(...a_args);
}
// no callback given
else {
throw `class ${y_class.name} requires asynchronous construction. expected last argument to be callback function`;
}
};
// assign static members
return copy_assign_static_proxy(f_cover, y_class, h_static);
};

@@ -1,13 +0,8 @@

var a_version = process.versions.node.split(/\./g);
var n_major = ~~a_version[0];
var n_minor = ~~a_version[1];
var n_patch = ~~a_version[2];
// only for node >= v6.2.1 (prior releases of 6 cause debugging errors)
if(n_major > 6 || (n_major === 6 && (n_minor > 2 || (n_minor === 2 && n_patch >= 1)))) {
// only for node >= v6 (prior releases do not stably support es6)
if(~~process.versions.node.split(/\./g)[0] >= 6) {
module.exports = require('./dist.es6/main/index.js');
}
// default to es5 version
// otherwise, default to es5 version
else {
module.exports = require('./dist.es5/main/index.js');
}
{
"name": "classer",
"version": "1.0.1",
"version": "1.1.0",
"description": "A dependent-less module utility to create `new`-less class instances that double as operator functions",

@@ -5,0 +5,0 @@ "author": {

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc