UNPKG

playable

Version:

Video player based on HTML5Video

130 lines 5.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var config_1 = (0, tslib_1.__importDefault)(require("./config")); var player_api_decorator_1 = require("./player-api-decorator"); var Player = /** @class */ (function () { function Player(params, scope, defaultModulesNames, additionalModuleNames, themeConfig) { if (defaultModulesNames === void 0) { defaultModulesNames = []; } if (additionalModuleNames === void 0) { additionalModuleNames = []; } this._scope = scope; this._scope.registerValue({ config: (0, config_1.default)(params), }); this._scope.registerValue({ themeConfig: themeConfig, }); this._config = this._scope.resolve('config'); this._resolveAdditionalModules(additionalModuleNames); this._resolveDefaultModules(defaultModulesNames); } /* Separation for default and additional modules is needed for future implementation of public methods of resolved modules and could be abolished in future */ Player.prototype._resolveDefaultModules = function (modulesNames) { var _this = this; this._defaultModules = modulesNames.reduce(function (modules, moduleName) { if (_this._additionalModules[moduleName]) { return modules; } var resolvedModule = _this._scope.resolve(moduleName); _this._addPlayerAPIFromModule(resolvedModule); modules[moduleName] = resolvedModule; return modules; }, {}); }; Player.prototype._resolveAdditionalModules = function (modulesNames) { var _this = this; this._additionalModules = modulesNames.reduce(function (modules, moduleName) { var resolvedModule = _this._scope.resolve(moduleName); _this._addPlayerAPIFromModule(resolvedModule); modules[moduleName] = resolvedModule; return modules; }, {}); }; Player.prototype._getWrappedCallToModuleFunction = function (module, fn) { var _this = this; return function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } if (_this._destroyed) { throw new Error('Player instance is destroyed'); } return fn.apply(module, args); }; }; Player.prototype._getPlayerAPIMethodDescriptor = function (module, descriptor) { var playerMethodDescriptor = { enumerable: true, configurable: true, }; var get = descriptor.get, set = descriptor.set, value = descriptor.value; if (get) { playerMethodDescriptor.get = this._getWrappedCallToModuleFunction(module, get); } if (set) { playerMethodDescriptor.set = this._getWrappedCallToModuleFunction(module, set); } if (value) { playerMethodDescriptor.value = this._getWrappedCallToModuleFunction(module, value); playerMethodDescriptor.writable = true; } return playerMethodDescriptor; }; Player.prototype._getModuleApi = function (module) { return module.getAPI ? module.getAPI() : module[player_api_decorator_1.PLAYER_API_PROPERTY]; }; Player.prototype._addPlayerAPIFromModule = function (module) { var _this = this; var moduleApi = this._getModuleApi(module); var getDescriptor = module.getAPI ? function (apiKey) { return Object.getOwnPropertyDescriptor(moduleApi, apiKey); } : function (apiKey) { return _this._getPlayerAPIMethodDescriptor(module, moduleApi[apiKey]); }; if (moduleApi) { Object.keys(moduleApi).forEach(function (apiKey) { if (_this[apiKey]) { throw new Error("API method ".concat(apiKey, " is already defined in Player facade")); } Object.defineProperty(_this, apiKey, getDescriptor(apiKey)); }); } }; Player.prototype._clearPlayerAPIForModule = function (module) { var _this = this; var moduleApi = this._getModuleApi(module); if (moduleApi) { Object.keys(moduleApi).forEach(function (apiKey) { delete _this[apiKey]; }); } }; Player.prototype.destroy = function () { var _this = this; Object.keys(this._defaultModules).forEach(function (moduleName) { var module = _this._defaultModules[moduleName]; _this._clearPlayerAPIForModule(module); module.destroy(); }); Object.keys(this._additionalModules).forEach(function (moduleName) { var module = _this._additionalModules[moduleName]; _this._clearPlayerAPIForModule(module); if (module.destroy) { module.destroy(); } }); this._defaultModules = null; this._additionalModules = null; this._config = null; this._scope = null; this._destroyed = true; }; return Player; }()); exports.default = Player; //# sourceMappingURL=player-facade.js.map