@@ -17,7 +17,8 @@ export interface Framework {
1717 id : string ;
1818 title : string ;
1919 frameworkName : string ;
20- isCurrentVersion : boolean ;
20+ frameworkNameId : string ;
21+ isLatestStable : boolean ;
2122 img : string ;
2223 playgroundURL : string ;
2324 documentationURL : string ;
@@ -26,12 +27,13 @@ export interface Framework {
2627 mainPackageName : string ;
2728}
2829
29- const frameworks : Framework [ ] = [
30+ export const frameworks : Framework [ ] = [
3031 {
3132 id : "svelte5" ,
3233 title : "Svelte 5" ,
3334 frameworkName : "Svelte" ,
34- isCurrentVersion : false ,
35+ frameworkNameId : "svelte" ,
36+ isLatestStable : false ,
3537 img : "framework/svelte.svg" ,
3638 playgroundURL : "https://svelte-5-preview.vercel.app/" ,
3739 documentationURL : "https://svelte-5-preview.vercel.app/docs" ,
@@ -45,7 +47,8 @@ const frameworks: Framework[] = [
4547 id : "react" ,
4648 title : "React" ,
4749 frameworkName : "React" ,
48- isCurrentVersion : true ,
50+ frameworkNameId : "react" ,
51+ isLatestStable : true ,
4952 img : "framework/react.svg" ,
5053 playgroundURL : "https://codesandbox.io/s/mystifying-goldberg-6wx04b" ,
5154 documentationURL : "https://reactjs.org/docs/getting-started.html" ,
@@ -59,7 +62,8 @@ const frameworks: Framework[] = [
5962 id : "vue3" ,
6063 title : "Vue 3" ,
6164 frameworkName : "Vue" ,
62- isCurrentVersion : true ,
65+ frameworkNameId : "vue" ,
66+ isLatestStable : true ,
6367 img : "framework/vue.svg" ,
6468 playgroundURL : "https://sfc.vuejs.org" ,
6569 documentationURL : "https://vuejs.org/guide" ,
@@ -73,7 +77,8 @@ const frameworks: Framework[] = [
7377 id : "angularRenaissance" ,
7478 title : "Angular Renaissance" ,
7579 frameworkName : "Angular" ,
76- isCurrentVersion : true ,
80+ frameworkNameId : "angular" ,
81+ isLatestStable : true ,
7782 img : "framework/angular-renaissance.svg" ,
7883 playgroundURL : "https://codesandbox.io/s/angular" ,
7984 documentationURL : "https://angular.io/docs" ,
@@ -92,7 +97,8 @@ const frameworks: Framework[] = [
9297 id : "angular" ,
9398 title : "Angular" ,
9499 frameworkName : "Angular" ,
95- isCurrentVersion : false ,
100+ frameworkNameId : "angular" ,
101+ isLatestStable : false ,
96102 img : "framework/angular.svg" ,
97103 playgroundURL : "https://codesandbox.io/s/angular" ,
98104 documentationURL : "https://angular.io/docs" ,
@@ -111,7 +117,8 @@ const frameworks: Framework[] = [
111117 id : "lit" ,
112118 title : "Lit" ,
113119 frameworkName : "Lit" ,
114- isCurrentVersion : true ,
120+ frameworkNameId : "lit" ,
121+ isLatestStable : true ,
115122 img : "framework/lit.svg" ,
116123 playgroundURL : "https://lit.dev/playground" ,
117124 documentationURL : "https://lit.dev" ,
@@ -125,7 +132,8 @@ const frameworks: Framework[] = [
125132 id : "emberOctane" ,
126133 title : "Ember Octane" ,
127134 frameworkName : "Ember" ,
128- isCurrentVersion : true ,
135+ frameworkNameId : "ember" ,
136+ isLatestStable : true ,
129137 img : "framework/ember.svg" ,
130138 playgroundURL : "https://ember-twiddle.com" ,
131139 documentationURL : "https://emberjs.com" ,
@@ -139,7 +147,8 @@ const frameworks: Framework[] = [
139147 id : "solid" ,
140148 title : "Solid.js" ,
141149 frameworkName : "Solid" ,
142- isCurrentVersion : true ,
150+ frameworkNameId : "solid" ,
151+ isLatestStable : true ,
143152 img : "framework/solid.svg" ,
144153 playgroundURL : "https://playground.solidjs.com/" ,
145154 documentationURL : "https://www.solidjs.com/" ,
@@ -153,7 +162,8 @@ const frameworks: Framework[] = [
153162 id : "svelte4" ,
154163 title : "Svelte 4" ,
155164 frameworkName : "Svelte" ,
156- isCurrentVersion : true ,
165+ frameworkNameId : "svelte" ,
166+ isLatestStable : true ,
157167 img : "framework/svelte.svg" ,
158168 playgroundURL : "https://svelte.dev/repl" ,
159169 documentationURL : "https://svelte.dev/" ,
@@ -167,7 +177,8 @@ const frameworks: Framework[] = [
167177 id : "vue2" ,
168178 title : "Vue 2" ,
169179 frameworkName : "Vue" ,
170- isCurrentVersion : false ,
180+ frameworkNameId : "vue" ,
181+ isLatestStable : false ,
171182 img : "framework/vue.svg" ,
172183 playgroundURL : "" ,
173184 documentationURL : "https://v2.vuejs.org" ,
@@ -181,7 +192,8 @@ const frameworks: Framework[] = [
181192 id : "alpine" ,
182193 title : "Alpine" ,
183194 frameworkName : "Alpine" ,
184- isCurrentVersion : true ,
195+ frameworkNameId : "alpine" ,
196+ isLatestStable : true ,
185197 img : "framework/alpine.svg" ,
186198 playgroundURL : "https://codesandbox.io/s/7br3q8" ,
187199 documentationURL : "https://alpinejs.dev/start-here" ,
@@ -195,7 +207,8 @@ const frameworks: Framework[] = [
195207 id : "emberPolaris" ,
196208 title : "Ember Polaris" ,
197209 frameworkName : "Ember" ,
198- isCurrentVersion : false ,
210+ frameworkNameId : "ember" ,
211+ isLatestStable : false ,
199212 img : "framework/ember.svg" ,
200213 playgroundURL : "http://new.emberjs.com" ,
201214 documentationURL : "https://emberjs.com" ,
@@ -209,7 +222,8 @@ const frameworks: Framework[] = [
209222 id : "mithril" ,
210223 title : "Mithril" ,
211224 frameworkName : "Mithril" ,
212- isCurrentVersion : true ,
225+ frameworkNameId : "mithril" ,
226+ isLatestStable : true ,
213227 img : "framework/mithril.svg" ,
214228 playgroundURL : "https://codesandbox.io/s/q99qzov66" ,
215229 documentationURL : "https://mithril.js.org/" ,
@@ -223,7 +237,8 @@ const frameworks: Framework[] = [
223237 id : "aurelia2" ,
224238 title : "Aurelia 2" ,
225239 frameworkName : "Aurelia" ,
226- isCurrentVersion : true ,
240+ frameworkNameId : "aurelia" ,
241+ isLatestStable : true ,
227242 img : "framework/aurelia.svg" ,
228243 playgroundURL :
229244 "https://stackblitz.com/edit/au2-conventions?file=src%2Fmy-app.html" ,
@@ -243,7 +258,8 @@ const frameworks: Framework[] = [
243258 id : "qwik" ,
244259 title : "Qwik" ,
245260 frameworkName : "Qwik" ,
246- isCurrentVersion : true ,
261+ frameworkNameId : "qwik" ,
262+ isLatestStable : true ,
247263 img : "framework/qwik.svg" ,
248264 playgroundURL : "https://qwik.builder.io/playground" ,
249265 documentationURL : "https://qwik.builder.io/docs/overview" ,
@@ -257,7 +273,8 @@ const frameworks: Framework[] = [
257273 id : "marko" ,
258274 title : "Marko" ,
259275 frameworkName : "Marko" ,
260- isCurrentVersion : true ,
276+ frameworkNameId : "marko" ,
277+ isLatestStable : true ,
261278 img : "framework/marko.svg" ,
262279 playgroundURL : "https://markojs.com/playground/" ,
263280 documentationURL : "https://markojs.com/docs/getting-started/" ,
@@ -271,7 +288,8 @@ const frameworks: Framework[] = [
271288 id : "aurelia1" ,
272289 title : "Aurelia 1" ,
273290 frameworkName : "Aurelia" ,
274- isCurrentVersion : false ,
291+ frameworkNameId : "aurelia" ,
292+ isLatestStable : false ,
275293 img : "framework/aurelia.svg" ,
276294 playgroundURL : "https://codesandbox.io/s/ppmy26opw7" ,
277295 documentationURL : "http://aurelia.io/docs/" ,
@@ -290,7 +308,8 @@ const frameworks: Framework[] = [
290308 id : "ripple" ,
291309 title : "Ripple" ,
292310 frameworkName : "Ripple" ,
293- isCurrentVersion : true ,
311+ frameworkNameId : "ripple" ,
312+ isLatestStable : true ,
294313 img : "framework/ripple.svg" ,
295314 playgroundURL : "https://www.ripplejs.com/playground" ,
296315 documentationURL : "https://www.ripplejs.com/" ,
@@ -303,11 +322,66 @@ const frameworks: Framework[] = [
303322] ;
304323
305324export function matchFrameworkId ( id : string ) : Framework | undefined {
325+ // First try to find by exact ID
326+ let framework = frameworks . find ( ( f ) => f . id === id ) ;
327+
328+ // If not found, try to find by framework name ID and return the latest stable version
329+ if ( ! framework ) {
330+ const latestStable = getLatestStableFrameworkByFrameworkName ( id ) ;
331+ if ( latestStable ) {
332+ framework = latestStable ;
333+ }
334+ }
335+
336+ return framework ;
337+ }
338+
339+ /**
340+ * Get all frameworks that belong to a specific framework name
341+ */
342+ export function getFrameworksByFrameworkName (
343+ frameworkNameId : string ,
344+ ) : Framework [ ] {
345+ return frameworks . filter (
346+ ( framework ) => framework . frameworkNameId === frameworkNameId ,
347+ ) ;
348+ }
349+
350+ /**
351+ * Get the latest stable framework for a given framework name
352+ */
353+ export function getLatestStableFrameworkByFrameworkName (
354+ frameworkNameId : string ,
355+ ) : Framework | undefined {
306356 return frameworks . find (
307- ( framework ) => framework . id === id ,
308- // ||(framework.isCurrentVersion &&
309- // framework.frameworkName.toLowerCase() === id)
357+ ( framework ) =>
358+ framework . frameworkNameId === frameworkNameId && framework . isLatestStable ,
310359 ) ;
311360}
312361
313- export default frameworks ;
362+ /**
363+ * Get all unique framework name IDs
364+ */
365+ export function getFrameworkNameIds ( ) : string [ ] {
366+ return [ ...new Set ( frameworks . map ( ( framework ) => framework . frameworkNameId ) ) ] ;
367+ }
368+
369+ /**
370+ * Get framework name information including all versions and latest stable
371+ */
372+ export function getFrameworkNameInfo ( frameworkNameId : string ) : {
373+ frameworkNameId : string ;
374+ frameworks : Framework [ ] ;
375+ latestStable : Framework | undefined ;
376+ allVersions : string [ ] ;
377+ } {
378+ const familyFrameworks = getFrameworksByFrameworkName ( frameworkNameId ) ;
379+ const latestStable = getLatestStableFrameworkByFrameworkName ( frameworkNameId ) ;
380+
381+ return {
382+ frameworkNameId,
383+ frameworks : familyFrameworks ,
384+ latestStable,
385+ allVersions : familyFrameworks . map ( ( f ) => f . id ) ,
386+ } ;
387+ }
0 commit comments