import { reactiveInjectKey } from './inject'; export function needToProduceProvide(original) { return (typeof original !== 'function' || (!original.managed && !original.managedReactive)); } export function produceProvide(original) { var provide = function () { var _this = this; var rv = typeof original === 'function' ? original.call(this) : original; rv = Object.create(rv || null); // set reactive services (propagates previous services if necessary) rv[reactiveInjectKey] = Object.create(this[reactiveInjectKey] || {}); for (var i in provide.managed) { rv[provide.managed[i]] = this[i]; } var _loop_1 = function (i) { rv[provide.managedReactive[i]] = this_1[i]; // Duplicates the behavior of `@Provide` Object.defineProperty(rv[reactiveInjectKey], provide.managedReactive[i], { enumerable: true, get: function () { return _this[i]; }, }); }; var this_1 = this; for (var i in provide.managedReactive) { _loop_1(i); } return rv; }; provide.managed = {}; provide.managedReactive = {}; return provide; }