eslint-plugin-react-naming-convention 1.29.1-next.3 → 1.29.1-next.5

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.js CHANGED
@@ -5,8 +5,8 @@ var core = require('@eslint-react/core');
5
5
  var eff = require('@eslint-react/eff');
6
6
  var JSX = require('@eslint-react/jsx');
7
7
  var shared = require('@eslint-react/shared');
8
- var tsPattern = require('ts-pattern');
9
8
  var types = require('@typescript-eslint/types');
9
+ var tsPattern = require('ts-pattern');
10
10
  var path = require('path');
11
11
  var stringTs = require('string-ts');
12
12
 
@@ -54,7 +54,7 @@ var rules = {
54
54
 
55
55
  // package.json
56
56
  var name2 = "eslint-plugin-react-naming-convention";
57
- var version = "1.29.1-next.3";
57
+ var version = "1.29.1-next.5";
58
58
  var createRule = shared.createRuleForPlugin("naming-convention");
59
59
 
60
60
  // src/rules/component-name.ts
@@ -97,43 +97,33 @@ var schema = [
97
97
  ];
98
98
  function normalizeOptions(options) {
99
99
  const opts = options[0];
100
- if (opts == null) {
101
- return defaultOptions[0];
102
- }
103
- if (typeof opts === "string") {
104
- return { ...defaultOptions[0], rule: opts };
105
- }
100
+ const defaultOpts = defaultOptions[0];
101
+ if (opts == null) return defaultOpts;
106
102
  return {
107
- ...opts,
108
- excepts: opts.excepts?.map((pattern) => new RegExp(pattern, "u")) ?? []
103
+ ...defaultOpts,
104
+ ...typeof opts === "string" ? { rule: opts } : {
105
+ ...opts,
106
+ excepts: opts.excepts?.map((pattern) => new RegExp(pattern, "u")) ?? []
107
+ }
109
108
  };
110
109
  }
111
110
  function getViolationMessage(name3, options) {
112
111
  if (name3 == null) return eff._;
113
- const {
114
- allowAllCaps = false,
115
- allowLeadingUnderscore = false,
116
- allowNamespace = false,
117
- excepts,
118
- rule
119
- } = options;
120
- if (excepts.some((regex) => regex.test(name3))) {
121
- return eff._;
122
- }
123
- let normalized = name3.normalize("NFKD").replace(/[\u0300-\u036F]/g, "");
124
- normalized = normalized.split(".").at(-1) ?? normalized;
125
- if (allowNamespace) {
126
- normalized = normalized.replace(":", "");
127
- }
128
- if (allowLeadingUnderscore) {
129
- normalized = normalized.replace(/^_/, "");
112
+ if (options.excepts.some((regex) => regex.test(name3))) return eff._;
113
+ let normalized = name3.split(".").at(-1) ?? name3;
114
+ if (options.allowNamespace) normalized = normalized.replace(":", "");
115
+ if (options.allowLeadingUnderscore) normalized = normalized.replace(/^_/, "");
116
+ switch (options.rule) {
117
+ case "CONSTANT_CASE":
118
+ return shared.RE_CONSTANT_CASE.test(normalized) ? eff._ : "useConstantCase";
119
+ case "PascalCase":
120
+ if (normalized.length > 3 && /^[A-Z]+$/u.test(normalized)) {
121
+ return options.allowAllCaps ? eff._ : "usePascalCase";
122
+ }
123
+ return shared.RE_PASCAL_CASE.test(normalized) ? eff._ : "usePascalCase";
124
+ default:
125
+ return eff._;
130
126
  }
131
- return tsPattern.match(rule).with("CONSTANT_CASE", () => shared.RE_CONSTANT_CASE.test(normalized) ? eff._ : "useConstantCase").with("PascalCase", () => {
132
- if (normalized.length > 3 && /^[A-Z]+$/u.test(normalized)) {
133
- return allowAllCaps ? eff._ : "usePascalCase";
134
- }
135
- return shared.RE_PASCAL_CASE.test(normalized) ? eff._ : "usePascalCase";
136
- }).otherwise(() => eff._);
137
127
  }
138
128
  var component_name_default = createRule({
139
129
  meta: {
@@ -212,10 +202,10 @@ var context_name_default = createRule({
212
202
  meta: {
213
203
  type: "problem",
214
204
  docs: {
215
- description: "enforce context name to end with 'Context'"
205
+ description: "enforces context name to be a valid component name with the suffix 'Context'"
216
206
  },
217
207
  messages: {
218
- contextName: "Context name must end with 'Context'."
208
+ contextName: "In React 19, you can render '<Context>' as a provider instead of '<Context.Provider>', it's name must be a valid component name with the suffix 'Context'."
219
209
  },
220
210
  schema: []
221
211
  },
@@ -228,8 +218,7 @@ var context_name_default = createRule({
228
218
  const id = core.getInstanceId(node);
229
219
  if (id == null) return;
230
220
  const name3 = tsPattern.match(id).with({ type: types.AST_NODE_TYPES.Identifier, name: tsPattern.P.select() }, eff.identity).with({ type: types.AST_NODE_TYPES.MemberExpression, property: { name: tsPattern.P.select(tsPattern.P.string) } }, eff.identity).otherwise(() => eff._);
231
- if (name3 == null) return;
232
- if (name3.endsWith("Context")) return;
221
+ if (name3 != null && /^[A-Z]/u.test(name3) && name3.endsWith("Context")) return;
233
222
  context.report({
234
223
  messageId: "contextName",
235
224
  node: id
package/dist/index.mjs CHANGED
@@ -2,9 +2,9 @@ import * as AST from '@eslint-react/ast';
2
2
  import { useComponentCollector, useComponentCollectorLegacy, isCreateContextCall, getInstanceId } from '@eslint-react/core';
3
3
  import { identity, _, isObject } from '@eslint-react/eff';
4
4
  import * as JSX from '@eslint-react/jsx';
5
- import { createRuleForPlugin, RE_CONSTANT_CASE, RE_PASCAL_CASE, RE_CAMEL_CASE, RE_KEBAB_CASE, RE_SNAKE_CASE } from '@eslint-react/shared';
6
- import { match, P } from 'ts-pattern';
5
+ import { createRuleForPlugin, RE_PASCAL_CASE, RE_CONSTANT_CASE, RE_CAMEL_CASE, RE_KEBAB_CASE, RE_SNAKE_CASE } from '@eslint-react/shared';
7
6
  import { AST_NODE_TYPES } from '@typescript-eslint/types';
7
+ import { match, P } from 'ts-pattern';
8
8
  import path from 'node:path';
9
9
  import { snakeCase, pascalCase, camelCase, kebabCase } from 'string-ts';
10
10
 
@@ -28,7 +28,7 @@ var rules = {
28
28
 
29
29
  // package.json
30
30
  var name2 = "eslint-plugin-react-naming-convention";
31
- var version = "1.29.1-next.3";
31
+ var version = "1.29.1-next.5";
32
32
  var createRule = createRuleForPlugin("naming-convention");
33
33
 
34
34
  // src/rules/component-name.ts
@@ -71,43 +71,33 @@ var schema = [
71
71
  ];
72
72
  function normalizeOptions(options) {
73
73
  const opts = options[0];
74
- if (opts == null) {
75
- return defaultOptions[0];
76
- }
77
- if (typeof opts === "string") {
78
- return { ...defaultOptions[0], rule: opts };
79
- }
74
+ const defaultOpts = defaultOptions[0];
75
+ if (opts == null) return defaultOpts;
80
76
  return {
81
- ...opts,
82
- excepts: opts.excepts?.map((pattern) => new RegExp(pattern, "u")) ?? []
77
+ ...defaultOpts,
78
+ ...typeof opts === "string" ? { rule: opts } : {
79
+ ...opts,
80
+ excepts: opts.excepts?.map((pattern) => new RegExp(pattern, "u")) ?? []
81
+ }
83
82
  };
84
83
  }
85
84
  function getViolationMessage(name3, options) {
86
85
  if (name3 == null) return _;
87
- const {
88
- allowAllCaps = false,
89
- allowLeadingUnderscore = false,
90
- allowNamespace = false,
91
- excepts,
92
- rule
93
- } = options;
94
- if (excepts.some((regex) => regex.test(name3))) {
95
- return _;
96
- }
97
- let normalized = name3.normalize("NFKD").replace(/[\u0300-\u036F]/g, "");
98
- normalized = normalized.split(".").at(-1) ?? normalized;
99
- if (allowNamespace) {
100
- normalized = normalized.replace(":", "");
101
- }
102
- if (allowLeadingUnderscore) {
103
- normalized = normalized.replace(/^_/, "");
86
+ if (options.excepts.some((regex) => regex.test(name3))) return _;
87
+ let normalized = name3.split(".").at(-1) ?? name3;
88
+ if (options.allowNamespace) normalized = normalized.replace(":", "");
89
+ if (options.allowLeadingUnderscore) normalized = normalized.replace(/^_/, "");
90
+ switch (options.rule) {
91
+ case "CONSTANT_CASE":
92
+ return RE_CONSTANT_CASE.test(normalized) ? _ : "useConstantCase";
93
+ case "PascalCase":
94
+ if (normalized.length > 3 && /^[A-Z]+$/u.test(normalized)) {
95
+ return options.allowAllCaps ? _ : "usePascalCase";
96
+ }
97
+ return RE_PASCAL_CASE.test(normalized) ? _ : "usePascalCase";
98
+ default:
99
+ return _;
104
100
  }
105
- return match(rule).with("CONSTANT_CASE", () => RE_CONSTANT_CASE.test(normalized) ? _ : "useConstantCase").with("PascalCase", () => {
106
- if (normalized.length > 3 && /^[A-Z]+$/u.test(normalized)) {
107
- return allowAllCaps ? _ : "usePascalCase";
108
- }
109
- return RE_PASCAL_CASE.test(normalized) ? _ : "usePascalCase";
110
- }).otherwise(() => _);
111
101
  }
112
102
  var component_name_default = createRule({
113
103
  meta: {
@@ -186,10 +176,10 @@ var context_name_default = createRule({
186
176
  meta: {
187
177
  type: "problem",
188
178
  docs: {
189
- description: "enforce context name to end with 'Context'"
179
+ description: "enforces context name to be a valid component name with the suffix 'Context'"
190
180
  },
191
181
  messages: {
192
- contextName: "Context name must end with 'Context'."
182
+ contextName: "In React 19, you can render '<Context>' as a provider instead of '<Context.Provider>', it's name must be a valid component name with the suffix 'Context'."
193
183
  },
194
184
  schema: []
195
185
  },
@@ -202,8 +192,7 @@ var context_name_default = createRule({
202
192
  const id = getInstanceId(node);
203
193
  if (id == null) return;
204
194
  const name3 = match(id).with({ type: AST_NODE_TYPES.Identifier, name: P.select() }, identity).with({ type: AST_NODE_TYPES.MemberExpression, property: { name: P.select(P.string) } }, identity).otherwise(() => _);
205
- if (name3 == null) return;
206
- if (name3.endsWith("Context")) return;
195
+ if (name3 != null && /^[A-Z]/u.test(name3) && name3.endsWith("Context")) return;
207
196
  context.report({
208
197
  messageId: "contextName",
209
198
  node: id
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eslint-plugin-react-naming-convention",
3
- "version": "1.29.1-next.3",
3
+ "version": "1.29.1-next.5",
4
4
  "description": "ESLint React's ESLint plugin for naming convention related rules.",
5
5
  "keywords": [
6
6
  "react",
@@ -49,12 +49,12 @@
49
49
  "@typescript-eslint/utils": "^8.25.0",
50
50
  "string-ts": "^2.2.1",
51
51
  "ts-pattern": "^5.6.2",
52
- "@eslint-react/ast": "1.29.1-next.3",
53
- "@eslint-react/jsx": "1.29.1-next.3",
54
- "@eslint-react/core": "1.29.1-next.3",
55
- "@eslint-react/var": "1.29.1-next.3",
56
- "@eslint-react/shared": "1.29.1-next.3",
57
- "@eslint-react/eff": "1.29.1-next.3"
52
+ "@eslint-react/ast": "1.29.1-next.5",
53
+ "@eslint-react/eff": "1.29.1-next.5",
54
+ "@eslint-react/shared": "1.29.1-next.5",
55
+ "@eslint-react/jsx": "1.29.1-next.5",
56
+ "@eslint-react/core": "1.29.1-next.5",
57
+ "@eslint-react/var": "1.29.1-next.5"
58
58
  },
59
59
  "devDependencies": {
60
60
  "@types/react": "^19.0.10",