'use strict'; const createEventEmitter = require("create-event-emitter"); module.exports = function createSynchronizableAsset(initialUrl, initialVersion, initialPriority, initialMetadata) { let asset = createEventEmitter({ sources: [], primarySource: initialSource, getUrl: function () { return this.primarySource.url; }, getPrimarySource: function () { return this.primarySource; }, addSource: function addSource(url, version, priority, metadata) { let newSource = { url: url, version: version, priority: priority, metadata: metadata }; this.sources.push(newSource); if (this.primarySource == null || (version >= this.primarySource.version && priority > this.primarySource.priority)) { this.primarySource = newSource; this.emit("newPrimarySource", newSource); } } }); asset.addSource(initialUrl, initialVersion, initialPriority, initialMetadata); return asset; };