@thefoxjob/js-meta
Version:
Stores meta data of various kinds about given target classes or methods
109 lines (85 loc) • 2.76 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _InvalidTarget = require('./../Exceptions/InvalidTarget');
var _InvalidTarget2 = _interopRequireDefault(_InvalidTarget);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
/**
* Data symbol
*
* @type {Symbol}
*
* @private
*/
var _data = Symbol('meta-data');
/**
* Target symbol
*
* @type {Symbol}
* @private
*/
var _target = Symbol('meta-target');
/**
* @class Meta Data
*
* @description Holds arbitrary data about or for a given target
*
* @author Alin Eugen Deac <aedart@gmail.com>
*/
var Data = function () {
/**
* @constructor
*
* @param {Function|Object} target
* @param {Object} [data] Key value pairs
*
* @throws {InvalidTarget}
*/
function Data(target) {
var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
_classCallCheck(this, Data);
var type = typeof target === 'undefined' ? 'undefined' : _typeof(target);
if (!(type === 'function' || type === 'object')) {
throw new _InvalidTarget2.default();
}
this[_target] = target;
this.data = data;
}
/**
* Get the target
*
* @returns {Function|Object}
*/
_createClass(Data, [{
key: 'target',
get: function get() {
return this[_target];
}
/**
* Set arbitrary data
*
* @param {Object} value Key value pairs
*/
}, {
key: 'data',
set: function set(value) {
this[_data] = value;
return this;
}
/**
* Get arbitrary data
*
* @returns {Object}
*/
,
get: function get() {
return this[_data];
}
}]);
return Data;
}();
exports.default = Data;