Repository URL to install this package:
|
Version:
1.2.12 ▾
|
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.withSelector = exports.decorateWithStyledSelector = exports.styledSelector = styledSelector;
exports.default = void 0;
var _exotic = require("exotic");
var _identifier = require("../../identifier");
// @note - this is a list of identifiers too... selectors tho
const matchAllNonWords = /\W+/g;
let count = 0;
let viewRegistry = new WeakMap();
function getCountFor(thisArg) {
if (viewRegistry.has(thisArg)) {
return viewRegistry.get(thisArg);
} else {
count += 1;
viewRegistry.set(thisArg, count);
return count;
}
}
function getSelector() {
const name = (0, _identifier.toComponentName)(this);
let selector = name;
if (!(0, _exotic.isNil)(this.props.selector)) {
selector += '-' + this.props.selector + ' x';
} // if (!isNil(this.props.key)) {
// selector += '-' + this.props.key + ' x'
// }
// encodeURIComponent(selector)
selector = selector.replace(matchAllNonWords, '_');
return selector + getCountFor(this);
}
/**
* @description todo
* @param {string} id id can be a string, or the Target class from decorator (decorator options vs none)
* @return {Function | String | ClassDecorator}
*/
function styledSelector(id) {
function extendTarget(Target) {
// if (!hasPrototype(Target)) {
// // validate
// throw new Error('must pass in a class, passed in ' + JSON.stringify(Target))
// }
if ((0, _exotic.isFunction)(Target.getSelector)) {
// already insantiated
return Target;
} // all react instances are frozen
if (!Object.isExtensible(Target)) {
return getSelector.call(Target, Target);
} // on class
if ((0, _exotic.isObj)(Target.prototype)) {
Target.prototype.getSelector = getSelector;
} // on instance & static
Target.getSelector = getSelector;
return Target;
}
if ((0, _exotic.isObj)(id)) {
return extendTarget(id);
} else {
// if isString(id)
return extendTarget;
}
}
var _default = styledSelector;
exports.default = _default;