ember-source
Version:
A JavaScript framework for creating ambitious web applications
32 lines (28 loc) • 841 B
JavaScript
import { d as dirtyTagFor, t as tagFor } from './meta-B9mldqPL.js';
import { a as consumeTag } from './cache-BIlOoPA7.js';
function trackedData(key, initializer) {
let values = new WeakMap();
let hasInitializer = typeof initializer === 'function';
function getter(self) {
consumeTag(tagFor(self, key));
let value;
// If the field has never been initialized, we should initialize it
if (hasInitializer && !values.has(self)) {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- @fixme
value = initializer.call(self);
values.set(self, value);
} else {
value = values.get(self);
}
return value;
}
function setter(self, value) {
dirtyTagFor(self, key);
values.set(self, value);
}
return {
getter,
setter
};
}
export { trackedData as t };