<commit_before>export function observable(targetOrConfig, key, descriptor) {
	console.trace('observable');
	let deco = function(target, key2, descriptor2) {
		// use a convention to compute the inner property name and the callback 
		// function name.
		let innerPropertyName = `_${key2}`;
		let callbackName = (targetOrConfig && targetOrConfig.changeHandler) || `${key2}Changed`;

		// typescript or babel?
		let babel = arguments.length === 3;
		
		if(babel) {
			// babel passes in the property descriptor with a method to get the initial value.

			// set the initial value of the property if it is defined.
			if(typeof descriptor2.initializer === 'function') {
				target[innerPropertyName] = descriptor2.initializer();
			}
		} else {
			descriptor =  {};
		}
		
		// we're adding a getter and setter which means the property descriptor
		// cannot have a "value" or "writable" attribute
		delete descriptor2.writable;
		delete descriptor2.initializer;

		// add the getter and setter to the property descriptor.
		descriptor2.get = function() { return this[innerPropertyName]; };
		descriptor2.set = function(newValue) {
			let oldValue = this[innerPropertyName];
			this[innerPropertyName] = newValue;
			if (this[callbackName]) {
				this[callbackName](newValue, oldValue);
			}
		};

		// make sure Aurelia doesn't use dirty-checking by declaring the property's
		// dependencies. This is the equivalent of "@computedFrom(...)".
		descriptor2.get.dependencies = [innerPropertyName];
		
		if(!babel) {
			Object.defineProperty(target, key2, descriptor);
		}
	}

	if(key) {
		let target = targetOrConfig;
		targetOrConfig = null;
		return deco(target, key, descriptor);
	}

	return deco;
}<commit_msg>feat(observable decorator) removed a debug trace<commit_after>export function observable(targetOrConfig, key, descriptor) {
	let deco = function(target, key2, descriptor2) {
		// use a convention to compute the inner property name and the callback 
		// function name.
		let innerPropertyName = `_${key2}`;
		let callbackName = (targetOrConfig && targetOrConfig.changeHandler) || `${key2}Changed`;

		// typescript or babel?
		let babel = arguments.length === 3;
		
		if(babel) {
			// babel passes in the property descriptor with a method to get the initial value.

			// set the initial value of the property if it is defined.
			if(typeof descriptor2.initializer === 'function') {
				target[innerPropertyName] = descriptor2.initializer();
			}
		} else {
			descriptor =  {};
		}
		
		// we're adding a getter and setter which means the property descriptor
		// cannot have a "value" or "writable" attribute
		delete descriptor2.writable;
		delete descriptor2.initializer;

		// add the getter and setter to the property descriptor.
		descriptor2.get = function() { return this[innerPropertyName]; };
		descriptor2.set = function(newValue) {
			let oldValue = this[innerPropertyName];
			this[innerPropertyName] = newValue;
			if (this[callbackName]) {
				this[callbackName](newValue, oldValue);
			}
		};

		// make sure Aurelia doesn't use dirty-checking by declaring the property's
		// dependencies. This is the equivalent of "@computedFrom(...)".
		descriptor2.get.dependencies = [innerPropertyName];
		
		if(!babel) {
			Object.defineProperty(target, key2, descriptor);
		}
	}

	if(key) {
		let target = targetOrConfig;
		targetOrConfig = null;
		return deco(target, key, descriptor);
	}

	return deco;
}
{'fraction_non_alphanumeric': 0.11036496350364963, 'fraction_numerical': 0.0075912408759124085, 'mean_word_length': 3.818565400843882, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3073366', 'n_tokens_mistral': 1136, 'n_tokens_neox': 978, 'n_words': 314}