@sudosandwich/limps-headless 0.1.3
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/LICENSE +21 -0
- package/README.md +339 -0
- package/bin/limps-headless +2 -0
- package/dist/analysis/index.d.ts +6 -0
- package/dist/analysis/index.d.ts.map +1 -0
- package/dist/analysis/index.js +6 -0
- package/dist/analysis/index.js.map +1 -0
- package/dist/analysis/ir/build-ir.d.ts +10 -0
- package/dist/analysis/ir/build-ir.d.ts.map +1 -0
- package/dist/analysis/ir/build-ir.js +102 -0
- package/dist/analysis/ir/build-ir.js.map +1 -0
- package/dist/analysis/ir/types.d.ts +44 -0
- package/dist/analysis/ir/types.d.ts.map +1 -0
- package/dist/analysis/ir/types.js +2 -0
- package/dist/analysis/ir/types.js.map +1 -0
- package/dist/analysis/module-graph.d.ts +20 -0
- package/dist/analysis/module-graph.d.ts.map +1 -0
- package/dist/analysis/module-graph.js +104 -0
- package/dist/analysis/module-graph.js.map +1 -0
- package/dist/analysis/passes/behavior-evidence.d.ts +9 -0
- package/dist/analysis/passes/behavior-evidence.d.ts.map +1 -0
- package/dist/analysis/passes/behavior-evidence.js +80 -0
- package/dist/analysis/passes/behavior-evidence.js.map +1 -0
- package/dist/analysis/passes/import-evidence.d.ts +3 -0
- package/dist/analysis/passes/import-evidence.d.ts.map +1 -0
- package/dist/analysis/passes/import-evidence.js +58 -0
- package/dist/analysis/passes/import-evidence.js.map +1 -0
- package/dist/analysis/passes/index.d.ts +15 -0
- package/dist/analysis/passes/index.d.ts.map +1 -0
- package/dist/analysis/passes/index.js +21 -0
- package/dist/analysis/passes/index.js.map +1 -0
- package/dist/analysis/passes/jsx-evidence.d.ts +8 -0
- package/dist/analysis/passes/jsx-evidence.d.ts.map +1 -0
- package/dist/analysis/passes/jsx-evidence.js +149 -0
- package/dist/analysis/passes/jsx-evidence.js.map +1 -0
- package/dist/analysis/ts-program.d.ts +12 -0
- package/dist/analysis/ts-program.d.ts.map +1 -0
- package/dist/analysis/ts-program.js +59 -0
- package/dist/analysis/ts-program.js.map +1 -0
- package/dist/analyzer/disambiguator.d.ts +20 -0
- package/dist/analyzer/disambiguator.d.ts.map +1 -0
- package/dist/analyzer/disambiguator.js +83 -0
- package/dist/analyzer/disambiguator.js.map +1 -0
- package/dist/analyzer/index.d.ts +26 -0
- package/dist/analyzer/index.d.ts.map +1 -0
- package/dist/analyzer/index.js +68 -0
- package/dist/analyzer/index.js.map +1 -0
- package/dist/analyzer/parser.d.ts +23 -0
- package/dist/analyzer/parser.d.ts.map +1 -0
- package/dist/analyzer/parser.js +58 -0
- package/dist/analyzer/parser.js.map +1 -0
- package/dist/analyzer/patterns.d.ts +42 -0
- package/dist/analyzer/patterns.d.ts.map +1 -0
- package/dist/analyzer/patterns.js +206 -0
- package/dist/analyzer/patterns.js.map +1 -0
- package/dist/analyzer/props.d.ts +16 -0
- package/dist/analyzer/props.d.ts.map +1 -0
- package/dist/analyzer/props.js +235 -0
- package/dist/analyzer/props.js.map +1 -0
- package/dist/analyzer/rules/checkbox-switch-toggle.d.ts +10 -0
- package/dist/analyzer/rules/checkbox-switch-toggle.d.ts.map +1 -0
- package/dist/analyzer/rules/checkbox-switch-toggle.js +26 -0
- package/dist/analyzer/rules/checkbox-switch-toggle.js.map +1 -0
- package/dist/analyzer/rules/dialog-popover.d.ts +10 -0
- package/dist/analyzer/rules/dialog-popover.d.ts.map +1 -0
- package/dist/analyzer/rules/dialog-popover.js +25 -0
- package/dist/analyzer/rules/dialog-popover.js.map +1 -0
- package/dist/analyzer/rules/index.d.ts +24 -0
- package/dist/analyzer/rules/index.d.ts.map +1 -0
- package/dist/analyzer/rules/index.js +51 -0
- package/dist/analyzer/rules/index.js.map +1 -0
- package/dist/analyzer/rules/tooltip-hovercard.d.ts +10 -0
- package/dist/analyzer/rules/tooltip-hovercard.d.ts.map +1 -0
- package/dist/analyzer/rules/tooltip-hovercard.js +21 -0
- package/dist/analyzer/rules/tooltip-hovercard.js.map +1 -0
- package/dist/analyzer/scorer.d.ts +12 -0
- package/dist/analyzer/scorer.d.ts.map +1 -0
- package/dist/analyzer/scorer.js +171 -0
- package/dist/analyzer/scorer.js.map +1 -0
- package/dist/analyzer/weights.d.ts +28 -0
- package/dist/analyzer/weights.d.ts.map +1 -0
- package/dist/analyzer/weights.js +40 -0
- package/dist/analyzer/weights.js.map +1 -0
- package/dist/audit/analyses/migration.d.ts +42 -0
- package/dist/audit/analyses/migration.d.ts.map +1 -0
- package/dist/audit/analyses/migration.js +91 -0
- package/dist/audit/analyses/migration.js.map +1 -0
- package/dist/audit/discover-components.d.ts +7 -0
- package/dist/audit/discover-components.d.ts.map +1 -0
- package/dist/audit/discover-components.js +486 -0
- package/dist/audit/discover-components.js.map +1 -0
- package/dist/audit/generate-report.d.ts +28 -0
- package/dist/audit/generate-report.d.ts.map +1 -0
- package/dist/audit/generate-report.js +333 -0
- package/dist/audit/generate-report.js.map +1 -0
- package/dist/audit/index.d.ts +8 -0
- package/dist/audit/index.d.ts.map +1 -0
- package/dist/audit/index.js +8 -0
- package/dist/audit/index.js.map +1 -0
- package/dist/audit/run-audit.d.ts +33 -0
- package/dist/audit/run-audit.d.ts.map +1 -0
- package/dist/audit/run-audit.js +287 -0
- package/dist/audit/run-audit.js.map +1 -0
- package/dist/audit/types.d.ts +135 -0
- package/dist/audit/types.d.ts.map +1 -0
- package/dist/audit/types.js +5 -0
- package/dist/audit/types.js.map +1 -0
- package/dist/cache/index.d.ts +110 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +176 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/storage.d.ts +73 -0
- package/dist/cache/storage.d.ts.map +1 -0
- package/dist/cache/storage.js +176 -0
- package/dist/cache/storage.js.map +1 -0
- package/dist/cache/ttl.d.ts +62 -0
- package/dist/cache/ttl.d.ts.map +1 -0
- package/dist/cache/ttl.js +96 -0
- package/dist/cache/ttl.js.map +1 -0
- package/dist/cli/commands/analyze.d.ts +6 -0
- package/dist/cli/commands/analyze.d.ts.map +1 -0
- package/dist/cli/commands/analyze.js +43 -0
- package/dist/cli/commands/analyze.js.map +1 -0
- package/dist/cli/commands/audit.d.ts +6 -0
- package/dist/cli/commands/audit.d.ts.map +1 -0
- package/dist/cli/commands/audit.js +73 -0
- package/dist/cli/commands/audit.js.map +1 -0
- package/dist/cli/commands/check-updates.d.ts +6 -0
- package/dist/cli/commands/check-updates.d.ts.map +1 -0
- package/dist/cli/commands/check-updates.js +34 -0
- package/dist/cli/commands/check-updates.js.map +1 -0
- package/dist/cli/commands/diff.d.ts +7 -0
- package/dist/cli/commands/diff.d.ts.map +1 -0
- package/dist/cli/commands/diff.js +48 -0
- package/dist/cli/commands/diff.js.map +1 -0
- package/dist/cli/commands/extract.d.ts +6 -0
- package/dist/cli/commands/extract.d.ts.map +1 -0
- package/dist/cli/commands/extract.js +42 -0
- package/dist/cli/commands/extract.js.map +1 -0
- package/dist/cli/commands/list.d.ts +6 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +33 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/flags.d.ts +9 -0
- package/dist/cli/flags.d.ts.map +1 -0
- package/dist/cli/flags.js +22 -0
- package/dist/cli/flags.js.map +1 -0
- package/dist/cli/index.d.ts +5 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +40 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config.d.ts +19 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +23 -0
- package/dist/config.js.map +1 -0
- package/dist/differ/hints.d.ts +21 -0
- package/dist/differ/hints.d.ts.map +1 -0
- package/dist/differ/hints.js +105 -0
- package/dist/differ/hints.js.map +1 -0
- package/dist/differ/index.d.ts +25 -0
- package/dist/differ/index.d.ts.map +1 -0
- package/dist/differ/index.js +115 -0
- package/dist/differ/index.js.map +1 -0
- package/dist/differ/props.d.ts +36 -0
- package/dist/differ/props.d.ts.map +1 -0
- package/dist/differ/props.js +210 -0
- package/dist/differ/props.js.map +1 -0
- package/dist/differ/severity.d.ts +31 -0
- package/dist/differ/severity.d.ts.map +1 -0
- package/dist/differ/severity.js +65 -0
- package/dist/differ/severity.js.map +1 -0
- package/dist/differ/types.d.ts +109 -0
- package/dist/differ/types.d.ts.map +1 -0
- package/dist/differ/types.js +5 -0
- package/dist/differ/types.js.map +1 -0
- package/dist/extractor/classifier.d.ts +30 -0
- package/dist/extractor/classifier.d.ts.map +1 -0
- package/dist/extractor/classifier.js +150 -0
- package/dist/extractor/classifier.js.map +1 -0
- package/dist/extractor/forward-ref.d.ts +28 -0
- package/dist/extractor/forward-ref.d.ts.map +1 -0
- package/dist/extractor/forward-ref.js +134 -0
- package/dist/extractor/forward-ref.js.map +1 -0
- package/dist/extractor/index.d.ts +25 -0
- package/dist/extractor/index.d.ts.map +1 -0
- package/dist/extractor/index.js +43 -0
- package/dist/extractor/index.js.map +1 -0
- package/dist/extractor/interface.d.ts +40 -0
- package/dist/extractor/interface.d.ts.map +1 -0
- package/dist/extractor/interface.js +233 -0
- package/dist/extractor/interface.js.map +1 -0
- package/dist/extractor/jsdoc.d.ts +24 -0
- package/dist/extractor/jsdoc.d.ts.map +1 -0
- package/dist/extractor/jsdoc.js +74 -0
- package/dist/extractor/jsdoc.js.map +1 -0
- package/dist/extractor/project.d.ts +17 -0
- package/dist/extractor/project.d.ts.map +1 -0
- package/dist/extractor/project.js +33 -0
- package/dist/extractor/project.js.map +1 -0
- package/dist/extractor/props.d.ts +24 -0
- package/dist/extractor/props.d.ts.map +1 -0
- package/dist/extractor/props.js +78 -0
- package/dist/extractor/props.js.map +1 -0
- package/dist/extractor/type-resolver.d.ts +32 -0
- package/dist/extractor/type-resolver.d.ts.map +1 -0
- package/dist/extractor/type-resolver.js +129 -0
- package/dist/extractor/type-resolver.js.map +1 -0
- package/dist/fetcher/index.d.ts +7 -0
- package/dist/fetcher/index.d.ts.map +1 -0
- package/dist/fetcher/index.js +7 -0
- package/dist/fetcher/index.js.map +1 -0
- package/dist/fetcher/npm-registry.d.ts +45 -0
- package/dist/fetcher/npm-registry.d.ts.map +1 -0
- package/dist/fetcher/npm-registry.js +217 -0
- package/dist/fetcher/npm-registry.js.map +1 -0
- package/dist/fetcher/unified-package.d.ts +27 -0
- package/dist/fetcher/unified-package.d.ts.map +1 -0
- package/dist/fetcher/unified-package.js +99 -0
- package/dist/fetcher/unified-package.js.map +1 -0
- package/dist/fetcher/unpkg.d.ts +20 -0
- package/dist/fetcher/unpkg.d.ts.map +1 -0
- package/dist/fetcher/unpkg.js +58 -0
- package/dist/fetcher/unpkg.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +41 -0
- package/dist/index.js.map +1 -0
- package/dist/providers/base.d.ts +10 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +80 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/index.d.ts +10 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +10 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/interface.d.ts +56 -0
- package/dist/providers/interface.d.ts.map +1 -0
- package/dist/providers/interface.js +5 -0
- package/dist/providers/interface.js.map +1 -0
- package/dist/providers/radix-backend.d.ts +11 -0
- package/dist/providers/radix-backend.d.ts.map +1 -0
- package/dist/providers/radix-backend.js +107 -0
- package/dist/providers/radix-backend.js.map +1 -0
- package/dist/providers/radix.d.ts +6 -0
- package/dist/providers/radix.d.ts.map +1 -0
- package/dist/providers/radix.js +21 -0
- package/dist/providers/radix.js.map +1 -0
- package/dist/providers/registry.d.ts +17 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +55 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/rules/engine.d.ts +4 -0
- package/dist/rules/engine.d.ts.map +1 -0
- package/dist/rules/engine.js +37 -0
- package/dist/rules/engine.js.map +1 -0
- package/dist/rules/index.d.ts +6 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +6 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/predicates.d.ts +10 -0
- package/dist/rules/predicates.d.ts.map +1 -0
- package/dist/rules/predicates.js +93 -0
- package/dist/rules/predicates.js.map +1 -0
- package/dist/rules/rulesets/base-ui.d.ts +3 -0
- package/dist/rules/rulesets/base-ui.d.ts.map +1 -0
- package/dist/rules/rulesets/base-ui.js +65 -0
- package/dist/rules/rulesets/base-ui.js.map +1 -0
- package/dist/rules/rulesets/radix-legacy.d.ts +3 -0
- package/dist/rules/rulesets/radix-legacy.d.ts.map +1 -0
- package/dist/rules/rulesets/radix-legacy.js +38 -0
- package/dist/rules/rulesets/radix-legacy.js.map +1 -0
- package/dist/rules/types.d.ts +57 -0
- package/dist/rules/types.d.ts.map +1 -0
- package/dist/rules/types.js +2 -0
- package/dist/rules/types.js.map +1 -0
- package/dist/signatures/disambiguation.d.ts +30 -0
- package/dist/signatures/disambiguation.d.ts.map +1 -0
- package/dist/signatures/disambiguation.js +99 -0
- package/dist/signatures/disambiguation.js.map +1 -0
- package/dist/signatures/distinguishing.d.ts +29 -0
- package/dist/signatures/distinguishing.d.ts.map +1 -0
- package/dist/signatures/distinguishing.js +108 -0
- package/dist/signatures/distinguishing.js.map +1 -0
- package/dist/signatures/generator.d.ts +20 -0
- package/dist/signatures/generator.d.ts.map +1 -0
- package/dist/signatures/generator.js +147 -0
- package/dist/signatures/generator.js.map +1 -0
- package/dist/signatures/index.d.ts +10 -0
- package/dist/signatures/index.d.ts.map +1 -0
- package/dist/signatures/index.js +10 -0
- package/dist/signatures/index.js.map +1 -0
- package/dist/signatures/inference.d.ts +37 -0
- package/dist/signatures/inference.d.ts.map +1 -0
- package/dist/signatures/inference.js +132 -0
- package/dist/signatures/inference.js.map +1 -0
- package/dist/tools/analyze-component.d.ts +41 -0
- package/dist/tools/analyze-component.d.ts.map +1 -0
- package/dist/tools/analyze-component.js +274 -0
- package/dist/tools/analyze-component.js.map +1 -0
- package/dist/tools/check-updates.d.ts +33 -0
- package/dist/tools/check-updates.d.ts.map +1 -0
- package/dist/tools/check-updates.js +81 -0
- package/dist/tools/check-updates.js.map +1 -0
- package/dist/tools/diff-versions.d.ts +39 -0
- package/dist/tools/diff-versions.d.ts.map +1 -0
- package/dist/tools/diff-versions.js +78 -0
- package/dist/tools/diff-versions.js.map +1 -0
- package/dist/tools/extract-primitive.d.ts +50 -0
- package/dist/tools/extract-primitive.d.ts.map +1 -0
- package/dist/tools/extract-primitive.js +145 -0
- package/dist/tools/extract-primitive.js.map +1 -0
- package/dist/tools/generate-report.d.ts +29 -0
- package/dist/tools/generate-report.d.ts.map +1 -0
- package/dist/tools/generate-report.js +36 -0
- package/dist/tools/generate-report.js.map +1 -0
- package/dist/tools/index.d.ts +11 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +11 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/list-primitives.d.ts +41 -0
- package/dist/tools/list-primitives.d.ts.map +1 -0
- package/dist/tools/list-primitives.js +74 -0
- package/dist/tools/list-primitives.js.map +1 -0
- package/dist/tools/run-audit.d.ts +43 -0
- package/dist/tools/run-audit.d.ts.map +1 -0
- package/dist/tools/run-audit.js +60 -0
- package/dist/tools/run-audit.js.map +1 -0
- package/dist/types/index.d.ts +143 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/docs/architecture.md +88 -0
- package/docs/providers.md +47 -0
- package/docs/tools.md +143 -0
- package/package.json +59 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* unpkg CDN client for fetching type definitions.
|
|
3
|
+
*/
|
|
4
|
+
import { primitiveToPackage } from './npm-registry.js';
|
|
5
|
+
const UNPKG_URL = 'https://unpkg.com';
|
|
6
|
+
async function fetchTypeDefinition(packageName, version, typesPath, fallbackPath) {
|
|
7
|
+
const url = `${UNPKG_URL}/${packageName}@${version}/${typesPath}`;
|
|
8
|
+
const response = await fetch(url);
|
|
9
|
+
if (!response.ok) {
|
|
10
|
+
if (response.status === 404 && fallbackPath) {
|
|
11
|
+
const fallbackUrl = `${UNPKG_URL}/${packageName}@${version}/${fallbackPath}`;
|
|
12
|
+
const fallbackResponse = await fetch(fallbackUrl);
|
|
13
|
+
if (fallbackResponse.ok) {
|
|
14
|
+
return fallbackResponse.text();
|
|
15
|
+
}
|
|
16
|
+
throw new Error(`Type definitions not found for ${packageName}@${version}: tried ${typesPath} (${response.status}) and ${fallbackPath} (${fallbackResponse.status}). ` +
|
|
17
|
+
`Package may not publish types at these paths for this version. Check: https://unpkg.com/browse/${packageName}@${version}/`);
|
|
18
|
+
}
|
|
19
|
+
throw new Error(`Failed to fetch types for ${packageName}@${version}: ${response.status} ${response.statusText} at ${url}`);
|
|
20
|
+
}
|
|
21
|
+
return response.text();
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Build the URL for a package's type definitions on unpkg.
|
|
25
|
+
*/
|
|
26
|
+
export function buildTypesUrl(packageName, version) {
|
|
27
|
+
return `${UNPKG_URL}/${packageName}@${version}/dist/index.d.ts`;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Fetch type definitions for a Radix primitive from unpkg.
|
|
31
|
+
*/
|
|
32
|
+
export async function fetchTypes(primitive, version) {
|
|
33
|
+
const packageName = primitiveToPackage(primitive);
|
|
34
|
+
return fetchTypeDefinition(packageName, version, 'dist/index.d.ts', 'dist/index.d.mts');
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Fetch type definitions from the unified radix-ui package.
|
|
38
|
+
*/
|
|
39
|
+
export async function fetchFromUnifiedPackage(primitive, version, typesPath) {
|
|
40
|
+
const normalized = primitive.toLowerCase().replace(/\s+/g, '-');
|
|
41
|
+
const resolvedPath = typesPath ?? `dist/${normalized}.d.ts`;
|
|
42
|
+
const fallbackPath = resolvedPath.endsWith('.d.ts')
|
|
43
|
+
? resolvedPath.replace(/\.d\.ts$/, '.d.mts')
|
|
44
|
+
: undefined;
|
|
45
|
+
return fetchTypeDefinition('radix-ui', version, resolvedPath, fallbackPath);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Fetch raw file content from a package on unpkg.
|
|
49
|
+
*/
|
|
50
|
+
export async function fetchPackageFile(packageName, version, filePath) {
|
|
51
|
+
const url = `${UNPKG_URL}/${packageName}@${version}/${filePath}`;
|
|
52
|
+
const response = await fetch(url);
|
|
53
|
+
if (!response.ok) {
|
|
54
|
+
throw new Error(`Failed to fetch ${filePath}: ${response.status} ${response.statusText}`);
|
|
55
|
+
}
|
|
56
|
+
return response.text();
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=unpkg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unpkg.js","sourceRoot":"","sources":["../../src/fetcher/unpkg.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { LimpsExtension } from '@sudosandwich/limps/extensions';
|
|
2
|
+
/**
|
|
3
|
+
* limps-headless extension for headless UI contract extraction and analysis.
|
|
4
|
+
*/
|
|
5
|
+
declare const limpsHeadless: LimpsExtension;
|
|
6
|
+
export default limpsHeadless;
|
|
7
|
+
export * from './types/index.js';
|
|
8
|
+
export * from './signatures/index.js';
|
|
9
|
+
export * from './cache/index.js';
|
|
10
|
+
export * from './providers/index.js';
|
|
11
|
+
export * from './rules/index.js';
|
|
12
|
+
export * from './differ/index.js';
|
|
13
|
+
export * from './tools/index.js';
|
|
14
|
+
export * from './config.js';
|
|
15
|
+
export type { RunAuditOptions, BackendMode, MigrationThreshold, MigrationReadiness } from './audit/types.js';
|
|
16
|
+
export { analyzeMigration, computeMigrationSummary } from './audit/analyses/migration.js';
|
|
17
|
+
export type { MigrationSummary } from './audit/analyses/migration.js';
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EAEf,MAAM,gCAAgC,CAAC;AAWxC;;GAEG;AACH,QAAA,MAAM,aAAa,EAAE,cAgBpB,CAAC;AAEF,eAAe,aAAa,CAAC;AAG7B,cAAc,kBAAkB,CAAC;AAGjC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,aAAa,CAAC;AAC5B,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAG7G,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAC1F,YAAY,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { listPrimitivesTool, extractPrimitiveTool, analyzeComponentTool, diffVersionsTool, checkUpdatesTool, runAuditTool, generateReportTool, } from './tools/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* limps-headless extension for headless UI contract extraction and analysis.
|
|
4
|
+
*/
|
|
5
|
+
const limpsHeadless = {
|
|
6
|
+
name: 'limps-headless',
|
|
7
|
+
version: '0.1.2',
|
|
8
|
+
tools: [
|
|
9
|
+
listPrimitivesTool,
|
|
10
|
+
extractPrimitiveTool,
|
|
11
|
+
analyzeComponentTool,
|
|
12
|
+
diffVersionsTool,
|
|
13
|
+
checkUpdatesTool,
|
|
14
|
+
runAuditTool,
|
|
15
|
+
generateReportTool,
|
|
16
|
+
],
|
|
17
|
+
async onInit(_context) {
|
|
18
|
+
// Initialize cache directory
|
|
19
|
+
// This will be implemented by later agents
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
export default limpsHeadless;
|
|
23
|
+
// Re-export types
|
|
24
|
+
export * from './types/index.js';
|
|
25
|
+
// Re-export signatures module
|
|
26
|
+
export * from './signatures/index.js';
|
|
27
|
+
// Re-export cache module
|
|
28
|
+
export * from './cache/index.js';
|
|
29
|
+
// Re-export providers module
|
|
30
|
+
export * from './providers/index.js';
|
|
31
|
+
// Re-export rules engine module
|
|
32
|
+
export * from './rules/index.js';
|
|
33
|
+
// Re-export differ module
|
|
34
|
+
export * from './differ/index.js';
|
|
35
|
+
// Re-export tools module (includes audit tool handlers and schemas)
|
|
36
|
+
export * from './tools/index.js';
|
|
37
|
+
// Config and policy options (Agent 0)
|
|
38
|
+
export * from './config.js';
|
|
39
|
+
// Migration analysis (Agent 2 #3)
|
|
40
|
+
export { analyzeMigration, computeMigrationSummary } from './audit/analyses/migration.js';
|
|
41
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAE1B;;GAEG;AACH,MAAM,aAAa,GAAmB;IACpC,IAAI,EAAE,gBAAgB;IACtB,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE;QACL,kBAAkB;QAClB,oBAAoB;QACpB,oBAAoB;QACpB,gBAAgB;QAChB,gBAAgB;QAChB,YAAY;QACZ,kBAAkB;KACnB;IACD,KAAK,CAAC,MAAM,CAAC,QAA0B;QACrC,6BAA6B;QAC7B,2CAA2C;IAC7C,CAAC;CACF,CAAC;AAEF,eAAe,aAAa,CAAC;AAE7B,kBAAkB;AAClB,cAAc,kBAAkB,CAAC;AAEjC,8BAA8B;AAC9B,cAAc,uBAAuB,CAAC;AAEtC,yBAAyB;AACzB,cAAc,kBAAkB,CAAC;AAEjC,6BAA6B;AAC7B,cAAc,sBAAsB,CAAC;AAErC,gCAAgC;AAChC,cAAc,kBAAkB,CAAC;AAEjC,0BAA0B;AAC1B,cAAc,mBAAmB,CAAC;AAElC,oEAAoE;AACpE,cAAc,kBAAkB,CAAC;AAEjC,sCAAsC;AACtC,cAAc,aAAa,CAAC;AAG5B,kCAAkC;AAClC,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base UI backend provider implementation (Agent 1 #2).
|
|
3
|
+
*/
|
|
4
|
+
import type { BackendProvider } from './interface.js';
|
|
5
|
+
/**
|
|
6
|
+
* Base UI backend provider.
|
|
7
|
+
* Base UI is the modern headless UI library from the MUI team.
|
|
8
|
+
*/
|
|
9
|
+
export declare const baseProvider: BackendProvider;
|
|
10
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/providers/base.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AActD;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,eA6E1B,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base UI backend provider implementation (Agent 1 #2).
|
|
3
|
+
*/
|
|
4
|
+
/** Import patterns for Base UI packages. */
|
|
5
|
+
const BASE_IMPORT_PATTERNS = [
|
|
6
|
+
/^@base-ui\/react/,
|
|
7
|
+
/^@base-ui\//,
|
|
8
|
+
/^@base-ui-components\//,
|
|
9
|
+
/^@base_ui\//,
|
|
10
|
+
];
|
|
11
|
+
/** JSX attribute patterns that indicate Base UI usage. */
|
|
12
|
+
const BASE_EVIDENCE_PATTERNS = ['render'];
|
|
13
|
+
/**
|
|
14
|
+
* Base UI backend provider.
|
|
15
|
+
* Base UI is the modern headless UI library from the MUI team.
|
|
16
|
+
*/
|
|
17
|
+
export const baseProvider = {
|
|
18
|
+
id: 'base',
|
|
19
|
+
label: 'Base UI',
|
|
20
|
+
deprecated: false,
|
|
21
|
+
detectImports(imports) {
|
|
22
|
+
return imports.some((imp) => BASE_IMPORT_PATTERNS.some((pattern) => pattern.test(imp)));
|
|
23
|
+
},
|
|
24
|
+
detectPatterns(evidence) {
|
|
25
|
+
return evidence.some((e) => BASE_EVIDENCE_PATTERNS.includes(e));
|
|
26
|
+
},
|
|
27
|
+
analyzeComponent(component) {
|
|
28
|
+
const issues = [];
|
|
29
|
+
// Check for missing render prop pattern when using Base UI
|
|
30
|
+
if (component.backend === 'base') {
|
|
31
|
+
// Base UI components typically use render prop pattern
|
|
32
|
+
if (!component.evidence.includes('render')) {
|
|
33
|
+
// This is informational, not necessarily an issue
|
|
34
|
+
// Base UI can work without render prop for simple cases
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// Check for mixed usage (potential migration issue)
|
|
38
|
+
if (component.mixedUsage) {
|
|
39
|
+
issues.push({
|
|
40
|
+
component: component.name,
|
|
41
|
+
category: 'migration',
|
|
42
|
+
severity: 'medium',
|
|
43
|
+
message: `Component "${component.name}" uses both Radix and Base UI. Consider completing migration.`,
|
|
44
|
+
suggestion: 'Migrate fully to Base UI for consistency.',
|
|
45
|
+
evidence: component.importSources,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
return issues;
|
|
49
|
+
},
|
|
50
|
+
analyzeProject(components) {
|
|
51
|
+
const issues = [];
|
|
52
|
+
const baseComponents = components.filter((c) => c.backend === 'base');
|
|
53
|
+
const mixedComponents = components.filter((c) => c.mixedUsage);
|
|
54
|
+
// Project-level consistency check
|
|
55
|
+
if (mixedComponents.length > 0) {
|
|
56
|
+
issues.push({
|
|
57
|
+
category: 'migration',
|
|
58
|
+
severity: 'medium',
|
|
59
|
+
message: `${mixedComponents.length} component(s) have mixed Radix/Base usage.`,
|
|
60
|
+
suggestion: 'Review mixed components and plan migration strategy.',
|
|
61
|
+
evidence: mixedComponents.map((c) => c.path),
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
// Check for Base UI adoption progress
|
|
65
|
+
const totalHeadless = components.filter((c) => c.backend !== 'unknown').length;
|
|
66
|
+
if (totalHeadless > 0 && baseComponents.length > 0) {
|
|
67
|
+
const adoptionRate = Math.round((baseComponents.length / totalHeadless) * 100);
|
|
68
|
+
if (adoptionRate < 50) {
|
|
69
|
+
issues.push({
|
|
70
|
+
category: 'migration',
|
|
71
|
+
severity: 'low',
|
|
72
|
+
message: `Base UI adoption is at ${adoptionRate}%. Consider increasing adoption.`,
|
|
73
|
+
suggestion: 'Plan migration of remaining Radix components to Base UI.',
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return issues;
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/providers/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider exports (includes default radix provider registration).
|
|
3
|
+
* Agent 1 #2: Extended with backend providers for detection and analysis.
|
|
4
|
+
*/
|
|
5
|
+
export * from './interface.js';
|
|
6
|
+
export * from './registry.js';
|
|
7
|
+
export * from './radix.js';
|
|
8
|
+
export * from './radix-backend.js';
|
|
9
|
+
export * from './base.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider exports (includes default radix provider registration).
|
|
3
|
+
* Agent 1 #2: Extended with backend providers for detection and analysis.
|
|
4
|
+
*/
|
|
5
|
+
export * from './interface.js';
|
|
6
|
+
export * from './registry.js';
|
|
7
|
+
export * from './radix.js';
|
|
8
|
+
export * from './radix-backend.js';
|
|
9
|
+
export * from './base.js';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider interface for component library integrations.
|
|
3
|
+
*/
|
|
4
|
+
import type { ExtractedPrimitive, BehaviorSignature } from '../types/index.js';
|
|
5
|
+
import type { ComponentMetadata, Issue, HeadlessBackend } from '../audit/types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Component library provider interface (for type fetching).
|
|
8
|
+
*/
|
|
9
|
+
export interface ComponentLibraryProvider {
|
|
10
|
+
name: string;
|
|
11
|
+
displayName: string;
|
|
12
|
+
listPrimitives(version: string): Promise<string[]>;
|
|
13
|
+
resolveVersion(versionHint: string): Promise<string>;
|
|
14
|
+
fetchTypes(primitive: string, version: string): Promise<string>;
|
|
15
|
+
extract?(typeContent: string): ExtractedPrimitive;
|
|
16
|
+
generateSignature?(extracted: ExtractedPrimitive): BehaviorSignature;
|
|
17
|
+
}
|
|
18
|
+
export type ProviderRegistry = Map<string, ComponentLibraryProvider>;
|
|
19
|
+
/**
|
|
20
|
+
* Backend provider interface for detection and analysis (Agent 1 #2).
|
|
21
|
+
* Providers supply backend-specific rules and metadata.
|
|
22
|
+
*/
|
|
23
|
+
export interface BackendProvider {
|
|
24
|
+
/** Backend identifier. */
|
|
25
|
+
id: HeadlessBackend;
|
|
26
|
+
/** Human-readable label. */
|
|
27
|
+
label: string;
|
|
28
|
+
/** True if this backend is deprecated (e.g., Radix legacy). */
|
|
29
|
+
deprecated?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Detect if imports indicate this backend.
|
|
32
|
+
* @param imports - Array of import source strings.
|
|
33
|
+
* @returns True if any import matches this backend.
|
|
34
|
+
*/
|
|
35
|
+
detectImports(imports: string[]): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Detect if pattern evidence indicates this backend.
|
|
38
|
+
* @param evidence - Array of evidence strings (e.g., "asChild", "render").
|
|
39
|
+
* @returns True if any evidence matches this backend.
|
|
40
|
+
*/
|
|
41
|
+
detectPatterns(evidence: string[]): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Analyze a single component for issues.
|
|
44
|
+
* @param component - Component metadata to analyze.
|
|
45
|
+
* @returns Array of issues found.
|
|
46
|
+
*/
|
|
47
|
+
analyzeComponent(component: ComponentMetadata): Issue[];
|
|
48
|
+
/**
|
|
49
|
+
* Analyze the entire project for cross-component issues.
|
|
50
|
+
* @param components - All discovered components.
|
|
51
|
+
* @returns Array of project-level issues.
|
|
52
|
+
*/
|
|
53
|
+
analyzeProject(components: ComponentMetadata[]): Issue[];
|
|
54
|
+
}
|
|
55
|
+
export type BackendProviderRegistry = Map<HeadlessBackend, BackendProvider>;
|
|
56
|
+
//# sourceMappingURL=interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/providers/interface.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEnF;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACnD,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAChE,OAAO,CAAC,CAAC,WAAW,EAAE,MAAM,GAAG,kBAAkB,CAAC;IAClD,iBAAiB,CAAC,CAAC,SAAS,EAAE,kBAAkB,GAAG,iBAAiB,CAAC;CACtE;AAED,MAAM,MAAM,gBAAgB,GAAG,GAAG,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;AAErE;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,0BAA0B;IAC1B,EAAE,EAAE,eAAe,CAAC;IACpB,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;OAIG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAE1C;;;;OAIG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAE5C;;;;OAIG;IACH,gBAAgB,CAAC,SAAS,EAAE,iBAAiB,GAAG,KAAK,EAAE,CAAC;IAExD;;;;OAIG;IACH,cAAc,CAAC,UAAU,EAAE,iBAAiB,EAAE,GAAG,KAAK,EAAE,CAAC;CAC1D;AAED,MAAM,MAAM,uBAAuB,GAAG,GAAG,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/providers/interface.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Radix UI backend provider implementation (Agent 1 #2).
|
|
3
|
+
* Marked as deprecated to encourage migration to Base UI.
|
|
4
|
+
*/
|
|
5
|
+
import type { BackendProvider } from './interface.js';
|
|
6
|
+
/**
|
|
7
|
+
* Radix UI backend provider.
|
|
8
|
+
* Marked as deprecated - projects should consider migrating to Base UI.
|
|
9
|
+
*/
|
|
10
|
+
export declare const radixBackendProvider: BackendProvider;
|
|
11
|
+
//# sourceMappingURL=radix-backend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radix-backend.d.ts","sourceRoot":"","sources":["../../src/providers/radix-backend.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AActD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,eAuGlC,CAAC"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Radix UI backend provider implementation (Agent 1 #2).
|
|
3
|
+
* Marked as deprecated to encourage migration to Base UI.
|
|
4
|
+
*/
|
|
5
|
+
/** Import patterns for Radix UI packages. */
|
|
6
|
+
const RADIX_IMPORT_PATTERNS = [
|
|
7
|
+
/^@radix-ui\/react-/,
|
|
8
|
+
/^@radix-ui\/primitive/,
|
|
9
|
+
/^radix-ui$/,
|
|
10
|
+
/^radix-ui\//,
|
|
11
|
+
];
|
|
12
|
+
/** JSX attribute patterns that indicate Radix UI usage. */
|
|
13
|
+
const RADIX_EVIDENCE_PATTERNS = ['asChild'];
|
|
14
|
+
/**
|
|
15
|
+
* Radix UI backend provider.
|
|
16
|
+
* Marked as deprecated - projects should consider migrating to Base UI.
|
|
17
|
+
*/
|
|
18
|
+
export const radixBackendProvider = {
|
|
19
|
+
id: 'radix',
|
|
20
|
+
label: 'Radix UI (Legacy)',
|
|
21
|
+
deprecated: true,
|
|
22
|
+
detectImports(imports) {
|
|
23
|
+
return imports.some((imp) => RADIX_IMPORT_PATTERNS.some((pattern) => pattern.test(imp)));
|
|
24
|
+
},
|
|
25
|
+
detectPatterns(evidence) {
|
|
26
|
+
return evidence.some((e) => RADIX_EVIDENCE_PATTERNS.includes(e));
|
|
27
|
+
},
|
|
28
|
+
analyzeComponent(component) {
|
|
29
|
+
const issues = [];
|
|
30
|
+
// Radix-specific checks
|
|
31
|
+
if (component.backend === 'radix') {
|
|
32
|
+
// Check for asChild usage (common Radix pattern)
|
|
33
|
+
if (component.evidence.includes('asChild')) {
|
|
34
|
+
// This is fine, but note it for migration planning
|
|
35
|
+
issues.push({
|
|
36
|
+
component: component.name,
|
|
37
|
+
category: 'migration',
|
|
38
|
+
severity: 'low',
|
|
39
|
+
message: `Component "${component.name}" uses asChild pattern which needs migration attention.`,
|
|
40
|
+
suggestion: 'When migrating to Base UI, replace asChild with render prop pattern.',
|
|
41
|
+
evidence: ['asChild'],
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
// Deprecation warning
|
|
45
|
+
issues.push({
|
|
46
|
+
component: component.name,
|
|
47
|
+
category: 'dependencies',
|
|
48
|
+
severity: 'low',
|
|
49
|
+
message: `Component "${component.name}" uses Radix UI which is considered legacy.`,
|
|
50
|
+
suggestion: 'Consider migrating to Base UI for better long-term support.',
|
|
51
|
+
evidence: component.importSources,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
// Check for mixed usage
|
|
55
|
+
if (component.mixedUsage) {
|
|
56
|
+
issues.push({
|
|
57
|
+
component: component.name,
|
|
58
|
+
category: 'migration',
|
|
59
|
+
severity: 'medium',
|
|
60
|
+
message: `Component "${component.name}" uses both Radix and Base UI. Migration in progress?`,
|
|
61
|
+
suggestion: 'Complete migration to Base UI for consistency.',
|
|
62
|
+
evidence: component.importSources,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
return issues;
|
|
66
|
+
},
|
|
67
|
+
analyzeProject(components) {
|
|
68
|
+
const issues = [];
|
|
69
|
+
const radixComponents = components.filter((c) => c.backend === 'radix');
|
|
70
|
+
const mixedComponents = components.filter((c) => c.mixedUsage);
|
|
71
|
+
// Project-level deprecation warning
|
|
72
|
+
if (radixComponents.length > 0) {
|
|
73
|
+
issues.push({
|
|
74
|
+
category: 'dependencies',
|
|
75
|
+
severity: 'medium',
|
|
76
|
+
message: `${radixComponents.length} component(s) still use Radix UI (deprecated).`,
|
|
77
|
+
suggestion: 'Plan migration to Base UI. Use limps-headless audit for migration guidance.',
|
|
78
|
+
evidence: radixComponents.slice(0, 5).map((c) => c.path),
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
// Mixed usage warning
|
|
82
|
+
if (mixedComponents.length > 0) {
|
|
83
|
+
issues.push({
|
|
84
|
+
category: 'migration',
|
|
85
|
+
severity: 'medium',
|
|
86
|
+
message: `${mixedComponents.length} component(s) have mixed Radix/Base usage.`,
|
|
87
|
+
suggestion: 'Complete migration for these components first.',
|
|
88
|
+
evidence: mixedComponents.map((c) => c.path),
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
// Migration readiness assessment
|
|
92
|
+
const totalHeadless = components.filter((c) => c.backend !== 'unknown').length;
|
|
93
|
+
if (totalHeadless > 0) {
|
|
94
|
+
const legacyRate = Math.round((radixComponents.length / totalHeadless) * 100);
|
|
95
|
+
if (legacyRate > 50) {
|
|
96
|
+
issues.push({
|
|
97
|
+
category: 'migration',
|
|
98
|
+
severity: 'high',
|
|
99
|
+
message: `${legacyRate}% of headless components still use Radix UI.`,
|
|
100
|
+
suggestion: 'Prioritize migration to reduce technical debt.',
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return issues;
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
//# sourceMappingURL=radix-backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radix-backend.js","sourceRoot":"","sources":["../../src/providers/radix-backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radix.d.ts","sourceRoot":"","sources":["../../src/providers/radix.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAO/D,eAAO,MAAM,aAAa,EAAE,wBAkB3B,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Radix UI provider implementation.
|
|
3
|
+
*/
|
|
4
|
+
import { resolvePackage, fetchTypesWithFallback, listPrimitives, } from '../fetcher/index.js';
|
|
5
|
+
export const radixProvider = {
|
|
6
|
+
name: 'radix',
|
|
7
|
+
displayName: 'Radix UI',
|
|
8
|
+
async listPrimitives(version) {
|
|
9
|
+
const primitives = await listPrimitives(version);
|
|
10
|
+
return primitives.map((p) => p.name);
|
|
11
|
+
},
|
|
12
|
+
async resolveVersion(versionHint) {
|
|
13
|
+
const resolved = await resolvePackage('dialog', versionHint);
|
|
14
|
+
return resolved.version;
|
|
15
|
+
},
|
|
16
|
+
async fetchTypes(primitive, version) {
|
|
17
|
+
const content = await fetchTypesWithFallback(primitive, version);
|
|
18
|
+
return content.content;
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=radix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radix.js","sourceRoot":"","sources":["../../src/providers/radix.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,cAAc,GACf,MAAM,qBAAqB,CAAC;AAE7B,MAAM,CAAC,MAAM,aAAa,GAA6B;IACrD,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,UAAU;IAEvB,KAAK,CAAC,cAAc,CAAC,OAAe;QAClC,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;QACjD,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,WAAmB;QACtC,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAC7D,OAAO,QAAQ,CAAC,OAAO,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,SAAiB,EAAE,OAAe;QACjD,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACjE,OAAO,OAAO,CAAC,OAAO,CAAC;IACzB,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider registry for component libraries (Agent 1 #2 - extended with backend providers).
|
|
3
|
+
*/
|
|
4
|
+
import type { ComponentLibraryProvider, ProviderRegistry, BackendProvider, BackendProviderRegistry } from './interface.js';
|
|
5
|
+
import type { HeadlessBackend } from '../audit/types.js';
|
|
6
|
+
declare const providers: ProviderRegistry;
|
|
7
|
+
export declare function registerProvider(provider: ComponentLibraryProvider): void;
|
|
8
|
+
export declare function getProviderNames(): string[];
|
|
9
|
+
export declare function getProvider(name: string): ComponentLibraryProvider;
|
|
10
|
+
export { providers };
|
|
11
|
+
declare const backendProviders: BackendProviderRegistry;
|
|
12
|
+
export declare function registerBackendProvider(provider: BackendProvider): void;
|
|
13
|
+
export declare function getBackendProviderIds(): HeadlessBackend[];
|
|
14
|
+
export declare function getBackendProvider(id: HeadlessBackend): BackendProvider | undefined;
|
|
15
|
+
export declare function getAllBackendProviders(): BackendProvider[];
|
|
16
|
+
export { backendProviders };
|
|
17
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,wBAAwB,EACxB,gBAAgB,EAChB,eAAe,EACf,uBAAuB,EACxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAOzD,QAAA,MAAM,SAAS,EAAE,gBAA4B,CAAC;AAM9C,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,wBAAwB,GAAG,IAAI,CAMzE;AAED,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAE3C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,wBAAwB,CAQlE;AAED,OAAO,EAAE,SAAS,EAAE,CAAC;AAOrB,QAAA,MAAM,gBAAgB,EAAE,uBAAmC,CAAC;AAE5D,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAKvE;AAED,wBAAgB,qBAAqB,IAAI,eAAe,EAAE,CAEzD;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,eAAe,GAAG,eAAe,GAAG,SAAS,CAEnF;AAED,wBAAgB,sBAAsB,IAAI,eAAe,EAAE,CAE1D;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider registry for component libraries (Agent 1 #2 - extended with backend providers).
|
|
3
|
+
*/
|
|
4
|
+
import { radixProvider } from './radix.js';
|
|
5
|
+
import { radixBackendProvider } from './radix-backend.js';
|
|
6
|
+
import { baseProvider } from './base.js';
|
|
7
|
+
// --- Component Library Providers (for type fetching) ---
|
|
8
|
+
const providers = new Map();
|
|
9
|
+
function normalizeProviderName(name) {
|
|
10
|
+
return name.trim().toLowerCase();
|
|
11
|
+
}
|
|
12
|
+
export function registerProvider(provider) {
|
|
13
|
+
const key = normalizeProviderName(provider.name);
|
|
14
|
+
if (providers.has(key)) {
|
|
15
|
+
throw new Error(`Provider "${provider.name}" is already registered`);
|
|
16
|
+
}
|
|
17
|
+
providers.set(key, provider);
|
|
18
|
+
}
|
|
19
|
+
export function getProviderNames() {
|
|
20
|
+
return [...providers.keys()];
|
|
21
|
+
}
|
|
22
|
+
export function getProvider(name) {
|
|
23
|
+
const key = normalizeProviderName(name);
|
|
24
|
+
const provider = providers.get(key);
|
|
25
|
+
if (!provider) {
|
|
26
|
+
const available = getProviderNames().length > 0 ? getProviderNames().join(', ') : 'none';
|
|
27
|
+
throw new Error(`Provider "${name}" is not registered. Available: ${available}`);
|
|
28
|
+
}
|
|
29
|
+
return provider;
|
|
30
|
+
}
|
|
31
|
+
export { providers };
|
|
32
|
+
// Register component library providers
|
|
33
|
+
registerProvider(radixProvider);
|
|
34
|
+
// --- Backend Providers (for detection and analysis) ---
|
|
35
|
+
const backendProviders = new Map();
|
|
36
|
+
export function registerBackendProvider(provider) {
|
|
37
|
+
if (backendProviders.has(provider.id)) {
|
|
38
|
+
throw new Error(`Backend provider "${provider.id}" is already registered`);
|
|
39
|
+
}
|
|
40
|
+
backendProviders.set(provider.id, provider);
|
|
41
|
+
}
|
|
42
|
+
export function getBackendProviderIds() {
|
|
43
|
+
return [...backendProviders.keys()];
|
|
44
|
+
}
|
|
45
|
+
export function getBackendProvider(id) {
|
|
46
|
+
return backendProviders.get(id);
|
|
47
|
+
}
|
|
48
|
+
export function getAllBackendProviders() {
|
|
49
|
+
return [...backendProviders.values()];
|
|
50
|
+
}
|
|
51
|
+
export { backendProviders };
|
|
52
|
+
// Register backend providers
|
|
53
|
+
registerBackendProvider(radixBackendProvider);
|
|
54
|
+
registerBackendProvider(baseProvider);
|
|
55
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,0DAA0D;AAE1D,MAAM,SAAS,GAAqB,IAAI,GAAG,EAAE,CAAC;AAE9C,SAAS,qBAAqB,CAAC,IAAY;IACzC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAkC;IACjE,MAAM,GAAG,GAAG,qBAAqB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,aAAa,QAAQ,CAAC,IAAI,yBAAyB,CAAC,CAAC;IACvE,CAAC;IACD,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,GAAG,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,SAAS,GAAG,gBAAgB,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACzF,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,mCAAmC,SAAS,EAAE,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,CAAC;AAErB,uCAAuC;AACvC,gBAAgB,CAAC,aAAa,CAAC,CAAC;AAEhC,yDAAyD;AAEzD,MAAM,gBAAgB,GAA4B,IAAI,GAAG,EAAE,CAAC;AAE5D,MAAM,UAAU,uBAAuB,CAAC,QAAyB;IAC/D,IAAI,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,EAAE,yBAAyB,CAAC,CAAC;IAC7E,CAAC;IACD,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,CAAC,GAAG,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAmB;IACpD,OAAO,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;AACxC,CAAC;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAE5B,6BAA6B;AAC7B,uBAAuB,CAAC,oBAAoB,CAAC,CAAC;AAC9C,uBAAuB,CAAC,YAAY,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/rules/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAa,OAAO,EAAE,MAAM,YAAY,CAAC;AAGvE,wBAAgB,eAAe,CAAC,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,GAAG,gBAAgB,CAsCnF"}
|