@code-style/eslint-config-node
Version:
110 lines (109 loc) • 11.4 kB
JavaScript
;
var import_modern_module_resolution = require("@rushstack/eslint-patch/modern-module-resolution");
const config = {
extends: ["plugin:eslint-plugin-n/recommended-module"],
parserOptions: {
ecmaVersion: 2022,
// Version is inline with Node 16
// TODO(0): should this maybe be 'script' until the upgrade to eslint 9
sourceType: "commonjs"
},
env: { node: true },
// `plugin:n/recommended-module` disables some globals we still want
globals: {
// TODO(1): detect if project is type: module or not and remove the globals if so
__dirname: "readonly",
__filename: "readonly",
require: "readonly",
module: "writable"
},
rules: {
// Allow unspecified radix in `parseInt` since Node has a consistent radix.
radix: "off",
/**
* Disallow using `process.env`.
* Any environment config reading should be in a specific config module.
* This simplifies understanding of the affects of config variables, as well
* as helping to ease error handling.
*/
"n/no-process-env": "error",
/**
* Require `return` upon callback.
* Not returning immediately makes it easy to continue executing code after
* what would usually be considered the end of method.
*/
"n/callback-return": ["error", ["callback", "cb", "next"]],
/**
* Disallow `require()` outside of the top-level module scope to encourage a
* consistent style.
*/
"n/global-require": "error",
// Require error handling in callbacks.
"n/handle-callback-err": ["error", "^.*[eE]rr(or)?$"],
/**
* Disallow mixing regular variable and `require` declarations to encourage a
* consistent style.
*/
"n/no-mixed-requires": "error",
/**
* Disallow use of new operator with the `require` function to encourage a
* consistent style.
*/
"n/no-new-require": "error",
// Disallow string concatenation with `__dirname` and `__filename`.
// Not all environments use the same path seperator (looking at you, Windows).
"n/no-path-concat": "error",
// Allow usage of all node modules.
"n/no-restricted-import": "off",
"n/no-restricted-require": "off",
/**
* Disallow use of synchronous methods that have an async alternative.
* Using synchronous methods ties up the thread, preventing other requests
* from being handled while waiting on I/O.
*/
"n/no-sync": "error",
// Defer to import/no-extraneous-dependencies.
"n/no-extraneous-import": "off",
"n/no-extraneous-require": "off",
// Require `module.exports` for commonjs to encourage a consistent style.
"n/exports-style": ["error", "module.exports"],
// Require imports instead of globals.
"n/prefer-global/buffer": ["error", "never"],
"n/prefer-global/text-decoder": ["error", "never"],
"n/prefer-global/text-encoder": ["error", "never"],
"n/prefer-global/url-search-params": ["error", "never"],
"n/prefer-global/url": ["error", "never"],
// Require promise APIs when available to encourage a consistent style.
"n/prefer-promises/dns": "error",
"n/prefer-promises/fs": "error",
// Require callbacks to be error first callbacks.
"n/no-callback-literal": "error",
// Check that all imports are part of our package in production.
"n/no-unpublished-import": ["error", { ignoreTypeImport: true }],
"n/no-unsupported-features/node-builtins": [
"error",
{ ignores: ["test", "test.describe", "test.it"] }
]
},
overrides: [
{
files: [
// test files
"**/test/**",
"**/__test__/**",
"*.test.*",
"*.spec.*",
"*.unit.*",
"*.e2e.*",
// config files
"*.config.*",
"*.configuration.*",
"config.*",
"configuration.*"
],
rules: { "n/no-process-env": "off" }
}
]
};
module.exports = config;
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2Jhc2UudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCAnQHJ1c2hzdGFjay9lc2xpbnQtcGF0Y2gvbW9kZXJuLW1vZHVsZS1yZXNvbHV0aW9uJztcbmltcG9ydCB0eXBlIHsgRVNMaW50IH0gZnJvbSAnZXNsaW50JztcblxuY29uc3QgY29uZmlnOiBFU0xpbnQuQ29uZmlnRGF0YSA9IHtcbiAgZXh0ZW5kczogWydwbHVnaW46ZXNsaW50LXBsdWdpbi1uL3JlY29tbWVuZGVkLW1vZHVsZSddLFxuXG4gIHBhcnNlck9wdGlvbnM6IHtcbiAgICBlY21hVmVyc2lvbjogMjAyMiwgLy8gVmVyc2lvbiBpcyBpbmxpbmUgd2l0aCBOb2RlIDE2XG4gICAgLy8gVE9ETygwKTogc2hvdWxkIHRoaXMgbWF5YmUgYmUgJ3NjcmlwdCcgdW50aWwgdGhlIHVwZ3JhZGUgdG8gZXNsaW50IDlcbiAgICBzb3VyY2VUeXBlOiAnY29tbW9uanMnIGFzIHVua25vd24gYXMgdW5kZWZpbmVkLFxuICB9LFxuXG4gIGVudjogeyBub2RlOiB0cnVlIH0sXG5cbiAgLy8gYHBsdWdpbjpuL3JlY29tbWVuZGVkLW1vZHVsZWAgZGlzYWJsZXMgc29tZSBnbG9iYWxzIHdlIHN0aWxsIHdhbnRcbiAgZ2xvYmFsczoge1xuICAgIC8vIFRPRE8oMSk6IGRldGVjdCBpZiBwcm9qZWN0IGlzIHR5cGU6IG1vZHVsZSBvciBub3QgYW5kIHJlbW92ZSB0aGUgZ2xvYmFscyBpZiBzb1xuICAgIF9fZGlybmFtZTogJ3JlYWRvbmx5JyxcbiAgICBfX2ZpbGVuYW1lOiAncmVhZG9ubHknLFxuICAgIHJlcXVpcmU6ICdyZWFkb25seScsXG4gICAgbW9kdWxlOiAnd3JpdGFibGUnLFxuICB9LFxuXG4gIHJ1bGVzOiB7XG4gICAgLy8gQWxsb3cgdW5zcGVjaWZpZWQgcmFkaXggaW4gYHBhcnNlSW50YCBzaW5jZSBOb2RlIGhhcyBhIGNvbnNpc3RlbnQgcmFkaXguXG4gICAgcmFkaXg6ICdvZmYnLFxuXG4gICAgLyoqXG4gICAgICogRGlzYWxsb3cgdXNpbmcgYHByb2Nlc3MuZW52YC5cbiAgICAgKiBBbnkgZW52aXJvbm1lbnQgY29uZmlnIHJlYWRpbmcgc2hvdWxkIGJlIGluIGEgc3BlY2lmaWMgY29uZmlnIG1vZHVsZS5cbiAgICAgKiBUaGlzIHNpbXBsaWZpZXMgdW5kZXJzdGFuZGluZyBvZiB0aGUgYWZmZWN0cyBvZiBjb25maWcgdmFyaWFibGVzLCBhcyB3ZWxsXG4gICAgICogICBhcyBoZWxwaW5nIHRvIGVhc2UgZXJyb3IgaGFuZGxpbmcuXG4gICAgICovXG4gICAgJ24vbm8tcHJvY2Vzcy1lbnYnOiAnZXJyb3InLFxuXG4gICAgLyoqXG4gICAgICogUmVxdWlyZSBgcmV0dXJuYCB1cG9uIGNhbGxiYWNrLlxuICAgICAqIE5vdCByZXR1cm5pbmcgaW1tZWRpYXRlbHkgbWFrZXMgaXQgZWFzeSB0byBjb250aW51ZSBleGVjdXRpbmcgY29kZSBhZnRlclxuICAgICAqICAgd2hhdCB3b3VsZCB1c3VhbGx5IGJlIGNvbnNpZGVyZWQgdGhlIGVuZCBvZiBtZXRob2QuXG4gICAgICovXG4gICAgJ24vY2FsbGJhY2stcmV0dXJuJzogWydlcnJvcicsIFsnY2FsbGJhY2snLCAnY2InLCAnbmV4dCddXSxcblxuICAgIC8qKlxuICAgICAqIERpc2FsbG93IGByZXF1aXJlKClgIG91dHNpZGUgb2YgdGhlIHRvcC1sZXZlbCBtb2R1bGUgc2NvcGUgdG8gZW5jb3VyYWdlIGFcbiAgICAgKiAgY29uc2lzdGVudCBzdHlsZS5cbiAgICAgKi9cbiAgICAnbi9nbG9iYWwtcmVxdWlyZSc6ICdlcnJvcicsXG5cbiAgICAvLyBSZXF1aXJlIGVycm9yIGhhbmRsaW5nIGluIGNhbGxiYWNrcy5cbiAgICAnbi9oYW5kbGUtY2FsbGJhY2stZXJyJzogWydlcnJvcicsICdeLipbZUVdcnIob3IpPyQnXSxcblxuICAgIC8qKlxuICAgICAqIERpc2FsbG93IG1peGluZyByZWd1bGFyIHZhcmlhYmxlIGFuZCBgcmVxdWlyZWAgZGVjbGFyYXRpb25zIHRvIGVuY291cmFnZSBhXG4gICAgICogICBjb25zaXN0ZW50IHN0eWxlLlxuICAgICAqL1xuICAgICduL25vLW1peGVkLXJlcXVpcmVzJzogJ2Vycm9yJyxcblxuICAgIC8qKlxuICAgICAqIERpc2FsbG93IHVzZSBvZiBuZXcgb3BlcmF0b3Igd2l0aCB0aGUgYHJlcXVpcmVgIGZ1bmN0aW9uIHRvIGVuY291cmFnZSBhXG4gICAgICogY29uc2lzdGVudCBzdHlsZS5cbiAgICAgKi9cbiAgICAnbi9uby1uZXctcmVxdWlyZSc6ICdlcnJvcicsXG5cbiAgICAvLyBEaXNhbGxvdyBzdHJpbmcgY29uY2F0ZW5hdGlvbiB3aXRoIGBfX2Rpcm5hbWVgIGFuZCBgX19maWxlbmFtZWAuXG4gICAgLy8gTm90IGFsbCBlbnZpcm9ubWVudHMgdXNlIHRoZSBzYW1lIHBhdGggc2VwZXJhdG9yIChsb29raW5nIGF0IHlvdSwgV2luZG93cykuXG4gICAgJ24vbm8tcGF0aC1jb25jYXQnOiAnZXJyb3InLFxuXG4gICAgLy8gQWxsb3cgdXNhZ2Ugb2YgYWxsIG5vZGUgbW9kdWxlcy5cbiAgICAnbi9uby1yZXN0cmljdGVkLWltcG9ydCc6ICdvZmYnLFxuICAgICduL25vLXJlc3RyaWN0ZWQtcmVxdWlyZSc6ICdvZmYnLFxuXG4gICAgLyoqXG4gICAgICogRGlzYWxsb3cgdXNlIG9mIHN5bmNocm9ub3VzIG1ldGhvZHMgdGhhdCBoYXZlIGFuIGFzeW5jIGFsdGVybmF0aXZlLlxuICAgICAqIFVzaW5nIHN5bmNocm9ub3VzIG1ldGhvZHMgdGllcyB1cCB0aGUgdGhyZWFkLCBwcmV2ZW50aW5nIG90aGVyIHJlcXVlc3RzXG4gICAgICogICBmcm9tIGJlaW5nIGhhbmRsZWQgd2hpbGUgd2FpdGluZyBvbiBJL08uXG4gICAgICovXG4gICAgJ24vbm8tc3luYyc6ICdlcnJvcicsXG5cbiAgICAvLyBEZWZlciB0byBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMuXG4gICAgJ24vbm8tZXh0cmFuZW91cy1pbXBvcnQnOiAnb2ZmJyxcbiAgICAnbi9uby1leHRyYW5lb3VzLXJlcXVpcmUnOiAnb2ZmJyxcblxuICAgIC8vIFJlcXVpcmUgYG1vZHVsZS5leHBvcnRzYCBmb3IgY29tbW9uanMgdG8gZW5jb3VyYWdlIGEgY29uc2lzdGVudCBzdHlsZS5cbiAgICAnbi9leHBvcnRzLXN0eWxlJzogWydlcnJvcicsICdtb2R1bGUuZXhwb3J0cyddLFxuXG4gICAgLy8gUmVxdWlyZSBpbXBvcnRzIGluc3RlYWQgb2YgZ2xvYmFscy5cbiAgICAnbi9wcmVmZXItZ2xvYmFsL2J1ZmZlcic6IFsnZXJyb3InLCAnbmV2ZXInXSxcbiAgICAnbi9wcmVmZXItZ2xvYmFsL3RleHQtZGVjb2Rlcic6IFsnZXJyb3InLCAnbmV2ZXInXSxcbiAgICAnbi9wcmVmZXItZ2xvYmFsL3RleHQtZW5jb2Rlcic6IFsnZXJyb3InLCAnbmV2ZXInXSxcbiAgICAnbi9wcmVmZXItZ2xvYmFsL3VybC1zZWFyY2gtcGFyYW1zJzogWydlcnJvcicsICduZXZlciddLFxuICAgICduL3ByZWZlci1nbG9iYWwvdXJsJzogWydlcnJvcicsICduZXZlciddLFxuXG4gICAgLy8gUmVxdWlyZSBwcm9taXNlIEFQSXMgd2hlbiBhdmFpbGFibGUgdG8gZW5jb3VyYWdlIGEgY29uc2lzdGVudCBzdHlsZS5cbiAgICAnbi9wcmVmZXItcHJvbWlzZXMvZG5zJzogJ2Vycm9yJyxcbiAgICAnbi9wcmVmZXItcHJvbWlzZXMvZnMnOiAnZXJyb3InLFxuXG4gICAgLy8gUmVxdWlyZSBjYWxsYmFja3MgdG8gYmUgZXJyb3IgZmlyc3QgY2FsbGJhY2tzLlxuICAgICduL25vLWNhbGxiYWNrLWxpdGVyYWwnOiAnZXJyb3InLFxuXG4gICAgLy8gQ2hlY2sgdGhhdCBhbGwgaW1wb3J0cyBhcmUgcGFydCBvZiBvdXIgcGFja2FnZSBpbiBwcm9kdWN0aW9uLlxuICAgICduL25vLXVucHVibGlzaGVkLWltcG9ydCc6IFsnZXJyb3InLCB7IGlnbm9yZVR5cGVJbXBvcnQ6IHRydWUgfV0sXG5cbiAgICAnbi9uby11bnN1cHBvcnRlZC1mZWF0dXJlcy9ub2RlLWJ1aWx0aW5zJzogW1xuICAgICAgJ2Vycm9yJyxcbiAgICAgIHsgaWdub3JlczogWyd0ZXN0JywgJ3Rlc3QuZGVzY3JpYmUnLCAndGVzdC5pdCddIH0sXG4gICAgXSxcbiAgfSxcblxuICBvdmVycmlkZXM6IFtcbiAgICB7XG4gICAgICBmaWxlczogW1xuICAgICAgICAvLyB0ZXN0IGZpbGVzXG4gICAgICAgICcqKi90ZXN0LyoqJyxcbiAgICAgICAgJyoqL19fdGVzdF9fLyoqJyxcbiAgICAgICAgJyoudGVzdC4qJyxcbiAgICAgICAgJyouc3BlYy4qJyxcbiAgICAgICAgJyoudW5pdC4qJyxcbiAgICAgICAgJyouZTJlLionLFxuICAgICAgICAvLyBjb25maWcgZmlsZXNcbiAgICAgICAgJyouY29uZmlnLionLFxuICAgICAgICAnKi5jb25maWd1cmF0aW9uLionLFxuICAgICAgICAnY29uZmlnLionLFxuICAgICAgICAnY29uZmlndXJhdGlvbi4qJyxcbiAgICAgIF0sXG4gICAgICBydWxlczogeyAnbi9uby1wcm9jZXNzLWVudic6ICdvZmYnIH0sXG4gICAgfSxcbiAgXSxcbn07XG5cbmV4cG9ydCA9IGNvbmZpZztcbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBQSxzQ0FBTztBQUdQLE1BQU0sU0FBNEI7QUFBQSxFQUNoQyxTQUFTLENBQUMsMkNBQTJDO0FBQUEsRUFFckQsZUFBZTtBQUFBLElBQ2IsYUFBYTtBQUFBO0FBQUE7QUFBQSxJQUViLFlBQVk7QUFBQSxFQUNkO0FBQUEsRUFFQSxLQUFLLEVBQUUsTUFBTSxLQUFLO0FBQUE7QUFBQSxFQUdsQixTQUFTO0FBQUE7QUFBQSxJQUVQLFdBQVc7QUFBQSxJQUNYLFlBQVk7QUFBQSxJQUNaLFNBQVM7QUFBQSxJQUNULFFBQVE7QUFBQSxFQUNWO0FBQUEsRUFFQSxPQUFPO0FBQUE7QUFBQSxJQUVMLE9BQU87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVFQLG9CQUFvQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU9wQixxQkFBcUIsQ0FBQyxTQUFTLENBQUMsWUFBWSxNQUFNLE1BQU0sQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFNekQsb0JBQW9CO0FBQUE7QUFBQSxJQUdwQix5QkFBeUIsQ0FBQyxTQUFTLGlCQUFpQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFNcEQsdUJBQXVCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU12QixvQkFBb0I7QUFBQTtBQUFBO0FBQUEsSUFJcEIsb0JBQW9CO0FBQUE7QUFBQSxJQUdwQiwwQkFBMEI7QUFBQSxJQUMxQiwyQkFBMkI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFPM0IsYUFBYTtBQUFBO0FBQUEsSUFHYiwwQkFBMEI7QUFBQSxJQUMxQiwyQkFBMkI7QUFBQTtBQUFBLElBRzNCLG1CQUFtQixDQUFDLFNBQVMsZ0JBQWdCO0FBQUE7QUFBQSxJQUc3QywwQkFBMEIsQ0FBQyxTQUFTLE9BQU87QUFBQSxJQUMzQyxnQ0FBZ0MsQ0FBQyxTQUFTLE9BQU87QUFBQSxJQUNqRCxnQ0FBZ0MsQ0FBQyxTQUFTLE9BQU87QUFBQSxJQUNqRCxxQ0FBcUMsQ0FBQyxTQUFTLE9BQU87QUFBQSxJQUN0RCx1QkFBdUIsQ0FBQyxTQUFTLE9BQU87QUFBQTtBQUFBLElBR3hDLHlCQUF5QjtBQUFBLElBQ3pCLHdCQUF3QjtBQUFBO0FBQUEsSUFHeEIseUJBQXlCO0FBQUE7QUFBQSxJQUd6QiwyQkFBMkIsQ0FBQyxTQUFTLEVBQUUsa0JBQWtCLEtBQUssQ0FBQztBQUFBLElBRS9ELDJDQUEyQztBQUFBLE1BQ3pDO0FBQUEsTUFDQSxFQUFFLFNBQVMsQ0FBQyxRQUFRLGlCQUFpQixTQUFTLEVBQUU7QUFBQSxJQUNsRDtBQUFBLEVBQ0Y7QUFBQSxFQUVBLFdBQVc7QUFBQSxJQUNUO0FBQUEsTUFDRSxPQUFPO0FBQUE7QUFBQSxRQUVMO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQTtBQUFBLFFBRUE7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUEsTUFDQSxPQUFPLEVBQUUsb0JBQW9CLE1BQU07QUFBQSxJQUNyQztBQUFBLEVBQ0Y7QUFDRjtBQUVBLGlCQUFTOyIsCiAgIm5hbWVzIjogW10KfQo=