Repository URL to install this package:
|
Version:
1.1.21 ▾
|
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.decorateWithIdentifier = decorateWithIdentifier;
var _index = require("../chain-able/index.js");
var _exotic = require("../exotic");
var _decorateComponentStatics = _interopRequireDefault(require("../observable-utils/deps/decorateComponentStatics"));
var _toIdentifier = _interopRequireDefault(require("./toIdentifier"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/* eslint-disable max-statements */
/* eslint-disable brace-style */
/* @lint ^ 1 is for tests, 1 is for readable long conditionals */
// import decorateComponentStatics from './decorateComponentStatics'
// @todo remove
// local
// @alias stamp
const CLASS_IDENTIFIER = Symbol.for('@@classidentifier');
const INSTANCE_IDENTIFIER = Symbol.for('@@instanceidentifier');
/**
* @description defines 2 symbols on a class for unique identifiers
* based on class & instance
* allowing id gen & weakmap scope for multi-instance context
* @param {React.Component} Target
* @return {React.Component}
*/
function decorateWithIdentifier(Target) {
const classIdentifier = (0, _toIdentifier.default)(Target);
let Identity = class Identity extends Target {
constructor(...args) {
super(...args);
const instanceIdentifier = (0, _toIdentifier.default)(Target);
if ((0, _exotic.hasOwnProp)(this, Symbol.toPrimitive) === false) {
(0, _index.defineFinal)(Identity, Symbol.toPrimitive, (0, _index.always)(instanceIdentifier));
}
(0, _index.defineFinal)(Identity, INSTANCE_IDENTIFIER, instanceIdentifier);
return this;
}
};
(0, _decorateComponentStatics.default)(Identity, Target);
(0, _index.defineFinal)(Identity, CLASS_IDENTIFIER, classIdentifier);
return Identity;
}