@rakeyshgidwani/roger-ui-bank-theme-stan-design 0.2.8 → 0.2.10
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 +23 -1
- package/dist/components/ui/navigation/index.js +23 -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 +22 -2
- package/dist/components/ui/overlay/index.js +22 -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 +289 -280
- package/dist/index.js +289 -280
- 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/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 +15 -4
- package/dist/tokens/index.js +15 -4
- 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,72 +1,72 @@
|
|
|
1
1
|
// Bundle splitting utilities for optimizing build process and loading performance
|
|
2
2
|
export interface BundleSplitConfig {
|
|
3
|
-
enabled;
|
|
4
|
-
strategy;
|
|
5
|
-
chunkSize;
|
|
6
|
-
maxChunks;
|
|
7
|
-
minChunkSize;
|
|
8
|
-
vendorChunk;
|
|
9
|
-
commonChunk;
|
|
10
|
-
asyncChunk;
|
|
11
|
-
preloadChunks;
|
|
12
|
-
cacheGroups, any>;
|
|
3
|
+
enabled: boolean;
|
|
4
|
+
strategy: 'dynamic' | 'static' | 'hybrid';
|
|
5
|
+
chunkSize: number;
|
|
6
|
+
maxChunks: number;
|
|
7
|
+
minChunkSize: number;
|
|
8
|
+
vendorChunk: boolean;
|
|
9
|
+
commonChunk: boolean;
|
|
10
|
+
asyncChunk: boolean;
|
|
11
|
+
preloadChunks: boolean;
|
|
12
|
+
cacheGroups: Record<string, any>;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
export interface ChunkAnalysis {
|
|
16
|
-
name;
|
|
17
|
-
size;
|
|
18
|
-
gzippedSize;
|
|
19
|
-
modules];
|
|
20
|
-
dependencies];
|
|
21
|
-
async;
|
|
22
|
-
vendor;
|
|
23
|
-
common;
|
|
24
|
-
loadPriority;
|
|
16
|
+
name: string;
|
|
17
|
+
size: number;
|
|
18
|
+
gzippedSize: number;
|
|
19
|
+
modules: string[];
|
|
20
|
+
dependencies: string[];
|
|
21
|
+
async: boolean;
|
|
22
|
+
vendor: boolean;
|
|
23
|
+
common: boolean;
|
|
24
|
+
loadPriority: 'high' | 'medium' | 'low';
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
export interface BundleSplitReport {
|
|
28
|
-
chunks];
|
|
29
|
-
totalSize;
|
|
30
|
-
totalGzippedSize;
|
|
31
|
-
chunkCount;
|
|
32
|
-
averageChunkSize;
|
|
33
|
-
optimizationScore;
|
|
34
|
-
recommendations];
|
|
35
|
-
timestamp;
|
|
28
|
+
chunks: ChunkAnalysis[];
|
|
29
|
+
totalSize: number;
|
|
30
|
+
totalGzippedSize: number;
|
|
31
|
+
chunkCount: number;
|
|
32
|
+
averageChunkSize: number;
|
|
33
|
+
optimizationScore: number;
|
|
34
|
+
recommendations: string[];
|
|
35
|
+
timestamp: number;
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
export class BundleSplitter {
|
|
39
|
-
private config;
|
|
40
|
-
private chunks, ChunkAnalysis>;
|
|
41
|
-
|
|
42
|
-
constructor(config= {
|
|
43
|
-
enabled,
|
|
44
|
-
strategy,
|
|
45
|
-
chunkSize, // 244KB
|
|
46
|
-
maxChunks,
|
|
47
|
-
minChunkSize, // 30KB
|
|
48
|
-
vendorChunk,
|
|
49
|
-
commonChunk,
|
|
50
|
-
asyncChunk,
|
|
51
|
-
preloadChunks,
|
|
52
|
-
cacheGroups}
|
|
39
|
+
private config: BundleSplitConfig;
|
|
40
|
+
private chunks: Map<string, ChunkAnalysis>;
|
|
41
|
+
|
|
42
|
+
constructor(config: BundleSplitConfig = {
|
|
43
|
+
enabled: true,
|
|
44
|
+
strategy: 'hybrid',
|
|
45
|
+
chunkSize: 244 * 1024, // 244KB
|
|
46
|
+
maxChunks: 10,
|
|
47
|
+
minChunkSize: 30 * 1024, // 30KB
|
|
48
|
+
vendorChunk: true,
|
|
49
|
+
commonChunk: true,
|
|
50
|
+
asyncChunk: true,
|
|
51
|
+
preloadChunks: true,
|
|
52
|
+
cacheGroups: {}
|
|
53
53
|
}) {
|
|
54
54
|
this.config = config;
|
|
55
55
|
this.chunks = new Map();
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
// Analyze bundle chunks from build output
|
|
59
|
-
analyzeChunks(buildOutput)] {
|
|
59
|
+
analyzeChunks(buildOutput: string): ChunkAnalysis[] {
|
|
60
60
|
if (!this.config.enabled) return [];
|
|
61
61
|
|
|
62
62
|
const lines = buildOutput.split('\n');
|
|
63
|
-
const chunks] = [];
|
|
63
|
+
const chunks: ChunkAnalysis[] = [];
|
|
64
64
|
|
|
65
65
|
lines.forEach(line => {
|
|
66
66
|
// Handle all dist/ patterns
|
|
67
67
|
if (line.includes('dist/') && line.includes('kB')) {
|
|
68
68
|
// Use a more flexible regex that captures the essential parts
|
|
69
|
-
const match = line.match(/\s*dist\/(
|
|
69
|
+
const match = line.match(/\s*dist\/(?:assets\/)?([^\s]+)\s+(\d+\.\d+)\s+kB\s+\│\s*gzip:\s*(\d+\.\d+)\s+kB/);
|
|
70
70
|
|
|
71
71
|
if (match) {
|
|
72
72
|
const [, filename, size, gzip] = match;
|
|
@@ -74,20 +74,20 @@ export class BundleSplitter {
|
|
|
74
74
|
const gzipKB = parseFloat(gzip);
|
|
75
75
|
|
|
76
76
|
// Extract name and extension from filename
|
|
77
|
-
const nameMatch = filename.match(/^([^.]+)(
|
|
78
|
-
const name = nameMatch ? nameMatch[1] ;
|
|
79
|
-
const ext = nameMatch && nameMatch[2] ? nameMatch[2] ;
|
|
77
|
+
const nameMatch = filename.match(/^([^.]+)(?:\.[^.]+\.([^.]+))?$/);
|
|
78
|
+
const name = nameMatch ? nameMatch[1] : filename;
|
|
79
|
+
const ext = nameMatch && nameMatch[2] ? nameMatch[2] : '';
|
|
80
80
|
|
|
81
|
-
const chunk= {
|
|
82
|
-
name}.${ext}` ,
|
|
83
|
-
size, // Convert to bytes
|
|
84
|
-
gzippedSize,
|
|
85
|
-
modules),
|
|
86
|
-
dependencies),
|
|
87
|
-
async),
|
|
88
|
-
vendor),
|
|
89
|
-
common),
|
|
90
|
-
loadPriority, sizeKB)
|
|
81
|
+
const chunk: ChunkAnalysis = {
|
|
82
|
+
name: ext ? `${name}.${ext}` : name,
|
|
83
|
+
size: sizeKB * 1024, // Convert to bytes
|
|
84
|
+
gzippedSize: gzipKB * 1024,
|
|
85
|
+
modules: this.estimateModulesForChunk(name),
|
|
86
|
+
dependencies: this.estimateDependencies(name),
|
|
87
|
+
async: this.isAsyncChunk(name),
|
|
88
|
+
vendor: this.isVendorChunk(name),
|
|
89
|
+
common: this.isCommonChunk(name),
|
|
90
|
+
loadPriority: this.calculateLoadPriority(name, sizeKB)
|
|
91
91
|
};
|
|
92
92
|
|
|
93
93
|
chunks.push(chunk);
|
|
@@ -100,7 +100,7 @@ export class BundleSplitter {
|
|
|
100
100
|
}
|
|
101
101
|
|
|
102
102
|
// Estimate modules for a specific chunk
|
|
103
|
-
private estimateModulesForChunk(chunkName)] {
|
|
103
|
+
private estimateModulesForChunk(chunkName: string): string[] {
|
|
104
104
|
if (chunkName.includes('index')) {
|
|
105
105
|
return ['main', 'themes', 'components', 'utils'];
|
|
106
106
|
} else if (chunkName.includes('vendor')) {
|
|
@@ -116,7 +116,7 @@ export class BundleSplitter {
|
|
|
116
116
|
}
|
|
117
117
|
|
|
118
118
|
// Estimate dependencies for a chunk
|
|
119
|
-
private estimateDependencies(chunkName)] {
|
|
119
|
+
private estimateDependencies(chunkName: string): string[] {
|
|
120
120
|
if (chunkName.includes('index')) {
|
|
121
121
|
return ['vendor', 'theme', 'component'];
|
|
122
122
|
} else if (chunkName.includes('vendor')) {
|
|
@@ -130,25 +130,29 @@ export class BundleSplitter {
|
|
|
130
130
|
}
|
|
131
131
|
|
|
132
132
|
// Check if chunk is async (lazy-loaded)
|
|
133
|
-
private isAsyncChunk(chunkName)
|
|
133
|
+
private isAsyncChunk(chunkName: string): boolean {
|
|
134
|
+
return chunkName.includes('async') ||
|
|
134
135
|
chunkName.includes('lazy') ||
|
|
135
136
|
chunkName.includes('dynamic');
|
|
136
137
|
}
|
|
137
138
|
|
|
138
139
|
// Check if chunk contains vendor libraries
|
|
139
|
-
private isVendorChunk(chunkName)
|
|
140
|
+
private isVendorChunk(chunkName: string): boolean {
|
|
141
|
+
return chunkName.includes('vendor') ||
|
|
140
142
|
chunkName.includes('lib') ||
|
|
141
143
|
chunkName.includes('node_modules');
|
|
142
144
|
}
|
|
143
145
|
|
|
144
146
|
// Check if chunk contains common/shared code
|
|
145
|
-
private isCommonChunk(chunkName)
|
|
147
|
+
private isCommonChunk(chunkName: string): boolean {
|
|
148
|
+
return chunkName.includes('common') ||
|
|
146
149
|
chunkName.includes('shared') ||
|
|
147
150
|
chunkName.includes('runtime');
|
|
148
151
|
}
|
|
149
152
|
|
|
150
153
|
// Calculate load priority for a chunk
|
|
151
|
-
private calculateLoadPriority(chunkName, sizeKB)
|
|
154
|
+
private calculateLoadPriority(chunkName: string, sizeKB: number): 'high' | 'medium' | 'low' {
|
|
155
|
+
if (chunkName.includes('index') || chunkName.includes('main')) {
|
|
152
156
|
return 'high';
|
|
153
157
|
} else if (chunkName.includes('vendor') || chunkName.includes('common')) {
|
|
154
158
|
return 'medium';
|
|
@@ -159,8 +163,8 @@ export class BundleSplitter {
|
|
|
159
163
|
}
|
|
160
164
|
|
|
161
165
|
// Generate bundle splitting recommendations
|
|
162
|
-
generateRecommendations(chunks])] {
|
|
163
|
-
const recommendations] = [];
|
|
166
|
+
generateRecommendations(chunks: ChunkAnalysis[]): string[] {
|
|
167
|
+
const recommendations: string[] = [];
|
|
164
168
|
|
|
165
169
|
// Check chunk count
|
|
166
170
|
if (chunks.length > this.config.maxChunks) {
|
|
@@ -206,7 +210,8 @@ export class BundleSplitter {
|
|
|
206
210
|
}
|
|
207
211
|
|
|
208
212
|
// Calculate optimization score
|
|
209
|
-
calculateOptimizationScore(chunks])
|
|
213
|
+
calculateOptimizationScore(chunks: ChunkAnalysis[]): number {
|
|
214
|
+
let score = 100;
|
|
210
215
|
|
|
211
216
|
// Penalize too many chunks
|
|
212
217
|
if (chunks.length > this.config.maxChunks) {
|
|
@@ -237,24 +242,29 @@ export class BundleSplitter {
|
|
|
237
242
|
}
|
|
238
243
|
|
|
239
244
|
// Generate Vite configuration for bundle splitting
|
|
240
|
-
generateViteConfig()
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
+
generateViteConfig(): string {
|
|
246
|
+
const config = {
|
|
247
|
+
build: {
|
|
248
|
+
rollupOptions: {
|
|
249
|
+
output: {
|
|
250
|
+
manualChunks: this.generateManualChunks(),
|
|
251
|
+
chunkFileNames: this.generateChunkFileNames(),
|
|
252
|
+
entryFileNames: this.generateEntryFileNames(),
|
|
253
|
+
assetFileNames: this.generateAssetFileNames()
|
|
245
254
|
}
|
|
246
255
|
},
|
|
247
|
-
chunkSizeWarningLimit,
|
|
248
|
-
minify,
|
|
249
|
-
sourcemap
|
|
256
|
+
chunkSizeWarningLimit: this.config.chunkSize / 1024,
|
|
257
|
+
minify: 'terser',
|
|
258
|
+
sourcemap: true
|
|
259
|
+
}
|
|
250
260
|
};
|
|
251
261
|
|
|
252
262
|
return JSON.stringify(config, null, 2);
|
|
253
263
|
}
|
|
254
264
|
|
|
255
265
|
// Generate manual chunk configuration
|
|
256
|
-
private generateManualChunks(), string[]> {
|
|
257
|
-
const chunks, string[]> = {};
|
|
266
|
+
private generateManualChunks(): Record<string, string[]> {
|
|
267
|
+
const chunks: Record<string, string[]> = {};
|
|
258
268
|
|
|
259
269
|
if (this.config.vendorChunk) {
|
|
260
270
|
chunks.vendor = [
|
|
@@ -283,7 +293,8 @@ export class BundleSplitter {
|
|
|
283
293
|
}
|
|
284
294
|
|
|
285
295
|
// Generate chunk file naming pattern
|
|
286
|
-
private generateChunkFileNames()
|
|
296
|
+
private generateChunkFileNames(): string {
|
|
297
|
+
if (this.config.strategy === 'dynamic') {
|
|
287
298
|
return 'assets/[name]-[hash].js';
|
|
288
299
|
} else if (this.config.strategy === 'static') {
|
|
289
300
|
return 'assets/[name].js';
|
|
@@ -293,20 +304,25 @@ export class BundleSplitter {
|
|
|
293
304
|
}
|
|
294
305
|
|
|
295
306
|
// Generate entry file naming pattern
|
|
296
|
-
private generateEntryFileNames()
|
|
307
|
+
private generateEntryFileNames(): string {
|
|
308
|
+
return 'assets/[name]-[hash].js';
|
|
297
309
|
}
|
|
298
310
|
|
|
299
311
|
// Generate asset file naming pattern
|
|
300
|
-
private generateAssetFileNames()
|
|
312
|
+
private generateAssetFileNames(): string {
|
|
313
|
+
return 'assets/[name]-[hash].[ext]';
|
|
301
314
|
}
|
|
302
315
|
|
|
303
316
|
// Generate webpack configuration for bundle splitting
|
|
304
|
-
generateWebpackConfig()
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
317
|
+
generateWebpackConfig(): string {
|
|
318
|
+
const config = {
|
|
319
|
+
optimization: {
|
|
320
|
+
splitChunks: {
|
|
321
|
+
chunks: 'all',
|
|
322
|
+
minSize: this.config.minChunkSize,
|
|
323
|
+
maxSize: this.config.chunkSize,
|
|
324
|
+
maxChunks: this.config.maxChunks,
|
|
325
|
+
cacheGroups: this.generateWebpackCacheGroups()
|
|
310
326
|
}
|
|
311
327
|
}
|
|
312
328
|
};
|
|
@@ -315,23 +331,25 @@ export class BundleSplitter {
|
|
|
315
331
|
}
|
|
316
332
|
|
|
317
333
|
// Generate webpack cache groups
|
|
318
|
-
private generateWebpackCacheGroups(), any> {
|
|
319
|
-
const cacheGroups, any> = {};
|
|
334
|
+
private generateWebpackCacheGroups(): Record<string, any> {
|
|
335
|
+
const cacheGroups: Record<string, any> = {};
|
|
320
336
|
|
|
321
337
|
if (this.config.vendorChunk) {
|
|
322
338
|
cacheGroups.vendor = {
|
|
323
|
-
test]node_modules[\\/]/,
|
|
324
|
-
name,
|
|
325
|
-
chunks,
|
|
326
|
-
priority
|
|
339
|
+
test: /[\\/]node_modules[\\/]/,
|
|
340
|
+
name: 'vendor',
|
|
341
|
+
chunks: 'all',
|
|
342
|
+
priority: 10
|
|
343
|
+
};
|
|
327
344
|
}
|
|
328
345
|
|
|
329
346
|
if (this.config.commonChunk) {
|
|
330
347
|
cacheGroups.common = {
|
|
331
|
-
name,
|
|
332
|
-
minChunks,
|
|
333
|
-
chunks,
|
|
334
|
-
priority
|
|
348
|
+
name: 'common',
|
|
349
|
+
minChunks: 2,
|
|
350
|
+
chunks: 'all',
|
|
351
|
+
priority: 5
|
|
352
|
+
};
|
|
335
353
|
}
|
|
336
354
|
|
|
337
355
|
// Add custom cache groups from config
|
|
@@ -341,8 +359,8 @@ export class BundleSplitter {
|
|
|
341
359
|
}
|
|
342
360
|
|
|
343
361
|
// Generate dynamic import patterns for code splitting
|
|
344
|
-
generateDynamicImports()] {
|
|
345
|
-
const patterns] = [];
|
|
362
|
+
generateDynamicImports(): string[] {
|
|
363
|
+
const patterns: string[] = [];
|
|
346
364
|
|
|
347
365
|
if (this.config.asyncChunk) {
|
|
348
366
|
patterns.push(
|
|
@@ -363,8 +381,8 @@ export class BundleSplitter {
|
|
|
363
381
|
}
|
|
364
382
|
|
|
365
383
|
// Generate preload strategies
|
|
366
|
-
generatePreloadStrategies()] {
|
|
367
|
-
const strategies] = [];
|
|
384
|
+
generatePreloadStrategies(): string[] {
|
|
385
|
+
const strategies: string[] = [];
|
|
368
386
|
|
|
369
387
|
if (this.config.preloadChunks) {
|
|
370
388
|
strategies.push(
|
|
@@ -381,7 +399,7 @@ export class BundleSplitter {
|
|
|
381
399
|
"};",
|
|
382
400
|
"",
|
|
383
401
|
"// Preload on route change",
|
|
384
|
-
"const preloadRouteChunk = (route) => {",
|
|
402
|
+
"const preloadRouteChunk = (route: string) => {",
|
|
385
403
|
" const link = document.createElement('link');",
|
|
386
404
|
" link.rel = 'prefetch';",
|
|
387
405
|
" link.as = 'script';",
|
|
@@ -395,18 +413,19 @@ export class BundleSplitter {
|
|
|
395
413
|
}
|
|
396
414
|
|
|
397
415
|
// Get bundle splitting statistics
|
|
398
|
-
getStatistics(chunks])
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
416
|
+
getStatistics(chunks: ChunkAnalysis[]): {
|
|
417
|
+
totalSize: number;
|
|
418
|
+
totalGzippedSize: number;
|
|
419
|
+
chunkCount: number;
|
|
420
|
+
averageChunkSize: number;
|
|
421
|
+
vendorChunkCount: number;
|
|
422
|
+
asyncChunkCount: number;
|
|
423
|
+
commonChunkCount: number;
|
|
424
|
+
optimizationScore: number;
|
|
406
425
|
} {
|
|
407
426
|
const totalSize = chunks.reduce((sum, chunk) => sum + chunk.size, 0);
|
|
408
427
|
const totalGzippedSize = chunks.reduce((sum, chunk) => sum + chunk.gzippedSize, 0);
|
|
409
|
-
const averageChunkSize = chunks.length > 0 ? totalSize / chunks.length ;
|
|
428
|
+
const averageChunkSize = chunks.length > 0 ? totalSize / chunks.length : 0;
|
|
410
429
|
const vendorChunkCount = chunks.filter(chunk => chunk.vendor).length;
|
|
411
430
|
const asyncChunkCount = chunks.filter(chunk => chunk.async).length;
|
|
412
431
|
const commonChunkCount = chunks.filter(chunk => chunk.common).length;
|
|
@@ -415,7 +434,7 @@ export class BundleSplitter {
|
|
|
415
434
|
return {
|
|
416
435
|
totalSize,
|
|
417
436
|
totalGzippedSize,
|
|
418
|
-
chunkCount,
|
|
437
|
+
chunkCount: chunks.length,
|
|
419
438
|
averageChunkSize,
|
|
420
439
|
vendorChunkCount,
|
|
421
440
|
asyncChunkCount,
|
|
@@ -425,7 +444,8 @@ export class BundleSplitter {
|
|
|
425
444
|
}
|
|
426
445
|
|
|
427
446
|
// Export bundle splitting analysis
|
|
428
|
-
exportAnalysis(chunks])
|
|
447
|
+
exportAnalysis(chunks: ChunkAnalysis[]): string {
|
|
448
|
+
const recommendations = this.generateRecommendations(chunks);
|
|
429
449
|
const statistics = this.getStatistics(chunks);
|
|
430
450
|
const viteConfig = this.generateViteConfig();
|
|
431
451
|
const webpackConfig = this.generateWebpackConfig();
|
|
@@ -436,21 +456,26 @@ export class BundleSplitter {
|
|
|
436
456
|
chunks,
|
|
437
457
|
statistics,
|
|
438
458
|
recommendations,
|
|
439
|
-
configurations
|
|
440
|
-
|
|
441
|
-
|
|
459
|
+
configurations: {
|
|
460
|
+
vite: viteConfig,
|
|
461
|
+
webpack: webpackConfig
|
|
462
|
+
},
|
|
463
|
+
codeSplitting: {
|
|
464
|
+
dynamicImports,
|
|
442
465
|
preloadStrategies
|
|
443
466
|
},
|
|
444
|
-
timestamp).toISOString()
|
|
467
|
+
timestamp: new Date().toISOString()
|
|
445
468
|
}, null, 2);
|
|
446
469
|
}
|
|
447
470
|
|
|
448
471
|
// Update configuration
|
|
449
|
-
updateConfig(newConfig)
|
|
472
|
+
updateConfig(newConfig: Partial<BundleSplitConfig>): void {
|
|
473
|
+
this.config = { ...this.config, ...newConfig };
|
|
450
474
|
}
|
|
451
475
|
|
|
452
476
|
// Get current configuration
|
|
453
|
-
getConfig()
|
|
477
|
+
getConfig(): BundleSplitConfig {
|
|
478
|
+
return { ...this.config };
|
|
454
479
|
}
|
|
455
480
|
}
|
|
456
481
|
|