@carlesandres/component-identity 0.1.0 → 0.1.1

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/README.md CHANGED
@@ -20,10 +20,11 @@ npm install --save-dev @carlesandres/component-identity
20
20
 
21
21
  ## Use
22
22
 
23
- Add a config file:
23
+ After installing the package, add a config file:
24
24
 
25
25
  ```sh
26
26
  npx component-identity init
27
+ npx component-identity init --preset next
27
28
  ```
28
29
 
29
30
  Run the audit:
@@ -39,6 +40,12 @@ npx component-identity report
39
40
  npx component-identity audit --json
40
41
  ```
41
42
 
43
+ For one-off use without installing first, use the scoped package name:
44
+
45
+ ```sh
46
+ npx @carlesandres/component-identity audit
47
+ ```
48
+
42
49
  The audit exits with code `1` when violations are found, so it can be used directly in CI.
43
50
 
44
51
  ```json
@@ -49,9 +56,9 @@ The audit exits with code `1` when violations are found, so it can be used direc
49
56
  }
50
57
  ```
51
58
 
52
- ## What v0.1 Checks
59
+ ## What It Checks
53
60
 
54
- The MVP checks exported React components that return a root host DOM element:
61
+ The MVP checks named exported React components that return a root host DOM element:
55
62
 
56
63
  ```tsx
