Beta 7 with some repo names changed.
This commit is contained in:
1 parent
0f7b40cca7
commit
963c19493a
3408 files changed
+462217
-15516
No files matched your search
+66
@@ -0,0 +1,66 @@
|
||||
'use strict';
|
||||
|
||||
function withIs(Class, { className, symbolName }) {
|
||||
const symbol = Symbol.for(symbolName);
|
||||
|
||||
const ClassIsWrapper = {
|
||||
// The code below assigns the class wrapper to an object to trick
|
||||
// JavaScript engines to show the name of the extended class when
|
||||
// logging an instances.
|
||||
// We are assigning an anonymous class (class wrapper) to the object
|
||||
// with key `className` to keep the correct name.
|
||||
// If this is not supported it falls back to logging `ClassIsWrapper`.
|
||||
[className]: class extends Class {
|
||||
constructor(...args) {
|
||||
super(...args);
|
||||
Object.defineProperty(this, symbol, { value: true });
|
||||
}
|
||||
|
||||
get [Symbol.toStringTag]() {
|
||||
return className;
|
||||
}
|
||||
},
|
||||
}[className];
|
||||
|
||||
ClassIsWrapper[`is${className}`] = (obj) => !!(obj && obj[symbol]);
|
||||
|
||||
return ClassIsWrapper;
|
||||
}
|
||||
|
||||
function withIsProto(Class, { className, symbolName, withoutNew }) {
|
||||
const symbol = Symbol.for(symbolName);
|
||||
|
||||
/* eslint-disable object-shorthand */
|
||||
const ClassIsWrapper = {
|
||||
[className]: function (...args) {
|
||||
if (withoutNew && !(this instanceof ClassIsWrapper)) {
|
||||
return new ClassIsWrapper(...args);
|
||||
}
|
||||
|
||||
const _this = Class.call(this, ...args) || this;
|
||||
|
||||
if (_this && !_this[symbol]) {
|
||||
Object.defineProperty(_this, symbol, { value: true });
|
||||
}
|
||||
|
||||
return _this;
|
||||
},
|
||||
}[className];
|
||||
/* eslint-enable object-shorthand */
|
||||
|
||||
ClassIsWrapper.prototype = Object.create(Class.prototype);
|
||||
ClassIsWrapper.prototype.constructor = ClassIsWrapper;
|
||||
|
||||
Object.defineProperty(ClassIsWrapper.prototype, Symbol.toStringTag, {
|
||||
get() {
|
||||
return className;
|
||||
},
|
||||
});
|
||||
|
||||
ClassIsWrapper[`is${className}`] = (obj) => !!(obj && obj[symbol]);
|
||||
|
||||
return ClassIsWrapper;
|
||||
}
|
||||
|
||||
module.exports = withIs;
|
||||
module.exports.proto = withIsProto;
|
||||
Reference in new issue
Block a user