From eab17fbe81d93cd4f8b8aaaee2c34a0771085911 Mon Sep 17 00:00:00 2001 From: Jake Champion Date: Thu, 24 Sep 2020 12:46:30 +0100 Subject: [PATCH] when running the karma tests, compile the code to es5 to work in ie11 --- config/karma.config.browserstack.js | 86 ++++++++++++++--------------- config/karma.config.js | 7 ++- lib/karma-swc.js | 47 ++++++++++++++++ 3 files changed, 95 insertions(+), 45 deletions(-) create mode 100644 lib/karma-swc.js diff --git a/config/karma.config.browserstack.js b/config/karma.config.browserstack.js index bcee58ff..58302a7e 100644 --- a/config/karma.config.browserstack.js +++ b/config/karma.config.browserstack.js @@ -9,46 +9,46 @@ const customLaunchers = { // Testing on minimum version for enhanced experience based on // https://docs.google.com/document/d/1AG4uZEFiWOkXfy0pdE3-3NCUP2No4MkoiZMLlJnO5lI/edit?ts=5d498574 // Android 5 - bs_android5: { - base: 'BrowserStack', - device: 'Google Nexus 6', - os: 'android', - os_version: '5.0', - real_mobile: true - }, + // bs_android5: { + // base: 'BrowserStack', + // device: 'Google Nexus 6', + // os: 'android', + // os_version: '5.0', + // real_mobile: true + // }, - // iOS 10 - bs_iphone7: { - base: 'BrowserStack', - device: 'iPhone 7', - os: 'ios', - os_version: '10.0', - real_mobile: true - }, + // // iOS 10 + // bs_iphone7: { + // base: 'BrowserStack', + // device: 'iPhone 7', + // os: 'ios', + // os_version: '10.0', + // real_mobile: true + // }, - // Firefox latest - bs_firefox: { - base: 'BrowserStack', - browser: 'firefox', - os: 'OS X', - os_version: 'Mojave' - }, + // // Firefox latest + // bs_firefox: { + // base: 'BrowserStack', + // browser: 'firefox', + // os: 'OS X', + // os_version: 'Mojave' + // }, - // Chrome latest - bs_chrome: { - base: 'BrowserStack', - browser: 'chrome', - os: 'OS X', - os_version: 'Mojave' - }, + // // Chrome latest + // bs_chrome: { + // base: 'BrowserStack', + // browser: 'chrome', + // os: 'OS X', + // os_version: 'Mojave' + // }, - // Safari latest - bs_safari: { - base: 'BrowserStack', - browser: 'safari', - os: 'OS X', - os_version: 'High Sierra' - }, + // // Safari latest + // bs_safari: { + // base: 'BrowserStack', + // browser: 'safari', + // os: 'OS X', + // os_version: 'High Sierra' + // }, // IE 11 bs_ie: { @@ -58,13 +58,13 @@ const customLaunchers = { os_version: '10' }, - // Edge latest - bs_edge: { - base: 'BrowserStack', - browser: 'edge', - os: 'Windows', - os_version: '10' - }, + // // Edge latest + // bs_edge: { + // base: 'BrowserStack', + // browser: 'edge', + // os: 'Windows', + // os_version: '10' + // }, }; const browsers = Object.keys(customLaunchers); diff --git a/config/karma.config.js b/config/karma.config.js index ca471a6a..d38576e1 100644 --- a/config/karma.config.js +++ b/config/karma.config.js @@ -5,6 +5,8 @@ const path = require('path'); const fileHelpers = require('../lib/helpers/files'); const karmaScrumple = require('../lib/karma-scrumple'); +const karmaSwc = require('../lib/karma-swc'); + module.exports.getBaseKarmaConfig = function (opts = { ignoreBower: false }) { return Promise.all([fileHelpers.getModuleName(), fileHelpers.getModuleBrands(), fileHelpers.readIfExists(path.resolve('main.scss'))]).then(values => { const moduleName = values[0]; @@ -54,7 +56,8 @@ module.exports.getBaseKarmaConfig = function (opts = { ignoreBower: false }) { plugins: [ 'karma-*', - karmaScrumple + karmaScrumple, + karmaSwc ], // web server port @@ -63,7 +66,7 @@ module.exports.getBaseKarmaConfig = function (opts = { ignoreBower: false }) { // preprocess matching files before serving them to the browser // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor preprocessors: { - 'test/**/*.js': ['scrumple', 'sourcemap'], + 'test/**/*.js': ['scrumple', 'swc', 'sourcemap'], 'main.scss': ['scss'] }, scssPreprocessor: { diff --git a/lib/karma-swc.js b/lib/karma-swc.js new file mode 100644 index 00000000..531626e3 --- /dev/null +++ b/lib/karma-swc.js @@ -0,0 +1,47 @@ +"use strict"; + +const execa = require('execa'); +const swcPath = require.resolve('@swc/cli/bin/swc'); +const path = require('path'); + +function createPreprocessor(config, logger) { + const log = logger.create('preprocessor.swc'); + + return async function preprocess(original, file, done) { + const originalPath = file.originalPath; + const location = path.relative(config.basePath, originalPath); + + const swcArguments = ['--filename', '-', '--no-swcrc']; + + const swcCommand = swcPath + ' ' + swcArguments.join(' '); + try { + log.info('Generating bundle for ./%s', location); + const {stdout, stderr} = await execa.command(swcCommand, { + cwd: config.basePath, + input: original + }); + if (stderr) { + log.error('Failed to process ./%s\n\n%s\n', location, stderr); + done(stderr); + } else if (stdout) { + done(undefined, stdout); + } else { + log.warn('Nothing was processed for ./%s\n', location); + } + done(null, original); + } catch (error) { + log.error('Failed to process ./%s\n\n%s\n', location, error.stack); + done(error, null); + } + }; +} + +module.exports = { + 'preprocessor:swc': [ + 'factory', + (factory => { + factory.$inject = ['config', 'logger']; + return factory; + })(createPreprocessor), + ], +};