@luxass/eslint-config 7.2.1 → 7.4.0

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.
package/dist/index.mjs CHANGED
@@ -7,6 +7,7 @@ import path from "node:path";
7
7
  import { isPackageExists } from "local-pkg";
8
8
  import createCommand from "eslint-plugin-command/config";
9
9
  import eslintCommentsPlugin from "@eslint-community/eslint-plugin-eslint-comments";
10
+ import pluginE18e from "@e18e/eslint-plugin";
10
11
  import pluginAntfu from "eslint-plugin-antfu";
11
12
  import pluginImportLite from "eslint-plugin-import-lite";
12
13
  import pluginUnusedImports from "eslint-plugin-unused-imports";
@@ -16,7 +17,6 @@ import pluginNode from "eslint-plugin-n";
16
17
  import pluginPerfectionist from "eslint-plugin-perfectionist";
17
18
  import { configs } from "eslint-plugin-regexp";
18
19
  import pluginUnicorn from "eslint-plugin-unicorn";
19
-
20
20
  //#region node_modules/.pnpm/find-up-simple@1.0.1/node_modules/find-up-simple/index.js
21
21
  const toPath = (urlOrPath) => urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath;
22
22
  async function findUp(name, { cwd = process.cwd(), type = "file", stopAt } = {}) {
@@ -49,7 +49,6 @@ function findUpSync(name, { cwd = process.cwd(), type = "file", stopAt } = {}) {
49
49
  directory = path.dirname(directory);
50
50
  }
51
51
  }
52
-
53
52
  //#endregion
54
53
  //#region src/globs.ts
55
54
  const GLOB_SRC_EXT = "?([cm])[jt]s?(x)";
@@ -138,7 +137,6 @@ const GLOB_EXCLUDE = [
138
137
  "**/auto-import?(s).d.ts",
139
138
  "**/components.d.ts"
140
139
  ];
141
-
142
140
  //#endregion
143
141
  //#region src/utils.ts
144
142
  const scopeUrl = fileURLToPath(new URL(".", import.meta.url));
@@ -331,12 +329,11 @@ function isPackageInScope(name) {
331
329
  function isInEditorEnv() {
332
330
  if (process.env.CI) return false;
333
331
  if (isInGitHooksOrLintStaged()) return false;
334
- return !!(process.env.VSCODE_PID || process.env.VSCODE_CWD || process.env.JETBRAINS_IDE || process.env.VIM || process.env.NVIM);
332
+ return !!(process.env.VSCODE_PID || process.env.VSCODE_CWD || process.env.JETBRAINS_IDE || process.env.VIM || process.env.NVIM || process.env.ZED_ENVIRONMENT && !process.env.ZED_TERM);
335
333
  }
336
334
  function isInGitHooksOrLintStaged() {
337
335
  return !!(process.env.GIT_PARAMS || process.env.VSCODE_GIT_COMMAND || process.env.npm_lifecycle_script?.startsWith("lint-staged"));
338
336
  }
339
-
340
337
  //#endregion
341
338
  //#region src/configs/astro.ts
342
339
  async function astro(options = {}) {
@@ -385,7 +382,6 @@ async function astro(options = {}) {
385
382
  }
386
383
  }];
387
384
  }
388
-
389
385
  //#endregion
390
386
  //#region src/configs/command.ts
391
387
  async function command() {
@@ -394,7 +390,6 @@ async function command() {
394
390
  ...createCommand()
395
391
  }];
396
392
  }
397
-
398
393
  //#endregion
399
394
  //#region src/configs/comments.ts
400
395
  async function comments() {
@@ -409,7 +404,6 @@ async function comments() {
409
404
  }
410
405
  }];
411
406
  }
412
-
413
407
  //#endregion
414
408
  //#region src/configs/disables.ts
415
409
  async function disables() {
@@ -469,7 +463,22 @@ async function disables() {
469
463
  }
470
464
  ];
