@next-vibe/checker 1.0.13 → 1.0.15
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/bin/vibe-runtime.js +5 -4
- package/.dist/bin/vibe-runtime.js.map +4 -4
- package/.dist/oxlint-plugins/i18n.js +381 -4
- package/.dist/oxlint-plugins/jsx-capitalization.js +460 -4
- package/.dist/oxlint-plugins/restricted-syntax.js +409 -4
- package/package.json +1 -1
- package/src/app/api/[locale]/system/builder/definition.ts +1 -1
- package/src/app/api/[locale]/system/builder/repository/bun-compiler.ts +4 -2
- package/src/app/api/[locale]/system/check/test-project/bun.lock +2 -2
- package/src/app/api/[locale]/system/check/test-project/package.json +1 -1
- package/.dist/oxlint-plugins/i18n.js.map +0 -1
- package/.dist/oxlint-plugins/jsx-capitalization.js.map +0 -1
- package/.dist/oxlint-plugins/restricted-syntax.js.map +0 -1
|
@@ -1,4 +1,460 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __moduleCache = /* @__PURE__ */ new WeakMap;
|
|
7
|
+
var __toCommonJS = (from) => {
|
|
8
|
+
var entry = __moduleCache.get(from), desc;
|
|
9
|
+
if (entry)
|
|
10
|
+
return entry;
|
|
11
|
+
entry = __defProp({}, "__esModule", { value: true });
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function")
|
|
13
|
+
__getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
|
|
14
|
+
get: () => from[key],
|
|
15
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
16
|
+
}));
|
|
17
|
+
__moduleCache.set(from, entry);
|
|
18
|
+
return entry;
|
|
19
|
+
};
|
|
20
|
+
var __export = (target, all) => {
|
|
21
|
+
for (var name in all)
|
|
22
|
+
__defProp(target, name, {
|
|
23
|
+
get: all[name],
|
|
24
|
+
enumerable: true,
|
|
25
|
+
configurable: true,
|
|
26
|
+
set: (newValue) => all[name] = () => newValue
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
30
|
+
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
31
|
+
|
|
32
|
+
// src/app/api/[locale]/system/check/oxlint/plugins/shared/config-loader.ts
|
|
33
|
+
var exports_config_loader = {};
|
|
34
|
+
__export(exports_config_loader, {
|
|
35
|
+
loadPluginConfig: () => loadPluginConfig,
|
|
36
|
+
getCheckConfig: () => getCheckConfig,
|
|
37
|
+
createPluginMessages: () => createPluginMessages,
|
|
38
|
+
clearConfigCache: () => clearConfigCache
|
|
39
|
+
});
|
|
40
|
+
import { existsSync } from "node:fs";
|
|
41
|
+
import { dirname, resolve } from "node:path";
|
|
42
|
+
function findProjectRoot() {
|
|
43
|
+
const cwd = process.cwd();
|
|
44
|
+
let currentDir = cwd;
|
|
45
|
+
const root = resolve("/");
|
|
46
|
+
while (currentDir !== root) {
|
|
47
|
+
const configPath = resolve(currentDir, "check.config.ts");
|
|
48
|
+
if (existsSync(configPath)) {
|
|
49
|
+
return currentDir;
|
|
50
|
+
}
|
|
51
|
+
const jsConfigPath = resolve(currentDir, "check.config.js");
|
|
52
|
+
if (existsSync(jsConfigPath)) {
|
|
53
|
+
return currentDir;
|
|
54
|
+
}
|
|
55
|
+
currentDir = dirname(currentDir);
|
|
56
|
+
}
|
|
57
|
+
return cwd;
|
|
58
|
+
}
|
|
59
|
+
function getConfigPaths() {
|
|
60
|
+
const projectRoot = findProjectRoot();
|
|
61
|
+
return [
|
|
62
|
+
resolve(projectRoot, "check.config.ts"),
|
|
63
|
+
resolve(projectRoot, "check.config.js"),
|
|
64
|
+
resolve(projectRoot, "node_modules", "next-vibe", "check.config.js"),
|
|
65
|
+
resolve(projectRoot, "node_modules", "next-vibe", "dist", "check.config.js")
|
|
66
|
+
];
|
|
67
|
+
}
|
|
68
|
+
function loadCheckConfigSync() {
|
|
69
|
+
if (configLoadAttempted) {
|
|
70
|
+
return cachedCheckConfig;
|
|
71
|
+
}
|
|
72
|
+
configLoadAttempted = true;
|
|
73
|
+
const configPaths = getConfigPaths();
|
|
74
|
+
for (const configPath of configPaths) {
|
|
75
|
+
if (!existsSync(configPath)) {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
try {
|
|
79
|
+
const configModule = __require(configPath);
|
|
80
|
+
const exportedValue = configModule.default ?? configModule.config;
|
|
81
|
+
if (!exportedValue) {
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
const config = typeof exportedValue === "function" ? exportedValue() : exportedValue;
|
|
85
|
+
cachedCheckConfig = config;
|
|
86
|
+
return config;
|
|
87
|
+
} catch {
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
function extractPluginOptions(checkConfig, pluginName) {
|
|
94
|
+
if (!checkConfig.oxlint.enabled) {
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
const rules = checkConfig.oxlint.rules;
|
|
98
|
+
if (!rules) {
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
const ruleConfig = rules[pluginName];
|
|
102
|
+
if (Array.isArray(ruleConfig) && ruleConfig.length >= 2) {
|
|
103
|
+
return ruleConfig[1];
|
|
104
|
+
}
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
function loadPluginConfig(pluginName, defaultConfig) {
|
|
108
|
+
const cached = pluginConfigCache.get(pluginName);
|
|
109
|
+
if (cached) {
|
|
110
|
+
return cached;
|
|
111
|
+
}
|
|
112
|
+
const checkConfig = loadCheckConfigSync();
|
|
113
|
+
if (checkConfig) {
|
|
114
|
+
const pluginOptions = extractPluginOptions(checkConfig, pluginName);
|
|
115
|
+
if (pluginOptions) {
|
|
116
|
+
const result2 = {
|
|
117
|
+
success: true,
|
|
118
|
+
config: pluginOptions,
|
|
119
|
+
source: "rule-config"
|
|
120
|
+
};
|
|
121
|
+
pluginConfigCache.set(pluginName, result2);
|
|
122
|
+
return result2;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
if (defaultConfig) {
|
|
126
|
+
const result2 = {
|
|
127
|
+
success: true,
|
|
128
|
+
config: defaultConfig,
|
|
129
|
+
source: "default"
|
|
130
|
+
};
|
|
131
|
+
pluginConfigCache.set(pluginName, result2);
|
|
132
|
+
return result2;
|
|
133
|
+
}
|
|
134
|
+
const result = {
|
|
135
|
+
success: false,
|
|
136
|
+
config: null,
|
|
137
|
+
source: "error",
|
|
138
|
+
error: `No configuration found for ${pluginName}`
|
|
139
|
+
};
|
|
140
|
+
pluginConfigCache.set(pluginName, result);
|
|
141
|
+
return result;
|
|
142
|
+
}
|
|
143
|
+
function getCheckConfig() {
|
|
144
|
+
return loadCheckConfigSync();
|
|
145
|
+
}
|
|
146
|
+
function clearConfigCache() {
|
|
147
|
+
cachedCheckConfig = null;
|
|
148
|
+
configLoadAttempted = false;
|
|
149
|
+
pluginConfigCache.clear();
|
|
150
|
+
}
|
|
151
|
+
function createPluginMessages(defaults, overrides) {
|
|
152
|
+
return { ...defaults, ...overrides };
|
|
153
|
+
}
|
|
154
|
+
var cachedCheckConfig = null, configLoadAttempted = false, pluginConfigCache;
|
|
155
|
+
var init_config_loader = __esm(() => {
|
|
156
|
+
pluginConfigCache = new Map;
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
// src/app/api/[locale]/system/check/oxlint/plugins/jsx-capitalization/src/index.ts
|
|
160
|
+
var DEFAULT_CONFIG = {
|
|
161
|
+
excludedPaths: [],
|
|
162
|
+
excludedFilePatterns: [".email.tsx", ".test.tsx", ".spec.tsx"],
|
|
163
|
+
typographyElements: [
|
|
164
|
+
"p",
|
|
165
|
+
"span",
|
|
166
|
+
"h1",
|
|
167
|
+
"h2",
|
|
168
|
+
"h3",
|
|
169
|
+
"h4",
|
|
170
|
+
"h5",
|
|
171
|
+
"h6",
|
|
172
|
+
"strong",
|
|
173
|
+
"em",
|
|
174
|
+
"small",
|
|
175
|
+
"blockquote",
|
|
176
|
+
"code",
|
|
177
|
+
"pre"
|
|
178
|
+
],
|
|
179
|
+
standaloneElements: [
|
|
180
|
+
"div",
|
|
181
|
+
"button",
|
|
182
|
+
"input",
|
|
183
|
+
"label",
|
|
184
|
+
"form",
|
|
185
|
+
"table",
|
|
186
|
+
"ul",
|
|
187
|
+
"ol",
|
|
188
|
+
"li"
|
|
189
|
+
],
|
|
190
|
+
svgElements: [
|
|
191
|
+
"svg",
|
|
192
|
+
"path",
|
|
193
|
+
"circle",
|
|
194
|
+
"rect",
|
|
195
|
+
"line",
|
|
196
|
+
"polygon",
|
|
197
|
+
"polyline",
|
|
198
|
+
"ellipse",
|
|
199
|
+
"g"
|
|
200
|
+
],
|
|
201
|
+
imageElements: ["img", "picture", "source", "video", "audio"],
|
|
202
|
+
commonUiElements: [
|
|
203
|
+
"nav",
|
|
204
|
+
"header",
|
|
205
|
+
"footer",
|
|
206
|
+
"main",
|
|
207
|
+
"section",
|
|
208
|
+
"article",
|
|
209
|
+
"aside"
|
|
210
|
+
]
|
|
211
|
+
};
|
|
212
|
+
var DEFAULT_MESSAGES = {
|
|
213
|
+
anchorTag: 'Use platform-independent <Link> component instead of <a>. import { Link } from "next-vibe-ui/ui/link";',
|
|
214
|
+
typographyElement: 'Use typography component <{capitalizedName}> instead of <{elementName}>. import { {capitalizedName} } from "next-vibe-ui/ui/typography";',
|
|
215
|
+
standaloneElement: 'Use platform-independent <{capitalizedName}> component instead of <{elementName}>. import { {capitalizedName} } from "next-vibe-ui/ui/{elementName}";',
|
|
216
|
+
svgElement: "SVG element <{elementName}> detected. For icons, use components from next-vibe-ui/ui/icons instead. For custom SVG, create platform-independent components using react-native-svg that work on both web and native.",
|
|
217
|
+
imageElement: 'Use platform-independent <Image> component instead of <{elementName}>. import { Image } from "next-vibe-ui/ui/image";',
|
|
218
|
+
commonUiElement: 'Use platform-independent <{capitalizedName}> component instead of <{elementName}>. import { {capitalizedName} } from "next-vibe-ui/ui/{elementName}";',
|
|
219
|
+
genericElement: "Lowercase element <{elementName}> detected. Create platform-independent components: 1) Create next-vibe-ui/web/ui/{elementName}.tsx for web, 2) Create next-vibe-ui/native/ui/{elementName}.tsx for React Native, or 3) Use an existing component if available."
|
|
220
|
+
};
|
|
221
|
+
var configLoader = null;
|
|
222
|
+
var cachedConfig = null;
|
|
223
|
+
var cachedMessages = null;
|
|
224
|
+
function getConfigLoader() {
|
|
225
|
+
if (configLoader) {
|
|
226
|
+
return configLoader;
|
|
227
|
+
}
|
|
228
|
+
try {
|
|
229
|
+
configLoader = (init_config_loader(), __toCommonJS(exports_config_loader));
|
|
230
|
+
return configLoader;
|
|
231
|
+
} catch {
|
|
232
|
+
return null;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
function loadJsxCapitalizationConfig() {
|
|
236
|
+
if (cachedConfig !== null) {
|
|
237
|
+
return cachedConfig;
|
|
238
|
+
}
|
|
239
|
+
const loader = getConfigLoader();
|
|
240
|
+
if (loader) {
|
|
241
|
+
const result = loader.loadPluginConfig("oxlint-plugin-jsx-capitalization/jsx-capitalization", DEFAULT_CONFIG);
|
|
242
|
+
cachedConfig = result.config ?? DEFAULT_CONFIG;
|
|
243
|
+
} else {
|
|
244
|
+
cachedConfig = loadConfigFallback();
|
|
245
|
+
}
|
|
246
|
+
return cachedConfig;
|
|
247
|
+
}
|
|
248
|
+
function loadConfigFallback() {
|
|
249
|
+
try {
|
|
250
|
+
const config = __require(`${process.cwd()}/check.config.ts`);
|
|
251
|
+
const checkConfig = config.default ?? config;
|
|
252
|
+
const exported = typeof checkConfig === "function" ? checkConfig() : checkConfig;
|
|
253
|
+
const ruleConfig = exported?.oxlint?.rules?.["oxlint-plugin-jsx-capitalization/jsx-capitalization"];
|
|
254
|
+
if (Array.isArray(ruleConfig) && ruleConfig[1]) {
|
|
255
|
+
return ruleConfig[1];
|
|
256
|
+
}
|
|
257
|
+
} catch {}
|
|
258
|
+
return DEFAULT_CONFIG;
|
|
259
|
+
}
|
|
260
|
+
function getMessages() {
|
|
261
|
+
if (cachedMessages !== null) {
|
|
262
|
+
return cachedMessages;
|
|
263
|
+
}
|
|
264
|
+
cachedMessages = DEFAULT_MESSAGES;
|
|
265
|
+
return cachedMessages;
|
|
266
|
+
}
|
|
267
|
+
function formatMessage(template, elementName, capitalizedName) {
|
|
268
|
+
return template.replaceAll("{elementName}", elementName).replaceAll("{capitalizedName}", capitalizedName);
|
|
269
|
+
}
|
|
270
|
+
function isLowercaseElement(elementName) {
|
|
271
|
+
const firstChar = elementName.charAt(0);
|
|
272
|
+
return firstChar === firstChar.toLowerCase() && firstChar !== firstChar.toUpperCase();
|
|
273
|
+
}
|
|
274
|
+
function isExcludedPath(context, excludedPaths, excludedFilePatterns) {
|
|
275
|
+
let filename = "";
|
|
276
|
+
if (typeof context.getFilename === "function") {
|
|
277
|
+
filename = context.getFilename();
|
|
278
|
+
} else if (typeof context.filename === "string") {
|
|
279
|
+
filename = context.filename;
|
|
280
|
+
}
|
|
281
|
+
if (!filename) {
|
|
282
|
+
return false;
|
|
283
|
+
}
|
|
284
|
+
const normalizedPath = filename.replaceAll("\\", "/");
|
|
285
|
+
for (const excludedPath of excludedPaths) {
|
|
286
|
+
if (normalizedPath.includes(excludedPath)) {
|
|
287
|
+
return true;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
for (const pattern of excludedFilePatterns) {
|
|
291
|
+
if (normalizedPath.includes(pattern) || normalizedPath.endsWith(pattern)) {
|
|
292
|
+
return true;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
return false;
|
|
296
|
+
}
|
|
297
|
+
function hasDisableComment(context, node) {
|
|
298
|
+
const getComments = context.getCommentsBefore ?? context.sourceCode?.getCommentsBefore;
|
|
299
|
+
if (typeof getComments !== "function") {
|
|
300
|
+
return false;
|
|
301
|
+
}
|
|
302
|
+
try {
|
|
303
|
+
const comments = getComments(node);
|
|
304
|
+
if (!comments || !Array.isArray(comments)) {
|
|
305
|
+
return false;
|
|
306
|
+
}
|
|
307
|
+
for (const comment of comments) {
|
|
308
|
+
if (!comment || typeof comment.value !== "string") {
|
|
309
|
+
continue;
|
|
310
|
+
}
|
|
311
|
+
const commentText = comment.value.trim();
|
|
312
|
+
if ((commentText.includes("eslint-disable-next-line") || commentText.includes("oxlint-disable-next-line")) && (commentText.includes("jsx-capitalization") || commentText.includes("no-lowercase-jsx"))) {
|
|
313
|
+
return true;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
} catch {
|
|
317
|
+
return false;
|
|
318
|
+
}
|
|
319
|
+
return false;
|
|
320
|
+
}
|
|
321
|
+
function getElementName(node) {
|
|
322
|
+
const name = node.name;
|
|
323
|
+
if (!name) {
|
|
324
|
+
return null;
|
|
325
|
+
}
|
|
326
|
+
if (name.type === "JSXIdentifier") {
|
|
327
|
+
return name.name;
|
|
328
|
+
}
|
|
329
|
+
if (name.type === "JSXMemberExpression") {
|
|
330
|
+
return null;
|
|
331
|
+
}
|
|
332
|
+
if (name.type === "JSXNamespacedName") {
|
|
333
|
+
return null;
|
|
334
|
+
}
|
|
335
|
+
return null;
|
|
336
|
+
}
|
|
337
|
+
function capitalize(str) {
|
|
338
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
339
|
+
}
|
|
340
|
+
function getElementSets(context) {
|
|
341
|
+
const ruleOptions = context.options?.[0];
|
|
342
|
+
if (ruleOptions) {
|
|
343
|
+
return {
|
|
344
|
+
typography: new Set(ruleOptions.typographyElements ?? []),
|
|
345
|
+
standalone: new Set(ruleOptions.standaloneElements ?? []),
|
|
346
|
+
svg: new Set(ruleOptions.svgElements ?? []),
|
|
347
|
+
image: new Set(ruleOptions.imageElements ?? []),
|
|
348
|
+
commonUi: new Set(ruleOptions.commonUiElements ?? [])
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
const config = loadJsxCapitalizationConfig();
|
|
352
|
+
return {
|
|
353
|
+
typography: new Set(config.typographyElements ?? []),
|
|
354
|
+
standalone: new Set(config.standaloneElements ?? []),
|
|
355
|
+
svg: new Set(config.svgElements ?? []),
|
|
356
|
+
image: new Set(config.imageElements ?? []),
|
|
357
|
+
commonUi: new Set(config.commonUiElements ?? [])
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
function getExcludedPaths(context) {
|
|
361
|
+
const ruleOptions = context.options?.[0];
|
|
362
|
+
if (ruleOptions) {
|
|
363
|
+
return {
|
|
364
|
+
excludedPaths: ruleOptions.excludedPaths ?? [],
|
|
365
|
+
excludedFilePatterns: ruleOptions.excludedFilePatterns ?? []
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
const config = loadJsxCapitalizationConfig();
|
|
369
|
+
return {
|
|
370
|
+
excludedPaths: config.excludedPaths ?? [],
|
|
371
|
+
excludedFilePatterns: config.excludedFilePatterns ?? []
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
function getErrorMessage(elementName, elementSets) {
|
|
375
|
+
const capitalizedName = capitalize(elementName);
|
|
376
|
+
const messages = getMessages();
|
|
377
|
+
if (elementName === "a") {
|
|
378
|
+
return messages.anchorTag;
|
|
379
|
+
}
|
|
380
|
+
if (elementSets.typography.has(elementName)) {
|
|
381
|
+
return formatMessage(messages.typographyElement, elementName, capitalizedName);
|
|
382
|
+
}
|
|
383
|
+
if (elementSets.standalone.has(elementName)) {
|
|
384
|
+
return formatMessage(messages.standaloneElement, elementName, capitalizedName);
|
|
385
|
+
}
|
|
386
|
+
if (elementSets.svg.has(elementName)) {
|
|
387
|
+
return formatMessage(messages.svgElement, elementName, capitalizedName);
|
|
388
|
+
}
|
|
389
|
+
if (elementSets.image.has(elementName)) {
|
|
390
|
+
return formatMessage(messages.imageElement, elementName, capitalizedName);
|
|
391
|
+
}
|
|
392
|
+
if (elementSets.commonUi.has(elementName)) {
|
|
393
|
+
return formatMessage(messages.commonUiElement, elementName, capitalizedName);
|
|
394
|
+
}
|
|
395
|
+
return formatMessage(messages.genericElement, elementName, capitalizedName);
|
|
396
|
+
}
|
|
397
|
+
var jsxCapitalizationRule = {
|
|
398
|
+
meta: {
|
|
399
|
+
type: "problem",
|
|
400
|
+
docs: {
|
|
401
|
+
description: "Enforces the use of capitalized JSX components instead of lowercase HTML elements",
|
|
402
|
+
category: "Best Practices",
|
|
403
|
+
recommended: true
|
|
404
|
+
},
|
|
405
|
+
schema: [
|
|
406
|
+
{
|
|
407
|
+
type: "object",
|
|
408
|
+
properties: {
|
|
409
|
+
excludedPaths: { type: "array", items: { type: "string" } },
|
|
410
|
+
excludedFilePatterns: { type: "array", items: { type: "string" } },
|
|
411
|
+
typographyElements: { type: "array", items: { type: "string" } },
|
|
412
|
+
standaloneElements: { type: "array", items: { type: "string" } },
|
|
413
|
+
svgElements: { type: "array", items: { type: "string" } },
|
|
414
|
+
imageElements: { type: "array", items: { type: "string" } },
|
|
415
|
+
commonUiElements: { type: "array", items: { type: "string" } }
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
]
|
|
419
|
+
},
|
|
420
|
+
create(context) {
|
|
421
|
+
const { excludedPaths, excludedFilePatterns } = getExcludedPaths(context);
|
|
422
|
+
const elementSets = getElementSets(context);
|
|
423
|
+
const isExcluded = isExcludedPath(context, excludedPaths, excludedFilePatterns);
|
|
424
|
+
return {
|
|
425
|
+
JSXOpeningElement(node) {
|
|
426
|
+
if (isExcluded) {
|
|
427
|
+
return;
|
|
428
|
+
}
|
|
429
|
+
if (hasDisableComment(context, node)) {
|
|
430
|
+
return;
|
|
431
|
+
}
|
|
432
|
+
const openingElement = node;
|
|
433
|
+
const elementName = getElementName(openingElement);
|
|
434
|
+
if (!elementName) {
|
|
435
|
+
return;
|
|
436
|
+
}
|
|
437
|
+
if (isLowercaseElement(elementName)) {
|
|
438
|
+
context.report({
|
|
439
|
+
node,
|
|
440
|
+
message: getErrorMessage(elementName, elementSets)
|
|
441
|
+
});
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
};
|
|
445
|
+
}
|
|
446
|
+
};
|
|
447
|
+
var src_default = {
|
|
448
|
+
meta: {
|
|
449
|
+
name: "oxlint-plugin-jsx-capitalization",
|
|
450
|
+
version: "1.0.0"
|
|
451
|
+
},
|
|
452
|
+
rules: {
|
|
453
|
+
"jsx-capitalization": jsxCapitalizationRule
|
|
454
|
+
}
|
|
455
|
+
};
|
|
456
|
+
export {
|
|
457
|
+
DEFAULT_MESSAGES as defaultMessages,
|
|
458
|
+
DEFAULT_CONFIG as defaultConfig,
|
|
459
|
+
src_default as default
|
|
460
|
+
};
|