diff --git a/.eslintrc b/.eslintrc index e1337ccf95..096f7c8ab0 100644 --- a/.eslintrc +++ b/.eslintrc @@ -2,7 +2,11 @@ "extends": ["webpack", "prettier"], "globals": { "document": true, - "window": true + "window": true, + "self": true, + "WorkerGlobalScope": true, + "__resourceQuery": true, + "__webpack_dev_server_client__": true }, "parserOptions": { "sourceType": "script" diff --git a/client-src/.eslintrc b/client-src/.eslintrc new file mode 100644 index 0000000000..bd14a19ef2 --- /dev/null +++ b/client-src/.eslintrc @@ -0,0 +1,5 @@ +{ + "parserOptions": { + "sourceType": "module" + } +} diff --git a/client-src/default/index.js b/client-src/default/index.js index dede6f0763..df7432b5ea 100644 --- a/client-src/default/index.js +++ b/client-src/default/index.js @@ -1,14 +1,14 @@ -'use strict'; - -/* global __resourceQuery WorkerGlobalScope self */ /* eslint prefer-destructuring: off */ -const stripAnsi = require('strip-ansi'); -const socket = require('./socket'); -const overlay = require('./overlay'); -const { log, setLogLevel } = require('./utils/log'); -const sendMessage = require('./utils/sendMessage'); -const reloadApp = require('./utils/reloadApp'); -const createSocketUrl = require('./utils/createSocketUrl'); +import stripAnsi from 'strip-ansi'; +import socket from './socket'; +import { + clear as clearOverlay, + showMessage as showMessageOverlay, +} from './overlay'; +import { log, setLogLevel } from './utils/log'; +import sendMessage from './utils/sendMessage'; +import reloadApp from './utils/reloadApp'; +import createSocketUrl from './utils/createSocketUrl'; const status = { isUnloading: false, @@ -47,7 +47,7 @@ const onSocketMessage = { log.info('[WDS] App updated. Recompiling...'); // fixes #1042. overlay doesn't clear if errors are fixed but warnings remain. if (options.useWarningOverlay || options.useErrorOverlay) { - overlay.clear(); + clearOverlay(); } sendMessage('Invalid'); }, @@ -57,7 +57,7 @@ const onSocketMessage = { 'still-ok': function stillOk() { log.info('[WDS] Nothing changed.'); if (options.useWarningOverlay || options.useErrorOverlay) { - overlay.clear(); + clearOverlay(); } sendMessage('StillOk'); }, @@ -93,7 +93,7 @@ const onSocketMessage = { ok() { sendMessage('Ok'); if (options.useWarningOverlay || options.useErrorOverlay) { - overlay.clear(); + clearOverlay(); } if (options.initial) { return (options.initial = false); @@ -112,7 +112,7 @@ const onSocketMessage = { log.warn(strippedWarnings[i]); } if (options.useWarningOverlay) { - overlay.showMessage(warnings); + showMessageOverlay(warnings); } if (options.initial) { @@ -128,7 +128,7 @@ const onSocketMessage = { log.error(strippedErrors[i]); } if (options.useErrorOverlay) { - overlay.showMessage(errors); + showMessageOverlay(errors); } options.initial = false; }, diff --git a/client-src/default/overlay.js b/client-src/default/overlay.js index a1bb6cef2b..9a200bd6d3 100644 --- a/client-src/default/overlay.js +++ b/client-src/default/overlay.js @@ -1,10 +1,10 @@ -'use strict'; - // The error overlay is inspired (and mostly copied) from Create React App (https://github.com/facebookincubator/create-react-app) // They, in turn, got inspired by webpack-hot-middleware (https://github.com/glenjamin/webpack-hot-middleware). -const ansiHTML = require('ansi-html'); -const { AllHtmlEntities } = require('html-entities'); +import ansiHTML from 'ansi-html'; +import { AllHtmlEntities as Entities } from 'html-entities'; + +const entities = new Entities(); const entities = new AllHtmlEntities(); const colors = { @@ -109,19 +109,12 @@ function clear() { lastOnOverlayDivReady = null; } -// Compilation with errors (e.g. syntax error or missing modules). -function showMessage(messages) { - ensureOverlayDivExists((div) => { - // Make it look similar to our terminal. - div.innerHTML = `Failed to compile.

${ansiHTML( - entities.encode(messages[0]) - )}`; - }); +// Successful compilation. +export function clear() { + destroyErrorOverlay(); } -module.exports = { - clear, - showMessage, -}; +// Compilation with errors (e.g. syntax error or missing modules). +export function showMessage(messages) { + showMessageOverlay(messages[0]); +} diff --git a/client-src/default/socket.js b/client-src/default/socket.js index 4c8bcbba20..a5ff0b4f7a 100644 --- a/client-src/default/socket.js +++ b/client-src/default/socket.js @@ -1,6 +1,3 @@ -'use strict'; - -/* global __webpack_dev_server_client__ */ /* eslint-disable camelcase */ @@ -46,4 +43,4 @@ const socket = function initSocket(url, handlers) { }); }; -module.exports = socket; +export default socket; diff --git a/client-src/default/utils/createSocketUrl.js b/client-src/default/utils/createSocketUrl.js index 98d0f13914..fb78fee60b 100644 --- a/client-src/default/utils/createSocketUrl.js +++ b/client-src/default/utils/createSocketUrl.js @@ -1,10 +1,6 @@ -'use strict'; - -/* global self */ - -const url = require('url'); -const querystring = require('querystring'); -const getCurrentScriptSource = require('./getCurrentScriptSource'); +import url from 'url'; +import querystring from 'querystring'; +import getCurrentScriptSource from './getCurrentScriptSource'; function createSocketUrl(resourceQuery) { let urlParts; @@ -80,4 +76,4 @@ function createSocketUrl(resourceQuery) { }); } -module.exports = createSocketUrl; +export default createSocketUrl; diff --git a/client-src/default/utils/getCurrentScriptSource.js b/client-src/default/utils/getCurrentScriptSource.js index 7d1d609a6a..8a4244a2ee 100644 --- a/client-src/default/utils/getCurrentScriptSource.js +++ b/client-src/default/utils/getCurrentScriptSource.js @@ -1,5 +1,3 @@ -'use strict'; - function getCurrentScriptSource() { // `document.currentScript` is the most accurate way to find the current script, // but is not supported in all browsers. @@ -17,4 +15,4 @@ function getCurrentScriptSource() { throw new Error('[WDS] Failed to get current script source.'); } -module.exports = getCurrentScriptSource; +export default getCurrentScriptSource; diff --git a/client-src/default/utils/log.js b/client-src/default/utils/log.js index 91d9aa763b..6ae76e069b 100644 --- a/client-src/default/utils/log.js +++ b/client-src/default/utils/log.js @@ -1,6 +1,6 @@ -'use strict'; +import { getLogger } from 'loglevel'; -const log = require('loglevel').getLogger('webpack-dev-server'); +export const log = getLogger('webpack-dev-server'); const INFO = 'info'; const WARN = 'warn'; @@ -17,7 +17,7 @@ const NONE = 'none'; // Set the default log level log.setDefaultLevel(INFO); -function setLogLevel(level) { +export function setLogLevel(level) { switch (level) { case INFO: case WARN: @@ -40,8 +40,3 @@ function setLogLevel(level) { log.error(`[WDS] Unknown clientLogLevel '${level}'`); } } - -module.exports = { - log, - setLogLevel, -}; diff --git a/client-src/default/utils/reloadApp.js b/client-src/default/utils/reloadApp.js index 7237ef6b25..d402f2e1f2 100644 --- a/client-src/default/utils/reloadApp.js +++ b/client-src/default/utils/reloadApp.js @@ -1,8 +1,4 @@ -'use strict'; - -/* global WorkerGlobalScope self */ - -const { log } = require('./log'); +import { log } from './log'; function reloadApp( { hotReload, hot, liveReload }, @@ -46,4 +42,4 @@ function reloadApp( } } -module.exports = reloadApp; +export default reloadApp; diff --git a/client-src/default/utils/sendMessage.js b/client-src/default/utils/sendMessage.js index f4dc2555dc..6cf28a5dd1 100644 --- a/client-src/default/utils/sendMessage.js +++ b/client-src/default/utils/sendMessage.js @@ -1,9 +1,5 @@ -'use strict'; - -/* global __resourceQuery WorkerGlobalScope self */ - // Send messages to the outside, so plugins can consume it. -function sendMsg(type, data) { +function sendMessage(type, data) { if ( typeof self !== 'undefined' && (typeof WorkerGlobalScope === 'undefined' || @@ -19,4 +15,4 @@ function sendMsg(type, data) { } } -module.exports = sendMsg; +export default sendMessage; diff --git a/client-src/default/webpack.config.js b/client-src/default/webpack.config.js index a0b70901ca..a10fbb061b 100644 --- a/client-src/default/webpack.config.js +++ b/client-src/default/webpack.config.js @@ -1,5 +1,3 @@ -'use strict'; - module.exports = { mode: 'production', module: { diff --git a/client-src/live/index.js b/client-src/live/index.js index dd5feef14b..77fc300311 100644 --- a/client-src/live/index.js +++ b/client-src/live/index.js @@ -1,11 +1,9 @@ -'use strict'; - /* eslint import/no-extraneous-dependencies: off, global-require: off */ -const $ = require('jquery'); -const stripAnsi = require('strip-ansi'); -const socket = require('../default/socket'); -require('./style.css'); +import $ from 'jquery'; +import stripAnsi from 'strip-ansi'; +import socket from '../default/socket'; +import './style.css'; let hot = false; let currentHash = ''; diff --git a/client-src/live/webpack.config.js b/client-src/live/webpack.config.js index 75e693210a..9217c60db5 100644 --- a/client-src/live/webpack.config.js +++ b/client-src/live/webpack.config.js @@ -1,5 +1,3 @@ -'use strict'; - const path = require('path'); const CopyPlugin = require('copy-webpack-plugin'); diff --git a/client-src/sockjs/index.js b/client-src/sockjs/index.js index a7db01b9d3..988f4885e3 100644 --- a/client-src/sockjs/index.js +++ b/client-src/sockjs/index.js @@ -1,3 +1,3 @@ -'use strict'; +import client from 'sockjs-client'; -module.exports = require('sockjs-client'); +export default client; diff --git a/client-src/sockjs/webpack.config.js b/client-src/sockjs/webpack.config.js index 4847a2b910..61c7f655bc 100644 --- a/client-src/sockjs/webpack.config.js +++ b/client-src/sockjs/webpack.config.js @@ -1,5 +1,3 @@ -'use strict'; - module.exports = { mode: 'production', output: { diff --git a/test/client/utils/createSocketUrl.test.js b/test/client/utils/createSocketUrl.test.js index 892e8204eb..172ec6007f 100644 --- a/test/client/utils/createSocketUrl.test.js +++ b/test/client/utils/createSocketUrl.test.js @@ -21,8 +21,10 @@ describe('createSocketUrl', () => { () => () => url ); - // eslint-disable-next-line global-require - const createSocketUrl = require('../../../client-src/default/utils/createSocketUrl'); + const { + default: createSocketUrl, + // eslint-disable-next-line global-require + } = require('../../../../client-src/default/utils/createSocketUrl'); test(`should return the url when __resourceQuery is ${url}`, () => { expect(createSocketUrl(url)).toMatchSnapshot(); diff --git a/test/client/utils/getCurrentScriptSource.test.js b/test/client/utils/getCurrentScriptSource.test.js index 8fb953b1f3..e7ec05aceb 100644 --- a/test/client/utils/getCurrentScriptSource.test.js +++ b/test/client/utils/getCurrentScriptSource.test.js @@ -1,6 +1,8 @@ 'use strict'; -const getCurrentScriptSource = require('../../../client-src/default/utils/getCurrentScriptSource'); +const { + default: getCurrentScriptSource, +} = require('../../../../client-src/default/utils/getCurrentScriptSource'); describe('getCurrentScriptSource', () => { afterEach(() => { diff --git a/test/client/utils/reloadApp.test.js b/test/client/utils/reloadApp.test.js index 13a392b117..be679dace4 100644 --- a/test/client/utils/reloadApp.test.js +++ b/test/client/utils/reloadApp.test.js @@ -25,7 +25,8 @@ describe('reloadApp', () => { }); // eslint-disable-next-line global-require - reloadApp = require('../../../client-src/default/utils/reloadApp'); + reloadApp = require('../../../../client-src/default/utils/reloadApp') + .default; }); afterEach(() => { diff --git a/test/client/utils/sendMessage.test.js b/test/client/utils/sendMessage.test.js index a60f2548bc..fd8ecbd315 100644 --- a/test/client/utils/sendMessage.test.js +++ b/test/client/utils/sendMessage.test.js @@ -2,7 +2,9 @@ /* global self */ -const sendMessage = require('../../../client-src/default/utils/sendMessage'); +const { + default: sendMessage, +} = require('../../../../client-src/default/utils/sendMessage'); describe('sendMessage', () => { afterEach(() => {