@rakeyshgidwani/roger-ui-bank-theme-stan-design 0.2.9 → 0.2.11
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/CHANGELOG.md +1 -1
- package/dist/components/ui/accessibility-demo.esm.js +30 -24
- package/dist/components/ui/accessibility-demo.js +30 -24
- package/dist/components/ui/advanced-component-architecture-demo.esm.js +235 -179
- package/dist/components/ui/advanced-component-architecture-demo.js +235 -179
- package/dist/components/ui/advanced-transition-system-demo.esm.js +110 -64
- package/dist/components/ui/advanced-transition-system-demo.js +110 -64
- package/dist/components/ui/advanced-transition-system.esm.js +166 -122
- package/dist/components/ui/advanced-transition-system.js +166 -122
- package/dist/components/ui/animation/animated-container.esm.js +52 -29
- package/dist/components/ui/animation/animated-container.js +52 -29
- package/dist/components/ui/animation/staggered-container.esm.js +18 -9
- package/dist/components/ui/animation/staggered-container.js +18 -9
- package/dist/components/ui/animation-demo.esm.js +67 -35
- package/dist/components/ui/animation-demo.js +67 -35
- package/dist/components/ui/badge.esm.js +9 -6
- package/dist/components/ui/badge.js +9 -6
- package/dist/components/ui/battery-conscious-animation-demo.esm.js +122 -87
- package/dist/components/ui/battery-conscious-animation-demo.js +122 -87
- package/dist/components/ui/border-radius-shadow-demo.esm.js +23 -12
- package/dist/components/ui/border-radius-shadow-demo.js +23 -12
- package/dist/components/ui/button.esm.js +8 -2
- package/dist/components/ui/button.js +8 -2
- package/dist/components/ui/card.esm.js +33 -8
- package/dist/components/ui/card.js +33 -8
- package/dist/components/ui/checkbox.esm.js +3 -3
- package/dist/components/ui/checkbox.js +3 -3
- package/dist/components/ui/color-preview.esm.js +68 -45
- package/dist/components/ui/color-preview.js +68 -45
- package/dist/components/ui/data-display/chart.esm.js +112 -84
- package/dist/components/ui/data-display/chart.js +112 -84
- package/dist/components/ui/data-display/data-grid-simple.esm.js +1 -1
- package/dist/components/ui/data-display/data-grid-simple.js +1 -1
- package/dist/components/ui/data-display/data-grid.esm.js +80 -67
- package/dist/components/ui/data-display/data-grid.js +80 -67
- package/dist/components/ui/data-display/list.esm.js +53 -45
- package/dist/components/ui/data-display/list.js +53 -45
- package/dist/components/ui/data-display/table.esm.js +62 -54
- package/dist/components/ui/data-display/table.js +62 -54
- package/dist/components/ui/data-display/timeline.esm.js +39 -34
- package/dist/components/ui/data-display/timeline.js +39 -34
- package/dist/components/ui/data-display/tree.esm.js +116 -84
- package/dist/components/ui/data-display/tree.js +116 -84
- package/dist/components/ui/data-display/types.esm.js +389 -364
- package/dist/components/ui/data-display/types.js +389 -364
- package/dist/components/ui/enterprise-mobile-experience-demo.esm.js +120 -70
- package/dist/components/ui/enterprise-mobile-experience-demo.js +120 -70
- package/dist/components/ui/enterprise-mobile-experience.esm.js +124 -73
- package/dist/components/ui/enterprise-mobile-experience.js +124 -73
- package/dist/components/ui/feedback/alert.esm.js +22 -15
- package/dist/components/ui/feedback/alert.js +22 -15
- package/dist/components/ui/feedback/progress.esm.js +47 -24
- package/dist/components/ui/feedback/progress.js +47 -24
- package/dist/components/ui/feedback/skeleton.esm.js +39 -29
- package/dist/components/ui/feedback/skeleton.js +39 -29
- package/dist/components/ui/feedback/toast.esm.js +62 -38
- package/dist/components/ui/feedback/toast.js +62 -38
- package/dist/components/ui/feedback/types.esm.js +83 -83
- package/dist/components/ui/feedback/types.js +83 -83
- package/dist/components/ui/font-preview.esm.js +41 -39
- package/dist/components/ui/font-preview.js +41 -39
- package/dist/components/ui/form-demo.esm.js +150 -113
- package/dist/components/ui/form-demo.js +150 -113
- package/dist/components/ui/hardware-acceleration-demo.esm.js +137 -87
- package/dist/components/ui/hardware-acceleration-demo.js +137 -87
- package/dist/components/ui/input.esm.js +4 -1
- package/dist/components/ui/input.js +4 -1
- package/dist/components/ui/layout-demo.esm.js +81 -56
- package/dist/components/ui/layout-demo.js +81 -56
- package/dist/components/ui/layouts/adaptive-layout.esm.js +27 -8
- package/dist/components/ui/layouts/adaptive-layout.js +27 -8
- package/dist/components/ui/layouts/desktop-layout.esm.js +39 -19
- package/dist/components/ui/layouts/desktop-layout.js +39 -19
- package/dist/components/ui/layouts/mobile-layout.esm.js +19 -9
- package/dist/components/ui/layouts/mobile-layout.js +19 -9
- package/dist/components/ui/layouts/tablet-layout.esm.js +28 -14
- package/dist/components/ui/layouts/tablet-layout.js +28 -14
- package/dist/components/ui/mobile-form-validation.esm.js +120 -87
- package/dist/components/ui/mobile-form-validation.js +120 -87
- package/dist/components/ui/mobile-input-demo.esm.js +19 -13
- package/dist/components/ui/mobile-input-demo.js +19 -13
- package/dist/components/ui/mobile-input.esm.js +185 -120
- package/dist/components/ui/mobile-input.js +185 -120
- package/dist/components/ui/mobile-skeleton-loading-demo.esm.js +128 -111
- package/dist/components/ui/mobile-skeleton-loading-demo.js +128 -111
- package/dist/components/ui/navigation/breadcrumb.esm.js +17 -14
- package/dist/components/ui/navigation/breadcrumb.js +17 -14
- package/dist/components/ui/navigation/index.esm.js +0 -1
- package/dist/components/ui/navigation/index.js +0 -1
- package/dist/components/ui/navigation/menu.esm.js +49 -35
- package/dist/components/ui/navigation/menu.js +49 -35
- package/dist/components/ui/navigation/navigation-demo.esm.js +81 -74
- package/dist/components/ui/navigation/navigation-demo.js +81 -74
- package/dist/components/ui/navigation/pagination.esm.js +62 -50
- package/dist/components/ui/navigation/pagination.js +62 -50
- package/dist/components/ui/navigation/sidebar.esm.js +56 -42
- package/dist/components/ui/navigation/sidebar.js +56 -42
- package/dist/components/ui/navigation/stepper.esm.js +34 -23
- package/dist/components/ui/navigation/stepper.js +34 -23
- package/dist/components/ui/navigation/tabs.esm.js +32 -21
- package/dist/components/ui/navigation/tabs.js +32 -21
- package/dist/components/ui/navigation/types.esm.js +196 -195
- package/dist/components/ui/navigation/types.js +196 -195
- package/dist/components/ui/overlay/backdrop.esm.js +17 -16
- package/dist/components/ui/overlay/backdrop.js +17 -16
- package/dist/components/ui/overlay/focus-manager.esm.js +21 -19
- package/dist/components/ui/overlay/focus-manager.js +21 -19
- package/dist/components/ui/overlay/index.esm.js +0 -2
- package/dist/components/ui/overlay/index.js +0 -2
- package/dist/components/ui/overlay/modal.esm.js +38 -34
- package/dist/components/ui/overlay/modal.js +38 -34
- package/dist/components/ui/overlay/overlay-manager.esm.js +25 -20
- package/dist/components/ui/overlay/overlay-manager.js +25 -20
- package/dist/components/ui/overlay/popover.esm.js +74 -58
- package/dist/components/ui/overlay/popover.js +74 -58
- package/dist/components/ui/overlay/portal.esm.js +7 -7
- package/dist/components/ui/overlay/portal.js +7 -7
- package/dist/components/ui/overlay/tooltip.esm.js +54 -39
- package/dist/components/ui/overlay/tooltip.js +54 -39
- package/dist/components/ui/overlay/types.esm.js +132 -131
- package/dist/components/ui/overlay/types.js +132 -131
- package/dist/components/ui/performance-demo.esm.js +135 -88
- package/dist/components/ui/performance-demo.js +135 -88
- package/dist/components/ui/semantic-input-system-demo.esm.js +117 -80
- package/dist/components/ui/semantic-input-system-demo.js +117 -80
- package/dist/components/ui/theme-customizer.esm.js +84 -52
- package/dist/components/ui/theme-customizer.js +84 -52
- package/dist/components/ui/theme-preview.esm.js +95 -43
- package/dist/components/ui/theme-preview.js +95 -43
- package/dist/components/ui/theme-switcher.esm.js +70 -44
- package/dist/components/ui/theme-switcher.js +70 -44
- package/dist/components/ui/theme-toggle.esm.js +3 -3
- package/dist/components/ui/theme-toggle.js +3 -3
- package/dist/components/ui/token-demo.esm.js +33 -21
- package/dist/components/ui/token-demo.js +33 -21
- package/dist/components/ui/touch-demo.esm.js +102 -73
- package/dist/components/ui/touch-demo.js +102 -73
- package/dist/components/ui/touch-friendly-interface-demo.esm.js +102 -64
- package/dist/components/ui/touch-friendly-interface-demo.js +102 -64
- package/dist/components/ui/touch-friendly-interface.esm.js +85 -61
- package/dist/components/ui/touch-friendly-interface.js +85 -61
- package/dist/hooks/use-accessibility-support.esm.js +115 -85
- package/dist/hooks/use-accessibility-support.js +115 -85
- package/dist/hooks/use-adaptive-layout.esm.js +56 -33
- package/dist/hooks/use-adaptive-layout.js +56 -33
- package/dist/hooks/use-advanced-patterns.esm.js +57 -42
- package/dist/hooks/use-advanced-patterns.js +57 -42
- package/dist/hooks/use-advanced-transition-system.esm.js +112 -71
- package/dist/hooks/use-advanced-transition-system.js +112 -71
- package/dist/hooks/use-animation-profile.esm.js +63 -34
- package/dist/hooks/use-animation-profile.js +63 -34
- package/dist/hooks/use-battery-animations.esm.js +80 -55
- package/dist/hooks/use-battery-animations.js +80 -55
- package/dist/hooks/use-battery-conscious-loading.esm.js +166 -123
- package/dist/hooks/use-battery-conscious-loading.js +166 -123
- package/dist/hooks/use-battery-optimization.esm.js +78 -55
- package/dist/hooks/use-battery-optimization.js +78 -55
- package/dist/hooks/use-battery-status.esm.js +73 -51
- package/dist/hooks/use-battery-status.js +73 -51
- package/dist/hooks/use-component-performance.esm.js +62 -47
- package/dist/hooks/use-component-performance.js +62 -47
- package/dist/hooks/use-device-loading-states.esm.js +152 -109
- package/dist/hooks/use-device-loading-states.js +152 -109
- package/dist/hooks/use-device.esm.js +25 -14
- package/dist/hooks/use-device.js +25 -14
- package/dist/hooks/use-enterprise-mobile-experience.esm.js +137 -88
- package/dist/hooks/use-enterprise-mobile-experience.js +137 -88
- package/dist/hooks/use-form-feedback.esm.js +124 -81
- package/dist/hooks/use-form-feedback.js +124 -81
- package/dist/hooks/use-form-performance.esm.js +127 -92
- package/dist/hooks/use-form-performance.js +127 -92
- package/dist/hooks/use-frame-rate.esm.js +56 -37
- package/dist/hooks/use-frame-rate.js +56 -37
- package/dist/hooks/use-gestures.esm.js +96 -72
- package/dist/hooks/use-gestures.js +96 -72
- package/dist/hooks/use-hardware-acceleration.esm.js +65 -37
- package/dist/hooks/use-hardware-acceleration.js +65 -37
- package/dist/hooks/use-input-accessibility.esm.js +157 -119
- package/dist/hooks/use-input-accessibility.js +157 -119
- package/dist/hooks/use-input-performance.esm.js +139 -104
- package/dist/hooks/use-input-performance.js +139 -104
- package/dist/hooks/use-layout-performance.esm.js +50 -29
- package/dist/hooks/use-layout-performance.js +50 -29
- package/dist/hooks/use-loading-accessibility.esm.js +209 -169
- package/dist/hooks/use-loading-accessibility.js +209 -169
- package/dist/hooks/use-loading-performance.esm.js +117 -93
- package/dist/hooks/use-loading-performance.js +117 -93
- package/dist/hooks/use-memory-usage.esm.js +57 -38
- package/dist/hooks/use-memory-usage.js +57 -38
- package/dist/hooks/use-mobile-form-layout.esm.js +111 -74
- package/dist/hooks/use-mobile-form-layout.js +111 -74
- package/dist/hooks/use-mobile-form-validation.esm.js +211 -144
- package/dist/hooks/use-mobile-form-validation.js +211 -144
- package/dist/hooks/use-mobile-keyboard-optimization.esm.js +154 -113
- package/dist/hooks/use-mobile-keyboard-optimization.js +154 -113
- package/dist/hooks/use-mobile-layout.esm.js +73 -51
- package/dist/hooks/use-mobile-layout.js +73 -51
- package/dist/hooks/use-mobile-optimization.esm.js +72 -44
- package/dist/hooks/use-mobile-optimization.js +72 -44
- package/dist/hooks/use-mobile-skeleton.esm.js +97 -64
- package/dist/hooks/use-mobile-skeleton.js +97 -64
- package/dist/hooks/use-mobile-touch.esm.js +128 -93
- package/dist/hooks/use-mobile-touch.js +128 -93
- package/dist/hooks/use-performance-throttling.esm.js +72 -48
- package/dist/hooks/use-performance-throttling.js +72 -48
- package/dist/hooks/use-performance.esm.js +90 -52
- package/dist/hooks/use-performance.js +90 -52
- package/dist/hooks/use-reusable-architecture.esm.js +94 -65
- package/dist/hooks/use-reusable-architecture.js +94 -65
- package/dist/hooks/use-semantic-input-types.esm.js +166 -124
- package/dist/hooks/use-semantic-input-types.js +166 -124
- package/dist/hooks/use-semantic-input.esm.js +178 -126
- package/dist/hooks/use-semantic-input.js +178 -126
- package/dist/hooks/use-tablet-layout.esm.js +67 -38
- package/dist/hooks/use-tablet-layout.js +67 -38
- package/dist/hooks/use-touch-friendly-input.esm.js +193 -149
- package/dist/hooks/use-touch-friendly-input.js +193 -149
- package/dist/hooks/use-touch-friendly-interface.esm.js +99 -67
- package/dist/hooks/use-touch-friendly-interface.js +99 -67
- package/dist/hooks/use-touch-optimization.esm.js +99 -72
- package/dist/hooks/use-touch-optimization.js +99 -72
- package/dist/index.esm.js +157 -281
- package/dist/index.js +157 -281
- package/dist/lib/utils.esm.js +1 -1
- package/dist/lib/utils.js +1 -1
- package/dist/plugins/theme-css-generator.esm.js +104 -55
- package/dist/plugins/theme-css-generator.js +104 -55
- package/dist/provider.esm.js +4 -4
- package/dist/provider.js +4 -4
- package/dist/styles.css +1 -1
- package/dist/theme.esm.js +633 -468
- package/dist/theme.js +633 -468
- package/dist/themes/ThemeContext.esm.js +15 -15
- package/dist/themes/ThemeContext.js +15 -15
- package/dist/themes/ThemeProvider.esm.js +25 -22
- package/dist/themes/ThemeProvider.js +25 -22
- package/dist/themes/accessibility.esm.js +147 -108
- package/dist/themes/accessibility.js +147 -108
- package/dist/themes/aria-patterns.esm.js +198 -162
- package/dist/themes/aria-patterns.js +198 -162
- package/dist/themes/base-themes.esm.js +14 -11
- package/dist/themes/base-themes.js +14 -11
- package/dist/themes/colorManager.esm.js +101 -83
- package/dist/themes/colorManager.js +101 -83
- package/dist/themes/examples/dark-theme.esm.js +133 -103
- package/dist/themes/examples/dark-theme.js +133 -103
- package/dist/themes/examples/minimal-theme.esm.js +83 -61
- package/dist/themes/examples/minimal-theme.js +83 -61
- package/dist/themes/focus-management.esm.js +202 -143
- package/dist/themes/focus-management.js +202 -143
- package/dist/themes/fontLoader.esm.js +28 -19
- package/dist/themes/fontLoader.js +28 -19
- package/dist/themes/high-contrast.esm.js +152 -104
- package/dist/themes/high-contrast.js +152 -104
- package/dist/themes/index.esm.js +1 -1
- package/dist/themes/index.js +1 -1
- package/dist/themes/inheritance.esm.js +35 -27
- package/dist/themes/inheritance.js +35 -27
- package/dist/themes/keyboard-navigation.esm.js +152 -123
- package/dist/themes/keyboard-navigation.js +152 -123
- package/dist/themes/motion-reduction.esm.js +193 -133
- package/dist/themes/motion-reduction.js +193 -133
- package/dist/themes/navigation.esm.js +146 -146
- package/dist/themes/navigation.js +146 -146
- package/dist/themes/screen-reader.esm.js +159 -94
- package/dist/themes/screen-reader.js +159 -94
- package/dist/themes/systemThemeDetector.esm.js +42 -34
- package/dist/themes/systemThemeDetector.js +42 -34
- package/dist/themes/themeCSSUpdater.esm.js +21 -9
- package/dist/themes/themeCSSUpdater.js +21 -9
- package/dist/themes/themePersistence.esm.js +68 -47
- package/dist/themes/themePersistence.js +68 -47
- package/dist/themes/themes/stan-design.esm.js +633 -468
- package/dist/themes/themes/stan-design.js +633 -468
- package/dist/themes/types.esm.js +301 -287
- package/dist/themes/types.js +301 -287
- package/dist/themes/useSystemTheme.esm.js +4 -4
- package/dist/themes/useSystemTheme.js +4 -4
- package/dist/themes/useTheme.esm.js +4 -4
- package/dist/themes/useTheme.js +4 -4
- package/dist/themes/validation.esm.js +128 -77
- package/dist/themes/validation.js +128 -77
- package/dist/tokens/index.esm.js +1 -2
- package/dist/tokens/index.js +1 -2
- package/dist/tokens/tokenExporter.esm.js +87 -61
- package/dist/tokens/tokenExporter.js +87 -61
- package/dist/tokens/tokenGenerator.esm.js +86 -77
- package/dist/tokens/tokenGenerator.js +86 -77
- package/dist/tokens/tokenManager.esm.js +64 -51
- package/dist/tokens/tokenManager.js +64 -51
- package/dist/tokens/tokenValidator.esm.js +193 -147
- package/dist/tokens/tokenValidator.js +193 -147
- package/dist/tokens/types.esm.js +49 -35
- package/dist/tokens/types.js +49 -35
- package/dist/utils/bundle-analyzer.esm.js +83 -65
- package/dist/utils/bundle-analyzer.js +83 -65
- package/dist/utils/bundle-splitting.esm.js +142 -117
- package/dist/utils/bundle-splitting.js +142 -117
- package/dist/utils/lazy-loading.esm.js +132 -106
- package/dist/utils/lazy-loading.js +132 -106
- package/dist/utils/performance-monitor.esm.js +170 -129
- package/dist/utils/performance-monitor.js +170 -129
- package/dist/utils/tree-shaking.esm.js +69 -61
- package/dist/utils/tree-shaking.js +69 -61
- package/package.json +1 -1
- package/src/index.ts +146 -146
|
@@ -1,35 +1,35 @@
|
|
|
1
1
|
// Tree-shaking utilities for optimizing bundle size
|
|
2
2
|
export interface ExportAnalysis {
|
|
3
|
-
module;
|
|
4
|
-
exports];
|
|
5
|
-
usedExports];
|
|
6
|
-
unusedExports];
|
|
7
|
-
importCount;
|
|
8
|
-
treeShakingScore;
|
|
3
|
+
module: string;
|
|
4
|
+
exports: string[];
|
|
5
|
+
usedExports: string[];
|
|
6
|
+
unusedExports: string[];
|
|
7
|
+
importCount: number;
|
|
8
|
+
treeShakingScore: number;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
export interface TreeShakingConfig {
|
|
12
|
-
enabled;
|
|
13
|
-
analyzeExports;
|
|
14
|
-
removeUnused;
|
|
15
|
-
preserveSideEffects;
|
|
16
|
-
modulesToAnalyze];
|
|
17
|
-
excludePatterns];
|
|
12
|
+
enabled: boolean;
|
|
13
|
+
analyzeExports: boolean;
|
|
14
|
+
removeUnused: boolean;
|
|
15
|
+
preserveSideEffects: boolean;
|
|
16
|
+
modulesToAnalyze: string[];
|
|
17
|
+
excludePatterns: string[];
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
export class TreeShakingOptimizer {
|
|
21
|
-
private config;
|
|
22
|
-
private exportMap, Set<string>>;
|
|
23
|
-
private importMap, Set<string>>;
|
|
24
|
-
private usageMap, number>;
|
|
25
|
-
|
|
26
|
-
constructor(config= {
|
|
27
|
-
enabled,
|
|
28
|
-
analyzeExports,
|
|
29
|
-
removeUnused,
|
|
30
|
-
preserveSideEffects,
|
|
31
|
-
modulesToAnalyze],
|
|
32
|
-
excludePatterns]
|
|
21
|
+
private config: TreeShakingConfig;
|
|
22
|
+
private exportMap: Map<string, Set<string>>;
|
|
23
|
+
private importMap: Map<string, Set<string>>;
|
|
24
|
+
private usageMap: Map<string, number>;
|
|
25
|
+
|
|
26
|
+
constructor(config: TreeShakingConfig = {
|
|
27
|
+
enabled: true,
|
|
28
|
+
analyzeExports: true,
|
|
29
|
+
removeUnused: true,
|
|
30
|
+
preserveSideEffects: true,
|
|
31
|
+
modulesToAnalyze: [],
|
|
32
|
+
excludePatterns: []
|
|
33
33
|
}) {
|
|
34
34
|
this.config = config;
|
|
35
35
|
this.exportMap = new Map();
|
|
@@ -38,21 +38,23 @@ export class TreeShakingOptimizer {
|
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
// Analyze module exports
|
|
41
|
-
analyzeModuleExports(modulePath, exports])
|
|
41
|
+
analyzeModuleExports(modulePath: string, exports: string[]): void {
|
|
42
|
+
if (!this.config.analyzeExports) return;
|
|
42
43
|
|
|
43
44
|
this.exportMap.set(modulePath, new Set(exports));
|
|
44
45
|
|
|
45
46
|
// Initialize usage count for each export
|
|
46
47
|
exports.forEach(exportName => {
|
|
47
|
-
const key = `${modulePath}}`;
|
|
48
|
+
const key = `${modulePath}:${exportName}`;
|
|
48
49
|
this.usageMap.set(key, 0);
|
|
49
50
|
});
|
|
50
51
|
}
|
|
51
52
|
|
|
52
53
|
// Track import usage
|
|
53
|
-
trackImport(modulePath, importName)
|
|
54
|
+
trackImport(modulePath: string, importName: string): void {
|
|
55
|
+
if (!this.config.enabled) return;
|
|
54
56
|
|
|
55
|
-
const key = `${modulePath}}`;
|
|
57
|
+
const key = `${modulePath}:${importName}`;
|
|
56
58
|
const currentUsage = this.usageMap.get(key) || 0;
|
|
57
59
|
this.usageMap.set(key, currentUsage + 1);
|
|
58
60
|
|
|
@@ -64,16 +66,16 @@ export class TreeShakingOptimizer {
|
|
|
64
66
|
}
|
|
65
67
|
|
|
66
68
|
// Analyze tree-shaking effectiveness
|
|
67
|
-
analyzeTreeShaking()] {
|
|
68
|
-
const analysis] = [];
|
|
69
|
+
analyzeTreeShaking(): ExportAnalysis[] {
|
|
70
|
+
const analysis: ExportAnalysis[] = [];
|
|
69
71
|
|
|
70
72
|
this.exportMap.forEach((exports, modulePath) => {
|
|
71
|
-
const usedExports] = [];
|
|
72
|
-
const unusedExports] = [];
|
|
73
|
+
const usedExports: string[] = [];
|
|
74
|
+
const unusedExports: string[] = [];
|
|
73
75
|
let totalUsage = 0;
|
|
74
76
|
|
|
75
77
|
exports.forEach(exportName => {
|
|
76
|
-
const key = `${modulePath}}`;
|
|
78
|
+
const key = `${modulePath}:${exportName}`;
|
|
77
79
|
const usage = this.usageMap.get(key) || 0;
|
|
78
80
|
totalUsage += usage;
|
|
79
81
|
|
|
@@ -84,14 +86,14 @@ export class TreeShakingOptimizer {
|
|
|
84
86
|
}
|
|
85
87
|
});
|
|
86
88
|
|
|
87
|
-
const treeShakingScore = exports.size > 0 ? (usedExports.length / exports.size) * 100 ;
|
|
89
|
+
const treeShakingScore = exports.size > 0 ? (usedExports.length / exports.size) * 100 : 100;
|
|
88
90
|
|
|
89
91
|
analysis.push({
|
|
90
|
-
module,
|
|
91
|
-
exports),
|
|
92
|
+
module: modulePath,
|
|
93
|
+
exports: Array.from(exports),
|
|
92
94
|
usedExports,
|
|
93
95
|
unusedExports,
|
|
94
|
-
importCount,
|
|
96
|
+
importCount: totalUsage,
|
|
95
97
|
treeShakingScore
|
|
96
98
|
});
|
|
97
99
|
});
|
|
@@ -100,9 +102,9 @@ export class TreeShakingOptimizer {
|
|
|
100
102
|
}
|
|
101
103
|
|
|
102
104
|
// Generate tree-shaking recommendations
|
|
103
|
-
generateTreeShakingRecommendations()] {
|
|
105
|
+
generateTreeShakingRecommendations(): string[] {
|
|
104
106
|
const analysis = this.analyzeTreeShaking();
|
|
105
|
-
const recommendations] = [];
|
|
107
|
+
const recommendations: string[] = [];
|
|
106
108
|
|
|
107
109
|
analysis.forEach(module => {
|
|
108
110
|
if (module.treeShakingScore < 50) {
|
|
@@ -110,7 +112,7 @@ export class TreeShakingOptimizer {
|
|
|
110
112
|
}
|
|
111
113
|
|
|
112
114
|
if (module.unusedExports.length > 0) {
|
|
113
|
-
recommendations.push(`Module ${module.module} has ${module.unusedExports.length} unused exports, ')}`);
|
|
115
|
+
recommendations.push(`Module ${module.module} has ${module.unusedExports.length} unused exports: ${module.unusedExports.join(', ')}`);
|
|
114
116
|
}
|
|
115
117
|
|
|
116
118
|
if (module.exports.length > 20) {
|
|
@@ -126,13 +128,13 @@ export class TreeShakingOptimizer {
|
|
|
126
128
|
}
|
|
127
129
|
|
|
128
130
|
// Optimize exports by removing unused ones
|
|
129
|
-
optimizeExports(), string[]> {
|
|
131
|
+
optimizeExports(): Map<string, string[]> {
|
|
130
132
|
const optimizedExports = new Map<string, string[]>();
|
|
131
133
|
|
|
132
134
|
this.exportMap.forEach((exports, modulePath) => {
|
|
133
135
|
if (this.config.removeUnused) {
|
|
134
136
|
const usedExports = Array.from(exports).filter(exportName => {
|
|
135
|
-
const key = `${modulePath}}`;
|
|
137
|
+
const key = `${modulePath}:${exportName}`;
|
|
136
138
|
return (this.usageMap.get(key) || 0) > 0;
|
|
137
139
|
});
|
|
138
140
|
optimizedExports.set(modulePath, usedExports);
|
|
@@ -145,7 +147,8 @@ export class TreeShakingOptimizer {
|
|
|
145
147
|
}
|
|
146
148
|
|
|
147
149
|
// Check if module has side effects
|
|
148
|
-
hasSideEffects(modulePath)
|
|
150
|
+
hasSideEffects(modulePath: string): boolean {
|
|
151
|
+
if (!this.config.preserveSideEffects) return false;
|
|
149
152
|
|
|
150
153
|
// Check for common side effect patterns
|
|
151
154
|
const sideEffectPatterns = [
|
|
@@ -163,8 +166,9 @@ export class TreeShakingOptimizer {
|
|
|
163
166
|
}
|
|
164
167
|
|
|
165
168
|
// Generate optimized import statements
|
|
166
|
-
generateOptimizedImports(modulePath, imports])
|
|
167
|
-
|
|
169
|
+
generateOptimizedImports(modulePath: string, imports: string[]): string {
|
|
170
|
+
const usedImports = imports.filter(importName => {
|
|
171
|
+
const key = `${modulePath}:${importName}`;
|
|
168
172
|
return (this.usageMap.get(key) || 0) > 0;
|
|
169
173
|
});
|
|
170
174
|
|
|
@@ -180,11 +184,12 @@ export class TreeShakingOptimizer {
|
|
|
180
184
|
}
|
|
181
185
|
|
|
182
186
|
// Analyze bundle impact of tree-shaking
|
|
183
|
-
analyzeBundleImpact()
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
187
|
+
analyzeBundleImpact(): {
|
|
188
|
+
totalExports: number;
|
|
189
|
+
usedExports: number;
|
|
190
|
+
unusedExports: number;
|
|
191
|
+
potentialSavings: number;
|
|
192
|
+
treeShakingEfficiency: number;
|
|
188
193
|
} {
|
|
189
194
|
let totalExports = 0;
|
|
190
195
|
let usedExports = 0;
|
|
@@ -205,7 +210,7 @@ export class TreeShakingOptimizer {
|
|
|
205
210
|
});
|
|
206
211
|
});
|
|
207
212
|
|
|
208
|
-
const treeShakingEfficiency = totalExports > 0 ? (usedExports / totalExports) * 100 ;
|
|
213
|
+
const treeShakingEfficiency = totalExports > 0 ? (usedExports / totalExports) * 100 : 100;
|
|
209
214
|
const potentialSavings = unusedExports * 0.5; // Estimate 0.5KB per unused export
|
|
210
215
|
|
|
211
216
|
return {
|
|
@@ -218,19 +223,20 @@ export class TreeShakingOptimizer {
|
|
|
218
223
|
}
|
|
219
224
|
|
|
220
225
|
// Get tree-shaking statistics
|
|
221
|
-
getStatistics()
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
226
|
+
getStatistics(): {
|
|
227
|
+
modulesAnalyzed: number;
|
|
228
|
+
totalExports: number;
|
|
229
|
+
averageExportsPerModule: number;
|
|
230
|
+
treeShakingScore: number;
|
|
225
231
|
} {
|
|
226
232
|
const modulesAnalyzed = this.exportMap.size;
|
|
227
233
|
const totalExports = Array.from(this.exportMap.values()).reduce((sum, exports) => sum + exports.size, 0);
|
|
228
|
-
const averageExportsPerModule = modulesAnalyzed > 0 ? totalExports / modulesAnalyzed ;
|
|
234
|
+
const averageExportsPerModule = modulesAnalyzed > 0 ? totalExports / modulesAnalyzed : 0;
|
|
229
235
|
|
|
230
236
|
const analysis = this.analyzeTreeShaking();
|
|
231
237
|
const treeShakingScore = analysis.length > 0
|
|
232
238
|
? analysis.reduce((sum, module) => sum + module.treeShakingScore, 0) / analysis.length
|
|
233
|
-
;
|
|
239
|
+
: 100;
|
|
234
240
|
|
|
235
241
|
return {
|
|
236
242
|
modulesAnalyzed,
|
|
@@ -241,7 +247,8 @@ export class TreeShakingOptimizer {
|
|
|
241
247
|
}
|
|
242
248
|
|
|
243
249
|
// Export tree-shaking analysis
|
|
244
|
-
exportAnalysis()
|
|
250
|
+
exportAnalysis(): string {
|
|
251
|
+
const analysis = this.analyzeTreeShaking();
|
|
245
252
|
const impact = this.analyzeBundleImpact();
|
|
246
253
|
const stats = this.getStatistics();
|
|
247
254
|
const recommendations = this.generateTreeShakingRecommendations();
|
|
@@ -249,14 +256,15 @@ export class TreeShakingOptimizer {
|
|
|
249
256
|
return JSON.stringify({
|
|
250
257
|
analysis,
|
|
251
258
|
impact,
|
|
252
|
-
statistics,
|
|
259
|
+
statistics: stats,
|
|
253
260
|
recommendations,
|
|
254
|
-
timestamp).toISOString()
|
|
261
|
+
timestamp: new Date().toISOString()
|
|
255
262
|
}, null, 2);
|
|
256
263
|
}
|
|
257
264
|
|
|
258
265
|
// Reset all data
|
|
259
|
-
reset()
|
|
266
|
+
reset(): void {
|
|
267
|
+
this.exportMap.clear();
|
|
260
268
|
this.importMap.clear();
|
|
261
269
|
this.usageMap.clear();
|
|
262
270
|
}
|
|
@@ -1,35 +1,35 @@
|
|
|
1
1
|
// Tree-shaking utilities for optimizing bundle size
|
|
2
2
|
export interface ExportAnalysis {
|
|
3
|
-
module;
|
|
4
|
-
exports];
|
|
5
|
-
usedExports];
|
|
6
|
-
unusedExports];
|
|
7
|
-
importCount;
|
|
8
|
-
treeShakingScore;
|
|
3
|
+
module: string;
|
|
4
|
+
exports: string[];
|
|
5
|
+
usedExports: string[];
|
|
6
|
+
unusedExports: string[];
|
|
7
|
+
importCount: number;
|
|
8
|
+
treeShakingScore: number;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
export interface TreeShakingConfig {
|
|
12
|
-
enabled;
|
|
13
|
-
analyzeExports;
|
|
14
|
-
removeUnused;
|
|
15
|
-
preserveSideEffects;
|
|
16
|
-
modulesToAnalyze];
|
|
17
|
-
excludePatterns];
|
|
12
|
+
enabled: boolean;
|
|
13
|
+
analyzeExports: boolean;
|
|
14
|
+
removeUnused: boolean;
|
|
15
|
+
preserveSideEffects: boolean;
|
|
16
|
+
modulesToAnalyze: string[];
|
|
17
|
+
excludePatterns: string[];
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
export class TreeShakingOptimizer {
|
|
21
|
-
private config;
|
|
22
|
-
private exportMap, Set<string>>;
|
|
23
|
-
private importMap, Set<string>>;
|
|
24
|
-
private usageMap, number>;
|
|
25
|
-
|
|
26
|
-
constructor(config= {
|
|
27
|
-
enabled,
|
|
28
|
-
analyzeExports,
|
|
29
|
-
removeUnused,
|
|
30
|
-
preserveSideEffects,
|
|
31
|
-
modulesToAnalyze],
|
|
32
|
-
excludePatterns]
|
|
21
|
+
private config: TreeShakingConfig;
|
|
22
|
+
private exportMap: Map<string, Set<string>>;
|
|
23
|
+
private importMap: Map<string, Set<string>>;
|
|
24
|
+
private usageMap: Map<string, number>;
|
|
25
|
+
|
|
26
|
+
constructor(config: TreeShakingConfig = {
|
|
27
|
+
enabled: true,
|
|
28
|
+
analyzeExports: true,
|
|
29
|
+
removeUnused: true,
|
|
30
|
+
preserveSideEffects: true,
|
|
31
|
+
modulesToAnalyze: [],
|
|
32
|
+
excludePatterns: []
|
|
33
33
|
}) {
|
|
34
34
|
this.config = config;
|
|
35
35
|
this.exportMap = new Map();
|
|
@@ -38,21 +38,23 @@ export class TreeShakingOptimizer {
|
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
// Analyze module exports
|
|
41
|
-
analyzeModuleExports(modulePath, exports])
|
|
41
|
+
analyzeModuleExports(modulePath: string, exports: string[]): void {
|
|
42
|
+
if (!this.config.analyzeExports) return;
|
|
42
43
|
|
|
43
44
|
this.exportMap.set(modulePath, new Set(exports));
|
|
44
45
|
|
|
45
46
|
// Initialize usage count for each export
|
|
46
47
|
exports.forEach(exportName => {
|
|
47
|
-
const key = `${modulePath}}`;
|
|
48
|
+
const key = `${modulePath}:${exportName}`;
|
|
48
49
|
this.usageMap.set(key, 0);
|
|
49
50
|
});
|
|
50
51
|
}
|
|
51
52
|
|
|
52
53
|
// Track import usage
|
|
53
|
-
trackImport(modulePath, importName)
|
|
54
|
+
trackImport(modulePath: string, importName: string): void {
|
|
55
|
+
if (!this.config.enabled) return;
|
|
54
56
|
|
|
55
|
-
const key = `${modulePath}}`;
|
|
57
|
+
const key = `${modulePath}:${importName}`;
|
|
56
58
|
const currentUsage = this.usageMap.get(key) || 0;
|
|
57
59
|
this.usageMap.set(key, currentUsage + 1);
|
|
58
60
|
|
|
@@ -64,16 +66,16 @@ export class TreeShakingOptimizer {
|
|
|
64
66
|
}
|
|
65
67
|
|
|
66
68
|
// Analyze tree-shaking effectiveness
|
|
67
|
-
analyzeTreeShaking()] {
|
|
68
|
-
const analysis] = [];
|
|
69
|
+
analyzeTreeShaking(): ExportAnalysis[] {
|
|
70
|
+
const analysis: ExportAnalysis[] = [];
|
|
69
71
|
|
|
70
72
|
this.exportMap.forEach((exports, modulePath) => {
|
|
71
|
-
const usedExports] = [];
|
|
72
|
-
const unusedExports] = [];
|
|
73
|
+
const usedExports: string[] = [];
|
|
74
|
+
const unusedExports: string[] = [];
|
|
73
75
|
let totalUsage = 0;
|
|
74
76
|
|
|
75
77
|
exports.forEach(exportName => {
|
|
76
|
-
const key = `${modulePath}}`;
|
|
78
|
+
const key = `${modulePath}:${exportName}`;
|
|
77
79
|
const usage = this.usageMap.get(key) || 0;
|
|
78
80
|
totalUsage += usage;
|
|
79
81
|
|
|
@@ -84,14 +86,14 @@ export class TreeShakingOptimizer {
|
|
|
84
86
|
}
|
|
85
87
|
});
|
|
86
88
|
|
|
87
|
-
const treeShakingScore = exports.size > 0 ? (usedExports.length / exports.size) * 100 ;
|
|
89
|
+
const treeShakingScore = exports.size > 0 ? (usedExports.length / exports.size) * 100 : 100;
|
|
88
90
|
|
|
89
91
|
analysis.push({
|
|
90
|
-
module,
|
|
91
|
-
exports),
|
|
92
|
+
module: modulePath,
|
|
93
|
+
exports: Array.from(exports),
|
|
92
94
|
usedExports,
|
|
93
95
|
unusedExports,
|
|
94
|
-
importCount,
|
|
96
|
+
importCount: totalUsage,
|
|
95
97
|
treeShakingScore
|
|
96
98
|
});
|
|
97
99
|
});
|
|
@@ -100,9 +102,9 @@ export class TreeShakingOptimizer {
|
|
|
100
102
|
}
|
|
101
103
|
|
|
102
104
|
// Generate tree-shaking recommendations
|
|
103
|
-
generateTreeShakingRecommendations()] {
|
|
105
|
+
generateTreeShakingRecommendations(): string[] {
|
|
104
106
|
const analysis = this.analyzeTreeShaking();
|
|
105
|
-
const recommendations] = [];
|
|
107
|
+
const recommendations: string[] = [];
|
|
106
108
|
|
|
107
109
|
analysis.forEach(module => {
|
|
108
110
|
if (module.treeShakingScore < 50) {
|
|
@@ -110,7 +112,7 @@ export class TreeShakingOptimizer {
|
|
|
110
112
|
}
|
|
111
113
|
|
|
112
114
|
if (module.unusedExports.length > 0) {
|
|
113
|
-
recommendations.push(`Module ${module.module} has ${module.unusedExports.length} unused exports, ')}`);
|
|
115
|
+
recommendations.push(`Module ${module.module} has ${module.unusedExports.length} unused exports: ${module.unusedExports.join(', ')}`);
|
|
114
116
|
}
|
|
115
117
|
|
|
116
118
|
if (module.exports.length > 20) {
|
|
@@ -126,13 +128,13 @@ export class TreeShakingOptimizer {
|
|
|
126
128
|
}
|
|
127
129
|
|
|
128
130
|
// Optimize exports by removing unused ones
|
|
129
|
-
optimizeExports(), string[]> {
|
|
131
|
+
optimizeExports(): Map<string, string[]> {
|
|
130
132
|
const optimizedExports = new Map<string, string[]>();
|
|
131
133
|
|
|
132
134
|
this.exportMap.forEach((exports, modulePath) => {
|
|
133
135
|
if (this.config.removeUnused) {
|
|
134
136
|
const usedExports = Array.from(exports).filter(exportName => {
|
|
135
|
-
const key = `${modulePath}}`;
|
|
137
|
+
const key = `${modulePath}:${exportName}`;
|
|
136
138
|
return (this.usageMap.get(key) || 0) > 0;
|
|
137
139
|
});
|
|
138
140
|
optimizedExports.set(modulePath, usedExports);
|
|
@@ -145,7 +147,8 @@ export class TreeShakingOptimizer {
|
|
|
145
147
|
}
|
|
146
148
|
|
|
147
149
|
// Check if module has side effects
|
|
148
|
-
hasSideEffects(modulePath)
|
|
150
|
+
hasSideEffects(modulePath: string): boolean {
|
|
151
|
+
if (!this.config.preserveSideEffects) return false;
|
|
149
152
|
|
|
150
153
|
// Check for common side effect patterns
|
|
151
154
|
const sideEffectPatterns = [
|
|
@@ -163,8 +166,9 @@ export class TreeShakingOptimizer {
|
|
|
163
166
|
}
|
|
164
167
|
|
|
165
168
|
// Generate optimized import statements
|
|
166
|
-
generateOptimizedImports(modulePath, imports])
|
|
167
|
-
|
|
169
|
+
generateOptimizedImports(modulePath: string, imports: string[]): string {
|
|
170
|
+
const usedImports = imports.filter(importName => {
|
|
171
|
+
const key = `${modulePath}:${importName}`;
|
|
168
172
|
return (this.usageMap.get(key) || 0) > 0;
|
|
169
173
|
});
|
|
170
174
|
|
|
@@ -180,11 +184,12 @@ export class TreeShakingOptimizer {
|
|
|
180
184
|
}
|
|
181
185
|
|
|
182
186
|
// Analyze bundle impact of tree-shaking
|
|
183
|
-
analyzeBundleImpact()
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
187
|
+
analyzeBundleImpact(): {
|
|
188
|
+
totalExports: number;
|
|
189
|
+
usedExports: number;
|
|
190
|
+
unusedExports: number;
|
|
191
|
+
potentialSavings: number;
|
|
192
|
+
treeShakingEfficiency: number;
|
|
188
193
|
} {
|
|
189
194
|
let totalExports = 0;
|
|
190
195
|
let usedExports = 0;
|
|
@@ -205,7 +210,7 @@ export class TreeShakingOptimizer {
|
|
|
205
210
|
});
|
|
206
211
|
});
|
|
207
212
|
|
|
208
|
-
const treeShakingEfficiency = totalExports > 0 ? (usedExports / totalExports) * 100 ;
|
|
213
|
+
const treeShakingEfficiency = totalExports > 0 ? (usedExports / totalExports) * 100 : 100;
|
|
209
214
|
const potentialSavings = unusedExports * 0.5; // Estimate 0.5KB per unused export
|
|
210
215
|
|
|
211
216
|
return {
|
|
@@ -218,19 +223,20 @@ export class TreeShakingOptimizer {
|
|
|
218
223
|
}
|
|
219
224
|
|
|
220
225
|
// Get tree-shaking statistics
|
|
221
|
-
getStatistics()
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
226
|
+
getStatistics(): {
|
|
227
|
+
modulesAnalyzed: number;
|
|
228
|
+
totalExports: number;
|
|
229
|
+
averageExportsPerModule: number;
|
|
230
|
+
treeShakingScore: number;
|
|
225
231
|
} {
|
|
226
232
|
const modulesAnalyzed = this.exportMap.size;
|
|
227
233
|
const totalExports = Array.from(this.exportMap.values()).reduce((sum, exports) => sum + exports.size, 0);
|
|
228
|
-
const averageExportsPerModule = modulesAnalyzed > 0 ? totalExports / modulesAnalyzed ;
|
|
234
|
+
const averageExportsPerModule = modulesAnalyzed > 0 ? totalExports / modulesAnalyzed : 0;
|
|
229
235
|
|
|
230
236
|
const analysis = this.analyzeTreeShaking();
|
|
231
237
|
const treeShakingScore = analysis.length > 0
|
|
232
238
|
? analysis.reduce((sum, module) => sum + module.treeShakingScore, 0) / analysis.length
|
|
233
|
-
;
|
|
239
|
+
: 100;
|
|
234
240
|
|
|
235
241
|
return {
|
|
236
242
|
modulesAnalyzed,
|
|
@@ -241,7 +247,8 @@ export class TreeShakingOptimizer {
|
|
|
241
247
|
}
|
|
242
248
|
|
|
243
249
|
// Export tree-shaking analysis
|
|
244
|
-
exportAnalysis()
|
|
250
|
+
exportAnalysis(): string {
|
|
251
|
+
const analysis = this.analyzeTreeShaking();
|
|
245
252
|
const impact = this.analyzeBundleImpact();
|
|
246
253
|
const stats = this.getStatistics();
|
|
247
254
|
const recommendations = this.generateTreeShakingRecommendations();
|
|
@@ -249,14 +256,15 @@ export class TreeShakingOptimizer {
|
|
|
249
256
|
return JSON.stringify({
|
|
250
257
|
analysis,
|
|
251
258
|
impact,
|
|
252
|
-
statistics,
|
|
259
|
+
statistics: stats,
|
|
253
260
|
recommendations,
|
|
254
|
-
timestamp).toISOString()
|
|
261
|
+
timestamp: new Date().toISOString()
|
|
255
262
|
}, null, 2);
|
|
256
263
|
}
|
|
257
264
|
|
|
258
265
|
// Reset all data
|
|
259
|
-
reset()
|
|
266
|
+
reset(): void {
|
|
267
|
+
this.exportMap.clear();
|
|
260
268
|
this.importMap.clear();
|
|
261
269
|
this.usageMap.clear();
|
|
262
270
|
}
|
package/package.json
CHANGED