"use strict";
exports.__esModule = true;
exports.mixin = mixin;
exports.delayMixin = delayMixin;
exports.performMixins = performMixins;
/**
* Mixes all enumerable properties and methods from a source object to a target object.
*
* @memberof PIXI.utils.mixins
* @function mixin
* @param {object} target The prototype or instance that properties and methods should be added to.
* @param {object} source The source of properties and methods to mix in.
*/
function mixin(target, source) {
if (!target || !source) return;
// in ES8/ES2017, this would be really easy:
// Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
// get all the enumerable property keys
var keys = Object.keys(source);
// loop through properties
for (var i = 0; i < keys.length; ++i) {
var propertyName = keys[i];
// Set the property using the property descriptor - this works for accessors and normal value properties
Object.defineProperty(target, propertyName, Object.getOwnPropertyDescriptor(source, propertyName));
}
}
var mixins = [];
/**
* Queues a mixin to be handled towards the end of the initialization of PIXI, so that deprecation
* can take effect.
*
* @memberof PIXI.utils.mixins
* @function delayMixin
* @private
* @param {object} target The prototype or instance that properties and methods should be added to.
* @param {object} source The source of properties and methods to mix in.
*/
function delayMixin(target, source) {
mixins.push(target, source);
}
/**
* Handles all mixins queued via delayMixin().
*
* @memberof PIXI.utils.mixins
* @function performMixins
* @private
*/
function performMixins() {
for (var i = 0; i < mixins.length; i += 2) {
mixin(mixins[i], mixins[i + 1]);
}
mixins.length = 0;
}
//# sourceMappingURL=mixin.js.map