@nerviq/cli 1.20.0 → 1.21.0
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 +23 -23
- package/README.md +2 -2
- package/bin/cli.js +1 -0
- package/package.json +2 -1
- package/src/activity.js +1039 -1039
- package/src/adoption-advisor.js +299 -299
- package/src/aider/config-parser.js +166 -166
- package/src/aider/context.js +6 -2
- package/src/aider/deep-review.js +316 -316
- package/src/aider/domain-packs.js +303 -303
- package/src/aider/freshness.js +93 -93
- package/src/aider/governance.js +253 -253
- package/src/aider/interactive.js +334 -334
- package/src/aider/mcp-packs.js +329 -329
- package/src/aider/patch.js +214 -214
- package/src/aider/plans.js +186 -186
- package/src/aider/premium.js +360 -360
- package/src/aider/setup.js +404 -404
- package/src/aider/techniques.js +312 -67
- package/src/analyze.js +951 -951
- package/src/anti-patterns.js +485 -485
- package/src/audit/instruction-files.js +180 -180
- package/src/audit/recommendations.js +577 -577
- package/src/auto-suggest.js +154 -154
- package/src/badge.js +13 -13
- package/src/behavioral-drift.js +801 -801
- package/src/benchmark.js +67 -67
- package/src/catalog.js +103 -103
- package/src/certification.js +128 -128
- package/src/codex/config-parser.js +183 -183
- package/src/codex/context.js +223 -223
- package/src/codex/deep-review.js +493 -493
- package/src/codex/domain-packs.js +394 -394
- package/src/codex/freshness.js +84 -84
- package/src/codex/governance.js +192 -192
- package/src/codex/interactive.js +618 -618
- package/src/codex/mcp-packs.js +914 -914
- package/src/codex/patch.js +209 -209
- package/src/codex/plans.js +251 -251
- package/src/codex/premium.js +614 -614
- package/src/codex/setup.js +591 -591
- package/src/context.js +10 -4
- package/src/continuous-ops.js +681 -681
- package/src/copilot/activity.js +309 -309
- package/src/copilot/deep-review.js +346 -346
- package/src/copilot/domain-packs.js +372 -372
- package/src/copilot/freshness.js +57 -57
- package/src/copilot/governance.js +222 -222
- package/src/copilot/interactive.js +406 -406
- package/src/copilot/mcp-packs.js +826 -826
- package/src/copilot/plans.js +253 -253
- package/src/copilot/premium.js +451 -451
- package/src/copilot/setup.js +488 -488
- package/src/cost-tracking.js +61 -61
- package/src/cursor/activity.js +301 -301
- package/src/cursor/config-parser.js +265 -265
- package/src/cursor/context.js +256 -256
- package/src/cursor/deep-review.js +334 -334
- package/src/cursor/domain-packs.js +368 -368
- package/src/cursor/freshness.js +65 -65
- package/src/cursor/governance.js +229 -229
- package/src/cursor/interactive.js +391 -391
- package/src/cursor/mcp-packs.js +828 -828
- package/src/cursor/plans.js +254 -254
- package/src/cursor/premium.js +469 -469
- package/src/cursor/setup.js +488 -488
- package/src/dashboard.js +493 -493
- package/src/deep-review.js +428 -428
- package/src/deprecation.js +98 -98
- package/src/diff-only.js +280 -280
- package/src/doctor.js +119 -119
- package/src/domain-pack-expansion.js +1033 -1033
- package/src/domain-packs.js +387 -387
- package/src/feedback.js +178 -178
- package/src/fix-engine.js +783 -783
- package/src/fix-prompts.js +122 -122
- package/src/formatters/sarif.js +115 -115
- package/src/freshness.js +74 -74
- package/src/gemini/config-parser.js +275 -275
- package/src/gemini/deep-review.js +559 -559
- package/src/gemini/domain-packs.js +393 -393
- package/src/gemini/freshness.js +66 -66
- package/src/gemini/governance.js +201 -201
- package/src/gemini/interactive.js +860 -860
- package/src/gemini/mcp-packs.js +915 -915
- package/src/gemini/plans.js +269 -269
- package/src/gemini/premium.js +760 -760
- package/src/gemini/setup.js +692 -692
- package/src/governance.js +72 -72
- package/src/harmony/add.js +68 -68
- package/src/harmony/advisor.js +333 -333
- package/src/harmony/canon.js +565 -565
- package/src/harmony/cli.js +591 -591
- package/src/harmony/drift.js +401 -401
- package/src/harmony/governance.js +313 -313
- package/src/harmony/memory.js +239 -239
- package/src/harmony/sync.js +475 -475
- package/src/harmony/watch.js +370 -370
- package/src/hook-validation.js +342 -342
- package/src/index.js +271 -271
- package/src/init.js +184 -184
- package/src/instruction-surfaces.js +185 -185
- package/src/integrations.js +144 -144
- package/src/interactive.js +118 -118
- package/src/locales/en.json +1 -1
- package/src/locales/es.json +1 -1
- package/src/mcp-packs.js +830 -830
- package/src/mcp-server.js +726 -726
- package/src/mcp-validation.js +337 -337
- package/src/nerviq-sync.json +7 -7
- package/src/opencode/config-parser.js +109 -109
- package/src/opencode/context.js +247 -247
- package/src/opencode/deep-review.js +313 -313
- package/src/opencode/domain-packs.js +262 -262
- package/src/opencode/freshness.js +66 -66
- package/src/opencode/governance.js +159 -159
- package/src/opencode/interactive.js +392 -392
- package/src/opencode/mcp-packs.js +705 -705
- package/src/opencode/patch.js +184 -184
- package/src/opencode/plans.js +231 -231
- package/src/opencode/premium.js +413 -413
- package/src/opencode/setup.js +449 -449
- package/src/opencode/techniques.js +27 -27
- package/src/operating-profile.js +574 -574
- package/src/org.js +152 -152
- package/src/permission-rules.js +218 -218
- package/src/plans.js +839 -839
- package/src/platform-change-manifest.js +86 -86
- package/src/plugins.js +110 -110
- package/src/policy-layers.js +210 -210
- package/src/profiles.js +124 -124
- package/src/prompt-injection.js +74 -74
- package/src/public-api.js +173 -173
- package/src/recommendation-rules.js +84 -84
- package/src/repo-archetype.js +386 -386
- package/src/secret-patterns.js +39 -39
- package/src/server.js +527 -527
- package/src/setup/analysis.js +607 -607
- package/src/setup/runtime.js +172 -172
- package/src/setup.js +677 -677
- package/src/shared/capabilities.js +194 -194
- package/src/source-urls.js +132 -132
- package/src/stack-checks.js +565 -565
- package/src/supplemental-checks.js +13 -13
- package/src/synergy/adaptive.js +261 -261
- package/src/synergy/compensation.js +137 -137
- package/src/synergy/evidence.js +193 -193
- package/src/synergy/learning.js +199 -199
- package/src/synergy/patterns.js +227 -227
- package/src/synergy/ranking.js +83 -83
- package/src/synergy/report.js +165 -165
- package/src/synergy/routing.js +146 -146
- package/src/techniques/api.js +407 -407
- package/src/techniques/automation.js +316 -316
- package/src/techniques/compliance.js +257 -257
- package/src/techniques/hygiene.js +294 -294
- package/src/techniques/instructions.js +243 -243
- package/src/techniques/observability.js +226 -226
- package/src/techniques/optimization.js +142 -142
- package/src/techniques/quality.js +318 -318
- package/src/techniques/security.js +237 -237
- package/src/techniques/shared.js +443 -443
- package/src/techniques/stacks.js +2294 -2294
- package/src/techniques/tools.js +106 -106
- package/src/techniques/workflow.js +413 -413
- package/src/techniques.js +81 -81
- package/src/terminology.js +73 -73
- package/src/token-estimate.js +35 -35
- package/src/usage-patterns.js +99 -99
- package/src/verification-metadata.js +145 -145
- package/src/watch.js +247 -247
- package/src/windsurf/activity.js +302 -302
- package/src/windsurf/config-parser.js +267 -267
- package/src/windsurf/context.js +120 -10
- package/src/windsurf/deep-review.js +337 -337
- package/src/windsurf/domain-packs.js +370 -370
- package/src/windsurf/freshness.js +36 -36
- package/src/windsurf/governance.js +231 -231
- package/src/windsurf/interactive.js +388 -388
- package/src/windsurf/mcp-packs.js +792 -792
- package/src/windsurf/plans.js +247 -247
- package/src/windsurf/premium.js +468 -468
- package/src/windsurf/setup.js +471 -471
- package/src/windsurf/techniques.js +155 -33
- package/src/workspace.js +375 -375
|
@@ -1,142 +1,142 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Optimization technique fragments.
|
|
3
|
-
* Generated mechanically from the legacy techniques.js monolith during HR-09.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
const {
|
|
7
|
-
hasFrontendSignals,
|
|
8
|
-
hasProjectFile,
|
|
9
|
-
readProjectFiles,
|
|
10
|
-
getWorkflowContent,
|
|
11
|
-
} = require('./shared');
|
|
12
|
-
|
|
13
|
-
module.exports = {
|
|
14
|
-
compactionAwareness: {
|
|
15
|
-
id: 568,
|
|
16
|
-
name: 'CLAUDE.md mentions /compact or compaction',
|
|
17
|
-
check: (ctx) => {
|
|
18
|
-
const md = ctx.claudeMdContent() || '';
|
|
19
|
-
return /\/compact|compaction|context.*(limit|manage|budget)/i.test(md);
|
|
20
|
-
},
|
|
21
|
-
impact: 'medium',
|
|
22
|
-
rating: 4,
|
|
23
|
-
category: 'performance',
|
|
24
|
-
fix: 'Add compaction guidance to CLAUDE.md (e.g. "Run /compact when context is heavy").',
|
|
25
|
-
template: null
|
|
26
|
-
},
|
|
27
|
-
|
|
28
|
-
contextManagement: {
|
|
29
|
-
id: 45,
|
|
30
|
-
name: 'Context management awareness',
|
|
31
|
-
check: (ctx) => {
|
|
32
|
-
const md = ctx.claudeMdContent() || '';
|
|
33
|
-
return /context.*(manage|window|limit|budget|token)/i.test(md);
|
|
34
|
-
},
|
|
35
|
-
impact: 'medium',
|
|
36
|
-
rating: 4,
|
|
37
|
-
category: 'performance',
|
|
38
|
-
fix: 'Add context management tips to CLAUDE.md to help Claude stay within token limits.',
|
|
39
|
-
template: null
|
|
40
|
-
},
|
|
41
|
-
|
|
42
|
-
effortLevelConfigured: {
|
|
43
|
-
id: 2016,
|
|
44
|
-
name: 'Effort level or thinking configuration',
|
|
45
|
-
check: (ctx) => {
|
|
46
|
-
const md = ctx.claudeMdContent() || '';
|
|
47
|
-
const shared = ctx.jsonFile('.claude/settings.json') || {};
|
|
48
|
-
const local = ctx.jsonFile('.claude/settings.local.json') || {};
|
|
49
|
-
return /effort|thinking/i.test(md) || shared.effortLevel || local.effortLevel ||
|
|
50
|
-
shared.alwaysThinkingEnabled !== undefined || local.alwaysThinkingEnabled !== undefined;
|
|
51
|
-
},
|
|
52
|
-
impact: 'low', rating: 3, category: 'performance',
|
|
53
|
-
fix: 'Configure effortLevel or mention thinking strategy in CLAUDE.md for task-appropriate reasoning depth.',
|
|
54
|
-
template: null
|
|
55
|
-
},
|
|
56
|
-
|
|
57
|
-
lighthouseCI: {
|
|
58
|
-
id: 130171,
|
|
59
|
-
name: 'Lighthouse CI configured',
|
|
60
|
-
check: (ctx) => {
|
|
61
|
-
if (!hasFrontendSignals(ctx)) return null;
|
|
62
|
-
return hasProjectFile(ctx, /(^|\/)\.?lighthouserc\.(js|json|ya?ml)$/i) ||
|
|
63
|
-
/lighthouse/i.test(getWorkflowContent(ctx));
|
|
64
|
-
},
|
|
65
|
-
impact: 'medium',
|
|
66
|
-
category: 'performance-budget',
|
|
67
|
-
fix: 'Add Lighthouse CI (lighthouserc.js) to enforce performance budgets in your CI pipeline.',
|
|
68
|
-
confidence: 0.7,
|
|
69
|
-
},
|
|
70
|
-
|
|
71
|
-
bundleSizeLimit: {
|
|
72
|
-
id: 130172,
|
|
73
|
-
name: 'Bundle size check configured',
|
|
74
|
-
check: (ctx) => {
|
|
75
|
-
if (!hasFrontendSignals(ctx)) return null;
|
|
76
|
-
const pkg = ctx.fileContent('package.json') || '';
|
|
77
|
-
return /size-limit|bundlewatch|@next\/bundle-analyzer|webpack-bundle-analyzer/i.test(pkg);
|
|
78
|
-
},
|
|
79
|
-
impact: 'medium',
|
|
80
|
-
category: 'performance-budget',
|
|
81
|
-
fix: 'Add bundle size checks (size-limit, bundlewatch, @next/bundle-analyzer) to prevent bundle bloat.',
|
|
82
|
-
confidence: 0.7,
|
|
83
|
-
},
|
|
84
|
-
|
|
85
|
-
webVitals: {
|
|
86
|
-
id: 130173,
|
|
87
|
-
name: 'Core Web Vitals tracking configured',
|
|
88
|
-
check: (ctx) => {
|
|
89
|
-
if (!hasFrontendSignals(ctx)) return null;
|
|
90
|
-
const pkg = ctx.fileContent('package.json') || '';
|
|
91
|
-
const src = readProjectFiles(ctx, /\.(jsx?|tsx?)$/i, 20);
|
|
92
|
-
return /web-vitals|next\/web-vitals|@vercel\/speed-insights/i.test(pkg + src);
|
|
93
|
-
},
|
|
94
|
-
impact: 'medium',
|
|
95
|
-
category: 'performance-budget',
|
|
96
|
-
fix: 'Add Core Web Vitals tracking (web-vitals, next/web-vitals) for real user performance monitoring.',
|
|
97
|
-
confidence: 0.7,
|
|
98
|
-
},
|
|
99
|
-
|
|
100
|
-
performanceRegression: {
|
|
101
|
-
id: 130174,
|
|
102
|
-
name: 'Performance regression testing in CI',
|
|
103
|
-
check: (ctx) => {
|
|
104
|
-
if (!hasFrontendSignals(ctx)) return null;
|
|
105
|
-
const ci = getWorkflowContent(ctx);
|
|
106
|
-
const pkg = ctx.fileContent('package.json') || '';
|
|
107
|
-
return /benchmark|bench|perf.*test|lighthouse.*assert/i.test(ci + pkg);
|
|
108
|
-
},
|
|
109
|
-
impact: 'low',
|
|
110
|
-
category: 'performance-budget',
|
|
111
|
-
fix: 'Add performance regression testing in CI (benchmark, lighthouse assert) to catch regressions early.',
|
|
112
|
-
confidence: 0.7,
|
|
113
|
-
},
|
|
114
|
-
|
|
115
|
-
imageOptimization: {
|
|
116
|
-
id: 130175,
|
|
117
|
-
name: 'Image optimization configured',
|
|
118
|
-
check: (ctx) => {
|
|
119
|
-
if (!hasFrontendSignals(ctx)) return null;
|
|
120
|
-
const pkg = ctx.fileContent('package.json') || '';
|
|
121
|
-
return /sharp|imagemin|next\/image|responsive-loader|@squoosh/i.test(pkg);
|
|
122
|
-
},
|
|
123
|
-
impact: 'low',
|
|
124
|
-
category: 'performance-budget',
|
|
125
|
-
fix: 'Add image optimization (sharp, imagemin, next/image) to reduce page weight and improve loading.',
|
|
126
|
-
confidence: 0.7,
|
|
127
|
-
},
|
|
128
|
-
|
|
129
|
-
lazyLoading: {
|
|
130
|
-
id: 130176,
|
|
131
|
-
name: 'Code splitting and lazy loading',
|
|
132
|
-
check: (ctx) => {
|
|
133
|
-
if (!hasFrontendSignals(ctx)) return null;
|
|
134
|
-
const src = readProjectFiles(ctx, /\.(jsx?|tsx?)$/i, 30);
|
|
135
|
-
return /React\.lazy|import\s*\(|loadable|dynamic\s*\(\s*\(\)\s*=>/i.test(src);
|
|
136
|
-
},
|
|
137
|
-
impact: 'low',
|
|
138
|
-
category: 'performance-budget',
|
|
139
|
-
fix: 'Use code splitting and lazy loading (React.lazy, dynamic import, loadable) to reduce initial bundle size.',
|
|
140
|
-
confidence: 0.7,
|
|
141
|
-
},
|
|
142
|
-
};
|
|
1
|
+
/**
|
|
2
|
+
* Optimization technique fragments.
|
|
3
|
+
* Generated mechanically from the legacy techniques.js monolith during HR-09.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
const {
|
|
7
|
+
hasFrontendSignals,
|
|
8
|
+
hasProjectFile,
|
|
9
|
+
readProjectFiles,
|
|
10
|
+
getWorkflowContent,
|
|
11
|
+
} = require('./shared');
|
|
12
|
+
|
|
13
|
+
module.exports = {
|
|
14
|
+
compactionAwareness: {
|
|
15
|
+
id: 568,
|
|
16
|
+
name: 'CLAUDE.md mentions /compact or compaction',
|
|
17
|
+
check: (ctx) => {
|
|
18
|
+
const md = ctx.claudeMdContent() || '';
|
|
19
|
+
return /\/compact|compaction|context.*(limit|manage|budget)/i.test(md);
|
|
20
|
+
},
|
|
21
|
+
impact: 'medium',
|
|
22
|
+
rating: 4,
|
|
23
|
+
category: 'performance',
|
|
24
|
+
fix: 'Add compaction guidance to CLAUDE.md (e.g. "Run /compact when context is heavy").',
|
|
25
|
+
template: null
|
|
26
|
+
},
|
|
27
|
+
|
|
28
|
+
contextManagement: {
|
|
29
|
+
id: 45,
|
|
30
|
+
name: 'Context management awareness',
|
|
31
|
+
check: (ctx) => {
|
|
32
|
+
const md = ctx.claudeMdContent() || '';
|
|
33
|
+
return /context.*(manage|window|limit|budget|token)/i.test(md);
|
|
34
|
+
},
|
|
35
|
+
impact: 'medium',
|
|
36
|
+
rating: 4,
|
|
37
|
+
category: 'performance',
|
|
38
|
+
fix: 'Add context management tips to CLAUDE.md to help Claude stay within token limits.',
|
|
39
|
+
template: null
|
|
40
|
+
},
|
|
41
|
+
|
|
42
|
+
effortLevelConfigured: {
|
|
43
|
+
id: 2016,
|
|
44
|
+
name: 'Effort level or thinking configuration',
|
|
45
|
+
check: (ctx) => {
|
|
46
|
+
const md = ctx.claudeMdContent() || '';
|
|
47
|
+
const shared = ctx.jsonFile('.claude/settings.json') || {};
|
|
48
|
+
const local = ctx.jsonFile('.claude/settings.local.json') || {};
|
|
49
|
+
return /effort|thinking/i.test(md) || shared.effortLevel || local.effortLevel ||
|
|
50
|
+
shared.alwaysThinkingEnabled !== undefined || local.alwaysThinkingEnabled !== undefined;
|
|
51
|
+
},
|
|
52
|
+
impact: 'low', rating: 3, category: 'performance',
|
|
53
|
+
fix: 'Configure effortLevel or mention thinking strategy in CLAUDE.md for task-appropriate reasoning depth.',
|
|
54
|
+
template: null
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
lighthouseCI: {
|
|
58
|
+
id: 130171,
|
|
59
|
+
name: 'Lighthouse CI configured',
|
|
60
|
+
check: (ctx) => {
|
|
61
|
+
if (!hasFrontendSignals(ctx)) return null;
|
|
62
|
+
return hasProjectFile(ctx, /(^|\/)\.?lighthouserc\.(js|json|ya?ml)$/i) ||
|
|
63
|
+
/lighthouse/i.test(getWorkflowContent(ctx));
|
|
64
|
+
},
|
|
65
|
+
impact: 'medium',
|
|
66
|
+
category: 'performance-budget',
|
|
67
|
+
fix: 'Add Lighthouse CI (lighthouserc.js) to enforce performance budgets in your CI pipeline.',
|
|
68
|
+
confidence: 0.7,
|
|
69
|
+
},
|
|
70
|
+
|
|
71
|
+
bundleSizeLimit: {
|
|
72
|
+
id: 130172,
|
|
73
|
+
name: 'Bundle size check configured',
|
|
74
|
+
check: (ctx) => {
|
|
75
|
+
if (!hasFrontendSignals(ctx)) return null;
|
|
76
|
+
const pkg = ctx.fileContent('package.json') || '';
|
|
77
|
+
return /size-limit|bundlewatch|@next\/bundle-analyzer|webpack-bundle-analyzer/i.test(pkg);
|
|
78
|
+
},
|
|
79
|
+
impact: 'medium',
|
|
80
|
+
category: 'performance-budget',
|
|
81
|
+
fix: 'Add bundle size checks (size-limit, bundlewatch, @next/bundle-analyzer) to prevent bundle bloat.',
|
|
82
|
+
confidence: 0.7,
|
|
83
|
+
},
|
|
84
|
+
|
|
85
|
+
webVitals: {
|
|
86
|
+
id: 130173,
|
|
87
|
+
name: 'Core Web Vitals tracking configured',
|
|
88
|
+
check: (ctx) => {
|
|
89
|
+
if (!hasFrontendSignals(ctx)) return null;
|
|
90
|
+
const pkg = ctx.fileContent('package.json') || '';
|
|
91
|
+
const src = readProjectFiles(ctx, /\.(jsx?|tsx?)$/i, 20);
|
|
92
|
+
return /web-vitals|next\/web-vitals|@vercel\/speed-insights/i.test(pkg + src);
|
|
93
|
+
},
|
|
94
|
+
impact: 'medium',
|
|
95
|
+
category: 'performance-budget',
|
|
96
|
+
fix: 'Add Core Web Vitals tracking (web-vitals, next/web-vitals) for real user performance monitoring.',
|
|
97
|
+
confidence: 0.7,
|
|
98
|
+
},
|
|
99
|
+
|
|
100
|
+
performanceRegression: {
|
|
101
|
+
id: 130174,
|
|
102
|
+
name: 'Performance regression testing in CI',
|
|
103
|
+
check: (ctx) => {
|
|
104
|
+
if (!hasFrontendSignals(ctx)) return null;
|
|
105
|
+
const ci = getWorkflowContent(ctx);
|
|
106
|
+
const pkg = ctx.fileContent('package.json') || '';
|
|
107
|
+
return /benchmark|bench|perf.*test|lighthouse.*assert/i.test(ci + pkg);
|
|
108
|
+
},
|
|
109
|
+
impact: 'low',
|
|
110
|
+
category: 'performance-budget',
|
|
111
|
+
fix: 'Add performance regression testing in CI (benchmark, lighthouse assert) to catch regressions early.',
|
|
112
|
+
confidence: 0.7,
|
|
113
|
+
},
|
|
114
|
+
|
|
115
|
+
imageOptimization: {
|
|
116
|
+
id: 130175,
|
|
117
|
+
name: 'Image optimization configured',
|
|
118
|
+
check: (ctx) => {
|
|
119
|
+
if (!hasFrontendSignals(ctx)) return null;
|
|
120
|
+
const pkg = ctx.fileContent('package.json') || '';
|
|
121
|
+
return /sharp|imagemin|next\/image|responsive-loader|@squoosh/i.test(pkg);
|
|
122
|
+
},
|
|
123
|
+
impact: 'low',
|
|
124
|
+
category: 'performance-budget',
|
|
125
|
+
fix: 'Add image optimization (sharp, imagemin, next/image) to reduce page weight and improve loading.',
|
|
126
|
+
confidence: 0.7,
|
|
127
|
+
},
|
|
128
|
+
|
|
129
|
+
lazyLoading: {
|
|
130
|
+
id: 130176,
|
|
131
|
+
name: 'Code splitting and lazy loading',
|
|
132
|
+
check: (ctx) => {
|
|
133
|
+
if (!hasFrontendSignals(ctx)) return null;
|
|
134
|
+
const src = readProjectFiles(ctx, /\.(jsx?|tsx?)$/i, 30);
|
|
135
|
+
return /React\.lazy|import\s*\(|loadable|dynamic\s*\(\s*\(\)\s*=>/i.test(src);
|
|
136
|
+
},
|
|
137
|
+
impact: 'low',
|
|
138
|
+
category: 'performance-budget',
|
|
139
|
+
fix: 'Use code splitting and lazy loading (React.lazy, dynamic import, loadable) to reduce initial bundle size.',
|
|
140
|
+
confidence: 0.7,
|
|
141
|
+
},
|
|
142
|
+
};
|