471
465
  }
472
-
466
+ //#endregion
467
+ //#region src/configs/e18e.ts
468
+ async function e18e(options = {}) {
469
+ const { isInEditor = false, modernization = true, type = "app", moduleReplacements = type === "lib" && isInEditor, overrides = {}, performanceImprovements = true } = options;
470
+ const configs = pluginE18e.configs;
471
+ return [{
472
+ name: "luxass/e18e/rules",
473
+ plugins: { e18e: pluginE18e },
474
+ rules: {
475
+ ...modernization ? { ...configs.modernization.rules } : {},
476
+ ...moduleReplacements ? { ...configs.moduleReplacements.rules } : {},
477
+ ...performanceImprovements ? { ...configs.performanceImprovements.rules } : {},
478
+ ...overrides
479
+ }
480
+ }];
481
+ }
473
482
  //#endregion
474
483
  //#region src/configs/stylistic.ts
475
484
  const StylisticConfigDefaults = {
@@ -529,7 +538,6 @@ async function stylistic(options = {}) {
529
538
  }
530
539
  }];
531
540
  }
532
-
533
541
  //#endregion
534
542
  //#region src/configs/formatters.ts
535
543
  function mergePrettierOptions(options, overrides) {
@@ -576,11 +584,12 @@ async function formatters(options = {}, stylistic = {}) {
576
584
  xmlSortAttributesByKey: false,
577
585
  xmlWhitespaceSensitivity: "ignore"
578
586
  };
579
- const dprintOptions = Object.assign({
587
+ const dprintOptions = {
580
588
  indentWidth: typeof indent === "number" ? indent : 2,
581
589
  quoteStyle: quotes === "single" ? "preferSingle" : "preferDouble",
582
- useTabs: indent === "tab"
583
- }, options.dprintOptions || {});
590
+ useTabs: indent === "tab",
591
+ ...options.dprintOptions || {}
592
+ };
584
593
  const configs = [{
585
594
  name: "luxass/formatter/setup",
586
595
  plugins: { format: await interop(import("eslint-plugin-format")) }
@@ -663,7 +672,6 @@ async function formatters(options = {}, stylistic = {}) {
663
672
  });
664
673
  return configs;
665
674
  }
666
-
667
675
  //#endregion
668
676
  //#region src/configs/ignores.ts
669
677
  async function ignores(userIgnores = [], ignoreTypeScript = false) {
@@ -676,7 +684,6 @@ async function ignores(userIgnores = [], ignoreTypeScript = false) {
676
684
  name: "luxass/ignores"
677
685
  }];
678
686
  }
679
-
680
687
  //#endregion
681
688
  //#region src/configs/imports.ts
682
689
  async function imports(options = {}) {
@@ -701,7 +708,6 @@ async function imports(options = {}) {
701
708
  }
702
709
  }];
703
710
  }
704
-
705
711
  //#endregion
706
712
  //#region src/configs/javascript.ts
707
713
  async function javascript(options = {}) {
@@ -941,7 +947,6 @@ async function javascript(options = {}) {
941
947
  }
942
948
  ];
943
949
  }
944
-
945
950
  //#endregion
946
951
  //#region src/configs/jsdoc.ts
947
952
  async function jsdoc(options = {}) {
@@ -976,7 +981,6 @@ async function jsdoc(options = {}) {
976
981
  }
977
982
  }];
978
983
  }
979
-
980
984
  //#endregion
981
985
  //#region src/configs/json.ts
982
986
  async function jsonc(options = {}) {
@@ -1042,7 +1046,6 @@ async function jsonc(options = {}) {
1042
1046
  }
1043
1047
  }];
1044
1048
  }
1045
-
1046
1049
  //#endregion
1047
1050
  //#region src/configs/jsx.ts
1048
1051
  async function jsx() {
@@ -1052,7 +1055,6 @@ async function jsx() {
1052
1055
  name: "luxass/jsx/setup"
1053
1056
  }];
