@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 +38 -7
- package/dist/audit.d.ts.map +1 -1
- package/dist/audit.js +195 -21
- package/dist/audit.js.map +1 -1
- package/dist/cli.js +24 -7
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +24 -3
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +17 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -20,10 +20,11 @@ npm install --save-dev @carlesandres/component-identity
|
|
|
20
20
|
|
|
21
21
|
## Use
|
|
22
22
|
|
|
23
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
package/dist/audit.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,
|
|
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
|
-
|
|
19
|
-
if (
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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) &&
|
|
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
|
|
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 ===
|
|
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
|
-
|
|
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
|
-
|
|
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":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
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
|
package/dist/config.d.ts.map
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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
|
package/dist/config.js.map
CHANGED
|
@@ -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;
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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
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;
|
|
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
|
package/dist/types.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|