From 1000e11292006bad0db5c3826b52b475d3f9dc9d Mon Sep 17 00:00:00 2001 From: Alexander Karan <47707063+AlexanderKaran@users.noreply.github.com> Date: Fri, 7 Aug 2026 10:40:13 +0800 Subject: [PATCH] Direct Framework Deps --- packages/docs/src/content.config.ts | 7 +++++ .../src/content/devtime/starter-astro.json | 5 ++++ .../src/content/devtime/starter-mastro.json | 5 ++++ .../src/content/devtime/starter-next-js.json | 5 ++++ .../src/content/devtime/starter-nuxt.json | 5 ++++ .../content/devtime/starter-react-router.json | 5 ++++ .../content/devtime/starter-solid-start.json | 5 ++++ .../content/devtime/starter-sveltekit.json | 5 ++++ .../devtime/starter-tanstack-start-react.json | 5 ++++ .../versions/starter-astro/5.16.15.json | 5 ++++ .../versions/starter-astro/5.17.3.json | 5 ++++ .../versions/starter-astro/5.18.0.json | 5 ++++ .../devtime/versions/starter-astro/6.0.8.json | 5 ++++ .../versions/starter-astro/6.1.10.json | 5 ++++ .../devtime/versions/starter-astro/6.2.2.json | 5 ++++ .../devtime/versions/starter-astro/6.3.8.json | 5 ++++ .../devtime/versions/starter-astro/6.4.8.json | 5 ++++ .../devtime/versions/starter-astro/7.0.9.json | 5 ++++ .../versions/starter-next-js/16.1.1.json | 5 ++++ .../devtime/versions/starter-nuxt/4.2.2.json | 5 ++++ .../versions/starter-react-router/7.10.1.json | 5 ++++ .../versions/starter-solid-start/1.2.1.json | 5 ++++ .../versions/starter-sveltekit/2.49.4.json | 5 ++++ .../versions/starter-sveltekit/2.50.2.json | 5 ++++ .../versions/starter-sveltekit/2.51.0.json | 5 ++++ .../versions/starter-sveltekit/2.52.2.json | 5 ++++ .../starter-tanstack-start-react/1.145.3.json | 5 ++++ packages/starter-astro/ci-stats.json | 5 ++++ packages/starter-astro/stats/5.16.15.json | 5 ++++ packages/starter-astro/stats/5.17.3.json | 5 ++++ packages/starter-astro/stats/5.18.0.json | 5 ++++ packages/starter-astro/stats/6.0.8.json | 5 ++++ packages/starter-astro/stats/6.1.10.json | 5 ++++ packages/starter-astro/stats/6.2.2.json | 5 ++++ packages/starter-astro/stats/6.3.8.json | 5 ++++ packages/starter-astro/stats/6.4.8.json | 5 ++++ packages/starter-astro/stats/7.0.9.json | 5 ++++ packages/starter-mastro/ci-stats.json | 5 ++++ packages/starter-next-js/ci-stats.json | 5 ++++ packages/starter-next-js/stats/16.1.1.json | 5 ++++ packages/starter-nuxt/ci-stats.json | 5 ++++ packages/starter-nuxt/stats/4.2.2.json | 5 ++++ packages/starter-react-router/ci-stats.json | 5 ++++ .../starter-react-router/stats/7.10.1.json | 5 ++++ packages/starter-solid-start/ci-stats.json | 5 ++++ packages/starter-solid-start/stats/1.2.1.json | 5 ++++ packages/starter-sveltekit/ci-stats.json | 5 ++++ packages/starter-sveltekit/stats/2.49.4.json | 5 ++++ packages/starter-sveltekit/stats/2.50.2.json | 5 ++++ packages/starter-sveltekit/stats/2.51.0.json | 5 ++++ packages/starter-sveltekit/stats/2.52.2.json | 5 ++++ .../ci-stats.json | 5 ++++ .../stats/1.145.3.json | 5 ++++ packages/stats-generator/src/collect-stats.ts | 16 +++++++++- packages/stats-generator/src/save-ci-stats.ts | 7 +++++ packages/stats-generator/src/types.ts | 7 +++++ packages/stats-generator/src/utils.ts | 30 +++++++++++++++++++ 57 files changed, 326 insertions(+), 1 deletion(-) diff --git a/packages/docs/src/content.config.ts b/packages/docs/src/content.config.ts index ec060c52..c28881e8 100644 --- a/packages/docs/src/content.config.ts +++ b/packages/docs/src/content.config.ts @@ -10,6 +10,12 @@ const timeSchema = z.object({ maxMs: z.number(), }) +const dependencyStatsSchema = z.object({ + prodDependencies: z.number().int().nonnegative(), + devDependencies: z.number().int().nonnegative(), + allDependencies: z.number().int().nonnegative(), +}) + const devtimeSchema = z.object({ name: z.string(), type: z.string(), @@ -19,6 +25,7 @@ const devtimeSchema = z.object({ prodDependencies: z.number(), devDependencies: z.number(), allDependencies: z.number(), + frameworkDependencies: dependencyStatsSchema.optional(), installTime: timeSchema, coldBuildTime: timeSchema, warmBuildTime: timeSchema, diff --git a/packages/docs/src/content/devtime/starter-astro.json b/packages/docs/src/content/devtime/starter-astro.json index f1902d44..a9755cbc 100644 --- a/packages/docs/src/content/devtime/starter-astro.json +++ b/packages/docs/src/content/devtime/starter-astro.json @@ -105,5 +105,10 @@ "baselineYear": null, "baselineReason": null, "baselineFeatureCount": 0 + }, + "frameworkDependencies": { + "prodDependencies": 53, + "devDependencies": 27, + "allDependencies": 80 } } diff --git a/packages/docs/src/content/devtime/starter-mastro.json b/packages/docs/src/content/devtime/starter-mastro.json index 02a1af1c..88f871e3 100644 --- a/packages/docs/src/content/devtime/starter-mastro.json +++ b/packages/docs/src/content/devtime/starter-mastro.json @@ -38,5 +38,10 @@ "baselineYear": null, "baselineReason": null, "baselineFeatureCount": 0 + }, + "frameworkDependencies": { + "prodDependencies": 1, + "devDependencies": 0, + "allDependencies": 1 } } diff --git a/packages/docs/src/content/devtime/starter-next-js.json b/packages/docs/src/content/devtime/starter-next-js.json index 8cba2c4b..c224470a 100644 --- a/packages/docs/src/content/devtime/starter-next-js.json +++ b/packages/docs/src/content/devtime/starter-next-js.json @@ -418,5 +418,10 @@ "baselineYear": 2022, "baselineReason": null, "baselineFeatureCount": 46 + }, + "frameworkDependencies": { + "prodDependencies": 6, + "devDependencies": 223, + "allDependencies": 229 } } diff --git a/packages/docs/src/content/devtime/starter-nuxt.json b/packages/docs/src/content/devtime/starter-nuxt.json index 88889199..b9999fed 100644 --- a/packages/docs/src/content/devtime/starter-nuxt.json +++ b/packages/docs/src/content/devtime/starter-nuxt.json @@ -360,5 +360,10 @@ "baselineYear": null, "baselineReason": "temporal", "baselineFeatureCount": 40 + }, + "frameworkDependencies": { + "prodDependencies": 57, + "devDependencies": 11, + "allDependencies": 68 } } diff --git a/packages/docs/src/content/devtime/starter-react-router.json b/packages/docs/src/content/devtime/starter-react-router.json index a95d275e..85c83bc5 100644 --- a/packages/docs/src/content/devtime/starter-react-router.json +++ b/packages/docs/src/content/devtime/starter-react-router.json @@ -90,5 +90,10 @@ "baselineYear": 2022, "baselineReason": null, "baselineFeatureCount": 40 + }, + "frameworkDependencies": { + "prodDependencies": 28, + "devDependencies": 22, + "allDependencies": 50 } } diff --git a/packages/docs/src/content/devtime/starter-solid-start.json b/packages/docs/src/content/devtime/starter-solid-start.json index f2d9ea52..19c95bab 100644 --- a/packages/docs/src/content/devtime/starter-solid-start.json +++ b/packages/docs/src/content/devtime/starter-solid-start.json @@ -440,5 +440,10 @@ "baselineYear": 2020, "baselineReason": null, "baselineFeatureCount": 29 + }, + "frameworkDependencies": { + "prodDependencies": 15, + "devDependencies": 3, + "allDependencies": 18 } } diff --git a/packages/docs/src/content/devtime/starter-sveltekit.json b/packages/docs/src/content/devtime/starter-sveltekit.json index 75cf2c09..f5a15338 100644 --- a/packages/docs/src/content/devtime/starter-sveltekit.json +++ b/packages/docs/src/content/devtime/starter-sveltekit.json @@ -55,5 +55,10 @@ "baselineYear": 2020, "baselineReason": null, "baselineFeatureCount": 40 + }, + "frameworkDependencies": { + "prodDependencies": 12, + "devDependencies": 13, + "allDependencies": 25 } } diff --git a/packages/docs/src/content/devtime/starter-tanstack-start-react.json b/packages/docs/src/content/devtime/starter-tanstack-start-react.json index 09bf7ab5..17fa659d 100644 --- a/packages/docs/src/content/devtime/starter-tanstack-start-react.json +++ b/packages/docs/src/content/devtime/starter-tanstack-start-react.json @@ -115,5 +115,10 @@ "baselineYear": 2022, "baselineReason": null, "baselineFeatureCount": 45 + }, + "frameworkDependencies": { + "prodDependencies": 8, + "devDependencies": 0, + "allDependencies": 8 } } diff --git a/packages/docs/src/content/devtime/versions/starter-astro/5.16.15.json b/packages/docs/src/content/devtime/versions/starter-astro/5.16.15.json index 218e7458..f8c8c559 100644 --- a/packages/docs/src/content/devtime/versions/starter-astro/5.16.15.json +++ b/packages/docs/src/content/devtime/versions/starter-astro/5.16.15.json @@ -129,5 +129,10 @@ "baselineYear": null, "baselineReason": null, "baselineFeatureCount": 0 + }, + "frameworkDependencies": { + "prodDependencies": 63, + "devDependencies": 34, + "allDependencies": 97 } } diff --git a/packages/docs/src/content/devtime/versions/starter-astro/5.17.3.json b/packages/docs/src/content/devtime/versions/starter-astro/5.17.3.json index 5ba3672e..dbabccd7 100644 --- a/packages/docs/src/content/devtime/versions/starter-astro/5.17.3.json +++ b/packages/docs/src/content/devtime/versions/starter-astro/5.17.3.json @@ -264,5 +264,10 @@ "baselineYear": null, "baselineReason": null, "baselineFeatureCount": 0 + }, + "frameworkDependencies": { + "prodDependencies": 63, + "devDependencies": 34, + "allDependencies": 97 } } diff --git a/packages/docs/src/content/devtime/versions/starter-astro/5.18.0.json b/packages/docs/src/content/devtime/versions/starter-astro/5.18.0.json index 660b6e54..1e10890b 100644 --- a/packages/docs/src/content/devtime/versions/starter-astro/5.18.0.json +++ b/packages/docs/src/content/devtime/versions/starter-astro/5.18.0.json @@ -264,5 +264,10 @@ "baselineYear": null, "baselineReason": null, "baselineFeatureCount": 0 + }, + "frameworkDependencies": { + "prodDependencies": 63, + "devDependencies": 34, + "allDependencies": 97 } } diff --git a/packages/docs/src/content/devtime/versions/starter-astro/6.0.8.json b/packages/docs/src/content/devtime/versions/starter-astro/6.0.8.json index 0ece5e9b..879abe84 100644 --- a/packages/docs/src/content/devtime/versions/starter-astro/6.0.8.json +++ b/packages/docs/src/content/devtime/versions/starter-astro/6.0.8.json @@ -109,5 +109,10 @@ "baselineYear": null, "baselineReason": null, "baselineFeatureCount": 0 + }, + "frameworkDependencies": { + "prodDependencies": 55, + "devDependencies": 31, + "allDependencies": 86 } } diff --git a/packages/docs/src/content/devtime/versions/starter-astro/6.1.10.json b/packages/docs/src/content/devtime/versions/starter-astro/6.1.10.json index 01ae3901..3d9339ab 100644 --- a/packages/docs/src/content/devtime/versions/starter-astro/6.1.10.json +++ b/packages/docs/src/content/devtime/versions/starter-astro/6.1.10.json @@ -109,5 +109,10 @@ "baselineYear": null, "baselineReason": null, "baselineFeatureCount": 0 + }, + "frameworkDependencies": { + "prodDependencies": 54, + "devDependencies": 31, + "allDependencies": 85 } } diff --git a/packages/docs/src/content/devtime/versions/starter-astro/6.2.2.json b/packages/docs/src/content/devtime/versions/starter-astro/6.2.2.json index ff7e99d6..a2c40f5f 100644 --- a/packages/docs/src/content/devtime/versions/starter-astro/6.2.2.json +++ b/packages/docs/src/content/devtime/versions/starter-astro/6.2.2.json @@ -109,5 +109,10 @@ "baselineYear": null, "baselineReason": null, "baselineFeatureCount": 0 + }, + "frameworkDependencies": { + "prodDependencies": 55, + "devDependencies": 31, + "allDependencies": 86 } } diff --git a/packages/docs/src/content/devtime/versions/starter-astro/6.3.8.json b/packages/docs/src/content/devtime/versions/starter-astro/6.3.8.json index a9d3f9e9..f27ccea4 100644 --- a/packages/docs/src/content/devtime/versions/starter-astro/6.3.8.json +++ b/packages/docs/src/content/devtime/versions/starter-astro/6.3.8.json @@ -109,5 +109,10 @@ "baselineYear": null, "baselineReason": null, "baselineFeatureCount": 0 + }, + "frameworkDependencies": { + "prodDependencies": 55, + "devDependencies": 32, + "allDependencies": 87 } } diff --git a/packages/docs/src/content/devtime/versions/starter-astro/6.4.8.json b/packages/docs/src/content/devtime/versions/starter-astro/6.4.8.json index 1d5b67b2..da719ad3 100644 --- a/packages/docs/src/content/devtime/versions/starter-astro/6.4.8.json +++ b/packages/docs/src/content/devtime/versions/starter-astro/6.4.8.json @@ -109,5 +109,10 @@ "baselineYear": null, "baselineReason": null, "baselineFeatureCount": 0 + }, + "frameworkDependencies": { + "prodDependencies": 55, + "devDependencies": 32, + "allDependencies": 87 } } diff --git a/packages/docs/src/content/devtime/versions/starter-astro/7.0.9.json b/packages/docs/src/content/devtime/versions/starter-astro/7.0.9.json index fe26d82f..9a280fab 100644 --- a/packages/docs/src/content/devtime/versions/starter-astro/7.0.9.json +++ b/packages/docs/src/content/devtime/versions/starter-astro/7.0.9.json @@ -104,5 +104,10 @@ "baselineYear": null, "baselineReason": null, "baselineFeatureCount": 0 + }, + "frameworkDependencies": { + "prodDependencies": 53, + "devDependencies": 27, + "allDependencies": 80 } } diff --git a/packages/docs/src/content/devtime/versions/starter-next-js/16.1.1.json b/packages/docs/src/content/devtime/versions/starter-next-js/16.1.1.json index 44065db9..ac6500c2 100644 --- a/packages/docs/src/content/devtime/versions/starter-next-js/16.1.1.json +++ b/packages/docs/src/content/devtime/versions/starter-next-js/16.1.1.json @@ -417,5 +417,10 @@ "baselineYear": 2022, "baselineReason": null, "baselineFeatureCount": 46 + }, + "frameworkDependencies": { + "prodDependencies": 6, + "devDependencies": 223, + "allDependencies": 229 } } diff --git a/packages/docs/src/content/devtime/versions/starter-nuxt/4.2.2.json b/packages/docs/src/content/devtime/versions/starter-nuxt/4.2.2.json index e7ba87ad..b6877c71 100644 --- a/packages/docs/src/content/devtime/versions/starter-nuxt/4.2.2.json +++ b/packages/docs/src/content/devtime/versions/starter-nuxt/4.2.2.json @@ -359,5 +359,10 @@ "baselineYear": null, "baselineReason": "temporal", "baselineFeatureCount": 40 + }, + "frameworkDependencies": { + "prodDependencies": 57, + "devDependencies": 11, + "allDependencies": 68 } } diff --git a/packages/docs/src/content/devtime/versions/starter-react-router/7.10.1.json b/packages/docs/src/content/devtime/versions/starter-react-router/7.10.1.json index 9670c159..d0e5fb81 100644 --- a/packages/docs/src/content/devtime/versions/starter-react-router/7.10.1.json +++ b/packages/docs/src/content/devtime/versions/starter-react-router/7.10.1.json @@ -89,5 +89,10 @@ "baselineYear": 2022, "baselineReason": null, "baselineFeatureCount": 40 + }, + "frameworkDependencies": { + "prodDependencies": 28, + "devDependencies": 22, + "allDependencies": 50 } } diff --git a/packages/docs/src/content/devtime/versions/starter-solid-start/1.2.1.json b/packages/docs/src/content/devtime/versions/starter-solid-start/1.2.1.json index 15c6cfee..544097a1 100644 --- a/packages/docs/src/content/devtime/versions/starter-solid-start/1.2.1.json +++ b/packages/docs/src/content/devtime/versions/starter-solid-start/1.2.1.json @@ -439,5 +439,10 @@ "baselineYear": 2020, "baselineReason": null, "baselineFeatureCount": 29 + }, + "frameworkDependencies": { + "prodDependencies": 15, + "devDependencies": 3, + "allDependencies": 18 } } diff --git a/packages/docs/src/content/devtime/versions/starter-sveltekit/2.49.4.json b/packages/docs/src/content/devtime/versions/starter-sveltekit/2.49.4.json index 9a47aa14..d61d6fd2 100644 --- a/packages/docs/src/content/devtime/versions/starter-sveltekit/2.49.4.json +++ b/packages/docs/src/content/devtime/versions/starter-sveltekit/2.49.4.json @@ -54,5 +54,10 @@ "baselineYear": 2020, "baselineReason": null, "baselineFeatureCount": 40 + }, + "frameworkDependencies": { + "prodDependencies": 13, + "devDependencies": 13, + "allDependencies": 26 } } diff --git a/packages/docs/src/content/devtime/versions/starter-sveltekit/2.50.2.json b/packages/docs/src/content/devtime/versions/starter-sveltekit/2.50.2.json index fbe8280a..0286aeed 100644 --- a/packages/docs/src/content/devtime/versions/starter-sveltekit/2.50.2.json +++ b/packages/docs/src/content/devtime/versions/starter-sveltekit/2.50.2.json @@ -54,5 +54,10 @@ "baselineYear": 2020, "baselineReason": null, "baselineFeatureCount": 40 + }, + "frameworkDependencies": { + "prodDependencies": 13, + "devDependencies": 13, + "allDependencies": 26 } } diff --git a/packages/docs/src/content/devtime/versions/starter-sveltekit/2.51.0.json b/packages/docs/src/content/devtime/versions/starter-sveltekit/2.51.0.json index 3f0419f4..c6ce15ea 100644 --- a/packages/docs/src/content/devtime/versions/starter-sveltekit/2.51.0.json +++ b/packages/docs/src/content/devtime/versions/starter-sveltekit/2.51.0.json @@ -54,5 +54,10 @@ "baselineYear": 2020, "baselineReason": null, "baselineFeatureCount": 40 + }, + "frameworkDependencies": { + "prodDependencies": 13, + "devDependencies": 13, + "allDependencies": 26 } } diff --git a/packages/docs/src/content/devtime/versions/starter-sveltekit/2.52.2.json b/packages/docs/src/content/devtime/versions/starter-sveltekit/2.52.2.json index e4aba04b..9a356d73 100644 --- a/packages/docs/src/content/devtime/versions/starter-sveltekit/2.52.2.json +++ b/packages/docs/src/content/devtime/versions/starter-sveltekit/2.52.2.json @@ -54,5 +54,10 @@ "baselineYear": 2020, "baselineReason": null, "baselineFeatureCount": 40 + }, + "frameworkDependencies": { + "prodDependencies": 12, + "devDependencies": 13, + "allDependencies": 25 } } diff --git a/packages/docs/src/content/devtime/versions/starter-tanstack-start-react/1.145.3.json b/packages/docs/src/content/devtime/versions/starter-tanstack-start-react/1.145.3.json index d2965ab5..0907c1e6 100644 --- a/packages/docs/src/content/devtime/versions/starter-tanstack-start-react/1.145.3.json +++ b/packages/docs/src/content/devtime/versions/starter-tanstack-start-react/1.145.3.json @@ -114,5 +114,10 @@ "baselineYear": 2022, "baselineReason": null, "baselineFeatureCount": 45 + }, + "frameworkDependencies": { + "prodDependencies": 8, + "devDependencies": 0, + "allDependencies": 8 } } diff --git a/packages/starter-astro/ci-stats.json b/packages/starter-astro/ci-stats.json index 6a928c7f..2e9fc9a4 100644 --- a/packages/starter-astro/ci-stats.json +++ b/packages/starter-astro/ci-stats.json @@ -108,5 +108,10 @@ "@astrojs/check": "^0.9.9", "typescript": "^6.0.3" } + }, + "frameworkDependencies": { + "prodDependencies": 53, + "devDependencies": 27, + "allDependencies": 80 } } diff --git a/packages/starter-astro/stats/5.16.15.json b/packages/starter-astro/stats/5.16.15.json index b7646d2f..08e1ee70 100644 --- a/packages/starter-astro/stats/5.16.15.json +++ b/packages/starter-astro/stats/5.16.15.json @@ -133,5 +133,10 @@ "@astrojs/check": "^0.9.6", "typescript": "^5.9.3" } + }, + "frameworkDependencies": { + "prodDependencies": 63, + "devDependencies": 34, + "allDependencies": 97 } } diff --git a/packages/starter-astro/stats/5.17.3.json b/packages/starter-astro/stats/5.17.3.json index c2004d1f..3ce2bf08 100644 --- a/packages/starter-astro/stats/5.17.3.json +++ b/packages/starter-astro/stats/5.17.3.json @@ -268,5 +268,10 @@ "@astrojs/check": "^0.9.6", "typescript": "^5.9.3" } + }, + "frameworkDependencies": { + "prodDependencies": 63, + "devDependencies": 34, + "allDependencies": 97 } } diff --git a/packages/starter-astro/stats/5.18.0.json b/packages/starter-astro/stats/5.18.0.json index a8f5ff70..115122f1 100644 --- a/packages/starter-astro/stats/5.18.0.json +++ b/packages/starter-astro/stats/5.18.0.json @@ -268,5 +268,10 @@ "@astrojs/check": "^0.9.6", "typescript": "^5.9.3" } + }, + "frameworkDependencies": { + "prodDependencies": 63, + "devDependencies": 34, + "allDependencies": 97 } } diff --git a/packages/starter-astro/stats/6.0.8.json b/packages/starter-astro/stats/6.0.8.json index 4876af3b..fd046cff 100644 --- a/packages/starter-astro/stats/6.0.8.json +++ b/packages/starter-astro/stats/6.0.8.json @@ -113,5 +113,10 @@ "@astrojs/check": "^0.9.8", "typescript": "^5.9.3" } + }, + "frameworkDependencies": { + "prodDependencies": 55, + "devDependencies": 31, + "allDependencies": 86 } } diff --git a/packages/starter-astro/stats/6.1.10.json b/packages/starter-astro/stats/6.1.10.json index a29324b3..883430a9 100644 --- a/packages/starter-astro/stats/6.1.10.json +++ b/packages/starter-astro/stats/6.1.10.json @@ -113,5 +113,10 @@ "@astrojs/check": "^0.9.9", "typescript": "^6.0.3" } + }, + "frameworkDependencies": { + "prodDependencies": 54, + "devDependencies": 31, + "allDependencies": 85 } } diff --git a/packages/starter-astro/stats/6.2.2.json b/packages/starter-astro/stats/6.2.2.json index 27066fe8..368bf459 100644 --- a/packages/starter-astro/stats/6.2.2.json +++ b/packages/starter-astro/stats/6.2.2.json @@ -113,5 +113,10 @@ "@astrojs/check": "^0.9.9", "typescript": "^6.0.3" } + }, + "frameworkDependencies": { + "prodDependencies": 55, + "devDependencies": 31, + "allDependencies": 86 } } diff --git a/packages/starter-astro/stats/6.3.8.json b/packages/starter-astro/stats/6.3.8.json index 45c5dbc1..370a91eb 100644 --- a/packages/starter-astro/stats/6.3.8.json +++ b/packages/starter-astro/stats/6.3.8.json @@ -113,5 +113,10 @@ "@astrojs/check": "^0.9.9", "typescript": "^6.0.3" } + }, + "frameworkDependencies": { + "prodDependencies": 55, + "devDependencies": 32, + "allDependencies": 87 } } diff --git a/packages/starter-astro/stats/6.4.8.json b/packages/starter-astro/stats/6.4.8.json index a4375448..54d392f0 100644 --- a/packages/starter-astro/stats/6.4.8.json +++ b/packages/starter-astro/stats/6.4.8.json @@ -113,5 +113,10 @@ "@astrojs/check": "^0.9.9", "typescript": "^6.0.3" } + }, + "frameworkDependencies": { + "prodDependencies": 55, + "devDependencies": 32, + "allDependencies": 87 } } diff --git a/packages/starter-astro/stats/7.0.9.json b/packages/starter-astro/stats/7.0.9.json index 6a928c7f..2e9fc9a4 100644 --- a/packages/starter-astro/stats/7.0.9.json +++ b/packages/starter-astro/stats/7.0.9.json @@ -108,5 +108,10 @@ "@astrojs/check": "^0.9.9", "typescript": "^6.0.3" } + }, + "frameworkDependencies": { + "prodDependencies": 53, + "devDependencies": 27, + "allDependencies": 80 } } diff --git a/packages/starter-mastro/ci-stats.json b/packages/starter-mastro/ci-stats.json index f66293f0..42302a12 100644 --- a/packages/starter-mastro/ci-stats.json +++ b/packages/starter-mastro/ci-stats.json @@ -43,5 +43,10 @@ "@types/node": "^24", "typescript": "^5" } + }, + "frameworkDependencies": { + "prodDependencies": 1, + "devDependencies": 0, + "allDependencies": 1 } } diff --git a/packages/starter-next-js/ci-stats.json b/packages/starter-next-js/ci-stats.json index ca24f114..bf909846 100644 --- a/packages/starter-next-js/ci-stats.json +++ b/packages/starter-next-js/ci-stats.json @@ -427,5 +427,10 @@ "eslint-config-next": "16.1.1", "tailwindcss": "4" } + }, + "frameworkDependencies": { + "prodDependencies": 6, + "devDependencies": 223, + "allDependencies": 229 } } diff --git a/packages/starter-next-js/stats/16.1.1.json b/packages/starter-next-js/stats/16.1.1.json index ca24f114..bf909846 100644 --- a/packages/starter-next-js/stats/16.1.1.json +++ b/packages/starter-next-js/stats/16.1.1.json @@ -427,5 +427,10 @@ "eslint-config-next": "16.1.1", "tailwindcss": "4" } + }, + "frameworkDependencies": { + "prodDependencies": 6, + "devDependencies": 223, + "allDependencies": 229 } } diff --git a/packages/starter-nuxt/ci-stats.json b/packages/starter-nuxt/ci-stats.json index c394138d..c2e21b1d 100644 --- a/packages/starter-nuxt/ci-stats.json +++ b/packages/starter-nuxt/ci-stats.json @@ -365,5 +365,10 @@ "@types/node": "22", "vue-tsc": "2" } + }, + "frameworkDependencies": { + "prodDependencies": 57, + "devDependencies": 11, + "allDependencies": 68 } } diff --git a/packages/starter-nuxt/stats/4.2.2.json b/packages/starter-nuxt/stats/4.2.2.json index c394138d..c2e21b1d 100644 --- a/packages/starter-nuxt/stats/4.2.2.json +++ b/packages/starter-nuxt/stats/4.2.2.json @@ -365,5 +365,10 @@ "@types/node": "22", "vue-tsc": "2" } + }, + "frameworkDependencies": { + "prodDependencies": 57, + "devDependencies": 11, + "allDependencies": 68 } } diff --git a/packages/starter-react-router/ci-stats.json b/packages/starter-react-router/ci-stats.json index aadd7c66..87656c5e 100644 --- a/packages/starter-react-router/ci-stats.json +++ b/packages/starter-react-router/ci-stats.json @@ -104,5 +104,10 @@ "vite": "7.3.0", "vite-tsconfig-paths": "5.1.4" } + }, + "frameworkDependencies": { + "prodDependencies": 28, + "devDependencies": 22, + "allDependencies": 50 } } diff --git a/packages/starter-react-router/stats/7.10.1.json b/packages/starter-react-router/stats/7.10.1.json index aadd7c66..87656c5e 100644 --- a/packages/starter-react-router/stats/7.10.1.json +++ b/packages/starter-react-router/stats/7.10.1.json @@ -104,5 +104,10 @@ "vite": "7.3.0", "vite-tsconfig-paths": "5.1.4" } + }, + "frameworkDependencies": { + "prodDependencies": 28, + "devDependencies": 22, + "allDependencies": 50 } } diff --git a/packages/starter-solid-start/ci-stats.json b/packages/starter-solid-start/ci-stats.json index ff4b207c..75929d17 100644 --- a/packages/starter-solid-start/ci-stats.json +++ b/packages/starter-solid-start/ci-stats.json @@ -444,5 +444,10 @@ "vinxi": "0.5.11" }, "devDependencies": {} + }, + "frameworkDependencies": { + "prodDependencies": 15, + "devDependencies": 3, + "allDependencies": 18 } } diff --git a/packages/starter-solid-start/stats/1.2.1.json b/packages/starter-solid-start/stats/1.2.1.json index ff4b207c..75929d17 100644 --- a/packages/starter-solid-start/stats/1.2.1.json +++ b/packages/starter-solid-start/stats/1.2.1.json @@ -444,5 +444,10 @@ "vinxi": "0.5.11" }, "devDependencies": {} + }, + "frameworkDependencies": { + "prodDependencies": 15, + "devDependencies": 3, + "allDependencies": 18 } } diff --git a/packages/starter-sveltekit/ci-stats.json b/packages/starter-sveltekit/ci-stats.json index d15fc246..bd13f75c 100644 --- a/packages/starter-sveltekit/ci-stats.json +++ b/packages/starter-sveltekit/ci-stats.json @@ -61,5 +61,10 @@ "typescript": "5.9.3", "vite": "7.3.1" } + }, + "frameworkDependencies": { + "prodDependencies": 12, + "devDependencies": 13, + "allDependencies": 25 } } diff --git a/packages/starter-sveltekit/stats/2.49.4.json b/packages/starter-sveltekit/stats/2.49.4.json index 98bccfd5..d7c5bb2b 100644 --- a/packages/starter-sveltekit/stats/2.49.4.json +++ b/packages/starter-sveltekit/stats/2.49.4.json @@ -61,5 +61,10 @@ "typescript": "5.9.3", "vite": "7.3.0" } + }, + "frameworkDependencies": { + "prodDependencies": 13, + "devDependencies": 13, + "allDependencies": 26 } } diff --git a/packages/starter-sveltekit/stats/2.50.2.json b/packages/starter-sveltekit/stats/2.50.2.json index c775f843..5aa36384 100644 --- a/packages/starter-sveltekit/stats/2.50.2.json +++ b/packages/starter-sveltekit/stats/2.50.2.json @@ -61,5 +61,10 @@ "typescript": "5.9.3", "vite": "7.3.1" } + }, + "frameworkDependencies": { + "prodDependencies": 13, + "devDependencies": 13, + "allDependencies": 26 } } diff --git a/packages/starter-sveltekit/stats/2.51.0.json b/packages/starter-sveltekit/stats/2.51.0.json index 32ec6b60..f81e4277 100644 --- a/packages/starter-sveltekit/stats/2.51.0.json +++ b/packages/starter-sveltekit/stats/2.51.0.json @@ -61,5 +61,10 @@ "typescript": "5.9.3", "vite": "7.3.1" } + }, + "frameworkDependencies": { + "prodDependencies": 13, + "devDependencies": 13, + "allDependencies": 26 } } diff --git a/packages/starter-sveltekit/stats/2.52.2.json b/packages/starter-sveltekit/stats/2.52.2.json index d15fc246..bd13f75c 100644 --- a/packages/starter-sveltekit/stats/2.52.2.json +++ b/packages/starter-sveltekit/stats/2.52.2.json @@ -61,5 +61,10 @@ "typescript": "5.9.3", "vite": "7.3.1" } + }, + "frameworkDependencies": { + "prodDependencies": 12, + "devDependencies": 13, + "allDependencies": 25 } } diff --git a/packages/starter-tanstack-start-react/ci-stats.json b/packages/starter-tanstack-start-react/ci-stats.json index 526e8f41..4fc4e639 100644 --- a/packages/starter-tanstack-start-react/ci-stats.json +++ b/packages/starter-tanstack-start-react/ci-stats.json @@ -139,5 +139,10 @@ "vitest": "3.2.4", "web-vitals": "5.1.0" } + }, + "frameworkDependencies": { + "prodDependencies": 8, + "devDependencies": 0, + "allDependencies": 8 } } diff --git a/packages/starter-tanstack-start-react/stats/1.145.3.json b/packages/starter-tanstack-start-react/stats/1.145.3.json index 526e8f41..4fc4e639 100644 --- a/packages/starter-tanstack-start-react/stats/1.145.3.json +++ b/packages/starter-tanstack-start-react/stats/1.145.3.json @@ -139,5 +139,10 @@ "vitest": "3.2.4", "web-vitals": "5.1.0" } + }, + "frameworkDependencies": { + "prodDependencies": 8, + "devDependencies": 0, + "allDependencies": 8 } } diff --git a/packages/stats-generator/src/collect-stats.ts b/packages/stats-generator/src/collect-stats.ts index a571a118..63d7d36f 100644 --- a/packages/stats-generator/src/collect-stats.ts +++ b/packages/stats-generator/src/collect-stats.ts @@ -4,7 +4,10 @@ import { getFrameworks } from './get-frameworks.ts' import { packagesDir } from './constants.ts' import { saveStats } from './save-stats.ts' import { getCIStats } from './get-ci-stats.ts' -import { getDependencyCountsFromPackageMetadata } from './utils.ts' +import { + getDependencyCountsFromPackageMetadata, + getFrameworkDependencyCountsFromPackageMetadata, +} from './utils.ts' import type { BrowserBaselineStats, FrameworkStats, @@ -46,6 +49,16 @@ async function processStarter(framework: FrameworkConfig, order: number) { ciStats.allDependencies === undefined) ? getDependencyCountsFromPackageMetadata(pkgDir) : {} + const frameworkDependencyStats = + hasDependencies && ciStats.frameworkDependencies === undefined + ? { + frameworkDependencies: + getFrameworkDependencyCountsFromPackageMetadata( + pkgDir, + framework.frameworkPackage, + ), + } + : {} const hasBrowserBaseline = measurements.some( (m) => m.type === 'browserBaseline', ) @@ -61,6 +74,7 @@ async function processStarter(framework: FrameworkConfig, order: number) { isFocused: framework.focusedFramework, order, ...dependencyStats, + ...frameworkDependencyStats, ...browserBaselineStats, ...ciStats, } diff --git a/packages/stats-generator/src/save-ci-stats.ts b/packages/stats-generator/src/save-ci-stats.ts index 2597d04d..94947cd1 100644 --- a/packages/stats-generator/src/save-ci-stats.ts +++ b/packages/stats-generator/src/save-ci-stats.ts @@ -3,6 +3,7 @@ import { getFrameworks } from './get-frameworks.ts' import { packagesDir } from './constants.ts' import { getDependencyCountsFromPackageMetadata, + getFrameworkDependencyCountsFromPackageMetadata, getPackageJsonDeps, normalizeCIStats, readJsonFile, @@ -150,9 +151,15 @@ async function main() { devDependencies: e18eStats.stats.dependencyCount.development, allDependencies: packageDependencyCounts.allDependencies, } + const frameworkDependencies = + getFrameworkDependencyCountsFromPackageMetadata( + packageName, + framework.frameworkPackage, + ) stats = { ...stats, ...dependencyCounts, + frameworkDependencies, duplicateDependencies: typeof duplicateEntry?.value === 'number' ? duplicateEntry.value diff --git a/packages/stats-generator/src/types.ts b/packages/stats-generator/src/types.ts index 8f870472..4fea3016 100644 --- a/packages/stats-generator/src/types.ts +++ b/packages/stats-generator/src/types.ts @@ -103,6 +103,7 @@ export interface CIStats { prodDependencies?: number devDependencies?: number allDependencies?: number + frameworkDependencies?: DependencyStats duplicateDependencies?: number depInstallSize?: number e18eMessages?: Array<{ @@ -117,6 +118,12 @@ export interface CIStats { } } +export interface DependencyStats { + prodDependencies: number + devDependencies: number + allDependencies: number +} + export interface InstallStats { frameworkVersion: string installTime: TimeStat diff --git a/packages/stats-generator/src/utils.ts b/packages/stats-generator/src/utils.ts index 8306915e..3061e7fa 100644 --- a/packages/stats-generator/src/utils.ts +++ b/packages/stats-generator/src/utils.ts @@ -6,6 +6,7 @@ import { packagesDir } from './constants.ts' import { getFrameworks } from './get-frameworks.ts' import type { CIStats, + DependencyStats, FrameworkConfig, PackageJson, TestConfig, @@ -117,6 +118,35 @@ export function getDependencyCountsFromPackageMetadata(packageName: string) { } } +export function getFrameworkDependencyCountsFromPackageMetadata( + starterPackageName: string, + frameworkPackage: string, +): DependencyStats { + // pnpm exposes JSR dependencies under their package name in node_modules. + const installedPackageName = frameworkPackage.replace(/^jsr:/, '') + const packageJsonPath = join( + packagesDir, + starterPackageName, + 'node_modules', + installedPackageName, + 'package.json', + ) + const packageJson = JSON.parse( + readFileSync(packageJsonPath, 'utf-8'), + ) as PackageJson + const dependencies = packageJson.dependencies ?? {} + const devDependencies = packageJson.devDependencies ?? {} + + return { + prodDependencies: Object.keys(dependencies).length, + devDependencies: Object.keys(devDependencies).length, + allDependencies: new Set([ + ...Object.keys(dependencies), + ...Object.keys(devDependencies), + ]).size, + } +} + export async function getFrameworkVersion( packageName: string, frameworkPackage: string,