@gaia-react/lint 1.1.2 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"playwright.d.ts","sourceRoot":"","sources":["../../src/configs/playwright.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,QAAQ,CAAC;AAEnC;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAMrC,CAAC"}
1
+ {"version":3,"file":"playwright.d.ts","sourceRoot":"","sources":["../../src/configs/playwright.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,QAAQ,CAAC;AAEnC;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAarC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/configs/testing.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,QAAQ,CAAC;AAEnC;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAsBlC,CAAC"}
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/configs/testing.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,QAAQ,CAAC;AAEnC;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EA8BlC,CAAC"}
package/dist/index.js CHANGED
@@ -768,7 +768,11 @@ import jestDom from "eslint-plugin-jest-dom";
768
768
  import testingLibrary from "eslint-plugin-testing-library";
769
769
  var testing = [
770
770
  {
771
- files: ["*.test.ts?(x)", "*.stories.ts?(x)", "test/**/*.ts?(x)"],
771
+ files: [
772
+ "**/*.test.ts?(x)",
773
+ "**/*.stories.ts?(x)",
774
+ "test/**/*.ts?(x)"
775
+ ],
772
776
  name: "vitest",
773
777
  plugins: {
774
778
  "jest-dom": jestDom,
@@ -780,6 +784,10 @@ var testing = [
780
784
  "import-x/no-useless-path-segments": [
781
785
  "error",
782
786
  { noUselessIndex: true }
787
+ ],
788
+ "vitest/expect-expect": [
789
+ "error",
790
+ { assertFunctionNames: ["expect", "expect*"] }
783
791
  ]
784
792
  }
785
793
  },
@@ -802,7 +810,14 @@ var playwright = [
802
810
  {
803
811
  name: "playwright",
804
812
  ...playwrightPlugin.configs["flat/recommended"],
805
- files: [".playwright/**/*.ts?(x)"]
813
+ files: [".playwright/**/*.ts?(x)"],
814
+ rules: {
815
+ ...playwrightPlugin.configs["flat/recommended"].rules,
816
+ "playwright/expect-expect": [
817
+ "warn",
818
+ { assertFunctionPatterns: ["^expect[A-Z]"] }
819
+ ]
820
+ }
806
821
  }
807
822
  ];
808
823
 
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/configs/base.ts","../src/configs/react.ts","../src/configs/style-hygiene.ts","../src/configs/guardrails.ts","../src/plugins/no-enum.ts","../src/plugins/no-switch.ts","../src/configs/testing.ts","../src/configs/storybook.ts","../src/configs/playwright.ts","../src/configs/prettier.ts","../src/configs/better-tailwind.ts","../src/configs/ignores.ts","../src/index.ts"],"sourcesContent":["import eslintComments from '@eslint-community/eslint-plugin-eslint-comments';\nimport js from '@eslint/js';\nimport {configs, plugins, rules} from 'eslint-config-airbnb-extended';\nimport preferArrowFunctions from 'eslint-plugin-prefer-arrow-functions';\nimport lodashUnderscore from 'eslint-plugin-you-dont-need-lodash-underscore';\nimport type {ESLint, Linter} from 'eslint';\n\nconst jsConfig: Linter.Config[] = [\n // ESLint recommended config\n {\n name: 'js/config',\n ...js.configs.recommended,\n },\n // Stylistic plugin\n plugins.stylistic,\n // Import X plugin\n plugins.importX,\n // Airbnb base recommended config\n ...configs.base.recommended,\n // Strict import rules\n rules.base.importsStrict,\n];\n\nconst jsCustomConfig: Linter.Config[] = [\n {\n name: 'js-custom',\n rules: {\n 'consistent-return': 'off',\n curly: ['error', 'all'],\n 'max-params': 'error',\n 'no-param-reassign': 'off', // handled by sonarjs\n 'no-undef': 'off',\n 'no-unused-vars': 'off', // handled by sonarjs\n },\n },\n {\n files: ['**/*.test.ts?(x)', '**/*.stories.ts?(x)'],\n name: 'test-files/all',\n rules: {\n 'guard-for-in': 'off',\n 'max-params': 'off',\n 'no-await-in-loop': 'off',\n 'no-plusplus': 'off',\n 'no-restricted-syntax': 'off',\n },\n },\n {\n files: ['.playwright/**/*.ts?(x)'],\n name: 'playwright/all',\n rules: {\n 'no-await-in-loop': 'off',\n 'no-restricted-syntax': 'off',\n },\n },\n];\n\nconst typescriptConfig: Linter.Config[] = [\n // TypeScript ESLint plugin\n plugins.typescriptEslint,\n // Airbnb base TypeScript config\n ...configs.base.typescript,\n // Strict TypeScript rules\n rules.typescript.typescriptEslintStrict,\n rules.typescript.stylistic,\n // Airbnb React TypeScript config\n ...configs.react.typescript,\n {\n files: ['./*.ts'],\n name: 'root-ts-files',\n rules: {\n 'global-require': 'off',\n 'no-void': 'off',\n },\n },\n {\n files: ['**/*.ts?(x)'],\n name: 'no-void',\n rules: {\n 'no-void': ['error', {allowAsStatement: true}],\n },\n },\n];\n\nconst tsEslintConfig: Linter.Config[] = [\n {\n files: ['**/*.ts?(x)'],\n name: 'typescript/config',\n rules: {\n '@typescript-eslint/array-type': ['error', {default: 'array'}],\n '@typescript-eslint/ban-ts-comment': 'off',\n '@typescript-eslint/consistent-type-definitions': ['error', 'type'],\n '@typescript-eslint/consistent-type-imports': 'error',\n '@typescript-eslint/explicit-module-boundary-types': 'off',\n '@typescript-eslint/method-signature-style': 'error',\n '@typescript-eslint/no-confusing-void-expression': [\n 'error',\n {ignoreArrowShorthand: true},\n ],\n '@typescript-eslint/no-floating-promises': [\n 'error',\n {ignoreIIFE: true, ignoreVoid: true},\n ],\n '@typescript-eslint/no-misused-promises': [\n 'error',\n {checksVoidReturn: false},\n ],\n '@typescript-eslint/no-non-null-assertion': 'off',\n '@typescript-eslint/no-throw-literal': 'off',\n '@typescript-eslint/no-unnecessary-boolean-literal-compare': 'error',\n '@typescript-eslint/no-unnecessary-condition': 'error',\n '@typescript-eslint/no-unnecessary-type-parameters': 'off',\n '@typescript-eslint/no-unsafe-assignment': 'error',\n '@typescript-eslint/no-unsafe-return': 'error',\n '@typescript-eslint/only-throw-error': 'off',\n '@typescript-eslint/prefer-nullish-coalescing': 'error',\n '@typescript-eslint/prefer-promise-reject-errors': 'off',\n '@typescript-eslint/restrict-template-expressions': [\n 'error',\n {allowBoolean: true, allowNumber: true},\n ],\n '@typescript-eslint/return-await': 'off',\n '@typescript-eslint/unbound-method': 'off',\n },\n },\n {\n files: ['app/hooks/**/*', 'app/routes/**/*', 'app/sessions.server/**/*'],\n name: 'typescript/only-throw-error',\n rules: {\n '@typescript-eslint/only-throw-error': 'off',\n },\n },\n {\n files: ['app/utils/**', 'app/services/**', 'app/hooks/**'],\n name: 'typescript/explicit-return-types',\n rules: {\n '@typescript-eslint/explicit-module-boundary-types': 'error',\n },\n },\n {\n files: ['**/*.test.ts?(x)', '**/*.stories.ts?(x)'],\n name: 'typescript/test-files',\n rules: {\n '@typescript-eslint/no-explicit-any': 'off',\n '@typescript-eslint/no-unsafe-assignment': 'off',\n '@typescript-eslint/no-unsafe-member-access': 'off',\n },\n },\n {\n files: ['test/**/*.ts?(x)'],\n name: 'typescript/test-config',\n rules: {\n '@typescript-eslint/no-var-requires': 'off',\n 'no-plusplus': 'off',\n },\n },\n {\n files: ['**/*.d.ts'],\n name: 'typescript/type-definitions',\n rules: {\n '@typescript-eslint/consistent-type-definitions': 'off',\n '@typescript-eslint/method-signature-style': 'error',\n '@typescript-eslint/no-unused-vars': 'off',\n },\n },\n];\n\nconst importXConfig: Linter.Config[] = [\n {\n name: 'import-x-all-files',\n rules: {\n 'import-x/consistent-type-specifier-style': ['error', 'prefer-top-level'],\n 'import-x/extensions': 'off',\n 'import-x/no-anonymous-default-export': [\n 'error',\n {\n allowArray: true,\n allowLiteral: true,\n allowObject: true,\n },\n ],\n 'import-x/no-namespace': 'off',\n 'import-x/no-rename-default': 'off',\n 'import-x/no-useless-path-segments': 'off',\n 'import-x/order': 'off',\n 'import-x/prefer-default-export': 'off',\n },\n },\n {\n files: ['./*.ts'],\n name: 'import-x/root-ts-files',\n rules: {\n 'import-x/no-extraneous-dependencies': 'off',\n 'import-x/no-unresolved': 'error',\n 'import-x/prefer-default-export': 'off',\n },\n },\n {\n files: ['**/*.test.ts?(x)', '**/*.stories.ts?(x)'],\n name: 'import-x/test-files',\n rules: {\n 'import-x/extensions': 'off',\n 'import-x/no-extraneous-dependencies': 'off',\n },\n },\n {\n files: ['app/**/!(*.test|*.stories).ts?(x)'],\n name: 'import-x/app-test-files',\n rules: {\n 'import-x/no-unresolved': 'error',\n },\n },\n {\n files: ['app/**/hooks/*.ts?(x)'],\n name: 'import-x/hooks',\n rules: {\n 'import-x/no-default-export': 'error',\n },\n },\n {\n files: ['test/**/*.ts?(x)'],\n name: 'import-x/test-config-files',\n rules: {\n 'import-x/no-extraneous-dependencies': 'off',\n 'import-x/prefer-default-export': 'off',\n },\n },\n {\n files: ['.storybook/**/*.ts?(x)', '.playwright/**/*.ts?(x)'],\n name: 'import-x/storybook-playwright',\n rules: {\n 'import-x/no-extraneous-dependencies': 'off',\n 'import-x/no-unresolved': 'off',\n },\n },\n];\n\nconst eslintCommentsConfig: Linter.Config[] = [\n {\n name: 'eslint-comments',\n plugins: {\n 'eslint-comments': eslintComments,\n },\n rules: {\n 'eslint-comments/disable-enable-pair': 'off',\n 'eslint-comments/no-unused-disable': 'error',\n },\n },\n];\n\nconst preferArrowFunctionsConfig: Linter.Config[] = [\n {\n name: 'prefer-arrow',\n plugins: {\n 'prefer-arrow-functions': preferArrowFunctions as unknown as ESLint.Plugin,\n },\n rules: {\n 'prefer-arrow-functions/prefer-arrow-functions': 'error',\n },\n },\n {\n // `prefer-arrow-functions` has a hardcoded exemption for named\n // default-exported declarations (`guard.js:hasNameAndIsExportedAsDefaultExport`),\n // so `export default function Foo() {}` slips through. This selector closes\n // that gap. Convert to `const Foo = () => {}; export default Foo;` instead.\n // `.d.ts` is ignored because ambient `export default function …(): T;`\n // declarations have no body to convert.\n ignores: ['**/*.d.ts'],\n name: 'prefer-arrow/no-default-exported-function',\n rules: {\n 'no-restricted-syntax': [\n 'error',\n {\n message:\n 'Use `const Name = () => {}; export default Name;` instead. The prefer-arrow-functions plugin exempts named default-exported declarations upstream.',\n selector: 'ExportDefaultDeclaration > FunctionDeclaration',\n },\n ],\n },\n },\n {\n files: ['**/*.d.ts'],\n name: 'ts-definition-files/prefer-arrow-off',\n rules: {\n 'prefer-arrow-functions/prefer-arrow-functions': 'off',\n },\n },\n];\n\nconst lodashUnderscoreConfig: Linter.Config[] = [\n {\n name: 'you-dont-need-lodash-underscore',\n plugins: {\n 'you-dont-need-lodash-underscore':\n lodashUnderscore as unknown as ESLint.Plugin,\n },\n rules: {\n ...(lodashUnderscore.configs.compatible.rules as Linter.RulesRecord),\n },\n },\n];\n\nexport const base: Linter.Config[] = [\n ...jsConfig,\n ...jsCustomConfig,\n ...typescriptConfig,\n ...tsEslintConfig,\n ...importXConfig,\n ...eslintCommentsConfig,\n ...preferArrowFunctionsConfig,\n ...lodashUnderscoreConfig,\n];\n","import {configs, plugins} from 'eslint-config-airbnb-extended';\nimport type {Linter} from 'eslint';\n\n/**\n * React flat-config block.\n *\n * Ports `reactConfig` + `reactCustomConfig` from GAIA's `eslint.config.mjs`.\n * Pulls React, React Hooks, and JSX A11y plugins plus Airbnb's recommended\n * React config, then layers GAIA's project-wide React rule overrides.\n *\n * The `react-router/routes` override targets `**\\/routes/**\\/*.tsx` — a GAIA\n * convention that's harmless for consumers without that folder structure\n * (the override only fires when files match).\n */\nexport const react: Linter.Config[] = [\n // React plugin\n plugins.react,\n // React hooks plugin\n plugins.reactHooks,\n // React JSX A11y plugin\n plugins.reactA11y,\n // Airbnb React recommended config\n ...configs.react.recommended,\n {\n name: 'react-custom',\n rules: {\n 'jsx-a11y/control-has-associated-label': 'off',\n 'jsx-a11y/no-autofocus': 'off',\n 'react/boolean-prop-naming': [\n 'error',\n {\n propTypeNames: ['bool', 'mutuallyExclusiveTrueProps'],\n rule: '^((can|has|hide|is|show)[A-Z]([A-Za-z0-9]?)+|(checked|disabled|hide|required|show))',\n },\n ],\n 'react/function-component-definition': 'off',\n 'react/jsx-boolean-value': ['error', 'always'],\n 'react/jsx-curly-brace-presence': 'error',\n 'react/jsx-filename-extension': 'off',\n 'react/jsx-fragments': 'error',\n // off by default because it doesn't handle props onXyz function names correctly\n // turn this on from time to time to check for misnamed handlers elsewhere\n 'react/jsx-handler-names': ['off', {checkLocalVariables: true}],\n 'react/jsx-newline': ['error', {prevent: true}],\n 'react/jsx-no-useless-fragment': ['error', {allowExpressions: true}],\n 'react/no-children-prop': 'off',\n 'react/no-danger': 'off',\n 'react/prop-types': 'off',\n 'react/react-in-jsx-scope': 'off',\n 'react/require-default-props': 'off',\n },\n },\n {\n files: ['**/routes/**/*.tsx'],\n name: 'react-router/routes',\n rules: {\n 'no-empty-pattern': 'off',\n 'react/display-name': 'off',\n },\n },\n {\n files: ['**/*.test.ts?(x)', '**/*.stories.ts?(x)'],\n name: 'react/test-files',\n rules: {\n 'react/jsx-props-no-spreading': 'off',\n },\n },\n];\n","import type {Linter} from 'eslint';\nimport canonical from 'eslint-plugin-canonical';\nimport checkFile from 'eslint-plugin-check-file';\nimport perfectionist from 'eslint-plugin-perfectionist';\nimport unicorn from 'eslint-plugin-unicorn';\nimport unusedImports from 'eslint-plugin-unused-imports';\n\nconst canonicalConfig: Linter.Config[] = [\n canonical.configs['flat/recommended'] as Linter.Config,\n {\n name: 'canonical',\n rules: {\n 'canonical/destructuring-property-newline': 'off',\n 'canonical/filename-match-exported': 'error',\n 'canonical/id-match': 'off',\n 'canonical/import-specifier-newline': 'off',\n },\n },\n {\n files: ['**/*.tsx', '**/hooks/*.ts?(x)'],\n name: 'canonical/sort-react-dependencies',\n rules: {\n 'canonical/sort-react-dependencies': 'error',\n },\n },\n {\n files: [\n 'app/root.tsx',\n 'app/entry.server.tsx',\n 'app/**/tests/*',\n 'test/**/*.ts?(x)',\n '**/*.stories.tsx',\n '**/routes/**/*.tsx',\n '**/hooks/*.ts?(x)',\n '.storybook/**/*.ts?(x)',\n '.playwright/**/*.ts?(x)',\n ],\n name: 'canonical/filename-match-exported-disabled',\n rules: {\n 'canonical/filename-match-exported': 'off',\n },\n },\n];\n\nconst perfectionistConfig: Linter.Config[] = [\n perfectionist.configs['recommended-natural'] as Linter.Config,\n {\n name: 'perfectionist',\n rules: {\n 'perfectionist/sort-imports': [\n 'error',\n {\n customGroups: [\n {\n elementNamePattern: '^react$',\n groupName: 'react-type',\n selector: 'type',\n },\n {\n elementNamePattern: '^react$',\n groupName: 'react',\n },\n {\n elementNamePattern: '^react-.+',\n groupName: 'react-other-type',\n selector: 'type',\n },\n {\n elementNamePattern: '^react-.+',\n groupName: 'react-other',\n },\n ],\n groups: [\n 'react-type',\n 'react',\n 'react-other-type',\n 'react-other',\n ['type-external', 'external'],\n ['type-builtin', 'builtin'],\n ['type-internal', 'internal'],\n ['type-parent', 'parent'],\n ['type-sibling', 'sibling'],\n ['type-index', 'index'],\n 'unknown',\n 'style',\n 'side-effect',\n 'side-effect-style',\n ],\n newlinesBetween: 0,\n type: 'natural',\n },\n ],\n 'perfectionist/sort-jsx-props': [\n 'error',\n {\n customGroups: [\n {\n elementNamePattern: ['^key$', '^ref$'],\n groupName: 'reserved',\n },\n ],\n groups: ['reserved'],\n type: 'natural',\n },\n ],\n },\n },\n];\n\nconst unicornConfig: Linter.Config[] = [\n unicorn.configs.recommended as Linter.Config,\n {\n name: 'unicorn',\n rules: {\n 'unicorn/consistent-destructuring': 'error',\n 'unicorn/consistent-template-literal-escape': 'off',\n 'unicorn/filename-case': 'off',\n 'unicorn/new-for-builtins': 'off',\n 'unicorn/no-array-callback-reference': 'off',\n 'unicorn/no-array-for-each': 'off',\n 'unicorn/no-array-reduce': 'off',\n 'unicorn/no-nested-ternary': 'off',\n 'unicorn/no-null': 'off',\n 'unicorn/no-useless-undefined': 'off',\n 'unicorn/prefer-export-from': 'off',\n 'unicorn/prefer-global-this': 'off',\n 'unicorn/prefer-set-has': 'off',\n 'unicorn/prefer-switch': 'off',\n 'unicorn/prefer-ternary': 'off',\n 'unicorn/prevent-abbreviations': [\n 'error',\n {\n ignore: [\n 'acc',\n 'ctx',\n 'e2e',\n 'env',\n 'obj',\n 'prev',\n 'req',\n 'res',\n /args/i,\n /fn/i,\n /param/i,\n /params/i,\n /props/i,\n /ref/i,\n /src/i,\n /utils/i,\n ],\n },\n ],\n 'unicorn/text-encoding-identifier-case': 'off',\n },\n },\n {\n files: ['./*.ts'],\n name: 'unicorn/root-ts-files',\n rules: {\n 'unicorn/prefer-module': 'off',\n 'unicorn/prevent-abbreviations': 'off',\n },\n },\n];\n\nconst unusedImportsConfig: Linter.Config[] = [\n {\n name: 'unused-imports',\n plugins: {\n 'unused-imports': unusedImports,\n },\n rules: {\n '@typescript-eslint/no-unused-vars': 'off',\n 'no-unused-vars': 'off',\n 'sonarjs/no-unused-vars': 'off',\n 'sonarjs/unused-import': 'off',\n 'unused-imports/no-unused-imports': 'error',\n 'unused-imports/no-unused-vars': [\n 'error',\n {\n args: 'after-used',\n argsIgnorePattern: '^_',\n ignoreRestSiblings: true,\n vars: 'all',\n varsIgnorePattern: '^_',\n },\n ],\n },\n },\n {\n files: ['**/*.d.ts'],\n name: 'unused-imports/ts-definition-files',\n rules: {\n 'unused-imports/no-unused-vars': 'off',\n },\n },\n];\n\nconst checkFileConfig: Linter.Config[] = [\n {\n plugins: {\n 'check-file': checkFile,\n },\n },\n {\n files: ['app/**/*'],\n name: 'check-file',\n rules: {\n 'check-file/filename-naming-convention': [\n 'error',\n {\n // React hook files must be camelCase (to match the hook name)\n '**/hooks/*.{ts,tsx}': 'CAMEL_CASE',\n 'app/state/*.tsx': 'KEBAB_CASE',\n // React component files must be named index.tsx\n 'app/{components,pages}/**/!(assets|hooks|state|tests|utils)/*.tsx':\n 'index+()',\n // Generally, non-component files must be named kebab-case\n 'app/{components,pages}/**/!(hooks)/*.ts': 'KEBAB_CASE',\n // Non-component files inside specific components folders must be kebab-case\n 'app/{components,pages}/**/(assets|state|tests|utils)/*.{ts,tsx}':\n 'KEBAB_CASE',\n 'test/**/*.ts?(x)': 'KEBAB_CASE',\n },\n {\n ignoreMiddleExtensions: true,\n },\n ],\n 'check-file/folder-match-with-fex': [\n 'error',\n {\n // require stories and test files to be inside tests folders\n '*.(stories|test).{ts,tsx}': 'app/**/tests/',\n },\n ],\n 'check-file/folder-naming-convention': [\n 'error',\n {\n // enforce PascalCase component folders, and allow assets, hooks, tests, and utils subfolders\n 'app/components/**/':\n '(assets|hooks|state|tests|utils|[A-Z][a-zA-Z0-9]*)',\n },\n ],\n },\n },\n {\n files: ['test/**/*.*'],\n name: 'check-file/test-files',\n rules: {\n 'check-file/filename-naming-convention': [\n 'error',\n {\n 'test/**/*.ts?(x)': 'KEBAB_CASE',\n },\n {\n ignoreMiddleExtensions: true,\n },\n ],\n },\n },\n];\n\nexport const styleHygiene: Linter.Config[] = [\n ...canonicalConfig,\n ...perfectionistConfig,\n ...unicornConfig,\n ...unusedImportsConfig,\n ...checkFileConfig,\n];\n","import type {Linter} from 'eslint';\nimport noRelativeImportPaths from 'eslint-plugin-no-relative-import-paths';\nimport sonarjs from 'eslint-plugin-sonarjs';\nimport noEnumPlugin from '../plugins/no-enum.js';\nimport noSwitchPlugin from '../plugins/no-switch.js';\n\nconst sonarConfig: Linter.Config[] = [\n sonarjs.configs!.recommended as Linter.Config,\n {\n name: 'sonarjs',\n rules: {\n 'sonarjs/cognitive-complexity': 'error',\n 'sonarjs/fixme-tag': 'off',\n 'sonarjs/no-commented-code': 'off',\n 'sonarjs/no-nested-conditional': 'off',\n 'sonarjs/no-nested-functions': 'off',\n 'sonarjs/no-selector-parameter': 'off',\n 'sonarjs/regex-complexity': 'off',\n 'sonarjs/todo-tag': 'off',\n },\n },\n {\n files: ['**/*.tsx', '**/hooks/*.ts?(x)'],\n name: 'sonarjs/react-files',\n rules: {\n 'sonarjs/cognitive-complexity': 'off',\n 'sonarjs/function-return-type': 'off',\n },\n },\n {\n files: ['**/*.test.ts?(x)', '**/*.stories.ts?(x)'],\n name: 'sonarjs/test-files',\n rules: {\n 'sonarjs/no-duplicate-string': 'off',\n 'sonarjs/no-identical-functions': 'off',\n },\n },\n {\n files: ['app/languages/**/*.ts', 'eslint.config.mjs'],\n name: 'sonarjs/credential-checks',\n rules: {\n 'sonarjs/no-hardcoded-credentials': 'off',\n 'sonarjs/no-hardcoded-passwords': 'off',\n },\n },\n];\n\nconst noEnumConfig: Linter.Config[] = [\n {\n files: ['**/*.ts?(x)'],\n name: 'no-enum',\n plugins: {'no-enum': noEnumPlugin},\n rules: {\n 'no-enum/no-enum': 'error',\n },\n },\n];\n\nconst noSwitchConfig: Linter.Config[] = [\n {\n files: ['**/*.ts?(x)', '**/*.js?(x)'],\n name: 'no-switch',\n plugins: {'no-switch': noSwitchPlugin},\n rules: {'no-switch/no-switch': 'error'},\n },\n];\n\nconst noRelativeImportPathsConfig: Linter.Config[] = [\n {\n name: 'no-relative-import-paths',\n plugins: {\n 'no-relative-import-paths': noRelativeImportPaths,\n },\n rules: {\n 'no-relative-import-paths/no-relative-import-paths': [\n 'error',\n {\n allowedDepth: 2,\n allowSameFolder: true,\n prefix: '~',\n rootDir: 'app',\n },\n ],\n },\n },\n];\n\nexport const guardrails: Linter.Config[] = [\n ...sonarConfig,\n ...noEnumConfig,\n ...noSwitchConfig,\n ...noRelativeImportPathsConfig,\n];\n","import type {ESLint, Rule} from 'eslint';\n\nconst noEnumRule: Rule.RuleModule = {\n create: (context) => ({\n TSEnumDeclaration: (node: Rule.Node) => {\n context.report({messageId: 'noEnum', node});\n },\n }),\n meta: {\n docs: {description: 'Disallow TypeScript enums'},\n messages: {\n noEnum:\n 'Do not use TypeScript enums. Use an object with `as const` instead.',\n },\n schema: [],\n type: 'problem',\n },\n};\n\nconst plugin: ESLint.Plugin = {\n meta: {\n name: 'no-enum',\n version: '0.1.0',\n },\n rules: {\n 'no-enum': noEnumRule,\n },\n};\n\nexport default plugin;\n","import type {ESLint, Rule} from 'eslint';\n\nconst noSwitchRule: Rule.RuleModule = {\n create: (context) => ({\n SwitchStatement: (node: Rule.Node) => {\n context.report({messageId: 'noSwitch', node});\n },\n }),\n meta: {\n docs: {description: 'Disallow switch statements'},\n messages: {\n noSwitch:\n 'Do not use switch statements. Use an object map or if/else instead.',\n },\n schema: [],\n type: 'problem',\n },\n};\n\nconst plugin: ESLint.Plugin = {\n meta: {\n name: 'no-switch',\n version: '0.1.0',\n },\n rules: {\n 'no-switch': noSwitchRule,\n },\n};\n\nexport default plugin;\n","import vitest from '@vitest/eslint-plugin';\nimport jestDom from 'eslint-plugin-jest-dom';\nimport testingLibrary from 'eslint-plugin-testing-library';\nimport type {Linter} from 'eslint';\n\n/**\n * Testing flat-config block.\n *\n * Ports `testHarnessConfig` + `testingLibraryConfig` from GAIA's\n * `eslint.config.mjs`. Wires up Vitest, jest-dom, and Testing Library\n * recommended rules across test/story/test-harness files.\n */\nexport const testing: Linter.Config[] = [\n {\n files: ['*.test.ts?(x)', '*.stories.ts?(x)', 'test/**/*.ts?(x)'],\n name: 'vitest',\n plugins: {\n 'jest-dom': jestDom,\n vitest,\n },\n rules: {\n ...jestDom.configs['flat/recommended'].rules,\n ...vitest.configs.recommended.rules,\n 'import-x/no-useless-path-segments': [\n 'error',\n {noUselessIndex: true},\n ],\n },\n },\n {\n ...testingLibrary.configs['flat/react'],\n files: ['**/*.test.ts?(x)'],\n name: 'testing-library',\n },\n];\n","import storybookPlugin from 'eslint-plugin-storybook';\nimport type {Linter} from 'eslint';\n\n/**\n * Storybook flat-config block.\n *\n * Ports `storybookConfig` from GAIA's `eslint.config.mjs` — applies the\n * official `flat/recommended` config from `eslint-plugin-storybook`.\n */\nexport const storybook: Linter.Config[] = [\n ...(storybookPlugin.configs['flat/recommended'] as Linter.Config[]),\n];\n","import playwrightPlugin from 'eslint-plugin-playwright';\nimport type {Linter} from 'eslint';\n\n/**\n * Playwright flat-config block.\n *\n * Ports `playwrightConfig` from GAIA's `eslint.config.mjs` — scopes\n * `eslint-plugin-playwright`'s `flat/recommended` config to `.playwright/`\n * test files (GAIA's e2e directory convention).\n */\nexport const playwright: Linter.Config[] = [\n {\n name: 'playwright',\n ...(playwrightPlugin.configs['flat/recommended'] as Linter.Config),\n files: ['.playwright/**/*.ts?(x)'],\n },\n];\n","import {rules as prettierConfigRules} from 'eslint-config-prettier';\nimport prettierPlugin from 'eslint-plugin-prettier';\nimport type {Linter} from 'eslint';\n\n/**\n * Prettier flat-config block.\n *\n * Ports `prettierConfig` from GAIA's `eslint.config.mjs`. Layers\n * `eslint-config-prettier`'s rule disablers, then re-enables a few\n * `@stylistic/*` rules GAIA wants to keep (padding lines, single quotes),\n * and finally turns on the `prettier/prettier` rule itself.\n */\nexport const prettier: Linter.Config[] = [\n {\n name: 'prettier/plugin/config',\n plugins: {prettier: prettierPlugin},\n },\n {\n name: 'prettier/config',\n rules: {\n ...prettierConfigRules,\n '@stylistic/padding-line-between-statements': [\n 'error',\n {\n blankLine: 'always',\n next: ['block-like', 'export', 'return', 'throw'],\n prev: '*',\n },\n ],\n '@stylistic/quotes': [\n 'error',\n 'single',\n {\n allowTemplateLiterals: 'avoidEscape',\n avoidEscape: true,\n },\n ],\n '@stylistic/spaced-comment': 'off',\n 'prettier/prettier': ['error', {endOfLine: 'auto'}],\n },\n },\n];\n","import betterTailwindPlugin from 'eslint-plugin-better-tailwindcss';\nimport type {Linter} from 'eslint';\n\nexport type GaiaLintBetterTailwindOptions = {\n /** Path to the Tailwind entry CSS file (e.g. './app/styles/tailwind.css'). */\n entryPoint: string;\n /** Class names to ignore in `better-tailwindcss/no-unknown-classes`. */\n ignore?: string[];\n};\n\n/**\n * Better-Tailwind flat-config factory.\n *\n * Ports `betterTailwindConfig` from GAIA's `eslint.config.mjs`. The\n * `entryPoint` (consumer's Tailwind CSS entry) and `ignore` list are\n * project-specific, so this is shipped as a factory rather than a static\n * array.\n */\nexport const betterTailwind = (\n opts: GaiaLintBetterTailwindOptions,\n): Linter.Config[] => [\n {\n name: 'better-tailwindcss',\n plugins: {\n 'better-tailwindcss': betterTailwindPlugin,\n },\n rules: {\n 'better-tailwindcss/enforce-canonical-classes': 'error',\n 'better-tailwindcss/enforce-consistent-important-position': 'error',\n 'better-tailwindcss/enforce-consistent-variable-syntax': 'error',\n 'better-tailwindcss/enforce-shorthand-classes': 'error',\n 'better-tailwindcss/no-conflicting-classes': 'error',\n 'better-tailwindcss/no-deprecated-classes': 'error',\n 'better-tailwindcss/no-unknown-classes': [\n 'error',\n {ignore: opts.ignore ?? []},\n ],\n },\n settings: {\n 'better-tailwindcss': {\n detectComponentClasses: true,\n entryPoint: opts.entryPoint,\n },\n },\n },\n];\n","import {includeIgnoreFile} from '@eslint/compat';\nimport path from 'node:path';\nimport type {Linter} from 'eslint';\n\nexport type GaiaLintIgnoresOptions = {\n /** Path to a `.gitignore` file to merge in. Resolved from `process.cwd()` if relative. */\n gitignore?: string;\n /** Extra ignore globs to merge with GAIA defaults. */\n extra?: string[];\n};\n\n/**\n * GAIA's default ignore globs — matches the static `ignored-files` block in\n * GAIA's `eslint.config.mjs`. Consumer's `extra` ignores get concatenated\n * onto this list.\n */\nconst defaultIgnores = [\n '.storybook',\n '.playwright',\n '/.react-router/**',\n '.claude/**/*.js',\n '.claude/**/*.cjs',\n 'scripts',\n 'public/**',\n '**/*.css',\n '**/*.svg',\n '**/*.md',\n];\n\n/**\n * Ignores flat-config factory.\n *\n * Ports the `includeIgnoreFile(gitignorePath)` + static `ignored-files`\n * block from GAIA's `eslint.config.mjs`. The `gitignore` path must be\n * resolved at the consumer's cwd (config-load time), not at gaia-lint's\n * install location, so this is shipped as a factory.\n */\nexport const ignores = (opts?: GaiaLintIgnoresOptions): Linter.Config[] => {\n const out: Linter.Config[] = [];\n\n if (opts?.gitignore) {\n const resolved = path.isAbsolute(opts.gitignore)\n ? opts.gitignore\n : path.resolve(process.cwd(), opts.gitignore);\n out.push(includeIgnoreFile(resolved) as Linter.Config);\n }\n\n out.push({\n ignores: [...defaultIgnores, ...(opts?.extra ?? [])],\n name: 'ignored-files',\n });\n\n return out;\n};\n","export {base} from './configs/base.js';\nexport {react} from './configs/react.js';\nexport {styleHygiene} from './configs/style-hygiene.js';\nexport {guardrails} from './configs/guardrails.js';\nexport {testing} from './configs/testing.js';\nexport {storybook} from './configs/storybook.js';\nexport {playwright} from './configs/playwright.js';\nexport {prettier} from './configs/prettier.js';\nexport {\n betterTailwind,\n type GaiaLintBetterTailwindOptions,\n} from './configs/better-tailwind.js';\nexport {\n ignores,\n type GaiaLintIgnoresOptions,\n} from './configs/ignores.js';\n\nimport {base} from './configs/base.js';\nimport {react} from './configs/react.js';\nimport {styleHygiene} from './configs/style-hygiene.js';\nimport {guardrails} from './configs/guardrails.js';\nimport {testing} from './configs/testing.js';\nimport {storybook} from './configs/storybook.js';\nimport {playwright} from './configs/playwright.js';\nimport {prettier} from './configs/prettier.js';\nimport {betterTailwind} from './configs/better-tailwind.js';\nimport {ignores} from './configs/ignores.js';\n\nconst gaiaLint: {\n base: typeof base;\n react: typeof react;\n styleHygiene: typeof styleHygiene;\n guardrails: typeof guardrails;\n testing: typeof testing;\n storybook: typeof storybook;\n playwright: typeof playwright;\n prettier: typeof prettier;\n betterTailwind: typeof betterTailwind;\n ignores: typeof ignores;\n} = {\n base,\n react,\n styleHygiene,\n guardrails,\n testing,\n storybook,\n playwright,\n prettier,\n betterTailwind,\n ignores,\n};\n\nexport default gaiaLint;\n"],"mappings":";AAAA,OAAO,oBAAoB;AAC3B,OAAO,QAAQ;AACf,SAAQ,SAAS,SAAS,aAAY;AACtC,OAAO,0BAA0B;AACjC,OAAO,sBAAsB;AAG7B,IAAM,WAA4B;AAAA;AAAA,EAEhC;AAAA,IACE,MAAM;AAAA,IACN,GAAG,GAAG,QAAQ;AAAA,EAChB;AAAA;AAAA,EAEA,QAAQ;AAAA;AAAA,EAER,QAAQ;AAAA;AAAA,EAER,GAAG,QAAQ,KAAK;AAAA;AAAA,EAEhB,MAAM,KAAK;AACb;AAEA,IAAM,iBAAkC;AAAA,EACtC;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,MACL,qBAAqB;AAAA,MACrB,OAAO,CAAC,SAAS,KAAK;AAAA,MACtB,cAAc;AAAA,MACd,qBAAqB;AAAA;AAAA,MACrB,YAAY;AAAA,MACZ,kBAAkB;AAAA;AAAA,IACpB;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO,CAAC,oBAAoB,qBAAqB;AAAA,IACjD,MAAM;AAAA,IACN,OAAO;AAAA,MACL,gBAAgB;AAAA,MAChB,cAAc;AAAA,MACd,oBAAoB;AAAA,MACpB,eAAe;AAAA,MACf,wBAAwB;AAAA,IAC1B;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO,CAAC,yBAAyB;AAAA,IACjC,MAAM;AAAA,IACN,OAAO;AAAA,MACL,oBAAoB;AAAA,MACpB,wBAAwB;AAAA,IAC1B;AAAA,EACF;AACF;AAEA,IAAM,mBAAoC;AAAA;AAAA,EAExC,QAAQ;AAAA;AAAA,EAER,GAAG,QAAQ,KAAK;AAAA;AAAA,EAEhB,MAAM,WAAW;AAAA,EACjB,MAAM,WAAW;AAAA;AAAA,EAEjB,GAAG,QAAQ,MAAM;AAAA,EACjB;AAAA,IACE,OAAO,CAAC,QAAQ;AAAA,IAChB,MAAM;AAAA,IACN,OAAO;AAAA,MACL,kBAAkB;AAAA,MAClB,WAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO,CAAC,aAAa;AAAA,IACrB,MAAM;AAAA,IACN,OAAO;AAAA,MACL,WAAW,CAAC,SAAS,EAAC,kBAAkB,KAAI,CAAC;AAAA,IAC/C;AAAA,EACF;AACF;AAEA,IAAM,iBAAkC;AAAA,EACtC;AAAA,IACE,OAAO,CAAC,aAAa;AAAA,IACrB,MAAM;AAAA,IACN,OAAO;AAAA,MACL,iCAAiC,CAAC,SAAS,EAAC,SAAS,QAAO,CAAC;AAAA,MAC7D,qCAAqC;AAAA,MACrC,kDAAkD,CAAC,SAAS,MAAM;AAAA,MAClE,8CAA8C;AAAA,MAC9C,qDAAqD;AAAA,MACrD,6CAA6C;AAAA,MAC7C,mDAAmD;AAAA,QACjD;AAAA,QACA,EAAC,sBAAsB,KAAI;AAAA,MAC7B;AAAA,MACA,2CAA2C;AAAA,QACzC;AAAA,QACA,EAAC,YAAY,MAAM,YAAY,KAAI;AAAA,MACrC;AAAA,MACA,0CAA0C;AAAA,QACxC;AAAA,QACA,EAAC,kBAAkB,MAAK;AAAA,MAC1B;AAAA,MACA,4CAA4C;AAAA,MAC5C,uCAAuC;AAAA,MACvC,6DAA6D;AAAA,MAC7D,+CAA+C;AAAA,MAC/C,qDAAqD;AAAA,MACrD,2CAA2C;AAAA,MAC3C,uCAAuC;AAAA,MACvC,uCAAuC;AAAA,MACvC,gDAAgD;AAAA,MAChD,mDAAmD;AAAA,MACnD,oDAAoD;AAAA,QAClD;AAAA,QACA,EAAC,cAAc,MAAM,aAAa,KAAI;AAAA,MACxC;AAAA,MACA,mCAAmC;AAAA,MACnC,qCAAqC;AAAA,IACvC;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO,CAAC,kBAAkB,mBAAmB,0BAA0B;AAAA,IACvE,MAAM;AAAA,IACN,OAAO;AAAA,MACL,uCAAuC;AAAA,IACzC;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO,CAAC,gBAAgB,mBAAmB,cAAc;AAAA,IACzD,MAAM;AAAA,IACN,OAAO;AAAA,MACL,qDAAqD;AAAA,IACvD;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO,CAAC,oBAAoB,qBAAqB;AAAA,IACjD,MAAM;AAAA,IACN,OAAO;AAAA,MACL,sCAAsC;AAAA,MACtC,2CAA2C;AAAA,MAC3C,8CAA8C;AAAA,IAChD;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO,CAAC,kBAAkB;AAAA,IAC1B,MAAM;AAAA,IACN,OAAO;AAAA,MACL,sCAAsC;AAAA,MACtC,eAAe;AAAA,IACjB;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO,CAAC,WAAW;AAAA,IACnB,MAAM;AAAA,IACN,OAAO;AAAA,MACL,kDAAkD;AAAA,MAClD,6CAA6C;AAAA,MAC7C,qCAAqC;AAAA,IACvC;AAAA,EACF;AACF;AAEA,IAAM,gBAAiC;AAAA,EACrC;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,MACL,4CAA4C,CAAC,SAAS,kBAAkB;AAAA,MACxE,uBAAuB;AAAA,MACvB,wCAAwC;AAAA,QACtC;AAAA,QACA;AAAA,UACE,YAAY;AAAA,UACZ,cAAc;AAAA,UACd,aAAa;AAAA,QACf;AAAA,MACF;AAAA,MACA,yBAAyB;AAAA,MACzB,8BAA8B;AAAA,MAC9B,qCAAqC;AAAA,MACrC,kBAAkB;AAAA,MAClB,kCAAkC;AAAA,IACpC;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO,CAAC,QAAQ;AAAA,IAChB,MAAM;AAAA,IACN,OAAO;AAAA,MACL,uCAAuC;AAAA,MACvC,0BAA0B;AAAA,MAC1B,kCAAkC;AAAA,IACpC;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO,CAAC,oBAAoB,qBAAqB;AAAA,IACjD,MAAM;AAAA,IACN,OAAO;AAAA,MACL,uBAAuB;AAAA,MACvB,uCAAuC;AAAA,IACzC;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO,CAAC,mCAAmC;AAAA,IAC3C,MAAM;AAAA,IACN,OAAO;AAAA,MACL,0BAA0B;AAAA,IAC5B;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO,CAAC,uBAAuB;AAAA,IAC/B,MAAM;AAAA,IACN,OAAO;AAAA,MACL,8BAA8B;AAAA,IAChC;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO,CAAC,kBAAkB;AAAA,IAC1B,MAAM;AAAA,IACN,OAAO;AAAA,MACL,uCAAuC;AAAA,MACvC,kCAAkC;AAAA,IACpC;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO,CAAC,0BAA0B,yBAAyB;AAAA,IAC3D,MAAM;AAAA,IACN,OAAO;AAAA,MACL,uCAAuC;AAAA,MACvC,0BAA0B;AAAA,IAC5B;AAAA,EACF;AACF;AAEA,IAAM,uBAAwC;AAAA,EAC5C;AAAA,IACE,MAAM;AAAA,IACN,SAAS;AAAA,MACP,mBAAmB;AAAA,IACrB;AAAA,IACA,OAAO;AAAA,MACL,uCAAuC;AAAA,MACvC,qCAAqC;AAAA,IACvC;AAAA,EACF;AACF;AAEA,IAAM,6BAA8C;AAAA,EAClD;AAAA,IACE,MAAM;AAAA,IACN,SAAS;AAAA,MACP,0BAA0B;AAAA,IAC5B;AAAA,IACA,OAAO;AAAA,MACL,iDAAiD;AAAA,IACnD;AAAA,EACF;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOE,SAAS,CAAC,WAAW;AAAA,IACrB,MAAM;AAAA,IACN,OAAO;AAAA,MACL,wBAAwB;AAAA,QACtB;AAAA,QACA;AAAA,UACE,SACE;AAAA,UACF,UAAU;AAAA,QACZ;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO,CAAC,WAAW;AAAA,IACnB,MAAM;AAAA,IACN,OAAO;AAAA,MACL,iDAAiD;AAAA,IACnD;AAAA,EACF;AACF;AAEA,IAAM,yBAA0C;AAAA,EAC9C;AAAA,IACE,MAAM;AAAA,IACN,SAAS;AAAA,MACP,mCACE;AAAA,IACJ;AAAA,IACA,OAAO;AAAA,MACL,GAAI,iBAAiB,QAAQ,WAAW;AAAA,IAC1C;AAAA,EACF;AACF;AAEO,IAAM,OAAwB;AAAA,EACnC,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL;;;ACtTA,SAAQ,WAAAA,UAAS,WAAAC,gBAAc;AAcxB,IAAM,QAAyB;AAAA;AAAA,EAEpCA,SAAQ;AAAA;AAAA,EAERA,SAAQ;AAAA;AAAA,EAERA,SAAQ;AAAA;AAAA,EAER,GAAGD,SAAQ,MAAM;AAAA,EACjB;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,MACL,yCAAyC;AAAA,MACzC,yBAAyB;AAAA,MACzB,6BAA6B;AAAA,QAC3B;AAAA,QACA;AAAA,UACE,eAAe,CAAC,QAAQ,4BAA4B;AAAA,UACpD,MAAM;AAAA,QACR;AAAA,MACF;AAAA,MACA,uCAAuC;AAAA,MACvC,2BAA2B,CAAC,SAAS,QAAQ;AAAA,MAC7C,kCAAkC;AAAA,MAClC,gCAAgC;AAAA,MAChC,uBAAuB;AAAA;AAAA;AAAA,MAGvB,2BAA2B,CAAC,OAAO,EAAC,qBAAqB,KAAI,CAAC;AAAA,MAC9D,qBAAqB,CAAC,SAAS,EAAC,SAAS,KAAI,CAAC;AAAA,MAC9C,iCAAiC,CAAC,SAAS,EAAC,kBAAkB,KAAI,CAAC;AAAA,MACnE,0BAA0B;AAAA,MAC1B,mBAAmB;AAAA,MACnB,oBAAoB;AAAA,MACpB,4BAA4B;AAAA,MAC5B,+BAA+B;AAAA,IACjC;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO,CAAC,oBAAoB;AAAA,IAC5B,MAAM;AAAA,IACN,OAAO;AAAA,MACL,oBAAoB;AAAA,MACpB,sBAAsB;AAAA,IACxB;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO,CAAC,oBAAoB,qBAAqB;AAAA,IACjD,MAAM;AAAA,IACN,OAAO;AAAA,MACL,gCAAgC;AAAA,IAClC;AAAA,EACF;AACF;;;AClEA,OAAO,eAAe;AACtB,OAAO,eAAe;AACtB,OAAO,mBAAmB;AAC1B,OAAO,aAAa;AACpB,OAAO,mBAAmB;AAE1B,IAAM,kBAAmC;AAAA,EACvC,UAAU,QAAQ,kBAAkB;AAAA,EACpC;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,MACL,4CAA4C;AAAA,MAC5C,qCAAqC;AAAA,MACrC,sBAAsB;AAAA,MACtB,sCAAsC;AAAA,IACxC;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO,CAAC,YAAY,mBAAmB;AAAA,IACvC,MAAM;AAAA,IACN,OAAO;AAAA,MACL,qCAAqC;AAAA,IACvC;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,OAAO;AAAA,MACL,qCAAqC;AAAA,IACvC;AAAA,EACF;AACF;AAEA,IAAM,sBAAuC;AAAA,EAC3C,cAAc,QAAQ,qBAAqB;AAAA,EAC3C;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,MACL,8BAA8B;AAAA,QAC5B;AAAA,QACA;AAAA,UACE,cAAc;AAAA,YACZ;AAAA,cACE,oBAAoB;AAAA,cACpB,WAAW;AAAA,cACX,UAAU;AAAA,YACZ;AAAA,YACA;AAAA,cACE,oBAAoB;AAAA,cACpB,WAAW;AAAA,YACb;AAAA,YACA;AAAA,cACE,oBAAoB;AAAA,cACpB,WAAW;AAAA,cACX,UAAU;AAAA,YACZ;AAAA,YACA;AAAA,cACE,oBAAoB;AAAA,cACpB,WAAW;AAAA,YACb;AAAA,UACF;AAAA,UACA,QAAQ;AAAA,YACN;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,CAAC,iBAAiB,UAAU;AAAA,YAC5B,CAAC,gBAAgB,SAAS;AAAA,YAC1B,CAAC,iBAAiB,UAAU;AAAA,YAC5B,CAAC,eAAe,QAAQ;AAAA,YACxB,CAAC,gBAAgB,SAAS;AAAA,YAC1B,CAAC,cAAc,OAAO;AAAA,YACtB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UACA,iBAAiB;AAAA,UACjB,MAAM;AAAA,QACR;AAAA,MACF;AAAA,MACA,gCAAgC;AAAA,QAC9B;AAAA,QACA;AAAA,UACE,cAAc;AAAA,YACZ;AAAA,cACE,oBAAoB,CAAC,SAAS,OAAO;AAAA,cACrC,WAAW;AAAA,YACb;AAAA,UACF;AAAA,UACA,QAAQ,CAAC,UAAU;AAAA,UACnB,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,gBAAiC;AAAA,EACrC,QAAQ,QAAQ;AAAA,EAChB;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,MACL,oCAAoC;AAAA,MACpC,8CAA8C;AAAA,MAC9C,yBAAyB;AAAA,MACzB,4BAA4B;AAAA,MAC5B,uCAAuC;AAAA,MACvC,6BAA6B;AAAA,MAC7B,2BAA2B;AAAA,MAC3B,6BAA6B;AAAA,MAC7B,mBAAmB;AAAA,MACnB,gCAAgC;AAAA,MAChC,8BAA8B;AAAA,MAC9B,8BAA8B;AAAA,MAC9B,0BAA0B;AAAA,MAC1B,yBAAyB;AAAA,MACzB,0BAA0B;AAAA,MAC1B,iCAAiC;AAAA,QAC/B;AAAA,QACA;AAAA,UACE,QAAQ;AAAA,YACN;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA,yCAAyC;AAAA,IAC3C;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO,CAAC,QAAQ;AAAA,IAChB,MAAM;AAAA,IACN,OAAO;AAAA,MACL,yBAAyB;AAAA,MACzB,iCAAiC;AAAA,IACnC;AAAA,EACF;AACF;AAEA,IAAM,sBAAuC;AAAA,EAC3C;AAAA,IACE,MAAM;AAAA,IACN,SAAS;AAAA,MACP,kBAAkB;AAAA,IACpB;AAAA,IACA,OAAO;AAAA,MACL,qCAAqC;AAAA,MACrC,kBAAkB;AAAA,MAClB,0BAA0B;AAAA,MAC1B,yBAAyB;AAAA,MACzB,oCAAoC;AAAA,MACpC,iCAAiC;AAAA,QAC/B;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,mBAAmB;AAAA,UACnB,oBAAoB;AAAA,UACpB,MAAM;AAAA,UACN,mBAAmB;AAAA,QACrB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO,CAAC,WAAW;AAAA,IACnB,MAAM;AAAA,IACN,OAAO;AAAA,MACL,iCAAiC;AAAA,IACnC;AAAA,EACF;AACF;AAEA,IAAM,kBAAmC;AAAA,EACvC;AAAA,IACE,SAAS;AAAA,MACP,cAAc;AAAA,IAChB;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO,CAAC,UAAU;AAAA,IAClB,MAAM;AAAA,IACN,OAAO;AAAA,MACL,yCAAyC;AAAA,QACvC;AAAA,QACA;AAAA;AAAA,UAEE,uBAAuB;AAAA,UACvB,mBAAmB;AAAA;AAAA,UAEnB,qEACE;AAAA;AAAA,UAEF,2CAA2C;AAAA;AAAA,UAE3C,mEACE;AAAA,UACF,oBAAoB;AAAA,QACtB;AAAA,QACA;AAAA,UACE,wBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,oCAAoC;AAAA,QAClC;AAAA,QACA;AAAA;AAAA,UAEE,6BAA6B;AAAA,QAC/B;AAAA,MACF;AAAA,MACA,uCAAuC;AAAA,QACrC;AAAA,QACA;AAAA;AAAA,UAEE,sBACE;AAAA,QACJ;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO,CAAC,aAAa;AAAA,IACrB,MAAM;AAAA,IACN,OAAO;AAAA,MACL,yCAAyC;AAAA,QACvC;AAAA,QACA;AAAA,UACE,oBAAoB;AAAA,QACtB;AAAA,QACA;AAAA,UACE,wBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,eAAgC;AAAA,EAC3C,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL;;;AC3QA,OAAO,2BAA2B;AAClC,OAAO,aAAa;;;ACApB,IAAM,aAA8B;AAAA,EAClC,QAAQ,CAAC,aAAa;AAAA,IACpB,mBAAmB,CAAC,SAAoB;AACtC,cAAQ,OAAO,EAAC,WAAW,UAAU,KAAI,CAAC;AAAA,IAC5C;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,MAAM,EAAC,aAAa,4BAA2B;AAAA,IAC/C,UAAU;AAAA,MACR,QACE;AAAA,IACJ;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,EACR;AACF;AAEA,IAAM,SAAwB;AAAA,EAC5B,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,OAAO;AAAA,IACL,WAAW;AAAA,EACb;AACF;AAEA,IAAO,kBAAQ;;;AC3Bf,IAAM,eAAgC;AAAA,EACpC,QAAQ,CAAC,aAAa;AAAA,IACpB,iBAAiB,CAAC,SAAoB;AACpC,cAAQ,OAAO,EAAC,WAAW,YAAY,KAAI,CAAC;AAAA,IAC9C;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,MAAM,EAAC,aAAa,6BAA4B;AAAA,IAChD,UAAU;AAAA,MACR,UACE;AAAA,IACJ;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,EACR;AACF;AAEA,IAAME,UAAwB;AAAA,EAC5B,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,OAAO;AAAA,IACL,aAAa;AAAA,EACf;AACF;AAEA,IAAO,oBAAQA;;;AFvBf,IAAM,cAA+B;AAAA,EACnC,QAAQ,QAAS;AAAA,EACjB;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,MACL,gCAAgC;AAAA,MAChC,qBAAqB;AAAA,MACrB,6BAA6B;AAAA,MAC7B,iCAAiC;AAAA,MACjC,+BAA+B;AAAA,MAC/B,iCAAiC;AAAA,MACjC,4BAA4B;AAAA,MAC5B,oBAAoB;AAAA,IACtB;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO,CAAC,YAAY,mBAAmB;AAAA,IACvC,MAAM;AAAA,IACN,OAAO;AAAA,MACL,gCAAgC;AAAA,MAChC,gCAAgC;AAAA,IAClC;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO,CAAC,oBAAoB,qBAAqB;AAAA,IACjD,MAAM;AAAA,IACN,OAAO;AAAA,MACL,+BAA+B;AAAA,MAC/B,kCAAkC;AAAA,IACpC;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO,CAAC,yBAAyB,mBAAmB;AAAA,IACpD,MAAM;AAAA,IACN,OAAO;AAAA,MACL,oCAAoC;AAAA,MACpC,kCAAkC;AAAA,IACpC;AAAA,EACF;AACF;AAEA,IAAM,eAAgC;AAAA,EACpC;AAAA,IACE,OAAO,CAAC,aAAa;AAAA,IACrB,MAAM;AAAA,IACN,SAAS,EAAC,WAAW,gBAAY;AAAA,IACjC,OAAO;AAAA,MACL,mBAAmB;AAAA,IACrB;AAAA,EACF;AACF;AAEA,IAAM,iBAAkC;AAAA,EACtC;AAAA,IACE,OAAO,CAAC,eAAe,aAAa;AAAA,IACpC,MAAM;AAAA,IACN,SAAS,EAAC,aAAa,kBAAc;AAAA,IACrC,OAAO,EAAC,uBAAuB,QAAO;AAAA,EACxC;AACF;AAEA,IAAM,8BAA+C;AAAA,EACnD;AAAA,IACE,MAAM;AAAA,IACN,SAAS;AAAA,MACP,4BAA4B;AAAA,IAC9B;AAAA,IACA,OAAO;AAAA,MACL,qDAAqD;AAAA,QACnD;AAAA,QACA;AAAA,UACE,cAAc;AAAA,UACd,iBAAiB;AAAA,UACjB,QAAQ;AAAA,UACR,SAAS;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,aAA8B;AAAA,EACzC,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL;;;AG5FA,OAAO,YAAY;AACnB,OAAO,aAAa;AACpB,OAAO,oBAAoB;AAUpB,IAAM,UAA2B;AAAA,EACtC;AAAA,IACE,OAAO,CAAC,iBAAiB,oBAAoB,kBAAkB;AAAA,IAC/D,MAAM;AAAA,IACN,SAAS;AAAA,MACP,YAAY;AAAA,MACZ;AAAA,IACF;AAAA,IACA,OAAO;AAAA,MACL,GAAG,QAAQ,QAAQ,kBAAkB,EAAE;AAAA,MACvC,GAAG,OAAO,QAAQ,YAAY;AAAA,MAC9B,qCAAqC;AAAA,QACnC;AAAA,QACA,EAAC,gBAAgB,KAAI;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,GAAG,eAAe,QAAQ,YAAY;AAAA,IACtC,OAAO,CAAC,kBAAkB;AAAA,IAC1B,MAAM;AAAA,EACR;AACF;;;AClCA,OAAO,qBAAqB;AASrB,IAAM,YAA6B;AAAA,EACxC,GAAI,gBAAgB,QAAQ,kBAAkB;AAChD;;;ACXA,OAAO,sBAAsB;AAUtB,IAAM,aAA8B;AAAA,EACzC;AAAA,IACE,MAAM;AAAA,IACN,GAAI,iBAAiB,QAAQ,kBAAkB;AAAA,IAC/C,OAAO,CAAC,yBAAyB;AAAA,EACnC;AACF;;;AChBA,SAAQ,SAAS,2BAA0B;AAC3C,OAAO,oBAAoB;AAWpB,IAAM,WAA4B;AAAA,EACvC;AAAA,IACE,MAAM;AAAA,IACN,SAAS,EAAC,UAAU,eAAc;AAAA,EACpC;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,MACL,GAAG;AAAA,MACH,8CAA8C;AAAA,QAC5C;AAAA,QACA;AAAA,UACE,WAAW;AAAA,UACX,MAAM,CAAC,cAAc,UAAU,UAAU,OAAO;AAAA,UAChD,MAAM;AAAA,QACR;AAAA,MACF;AAAA,MACA,qBAAqB;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,UACE,uBAAuB;AAAA,UACvB,aAAa;AAAA,QACf;AAAA,MACF;AAAA,MACA,6BAA6B;AAAA,MAC7B,qBAAqB,CAAC,SAAS,EAAC,WAAW,OAAM,CAAC;AAAA,IACpD;AAAA,EACF;AACF;;;ACzCA,OAAO,0BAA0B;AAkB1B,IAAM,iBAAiB,CAC5B,SACoB;AAAA,EACpB;AAAA,IACE,MAAM;AAAA,IACN,SAAS;AAAA,MACP,sBAAsB;AAAA,IACxB;AAAA,IACA,OAAO;AAAA,MACL,gDAAgD;AAAA,MAChD,4DAA4D;AAAA,MAC5D,yDAAyD;AAAA,MACzD,gDAAgD;AAAA,MAChD,6CAA6C;AAAA,MAC7C,4CAA4C;AAAA,MAC5C,yCAAyC;AAAA,QACvC;AAAA,QACA,EAAC,QAAQ,KAAK,UAAU,CAAC,EAAC;AAAA,MAC5B;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR,sBAAsB;AAAA,QACpB,wBAAwB;AAAA,QACxB,YAAY,KAAK;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AACF;;;AC7CA,SAAQ,yBAAwB;AAChC,OAAO,UAAU;AAejB,IAAM,iBAAiB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAUO,IAAM,UAAU,CAAC,SAAmD;AACzE,QAAM,MAAuB,CAAC;AAE9B,MAAI,MAAM,WAAW;AACnB,UAAM,WAAW,KAAK,WAAW,KAAK,SAAS,IAC3C,KAAK,YACL,KAAK,QAAQ,QAAQ,IAAI,GAAG,KAAK,SAAS;AAC9C,QAAI,KAAK,kBAAkB,QAAQ,CAAkB;AAAA,EACvD;AAEA,MAAI,KAAK;AAAA,IACP,SAAS,CAAC,GAAG,gBAAgB,GAAI,MAAM,SAAS,CAAC,CAAE;AAAA,IACnD,MAAM;AAAA,EACR,CAAC;AAED,SAAO;AACT;;;ACzBA,IAAM,WAWF;AAAA,EACF;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAO,gBAAQ;","names":["configs","plugins","plugin"]}
1
+ {"version":3,"sources":["../src/configs/base.ts","../src/configs/react.ts","../src/configs/style-hygiene.ts","../src/configs/guardrails.ts","../src/plugins/no-enum.ts","../src/plugins/no-switch.ts","../src/configs/testing.ts","../src/configs/storybook.ts","../src/configs/playwright.ts","../src/configs/prettier.ts","../src/configs/better-tailwind.ts","../src/configs/ignores.ts","../src/index.ts"],"sourcesContent":["import eslintComments from '@eslint-community/eslint-plugin-eslint-comments';\nimport js from '@eslint/js';\nimport {configs, plugins, rules} from 'eslint-config-airbnb-extended';\nimport preferArrowFunctions from 'eslint-plugin-prefer-arrow-functions';\nimport lodashUnderscore from 'eslint-plugin-you-dont-need-lodash-underscore';\nimport type {ESLint, Linter} from 'eslint';\n\nconst jsConfig: Linter.Config[] = [\n // ESLint recommended config\n {\n name: 'js/config',\n ...js.configs.recommended,\n },\n // Stylistic plugin\n plugins.stylistic,\n // Import X plugin\n plugins.importX,\n // Airbnb base recommended config\n ...configs.base.recommended,\n // Strict import rules\n rules.base.importsStrict,\n];\n\nconst jsCustomConfig: Linter.Config[] = [\n {\n name: 'js-custom',\n rules: {\n 'consistent-return': 'off',\n curly: ['error', 'all'],\n 'max-params': 'error',\n 'no-param-reassign': 'off', // handled by sonarjs\n 'no-undef': 'off',\n 'no-unused-vars': 'off', // handled by sonarjs\n },\n },\n {\n files: ['**/*.test.ts?(x)', '**/*.stories.ts?(x)'],\n name: 'test-files/all',\n rules: {\n 'guard-for-in': 'off',\n 'max-params': 'off',\n 'no-await-in-loop': 'off',\n 'no-plusplus': 'off',\n 'no-restricted-syntax': 'off',\n },\n },\n {\n files: ['.playwright/**/*.ts?(x)'],\n name: 'playwright/all',\n rules: {\n 'no-await-in-loop': 'off',\n 'no-restricted-syntax': 'off',\n },\n },\n];\n\nconst typescriptConfig: Linter.Config[] = [\n // TypeScript ESLint plugin\n plugins.typescriptEslint,\n // Airbnb base TypeScript config\n ...configs.base.typescript,\n // Strict TypeScript rules\n rules.typescript.typescriptEslintStrict,\n rules.typescript.stylistic,\n // Airbnb React TypeScript config\n ...configs.react.typescript,\n {\n files: ['./*.ts'],\n name: 'root-ts-files',\n rules: {\n 'global-require': 'off',\n 'no-void': 'off',\n },\n },\n {\n files: ['**/*.ts?(x)'],\n name: 'no-void',\n rules: {\n 'no-void': ['error', {allowAsStatement: true}],\n },\n },\n];\n\nconst tsEslintConfig: Linter.Config[] = [\n {\n files: ['**/*.ts?(x)'],\n name: 'typescript/config',\n rules: {\n '@typescript-eslint/array-type': ['error', {default: 'array'}],\n '@typescript-eslint/ban-ts-comment': 'off',\n '@typescript-eslint/consistent-type-definitions': ['error', 'type'],\n '@typescript-eslint/consistent-type-imports': 'error',\n '@typescript-eslint/explicit-module-boundary-types': 'off',\n '@typescript-eslint/method-signature-style': 'error',\n '@typescript-eslint/no-confusing-void-expression': [\n 'error',\n {ignoreArrowShorthand: true},\n ],\n '@typescript-eslint/no-floating-promises': [\n 'error',\n {ignoreIIFE: true, ignoreVoid: true},\n ],\n '@typescript-eslint/no-misused-promises': [\n 'error',\n {checksVoidReturn: false},\n ],\n '@typescript-eslint/no-non-null-assertion': 'off',\n '@typescript-eslint/no-throw-literal': 'off',\n '@typescript-eslint/no-unnecessary-boolean-literal-compare': 'error',\n '@typescript-eslint/no-unnecessary-condition': 'error',\n '@typescript-eslint/no-unnecessary-type-parameters': 'off',\n '@typescript-eslint/no-unsafe-assignment': 'error',\n '@typescript-eslint/no-unsafe-return': 'error',\n '@typescript-eslint/only-throw-error': 'off',\n '@typescript-eslint/prefer-nullish-coalescing': 'error',\n '@typescript-eslint/prefer-promise-reject-errors': 'off',\n '@typescript-eslint/restrict-template-expressions': [\n 'error',\n {allowBoolean: true, allowNumber: true},\n ],\n '@typescript-eslint/return-await': 'off',\n '@typescript-eslint/unbound-method': 'off',\n },\n },\n {\n files: ['app/hooks/**/*', 'app/routes/**/*', 'app/sessions.server/**/*'],\n name: 'typescript/only-throw-error',\n rules: {\n '@typescript-eslint/only-throw-error': 'off',\n },\n },\n {\n files: ['app/utils/**', 'app/services/**', 'app/hooks/**'],\n name: 'typescript/explicit-return-types',\n rules: {\n '@typescript-eslint/explicit-module-boundary-types': 'error',\n },\n },\n {\n files: ['**/*.test.ts?(x)', '**/*.stories.ts?(x)'],\n name: 'typescript/test-files',\n rules: {\n '@typescript-eslint/no-explicit-any': 'off',\n '@typescript-eslint/no-unsafe-assignment': 'off',\n '@typescript-eslint/no-unsafe-member-access': 'off',\n },\n },\n {\n files: ['test/**/*.ts?(x)'],\n name: 'typescript/test-config',\n rules: {\n '@typescript-eslint/no-var-requires': 'off',\n 'no-plusplus': 'off',\n },\n },\n {\n files: ['**/*.d.ts'],\n name: 'typescript/type-definitions',\n rules: {\n '@typescript-eslint/consistent-type-definitions': 'off',\n '@typescript-eslint/method-signature-style': 'error',\n '@typescript-eslint/no-unused-vars': 'off',\n },\n },\n];\n\nconst importXConfig: Linter.Config[] = [\n {\n name: 'import-x-all-files',\n rules: {\n 'import-x/consistent-type-specifier-style': ['error', 'prefer-top-level'],\n 'import-x/extensions': 'off',\n 'import-x/no-anonymous-default-export': [\n 'error',\n {\n allowArray: true,\n allowLiteral: true,\n allowObject: true,\n },\n ],\n 'import-x/no-namespace': 'off',\n 'import-x/no-rename-default': 'off',\n 'import-x/no-useless-path-segments': 'off',\n 'import-x/order': 'off',\n 'import-x/prefer-default-export': 'off',\n },\n },\n {\n files: ['./*.ts'],\n name: 'import-x/root-ts-files',\n rules: {\n 'import-x/no-extraneous-dependencies': 'off',\n 'import-x/no-unresolved': 'error',\n 'import-x/prefer-default-export': 'off',\n },\n },\n {\n files: ['**/*.test.ts?(x)', '**/*.stories.ts?(x)'],\n name: 'import-x/test-files',\n rules: {\n 'import-x/extensions': 'off',\n 'import-x/no-extraneous-dependencies': 'off',\n },\n },\n {\n files: ['app/**/!(*.test|*.stories).ts?(x)'],\n name: 'import-x/app-test-files',\n rules: {\n 'import-x/no-unresolved': 'error',\n },\n },\n {\n files: ['app/**/hooks/*.ts?(x)'],\n name: 'import-x/hooks',\n rules: {\n 'import-x/no-default-export': 'error',\n },\n },\n {\n files: ['test/**/*.ts?(x)'],\n name: 'import-x/test-config-files',\n rules: {\n 'import-x/no-extraneous-dependencies': 'off',\n 'import-x/prefer-default-export': 'off',\n },\n },\n {\n files: ['.storybook/**/*.ts?(x)', '.playwright/**/*.ts?(x)'],\n name: 'import-x/storybook-playwright',\n rules: {\n 'import-x/no-extraneous-dependencies': 'off',\n 'import-x/no-unresolved': 'off',\n },\n },\n];\n\nconst eslintCommentsConfig: Linter.Config[] = [\n {\n name: 'eslint-comments',\n plugins: {\n 'eslint-comments': eslintComments,\n },\n rules: {\n 'eslint-comments/disable-enable-pair': 'off',\n 'eslint-comments/no-unused-disable': 'error',\n },\n },\n];\n\nconst preferArrowFunctionsConfig: Linter.Config[] = [\n {\n name: 'prefer-arrow',\n plugins: {\n 'prefer-arrow-functions': preferArrowFunctions as unknown as ESLint.Plugin,\n },\n rules: {\n 'prefer-arrow-functions/prefer-arrow-functions': 'error',\n },\n },\n {\n // `prefer-arrow-functions` has a hardcoded exemption for named\n // default-exported declarations (`guard.js:hasNameAndIsExportedAsDefaultExport`),\n // so `export default function Foo() {}` slips through. This selector closes\n // that gap. Convert to `const Foo = () => {}; export default Foo;` instead.\n // `.d.ts` is ignored because ambient `export default function …(): T;`\n // declarations have no body to convert.\n ignores: ['**/*.d.ts'],\n name: 'prefer-arrow/no-default-exported-function',\n rules: {\n 'no-restricted-syntax': [\n 'error',\n {\n message:\n 'Use `const Name = () => {}; export default Name;` instead. The prefer-arrow-functions plugin exempts named default-exported declarations upstream.',\n selector: 'ExportDefaultDeclaration > FunctionDeclaration',\n },\n ],\n },\n },\n {\n files: ['**/*.d.ts'],\n name: 'ts-definition-files/prefer-arrow-off',\n rules: {\n 'prefer-arrow-functions/prefer-arrow-functions': 'off',\n },\n },\n];\n\nconst lodashUnderscoreConfig: Linter.Config[] = [\n {\n name: 'you-dont-need-lodash-underscore',\n plugins: {\n 'you-dont-need-lodash-underscore':\n lodashUnderscore as unknown as ESLint.Plugin,\n },\n rules: {\n ...(lodashUnderscore.configs.compatible.rules as Linter.RulesRecord),\n },\n },\n];\n\nexport const base: Linter.Config[] = [\n ...jsConfig,\n ...jsCustomConfig,\n ...typescriptConfig,\n ...tsEslintConfig,\n ...importXConfig,\n ...eslintCommentsConfig,\n ...preferArrowFunctionsConfig,\n ...lodashUnderscoreConfig,\n];\n","import {configs, plugins} from 'eslint-config-airbnb-extended';\nimport type {Linter} from 'eslint';\n\n/**\n * React flat-config block.\n *\n * Ports `reactConfig` + `reactCustomConfig` from GAIA's `eslint.config.mjs`.\n * Pulls React, React Hooks, and JSX A11y plugins plus Airbnb's recommended\n * React config, then layers GAIA's project-wide React rule overrides.\n *\n * The `react-router/routes` override targets `**\\/routes/**\\/*.tsx` — a GAIA\n * convention that's harmless for consumers without that folder structure\n * (the override only fires when files match).\n */\nexport const react: Linter.Config[] = [\n // React plugin\n plugins.react,\n // React hooks plugin\n plugins.reactHooks,\n // React JSX A11y plugin\n plugins.reactA11y,\n // Airbnb React recommended config\n ...configs.react.recommended,\n {\n name: 'react-custom',\n rules: {\n 'jsx-a11y/control-has-associated-label': 'off',\n 'jsx-a11y/no-autofocus': 'off',\n 'react/boolean-prop-naming': [\n 'error',\n {\n propTypeNames: ['bool', 'mutuallyExclusiveTrueProps'],\n rule: '^((can|has|hide|is|show)[A-Z]([A-Za-z0-9]?)+|(checked|disabled|hide|required|show))',\n },\n ],\n 'react/function-component-definition': 'off',\n 'react/jsx-boolean-value': ['error', 'always'],\n 'react/jsx-curly-brace-presence': 'error',\n 'react/jsx-filename-extension': 'off',\n 'react/jsx-fragments': 'error',\n // off by default because it doesn't handle props onXyz function names correctly\n // turn this on from time to time to check for misnamed handlers elsewhere\n 'react/jsx-handler-names': ['off', {checkLocalVariables: true}],\n 'react/jsx-newline': ['error', {prevent: true}],\n 'react/jsx-no-useless-fragment': ['error', {allowExpressions: true}],\n 'react/no-children-prop': 'off',\n 'react/no-danger': 'off',\n 'react/prop-types': 'off',\n 'react/react-in-jsx-scope': 'off',\n 'react/require-default-props': 'off',\n },\n },\n {\n files: ['**/routes/**/*.tsx'],\n name: 'react-router/routes',\n rules: {\n 'no-empty-pattern': 'off',\n 'react/display-name': 'off',\n },\n },\n {\n files: ['**/*.test.ts?(x)', '**/*.stories.ts?(x)'],\n name: 'react/test-files',\n rules: {\n 'react/jsx-props-no-spreading': 'off',\n },\n },\n];\n","import type {Linter} from 'eslint';\nimport canonical from 'eslint-plugin-canonical';\nimport checkFile from 'eslint-plugin-check-file';\nimport perfectionist from 'eslint-plugin-perfectionist';\nimport unicorn from 'eslint-plugin-unicorn';\nimport unusedImports from 'eslint-plugin-unused-imports';\n\nconst canonicalConfig: Linter.Config[] = [\n canonical.configs['flat/recommended'] as Linter.Config,\n {\n name: 'canonical',\n rules: {\n 'canonical/destructuring-property-newline': 'off',\n 'canonical/filename-match-exported': 'error',\n 'canonical/id-match': 'off',\n 'canonical/import-specifier-newline': 'off',\n },\n },\n {\n files: ['**/*.tsx', '**/hooks/*.ts?(x)'],\n name: 'canonical/sort-react-dependencies',\n rules: {\n 'canonical/sort-react-dependencies': 'error',\n },\n },\n {\n files: [\n 'app/root.tsx',\n 'app/entry.server.tsx',\n 'app/**/tests/*',\n 'test/**/*.ts?(x)',\n '**/*.stories.tsx',\n '**/routes/**/*.tsx',\n '**/hooks/*.ts?(x)',\n '.storybook/**/*.ts?(x)',\n '.playwright/**/*.ts?(x)',\n ],\n name: 'canonical/filename-match-exported-disabled',\n rules: {\n 'canonical/filename-match-exported': 'off',\n },\n },\n];\n\nconst perfectionistConfig: Linter.Config[] = [\n perfectionist.configs['recommended-natural'] as Linter.Config,\n {\n name: 'perfectionist',\n rules: {\n 'perfectionist/sort-imports': [\n 'error',\n {\n customGroups: [\n {\n elementNamePattern: '^react$',\n groupName: 'react-type',\n selector: 'type',\n },\n {\n elementNamePattern: '^react$',\n groupName: 'react',\n },\n {\n elementNamePattern: '^react-.+',\n groupName: 'react-other-type',\n selector: 'type',\n },\n {\n elementNamePattern: '^react-.+',\n groupName: 'react-other',\n },\n ],\n groups: [\n 'react-type',\n 'react',\n 'react-other-type',\n 'react-other',\n ['type-external', 'external'],\n ['type-builtin', 'builtin'],\n ['type-internal', 'internal'],\n ['type-parent', 'parent'],\n ['type-sibling', 'sibling'],\n ['type-index', 'index'],\n 'unknown',\n 'style',\n 'side-effect',\n 'side-effect-style',\n ],\n newlinesBetween: 0,\n type: 'natural',\n },\n ],\n 'perfectionist/sort-jsx-props': [\n 'error',\n {\n customGroups: [\n {\n elementNamePattern: ['^key$', '^ref$'],\n groupName: 'reserved',\n },\n ],\n groups: ['reserved'],\n type: 'natural',\n },\n ],\n },\n },\n];\n\nconst unicornConfig: Linter.Config[] = [\n unicorn.configs.recommended as Linter.Config,\n {\n name: 'unicorn',\n rules: {\n 'unicorn/consistent-destructuring': 'error',\n 'unicorn/consistent-template-literal-escape': 'off',\n 'unicorn/filename-case': 'off',\n 'unicorn/new-for-builtins': 'off',\n 'unicorn/no-array-callback-reference': 'off',\n 'unicorn/no-array-for-each': 'off',\n 'unicorn/no-array-reduce': 'off',\n 'unicorn/no-nested-ternary': 'off',\n 'unicorn/no-null': 'off',\n 'unicorn/no-useless-undefined': 'off',\n 'unicorn/prefer-export-from': 'off',\n 'unicorn/prefer-global-this': 'off',\n 'unicorn/prefer-set-has': 'off',\n 'unicorn/prefer-switch': 'off',\n 'unicorn/prefer-ternary': 'off',\n 'unicorn/prevent-abbreviations': [\n 'error',\n {\n ignore: [\n 'acc',\n 'ctx',\n 'e2e',\n 'env',\n 'obj',\n 'prev',\n 'req',\n 'res',\n /args/i,\n /fn/i,\n /param/i,\n /params/i,\n /props/i,\n /ref/i,\n /src/i,\n /utils/i,\n ],\n },\n ],\n 'unicorn/text-encoding-identifier-case': 'off',\n },\n },\n {\n files: ['./*.ts'],\n name: 'unicorn/root-ts-files',\n rules: {\n 'unicorn/prefer-module': 'off',\n 'unicorn/prevent-abbreviations': 'off',\n },\n },\n];\n\nconst unusedImportsConfig: Linter.Config[] = [\n {\n name: 'unused-imports',\n plugins: {\n 'unused-imports': unusedImports,\n },\n rules: {\n '@typescript-eslint/no-unused-vars': 'off',\n 'no-unused-vars': 'off',\n 'sonarjs/no-unused-vars': 'off',\n 'sonarjs/unused-import': 'off',\n 'unused-imports/no-unused-imports': 'error',\n 'unused-imports/no-unused-vars': [\n 'error',\n {\n args: 'after-used',\n argsIgnorePattern: '^_',\n ignoreRestSiblings: true,\n vars: 'all',\n varsIgnorePattern: '^_',\n },\n ],\n },\n },\n {\n files: ['**/*.d.ts'],\n name: 'unused-imports/ts-definition-files',\n rules: {\n 'unused-imports/no-unused-vars': 'off',\n },\n },\n];\n\nconst checkFileConfig: Linter.Config[] = [\n {\n plugins: {\n 'check-file': checkFile,\n },\n },\n {\n files: ['app/**/*'],\n name: 'check-file',\n rules: {\n 'check-file/filename-naming-convention': [\n 'error',\n {\n // React hook files must be camelCase (to match the hook name)\n '**/hooks/*.{ts,tsx}': 'CAMEL_CASE',\n 'app/state/*.tsx': 'KEBAB_CASE',\n // React component files must be named index.tsx\n 'app/{components,pages}/**/!(assets|hooks|state|tests|utils)/*.tsx':\n 'index+()',\n // Generally, non-component files must be named kebab-case\n 'app/{components,pages}/**/!(hooks)/*.ts': 'KEBAB_CASE',\n // Non-component files inside specific components folders must be kebab-case\n 'app/{components,pages}/**/(assets|state|tests|utils)/*.{ts,tsx}':\n 'KEBAB_CASE',\n 'test/**/*.ts?(x)': 'KEBAB_CASE',\n },\n {\n ignoreMiddleExtensions: true,\n },\n ],\n 'check-file/folder-match-with-fex': [\n 'error',\n {\n // require stories and test files to be inside tests folders\n '*.(stories|test).{ts,tsx}': 'app/**/tests/',\n },\n ],\n 'check-file/folder-naming-convention': [\n 'error',\n {\n // enforce PascalCase component folders, and allow assets, hooks, tests, and utils subfolders\n 'app/components/**/':\n '(assets|hooks|state|tests|utils|[A-Z][a-zA-Z0-9]*)',\n },\n ],\n },\n },\n {\n files: ['test/**/*.*'],\n name: 'check-file/test-files',\n rules: {\n 'check-file/filename-naming-convention': [\n 'error',\n {\n 'test/**/*.ts?(x)': 'KEBAB_CASE',\n },\n {\n ignoreMiddleExtensions: true,\n },\n ],\n },\n },\n];\n\nexport const styleHygiene: Linter.Config[] = [\n ...canonicalConfig,\n ...perfectionistConfig,\n ...unicornConfig,\n ...unusedImportsConfig,\n ...checkFileConfig,\n];\n","import type {Linter} from 'eslint';\nimport noRelativeImportPaths from 'eslint-plugin-no-relative-import-paths';\nimport sonarjs from 'eslint-plugin-sonarjs';\nimport noEnumPlugin from '../plugins/no-enum.js';\nimport noSwitchPlugin from '../plugins/no-switch.js';\n\nconst sonarConfig: Linter.Config[] = [\n sonarjs.configs!.recommended as Linter.Config,\n {\n name: 'sonarjs',\n rules: {\n 'sonarjs/cognitive-complexity': 'error',\n 'sonarjs/fixme-tag': 'off',\n 'sonarjs/no-commented-code': 'off',\n 'sonarjs/no-nested-conditional': 'off',\n 'sonarjs/no-nested-functions': 'off',\n 'sonarjs/no-selector-parameter': 'off',\n 'sonarjs/regex-complexity': 'off',\n 'sonarjs/todo-tag': 'off',\n },\n },\n {\n files: ['**/*.tsx', '**/hooks/*.ts?(x)'],\n name: 'sonarjs/react-files',\n rules: {\n 'sonarjs/cognitive-complexity': 'off',\n 'sonarjs/function-return-type': 'off',\n },\n },\n {\n files: ['**/*.test.ts?(x)', '**/*.stories.ts?(x)'],\n name: 'sonarjs/test-files',\n rules: {\n 'sonarjs/no-duplicate-string': 'off',\n 'sonarjs/no-identical-functions': 'off',\n },\n },\n {\n files: ['app/languages/**/*.ts', 'eslint.config.mjs'],\n name: 'sonarjs/credential-checks',\n rules: {\n 'sonarjs/no-hardcoded-credentials': 'off',\n 'sonarjs/no-hardcoded-passwords': 'off',\n },\n },\n];\n\nconst noEnumConfig: Linter.Config[] = [\n {\n files: ['**/*.ts?(x)'],\n name: 'no-enum',\n plugins: {'no-enum': noEnumPlugin},\n rules: {\n 'no-enum/no-enum': 'error',\n },\n },\n];\n\nconst noSwitchConfig: Linter.Config[] = [\n {\n files: ['**/*.ts?(x)', '**/*.js?(x)'],\n name: 'no-switch',\n plugins: {'no-switch': noSwitchPlugin},\n rules: {'no-switch/no-switch': 'error'},\n },\n];\n\nconst noRelativeImportPathsConfig: Linter.Config[] = [\n {\n name: 'no-relative-import-paths',\n plugins: {\n 'no-relative-import-paths': noRelativeImportPaths,\n },\n rules: {\n 'no-relative-import-paths/no-relative-import-paths': [\n 'error',\n {\n allowedDepth: 2,\n allowSameFolder: true,\n prefix: '~',\n rootDir: 'app',\n },\n ],\n },\n },\n];\n\nexport const guardrails: Linter.Config[] = [\n ...sonarConfig,\n ...noEnumConfig,\n ...noSwitchConfig,\n ...noRelativeImportPathsConfig,\n];\n","import type {ESLint, Rule} from 'eslint';\n\nconst noEnumRule: Rule.RuleModule = {\n create: (context) => ({\n TSEnumDeclaration: (node: Rule.Node) => {\n context.report({messageId: 'noEnum', node});\n },\n }),\n meta: {\n docs: {description: 'Disallow TypeScript enums'},\n messages: {\n noEnum:\n 'Do not use TypeScript enums. Use an object with `as const` instead.',\n },\n schema: [],\n type: 'problem',\n },\n};\n\nconst plugin: ESLint.Plugin = {\n meta: {\n name: 'no-enum',\n version: '0.1.0',\n },\n rules: {\n 'no-enum': noEnumRule,\n },\n};\n\nexport default plugin;\n","import type {ESLint, Rule} from 'eslint';\n\nconst noSwitchRule: Rule.RuleModule = {\n create: (context) => ({\n SwitchStatement: (node: Rule.Node) => {\n context.report({messageId: 'noSwitch', node});\n },\n }),\n meta: {\n docs: {description: 'Disallow switch statements'},\n messages: {\n noSwitch:\n 'Do not use switch statements. Use an object map or if/else instead.',\n },\n schema: [],\n type: 'problem',\n },\n};\n\nconst plugin: ESLint.Plugin = {\n meta: {\n name: 'no-switch',\n version: '0.1.0',\n },\n rules: {\n 'no-switch': noSwitchRule,\n },\n};\n\nexport default plugin;\n","import vitest from '@vitest/eslint-plugin';\nimport jestDom from 'eslint-plugin-jest-dom';\nimport testingLibrary from 'eslint-plugin-testing-library';\nimport type {Linter} from 'eslint';\n\n/**\n * Testing flat-config block.\n *\n * Ports `testHarnessConfig` + `testingLibraryConfig` from GAIA's\n * `eslint.config.mjs`. Wires up Vitest, jest-dom, and Testing Library\n * recommended rules across test/story/test-harness files.\n */\nexport const testing: Linter.Config[] = [\n {\n files: [\n '**/*.test.ts?(x)',\n '**/*.stories.ts?(x)',\n 'test/**/*.ts?(x)',\n ],\n name: 'vitest',\n plugins: {\n 'jest-dom': jestDom,\n vitest,\n },\n rules: {\n ...jestDom.configs['flat/recommended'].rules,\n ...vitest.configs.recommended.rules,\n 'import-x/no-useless-path-segments': [\n 'error',\n {noUselessIndex: true},\n ],\n 'vitest/expect-expect': [\n 'error',\n {assertFunctionNames: ['expect', 'expect*']},\n ],\n },\n },\n {\n ...testingLibrary.configs['flat/react'],\n files: ['**/*.test.ts?(x)'],\n name: 'testing-library',\n },\n];\n","import storybookPlugin from 'eslint-plugin-storybook';\nimport type {Linter} from 'eslint';\n\n/**\n * Storybook flat-config block.\n *\n * Ports `storybookConfig` from GAIA's `eslint.config.mjs` — applies the\n * official `flat/recommended` config from `eslint-plugin-storybook`.\n */\nexport const storybook: Linter.Config[] = [\n ...(storybookPlugin.configs['flat/recommended'] as Linter.Config[]),\n];\n","import playwrightPlugin from 'eslint-plugin-playwright';\nimport type {Linter} from 'eslint';\n\n/**\n * Playwright flat-config block.\n *\n * Ports `playwrightConfig` from GAIA's `eslint.config.mjs` — scopes\n * `eslint-plugin-playwright`'s `flat/recommended` config to `.playwright/`\n * test files (GAIA's e2e directory convention).\n */\nexport const playwright: Linter.Config[] = [\n {\n name: 'playwright',\n ...(playwrightPlugin.configs['flat/recommended'] as Linter.Config),\n files: ['.playwright/**/*.ts?(x)'],\n rules: {\n ...playwrightPlugin.configs['flat/recommended'].rules,\n 'playwright/expect-expect': [\n 'warn',\n {assertFunctionPatterns: ['^expect[A-Z]']},\n ],\n },\n },\n];\n","import {rules as prettierConfigRules} from 'eslint-config-prettier';\nimport prettierPlugin from 'eslint-plugin-prettier';\nimport type {Linter} from 'eslint';\n\n/**\n * Prettier flat-config block.\n *\n * Ports `prettierConfig` from GAIA's `eslint.config.mjs`. Layers\n * `eslint-config-prettier`'s rule disablers, then re-enables a few\n * `@stylistic/*` rules GAIA wants to keep (padding lines, single quotes),\n * and finally turns on the `prettier/prettier` rule itself.\n */\nexport const prettier: Linter.Config[] = [\n {\n name: 'prettier/plugin/config',\n plugins: {prettier: prettierPlugin},\n },\n {\n name: 'prettier/config',\n rules: {\n ...prettierConfigRules,\n '@stylistic/padding-line-between-statements': [\n 'error',\n {\n blankLine: 'always',\n next: ['block-like', 'export', 'return', 'throw'],\n prev: '*',\n },\n ],\n '@stylistic/quotes': [\n 'error',\n 'single',\n {\n allowTemplateLiterals: 'avoidEscape',\n avoidEscape: true,\n },\n ],\n '@stylistic/spaced-comment': 'off',\n 'prettier/prettier': ['error', {endOfLine: 'auto'}],\n },\n },\n];\n","import betterTailwindPlugin from 'eslint-plugin-better-tailwindcss';\nimport type {Linter} from 'eslint';\n\nexport type GaiaLintBetterTailwindOptions = {\n /** Path to the Tailwind entry CSS file (e.g. './app/styles/tailwind.css'). */\n entryPoint: string;\n /** Class names to ignore in `better-tailwindcss/no-unknown-classes`. */\n ignore?: string[];\n};\n\n/**\n * Better-Tailwind flat-config factory.\n *\n * Ports `betterTailwindConfig` from GAIA's `eslint.config.mjs`. The\n * `entryPoint` (consumer's Tailwind CSS entry) and `ignore` list are\n * project-specific, so this is shipped as a factory rather than a static\n * array.\n */\nexport const betterTailwind = (\n opts: GaiaLintBetterTailwindOptions,\n): Linter.Config[] => [\n {\n name: 'better-tailwindcss',\n plugins: {\n 'better-tailwindcss': betterTailwindPlugin,\n },\n rules: {\n 'better-tailwindcss/enforce-canonical-classes': 'error',\n 'better-tailwindcss/enforce-consistent-important-position': 'error',\n 'better-tailwindcss/enforce-consistent-variable-syntax': 'error',\n 'better-tailwindcss/enforce-shorthand-classes': 'error',\n 'better-tailwindcss/no-conflicting-classes': 'error',\n 'better-tailwindcss/no-deprecated-classes': 'error',\n 'better-tailwindcss/no-unknown-classes': [\n 'error',\n {ignore: opts.ignore ?? []},\n ],\n },\n settings: {\n 'better-tailwindcss': {\n detectComponentClasses: true,\n entryPoint: opts.entryPoint,\n },\n },\n },\n];\n","import {includeIgnoreFile} from '@eslint/compat';\nimport path from 'node:path';\nimport type {Linter} from 'eslint';\n\nexport type GaiaLintIgnoresOptions = {\n /** Path to a `.gitignore` file to merge in. Resolved from `process.cwd()` if relative. */\n gitignore?: string;\n /** Extra ignore globs to merge with GAIA defaults. */\n extra?: string[];\n};\n\n/**\n * GAIA's default ignore globs — matches the static `ignored-files` block in\n * GAIA's `eslint.config.mjs`. Consumer's `extra` ignores get concatenated\n * onto this list.\n */\nconst defaultIgnores = [\n '.storybook',\n '.playwright',\n '/.react-router/**',\n '.claude/**/*.js',\n '.claude/**/*.cjs',\n 'scripts',\n 'public/**',\n '**/*.css',\n '**/*.svg',\n '**/*.md',\n];\n\n/**\n * Ignores flat-config factory.\n *\n * Ports the `includeIgnoreFile(gitignorePath)` + static `ignored-files`\n * block from GAIA's `eslint.config.mjs`. The `gitignore` path must be\n * resolved at the consumer's cwd (config-load time), not at gaia-lint's\n * install location, so this is shipped as a factory.\n */\nexport const ignores = (opts?: GaiaLintIgnoresOptions): Linter.Config[] => {\n const out: Linter.Config[] = [];\n\n if (opts?.gitignore) {\n const resolved = path.isAbsolute(opts.gitignore)\n ? opts.gitignore\n : path.resolve(process.cwd(), opts.gitignore);\n out.push(includeIgnoreFile(resolved) as Linter.Config);\n }\n\n out.push({\n ignores: [...defaultIgnores, ...(opts?.extra ?? [])],\n name: 'ignored-files',\n });\n\n return out;\n};\n","export {base} from './configs/base.js';\nexport {react} from './configs/react.js';\nexport {styleHygiene} from './configs/style-hygiene.js';\nexport {guardrails} from './configs/guardrails.js';\nexport {testing} from './configs/testing.js';\nexport {storybook} from './configs/storybook.js';\nexport {playwright} from './configs/playwright.js';\nexport {prettier} from './configs/prettier.js';\nexport {\n betterTailwind,\n type GaiaLintBetterTailwindOptions,\n} from './configs/better-tailwind.js';\nexport {\n ignores,\n type GaiaLintIgnoresOptions,\n} from './configs/ignores.js';\n\nimport {base} from './configs/base.js';\nimport {react} from './configs/react.js';\nimport {styleHygiene} from './configs/style-hygiene.js';\nimport {guardrails} from './configs/guardrails.js';\nimport {testing} from './configs/testing.js';\nimport {storybook} from './configs/storybook.js';\nimport {playwright} from './configs/playwright.js';\nimport {prettier} from './configs/prettier.js';\nimport {betterTailwind} from './configs/better-tailwind.js';\nimport {ignores} from './configs/ignores.js';\n\nconst gaiaLint: {\n base: typeof base;\n react: typeof react;\n styleHygiene: typeof styleHygiene;\n guardrails: typeof guardrails;\n testing: typeof testing;\n storybook: typeof storybook;\n playwright: typeof playwright;\n prettier: typeof prettier;\n betterTailwind: typeof betterTailwind;\n ignores: typeof ignores;\n} = {\n base,\n react,\n styleHygiene,\n guardrails,\n testing,\n storybook,\n playwright,\n prettier,\n betterTailwind,\n ignores,\n};\n\nexport default gaiaLint;\n"],"mappings":"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","names":["configs","plugins","plugin"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gaia-react/lint",
3
- "version": "1.1.2",
3
+ "version": "1.1.3",
4
4
  "description": "GAIA's opinionated lint configuration.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",