Skip to content
Draft
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 30 additions & 41 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -1,35 +1,31 @@
import { defineConfig, globalIgnores } from 'eslint/config';
import prettier from 'eslint-plugin-prettier';
import jest from 'eslint-plugin-jest';
import { globalIgnores } from 'eslint/config';
import globals from 'globals';
import mocha from 'eslint-plugin-mocha';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import js from '@eslint/js';
import { FlatCompat } from '@eslint/eslintrc';

const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const compat = new FlatCompat({
baseDirectory: __dirname,
recommendedConfig: js.configs.recommended,
allConfig: js.configs.all,
});

export default defineConfig([
import qlik from '@qlik/eslint-config';

// import-x plugin is provided by @qlik/eslint-config; re-use its instance to avoid dual-plugin issues
const importX = qlik.configs.react[0].plugins['import-x'];

export default qlik.compose(
globalIgnores(['**/dist/', '**/coverage/', '**/node_modules/', 'apis/snapshooter/client.js', 'apis/*/core/**/*.js']),
...qlik.configs.react,
{
...qlik.configs.jest[0],
files: [
'**/__test__/**/*.{js,jsx}',
'**/__tests__/**/*.{js,jsx}',
'**/*.spec.{js,jsx}',
'**/*.test.{js,jsx}',
],
},
{
extends: compat.extends('airbnb', 'prettier'),

plugins: {
prettier,
jest,
'import-x': importX,
},

languageOptions: {
globals: {
...globals.browser,
...jest.environments.globals.globals,
__NEBULA_DEV__: false,
},

Expand All @@ -38,28 +34,21 @@ export default defineConfig([
},

rules: {
'max-len': 0,
'no-plusplus': 0,
'no-bitwise': 0,
'no-unused-expressions': 0,
'prettier/prettier': 2,
'react/destructuring-assignment': [0, 'always'],
'react/prop-types': 0,
'react/no-deprecated': 0,

'import/no-extraneous-dependencies': [
'import-x/no-extraneous-dependencies': [
2,
{
devDependencies: true,
},
],

'import/no-dynamic-require': 0,
'jest/no-disabled-tests': 'warn',
'jest/no-focused-tests': 'error',
'jest/no-identical-title': 'error',
'jest/prefer-to-have-length': 'warn',
'jest/valid-expect': 'error',
'import-x/no-dynamic-require': 0,
'no-unused-vars': [
'error',
{
Expand Down Expand Up @@ -108,7 +97,7 @@ export default defineConfig([

rules: {
'no-var': 0,
'import/no-amd': 0,
'import-x/no-amd': 0,
},
},
{
Expand All @@ -118,15 +107,15 @@ export default defineConfig([
'arrow-body-style': 1,
'no-use-before-define': 1,
'react/function-component-definition': 0,
'import/prefer-default-export': 1,
'import/no-cycle': 1,
'import-x/prefer-default-export': 1,
'import-x/no-cycle': 1,
},
},
{
files: ['commands/serve/web/**/*.test.{js,jsx}', 'commands/serve/web/utils/testRenderer.jsx'],

rules: {
'import/no-extraneous-dependencies': 0,
'import-x/no-extraneous-dependencies': 0,
'array-callback-return': 0,
},
},
Expand Down Expand Up @@ -166,9 +155,9 @@ export default defineConfig([
files: ['**/templates/**/*.js'],

rules: {
'import/no-unresolved': 0,
'import/extensions': 0,
'import/no-extraneous-dependencies': 0,
'import-x/no-unresolved': 0,
'import-x/extensions': 0,
'import-x/no-extraneous-dependencies': 0,
},
},
{
Expand All @@ -178,8 +167,8 @@ export default defineConfig([
'react/jsx-filename-extension': 0,
'react/no-multi-comp': 0,
'react/prefer-stateless-function': 0,
'import/no-extraneous-dependencies': 0,
'import/no-unresolved': 0,
'import-x/no-extraneous-dependencies': 0,
'import-x/no-unresolved': 0,
},
},
]);
);
9 changes: 2 additions & 7 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
"@commitlint/config-conventional": "20.5.0",
"@jest/globals": "^30.3.0",
"@playwright/test": "1.59.1",
"@qlik/eslint-config": "1.4.30",
"@rollup/plugin-babel": "7.0.0",
"@rollup/plugin-commonjs": "29.0.2",
"@rollup/plugin-json": "6.1.0",
Expand All @@ -62,14 +63,7 @@
"css-loader": "7.1.4",
"enigma.js": "2.14.0",
"eslint": "9.39.4",
"eslint-config-airbnb": "19.0.4",
"eslint-config-prettier": "10.1.8",
"eslint-plugin-import": "2.32.0",
"eslint-plugin-jest": "^29.15.2",
"eslint-plugin-jsx-a11y": "6.10.2",
"eslint-plugin-mocha": "11.2.0",
"eslint-plugin-prettier": "5.5.5",
"eslint-plugin-react": "7.37.5",
"express": "5.2.1",
"globals": "^17.4.0",
"husky": "9.1.7",
Expand All @@ -90,6 +84,7 @@
"rollup": "4.60.1",
"rollup-plugin-sass": "1.15.3",
"style-loader": "4.0.0",
"svelte": "^5.0.0",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot why was svelte added

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@qlik/eslint-config@1.4.30 bundles eslint-plugin-svelte as a dependency and lists svelte as a (non-optional) peer dependency. eslint-plugin-svelte eagerly imports svelte/compiler at module load time, so ESLint crashes with Cannot find package 'svelte' the moment @qlik/eslint-config is imported — even though nebula.js itself doesn't use Svelte. Adding svelte as a devDependency is the minimum required to satisfy that load-time import. The ideal fix is for @qlik/eslint-config to mark svelte as optional, but until that's done upstream we need it here.

"whatwg-fetch": "^3.6.20",
"yargs": "17.7.2"
},
Expand Down
Loading
Loading