1054
1057
  }
1055
-
1056
1058
  //#endregion
1057
1059
  //#region src/configs/markdown.ts
1058
1060
  async function markdown(options = {}) {
@@ -1079,6 +1081,7 @@ async function markdown(options = {}) {
1079
1081
  name: "luxass/markdown/rules",
1080
1082
  rules: {
1081
1083
  ...markdown.configs.recommended.at(0)?.rules,
1084
+ "markdown/fenced-code-language": "off",
1082
1085
  "markdown/no-missing-label-refs": "off",
1083
1086
  ...overridesMarkdown
1084
1087
  }
@@ -1104,6 +1107,7 @@ async function markdown(options = {}) {
1104
1107
  name: "luxass/markdown/disables/code",
1105
1108
  rules: {
1106
1109
  "antfu/no-top-level-await": "off",
1110
+ "e18e/prefer-static-regex": "off",
1107
1111
  "no-alert": "off",
1108
1112
  "no-console": "off",
1109
1113
  "no-labels": "off",
@@ -1133,7 +1137,6 @@ async function markdown(options = {}) {
1133
1137
  }
1134
1138
  ];
1135
1139
  }
1136
-
1137
1140
  //#endregion
1138
1141
  //#region src/configs/node.ts
1139
1142
  function node() {
@@ -1155,7 +1158,6 @@ function node() {
1155
1158
  }
1156
1159
  }];
1157
1160
  }
1158
-
1159
1161
  //#endregion
1160
1162
  //#region src/configs/perfectionist.ts
