From 7a3bd5545fa1307c754419252fa35ff0b7572ae4 Mon Sep 17 00:00:00 2001 From: Yaroslav Admin Date: Thu, 17 Dec 2020 19:10:31 +0100 Subject: [PATCH] feat: remove support for running dart code in the browser (#3592) As Dartium browser is no more, there are no browsers left, which support running Dart applications natively and therefore we can remove such support from Karma to reduce the maintenance effort. BREAKING CHANGE: Using Karma to run Dart code in the browser is no longer supported. Use your favorite Dart-to-JS compiler instead. `dart` file type has been removed without a replacement. `customFileHandlers` DI token has been removed. Use [`middleware`](http://karma-runner.github.io/5.2/config/configuration-file.html#middleware) to achieve similar functionality. `customScriptTypes` DI token has been removed. It had no effect, so no replacement is provided. --- docs/config/02-files.md | 1 - docs/dev/05-plugins.md | 3 +-- lib/middleware/karma.js | 2 -- lib/server.js | 4 ---- lib/web-server.js | 14 -------------- test/unit/middleware/karma.spec.js | 4 ++-- test/unit/web-server.spec.js | 25 +------------------------ 7 files changed, 4 insertions(+), 49 deletions(-) diff --git a/docs/config/02-files.md b/docs/config/02-files.md index 4c7debcb0..f85c4d772 100644 --- a/docs/config/02-files.md +++ b/docs/config/02-files.md @@ -31,7 +31,6 @@ Each pattern is either a simple string or an object with the following propertie * `css` - Include using `` tag. * `html` - Include using [HTML Imports](https://developer.mozilla.org/en-US/docs/Web/Web_Components/HTML_Imports). Note that this feature is obsolete and does not work in the modern browsers. * `js` - Include using `` tag. - * `dart` - Include using `` tag. Note that this does not work in the modern browsers. * `module` - Include using `` tag. * `dom` - Inline content of the file in the page. This can be used, for example, to test components combining HTML and JS. * **Description.** The type determines the mechanism for including the file. diff --git a/docs/dev/05-plugins.md b/docs/dev/05-plugins.md index d785102fb..d9371e46a 100644 --- a/docs/dev/05-plugins.md +++ b/docs/dev/05-plugins.md @@ -34,7 +34,7 @@ A preprocessor is a function that accepts three arguments (`content`, `file`, an - user NPM keywords `karma-plugin`, `karma-preprocessor` ## Crazier stuff -Karma is assembled by Dependency Injection and a plugin is just an additional DI module (see [node-di] for more), that can be loaded by Karma. Therefore, it can ask for pretty much any Karma component and interact with it. There are a couple of plugins that do more interesting stuff like this, check out [karma-closure], [karma-intellij], [karma-dart]. +Karma is assembled by Dependency Injection and a plugin is just an additional DI module (see [node-di] for more), that can be loaded by Karma. Therefore, it can ask for pretty much any Karma component and interact with it. There are a couple of plugins that do more interesting stuff like this, check out [karma-closure], [karma-intellij]. [karma-jasmine]: https://github.com/karma-runner/karma-jasmine @@ -49,7 +49,6 @@ Karma is assembled by Dependency Injection and a plugin is just an additional DI [karma-ng-html2js-preprocessor]: https://github.com/karma-runner/karma-ng-html2js-preprocessor [karma-closure]: https://github.com/karma-runner/karma-closure [karma-intellij]: https://github.com/karma-runner/karma-intellij -[karma-dart]: https://github.com/karma-runner/karma-dart [node-di]: https://github.com/vojtajina/node-di [karma-material-reporter]: https://github.com/ameerthehacker/karma-material-reporter diff --git a/lib/middleware/karma.js b/lib/middleware/karma.js index c48332d12..4e27d4a52 100644 --- a/lib/middleware/karma.js +++ b/lib/middleware/karma.js @@ -20,14 +20,12 @@ const common = require('./common') const VERSION = require('../constants').VERSION const SCRIPT_TYPE = { js: 'text/javascript', - dart: 'application/dart', module: 'module' } const FILE_TYPES = [ 'css', 'html', 'js', - 'dart', 'module', 'dom' ] diff --git a/lib/server.js b/lib/server.js index d75c58a84..238caa09c 100644 --- a/lib/server.js +++ b/lib/server.js @@ -82,10 +82,6 @@ class Server extends KarmaEventEmitter { filesPromise: ['factory', createFilesPromise], socketServer: ['factory', createSocketIoServer], executor: ['factory', Executor.factory], - // TODO(vojta): remove - customFileHandlers: ['value', []], - // TODO(vojta): remove, once karma-dart does not rely on it - customScriptTypes: ['value', []], reporter: ['factory', reporter.createReporters], capturedBrowsers: ['factory', BrowserCollection.factory], args: ['value', {}], diff --git a/lib/web-server.js b/lib/web-server.js index a348f9421..379818435 100644 --- a/lib/web-server.js +++ b/lib/web-server.js @@ -16,17 +16,6 @@ const proxyMiddleware = require('./middleware/proxy') const log = require('./logger').create('web-server') -function createCustomHandler (customFileHandlers, config) { - return function (request, response, next) { - const handler = customFileHandlers.find((handler) => handler.urlRegex.test(request.url)) - return handler - ? handler.handler(request, response, 'fake/static', 'fake/adapter', config.basePath, 'fake/root') - : next() - } -} - -createCustomHandler.$inject = ['customFileHandlers', 'config'] - function createFilesPromise (emitter, fileList) { // Set an empty list of files to avoid race issues with // file_list_modified not having been emitted yet @@ -69,9 +58,6 @@ function createWebServer (injector, config) { handler.use(injector.invoke(sourceFilesMiddleware.create)) // TODO(vojta): extract the proxy into a plugin handler.use(proxyMiddlewareInstance) - // TODO(vojta): remove, this is only here because of karma-dart - // we need a better way of custom handlers - handler.use(injector.invoke(createCustomHandler)) if (config.middleware) { config.middleware.forEach((middleware) => handler.use(injector.get('middleware:' + middleware))) diff --git a/test/unit/middleware/karma.spec.js b/test/unit/middleware/karma.spec.js index 16242d09d..8a968262c 100644 --- a/test/unit/middleware/karma.spec.js +++ b/test/unit/middleware/karma.spec.js @@ -202,12 +202,12 @@ describe('middleware.karma', () => { it('should serve context.html with replaced script tags', (done) => { includedFiles([ new MockFile('/first.js', 'sha123'), - new MockFile('/second.dart', 'sha456') + new MockFile('/second.js', 'sha456') ]) response.once('end', () => { expect(nextSpy).not.to.have.been.called - expect(response).to.beServedAs(200, 'CONTEXT\n\n') + expect(response).to.beServedAs(200, 'CONTEXT\n\n') done() }) diff --git a/test/unit/web-server.spec.js b/test/unit/web-server.spec.js index 5d9f4f18e..8517f172e 100644 --- a/test/unit/web-server.spec.js +++ b/test/unit/web-server.spec.js @@ -31,7 +31,7 @@ describe('web-server', () => { // NOTE(vojta): only loading once, to speed things up // this relies on the fact that none of these tests mutate fs const m = mocks.loadFile(path.join(__dirname, '/../../lib/web-server.js'), _mocks, _globals) - let customFileHandlers = server = emitter = null + server = emitter = null let beforeMiddlewareActive = false let middlewareActive = false const servedFiles = (files) => { @@ -40,7 +40,6 @@ describe('web-server', () => { describe('request', () => { beforeEach(() => { - customFileHandlers = [] emitter = new EventEmitter() const config = { basePath: '/base/path', @@ -57,7 +56,6 @@ describe('web-server', () => { const injector = new di.Injector([{ config: ['value', config], - customFileHandlers: ['value', customFileHandlers], emitter: ['value', emitter], fileList: ['value', { files: { served: [], included: [] } }], filesPromise: ['factory', m.createFilesPromise], @@ -182,23 +180,6 @@ describe('web-server', () => { }) }) - it('should load custom handlers', () => { - servedFiles(new Set()) - - // TODO(vojta): change this, only keeping because karma-dart is relying on it - customFileHandlers.push({ - urlRegex: /\/some\/weird/, - handler (request, response, staticFolder, adapterFolder, baseFolder, urlRoot) { - response.writeHead(222) - response.end('CONTENT') - } - }) - - return request(server) - .get('/some/weird/url') - .expect(222, 'CONTENT') - }) - it('should serve 404 for non-existing files', () => { servedFiles(new Set()) @@ -215,7 +196,6 @@ describe('web-server', () => { cert: fs.readFileSync(path.join(__dirname, '/certificates/server.crt')) } - customFileHandlers = [] emitter = new EventEmitter() const injector = new di.Injector([{ @@ -226,7 +206,6 @@ describe('web-server', () => { httpsServerOptions: credentials, client: { useIframe: true, useSingleWindow: false } }], - customFileHandlers: ['value', customFileHandlers], emitter: ['value', emitter], fileList: ['value', { files: { served: [], included: [] } }], filesPromise: ['factory', m.createFilesPromise], @@ -265,12 +244,10 @@ describe('web-server', () => { cert: fs.readFileSync(path.join(__dirname, '/certificates/server.crt')) } - customFileHandlers = [] emitter = new EventEmitter() const injector = new di.Injector([{ config: ['value', { basePath: '/base/path', urlRoot: '/', httpModule: http2, protocol: 'https:', httpsServerOptions: credentials }], - customFileHandlers: ['value', customFileHandlers], emitter: ['value', emitter], fileList: ['value', { files: { served: [], included: [] } }], filesPromise: ['factory', m.createFilesPromise],