eslint-config-airbe
Version:
A shared eslint config to apply eslint fastly
289 lines (279 loc) • 8.88 kB
JavaScript
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/index.ts
var src_exports = {};
__export(src_exports, {
default: () => src_default
});
module.exports = __toCommonJS(src_exports);
// src/utils.ts
var isPlainObject = (obj) => {
return Object.prototype.toString.call(obj) === "[object Object]";
};
// src/configs/js.ts
var import_js = __toESM(require("@eslint/js"));
function getJsConfig(jsConfig) {
if (jsConfig) {
const jsRules = {
"prefer-template": "warn",
"no-def": "off",
eqeqeq: ["error", "always"],
curly: ["error", "multi", "consistent"],
"default-case": "warn",
"default-case-last": "warn",
"no-await-in-loop": "warn",
"no-console": "warn",
"no-use-before-define": "error",
"no-eval": "error"
};
if (isPlainObject(jsConfig))
Object.assign(jsRules, jsConfig);
return [import_js.default.configs.recommended, { rules: jsRules }];
}
return [];
}
// src/configs/ts.ts
var import_typescript_eslint = __toESM(require("typescript-eslint"));
function getTsConfig(tsConfig) {
if (tsConfig) {
const tsRules = {
"@typescript-eslint/prefer-nullish-coalescing": "off",
"@typescript-eslint/no-unsafe-member-access": "off",
"@typescript-eslint/no-unsafe-call": "off",
"@typescript-eslint/no-unsafe-assignment": "off",
"@typescript-eslint/no-unsafe-argument": "off",
"@typescript-eslint/no-unsafe-return": "warn",
"@typescript-eslint/no-unused-vars": "warn",
"@typescript-eslint/no-explicit-any": "warn",
"@typescript-eslint/no-unnecessary-type-assertion": "warn",
"@typescript-eslint/dot-notation": "warn"
};
if (isPlainObject(tsConfig))
Object.assign(tsRules, tsConfig);
return [...import_typescript_eslint.default.configs.recommendedTypeChecked, ...import_typescript_eslint.default.configs.stylisticTypeChecked, {
languageOptions: {
parserOptions: {
parser: import_typescript_eslint.default.parser,
projectService: true
}
},
rules: tsRules
}];
}
return [];
}
// src/configs/vue.ts
var import_eslint_plugin_vue = __toESM(require("eslint-plugin-vue"));
var import_vue_eslint_parser = __toESM(require("vue-eslint-parser"));
var import_typescript_eslint2 = __toESM(require("typescript-eslint"));
function getVueConfig(vueConfig) {
if (vueConfig) {
const vueRules = {
"vue/multi-word-component-names": "off",
"vue/no-duplicate-attributes": ["warn", {
allowCoexistClass: true,
allowCoexistStyle: true
}],
"vue/no-parsing-error": ["error", {
"duplicate-attribute": false
}],
"vue/html-indent": ["error", 2],
"vue/max-attributes-per-line": ["error", {
singleline: {
max: 1
},
multiline: {
max: 1
}
}],
"vue/first-attribute-linebreak": ["error", {
singleline: "beside",
multiline: "below"
}],
"vue/component-name-in-template-casing": ["error", "PascalCase", { registeredComponentsOnly: false }],
"vue/attribute-hyphenation": "error",
"vue/no-multiple-objects-in-class": "error",
"vue/no-useless-mustaches": "error",
"vue/no-useless-v-bind": "error",
"vue/padding-line-between-blocks": "error",
"vue/prefer-true-attribute-shorthand": "error",
"vue/prefer-separate-static-class": "error",
"vue/valid-v-slot": ["error", {
allowModifiers: true
}]
};
if (isPlainObject(vueConfig))
Object.assign(vueRules, vueConfig);
return [
...import_eslint_plugin_vue.default.configs["flat/recommended"],
{
languageOptions: {
parser: import_vue_eslint_parser.default,
parserOptions: {
parser: import_typescript_eslint2.default.parser,
projectService: true,
ecmaFeatures: {
jsx: true
}
}
}
},
{
rules: vueRules
}
];
}
return [];
}
// src/configs/stylistic.ts
var import_eslint_plugin = __toESM(require("@stylistic/eslint-plugin"));
function getStylisticConfig(stylisticConfig) {
if (stylisticConfig) {
const stylisticRules = {
"@stylistic/no-trailing-spaces": ["error", { skipBlankLines: true }]
};
if (isPlainObject(stylisticConfig))
Object.assign(stylisticRules, stylisticConfig);
return [
import_eslint_plugin.default.configs.customize({
quoteProps: "as-needed"
}),
{
rules: stylisticRules
}
];
}
return [];
}
// src/configs/import.ts
var import_eslint_plugin_import_x = __toESM(require("eslint-plugin-import-x"));
function getImportConfig(importConfig) {
if (importConfig) {
const importRules = {
"import-x/no-absolute-path": "error",
"import-x/no-unused-modules": "warn",
"import-x/first": "warn",
"import-x/newline-after-import": "warn"
};
if (isPlainObject(importConfig))
Object.assign(importRules, importConfig);
return [
import_eslint_plugin_import_x.default.configs.typescript,
{
plugins: {
"import-x": import_eslint_plugin_import_x.default
},
settings: {
"import-x/resolver": {
typescript: true
}
},
rules: importRules
}
];
}
return [];
}
// src/configs/unusedImports.ts
var import_eslint_plugin_unused_imports = __toESM(require("eslint-plugin-unused-imports"));
function getUnusedImportsConfig(unusedImportsConfig, useTpeScriptEslint) {
if (unusedImportsConfig) {
const unusedImportsRules = {
"no-unused-vars": "off",
"unused-imports/no-unused-imports": "error",
"unused-imports/no-unused-vars": [
"warn",
{
vars: "all",
varsIgnorePattern: "^_",
args: "after-used",
argsIgnorePattern: "^_"
}
]
};
if (useTpeScriptEslint && (unusedImportsConfig === true || unusedImportsConfig["unused-imports/no-unused-vars"] !== "off"))
Object.assign(unusedImportsRules, { "@typescript-eslint/no-unused-vars": "off" });
if (isPlainObject(unusedImportsConfig))
Object.assign(unusedImportsRules, unusedImportsConfig);
return [
{
plugins: {
"unused-imports": import_eslint_plugin_unused_imports.default
},
rules: unusedImportsRules
}
];
}
return [];
}
// src/index.ts
var defineConfig = (config, ...customFlatConfigs) => {
const {
js,
ts,
vue,
stylistic,
importX,
unusedImports: unusedImports2,
ignores,
globals
} = config;
const eslintConfig = [
...getJsConfig(js),
...getTsConfig(ts),
...getVueConfig(vue),
...getStylisticConfig(stylistic),
...getImportConfig(importX),
...getUnusedImportsConfig(unusedImports2)
];
if (Array.isArray(ignores))
eslintConfig.push({
ignores
});
if (isPlainObject(globals))
eslintConfig.push({
languageOptions: {
globals
}
});
eslintConfig.push({
files: ["*.json"],
rules: {
"no-invalid-meta": "off",
"@stylistic/quotes": ["error", "double"],
"@stylistic/quote-props": ["error", "always"],
"@stylistic/comma-dangle": "off",
"@typescript-eslint/no-unused-expressions": "off"
}
});
if (Array.isArray(customFlatConfigs))
eslintConfig.push(...customFlatConfigs);
return eslintConfig;
};
var src_default = defineConfig;
;