1161
1163
  /**
@@ -1209,7 +1211,6 @@ async function perfectionist() {
1209
1211
  }
1210
1212
  }];
1211
1213
  }
1212
-
1213
1214
  //#endregion
1214
1215
  //#region src/configs/pnpm.ts
1215
1216
  async function detectCatalogUsage() {
@@ -1336,7 +1337,6 @@ async function pnpm(options) {
1336
1337
  }
1337
1338
  return configs;
1338
1339
  }
1339
-
1340
1340
  //#endregion
1341
1341
  //#region src/configs/react.ts
1342
1342
  const ReactRefreshAllowConstantExportPackages = ["vite"];
@@ -1354,26 +1354,17 @@ const ReactRouterPackages = [
1354
1354
  ];
1355
1355
  const TanstackRouterPackages = ["@tanstack/react-router"];
1356
1356
  const NextJsPackages = ["next"];
1357
- const ReactCompilerPackages = ["babel-plugin-react-compiler"];
1358
1357
  async function react(options = {}) {
1359
1358
  const { files = [
1360
1359
  GLOB_JS,
1361
1360
  GLOB_JSX,
1362
1361
  GLOB_TS,
1363
1362
  GLOB_TSX
1364
- ], filesTypeAware = [GLOB_TS, GLOB_TSX], ignoresTypeAware = [`${GLOB_MARKDOWN}/**`, GLOB_ASTRO_TS], overrides = {}, reactCompiler = ReactCompilerPackages.some((i) => isPackageExists(i)), tsconfigPath } = options;
1365
- await ensure([
1366
- "@eslint-react/eslint-plugin",
1367
- "eslint-plugin-react-hooks",
1368
- "eslint-plugin-react-refresh"
1369
- ]);
1363
+ ], filesTypeAware = [GLOB_TS, GLOB_TSX], ignoresTypeAware = [`${GLOB_MARKDOWN}/**`, GLOB_ASTRO_TS], overrides = {}, tsconfigPath } = options;
1364
+ await ensure(["@eslint-react/eslint-plugin", "eslint-plugin-react-refresh"]);
1370
1365
  const isTypeAware = !!tsconfigPath;
1371
- const typeAwareRules = { "react/no-leaked-conditional-rendering": "warn" };
1372
- const [pluginReact, pluginReactHooks, pluginReactRefresh] = await Promise.all([
1373
- interop(import("@eslint-react/eslint-plugin")),
1374
- interop(import("eslint-plugin-react-hooks")),
1375
- interop(import("eslint-plugin-react-refresh"))
1376
- ]);
1366
+ const typeAwareRules = { "react/no-leaked-conditional-rendering": "error" };
1367
+ const [pluginReact, pluginReactRefresh] = await Promise.all([interop(import("@eslint-react/eslint-plugin")), interop(import("eslint-plugin-react-refresh"))]);
1377
1368
  const isAllowConstantExport = ReactRefreshAllowConstantExportPackages.some((i) => isPackageExists(i));
1378
1369
  const isUsingRemix = RemixPackages.some((i) => isPackageExists(i));
1379
1370
  const isUsingReactRouter = ReactRouterPackages.some((i) => isPackageExists(i));
@@ -1386,8 +1377,6 @@ async function react(options = {}) {
1386
1377
  plugins: {
1387
1378
  "react": plugins["@eslint-react"],
1388
1379
  "react-dom": plugins["@eslint-react/dom"],
1389
- "react-hooks": pluginReactHooks,
1390
- "react-hooks-extra": plugins["@eslint-react/hooks-extra"],
1391
1380
  "react-naming-convention": plugins["@eslint-react/naming-convention"],
1392
1381
  "react-refresh": pluginReactRefresh,
1393
1382
  "react-rsc": plugins["@eslint-react/rsc"],
@@ -1402,85 +1391,7 @@ async function react(options = {}) {
1402
1391
  },
1403
1392
  name: "luxass/react/rules",
1404
1393
  rules: {
1405
- "react-dom/no-dangerously-set-innerhtml": "warn",
1406
- "react-dom/no-dangerously-set-innerhtml-with-children": "error",
1407
- "react-dom/no-find-dom-node": "error",
1408
- "react-dom/no-flush-sync": "error",
1409
- "react-dom/no-hydrate": "error",
1410
- "react-dom/no-namespace": "error",
1411
- "react-dom/no-render": "error",
1412
- "react-dom/no-render-return-value": "error",
1413
- "react-dom/no-script-url": "warn",
1414
- "react-dom/no-unsafe-iframe-sandbox": "warn",
1415
- "react-dom/no-use-form-state": "error",
1416
- "react-dom/no-void-elements-with-children": "error",
1417
- "react-hooks-extra/no-direct-set-state-in-use-effect": "warn",
1418
- "react-hooks/exhaustive-deps": "warn",
1419
- "react-hooks/rules-of-hooks": "error",
1420
- "react-naming-convention/context-name": "warn",
1421
- "react-naming-convention/ref-name": "warn",
1422
- "react-naming-convention/use-state": "warn",
1423
- "react-rsc/function-definition": "error",
1424
- "react-web-api/no-leaked-event-listener": "warn",
1425
- "react-web-api/no-leaked-interval": "warn",
1426
- "react-web-api/no-leaked-resize-observer": "warn",
1427
- "react-web-api/no-leaked-timeout": "warn",
1428
- "react/jsx-key-before-spread": "warn",
1429
- "react/jsx-no-comment-textnodes": "warn",
1430
- "react/jsx-no-duplicate-props": "warn",
1431
- "react/jsx-uses-react": "warn",
1432
- "react/jsx-uses-vars": "warn",
1433
- "react/no-access-state-in-setstate": "error",
1434
- "react/no-array-index-key": "warn",
1435
- "react/no-children-count": "warn",
1436
- "react/no-children-for-each": "warn",
1437
- "react/no-children-map": "warn",
1438
- "react/no-children-only": "warn",
1439
- "react/no-children-to-array": "warn",
1440
- "react/no-clone-element": "warn",
1441
- "react/no-component-will-mount": "error",
1442
- "react/no-component-will-receive-props": "error",
1443
- "react/no-component-will-update": "error",
1444
- "react/no-context-provider": "warn",
1445
- "react/no-create-ref": "error",
1446
- "react/no-default-props": "error",
1447
- "react/no-direct-mutation-state": "error",
1448
- "react/no-forward-ref": "warn",
1449
- "react/no-missing-key": "error",
1450
- "react/no-nested-component-definitions": "error",
1451
- "react/no-nested-lazy-component-declarations": "error",
1452
- "react/no-prop-types": "error",
1453
- "react/no-redundant-should-component-update": "error",
1454
- "react/no-set-state-in-component-did-mount": "warn",
1455
- "react/no-set-state-in-component-did-update": "warn",
1456
- "react/no-set-state-in-component-will-update": "warn",
1457
- "react/no-string-refs": "error",
1458
- "react/no-unnecessary-use-prefix": "warn",
1459
- "react/no-unsafe-component-will-mount": "warn",
1460
- "react/no-unsafe-component-will-receive-props": "warn",
1461
- "react/no-unsafe-component-will-update": "warn",
1462
- "react/no-unused-class-component-members": "warn",
1463
- "react/no-use-context": "warn",
1464
- "react/no-useless-forward-ref": "warn",
1465
- "react/prefer-namespace-import": "error",
1466
- "react/prefer-use-state-lazy-initialization": "warn",
1467
- ...reactCompiler ? {
1468
- "react-hooks/component-hook-factories": "error",
1469
- "react-hooks/config": "error",
1470
- "react-hooks/error-boundaries": "error",
1471
- "react-hooks/gating": "error",
1472
- "react-hooks/globals": "error",
1473
- "react-hooks/immutability": "error",
1474
- "react-hooks/incompatible-library": "warn",
1475
- "react-hooks/preserve-manual-memoization": "error",
1476
- "react-hooks/purity": "error",
1477
- "react-hooks/refs": "error",
1478
- "react-hooks/set-state-in-effect": "error",
1479
- "react-hooks/set-state-in-render": "error",
1480
- "react-hooks/static-components": "error",
1481
- "react-hooks/unsupported-syntax": "warn",
1482
- "react-hooks/use-memo": "error"
1483
- } : {},
1394
+ ...pluginReact.configs.recommended.rules,
1484
1395
  "react-refresh/only-export-components": ["error", {
1485
1396
  allowConstantExport: isAllowConstantExport,
1486
1397
  allowExportNames: [...isUsingNext ? [
@@ -1519,9 +1430,18 @@ async function react(options = {}) {
1519
1430
  "createLazyRoute"
1520
1431
  ] : []]
1521
1432
  }],
1433
+ "react/prefer-namespace-import": "error",
1522
1434
  ...overrides
1523
1435
  }
1524
1436
  },
1437
+ {
1438
+ files: filesTypeAware,
1439
+ name: "luxass/react/typescript",
1440
+ rules: {
1441
+ "react-dom/no-string-style-prop": "off",
1442
+ "react-dom/no-unknown-property": "off"
1443
+ }
1444
+ },
1525
1445
  ...isTypeAware ? [{
1526
1446
  files: filesTypeAware,
1527
1447
  ignores: ignoresTypeAware,
@@ -1530,7 +1450,6 @@ async function react(options = {}) {
1530
1450
  }] : []
1531
1451
  ];
1532
1452
  }
1533
-
1534
1453
  //#endregion
1535
1454
  //#region src/configs/regexp.ts
1536
1455
  async function regexp(options = {}) {
@@ -1548,7 +1467,6 @@ async function regexp(options = {}) {
1548
1467
  }
1549
1468
  }];
1550
1469
  }
1551
-
1552
1470
  //#endregion
1553
1471
  //#region src/configs/sort.ts
1554
1472
  /**
@@ -1786,7 +1704,6 @@ function sortTsconfig() {
1786
1704
  ] }
1787
1705
  }];
1788
1706
  }
1789
-
1790
1707
  //#endregion
1791
1708
  //#region src/configs/tailwindcss.ts
1792
1709
  async function tailwindcss(options = {}) {
@@ -1810,7 +1727,6 @@ async function tailwindcss(options = {}) {
1810
1727
  settings: { ...configPath != null ? { tailwindcss: { config: configPath } } : {} }
1811
1728
  }];
1812
1729
  }
1813
-
1814
1730
  //#endregion
1815
1731
  //#region src/configs/test.ts
1816
1732
  let _pluginTest;
@@ -1835,6 +1751,7 @@ async function test(options = {}) {
1835
1751
  "test/prefer-hooks-in-order": "error",
1836
1752
  "test/prefer-lowercase-title": "error",
1837
1753
  "antfu/no-top-level-await": "off",
1754
+ "e18e/prefer-static-regex": "off",
1838
1755
  "no-unused-expressions": "off",
1839
1756
  "node/prefer-global/process": "off",
1840
1757
  "ts/explicit-function-return-type": "off",
@@ -1842,7 +1759,6 @@ async function test(options = {}) {
1842
1759
  }
1843
1760
  }];
1844
1761
  }
1845
-
1846
1762
  //#endregion
1847
1763
  //#region src/configs/toml.ts
1848
1764
  async function toml(options = {}) {
@@ -1883,18 +1799,17 @@ async function toml(options = {}) {
1883
1799
  }
1884
1800
  }];
1885
1801
  }
1886
-
1887
1802
  //#endregion
1888
1803
  //#region src/configs/typescript.ts
1889
1804
  async function typescript(options = {}) {
1890
1805
  const { erasableOnly = false, exts = [], overrides = {}, overridesTypeAware = {}, parserOptions = {}, type = "app" } = options ?? {};
1891
1806
  const files = options.files ?? [
1892
- GLOB_TS,
1893
- GLOB_TSX,
1807
+ "**/*.?([cm])ts",
1808
+ "**/*.?([cm])tsx",
1894
1809
  ...exts.map((ext) => `**/*.${ext}`)
