Skip to content

Commit

Permalink
Migrate to ES6 modules
Browse files Browse the repository at this point in the history
Configure project to use ES6 modules to enable top-level await
capabilities. This change helps project to align well with modern JS
standards.

- Set `type` to `module` in `package.json`.
- Use import/export syntax in Cypress configuration files.
- Rename configurations files that do not support modules to use
  the `.cjs` extension:
  - `vue.config.js` to `vue.config.cjs` (vuejs/vue-cli#4477).
  - `babel.config.js` to `babel.config.cjs (babel/babel-loader#894)
  - `.eslintrc.js` to `.eslintrc.cjs` (eslint/eslint#13440,
    eslint/eslint#14137)
  - `postcss.config.js` to `postcss.config.cjs` (postcss/postcss#1771)
- Provide a workaround for Vue CLI & Mocha ES6 modules conflict in
  Vue configuration file (vuejs/vue-cli#7417).
  • Loading branch information
undergroundwires committed Aug 17, 2023
1 parent 6a20d80 commit a14929a
Show file tree
Hide file tree
Showing 9 changed files with 21 additions and 6 deletions.
File renamed without changes.
File renamed without changes.
5 changes: 3 additions & 2 deletions cypress.config.ts
@@ -1,12 +1,13 @@
import { defineConfig } from 'cypress'
import { defineConfig } from 'cypress';
import setupPlugins from './tests/e2e/plugins/index.js';

export default defineConfig({
fixturesFolder: 'tests/e2e/fixtures',
screenshotsFolder: 'tests/e2e/screenshots',
videosFolder: 'tests/e2e/videos',
e2e: {
setupNodeEvents(on, config) {
return require('./tests/e2e/plugins/index.js')(on, config)
return setupPlugins(on, config);
},
specPattern: 'tests/e2e/specs/**/*.cy.{js,jsx,ts,tsx}',
supportFile: 'tests/e2e/support/index.js',
Expand Down
6 changes: 3 additions & 3 deletions docs/presentation.md
Expand Up @@ -25,9 +25,9 @@ The presentation layer uses an event-driven architecture for bidirectional react
- [**`electron/`**](./../src/presentation/electron/): Electron configuration for the desktop application.
- [**`main.ts`**](./../src/presentation/main.ts): Main process of Electron, started as first thing when app starts.
- [**`/public/`**](./../public/): Contains static assets that are directly copied and do not go through webpack.
- [**`/vue.config.js`**](./../vue.config.js): Global Vue CLI configurations loaded by `@vue/cli-service`.
- [**`/postcss.config.js`**](./../postcss.config.js): PostCSS configurations used by Vue CLI internally.
- [**`/babel.config.js`**](./../babel.config.js): Babel configurations for polyfills used by `@vue/cli-plugin-babel`.
- [**`/vue.config.cjs`**](./../vue.config.cjs): Global Vue CLI configurations loaded by `@vue/cli-service`.
- [**`/postcss.config.cjs`**](./../postcss.config.cjs): PostCSS configurations used by Vue CLI internally.
- [**`/babel.config.cjs`**](./../babel.config.cjs): Babel configurations for polyfills used by `@vue/cli-plugin-babel`.

## Visual design best-practices

Expand Down
1 change: 1 addition & 0 deletions package.json
Expand Up @@ -5,6 +5,7 @@
"slogan": "Now you have the choice",
"description": "Enforce privacy & security best-practices on Windows, macOS and Linux, because privacy is sexy 🍑🍆",
"author": "undergroundwires",
"type": "module",
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
Expand Down
File renamed without changes.
File renamed without changes.
2 changes: 1 addition & 1 deletion tests/e2e/plugins/index.js
Expand Up @@ -9,7 +9,7 @@
// /* eslint-disable import/no-extraneous-dependencies, global-require */
// const webpack = require('@cypress/webpack-preprocessor')

module.exports = (on, config) => {
export default (on, config) => {
// on('file:preprocessor', webpack({
// webpackOptions: require('@vue/cli-service/webpack.config'),
// watchOptions: {}
Expand Down
13 changes: 13 additions & 0 deletions vue.config.js → vue.config.cjs
Expand Up @@ -4,6 +4,7 @@ const packageJson = require('./package.json');
const tsconfigJson = require('./tsconfig.json');

loadVueAppRuntimeVariables();
fixMochaBuildWithModules();

module.exports = defineConfig({
transpileDependencies: true,
Expand Down Expand Up @@ -95,3 +96,15 @@ function getAliasesFromTsConfig() {
return aliases;
}, {});
}

function fixMochaBuildWithModules() {
/*
Workaround for Vue CLI issue during tests breaks projects that rely on ES6 modules and mocha.
Setting VUE_CLI_TEST to true prevents the Vue CLI from altering the module transpilation.
This fix ensures `npm run build -- --mode test` works successfully.
See: https://github.com/vuejs/vue-cli/issues/7417
*/
if (process.env.NODE_ENV === 'test') {
process.env.VUE_CLI_TEST = true;
}
}

0 comments on commit a14929a

Please sign in to comment.