Skip to content

Commit 7f1df83

Browse files
committed
frameworkNameId
1 parent 6e8735a commit 7f1df83

File tree

10 files changed

+2707
-1295
lines changed

10 files changed

+2707
-1295
lines changed

build/lib/generateContent.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import fs from "node:fs/promises";
22
import { packageDirectory } from "package-directory";
33
import path from "node:path";
4-
import FRAMEWORKS from "../../frameworks.ts";
4+
import { frameworks } from "../../frameworks.ts";
55
import playgroundUrlByFramework from "./playgroundUrlByFramework.ts";
66
import prettier from "prettier";
77
import {
@@ -104,7 +104,7 @@ export default async function generateContent(): Promise<void> {
104104
});
105105

106106
const frameworksDirPath = path.join(snippetsDirPath, snippetDirName);
107-
const frameworkIds = FRAMEWORKS.map(({ id }) => id);
107+
const frameworkIds = frameworks.map(({ id }) => id);
108108

109109
await Promise.all(
110110
frameworkIds.map(async (frameworkId: string) => {
@@ -149,7 +149,7 @@ export default async function generateContent(): Promise<void> {
149149
}
150150

151151
if (frameworkSnippet.files.length > 0) {
152-
const frameworkConfig = FRAMEWORKS.find(
152+
const frameworkConfig = frameworks.find(
153153
(f) => f.id === frameworkId,
154154
);
155155
if (frameworkConfig) {
@@ -264,7 +264,7 @@ async function generatePlaygroundURL(
264264
return;
265265
}
266266

267-
const frameworkConfig = FRAMEWORKS.find((f) => f.id === frameworkId);
267+
const frameworkConfig = frameworks.find((f) => f.id === frameworkId);
268268
if (!frameworkConfig) {
269269
return;
270270
}

frameworks.ts

Lines changed: 98 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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

305324
export 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

Comments
 (0)