1895
1810
  ];
1896
- const filesTypeAware = options.filesTypeAware ?? [GLOB_TS, GLOB_TSX];
1897
- const ignoresTypeAware = options.ignoresTypeAware ?? [`${GLOB_MARKDOWN}/**`, GLOB_ASTRO_TS];
1811
+ const filesTypeAware = options.filesTypeAware ?? ["**/*.?([cm])ts", "**/*.?([cm])tsx"];
1812
+ const ignoresTypeAware = options.ignoresTypeAware ?? [`**/*.md/**`, "**/*.astro/*.ts"];
1898
1813
  const tsconfigPath = options?.tsconfigPath ? options.tsconfigPath : void 0;
1899
1814
  const isTypeAware = !!tsconfigPath;
1900
1815
  const typeAwareRules = {
@@ -2023,7 +1938,7 @@ async function typescript(options = {}) {
2023
1938
  }] : [],
2024
1939
  ...erasableOnly ? [{
2025
1940
  name: "luxas/typescript/erasable-syntax-only",
2026
- plugins: { "erasable-syntax-only": await interop(import("./lib-DRpFEws2.mjs")) },
1941
+ plugins: { "erasable-syntax-only": await interop(import("./lib-D3Kr7UIJ.mjs")) },
2027
1942
  rules: {
2028
1943
  "erasable-syntax-only/enums": "error",
2029
1944
  "erasable-syntax-only/import-aliases": "error",
@@ -2033,7 +1948,6 @@ async function typescript(options = {}) {
2033
1948
  }] : []
2034
1949
  ];
2035
1950
  }
