diff --git a/package.json b/package.json index cd8659842f2..83025a3e8fc 100644 --- a/package.json +++ b/package.json @@ -77,7 +77,6 @@ "postcss-reporter": "^5.0.0", "prettier": "1.7.3", "react-test-renderer": "^16.0.0", - "rxjs": "^5.4.3", "sass-lint": "^1.10.2", "sass-loader": "^6.0.6", "sinon": "1.17.6", @@ -119,6 +118,7 @@ "mousetrap": "^1.6.0", "ngreact": "^0.4.1", "react": "^16.0.0", + "rxjs": "^5.4.3", "react-dom": "^16.0.0", "remarkable": "^1.7.1", "tether": "^1.4.0", diff --git a/public/app/core/live/live_srv.ts b/public/app/core/live/live_srv.ts index 8368992d052..8e808e60e1a 100644 --- a/public/app/core/live/live_srv.ts +++ b/public/app/core/live/live_srv.ts @@ -1,5 +1,3 @@ -/// - import _ from 'lodash'; import config from 'app/core/config'; diff --git a/public/app/features/plugins/buit_in_plugins.ts b/public/app/features/plugins/buit_in_plugins.ts new file mode 100644 index 00000000000..7ca32696388 --- /dev/null +++ b/public/app/features/plugins/buit_in_plugins.ts @@ -0,0 +1,47 @@ +import * as graphitePlugin from 'app/plugins/datasource/graphite/module'; +import * as cloudwatchPlugin from 'app/plugins/datasource/cloudwatch/module'; +import * as elasticsearchPlugin from 'app/plugins/datasource/elasticsearch/module'; +import * as opentsdbPlugin from 'app/plugins/datasource/opentsdb/module'; +import * as grafanaPlugin from 'app/plugins/datasource/grafana/module'; +import * as influxdbPlugin from 'app/plugins/datasource/influxdb/module'; +import * as mixedPlugin from 'app/plugins/datasource/mixed/module'; +import * as mysqlPlugin from 'app/plugins/datasource/mysql/module'; +import * as prometheusPlugin from 'app/plugins/datasource/prometheus/module'; + +import * as textPanel from 'app/plugins/panel/text/module'; +import * as graphPanel from 'app/plugins/panel/graph/module'; +import * as dashListPanel from 'app/plugins/panel/dashlist/module'; +import * as pluginsListPanel from 'app/plugins/panel/pluginlist/module'; +import * as alertListPanel from 'app/plugins/panel/alertlist/module'; +import * as heatmapPanel from 'app/plugins/panel/heatmap/module'; +import * as tablePanel from 'app/plugins/panel/table/module'; +import * as singlestatPanel from 'app/plugins/panel/singlestat/module'; +import * as gettingStartedPanel from 'app/plugins/panel/gettingstarted/module'; +import * as testDataAppPlugin from 'app/plugins/app/testdata/module'; +import * as testDataDSPlugin from 'app/plugins/app/testdata/datasource/module'; + +const builtInPlugins = { + "app/plugins/datasource/graphite/module": graphitePlugin, + "app/plugins/datasource/cloudwatch/module": cloudwatchPlugin, + "app/plugins/datasource/elasticsearch/module": elasticsearchPlugin, + "app/plugins/datasource/opentsdb/module": opentsdbPlugin, + "app/plugins/datasource/grafana/module": grafanaPlugin, + "app/plugins/datasource/influxdb/module": influxdbPlugin, + "app/plugins/datasource/mixed/module": mixedPlugin, + "app/plugins/datasource/mysql/module": mysqlPlugin, + "app/plugins/datasource/prometheus/module": prometheusPlugin, + "app/plugins/app/testdata/module": testDataAppPlugin, + "app/plugins/app/testdata/datasource/module": testDataDSPlugin, + + "app/plugins/panel/text/module": textPanel, + "app/plugins/panel/graph/module": graphPanel, + "app/plugins/panel/dashlist/module": dashListPanel, + "app/plugins/panel/pluginlist/module": pluginsListPanel, + "app/plugins/panel/alertlist/module": alertListPanel, + "app/plugins/panel/heatmap/module": heatmapPanel, + "app/plugins/panel/table/module": tablePanel, + "app/plugins/panel/singlestat/module": singlestatPanel, + "app/plugins/panel/gettingstarted/module": gettingStartedPanel, +}; + +export default builtInPlugins; diff --git a/public/app/features/plugins/plugin_loader.ts b/public/app/features/plugins/plugin_loader.ts index ac6fc06ce28..8df27c0f320 100644 --- a/public/app/features/plugins/plugin_loader.ts +++ b/public/app/features/plugins/plugin_loader.ts @@ -7,53 +7,11 @@ import angular from 'angular'; import jquery from 'jquery'; import config from 'app/core/config'; import TimeSeries from 'app/core/time_series2'; +import TableModel from 'app/core/table_model'; +import {Observable} from 'rxjs/Observable'; +import {Subject} from 'rxjs/Subject'; import * as datemath from 'app/core/utils/datemath'; - -import * as graphitePlugin from 'app/plugins/datasource/graphite/module'; -import * as cloudwatchPlugin from 'app/plugins/datasource/cloudwatch/module'; -import * as elasticsearchPlugin from 'app/plugins/datasource/elasticsearch/module'; -import * as opentsdbPlugin from 'app/plugins/datasource/opentsdb/module'; -import * as grafanaPlugin from 'app/plugins/datasource/grafana/module'; -import * as influxdbPlugin from 'app/plugins/datasource/influxdb/module'; -import * as mixedPlugin from 'app/plugins/datasource/mixed/module'; -import * as mysqlPlugin from 'app/plugins/datasource/mysql/module'; -import * as prometheusPlugin from 'app/plugins/datasource/prometheus/module'; - -import * as textPanel from 'app/plugins/panel/text/module'; -import * as graphPanel from 'app/plugins/panel/graph/module'; -import * as dashListPanel from 'app/plugins/panel/dashlist/module'; -import * as pluginsListPanel from 'app/plugins/panel/pluginlist/module'; -import * as alertListPanel from 'app/plugins/panel/alertlist/module'; -import * as heatmapPanel from 'app/plugins/panel/heatmap/module'; -import * as tablePanel from 'app/plugins/panel/table/module'; -import * as singlestatPanel from 'app/plugins/panel/singlestat/module'; -import * as gettingStartedPanel from 'app/plugins/panel/gettingstarted/module'; -import * as testDataAppPlugin from 'app/plugins/app/testdata/module'; -import * as testDataDSPlugin from 'app/plugins/app/testdata/datasource/module'; - -let builtInPlugins = { - "app/plugins/datasource/graphite/module": graphitePlugin, - "app/plugins/datasource/cloudwatch/module": cloudwatchPlugin, - "app/plugins/datasource/elasticsearch/module": elasticsearchPlugin, - "app/plugins/datasource/opentsdb/module": opentsdbPlugin, - "app/plugins/datasource/grafana/module": grafanaPlugin, - "app/plugins/datasource/influxdb/module": influxdbPlugin, - "app/plugins/datasource/mixed/module": mixedPlugin, - "app/plugins/datasource/mysql/module": mysqlPlugin, - "app/plugins/datasource/prometheus/module": prometheusPlugin, - "app/plugins/app/testdata/module": testDataAppPlugin, - "app/plugins/app/testdata/datasource/module": testDataDSPlugin, - - "app/plugins/panel/text/module": textPanel, - "app/plugins/panel/graph/module": graphPanel, - "app/plugins/panel/dashlist/module": dashListPanel, - "app/plugins/panel/pluginlist/module": pluginsListPanel, - "app/plugins/panel/alertlist/module": alertListPanel, - "app/plugins/panel/heatmap/module": heatmapPanel, - "app/plugins/panel/table/module": tablePanel, - "app/plugins/panel/singlestat/module": singlestatPanel, - "app/plugins/panel/gettingstarted/module": gettingStartedPanel, -}; +import builtInPlugins from './buit_in_plugins'; System.config({ baseURL: 'public', @@ -89,12 +47,16 @@ exposeToPlugin('lodash', _); exposeToPlugin('moment', moment); exposeToPlugin('jquery', jquery); exposeToPlugin('angular', angular); +exposeToPlugin('rxjs/Subject', Subject); +exposeToPlugin('rxjs/Observable', Observable); + exposeToPlugin('app/plugins/sdk', sdk); exposeToPlugin('app/core/utils/datemath', datemath); exposeToPlugin('app/core/utils/kbn', kbn); exposeToPlugin('app/core/config', config); exposeToPlugin('app/core/time_series', TimeSeries); exposeToPlugin('app/core/time_series2', TimeSeries); +exposeToPlugin('app/core/table_model', TableModel); import 'vendor/flot/jquery.flot'; import 'vendor/flot/jquery.flot.selection'; @@ -107,7 +69,7 @@ import 'vendor/flot/jquery.flot.crosshair'; import 'vendor/flot/jquery.flot.dashes'; for (let flotDep of ['jquery.flot', 'jquery.flot.pie', 'jquery.flot.time']) { - System.registerDynamic(flotDep, [], true, function(require, exports, module) { module.exports = {fakeDep: 1}; }); + exposeToPlugin(flotDep, {fakeDep: 1}); } export function importPluginModule(path: string): Promise { diff --git a/scripts/webpack/dependencies.js b/scripts/webpack/dependencies.js new file mode 100644 index 00000000000..3bdec887ae9 --- /dev/null +++ b/scripts/webpack/dependencies.js @@ -0,0 +1,14 @@ +'use strict'; + +const pkg = require('../../package.json'); +const _ = require('lodash'); + +let dependencies = Object.keys(pkg.dependencies); +// remove jquery so we can add it first +// remove rxjs so we can only depend on parts of it in code +_.pull(dependencies, 'jquery', 'rxjs') + +// add jquery first +dependencies.unshift('jquery'); + +module.exports = dependencies; diff --git a/scripts/webpack/webpack.dev.js b/scripts/webpack/webpack.dev.js index 98ecb44e284..51b9a646175 100644 --- a/scripts/webpack/webpack.dev.js +++ b/scripts/webpack/webpack.dev.js @@ -8,16 +8,6 @@ const HtmlWebpackPlugin = require("html-webpack-plugin"); const ExtractTextPlugin = require("extract-text-webpack-plugin"); const WebpackCleanupPlugin = require('webpack-cleanup-plugin'); const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; -const pkg = require('../../package.json'); -const _ = require('lodash'); - -let dependencies = Object.keys(pkg.dependencies); -// remove jquery -dependencies = _.filter(dependencies, function(key) { - return key !== 'jquery'; -}); -// add it first -dependencies.unshift('jquery'); module.exports = merge(common, { devtool: "source-map", @@ -25,7 +15,7 @@ module.exports = merge(common, { entry: { dark: './public/sass/grafana.dark.scss', light: './public/sass/grafana.light.scss', - vendor: dependencies, + vendor: require('./dependencies'), }, module: { @@ -55,8 +45,8 @@ module.exports = merge(common, { names: ['vendor', 'manifest'], }), new WebpackCleanupPlugin(), - // new BundleAnalyzerPlugin({ - // analyzerPort: 8889 - // }) + new BundleAnalyzerPlugin({ + analyzerPort: 8889 + }) ] }); diff --git a/scripts/webpack/webpack.prod.js b/scripts/webpack/webpack.prod.js index c43b2056e47..6d254c7ab0b 100644 --- a/scripts/webpack/webpack.prod.js +++ b/scripts/webpack/webpack.prod.js @@ -8,8 +8,6 @@ const path = require('path'); const ngAnnotatePlugin = require('ng-annotate-webpack-plugin'); const HtmlWebpackPlugin = require("html-webpack-plugin"); const ExtractTextPlugin = require("extract-text-webpack-plugin"); -const pkg = require('../../package.json'); -let dependencies = Object.keys(pkg.dependencies); module.exports = merge(common, { devtool: "source-map", @@ -17,7 +15,7 @@ module.exports = merge(common, { entry: { dark: './public/sass/grafana.dark.scss', light: './public/sass/grafana.light.scss', - vendor: dependencies, + vendor: require('./dependencies'), }, module: {