diff --git a/dist/index.js b/dist/index.js index 1a00947..5d99310 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1 +1,188 @@ -import{Linter as e}from"eslint";import{defineConfig as t,globalIgnores as n}from"eslint/config";import r from"globals";import i from"@eslint/js";import a from"eslint-plugin-jsdoc";import o from"eslint-plugin-functional";import s from"typescript-eslint";import c from"eslint-plugin-sonarjs";import l from"eslint-plugin-perfectionist";import u from"eslint-plugin-unicorn";const d={name:`JavaScript`,rules:{...i.configs.recommended.rules,"array-callback-return":[`error`,{allowVoid:!0,checkForEach:!0}],"no-nested-ternary":`off`,"no-unassigned-vars":`error`,"no-unneeded-ternary":[`error`,{defaultAssignment:!1}],"no-unreachable-loop":`error`,"no-use-before-define":`off`,"no-useless-assignment":`error`,yoda:[`error`,`never`]}},f=a.configs[`flat/recommended-typescript`],p=a.configs[`flat/stylistic-typescript`],m={name:`JSDoc`,plugins:f.plugins??{},rules:{...f.rules,...p.rules,"jsdoc/check-indentation":`warn`,"jsdoc/check-line-alignment":`warn`,"jsdoc/check-tag-names":[`warn`,{definedTags:[`link`]}],"jsdoc/lines-before-block":`off`,"jsdoc/no-blank-block-descriptions":`warn`,"jsdoc/no-blank-blocks":`warn`,"jsdoc/require-hyphen-before-param-description":[`warn`,`always`],"jsdoc/require-throws":`warn`,"jsdoc/sort-tags":`warn`,"jsdoc/tag-lines":`off`}},h={name:`Programmation fonctionnelle`,plugins:{functional:o},rules:{...o.configs.noExceptions.rules,...o.configs.noMutations.rules,...o.configs.externalTypeScriptRecommended.rules,...o.configs.stylistic.rules,"@typescript-eslint/array-type":[`error`,{default:`generic`,readonly:`generic`}],"functional/prefer-immutable-types":`off`,"functional/prefer-tacit":`off`,"functional/readonly-type":[`error`,`generic`],"functional/type-declaration-immutability":`off`}},g={name:`SonarJS`,plugins:c.configs.recommended.plugins??{},rules:{...c.configs.recommended.rules,"sonarjs/arguments-usage":`error`,"sonarjs/no-collapsible-if":`error`,"sonarjs/no-duplicate-string":`error`,"sonarjs/no-inconsistent-returns":`error`,"sonarjs/no-nested-switch":`error`,"sonarjs/prefer-immediate-return":`error`}},_={name:`Tri`,plugins:l.configs[`recommended-natural`].plugins??{},rules:l.configs[`recommended-natural`].rules??{}},v=(e,t)=>e.find(e=>e.name===t)??{},y=v(s.configs.strictTypeChecked,`typescript-eslint/base`),b=v(s.configs.strictTypeChecked,`typescript-eslint/eslint-recommended`),x=v(s.configs.strictTypeChecked,`typescript-eslint/strict-type-checked`),S=v(s.configs.stylisticTypeChecked,`typescript-eslint/stylistic-type-checked`),C={languageOptions:y.languageOptions??{},name:`TypeScript`,plugins:y.plugins??{},rules:{...b.rules,...x.rules,...S.rules,"@typescript-eslint/consistent-type-definitions":[`error`,`type`],"@typescript-eslint/max-params":[`error`,{max:3}],"@typescript-eslint/method-signature-style":[`off`,`property`],"@typescript-eslint/no-magic-numbers":`off`,"@typescript-eslint/no-unnecessary-boolean-literal-compare":`off`,"@typescript-eslint/no-unnecessary-type-parameters":`off`}},w={name:`Unicorn`,plugins:{unicorn:u},rules:{...u.configs.unopinionated.rules,"unicorn/catch-error-name":`error`,"unicorn/consistent-empty-array-spread":`error`,"unicorn/custom-error-definition":`error`,"unicorn/explicit-length-check":[`error`,{"non-zero":`not-equal`}],"unicorn/no-array-for-each":`off`,"unicorn/no-array-reduce":`off`,"unicorn/no-negated-condition":`error`,"unicorn/no-nested-ternary":`error`,"unicorn/no-null":`error`,"unicorn/prefer-dom-node-dataset":`off`}},T=t([n([`dist/**/*`],`Ignore le dossier de compilation`),{files:[`**/*.js`,`**/*.ts`],name:`Fichiers à analyser`},{languageOptions:{ecmaVersion:`latest`,globals:{...r.browser,...r.builtin,...r.es2026,...r.node},parserOptions:{ecmaVersion:`latest`,projectService:!0,sourceType:`module`,tsconfigRootDir:import.meta.dirname}},name:`Configuration du projet`},d,C,h,w,g,m,_]);export{T as configTypescriptNavigateur}; \ No newline at end of file +import { Linter } from "eslint"; +import { defineConfig, globalIgnores } from "eslint/config"; +import globals from "globals"; +import javascript from "@eslint/js"; +import jsdoc from "eslint-plugin-jsdoc"; +import oxlint from "eslint-plugin-oxlint"; +import functional from "eslint-plugin-functional"; +import typescriptEslint from "typescript-eslint"; +import sonarJs from "eslint-plugin-sonarjs"; +import perfectionist from "eslint-plugin-perfectionist"; +import unicorn from "eslint-plugin-unicorn"; + +//#region règles/javascript.ts +const règlesJavaScript = { + name: "JavaScript", + rules: { + ...javascript.configs.recommended.rules, + "array-callback-return": ["error", { + allowVoid: true, + checkForEach: true + }], + "no-nested-ternary": "off", + "no-unassigned-vars": "error", + "no-unneeded-ternary": ["error", { defaultAssignment: false }], + "no-unreachable-loop": "error", + "no-use-before-define": "off", + "no-useless-assignment": "error", + yoda: ["error", "never"] + } +}; + +//#endregion +//#region règles/jsdoc.ts +const flatRecommended = jsdoc.configs["flat/recommended-typescript"]; +const flatStylistic = jsdoc.configs["flat/stylistic-typescript"]; +const règlesJsDoc = { + name: "JSDoc", + plugins: flatRecommended.plugins ?? {}, + rules: { + ...flatRecommended.rules, + ...flatStylistic.rules, + "jsdoc/check-indentation": "warn", + "jsdoc/check-line-alignment": "warn", + "jsdoc/check-tag-names": ["warn", { definedTags: ["link"] }], + "jsdoc/lines-before-block": "off", + "jsdoc/no-blank-block-descriptions": "warn", + "jsdoc/no-blank-blocks": "warn", + "jsdoc/require-hyphen-before-param-description": ["warn", "never"], + "jsdoc/require-throws": "warn", + "jsdoc/sort-tags": "warn", + "jsdoc/tag-lines": "off" + } +}; + +//#endregion +//#region règles/oxlint.ts +const règlesOxlint = { + name: "Oxlint", + ...oxlint.configs["flat/recommended"][0] +}; + +//#endregion +//#region règles/programmation-fonctionnelle.ts +const règlesProgrammationFonctionnelle = { + name: "Programmation fonctionnelle", + plugins: { functional }, + rules: { + ...functional.configs.noExceptions.rules, + ...functional.configs.noMutations.rules, + ...functional.configs.externalTypeScriptRecommended.rules, + ...functional.configs.stylistic.rules, + "@typescript-eslint/array-type": ["error", { + default: "generic", + readonly: "generic" + }], + "functional/prefer-immutable-types": "off", + "functional/prefer-tacit": "off", + "functional/readonly-type": ["error", "generic"], + "functional/type-declaration-immutability": "off" + } +}; + +//#endregion +//#region règles/sonarjs.ts +const règlesSonarJs = { + name: "SonarJS", + plugins: sonarJs.configs.recommended.plugins ?? {}, + rules: { + ...sonarJs.configs.recommended.rules, + "sonarjs/arguments-usage": "error", + "sonarjs/no-collapsible-if": "error", + "sonarjs/no-duplicate-string": "error", + "sonarjs/no-inconsistent-returns": "error", + "sonarjs/no-nested-switch": "error", + "sonarjs/prefer-immediate-return": "error" + } +}; + +//#endregion +//#region règles/tri.ts +const règlesTri = { + name: "Tri", + plugins: perfectionist.configs["recommended-natural"].plugins ?? {}, + rules: perfectionist.configs["recommended-natural"].rules ?? {} +}; + +//#endregion +//#region règles/typescript.ts +const trouveConfiguration = (configuration, nom) => configuration.find((v) => v.name === nom) ?? {}; +const base = trouveConfiguration(typescriptEslint.configs.strictTypeChecked, "typescript-eslint/base"); +const desactivationsJavaScript = trouveConfiguration(typescriptEslint.configs.strictTypeChecked, "typescript-eslint/eslint-recommended"); +const strictTypeChecked = trouveConfiguration(typescriptEslint.configs.strictTypeChecked, "typescript-eslint/strict-type-checked"); +const stylisticTypeChecked = trouveConfiguration(typescriptEslint.configs.stylisticTypeChecked, "typescript-eslint/stylistic-type-checked"); +const règlesTypeScript = { + languageOptions: base.languageOptions ?? {}, + name: "TypeScript", + plugins: base.plugins ?? {}, + rules: { + ...desactivationsJavaScript.rules, + ...strictTypeChecked.rules, + ...stylisticTypeChecked.rules, + "@typescript-eslint/consistent-type-definitions": ["error", "type"], + "@typescript-eslint/max-params": ["error", { max: 3 }], + "@typescript-eslint/method-signature-style": ["off", "property"], + "@typescript-eslint/no-magic-numbers": "off", + "@typescript-eslint/no-unnecessary-boolean-literal-compare": "off", + "@typescript-eslint/no-unnecessary-type-parameters": "off" + } +}; + +//#endregion +//#region règles/unicorn.ts +const règlesUnicorn = { + name: "Unicorn", + plugins: { unicorn }, + rules: { + ...unicorn.configs.unopinionated.rules, + "unicorn/catch-error-name": "error", + "unicorn/consistent-empty-array-spread": "error", + "unicorn/custom-error-definition": "error", + "unicorn/explicit-length-check": ["error", { "non-zero": "not-equal" }], + "unicorn/no-array-for-each": "off", + "unicorn/no-array-reduce": "off", + "unicorn/no-negated-condition": "error", + "unicorn/no-nested-ternary": "error", + "unicorn/no-null": "error", + "unicorn/prefer-dom-node-dataset": "off" + } +}; + +//#endregion +//#region index.ts +const configTypescriptNavigateur = defineConfig([ + globalIgnores(["dist/**/*"], "Ignore le dossier de compilation"), + { + files: ["**/*.js", "**/*.ts"], + name: "Fichiers à analyser" + }, + { + languageOptions: { + ecmaVersion: "latest", + globals: { + ...globals.browser, + ...globals.builtin, + ...globals.es2026, + ...globals.node + }, + parserOptions: { + ecmaVersion: "latest", + projectService: true, + sourceType: "module", + tsconfigRootDir: import.meta.dirname + } + }, + name: "Configuration du projet" + }, + règlesJavaScript, + règlesTypeScript, + règlesProgrammationFonctionnelle, + règlesUnicorn, + règlesSonarJs, + règlesJsDoc, + règlesTri, + règlesOxlint +]); + +//#endregion +export { configTypescriptNavigateur }; \ No newline at end of file diff --git a/tsdown.config.ts b/tsdown.config.ts index a29255c..c34e26d 100644 --- a/tsdown.config.ts +++ b/tsdown.config.ts @@ -4,7 +4,7 @@ export default defineConfig({ clean: true, dts: { oxc: true, parallel: true }, entry: ["./index.ts"], - minify: true, + minify: false, platform: "node", sourcemap: false, target: "esnext",