2036
-
2037
1951
  //#endregion
2038
1952
  //#region src/configs/unicorn.ts
2039
1953
  async function unicorn(options = {}) {
@@ -2057,7 +1971,6 @@ async function unicorn(options = {}) {
2057
1971
  } }
2058
1972
  }];
2059
1973
  }
2060
-
2061
1974
  //#endregion
2062
1975
  //#region src/configs/unocss.ts
2063
1976
  async function unocss(options = {}) {
@@ -2076,7 +1989,6 @@ async function unocss(options = {}) {
2076
1989
  settings: { ...configPath != null ? { unocss: { configPath } } : {} }
2077
1990
  }];
2078
1991
  }
2079
-
2080
1992
  //#endregion
2081
1993
  //#region src/configs/vue.ts
2082
1994
  async function vue(options = {}) {
@@ -2247,7 +2159,6 @@ async function vue(options = {}) {
2247
2159
  }
2248
2160
  }];
2249
2161
  }
2250
-
2251
2162
  //#endregion
2252
2163
  //#region src/configs/yaml.ts
2253
2164
  async function yaml(options = {}) {
@@ -2327,7 +2238,6 @@ async function yaml(options = {}) {
2327
2238
  }
2328
2239
  ];
2329
2240
  }
2330
-
2331
2241
  //#endregion
