@trademe/ensure
Version:
56 lines (55 loc) • 6.18 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
// Constants:
var /** @type {?} */ VALUE_KEY = '__value_';
/**
* @param {...?} guards
* @return {?}
*/
export function Value() {
var guards = [];
for (var _i = 0; _i < arguments.length; _i++) {
guards[_i] = arguments[_i];
}
var /** @type {?} */ guardsArray = getGuardsArray(guards);
var /** @type {?} */ getters = guardsArray.filter(function (c) { return c.isGetter; });
var /** @type {?} */ setters = guardsArray.filter(function (c) { return !c.isGetter; });
return function (target, propertyKey) {
Object.defineProperty(target, propertyKey, {
get: function () {
var _this = this;
var /** @type {?} */ value = (/** @type {?} */ (Reflect)).getMetadata("" + VALUE_KEY + propertyKey, this);
getters.forEach(function (getter) {
getter.call(_this, value, propertyKey);
});
return value;
},
set: function (value) {
var _this = this;
var /** @type {?} */ castValue = value;
if (castValue === 'null') {
castValue = null;
}
if (castValue != null) {
setters.forEach(function (setter) {
castValue = setter.call(_this, castValue, propertyKey);
});
}
(/** @type {?} */ (Reflect)).defineMetadata("" + VALUE_KEY + propertyKey, castValue, this);
}
});
};
}
/**
* @param {?} guards
* @return {?}
*/
function getGuardsArray(guards) {
// Handle old @Value([guardOne, guardTwo]) syntax:
var _a = tslib_1.__read(guards, 1), firstGuard = _a[0];
return Array.isArray(firstGuard) ? /** @type {?} */ (firstGuard) : /** @type {?} */ (guards);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdHJhZGVtZS9lbnN1cmUvIiwic291cmNlcyI6WyJ2YWx1ZS92YWx1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFLQSxxQkFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDOzs7OztBQUU3QixNQUFNO0lBQWlCLGdCQUFnRDtTQUFoRCxVQUFnRCxFQUFoRCxxQkFBZ0QsRUFBaEQsSUFBZ0Q7UUFBaEQsMkJBQWdEOztJQUNuRSxxQkFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTNDLHFCQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLFFBQVEsRUFBVixDQUFVLENBQUMsQ0FBQztJQUNwRCxxQkFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBWCxDQUFXLENBQUMsQ0FBQztJQUVyRCxNQUFNLENBQUMsVUFBQyxNQUFXLEVBQUUsV0FBbUI7UUFDcEMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFO1lBQ3ZDLEdBQUcsRUFBRTtnQkFBQSxpQkFNSjtnQkFMRyxxQkFBTSxLQUFLLEdBQUcsbUJBQUMsT0FBYyxFQUFDLENBQUMsV0FBVyxDQUFDLEtBQUcsU0FBUyxHQUFHLFdBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDL0UsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFBLE1BQU07b0JBQ2xCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztpQkFDekMsQ0FBQyxDQUFDO2dCQUNILE1BQU0sQ0FBQyxLQUFLLENBQUM7YUFDaEI7WUFDRCxHQUFHLEVBQUUsVUFBVSxLQUFLO2dCQUFmLGlCQWFKO2dCQVpHLHFCQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7Z0JBRXRCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUN2QixTQUFTLEdBQUcsSUFBSSxDQUFDO2lCQUNwQjtnQkFFRCxFQUFFLENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDcEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFBLE1BQU07d0JBQ2xCLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUksRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7cUJBQ3pELENBQUMsQ0FBQztpQkFDTjtnQkFDRCxtQkFBQyxPQUFjLEVBQUMsQ0FBQyxjQUFjLENBQUMsS0FBRyxTQUFTLEdBQUcsV0FBYSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNsRjtTQUNKLENBQUMsQ0FBQztLQUNOLENBQUM7Q0FDTDs7Ozs7QUFFRCx3QkFBeUIsTUFBNkM7O0lBRWxFLG9DQUFPLGtCQUFVLENBQVc7SUFDNUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxtQkFBQyxVQUErQixFQUFDLENBQUMsbUJBQUMsTUFBMkIsQ0FBQSxDQUFDO0NBQ3BHIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRGVwZW5kZW5jaWVzOlxuaW1wb3J0IHsgaXNOb3ROdWxsIH0gZnJvbSAnLi4vZ3VhcmRzL25vdC1udWxsJztcbmltcG9ydCB7IEd1YXJkIH0gZnJvbSAnLi4vZ3VhcmQvZ3VhcmQnO1xuXG4vLyBDb25zdGFudHM6XG5jb25zdCBWQUxVRV9LRVkgPSAnX192YWx1ZV8nO1xuXG5leHBvcnQgZnVuY3Rpb24gVmFsdWUgKC4uLmd1YXJkczogQXJyYXk8R3VhcmQ8YW55PiB8IEFycmF5PEd1YXJkPGFueT4+Pik6IFByb3BlcnR5RGVjb3JhdG9yIHtcbiAgICBjb25zdCBndWFyZHNBcnJheSA9IGdldEd1YXJkc0FycmF5KGd1YXJkcyk7XG5cbiAgICBjb25zdCBnZXR0ZXJzID0gZ3VhcmRzQXJyYXkuZmlsdGVyKGMgPT4gYy5pc0dldHRlcik7XG4gICAgY29uc3Qgc2V0dGVycyA9IGd1YXJkc0FycmF5LmZpbHRlcihjID0+ICFjLmlzR2V0dGVyKTtcblxuICAgIHJldHVybiAodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gKFJlZmxlY3QgYXMgYW55KS5nZXRNZXRhZGF0YShgJHtWQUxVRV9LRVl9JHtwcm9wZXJ0eUtleX1gLCB0aGlzKTtcbiAgICAgICAgICAgICAgICBnZXR0ZXJzLmZvckVhY2goZ2V0dGVyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0dGVyLmNhbGwodGhpcywgdmFsdWUsIHByb3BlcnR5S2V5KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBsZXQgY2FzdFZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgICAgICAgICBpZiAoY2FzdFZhbHVlID09PSAnbnVsbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoY2FzdFZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0dGVycy5mb3JFYWNoKHNldHRlciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXN0VmFsdWUgPSBzZXR0ZXIuY2FsbCh0aGlzLCBjYXN0VmFsdWUsIHByb3BlcnR5S2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIChSZWZsZWN0IGFzIGFueSkuZGVmaW5lTWV0YWRhdGEoYCR7VkFMVUVfS0VZfSR7cHJvcGVydHlLZXl9YCwgY2FzdFZhbHVlLCB0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0R3VhcmRzQXJyYXkgKGd1YXJkczogQXJyYXk8R3VhcmQ8YW55PiB8IEFycmF5PEd1YXJkPGFueT4+Pik6IEFycmF5PEd1YXJkPGFueT4+IHtcbiAgICAvLyBIYW5kbGUgb2xkIEBWYWx1ZShbZ3VhcmRPbmUsIGd1YXJkVHdvXSkgc3ludGF4OlxuICAgIGNvbnN0IFtmaXJzdEd1YXJkXSA9IGd1YXJkcztcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShmaXJzdEd1YXJkKSA/IGZpcnN0R3VhcmQgYXMgQXJyYXk8R3VhcmQ8YW55Pj4gOiBndWFyZHMgYXMgQXJyYXk8R3VhcmQ8YW55Pj47XG59XG4iXX0=