@sarj/eslint-plugin 9.1.0 → 9.2.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.cjs CHANGED
@@ -1581,12 +1581,6 @@ var no_dynamic_sql_default = createRule({
1581
1581
 
1582
1582
  // src/rules/no-enum.ts
1583
1583
  var import_utils11 = require("@typescript-eslint/utils");
1584
- var DEFAULT_IGNORE_PATTERNS = [
1585
- /[\\/]generated[\\/]/,
1586
- /[\\/]openapi-gen[\\/]/,
1587
- /\.gen\.tsx?$/,
1588
- /\.generated\.tsx?$/
1589
- ];
1590
1584
  function matchesAnyPattern(filename, patterns) {
1591
1585
  for (const pattern of patterns) {
1592
1586
  const regexSource = pattern.replace(/[.+^${}()|[\]\\]/g, "\\$&").replace(/\*\*/g, "::DOUBLESTAR::").replace(/\*/g, "[^/\\\\]*").replace(/::DOUBLESTAR::/g, ".*");
@@ -1596,10 +1590,6 @@ function matchesAnyPattern(filename, patterns) {
1596
1590
  }
1597
1591
  return false;
1598
1592
  }
1599
- function hasGeneratedMarker(sourceText) {
1600
- const head = sourceText.slice(0, 1024);
1601
- return /@generated\b/.test(head);
1602
- }
1603
1593
  var no_enum_default = createRule({
1604
1594
  name: "no-enum",
1605
1595
  meta: {
@@ -1629,12 +1619,8 @@ var no_enum_default = createRule({
1629
1619
  const ignoreFiles = options.ignoreFiles ?? [];
1630
1620
  const filename = context.filename;
1631
1621
  const sourceText = context.sourceCode.getText();
1632
- const isIgnoredByDefault = DEFAULT_IGNORE_PATTERNS.some(
1633
- (re) => re.test(filename)
1634
- );
1635
1622
  const isIgnoredByOption = ignoreFiles.length > 0 && matchesAnyPattern(filename, ignoreFiles);
1636
- const isGenerated = hasGeneratedMarker(sourceText) || isGeneratedFile(filename, sourceText);
1637
- if (isIgnoredByDefault || isIgnoredByOption || isGenerated) {
1623
+ if (isIgnoredByOption || isGeneratedFile(filename, sourceText)) {
1638
1624
  return {};
1639
1625
  }
1640
1626
  return {
@@ -3382,35 +3368,6 @@ var no_restated_comment_default = createRule({
3382
3368
 
3383
3369
  // src/rules/no-restated-jsdoc.ts
3384
3370
  var import_utils24 = require("@typescript-eslint/utils");
3385
- var VALUE_TAGS = /* @__PURE__ */ new Set([
3386
- "alpha",
3387
- "author",
3388
- "beta",
3389
- "category",
3390
- "copyright",
3391
- "default",
3392
- "defaultvalue",
3393
- "deprecated",
3394
- "example",
3395
- "experimental",
3396
- "fileoverview",
3397
- "fixme",
3398
- "group",
3399
- "inheritdoc",
3400
- "internal",
3401
- "license",
3402
- "link",
3403
- "module",
3404
- "override",
3405
- "packagedocumentation",
3406
- "remarks",
3407
- "see",
3408
- "since",
3409
- "template",
3410
- "throws",
3411
- "todo",
3412
- "typeparam"
3413
- ]);
3414
3371
  var MODELLED_TAGS = /* @__PURE__ */ new Set([
3415
3372
  "arg",
3416
3373
  "argument",
@@ -3535,7 +3492,6 @@ var no_restated_jsdoc_default = createRule({
3535
3492
  const { description, tags } = parseJsDoc(comment.value);
3536
3493
  if (DIRECTIVE_RE3.test(description)) continue;
3537
3494
  const tagNames = new Set(tags.map((tag) => tag.name));
3538
- if ([...tagNames].some((name) => VALUE_TAGS.has(name))) continue;
3539
3495
  if ([...tagNames].some((name) => !MODELLED_TAGS.has(name))) continue;
3540
3496
  if (isProtected(description)) continue;
3541
3497
  const token = sourceCode.getTokenAfter(comment, { includeComments: false });
@@ -7013,25 +6969,32 @@ var STYLE_COLOR_PROPS = /* @__PURE__ */ new Set([
7013
6969
  var RAW_COLOR_VALUE_RE = new RegExp(`#[0-9a-fA-F]{3,8}\\b|\\b(?:${COLOR_FN})\\s*\\(`, "i");
7014
6970
  var CSS_VAR_REFERENCE_RE = /var\(\s*--/;
7015
6971
  var STORIES_FILE_RE = /\.stories\.[cm]?[jt]sx?$/i;
7016
- var SEMANTIC_TOKEN_RE = /@theme\b|--(?:background|foreground|primary|secondary|muted|accent|destructive|border|card|popover)\b|(?:bg|text|border)-(?:background|foreground|primary|secondary|muted|accent|destructive|border|card|popover)\b/;
7017
- var CONFIG_IS_SUFFICIENT = /* @__PURE__ */ new Set([
7018
- "components.json",
7019
- "tailwind.config.cjs",
7020
- "tailwind.config.js",
7021
- "tailwind.config.mjs",
7022
- "tailwind.config.ts"
7023
- ]);
7024
- var DETECTION_FILES = [
6972
+ var TOKEN_ROLES = "background|foreground|primary|secondary|muted|accent|destructive|danger|success|warning|info|border|card|popover|surface|content|base|subtle|default|ring|input|fg|bg";
6973
+ var SEMANTIC_TOKEN_RE = new RegExp(
6974
+ `--(?:color-)?(?:${TOKEN_ROLES})\\b|(?:bg|text|border|ring|fill|stroke)-(?:ui-)?(?:${TOKEN_ROLES})\\b`
6975
+ );
6976
+ var THEME_BLOCK_RE = /@theme\b/;
6977
+ var PRESENCE_MARKERS = [
7025
6978
  "components.json",
7026
6979
  "tailwind.config.js",
7027
6980
  "tailwind.config.cjs",
7028
6981
  "tailwind.config.mjs",
7029
6982
  "tailwind.config.ts",
6983
+ "tailwind.config.mts",
6984
+ "tailwind.config.cts"
6985
+ ];
6986
+ var CSS_DETECTION_FILES = [
7030
6987
  "app/globals.css",
6988
+ "app/global.css",
6989
+ "app/styles/globals.css",
7031
6990
  "src/app/globals.css",
6991
+ "src/app/global.css",
6992
+ "src/global.css",
7032
6993
  "src/index.css",
7033
6994
  "src/styles/globals.css",
7034
- "styles/globals.css"
6995
+ "src/styles/index.css",
6996
+ "styles/globals.css",
6997
+ "styles/index.css"
7035
6998
  ];
7036
6999
  var WORKSPACE_ROOT_FILES = [
7037
7000
  "pnpm-workspace.yaml",
@@ -7110,12 +7073,13 @@ var isInsideIconFactoryPath = (node) => {
7110
7073
  return false;
7111
7074
  };
7112
7075
  var hasMarkerAt = (dir) => {
7113
- for (const rel of DETECTION_FILES) {
7076
+ if (PRESENCE_MARKERS.some((rel) => (0, import_fs.existsSync)((0, import_path.join)(dir, rel)))) return true;
7077
+ for (const rel of CSS_DETECTION_FILES) {
7114
7078
  const candidate = (0, import_path.join)(dir, rel);
7115
7079
  if (!(0, import_fs.existsSync)(candidate)) continue;
7116
- if (CONFIG_IS_SUFFICIENT.has(rel)) return true;
7117
7080
  try {
7118
- if (SEMANTIC_TOKEN_RE.test((0, import_fs.readFileSync)(candidate, "utf8"))) return true;
7081
+ const css = (0, import_fs.readFileSync)(candidate, "utf8");
7082
+ if (SEMANTIC_TOKEN_RE.test(css) || THEME_BLOCK_RE.test(css)) return true;
7119
7083
  } catch {
7120
7084
  }
7121
7085
  }
@@ -8577,32 +8541,6 @@ var prefer_zod_infer_default = createRule({
8577
8541
 
8578
8542
  // src/rules/require-assert-never.ts
8579
8543
  var import_utils54 = require("@typescript-eslint/utils");
8580
- var isAssertNeverCall = (expression) => {
8581
- if (expression.type !== import_utils54.AST_NODE_TYPES.CallExpression) return false;
8582
- const callee = expression.callee;
8583
- if (callee.type === import_utils54.AST_NODE_TYPES.Identifier) {
8584
- return callee.name === "assertNever";
8585
- }
8586
- if (callee.type === import_utils54.AST_NODE_TYPES.MemberExpression && !callee.computed && callee.property.type === import_utils54.AST_NODE_TYPES.Identifier) {
8587
- return callee.property.name === "assertNever";
8588
- }
8589
- return false;
8590
- };
8591
- var statementContainsAssertNever = (statement) => {
8592
- if (statement.type === import_utils54.AST_NODE_TYPES.ExpressionStatement) {
8593
- return isAssertNeverCall(statement.expression);
8594
- }
8595
- if (statement.type === import_utils54.AST_NODE_TYPES.ThrowStatement) {
8596
- return isAssertNeverCall(statement.argument);
8597
- }
8598
- if (statement.type === import_utils54.AST_NODE_TYPES.ReturnStatement) {
8599
- return statement.argument !== null && isAssertNeverCall(statement.argument);
8600
- }
8601
- if (statement.type === import_utils54.AST_NODE_TYPES.BlockStatement) {
8602
- return statement.body.some(statementContainsAssertNever);
8603
- }
8604
- return false;
8605
- };
8606
8544
  var isRuntimeHandlingStatement = (statement) => {
8607
8545
  if (statement.type === import_utils54.AST_NODE_TYPES.EmptyStatement) return false;
8608
8546
  if (statement.type === import_utils54.AST_NODE_TYPES.BlockStatement) {
@@ -8648,7 +8586,6 @@ var require_assert_never_default = createRule({
8648
8586
  if (defaultIndex === -1) return;
8649
8587
  const defaultCase = node.cases[defaultIndex];
8650
8588
  if (defaultCase === void 0) return;
8651
- if (defaultCase.consequent.some(statementContainsAssertNever)) return;
8652
8589
  if (defaultCase.consequent.some(isRuntimeHandlingStatement)) return;
8653
8590
  if (isFallthroughDefault(node, defaultIndex)) return;
8654
8591
  if (isCommentOnlyNoopDefault(defaultCase, context.sourceCode)) return;
@@ -8663,7 +8600,6 @@ var require_assert_never_default = createRule({
8663
8600
 
8664
8601
  // src/rules/require-fetch-timeout.ts
8665
8602
  var import_utils55 = require("@typescript-eslint/utils");
8666
- var CODEMOD_FIXTURE_RE = /[\\/]__testfixtures__[\\/]/;
8667
8603
  var GLOBAL_OBJECTS2 = /* @__PURE__ */ new Set([
8668
8604
  "globalThis",
8669
8605
  "window",
@@ -8724,7 +8660,7 @@ var require_fetch_timeout_default = createRule({
8724
8660
  },
8725
8661
  defaultOptions: [{}],
8726
8662
  create(context, [optionsArg]) {
8727
- if (isTestFile(context.filename) || isScriptFile(context.filename) || CODEMOD_FIXTURE_RE.test(context.filename)) {
8663
+ if (isTestFile(context.filename) || isScriptFile(context.filename)) {
8728
8664
  return {};
8729
8665
  }
8730
8666
  const allowIn = optionsArg?.allowIn ?? [];
@@ -9383,7 +9319,7 @@ var rules = {
9383
9319
  };
9384
9320
  var meta = {
9385
9321
  name: "@sarj/eslint-plugin",
9386
- version: "9.1.0"
9322
+ version: "9.2.0"
9387
9323
  };
9388
9324
  var recommendedRules = {
9389
9325
  "@sarj/enforce-file-structure": "warn",