UNPKG

@trademe/ensure

Version:

49 lines (48 loc) 5.83 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ // Constants: const /** @type {?} */ VALUE_KEY = '__value_'; /** * @param {...?} guards * @return {?} */ export function Value(...guards) { const /** @type {?} */ guardsArray = getGuardsArray(guards); const /** @type {?} */ getters = guardsArray.filter(c => c.isGetter); const /** @type {?} */ setters = guardsArray.filter(c => !c.isGetter); return (target, propertyKey) => { Object.defineProperty(target, propertyKey, { get: function () { const /** @type {?} */ value = (/** @type {?} */ (Reflect)).getMetadata(`${VALUE_KEY}${propertyKey}`, this); getters.forEach(getter => { getter.call(this, value, propertyKey); }); return value; }, set: function (value) { let /** @type {?} */ castValue = value; if (castValue === 'null') { castValue = null; } if (castValue != null) { setters.forEach(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: const [firstGuard] = guards; return Array.isArray(firstGuard) ? /** @type {?} */ (firstGuard) : /** @type {?} */ (guards); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdHJhZGVtZS9lbnN1cmUvIiwic291cmNlcyI6WyJ2YWx1ZS92YWx1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUtBLHVCQUFNLFNBQVMsR0FBRyxVQUFVLENBQUM7Ozs7O0FBRTdCLE1BQU0sZ0JBQWlCLEdBQUcsTUFBNkM7SUFDbkUsdUJBQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUUzQyx1QkFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwRCx1QkFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRXJELE1BQU0sQ0FBQyxDQUFDLE1BQVcsRUFBRSxXQUFtQixFQUFFLEVBQUU7UUFDeEMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFO1lBQ3ZDLEdBQUcsRUFBRTtnQkFDRCx1QkFBTSxLQUFLLEdBQUcsbUJBQUMsT0FBYyxFQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsU0FBUyxHQUFHLFdBQVcsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUMvRSxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUNyQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7aUJBQ3pDLENBQUMsQ0FBQztnQkFDSCxNQUFNLENBQUMsS0FBSyxDQUFDO2FBQ2hCO1lBQ0QsR0FBRyxFQUFFLFVBQVUsS0FBSztnQkFDaEIscUJBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztnQkFFdEIsRUFBRSxDQUFDLENBQUMsU0FBUyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQ3ZCLFNBQVMsR0FBRyxJQUFJLENBQUM7aUJBQ3BCO2dCQUVELEVBQUUsQ0FBQyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUNwQixPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO3dCQUNyQixTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO3FCQUN6RCxDQUFDLENBQUM7aUJBQ047Z0JBQ0QsbUJBQUMsT0FBYyxFQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsU0FBUyxHQUFHLFdBQVcsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNsRjtTQUNKLENBQUMsQ0FBQztLQUNOLENBQUM7Q0FDTDs7Ozs7QUFFRCx3QkFBeUIsTUFBNkM7O0lBRWxFLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDNUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxtQkFBQyxVQUErQixFQUFDLENBQUMsbUJBQUMsTUFBMkIsQ0FBQSxDQUFDO0NBQ3BHIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRGVwZW5kZW5jaWVzOlxuaW1wb3J0IHsgaXNOb3ROdWxsIH0gZnJvbSAnLi4vZ3VhcmRzL25vdC1udWxsJztcbmltcG9ydCB7IEd1YXJkIH0gZnJvbSAnLi4vZ3VhcmQvZ3VhcmQnO1xuXG4vLyBDb25zdGFudHM6XG5jb25zdCBWQUxVRV9LRVkgPSAnX192YWx1ZV8nO1xuXG5leHBvcnQgZnVuY3Rpb24gVmFsdWUgKC4uLmd1YXJkczogQXJyYXk8R3VhcmQ8YW55PiB8IEFycmF5PEd1YXJkPGFueT4+Pik6IFByb3BlcnR5RGVjb3JhdG9yIHtcbiAgICBjb25zdCBndWFyZHNBcnJheSA9IGdldEd1YXJkc0FycmF5KGd1YXJkcyk7XG5cbiAgICBjb25zdCBnZXR0ZXJzID0gZ3VhcmRzQXJyYXkuZmlsdGVyKGMgPT4gYy5pc0dldHRlcik7XG4gICAgY29uc3Qgc2V0dGVycyA9IGd1YXJkc0FycmF5LmZpbHRlcihjID0+ICFjLmlzR2V0dGVyKTtcblxuICAgIHJldHVybiAodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gKFJlZmxlY3QgYXMgYW55KS5nZXRNZXRhZGF0YShgJHtWQUxVRV9LRVl9JHtwcm9wZXJ0eUtleX1gLCB0aGlzKTtcbiAgICAgICAgICAgICAgICBnZXR0ZXJzLmZvckVhY2goZ2V0dGVyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0dGVyLmNhbGwodGhpcywgdmFsdWUsIHByb3BlcnR5S2V5KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBsZXQgY2FzdFZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgICAgICAgICBpZiAoY2FzdFZhbHVlID09PSAnbnVsbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoY2FzdFZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0dGVycy5mb3JFYWNoKHNldHRlciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXN0VmFsdWUgPSBzZXR0ZXIuY2FsbCh0aGlzLCBjYXN0VmFsdWUsIHByb3BlcnR5S2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIChSZWZsZWN0IGFzIGFueSkuZGVmaW5lTWV0YWRhdGEoYCR7VkFMVUVfS0VZfSR7cHJvcGVydHlLZXl9YCwgY2FzdFZhbHVlLCB0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0R3VhcmRzQXJyYXkgKGd1YXJkczogQXJyYXk8R3VhcmQ8YW55PiB8IEFycmF5PEd1YXJkPGFueT4+Pik6IEFycmF5PEd1YXJkPGFueT4+IHtcbiAgICAvLyBIYW5kbGUgb2xkIEBWYWx1ZShbZ3VhcmRPbmUsIGd1YXJkVHdvXSkgc3ludGF4OlxuICAgIGNvbnN0IFtmaXJzdEd1YXJkXSA9IGd1YXJkcztcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShmaXJzdEd1YXJkKSA/IGZpcnN0R3VhcmQgYXMgQXJyYXk8R3VhcmQ8YW55Pj4gOiBndWFyZHMgYXMgQXJyYXk8R3VhcmQ8YW55Pj47XG59XG4iXX0=