@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,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contract differ module for detecting changes between Radix versions.
|
|
3
|
+
*/
|
|
4
|
+
import type { RadixChange, RadixDiff } from './types.js';
|
|
5
|
+
export * from './types.js';
|
|
6
|
+
export { diffContracts, diffProps, diffSubComponents } from './props.js';
|
|
7
|
+
export { getSeverity, isBreaking, isWarning, isInfo, getBreakingTypes, sortBySeverity, } from './severity.js';
|
|
8
|
+
export { generateHint, generateDescription } from './hints.js';
|
|
9
|
+
export { parseUnionMembers, isNarrowing, isWidening } from './props.js';
|
|
10
|
+
/**
|
|
11
|
+
* Diff a single primitive between two versions.
|
|
12
|
+
*/
|
|
13
|
+
export declare function diffPrimitive(primitiveSlug: string, fromVersion: string, toVersion: string): Promise<RadixChange[]>;
|
|
14
|
+
/**
|
|
15
|
+
* Diff all primitives (or a subset) between two Radix versions.
|
|
16
|
+
* Version resolution (fromVersion/toVersion) is based on the first primitive
|
|
17
|
+
* in the list; all primitives are assumed to share the same Radix version.
|
|
18
|
+
*
|
|
19
|
+
* @param fromVersion - Starting version
|
|
20
|
+
* @param toVersion - Ending version (default: 'latest')
|
|
21
|
+
* @param primitives - Optional list of primitives to diff (default: all)
|
|
22
|
+
* @returns RadixDiff with all changes and summary
|
|
23
|
+
*/
|
|
24
|
+
export declare function diffVersions(fromVersion: string, toVersion?: string, primitives?: string[]): Promise<RadixDiff>;
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/differ/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAe,MAAM,YAAY,CAAC;AAYtE,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EACL,WAAW,EACX,UAAU,EACV,SAAS,EACT,MAAM,EACN,gBAAgB,EAChB,cAAc,GACf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAyDxE;;GAEG;AACH,wBAAsB,aAAa,CACjC,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,WAAW,EAAE,CAAC,CAOxB;AAED;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,MAAiB,EAC5B,UAAU,CAAC,EAAE,MAAM,EAAE,GACpB,OAAO,CAAC,SAAS,CAAC,CAgDpB"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contract differ module for detecting changes between Radix versions.
|
|
3
|
+
*/
|
|
4
|
+
import { diffContracts } from './props.js';
|
|
5
|
+
import { sortBySeverity } from './severity.js';
|
|
6
|
+
import { resolvePackage, fetchTypesWithFallback, } from '../fetcher/index.js';
|
|
7
|
+
import { extractPrimitive } from '../extractor/index.js';
|
|
8
|
+
import { getFromCache, saveToCache } from '../cache/index.js';
|
|
9
|
+
import { listPrimitives } from '../fetcher/npm-registry.js';
|
|
10
|
+
// Re-export types and utilities
|
|
11
|
+
export * from './types.js';
|
|
12
|
+
export { diffContracts, diffProps, diffSubComponents } from './props.js';
|
|
13
|
+
export { getSeverity, isBreaking, isWarning, isInfo, getBreakingTypes, sortBySeverity, } from './severity.js';
|
|
14
|
+
export { generateHint, generateDescription } from './hints.js';
|
|
15
|
+
export { parseUnionMembers, isNarrowing, isWidening } from './props.js';
|
|
16
|
+
/**
|
|
17
|
+
* Convert primitive name to PascalCase.
|
|
18
|
+
*/
|
|
19
|
+
function toPascalCase(name) {
|
|
20
|
+
return name
|
|
21
|
+
.split('-')
|
|
22
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
|
|
23
|
+
.join('');
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Calculate summary counts from changes.
|
|
27
|
+
*/
|
|
28
|
+
function calculateSummary(changes) {
|
|
29
|
+
return {
|
|
30
|
+
totalChanges: changes.length,
|
|
31
|
+
breaking: changes.filter((c) => c.severity === 'breaking').length,
|
|
32
|
+
warnings: changes.filter((c) => c.severity === 'warning').length,
|
|
33
|
+
info: changes.filter((c) => c.severity === 'info').length,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Fetch or load extracted primitive data for a given version.
|
|
38
|
+
*/
|
|
39
|
+
async function getExtractedPrimitive(primitiveSlug, version) {
|
|
40
|
+
const primitiveName = toPascalCase(primitiveSlug);
|
|
41
|
+
// Try cache first
|
|
42
|
+
const cached = await getFromCache(primitiveName, version, {
|
|
43
|
+
ignoreExpired: true, // For diffing, we want any cached version
|
|
44
|
+
});
|
|
45
|
+
if (cached) {
|
|
46
|
+
return cached;
|
|
47
|
+
}
|
|
48
|
+
// Fetch and extract
|
|
49
|
+
const resolved = await resolvePackage(primitiveSlug, version);
|
|
50
|
+
const content = await fetchTypesWithFallback(primitiveSlug, version);
|
|
51
|
+
const extracted = extractPrimitive(content.content, primitiveName, resolved.version, content.resolved.packageName);
|
|
52
|
+
// Save to cache
|
|
53
|
+
await saveToCache(primitiveName, resolved.version, extracted);
|
|
54
|
+
return extracted;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Diff a single primitive between two versions.
|
|
58
|
+
*/
|
|
59
|
+
export async function diffPrimitive(primitiveSlug, fromVersion, toVersion) {
|
|
60
|
+
const [before, after] = await Promise.all([
|
|
61
|
+
getExtractedPrimitive(primitiveSlug, fromVersion),
|
|
62
|
+
getExtractedPrimitive(primitiveSlug, toVersion),
|
|
63
|
+
]);
|
|
64
|
+
return diffContracts(before, after);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Diff all primitives (or a subset) between two Radix versions.
|
|
68
|
+
* Version resolution (fromVersion/toVersion) is based on the first primitive
|
|
69
|
+
* in the list; all primitives are assumed to share the same Radix version.
|
|
70
|
+
*
|
|
71
|
+
* @param fromVersion - Starting version
|
|
72
|
+
* @param toVersion - Ending version (default: 'latest')
|
|
73
|
+
* @param primitives - Optional list of primitives to diff (default: all)
|
|
74
|
+
* @returns RadixDiff with all changes and summary
|
|
75
|
+
*/
|
|
76
|
+
export async function diffVersions(fromVersion, toVersion = 'latest', primitives) {
|
|
77
|
+
// Get list of primitives to diff
|
|
78
|
+
let primitivesToDiff;
|
|
79
|
+
if (primitives && primitives.length > 0) {
|
|
80
|
+
primitivesToDiff = primitives.map((p) => p.toLowerCase());
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
const allPrimitives = await listPrimitives();
|
|
84
|
+
primitivesToDiff = allPrimitives.map((p) => p.name);
|
|
85
|
+
}
|
|
86
|
+
if (primitivesToDiff.length === 0) {
|
|
87
|
+
throw new Error('No primitives to diff (list is empty)');
|
|
88
|
+
}
|
|
89
|
+
// Resolve actual versions (using first primitive as reference)
|
|
90
|
+
const resolvedFrom = await resolvePackage(primitivesToDiff[0], fromVersion);
|
|
91
|
+
const resolvedTo = await resolvePackage(primitivesToDiff[0], toVersion);
|
|
92
|
+
// Diff each primitive
|
|
93
|
+
const allChanges = [];
|
|
94
|
+
for (const primitiveSlug of primitivesToDiff) {
|
|
95
|
+
try {
|
|
96
|
+
const changes = await diffPrimitive(primitiveSlug, resolvedFrom.version, resolvedTo.version);
|
|
97
|
+
allChanges.push(...changes);
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
// Skip primitives that fail (might not exist in one version)
|
|
101
|
+
console.warn(`Failed to diff ${primitiveSlug}: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// Sort and calculate summary
|
|
105
|
+
const sortedChanges = sortBySeverity(allChanges);
|
|
106
|
+
const summary = calculateSummary(sortedChanges);
|
|
107
|
+
return {
|
|
108
|
+
fromVersion: resolvedFrom.version,
|
|
109
|
+
toVersion: resolvedTo.version,
|
|
110
|
+
hasBreakingChanges: summary.breaking > 0,
|
|
111
|
+
summary,
|
|
112
|
+
changes: sortedChanges,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/differ/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Props diffing logic for detecting changes between contract versions.
|
|
3
|
+
*/
|
|
4
|
+
import type { ExtractedPrimitive, PropDefinition, SubComponentDefinition } from '../types/index.js';
|
|
5
|
+
import type { RadixChange } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Parse a union type string into its member types.
|
|
8
|
+
* @example 'string | number' -> ['string', 'number']
|
|
9
|
+
* @example '"left" | "right" | "center"' -> ['"left"', '"right"', '"center"']
|
|
10
|
+
*/
|
|
11
|
+
export declare function parseUnionMembers(typeString: string): string[];
|
|
12
|
+
/**
|
|
13
|
+
* Check if a type change represents narrowing (breaking).
|
|
14
|
+
* Narrowing occurs when the new type accepts fewer values than before.
|
|
15
|
+
* @example 'string | number' -> 'string' is narrowing
|
|
16
|
+
*/
|
|
17
|
+
export declare function isNarrowing(before: string, after: string): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Check if a type change represents widening (safe/info).
|
|
20
|
+
* Widening occurs when the new type accepts more values than before.
|
|
21
|
+
* @example 'string' -> 'string | number' is widening
|
|
22
|
+
*/
|
|
23
|
+
export declare function isWidening(before: string, after: string): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Diff props between two arrays of PropDefinitions.
|
|
26
|
+
*/
|
|
27
|
+
export declare function diffProps(before: PropDefinition[], after: PropDefinition[], primitive: string, subComponent?: string): RadixChange[];
|
|
28
|
+
/**
|
|
29
|
+
* Diff sub-components between two ExtractedPrimitives.
|
|
30
|
+
*/
|
|
31
|
+
export declare function diffSubComponents(before: SubComponentDefinition[], after: SubComponentDefinition[], primitive: string): RadixChange[];
|
|
32
|
+
/**
|
|
33
|
+
* Diff two ExtractedPrimitive objects to find all changes.
|
|
34
|
+
*/
|
|
35
|
+
export declare function diffContracts(before: ExtractedPrimitive, after: ExtractedPrimitive): RadixChange[];
|
|
36
|
+
//# sourceMappingURL=props.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"props.d.ts","sourceRoot":"","sources":["../../src/differ/props.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,sBAAsB,EACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,YAAY,CAAC;AAI1D;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAyC9D;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAmBlE;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAejE;AAqCD;;GAEG;AACH,wBAAgB,SAAS,CACvB,MAAM,EAAE,cAAc,EAAE,EACxB,KAAK,EAAE,cAAc,EAAE,EACvB,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,MAAM,GACpB,WAAW,EAAE,CAqHf;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,sBAAsB,EAAE,EAChC,KAAK,EAAE,sBAAsB,EAAE,EAC/B,SAAS,EAAE,MAAM,GAChB,WAAW,EAAE,CAkCf;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,kBAAkB,EAC1B,KAAK,EAAE,kBAAkB,GACxB,WAAW,EAAE,CAiBf"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Props diffing logic for detecting changes between contract versions.
|
|
3
|
+
*/
|
|
4
|
+
import { getSeverity } from './severity.js';
|
|
5
|
+
import { generateHint, generateDescription } from './hints.js';
|
|
6
|
+
/**
|
|
7
|
+
* Parse a union type string into its member types.
|
|
8
|
+
* @example 'string | number' -> ['string', 'number']
|
|
9
|
+
* @example '"left" | "right" | "center"' -> ['"left"', '"right"', '"center"']
|
|
10
|
+
*/
|
|
11
|
+
export function parseUnionMembers(typeString) {
|
|
12
|
+
// Handle simple cases first
|
|
13
|
+
if (!typeString.includes('|')) {
|
|
14
|
+
return [typeString.trim()];
|
|
15
|
+
}
|
|
16
|
+
// Split by | but respect nested types (generics, parentheses)
|
|
17
|
+
const members = [];
|
|
18
|
+
let current = '';
|
|
19
|
+
let depth = 0;
|
|
20
|
+
let prevChar = '';
|
|
21
|
+
for (const char of typeString) {
|
|
22
|
+
if (char === '<' || char === '(' || char === '{' || char === '[') {
|
|
23
|
+
depth++;
|
|
24
|
+
current += char;
|
|
25
|
+
}
|
|
26
|
+
else if (char === ')' || char === '}' || char === ']') {
|
|
27
|
+
depth--;
|
|
28
|
+
current += char;
|
|
29
|
+
}
|
|
30
|
+
else if (char === '>') {
|
|
31
|
+
// Only treat '>' as a closing bracket if it's not part of '=>' (arrow function)
|
|
32
|
+
if (prevChar !== '=') {
|
|
33
|
+
depth--;
|
|
34
|
+
}
|
|
35
|
+
current += char;
|
|
36
|
+
}
|
|
37
|
+
else if (char === '|' && depth === 0) {
|
|
38
|
+
if (current.trim()) {
|
|
39
|
+
members.push(current.trim());
|
|
40
|
+
}
|
|
41
|
+
current = '';
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
current += char;
|
|
45
|
+
}
|
|
46
|
+
prevChar = char;
|
|
47
|
+
}
|
|
48
|
+
if (current.trim()) {
|
|
49
|
+
members.push(current.trim());
|
|
50
|
+
}
|
|
51
|
+
return members;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Check if a type change represents narrowing (breaking).
|
|
55
|
+
* Narrowing occurs when the new type accepts fewer values than before.
|
|
56
|
+
* @example 'string | number' -> 'string' is narrowing
|
|
57
|
+
*/
|
|
58
|
+
export function isNarrowing(before, after) {
|
|
59
|
+
const beforeMembers = parseUnionMembers(before);
|
|
60
|
+
const afterMembers = parseUnionMembers(after);
|
|
61
|
+
// If same members, not narrowing
|
|
62
|
+
if (beforeMembers.length === afterMembers.length) {
|
|
63
|
+
const beforeSet = new Set(beforeMembers);
|
|
64
|
+
const afterSet = new Set(afterMembers);
|
|
65
|
+
if ([...afterSet].every((m) => beforeSet.has(m))) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Narrowing: all after members exist in before, and fewer members
|
|
70
|
+
const beforeSet = new Set(beforeMembers);
|
|
71
|
+
return (afterMembers.every((m) => beforeSet.has(m)) &&
|
|
72
|
+
afterMembers.length < beforeMembers.length);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Check if a type change represents widening (safe/info).
|
|
76
|
+
* Widening occurs when the new type accepts more values than before.
|
|
77
|
+
* @example 'string' -> 'string | number' is widening
|
|
78
|
+
*/
|
|
79
|
+
export function isWidening(before, after) {
|
|
80
|
+
const beforeMembers = parseUnionMembers(before);
|
|
81
|
+
const afterMembers = parseUnionMembers(after);
|
|
82
|
+
// If same members, not widening
|
|
83
|
+
if (beforeMembers.length === afterMembers.length) {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
// Widening: all before members exist in after, and more members
|
|
87
|
+
const afterSet = new Set(afterMembers);
|
|
88
|
+
return (beforeMembers.every((m) => afterSet.has(m)) &&
|
|
89
|
+
afterMembers.length > beforeMembers.length);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Normalize a type string for comparison.
|
|
93
|
+
*/
|
|
94
|
+
function normalizeType(type) {
|
|
95
|
+
return type
|
|
96
|
+
.replace(/\s+/g, ' ')
|
|
97
|
+
.replace(/\s*\|\s*/g, ' | ')
|
|
98
|
+
.trim();
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Create a RadixChange object.
|
|
102
|
+
*/
|
|
103
|
+
function createChange(type, target, primitive, before, after, subComponent) {
|
|
104
|
+
const context = { target, before, after, primitive, subComponent };
|
|
105
|
+
return {
|
|
106
|
+
type,
|
|
107
|
+
severity: getSeverity(type),
|
|
108
|
+
primitive,
|
|
109
|
+
subComponent,
|
|
110
|
+
target,
|
|
111
|
+
before,
|
|
112
|
+
after,
|
|
113
|
+
description: generateDescription(type, context),
|
|
114
|
+
migration: generateHint(type, context),
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Diff props between two arrays of PropDefinitions.
|
|
119
|
+
*/
|
|
120
|
+
export function diffProps(before, after, primitive, subComponent) {
|
|
121
|
+
const changes = [];
|
|
122
|
+
const beforeMap = new Map(before.map((p) => [p.name, p]));
|
|
123
|
+
const afterMap = new Map(after.map((p) => [p.name, p]));
|
|
124
|
+
// Check for removed props
|
|
125
|
+
for (const [name, beforeProp] of beforeMap) {
|
|
126
|
+
if (!afterMap.has(name)) {
|
|
127
|
+
changes.push(createChange('prop_removed', name, primitive, beforeProp.type, null, subComponent));
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Check for added props
|
|
131
|
+
for (const [name, afterProp] of afterMap) {
|
|
132
|
+
if (!beforeMap.has(name)) {
|
|
133
|
+
changes.push(createChange('prop_added', name, primitive, null, afterProp.type, subComponent));
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// Check for changed props
|
|
137
|
+
for (const [name, beforeProp] of beforeMap) {
|
|
138
|
+
const afterProp = afterMap.get(name);
|
|
139
|
+
if (!afterProp)
|
|
140
|
+
continue;
|
|
141
|
+
// Check for required change (optional -> required is breaking)
|
|
142
|
+
if (!beforeProp.required && afterProp.required) {
|
|
143
|
+
changes.push(createChange('prop_required', name, primitive, 'optional', 'required', subComponent));
|
|
144
|
+
}
|
|
145
|
+
// Check for type changes
|
|
146
|
+
const beforeType = normalizeType(beforeProp.type);
|
|
147
|
+
const afterType = normalizeType(afterProp.type);
|
|
148
|
+
if (beforeType !== afterType) {
|
|
149
|
+
if (isNarrowing(beforeType, afterType)) {
|
|
150
|
+
changes.push(createChange('type_narrowed', name, primitive, beforeType, afterType, subComponent));
|
|
151
|
+
}
|
|
152
|
+
else if (isWidening(beforeType, afterType)) {
|
|
153
|
+
changes.push(createChange('type_widened', name, primitive, beforeType, afterType, subComponent));
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
changes.push(createChange('type_changed', name, primitive, beforeType, afterType, subComponent));
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// Check for default value changes
|
|
160
|
+
if (beforeProp.defaultValue !== afterProp.defaultValue &&
|
|
161
|
+
(beforeProp.defaultValue || afterProp.defaultValue)) {
|
|
162
|
+
changes.push(createChange('default_changed', name, primitive, beforeProp.defaultValue ?? 'undefined', afterProp.defaultValue ?? 'undefined', subComponent));
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return changes;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Diff sub-components between two ExtractedPrimitives.
|
|
169
|
+
*/
|
|
170
|
+
export function diffSubComponents(before, after, primitive) {
|
|
171
|
+
const changes = [];
|
|
172
|
+
const beforeMap = new Map(before.map((sc) => [sc.name, sc]));
|
|
173
|
+
const afterMap = new Map(after.map((sc) => [sc.name, sc]));
|
|
174
|
+
// Check for removed sub-components
|
|
175
|
+
for (const [name] of beforeMap) {
|
|
176
|
+
if (!afterMap.has(name)) {
|
|
177
|
+
changes.push(createChange('subcomponent_removed', name, primitive, name, null));
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
// Check for added sub-components
|
|
181
|
+
for (const [name] of afterMap) {
|
|
182
|
+
if (!beforeMap.has(name)) {
|
|
183
|
+
changes.push(createChange('subcomponent_added', name, primitive, null, name));
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
// Check props within each sub-component
|
|
187
|
+
for (const [name, beforeSc] of beforeMap) {
|
|
188
|
+
const afterSc = afterMap.get(name);
|
|
189
|
+
if (!afterSc)
|
|
190
|
+
continue;
|
|
191
|
+
const propChanges = diffProps(beforeSc.props, afterSc.props, primitive, name);
|
|
192
|
+
changes.push(...propChanges);
|
|
193
|
+
}
|
|
194
|
+
return changes;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Diff two ExtractedPrimitive objects to find all changes.
|
|
198
|
+
*/
|
|
199
|
+
export function diffContracts(before, after) {
|
|
200
|
+
const changes = [];
|
|
201
|
+
const primitive = before.name;
|
|
202
|
+
// Diff root props
|
|
203
|
+
const rootChanges = diffProps(before.rootProps, after.rootProps, primitive, 'Root');
|
|
204
|
+
changes.push(...rootChanges);
|
|
205
|
+
// Diff sub-components
|
|
206
|
+
const subComponentChanges = diffSubComponents(before.subComponents, after.subComponents, primitive);
|
|
207
|
+
changes.push(...subComponentChanges);
|
|
208
|
+
return changes;
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=props.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"props.js","sourceRoot":"","sources":["../../src/differ/props.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Severity classification for contract changes.
|
|
3
|
+
*/
|
|
4
|
+
import type { ChangeType, ChangeSeverity } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Get the severity level for a change type.
|
|
7
|
+
*/
|
|
8
|
+
export declare function getSeverity(changeType: ChangeType): ChangeSeverity;
|
|
9
|
+
/**
|
|
10
|
+
* Check if a change type is breaking.
|
|
11
|
+
*/
|
|
12
|
+
export declare function isBreaking(changeType: ChangeType): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Check if a change type is a warning.
|
|
15
|
+
*/
|
|
16
|
+
export declare function isWarning(changeType: ChangeType): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Check if a change type is informational.
|
|
19
|
+
*/
|
|
20
|
+
export declare function isInfo(changeType: ChangeType): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Get all breaking change types.
|
|
23
|
+
*/
|
|
24
|
+
export declare function getBreakingTypes(): ChangeType[];
|
|
25
|
+
/**
|
|
26
|
+
* Sort changes by severity (breaking first, then warning, then info).
|
|
27
|
+
*/
|
|
28
|
+
export declare function sortBySeverity<T extends {
|
|
29
|
+
severity: ChangeSeverity;
|
|
30
|
+
}>(changes: T[]): T[];
|
|
31
|
+
//# sourceMappingURL=severity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"severity.d.ts","sourceRoot":"","sources":["../../src/differ/severity.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAuB7D;;GAEG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,UAAU,GAAG,cAAc,CAElE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAE1D;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAEzD;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAEtD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,UAAU,EAAE,CAI/C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS;IAAE,QAAQ,EAAE,cAAc,CAAA;CAAE,EACnE,OAAO,EAAE,CAAC,EAAE,GACX,CAAC,EAAE,CAUL"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Severity classification for contract changes.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Map change types to their severity levels.
|
|
6
|
+
*/
|
|
7
|
+
const SEVERITY_MAP = {
|
|
8
|
+
// Breaking changes - will break existing code
|
|
9
|
+
prop_removed: 'breaking',
|
|
10
|
+
prop_required: 'breaking',
|
|
11
|
+
subcomponent_removed: 'breaking',
|
|
12
|
+
type_narrowed: 'breaking',
|
|
13
|
+
// Warning changes - might cause issues
|
|
14
|
+
prop_deprecated: 'warning',
|
|
15
|
+
type_changed: 'warning',
|
|
16
|
+
default_changed: 'warning',
|
|
17
|
+
// Info changes - additive, safe
|
|
18
|
+
prop_added: 'info',
|
|
19
|
+
subcomponent_added: 'info',
|
|
20
|
+
type_widened: 'info',
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Get the severity level for a change type.
|
|
24
|
+
*/
|
|
25
|
+
export function getSeverity(changeType) {
|
|
26
|
+
return SEVERITY_MAP[changeType];
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Check if a change type is breaking.
|
|
30
|
+
*/
|
|
31
|
+
export function isBreaking(changeType) {
|
|
32
|
+
return SEVERITY_MAP[changeType] === 'breaking';
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Check if a change type is a warning.
|
|
36
|
+
*/
|
|
37
|
+
export function isWarning(changeType) {
|
|
38
|
+
return SEVERITY_MAP[changeType] === 'warning';
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Check if a change type is informational.
|
|
42
|
+
*/
|
|
43
|
+
export function isInfo(changeType) {
|
|
44
|
+
return SEVERITY_MAP[changeType] === 'info';
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Get all breaking change types.
|
|
48
|
+
*/
|
|
49
|
+
export function getBreakingTypes() {
|
|
50
|
+
return Object.entries(SEVERITY_MAP)
|
|
51
|
+
.filter(([, severity]) => severity === 'breaking')
|
|
52
|
+
.map(([type]) => type);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Sort changes by severity (breaking first, then warning, then info).
|
|
56
|
+
*/
|
|
57
|
+
export function sortBySeverity(changes) {
|
|
58
|
+
const severityOrder = {
|
|
59
|
+
breaking: 0,
|
|
60
|
+
warning: 1,
|
|
61
|
+
info: 2,
|
|
62
|
+
};
|
|
63
|
+
return [...changes].sort((a, b) => severityOrder[a.severity] - severityOrder[b.severity]);
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=severity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"severity.js","sourceRoot":"","sources":["../../src/differ/severity.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,MAAM,YAAY,GAAuC;IACvD,8CAA8C;IAC9C,YAAY,EAAE,UAAU;IACxB,aAAa,EAAE,UAAU;IACzB,oBAAoB,EAAE,UAAU;IAChC,aAAa,EAAE,UAAU;IAEzB,uCAAuC;IACvC,eAAe,EAAE,SAAS;IAC1B,YAAY,EAAE,SAAS;IACvB,eAAe,EAAE,SAAS;IAE1B,gCAAgC;IAChC,UAAU,EAAE,MAAM;IAClB,kBAAkB,EAAE,MAAM;IAC1B,YAAY,EAAE,MAAM;CACrB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,UAAsB;IAChD,OAAO,YAAY,CAAC,UAAU,CAAC,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,UAAsB;IAC/C,OAAO,YAAY,CAAC,UAAU,CAAC,KAAK,UAAU,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,UAAsB;IAC9C,OAAO,YAAY,CAAC,UAAU,CAAC,KAAK,SAAS,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,MAAM,CAAC,UAAsB;IAC3C,OAAO,YAAY,CAAC,UAAU,CAAC,KAAK,MAAM,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;SAChC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,KAAK,UAAU,CAAC;SACjD,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAkB,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAY;IAEZ,MAAM,aAAa,GAAmC;QACpD,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,CAAC;QACV,IAAI,EAAE,CAAC;KACR,CAAC;IAEF,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CACtB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAChE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for the Radix contract differ.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Severity levels for contract changes.
|
|
6
|
+
*/
|
|
7
|
+
export type ChangeSeverity = 'breaking' | 'warning' | 'info';
|
|
8
|
+
/**
|
|
9
|
+
* Types of changes that can occur in a contract.
|
|
10
|
+
*/
|
|
11
|
+
export type ChangeType = 'prop_removed' | 'prop_required' | 'subcomponent_removed' | 'type_narrowed' | 'prop_deprecated' | 'type_changed' | 'default_changed' | 'prop_added' | 'subcomponent_added' | 'type_widened';
|
|
12
|
+
/**
|
|
13
|
+
* A single change detected between two contract versions.
|
|
14
|
+
*/
|
|
15
|
+
export interface RadixChange {
|
|
16
|
+
/**
|
|
17
|
+
* The type of change detected.
|
|
18
|
+
*/
|
|
19
|
+
type: ChangeType;
|
|
20
|
+
/**
|
|
21
|
+
* Severity classification of the change.
|
|
22
|
+
*/
|
|
23
|
+
severity: ChangeSeverity;
|
|
24
|
+
/**
|
|
25
|
+
* The primitive this change affects.
|
|
26
|
+
*/
|
|
27
|
+
primitive: string;
|
|
28
|
+
/**
|
|
29
|
+
* The sub-component this change affects (e.g., "Content", "Trigger").
|
|
30
|
+
* Undefined for root-level changes.
|
|
31
|
+
*/
|
|
32
|
+
subComponent?: string;
|
|
33
|
+
/**
|
|
34
|
+
* The target of the change (prop name, subcomponent name, etc.).
|
|
35
|
+
*/
|
|
36
|
+
target: string;
|
|
37
|
+
/**
|
|
38
|
+
* The value/type before the change. Null for additions.
|
|
39
|
+
*/
|
|
40
|
+
before: string | null;
|
|
41
|
+
/**
|
|
42
|
+
* The value/type after the change. Null for removals.
|
|
43
|
+
*/
|
|
44
|
+
after: string | null;
|
|
45
|
+
/**
|
|
46
|
+
* Human-readable description of the change.
|
|
47
|
+
*/
|
|
48
|
+
description: string;
|
|
49
|
+
/**
|
|
50
|
+
* Migration hint for addressing the change.
|
|
51
|
+
*/
|
|
52
|
+
migration?: string;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Summary counts for a diff operation.
|
|
56
|
+
*/
|
|
57
|
+
export interface DiffSummary {
|
|
58
|
+
totalChanges: number;
|
|
59
|
+
breaking: number;
|
|
60
|
+
warnings: number;
|
|
61
|
+
info: number;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Result of diffing two Radix versions.
|
|
65
|
+
*/
|
|
66
|
+
export interface RadixDiff {
|
|
67
|
+
/**
|
|
68
|
+
* The starting version.
|
|
69
|
+
*/
|
|
70
|
+
fromVersion: string;
|
|
71
|
+
/**
|
|
72
|
+
* The ending version.
|
|
73
|
+
*/
|
|
74
|
+
toVersion: string;
|
|
75
|
+
/**
|
|
76
|
+
* Whether any breaking changes were detected.
|
|
77
|
+
*/
|
|
78
|
+
hasBreakingChanges: boolean;
|
|
79
|
+
/**
|
|
80
|
+
* Summary counts by severity.
|
|
81
|
+
*/
|
|
82
|
+
summary: DiffSummary;
|
|
83
|
+
/**
|
|
84
|
+
* All detected changes.
|
|
85
|
+
*/
|
|
86
|
+
changes: RadixChange[];
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Result of checking for updates.
|
|
90
|
+
*/
|
|
91
|
+
export interface UpdateCheckResult {
|
|
92
|
+
/**
|
|
93
|
+
* The currently cached/used version.
|
|
94
|
+
*/
|
|
95
|
+
currentVersion: string;
|
|
96
|
+
/**
|
|
97
|
+
* The latest available version.
|
|
98
|
+
*/
|
|
99
|
+
latestVersion: string;
|
|
100
|
+
/**
|
|
101
|
+
* Whether an update is available.
|
|
102
|
+
*/
|
|
103
|
+
hasUpdate: boolean;
|
|
104
|
+
/**
|
|
105
|
+
* Diff details if an update is available.
|
|
106
|
+
*/
|
|
107
|
+
diff?: RadixDiff;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/differ/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AAE7D;;GAEG;AACH,MAAM,MAAM,UAAU,GAElB,cAAc,GACd,eAAe,GACf,sBAAsB,GACtB,eAAe,GAGf,iBAAiB,GACjB,cAAc,GACd,iBAAiB,GAGjB,YAAY,GACZ,oBAAoB,GACpB,cAAc,CAAC;AAEnB;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,IAAI,EAAE,UAAU,CAAC;IAEjB;;OAEG;IACH,QAAQ,EAAE,cAAc,CAAC;IAEzB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAEtB;;OAEG;IACH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAErB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,kBAAkB,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,OAAO,EAAE,WAAW,CAAC;IAErB;;OAEG;IACH,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/differ/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|