57
64
  export function UserMenu() {
@@ -63,7 +70,14 @@ export const AccountCard = () => {
63
70
  };
64
71
  ```
65
72
 
66
- It also supports simple `forwardRef` wrappers:
73
+ It supports exported components declared as:
74
+
75
+ - `export function ComponentName() { ... }`
76
+ - `export const ComponentName = () => ...`
77
+ - `export default function ComponentName() { ... }`
78
+ - `const ComponentName = () => ...; export default ComponentName`
79
+ - `const ComponentName = () => ...; export { ComponentName }`
80
+ - `memo(ComponentName)` and nested `forwardRef(memo(...))` wrappers
67
81
 
68
82
  ```tsx
69
83
  export const Button = forwardRef<HTMLButtonElement>((props, ref) => {
@@ -71,7 +85,17 @@ export const Button = forwardRef<HTMLButtonElement>((props, ref) => {
71
85
  });
72
86
  ```
73
87
 
74
- The MVP intentionally ignores components whose root is another custom component, a fragment, a portal, or an `asChild` pattern.
88
+ Fragments are audited through their first meaningful JSX DOM child. Empty fragments are reported as skipped with a `fragment-root` reason.
89
+
90
+ It ignores private components and reports skipped exported components whose root is another custom component or a non-JSX expression such as a portal call. Custom component roots can be treated as pass-through wrappers with `passThroughComponents`.
91
+
92
+ ## Autofix
93
+
94
+ Simple missing or mismatched static root attributes can be fixed in place:
95
+
96
+ ```sh
97
+ npx component-identity audit --fix
98
+ ```
75
99
 
76
100
  ## Config
77
101
 
@@ -93,11 +117,18 @@ The MVP intentionally ignores components whose root is another custom component,
93
117
  "**/*.d.ts",
94
118
  "**/node_modules/**",
95
119
  "**/dist/**"
96
- ]
120
+ ],
121
+ "excludeFiles": [],
122
+ "excludeComponents": [],
123
+ "passThroughComponents": []
97
124
  }
98
125
  ```
99
126
 
100
- Use `--config` to point at another config file and `--cwd` to audit a different directory.
127
+ Use `--config` to point at another config file and `--cwd` to audit a different directory. `excludeFiles` is an alias for additional file globs; `excludeComponents` accepts exact component names or `*` wildcards.
128
+
129
+ Use `"preset": "next"`, `npx component-identity init --preset next`, or the exported `nextConfig` for Next.js projects. It extends the default excludes with app/page entry files such as pages, layouts, loading, error, and not-found files, while keeping tests, stories, and `components/ui` excluded.
130
+
131
+ JSON reports include coverage fields: `componentsFound`, `componentsChecked`, `components`, `auditedComponents`, `skippedComponents`, `fixesApplied`, and `violations`.
101
132
 
102
133
  ## Library API
103
134
 
@@ -1 +1 @@
1
- {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAsC,MAAM,YAAY,CAAC;AAOhG,wBAAgB,KAAK,CAAC,OAAO,GAAE,YAAiB,GAAG,WAAW,CAsC7D"}
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAwD,MAAM,YAAY,CAAC;AAiBlH,wBAAgB,KAAK,CAAC,OAAO,GAAE,YAAiB,GAAG,WAAW,CAyE7D"}
package/dist/audit.js CHANGED
@@ -1,4 +1,4 @@
1
- import { readFileSync } from "node:fs";
1
+ import { readFileSync, writeFileSync } from "node:fs";
2
2
  import path from "node:path";
3
3
  import ts from "typescript";
4
4
  import { loadConfig } from "./config.js";
@@ -9,35 +9,88 @@ export function audit(options = {}) {
9
9
  const config = loadConfig(cwd, options.configPath);
10
10
  const files = findCandidateFiles(cwd, config.include, config.exclude);
11
11
  const violations = [];
12
+ const components = [];
13
+ const auditedComponents = [];
14
+ const skippedComponents = [];
12
15
  let componentsChecked = 0;
16
+ let fixesApplied = 0;
13
17
  for (const file of files) {
14
18
  const absolutePath = path.join(cwd, file);
15
19
  const sourceText = readFileSync(absolutePath, "utf8");
16
20
  const sourceFile = ts.createSourceFile(absolutePath, sourceText, ts.ScriptTarget.Latest, true, scriptKindForFile(file));
21
+ const edits = [];
17
22
  for (const candidate of findExportedComponents(sourceFile)) {
18
- const root = findRootJsxElement(candidate.body);
19
- if (!root || !isHostElement(root.tagName)) {
23
+ components.push(`${file}#${candidate.name}`);
24
+ if (matchesNamePattern(candidate.name, config.excludeComponents)) {
25
+ skippedComponents.push(skip(file, candidate.name, "excluded-component"));
20
26
  continue;
21
27
  }
28
+ const root = findAuditableRoot(candidate.body, config);
29
+ if (root.kind === "skipped") {
30
+ skippedComponents.push(skip(file, candidate.name, root.reason));
31
+ continue;
32
+ }
33
+ auditedComponents.push(`${file}#${candidate.name}`);
22
34
  componentsChecked += 1;
23
- const violation = auditRootElement(sourceFile, file, candidate.name, root, config);
35
+ const violation = auditRootElement(sourceFile, file, candidate.name, root.root, config);
24
36
  if (violation) {
25
37
  violations.push(violation);
38
+ if (options.fix && violation.fixable) {
39
+ const edit = fixForViolation(sourceFile, root.root, violation, config.attribute);
40
+ if (edit) {
41
+ edits.push(edit);
42
+ fixesApplied += 1;
43
+ }
44
+ }
26
45
  }
27
46
  }
47
+ if (edits.length > 0) {
48
+ writeFileSync(absolutePath, applyTextEdits(sourceText, edits));
49
+ }
50
+ }
51
+ if (options.fix && fixesApplied > 0) {
52
+ const fixed = audit({ ...options, fix: false });
53
+ return { ...fixed, fixesApplied };
28
54
  }
29
55
  return {
30
56
  ok: violations.length === 0,
31
57
  filesChecked: files.length,
58
+ componentsFound: components.length,
32
59
  componentsChecked,
60
+ components,
61
+ auditedComponents,
62
+ skippedComponents,
63
+ fixesApplied,
33
64
  violations,
34
65
  };
35
66
  }
36
67
  function findExportedComponents(sourceFile) {
37
68
  const candidates = [];
69
+ const declarations = new Map();
70
+ const variableInitializers = new Map();
71
+ const seen = new Set();
72
+ const addCandidate = (name, body) => {
73
+ if (!body || seen.has(name)) {
74
+ return;
75
+ }
76
+ seen.add(name);
77
+ candidates.push({ name, body });
78
+ };
79
+ for (const statement of sourceFile.statements) {
80
+ if (ts.isFunctionDeclaration(statement) && statement.name && isComponentName(statement.name.text)) {
81
+ declarations.set(statement.name.text, statement.body ?? statement);
82
+ }
83
+ if (ts.isVariableStatement(statement)) {
84
+ for (const declaration of statement.declarationList.declarations) {
85
+ if (ts.isIdentifier(declaration.name) && isComponentName(declaration.name.text) && declaration.initializer) {
86
+ variableInitializers.set(declaration.name.text, declaration.initializer);
87
+ }
88
+ }
89
+ }
90
+ }
38
91
  for (const statement of sourceFile.statements) {
39
92
  if (ts.isFunctionDeclaration(statement) && statement.name && isExported(statement) && isComponentName(statement.name.text)) {
40
- candidates.push({ name: statement.name.text, body: statement.body ?? statement });
93
+ addCandidate(statement.name.text, statement.body ?? statement);
41
94
  continue;
42
95
  }
43
96
  if (ts.isVariableStatement(statement) && isExported(statement)) {
@@ -45,55 +98,126 @@ function findExportedComponents(sourceFile) {
45
98
  if (!ts.isIdentifier(declaration.name) || !isComponentName(declaration.name.text) || !declaration.initializer) {
46
99
  continue;
47
100
  }
48
- const body = componentBodyFromInitializer(declaration.initializer);
49
- if (body) {
50
- candidates.push({ name: declaration.name.text, body });
51
- }
101
+ addCandidate(declaration.name.text, componentBodyFromInitializer(declaration.initializer, declarations, variableInitializers));
52
102
  }
53
103
  }
54
104
  if (ts.isExportAssignment(statement)) {
55
- const candidate = componentFromDefaultExport(statement.expression);
105
+ const candidate = componentFromDefaultExport(statement.expression, declarations, variableInitializers);
56
106
  if (candidate) {
57
- candidates.push(candidate);
107
+ addCandidate(candidate.name, candidate.body);
108
+ }
109
+ }
110
+ if (ts.isExportDeclaration(statement) && statement.exportClause && ts.isNamedExports(statement.exportClause)) {
111
+ for (const element of statement.exportClause.elements) {
112
+ const localName = element.propertyName?.text ?? element.name.text;
113
+ const exportedName = element.name.text;
114
+ if (!isComponentName(exportedName)) {
115
+ continue;
116
+ }
117
+ addCandidate(exportedName, declarations.get(localName) ?? componentBodyFromInitializer(variableInitializers.get(localName), declarations, variableInitializers));
58
118
  }
59
119
  }
60
120
  }
61
121
  return candidates;
62
122
  }
63
- function componentFromDefaultExport(expression) {
123
+ function componentFromDefaultExport(expression, declarations, variableInitializers) {
64
124
  if (ts.isIdentifier(expression) && isComponentName(expression.text)) {
65
- return undefined;
125
+ return {
126
+ name: expression.text,
127
+ body: declarations.get(expression.text) ?? componentBodyFromInitializer(variableInitializers.get(expression.text), declarations, variableInitializers) ?? expression,
128
+ };
66
129
  }
67
130
  if (ts.isArrowFunction(expression) || ts.isFunctionExpression(expression)) {
68
- return undefined;
131
+ return expression.name && isComponentName(expression.name.text) ? { name: expression.name.text, body: expression.body } : undefined;
132
+ }
133
+ if (ts.isCallExpression(expression)) {
134
+ return unwrapComponentCall(expression, declarations, variableInitializers);
69
135
  }
70
136
  return undefined;
71
137
  }
72
- function componentBodyFromInitializer(initializer) {
138
+ function componentBodyFromInitializer(initializer, declarations = new Map(), variableInitializers = new Map()) {
139
+ if (!initializer) {
140
+ return undefined;
141
+ }
73
142
  if (ts.isArrowFunction(initializer) || ts.isFunctionExpression(initializer)) {
74
143
  return initializer.body;
75
144
  }
76
- if (ts.isCallExpression(initializer) && isForwardRefCall(initializer)) {
145
+ if (ts.isCallExpression(initializer) && isWrapperCall(initializer, "forwardRef")) {
77
146
  const render = initializer.arguments[0];
78
147
  if (render && (ts.isArrowFunction(render) || ts.isFunctionExpression(render))) {
79
148
  return render.body;
80
149
  }
150
+ if (render && ts.isCallExpression(render)) {
151
+ return componentBodyFromInitializer(render, declarations, variableInitializers);
152
+ }
153
+ }
154
+ if (ts.isCallExpression(initializer) && isWrapperCall(initializer, "memo")) {
155
+ const wrapped = initializer.arguments[0];
156
+ if (wrapped) {
157
+ if (ts.isIdentifier(wrapped)) {
158
+ return declarations.get(wrapped.text) ?? componentBodyFromInitializer(variableInitializers.get(wrapped.text), declarations, variableInitializers);
159
+ }
160
+ if (ts.isArrowFunction(wrapped) || ts.isFunctionExpression(wrapped)) {
161
+ return wrapped.body;
162
+ }
163
+ if (ts.isCallExpression(wrapped)) {
164
+ return componentBodyFromInitializer(wrapped, declarations, variableInitializers);
165
+ }
166
+ }
81
167
  }
82
168
  return undefined;
83
169
  }
84
- function isForwardRefCall(call) {
170
+ function unwrapComponentCall(call, declarations, variableInitializers) {
171
+ if (!isWrapperCall(call, "memo") && !isWrapperCall(call, "forwardRef")) {
172
+ return undefined;
173
+ }
174
+ const wrapped = call.arguments[0];
175
+ if (!wrapped) {
176
+ return undefined;
177
+ }
178
+ if (ts.isIdentifier(wrapped) && isComponentName(wrapped.text)) {
179
+ return {
180
+ name: wrapped.text,
181
+ body: declarations.get(wrapped.text) ?? componentBodyFromInitializer(variableInitializers.get(wrapped.text), declarations, variableInitializers) ?? wrapped,
182
+ };
183
+ }
184
+ if (ts.isCallExpression(wrapped)) {
185
+ return unwrapComponentCall(wrapped, declarations, variableInitializers);
186
+ }
187
+ return undefined;
188
+ }
189
+ function isWrapperCall(call, wrapperName) {
85
190
  const expression = call.expression;
86
191
  if (ts.isIdentifier(expression)) {
87
- return expression.text === "forwardRef";
192
+ return expression.text === wrapperName;
193
+ }
194
+ return ts.isPropertyAccessExpression(expression) && expression.name.text === wrapperName;
195
+ }
196
+ function findAuditableRoot(body, config) {
197
+ const root = findRootJsxElement(body);
198
+ if (!root) {
199
+ return { kind: "skipped", reason: "non-jsx-root" };
200
+ }
201
+ if (root.kind === "fragment") {
202
+ return findFirstMeaningfulJsxChild(root.node.children, config) ?? { kind: "skipped", reason: "fragment-root" };
88
203
  }
89
- return ts.isPropertyAccessExpression(expression) && expression.name.text === "forwardRef";
204
+ if (isHostElement(root.node.tagName)) {
205
+ return { kind: "auditable", root: root.node };
206
+ }
207
+ if (ts.isIdentifier(root.node.tagName) && config.passThroughComponents.includes(root.node.tagName.text)) {
208
+ return findFirstMeaningfulJsxChild(root.children, config) ?? { kind: "skipped", reason: "custom-root" };
209
+ }
210
+ return { kind: "skipped", reason: "custom-root" };
90
211
  }
91
212
  function findRootJsxElement(body) {
92
213
  if (ts.isJsxElement(body)) {
93
- return body.openingElement;
214
+ return { kind: "element", node: body.openingElement, children: body.children };
94
215
  }
95
216
  if (ts.isJsxSelfClosingElement(body)) {
96
- return body;
217
+ return { kind: "element", node: body, children: ts.factory.createNodeArray() };
218
+ }
219
+ if (ts.isJsxFragment(body)) {
220
+ return { kind: "fragment", node: body };
97
221
  }
98
222
  if (ts.isParenthesizedExpression(body)) {
99
223
  return findRootJsxElement(body.expression);
@@ -107,6 +231,21 @@ function findRootJsxElement(body) {
107
231
  }
108
232
  return undefined;
109
233
  }
234
+ function findFirstMeaningfulJsxChild(children, config) {
235
+ for (const child of children) {
236
+ if (ts.isJsxText(child) && child.getText().trim() === "") {
237
+ continue;
238
+ }
239
+ if (ts.isJsxExpression(child)) {
240
+ continue;
241
+ }
242
+ if (ts.isJsxElement(child) || ts.isJsxSelfClosingElement(child) || ts.isJsxFragment(child)) {
243
+ return findAuditableRoot(child, config);
244
+ }
245
+ return { kind: "skipped", reason: "fragment-root" };
246
+ }
247
+ return undefined;
248
+ }
110
249
  function auditRootElement(sourceFile, file, componentName, root, config) {
111
250
  const expectedValue = componentNameToKebabCase(componentName);
112
251
  const attribute = findJsxAttribute(root, config.attribute);
@@ -119,6 +258,7 @@ function auditRootElement(sourceFile, file, componentName, root, config) {
119
258
  column: character + 1,
120
259
  componentName,
121
260
  expectedValue,
261
+ fixable: true,
122
262
  message: `${componentName} must set ${config.attribute}="${expectedValue}" on its root DOM element.`,
123
263
  };
124
264
  }
@@ -132,11 +272,27 @@ function auditRootElement(sourceFile, file, componentName, root, config) {
132
272
  componentName,
133
273
  expectedValue,
134
274
  actualValue,
275
+ fixable: actualValue !== undefined,
135
276
  message: `${componentName} must use ${config.attribute}="${expectedValue}" on its root DOM element.`,
136
277
  };
137
278
  }
138
279
  return undefined;
139
280
  }
281
+ function fixForViolation(sourceFile, root, violation, attributeName) {
282
+ if (violation.code === "missing-attribute") {
283
+ return { start: root.tagName.getEnd(), end: root.tagName.getEnd(), text: ` ${attributeName}="${violation.expectedValue}"` };
284
+ }
285
+ const attribute = findJsxAttribute(root, attributeName);
286
+ if (!attribute?.initializer) {
287
+ return undefined;
288
+ }
289
+ return { start: attribute.initializer.getStart(sourceFile), end: attribute.initializer.getEnd(), text: `"${violation.expectedValue}"` };
290
+ }
291
+ function applyTextEdits(sourceText, edits) {
292
+ return [...edits]
293
+ .sort((left, right) => right.start - left.start)
294
+ .reduce((text, edit) => `${text.slice(0, edit.start)}${edit.text}${text.slice(edit.end)}`, sourceText);
295
+ }
140
296
  function findJsxAttribute(root, attributeName) {
141
297
  return root.attributes.properties.find((property) => ts.isJsxAttribute(property) && ts.isIdentifier(property.name) && property.name.text === attributeName);
142
298
  }
@@ -155,6 +311,24 @@ function getStaticAttributeValue(attribute) {
155
311
  }
156
312
  return undefined;
157
313
  }
314
+ function skip(file, componentName, reason) {
315
+ const messages = {
316
+ "excluded-component": `${componentName} is excluded by component name rules.`,
317
+ "custom-root": `${componentName} root is a custom component without a pass-through rule.`,
318
+ "fragment-root": `${componentName} has a fragment root with no meaningful DOM child to audit.`,
319
+ "non-jsx-root": `${componentName} does not return a JSX root element.`,
320
+ };
321
+ return { file, componentName, reason, message: messages[reason] };
322
+ }
323
+ function matchesNamePattern(name, patterns) {
324
+ return patterns.some((pattern) => {
325
+ if (pattern === name) {
326
+ return true;
327
+ }
328
+ const source = `^${pattern.replace(/[\\^$+?.()|[\]{}]/g, "\\$&").replace(/\*/g, ".*")}$`;
329
+ return new RegExp(source).test(name);
330
+ });
331
+ }
158
332
  function isHostElement(tagName) {
159
333
  return ts.isIdentifier(tagName) && /^[a-z]/.test(tagName.text);
160
334
  }
package/dist/audit.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"audit.js","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { writeFileSync } from "node:fs";
3
3
  import path from "node:path";
4
- import { defaultConfig } from "./config.js";
4
+ import { defaultConfig, nextConfig } from "./config.js";
5
5
  import { audit } from "./audit.js";
6
6
  async function main() {
7
7
  const args = parseArgs(process.argv.slice(2));
@@ -12,7 +12,7 @@ async function main() {
12
12
  if (args.command === "init") {
13
13
  const cwd = path.resolve(args.cwd ?? process.cwd());
14
14
  const configPath = path.join(cwd, "component-identity.config.json");
15
- writeFileSync(`${configPath}`, `${JSON.stringify(defaultConfig, null, 2)}\n`, { flag: "wx" });
15
+ writeFileSync(`${configPath}`, `${JSON.stringify(args.preset === "next" ? nextConfig : defaultConfig, null, 2)}\n`, { flag: "wx" });
16
16
  console.log(`Created ${path.relative(process.cwd(), configPath)}`);
17
17
  return;
18
18
  }
@@ -29,18 +29,22 @@ async function main() {
29
29
  if (args.configPath) {
30
30
  auditOptions.configPath = args.configPath;
31
31
  }
32
+ if (args.fix) {
33
+ auditOptions.fix = true;
34
+ }
32
35
  const result = audit(auditOptions);
33
36
  if (args.json || args.command === "report") {
34
37
  console.log(JSON.stringify(result, null, 2));
35
38
  }
36
39
  else if (result.ok) {
37
- console.log(`component-identity: checked ${result.componentsChecked} component(s) in ${result.filesChecked} file(s), no violations found.`);
40
+ const fixed = result.fixesApplied > 0 ? ` fixed ${result.fixesApplied} violation(s),` : "";
41
+ console.log(`component-identity:${fixed} audited ${result.componentsChecked}/${result.componentsFound} found component(s) in ${result.filesChecked} file(s), no violations found.`);
38
42
  }
39
43
  else {
40
44
  for (const violation of result.violations) {
41
45
  console.error(`${violation.file}:${violation.line}:${violation.column} ${violation.message}`);
42
46
  }
43
- console.error(`component-identity: found ${result.violations.length} violation(s).`);
47
+ console.error(`component-identity: found ${result.violations.length} violation(s); audited ${result.componentsChecked}/${result.componentsFound} found component(s), skipped ${result.skippedComponents.length}.`);
44
48
  }
45
49
  process.exitCode = args.command === "report" || result.ok ? 0 : 1;
46
50
  }
@@ -49,6 +53,7 @@ function parseArgs(rawArgs) {
49
53
  const parsed = {
50
54
  command,
51
55
  json: false,
56
+ fix: false,
52
57
  };
53
58
  for (let index = 0; index < rest.length; index += 1) {
54
59
  const arg = rest[index];
@@ -56,6 +61,10 @@ function parseArgs(rawArgs) {
56
61
  parsed.json = true;
57
62
  continue;
58
63
  }
64
+ if (arg === "--fix") {
65
+ parsed.fix = true;
66
+ continue;
67
+ }
59
68
  if (arg === "--config") {
60
69
  const value = rest[index + 1];
61
70
  if (value) {
@@ -72,6 +81,14 @@ function parseArgs(rawArgs) {
72
81
  index += 1;
73
82
  continue;
74
83
  }
84
+ if (arg === "--preset") {
85
+ const value = rest[index + 1];
86
+ if (value === "next") {
87
+ parsed.preset = value;
88
+ }
89
+ index += 1;
90
+ continue;
91
+ }
75
92
  }
76
93
  return parsed;
77
94
  }
@@ -79,12 +96,12 @@ function printHelp() {
79
96
  console.log(`component-identity
80
97
 
81
98
  Usage:
82
- component-identity audit [--json] [--config path] [--cwd path]
99
+ component-identity audit [--json] [--fix] [--config path] [--cwd path]
83
100
  component-identity report [--config path] [--cwd path]
84
- component-identity init [--cwd path]
101
+ component-identity init [--cwd path] [--preset next]
85
102
 
86
103
  Commands:
87
- audit Check exported React components and exit non-zero on violations.
104
+ audit Check exported React components and exit non-zero on violations. Use --fix for simple root attribute fixes.
88
105
  report Print the same audit result as JSON.
89
106
  init Create component-identity.config.json in the target directory.
90
107
  `);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import type { ComponentIdentityConfig } from "./types.js";
2
2
  export declare const defaultConfig: ComponentIdentityConfig;
3
+ export declare const nextConfig: ComponentIdentityConfig;
3
4
  export declare function loadConfig(cwd: string, configPath?: string): ComponentIdentityConfig;
4
5
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAE1D,eAAO,MAAM,aAAa,EAAE,uBAgB3B,CAAC;AAEF,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,uBAAuB,CAgBpF"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAE1D,eAAO,MAAM,aAAa,EAAE,uBAmB3B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,uBAYxB,CAAC;AAEF,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,uBAAuB,CAqBpF"}
package/dist/config.js CHANGED
@@ -16,6 +16,22 @@ export const defaultConfig = {
16
16
  "**/node_modules/**",
17
17
  "**/dist/**",
18
18
  ],
19
+ excludeFiles: [],
20
+ excludeComponents: [],
21
+ passThroughComponents: [],
22
+ };
23
+ export const nextConfig = {
24
+ ...defaultConfig,
25
+ preset: "next",
26
+ exclude: [
27
+ ...defaultConfig.exclude,
28
+ "**/page.*",
29
+ "**/pages/**",
30
+ "**/layout.*",
31
+ "**/loading.*",
32
+ "**/error.*",
33
+ "**/not-found.*",
34
+ ],
19
35
  };
20
36
  export function loadConfig(cwd, configPath) {
21
37
  const resolvedPath = configPath
@@ -25,10 +41,15 @@ export function loadConfig(cwd, configPath) {
25
41
  return defaultConfig;
26
42
  }
27
43
  const parsed = JSON.parse(readFileSync(resolvedPath, "utf8"));
44
+ const baseConfig = parsed.preset === "next" ? nextConfig : defaultConfig;
28
45
  return {
29
- attribute: parsed.attribute ?? defaultConfig.attribute,
30
- include: parsed.include ?? defaultConfig.include,
31
- exclude: parsed.exclude ?? defaultConfig.exclude,
46
+ preset: parsed.preset,
47
+ attribute: parsed.attribute ?? baseConfig.attribute,
48
+ include: parsed.include ?? baseConfig.include,
49
+ exclude: [...(parsed.exclude ?? baseConfig.exclude), ...(parsed.excludeFiles ?? baseConfig.excludeFiles)],
50
+ excludeFiles: parsed.excludeFiles ?? baseConfig.excludeFiles,
51
+ excludeComponents: parsed.excludeComponents ?? baseConfig.excludeComponents,
52
+ passThroughComponents: parsed.passThroughComponents ?? baseConfig.passThroughComponents,
32
53
  };
33
54
  }
34
55
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,MAAM,CAAC,MAAM,aAAa,GAA4B;IACpD,SAAS,EAAE,gBAAgB;IAC3B,OAAO,EAAE;QACP,0BAA0B;QAC1B,0BAA0B;QAC1B,iCAAiC;KAClC;IACD,OAAO,EAAE;QACP,qBAAqB;QACrB,aAAa;QACb,aAAa;QACb,gBAAgB;QAChB,WAAW;QACX,oBAAoB;QACpB,YAAY;KACb;CACF,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,GAAW,EAAE,UAAmB;IACzD,MAAM,YAAY,GAAG,UAAU;QAC7B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC;QAC/B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gCAAgC,CAAC,CAAC;IAErD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAqC,CAAC;IAElG,OAAO;QACL,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,aAAa,CAAC,SAAS;QACtD,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,aAAa,CAAC,OAAO;QAChD,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,aAAa,CAAC,OAAO;KACjD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,MAAM,CAAC,MAAM,aAAa,GAA4B;IACpD,SAAS,EAAE,gBAAgB;IAC3B,OAAO,EAAE;QACP,0BAA0B;QAC1B,0BAA0B;QAC1B,iCAAiC;KAClC;IACD,OAAO,EAAE;QACP,qBAAqB;QACrB,aAAa;QACb,aAAa;QACb,gBAAgB;QAChB,WAAW;QACX,oBAAoB;QACpB,YAAY;KACb;IACD,YAAY,EAAE,EAAE;IAChB,iBAAiB,EAAE,EAAE;IACrB,qBAAqB,EAAE,EAAE;CAC1B,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAA4B;IACjD,GAAG,aAAa;IAChB,MAAM,EAAE,MAAM;IACd,OAAO,EAAE;QACP,GAAG,aAAa,CAAC,OAAO;QACxB,WAAW;QACX,aAAa;QACb,aAAa;QACb,cAAc;QACd,YAAY;QACZ,gBAAgB;KACjB;CACF,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,GAAW,EAAE,UAAmB;IACzD,MAAM,YAAY,GAAG,UAAU;QAC7B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC;QAC/B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gCAAgC,CAAC,CAAC;IAErD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAqC,CAAC;IAClG,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC;IAEzE,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,UAAU,CAAC,SAAS;QACnD,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO;QAC7C,OAAO,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,YAAY,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC;QACzG,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,UAAU,CAAC,YAAY;QAC5D,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,IAAI,UAAU,CAAC,iBAAiB;QAC3E,qBAAqB,EAAE,MAAM,CAAC,qBAAqB,IAAI,UAAU,CAAC,qBAAqB;KACxF,CAAC;AACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { audit } from "./audit.js";
2
- export { defaultConfig, loadConfig } from "./config.js";
2
+ export { defaultConfig, loadConfig, nextConfig } from "./config.js";
3
3
  export { componentNameToKebabCase } from "./naming.js";
4
- export type { AuditOptions, AuditResult, ComponentIdentityConfig, Violation, ViolationCode } from "./types.js";
4
+ export type { AuditOptions, AuditResult, ComponentIdentityConfig, SkippedComponent, Violation, ViolationCode } from "./types.js";
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,uBAAuB,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
1
  export { audit } from "./audit.js";
2
- export { defaultConfig, loadConfig } from "./config.js";
2
+ export { defaultConfig, loadConfig, nextConfig } from "./config.js";
3
3
  export { componentNameToKebabCase } from "./naming.js";
4
4
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC"}
package/dist/types.d.ts CHANGED
@@ -1,12 +1,17 @@
1
1
  export type ComponentIdentityConfig = {
2
+ preset?: "next" | undefined;
2
3
  attribute: string;
3
4
  include: string[];
4
5
  exclude: string[];
6
+ excludeFiles: string[];
7
+ excludeComponents: string[];
8
+ passThroughComponents: string[];
5
9
  };
6
10
  export type AuditOptions = {
7
11
  cwd?: string | undefined;
8
12
  configPath?: string | undefined;
9
13
  json?: boolean;
14
+ fix?: boolean;
10
15
  };
11
16
  export type ViolationCode = "missing-attribute" | "mismatched-attribute";
12
17
  export type Violation = {
@@ -17,12 +22,24 @@ export type Violation = {
17
22
  componentName: string;
18
23
  expectedValue: string;
19
24
  actualValue?: string | undefined;
25
+ fixable: boolean;
26
+ message: string;
27
+ };
28
+ export type SkippedComponent = {
29
+ file: string;
30
+ componentName: string;
31
+ reason: "excluded-component" | "custom-root" | "fragment-root" | "non-jsx-root";
20
32
  message: string;
21
33
  };
22
34
  export type AuditResult = {
23
35
  ok: boolean;
24
36
  filesChecked: number;
37
+ componentsFound: number;
25
38
  componentsChecked: number;
39
+ components: string[];
40
+ auditedComponents: string[];
41
+ skippedComponents: SkippedComponent[];
42
+ fixesApplied: number;
26
43
  violations: Violation[];
27
44
  };
28
45
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,uBAAuB,GAAG;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,mBAAmB,GAAG,sBAAsB,CAAC;AAEzE,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,OAAO,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,qBAAqB,EAAE,MAAM,EAAE,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,mBAAmB,GAAG,sBAAsB,CAAC;AAEzE,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,oBAAoB,GAAG,aAAa,GAAG,eAAe,GAAG,cAAc,CAAC;IAChF,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,OAAO,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@carlesandres/component-identity",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Audit exported React components for canonical data-component root attributes.",
5
5
  "type": "module",
6
6
  "bin": {