1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- (function() {
- var Mixin, PropertyAccessors, WeakMap, _ref, _ref1,
- __hasProp = {}.hasOwnProperty,
- __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
- Mixin = require('mixto');
- WeakMap = (_ref = global.WeakMap) != null ? _ref : require('es6-weak-map');
- module.exports = PropertyAccessors = (function(_super) {
- __extends(PropertyAccessors, _super);
- function PropertyAccessors() {
- _ref1 = PropertyAccessors.__super__.constructor.apply(this, arguments);
- return _ref1;
- }
- PropertyAccessors.prototype.accessor = function(name, definition) {
- if (typeof definition === 'function') {
- definition = {
- get: definition
- };
- }
- return Object.defineProperty(this, name, definition);
- };
- PropertyAccessors.prototype.advisedAccessor = function(name, definition) {
- var getAdvice, setAdvice, values;
- if (typeof definition === 'function') {
- getAdvice = definition;
- } else {
- getAdvice = definition.get;
- setAdvice = definition.set;
- }
- values = new WeakMap;
- return this.accessor(name, {
- get: function() {
- if (getAdvice != null) {
- getAdvice.call(this);
- }
- return values.get(this);
- },
- set: function(newValue) {
- if (setAdvice != null) {
- setAdvice.call(this, newValue, values.get(this));
- }
- return values.set(this, newValue);
- }
- });
- };
- PropertyAccessors.prototype.lazyAccessor = function(name, definition) {
- var values;
- values = new WeakMap;
- return this.accessor(name, {
- get: function() {
- if (values.has(this)) {
- return values.get(this);
- } else {
- values.set(this, definition.call(this));
- return values.get(this);
- }
- },
- set: function(value) {
- return values.set(this, value);
- }
- });
- };
- return PropertyAccessors;
- })(Mixin);
- }).call(this);
|