mirror of
https://github.com/grafana/grafana.git
synced 2025-08-02 07:12:13 +08:00
Plugins: Bump SystemJS to 6.14.2 (#70068)
* chore(plugins): bump systemjs to latest version * refactor(plugins): switch runtime over to use latest systemjs, add typings * refactor(plugins): use latest systemjs APIs for runtime dependency resolution * refactor(plugins): return valid urls from backend for latest systemjs import to work * revert(plugins): remove cfg from assetpath in favour of relative paths * fix(plugins): useDefault for systemjs deps to solve undefined errors * feat(plugins): add basic support for loading plugins via CDN * fix(plugins): load nested plugins with latest systemjs * feat(plugins): add back ability to transform plugin src for cdns * feat(plugins): get caching for module.js working, clean up * refactor(plugin_loader): create buildImportMap fn and more clean up * refactor(angularapp): use buildImportMap for dependencies and clean up * test(plugin_loader): fix failing test due to systemjs update * test(jest): mock systemjs amd extra in tests to prevent it breaking tests * chore(plugins): remove systemjs module-types extra, already included with system * fix(plugins): update key for invalidating cached plugins * fix: move systemjs amd define to another global so monaco can load * refactor(plugins): clean up cache buster and tests * chore(plugins): remove debug * refactor(plugins): move systemjs define to keep global cleaner * fix(plugins): set useDefault so system modules lodash references dont fail * feat(plugins): hook systemjs onload so stylesheets are applied to the dom * refactor(plugins): wrap amd formatted plugins in iife to prevent define collision * feat(plugins): support system module format for legacy plugins * test(plugincachebuster): update tests to match latest implementation * test(plugins-loader): fix up tests post module property change * fix test * Update pkg/plugins/manager/loader/assetpath/assetpath.go Co-authored-by: Will Browne <wbrowne@users.noreply.github.com> * chore(plugin_loader): remove stray import from merge conflict * Revert "Update pkg/plugins/manager/loader/assetpath/assetpath.go" This reverts commit 0df57d1cf20f49c22c93369001c70aae46a97c42. * fix(plugin_loader): set use default for shared plugin dependencies * refactor(plugins): use leading slash for Module and BaseUrl * fix(plugins): fix resolve appending extension to cache query param * refactor(plugins): align baseurl and module paths * refactor(plugins): update builtInPlugins keys to match naming convention * refactor(plugins): minor loader clean up, fix up types * test(plugins): fix failing tests * refactor(plugins): rename cache buster systemjs plugin to cache * refactor(plugins): separate plugin_loader into smaller files * chore(plugins): clean up plugin_loader types * chore(plugin_sandbox): fix typescript error * chore(npm): remove unplug debug and pin systemjs to 6.14.1 * refactor(plugins-cdn): update loaders to use absolute module url from backend * fix(plugins): escape period in systemjs module regex * chore(plugins): delete redundant systemjs plugins * refactor(plugin_loader): move hooks into own file, add types * test(plugins): add tests for systemjs loader hooks * chore(plugins): rename systemjshooks file * chore(plugins): remove redundant systemjs cdn backend code * fix(plugins): handle loading with config.appSubUrl * chore(plugins): delete redundant plugin-cdn angular code * test(plugins): fix failing systemjs test missing pluginsCDNBaseUrl * refactor(plugins): backend provides base and module properties with AppSubUrl * fix(plugins): consider AppSubUrl for plugin logos * fix(plugins): use isHostedOnCDN util when checking for cdn hosted plugins * add new appSubURL field to config * refactor relative URL func * fix path for core app * refactor asset path input * fix(plugins): catch errors in loadPluginCss * feat(plugins-cdn): selectively transform sourceMapURL * re-add deleted test case * chore(plugins): bump to latest systemjs@6.14.2 * feat(plugins): add systemjs-cjs-extra for loading commonjs plugins --------- Co-authored-by: Will Browne <will.browne@grafana.com> Co-authored-by: Will Browne <wbrowne@users.noreply.github.com>
This commit is contained in:
140
public/app/features/plugins/loader/sharedDependencies.ts
Normal file
140
public/app/features/plugins/loader/sharedDependencies.ts
Normal file
@ -0,0 +1,140 @@
|
||||
import * as emotion from '@emotion/css';
|
||||
import * as emotionReact from '@emotion/react';
|
||||
import * as d3 from 'd3';
|
||||
import jquery from 'jquery';
|
||||
import _ from 'lodash'; // eslint-disable-line lodash/import-scope
|
||||
import moment from 'moment'; // eslint-disable-line no-restricted-imports
|
||||
import prismjs from 'prismjs';
|
||||
import react from 'react';
|
||||
import reactDom from 'react-dom';
|
||||
import * as reactRedux from 'react-redux'; // eslint-disable-line no-restricted-imports
|
||||
import * as reactRouterDom from 'react-router-dom';
|
||||
import * as reactRouterCompat from 'react-router-dom-v5-compat';
|
||||
import * as redux from 'redux';
|
||||
import * as rxjs from 'rxjs';
|
||||
import * as rxjsOperators from 'rxjs/operators';
|
||||
import slate from 'slate';
|
||||
import slatePlain from 'slate-plain-serializer';
|
||||
import slateReact from 'slate-react';
|
||||
|
||||
import 'vendor/flot/jquery.flot';
|
||||
import 'vendor/flot/jquery.flot.selection';
|
||||
import 'vendor/flot/jquery.flot.time';
|
||||
import 'vendor/flot/jquery.flot.stack';
|
||||
import 'vendor/flot/jquery.flot.stackpercent';
|
||||
import 'vendor/flot/jquery.flot.fillbelow';
|
||||
import 'vendor/flot/jquery.flot.crosshair';
|
||||
import 'vendor/flot/jquery.flot.dashes';
|
||||
import 'vendor/flot/jquery.flot.gauge';
|
||||
|
||||
import * as grafanaData from '@grafana/data';
|
||||
import * as grafanaRuntime from '@grafana/runtime';
|
||||
import * as grafanaUIraw from '@grafana/ui';
|
||||
import TableModel from 'app/core/TableModel';
|
||||
import config from 'app/core/config';
|
||||
import { appEvents, contextSrv } from 'app/core/core';
|
||||
import { BackendSrv, getBackendSrv } from 'app/core/services/backend_srv';
|
||||
import impressionSrv from 'app/core/services/impression_srv';
|
||||
import TimeSeries from 'app/core/time_series2';
|
||||
import * as flatten from 'app/core/utils/flatten';
|
||||
import kbn from 'app/core/utils/kbn';
|
||||
import * as ticks from 'app/core/utils/ticks';
|
||||
|
||||
// Help the 6.4 to 6.5 migration
|
||||
// The base classes were moved from @grafana/ui to @grafana/data
|
||||
// This exposes the same classes on both import paths
|
||||
const grafanaUI: Record<string, unknown> = grafanaUIraw;
|
||||
grafanaUI.PanelPlugin = grafanaData.PanelPlugin;
|
||||
grafanaUI.DataSourcePlugin = grafanaData.DataSourcePlugin;
|
||||
grafanaUI.AppPlugin = grafanaData.AppPlugin;
|
||||
grafanaUI.DataSourceApi = grafanaData.DataSourceApi;
|
||||
|
||||
const jQueryFlotDeps = [
|
||||
'jquery.flot.crosshair',
|
||||
'jquery.flot.events',
|
||||
'jquery.flot.fillbelow',
|
||||
'jquery.flot.gauge',
|
||||
'jquery.flot.pie',
|
||||
'jquery.flot.selection',
|
||||
'jquery.flot.stack',
|
||||
'jquery.flot.stackpercent',
|
||||
'jquery.flot.time',
|
||||
'jquery.flot',
|
||||
].reduce((acc, flotDep) => ({ ...acc, [flotDep]: { fakeDep: 1 } }), {});
|
||||
|
||||
export const sharedDependenciesMap: Record<string, System.Module> = {
|
||||
'@emotion/css': emotion,
|
||||
'@emotion/react': emotionReact,
|
||||
'@grafana/data': grafanaData,
|
||||
'@grafana/runtime': grafanaRuntime,
|
||||
'@grafana/slate-react': slateReact, // for backwards compatibility with older plugins
|
||||
'@grafana/ui': grafanaUI,
|
||||
'app/core/app_events': {
|
||||
default: appEvents,
|
||||
__useDefault: true,
|
||||
},
|
||||
'app/core/config': {
|
||||
default: config,
|
||||
__useDefault: true,
|
||||
},
|
||||
'app/core/core': {
|
||||
appEvents: appEvents,
|
||||
contextSrv: contextSrv,
|
||||
},
|
||||
'app/core/services/backend_srv': {
|
||||
BackendSrv,
|
||||
getBackendSrv,
|
||||
},
|
||||
'app/core/table_model': { default: TableModel, __useDefault: true },
|
||||
'app/core/time_series': { default: TimeSeries, __useDefault: true },
|
||||
'app/core/time_series2': { default: TimeSeries, __useDefault: true },
|
||||
'app/core/utils/datemath': grafanaData.dateMath,
|
||||
'app/core/utils/flatten': flatten,
|
||||
'app/core/utils/kbn': {
|
||||
default: kbn,
|
||||
__useDefault: true,
|
||||
},
|
||||
'app/core/utils/ticks': ticks,
|
||||
'app/features/dashboard/impression_store': {
|
||||
impressions: impressionSrv,
|
||||
},
|
||||
d3: d3,
|
||||
emotion: emotion,
|
||||
jquery: {
|
||||
default: jquery,
|
||||
__useDefault: true,
|
||||
},
|
||||
...jQueryFlotDeps,
|
||||
lodash: {
|
||||
default: _,
|
||||
__useDefault: true,
|
||||
},
|
||||
moment: {
|
||||
default: moment,
|
||||
__useDefault: true,
|
||||
},
|
||||
prismjs: prismjs,
|
||||
react: react,
|
||||
'react-dom': reactDom,
|
||||
'react-redux': reactRedux,
|
||||
// Migration - React Router v5 -> v6
|
||||
// =================================
|
||||
// Plugins that still use "react-router-dom@v5" don't depend on react-router directly, so they will not use this import.
|
||||
// (The react-router-dom@v5 that we expose for them depends on the "react-router" package internally from core.)
|
||||
//
|
||||
// Plugins that would like update to "react-router-dom@v6" will need to bundle "react-router-dom",
|
||||
// however they cannot bundle "react-router" - this would mean that we have two instances of "react-router"
|
||||
// in the app, which would casue issues. As the "react-router-dom-v5-compat" package re-exports everything from "react-router-dom@v6"
|
||||
// which then re-exports everything from "react-router@v6", we are in the lucky state to be able to expose a compatible v6 version of the router to plugins by
|
||||
// just exposing "react-router-dom-v5-compat".
|
||||
//
|
||||
// (This means that we are exposing two versions of the same package).
|
||||
'react-router-dom': reactRouterDom, // react-router-dom@v5
|
||||
'react-router': reactRouterCompat, // react-router-dom@v6, react-router@v6 (included)
|
||||
redux: redux,
|
||||
rxjs: rxjs,
|
||||
'rxjs/operators': rxjsOperators,
|
||||
slate: slate,
|
||||
'slate-plain-serializer': slatePlain,
|
||||
'slate-react': slateReact,
|
||||
};
|
Reference in New Issue
Block a user