@runnane/node-red-contrib-easee
Version:
Module for streaming Easee data. Based on node-red-contrib-signalrcore
149 lines (136 loc) • 4.07 kB
JavaScript
/**
* ESLint configuration for node-red-contrib-easee
* Using flat config format (ESLint 9+) with CommonJS
*/
const js = require("@eslint/js");
module.exports = [
// Ignore files and directories
{
ignores: [
"node_modules/**",
"*.min.js",
"build/**",
"dist/**",
"coverage/**"
]
},
// Base configuration for all JavaScript files
{
files: ["**/*.js"],
languageOptions: {
ecmaVersion: 2022,
sourceType: "script", // Changed to script since project uses CommonJS
globals: {
// Node.js globals
global: "readonly",
process: "readonly",
Buffer: "readonly",
__dirname: "readonly",
__filename: "readonly",
console: "readonly",
module: "readonly",
require: "readonly",
exports: "readonly",
setTimeout: "readonly",
clearTimeout: "readonly",
setInterval: "readonly",
clearInterval: "readonly",
setImmediate: "readonly",
clearImmediate: "readonly",
// Node-RED globals
RED: "readonly",
// Jest globals (for test files)
describe: "readonly",
test: "readonly",
it: "readonly",
expect: "readonly",
beforeEach: "readonly",
afterEach: "readonly",
beforeAll: "readonly",
afterAll: "readonly",
jest: "readonly"
}
},
rules: {
// Extend recommended rules
...js.configs.recommended.rules,
// Code quality rules
"no-console": "off", // Allow console for Node-RED logging
"no-unused-vars": ["error", {
"argsIgnorePattern": "^_",
"varsIgnorePattern": "^_"
}],
"no-undef": "error",
"no-redeclare": "error",
"no-unreachable": "error",
"no-dupe-keys": "error",
"no-duplicate-case": "error",
// Style rules
"indent": ["error", 2, { "SwitchCase": 1 }],
"quotes": ["error", "double", { "allowTemplateLiterals": true }],
"semi": ["error", "always"],
"comma-dangle": ["error", "never"],
"object-curly-spacing": ["error", "always"],
"array-bracket-spacing": ["error", "never"],
"space-before-blocks": "error",
"keyword-spacing": "error",
"space-infix-ops": "error",
"space-before-function-paren": ["error", "never"],
"no-trailing-spaces": "error",
"eol-last": "error",
// Best practices
"eqeqeq": ["error", "always"],
"curly": ["error", "all"],
"brace-style": ["error", "1tbs"],
"no-eval": "error",
"no-implied-eval": "error",
"no-new-func": "error",
"no-var": "error",
"prefer-const": "error",
"prefer-arrow-callback": "off", // Allow regular functions for Node-RED context
"arrow-spacing": "error",
"no-loop-func": "error", // Catch functions declared within loops (like JSHint caught)
// Node.js specific
"no-process-exit": "error",
"no-sync": "off", // Allow sync methods in Node-RED context
// Async/await
"require-await": "error",
"no-return-await": "error"
}
},
// Specific configuration for Node-RED node files
{
files: ["easee-client/*.js"],
languageOptions: {
sourceType: "script" // Node-RED nodes use CommonJS
},
rules: {
"no-undef": "off", // RED is injected by Node-RED runtime
"strict": "off" // Node-RED handles strict mode
}
},
// Specific configuration for test files
{
files: ["tests/**/*.js", "**/*.test.js"],
languageOptions: {
sourceType: "script",
globals: {
fetch: "readonly" // Available in test environment
}
},
rules: {
"no-unused-expressions": "off", // Allow Jest expect statements
"max-lines-per-function": "off", // Allow longer test functions
"max-statements": "off" // Allow more statements in tests
}
}, // Ignore patterns
{
ignores: [
"node_modules/**",
"coverage/**",
"backup/**",
"*.min.js",
"dist/**"
]
}
];