define(['pluginManager', 'globalize', 'appRouter'], function (pluginManager, globalize, appRouter) { 'use strict'; function loadStrings(plugin) { const strings = plugin.getTranslations ? plugin.getTranslations() : []; return globalize.loadStrings({ name: plugin.id || plugin.packageName, strings: strings }); } function definePluginRoute(route, plugin) { route.path = '/' + route.path; route.contentPath = route.path; ////route.contentPath = pluginManager.mapPath(plugin, route.path); ////route.path = pluginManager.mapRoute(plugin, route); appRouter.addRoute(route); } function loadPlugin(url) { if (url.startsWith('./') && url.endsWith('.js')) { console.log('Loading plugin module: ' + url); return Emby.importModule(url).then(function (f) { return pluginManager.loadPlugin(f, url); }); } return pluginManager.loadPluginFromUrl(url); } function loadPlugins(forcedPlugins) { let hostPlugins = globalThis.NativePluginLoader.getFileSourcedPluginPaths(); let paths = forcedPlugins.concat(hostPlugins); return Promise.all(paths.map(loadPlugin)).then(function() { let hostObjectPlugins = globalThis.NativePluginLoader.getHostObjectPlugins(); for (let i = 0; i < hostObjectPlugins.length; i++) { let plugin = hostObjectPlugins[i]; let hostObject = globalThis[plugin.hostObjectName]; Object.assign(hostObject, plugin); pluginManager.register(hostObject); if (hostObject.getRoutes) { hostObject.getRoutes().forEach(function (route) { definePluginRoute(route, hostObject); }); } loadStrings(hostObject); } return Promise.resolve(); }); } return { loadPlugins: loadPlugins }; });