2332
2242
  //#region src/factory.ts
2333
2243
  const FLAT_CONFIG_PROPS = [
@@ -2348,8 +2258,9 @@ const VuePackages = [
2348
2258
  const defaultPluginRenaming = {
2349
2259
  "@eslint-react": "react",
2350
2260
  "@eslint-react/dom": "react-dom",
2351
- "@eslint-react/hooks-extra": "react-hooks-extra",
2352
2261
  "@eslint-react/naming-convention": "react-naming-convention",
2262
+ "@eslint-react/rsc": "react-rsc",
2263
+ "@eslint-react/web-api": "react-web-api",
2353
2264
  "@stylistic": "style",
2354
2265
  "@typescript-eslint": "ts",
2355
2266
  "import-lite": "import",
@@ -2368,7 +2279,7 @@ const defaultPluginRenaming = {
2368
2279
  * The merged ESLint configurations.
2369
2280
  */
2370
2281
  function luxass(options = {}, ...userConfigs) {
2371
- const { astro: enableAstro = false, autoRenamePlugins = true, exts = [], gitignore: enableGitignore = true, ignores: userIgnores = [], imports: enableImports = true, jsdoc: enableJsdoc = true, jsx: enableJsx = true, node: enableNode = true, pnpm: enableCatalogs = !!findUpSync("pnpm-workspace.yaml"), react: enableReact = false, regexp: enableRegexp = true, tailwindcss: enableTailwindCSS = false, type: projectType = "app", typescript: enableTypeScript = isPackageExists("typescript"), unicorn: enableUnicorn = true, unocss: enableUnoCSS = false, vue: enableVue = VuePackages.some((i) => isPackageExists(i)) } = options;
2282
+ const { astro: enableAstro = false, autoRenamePlugins = true, e18e: enableE18e = true, exts = [], gitignore: enableGitignore = true, ignores: userIgnores = [], imports: enableImports = true, jsdoc: enableJsdoc = true, jsx: enableJsx = true, node: enableNode = true, pnpm: enableCatalogs = !!findUpSync("pnpm-workspace.yaml"), react: enableReact = false, regexp: enableRegexp = true, tailwindcss: enableTailwindCSS = false, type: projectType = "app", typescript: enableTypeScript = isPackageExists("typescript") || isPackageExists("@typescript/native-preview"), unicorn: enableUnicorn = true, unocss: enableUnoCSS = false, vue: enableVue = VuePackages.some((i) => isPackageExists(i)) } = options;
2372
2283
  let isInEditor = options.isInEditor;
2373
2284
  if (isInEditor == null) {
2374
2285
  isInEditor = isInEditorEnv();
@@ -2397,6 +2308,10 @@ function luxass(options = {}, ...userConfigs) {
2397
2308
  stylistic: stylisticOptions,
2398
2309
  ...resolveSubOptions(options, "imports")
2399
2310
  }));
2311
+ if (enableE18e) configs.push(e18e({
2312
+ isInEditor,
2313
+ ...enableE18e === true ? {} : enableE18e
2314
+ }));
2400
2315
  if (enableUnicorn) configs.push(unicorn(enableUnicorn === true ? {} : enableUnicorn));
2401
2316
  if (enableVue) exts.push("vue");
2402
2317
  if (enableJsx) configs.push(jsx());
@@ -2477,10 +2392,8 @@ function luxass(options = {}, ...userConfigs) {
2477
2392
  if (autoRenamePlugins) composer = composer.renamePlugins(defaultPluginRenaming);
2478
2393
  return composer;
2479
2394
  }
2480
-
2481
2395
  //#endregion
2482
2396
  //#region src/index.ts
2483
2397
  var src_default = luxass;
2484
-
2485
2398
  //#endregion
2486
- export { GLOB_ASTRO, GLOB_ASTRO_TS, GLOB_CSS, GLOB_EXCLUDE, GLOB_GRAPHQL, GLOB_HTML, GLOB_JS, GLOB_JSON, GLOB_JSON5, GLOB_JSONC, GLOB_JSX, GLOB_LESS, GLOB_MARKDOWN, GLOB_MARKDOWN_CODE, GLOB_MARKDOWN_IN_MARKDOWN, GLOB_NEXTJS_OG, GLOB_NEXTJS_ROUTES, GLOB_POSTCSS, GLOB_SCSS, GLOB_SRC, GLOB_SRC_EXT, GLOB_STYLE, GLOB_SVELTE, GLOB_SVG, GLOB_TESTS, GLOB_TOML, GLOB_TS, GLOB_TSX, GLOB_VUE, GLOB_XML, GLOB_YAML, astro, combine, command, comments, src_default as default, disables, ensure, formatters, getOverrides, ignores, imports, interop, isInEditorEnv, isInGitHooksOrLintStaged, isPackageInScope, javascript, jsdoc, jsonc, jsx, luxass, markdown, node, parserPlain, perfectionist, pnpm, react, regexp, renamePluginInConfigs, renameRules, resolveSubOptions, sortPackageJson, sortTsconfig, stylistic, tailwindcss, test, toArray, toml, typescript, unicorn, unocss, vue, yaml };
2399
+ export { GLOB_ASTRO, GLOB_ASTRO_TS, GLOB_CSS, GLOB_EXCLUDE, GLOB_GRAPHQL, GLOB_HTML, GLOB_JS, GLOB_JSON, GLOB_JSON5, GLOB_JSONC, GLOB_JSX, GLOB_LESS, GLOB_MARKDOWN, GLOB_MARKDOWN_CODE, GLOB_MARKDOWN_IN_MARKDOWN, GLOB_NEXTJS_OG, GLOB_NEXTJS_ROUTES, GLOB_POSTCSS, GLOB_SCSS, GLOB_SRC, GLOB_SRC_EXT, GLOB_STYLE, GLOB_SVELTE, GLOB_SVG, GLOB_TESTS, GLOB_TOML, GLOB_TS, GLOB_TSX, GLOB_VUE, GLOB_XML, GLOB_YAML, astro, combine, command, comments, src_default as default, disables, e18e, ensure, formatters, getOverrides, ignores, imports, interop, isInEditorEnv, isInGitHooksOrLintStaged, isPackageInScope, javascript, jsdoc, jsonc, jsx, luxass, markdown, node, parserPlain, perfectionist, pnpm, react, regexp, renamePluginInConfigs, renameRules, resolveSubOptions, sortPackageJson, sortTsconfig, stylistic, tailwindcss, test, toArray, toml, typescript, unicorn, unocss, vue, yaml };