UNPKG

shaka-player

Version:
126 lines (114 loc) 4.06 kB
/*! @license * Shaka Player * Copyright 2016 Google LLC * SPDX-License-Identifier: Apache-2.0 */ goog.provide('shaka.Deprecate'); goog.require('goog.asserts'); goog.require('shaka.deprecate.Enforcer'); goog.require('shaka.deprecate.Version'); goog.require('shaka.log'); /** * |shaka.Deprecate| is the front-end of the deprecation system, allowing for * any part of the code to say that "this block of code should be removed by * version X". * * @final */ shaka.Deprecate = class { /** * Initialize the system. This must happen before any calls to |enforce|. In * our code base, |shaka.Player| will be the only one to call this (it has the * version string). * * If the |Deprecate| called |Player.version| to initialize itself, it would * mean that |Player| could not use |Deprecate| because it would create a * circular dependency. To work around this, we provide this method so that * |Player| can give us the version without us needing to know about |Player|. * * This will initialize the system to: * - print warning messages when the feature is scheduled to be removed in a * later version * - print errors and fail assertions when the feature should be removed now * * @param {string} versionString */ static init(versionString) { goog.asserts.assert( shaka.Deprecate.enforcer_ == null, 'Deprecate.init should only be called once.'); shaka.Deprecate.enforcer_ = new shaka.deprecate.Enforcer( shaka.deprecate.Version.parse(versionString), shaka.Deprecate.onPending_, shaka.Deprecate.onExpired_); } /** * Ask the deprecation system to require this feature to be removed by the * given version. * * @param {number} major * @param {string} name * @param {string} description */ static deprecateFeature(major, name, description) { const enforcer = shaka.Deprecate.enforcer_; goog.asserts.assert( enforcer, 'Missing deprecation enforcer. Was |init| called?'); const expiresAt = new shaka.deprecate.Version(major, 0); enforcer.enforce(expiresAt, name, description); } /** * @param {!shaka.deprecate.Version} libraryVersion * @param {!shaka.deprecate.Version} featureVersion * @param {string} name * @param {string} description * @private */ static onPending_(libraryVersion, featureVersion, name, description) { // If we were to pass each value to the log call, it would be printed as // a comma-separated list. To make the print state appear more natural to // the reader, create one string for the message. shaka.log.alwaysWarn([ name, 'has been deprecated and will be removed in', featureVersion, '. We are currently at version', libraryVersion, '. Additional information:', description, ].join(' ')); } /** * @param {!shaka.deprecate.Version} libraryVersion * @param {!shaka.deprecate.Version} featureVersion * @param {string} name * @param {string} description * @private */ static onExpired_(libraryVersion, featureVersion, name, description) { // If we were to pass each value to the log call, it would be printed as // a comma-separated list. To make the print state appear more natural to // the reader, create one string for the message. const errorMessage = [ name, 'has been deprecated and has been removed in', featureVersion, '. We are now at version', libraryVersion, '. Additional information:', description, ].join(' '); shaka.log.alwaysError(errorMessage); goog.asserts.assert(false, errorMessage); } }; /** * The global deprecation enforcer that will be set by the player (because the * player knows the version) when it calls |init|. This may appear a little * round-about to you, because it is. Since player uses |Deprecate|, it means * that |Deprecate| can't depend on Player directly. * * @private {shaka.deprecate.Enforcer} */ shaka.Deprecate.enforcer_ = null;