Skip to content

Commit 45c0cf2

Browse files
authored
fix: respect manual order of frameworks (#4858)
This is a regression of #4819
1 parent d78a65c commit 45c0cf2

File tree

8 files changed

+50
-35
lines changed

8 files changed

+50
-35
lines changed

packages/framework-info/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
"build:browser": "run-s build:browser:*",
2020
"build:browser:core": "vite build",
2121
"build:browser:site-root": "cpy index.html ./dist",
22+
"pretest": "run-s prebuild",
2223
"test": "vitest run",
2324
"test:dev": "vitest",
2425
"test:ci": "vitest run --reporter=default"

packages/framework-info/src/frameworks/main.ts renamed to packages/framework-info/scripts/frameworks.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,4 @@ export const FRAMEWORK_NAMES = [
5757
'gulp',
5858
'vite',
5959
'wmr',
60-
] as const
61-
62-
export type FrameworkName = typeof FRAMEWORK_NAMES[number]
60+
]

packages/framework-info/scripts/transform_json.js

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import { promises as fs } from 'fs'
22
import process from 'process'
3-
import { fileURLToPath } from 'url'
43

5-
import glob from 'fast-glob'
4+
import { FRAMEWORK_NAMES } from './frameworks.js'
65

6+
const FRAMEWORKS_SOURCE = new URL('./frameworks.js', import.meta.url)
77
const FRAMEWORKS_DIR = new URL('../src/frameworks/', import.meta.url)
88
const BUILD_DIR = new URL('../src/generated/', import.meta.url)
99
const FRAMEWORKS_BUILD = new URL('frameworks.ts', BUILD_DIR)
10+
const FRAMEWORK_NAMES_BUILD = new URL('frameworkNames.ts', BUILD_DIR)
1011

1112
// We enforce frameworks to be written with JSON to ensure they remain logicless
1213
// which is simpler for contributors and avoid adding unnecessary logic.
@@ -15,8 +16,9 @@ const FRAMEWORKS_BUILD = new URL('frameworks.ts', BUILD_DIR)
1516
// Therefore, we transform JSON to JavaScript files using at build time.
1617
const transformFrameworks = async function () {
1718
await fs.mkdir(BUILD_DIR, { recursive: true })
18-
const frameworkFiles = await glob('*.json', { cwd: fileURLToPath(FRAMEWORKS_DIR), absolute: true })
19-
const frameworks = await Promise.all(frameworkFiles.map(transformFramework))
19+
// We use the framework names here to generate the frameworks infos, so that
20+
// we keep the exact same order as in FRAMEWORK_NAMES
21+
const frameworks = await Promise.all(FRAMEWORK_NAMES.map(transformFramework))
2022
const fileContents = `${FRAMEWORKS_HEADER}${JSON.stringify(frameworks, null, 2)}`
2123
await fs.writeFile(FRAMEWORKS_BUILD, fileContents)
2224
}
@@ -33,8 +35,9 @@ const updateLogoUrls = function (contents) {
3335
return updatedContents
3436
}
3537

36-
const transformFramework = async function (frameworkFile) {
37-
const jsonContents = await fs.readFile(frameworkFile)
38+
const transformFramework = async function (frameworkName) {
39+
const frameworkUrl = new URL(`${frameworkName}.json`, FRAMEWORKS_DIR)
40+
const jsonContents = await fs.readFile(frameworkUrl)
3841
const contents = JSON.parse(jsonContents)
3942

4043
const updatedContents = updateLogoUrls(contents)
@@ -45,4 +48,17 @@ const FRAMEWORKS_HEADER = `import type { FrameworkDefinition } from "../types.js
4548
// This file is autogenerated at build time
4649
export const FRAMEWORKS: FrameworkDefinition[] = `
4750

51+
const transformFrameworkNames = async function () {
52+
const frameworkNamesContent = await fs.readFile(FRAMEWORKS_SOURCE, 'utf-8')
53+
const fileContents = `${FRAMEWORK_NAMES_HEADER}${frameworkNamesContent.trim()}${FRAMEWORK_NAMES_FOOTER}`
54+
await fs.writeFile(FRAMEWORK_NAMES_BUILD, fileContents)
55+
}
56+
57+
const FRAMEWORK_NAMES_HEADER = '// This file is autogenerated at build time\n\n'
58+
59+
const FRAMEWORK_NAMES_FOOTER = ` as const
60+
61+
export type FrameworkName = typeof FRAMEWORK_NAMES[number]`
62+
4863
transformFrameworks()
64+
transformFrameworkNames()

packages/framework-info/src/core.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import type { PackageJson } from 'read-pkg-up'
44
import type { Context, PathExists } from './context.js'
55
import { usesFramework } from './detect.js'
66
import { getDevCommands } from './dev.js'
7-
import type { FrameworkName } from './frameworks/main.js'
7+
import type { FrameworkName } from './generated/frameworkNames.js'
88
import { FRAMEWORKS } from './generated/frameworks.js'
99
import { getPackageJsonContent } from './package.js'
1010
import { getPlugins } from './plugins.js'

packages/framework-info/src/main.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { findUp } from 'find-up'
55

66
import { getContext, getPackageJson } from './context.js'
77
import { listFrameworks as list, hasFramework as has, getFramework as get } from './core.js'
8-
import type { FrameworkName } from './frameworks/main.js'
8+
import type { FrameworkName } from './generated/frameworkNames.js'
99
import type { Framework } from './types.js'
1010

1111
interface Options {

packages/framework-info/src/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { FrameworkName } from './frameworks/main.js'
1+
import type { FrameworkName } from './generated/frameworkNames.js'
22

33
interface PollingStrategy {
44
name: 'HTTP' | 'TCP'

packages/framework-info/tests/__snapshots__/main.test.ts.snap

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -129,14 +129,14 @@ exports[`getFrameworks > Should return the version of each framework when multip
129129
{
130130
"build": {
131131
"commands": [
132-
"vue-cli-service build",
132+
"vuepress build",
133133
],
134-
"directory": "dist",
134+
"directory": ".vuepress/dist",
135135
},
136-
"category": "frontend_framework",
136+
"category": "static_site_generator",
137137
"dev": {
138138
"commands": [
139-
"vue-cli-service serve",
139+
"vuepress dev",
140140
],
141141
"pollingStrategies": [
142142
{
@@ -149,31 +149,31 @@ exports[`getFrameworks > Should return the version of each framework when multip
149149
"port": 8080,
150150
},
151151
"env": {},
152-
"id": "vue",
152+
"id": "vuepress",
153153
"logo": {
154-
"dark": "https://framework-info.netlify.app/logos/vue/default.svg",
155-
"default": "https://framework-info.netlify.app/logos/vue/default.svg",
156-
"light": "https://framework-info.netlify.app/logos/vue/default.svg",
154+
"dark": "https://framework-info.netlify.app/logos/vuepress/default.svg",
155+
"default": "https://framework-info.netlify.app/logos/vuepress/default.svg",
156+
"light": "https://framework-info.netlify.app/logos/vuepress/default.svg",
157157
},
158-
"name": "Vue.js",
158+
"name": "VuePress",
159159
"package": {
160-
"name": "@vue/cli-service",
161-
"version": "1.2.3",
160+
"name": "vuepress",
161+
"version": "4.5.6",
162162
},
163163
"plugins": [],
164164
"staticAssetsDirectory": undefined,
165165
},
166166
{
167167
"build": {
168168
"commands": [
169-
"vuepress build",
169+
"vue-cli-service build",
170170
],
171-
"directory": ".vuepress/dist",
171+
"directory": "dist",
172172
},
173-
"category": "static_site_generator",
173+
"category": "frontend_framework",
174174
"dev": {
175175
"commands": [
176-
"vuepress dev",
176+
"vue-cli-service serve",
177177
],
178178
"pollingStrategies": [
179179
{
@@ -186,16 +186,16 @@ exports[`getFrameworks > Should return the version of each framework when multip
186186
"port": 8080,
187187
},
188188
"env": {},
189-
"id": "vuepress",
189+
"id": "vue",
190190
"logo": {
191-
"dark": "https://framework-info.netlify.app/logos/vuepress/default.svg",
192-
"default": "https://framework-info.netlify.app/logos/vuepress/default.svg",
193-
"light": "https://framework-info.netlify.app/logos/vuepress/default.svg",
191+
"dark": "https://framework-info.netlify.app/logos/vue/default.svg",
192+
"default": "https://framework-info.netlify.app/logos/vue/default.svg",
193+
"light": "https://framework-info.netlify.app/logos/vue/default.svg",
194194
},
195-
"name": "VuePress",
195+
"name": "Vue.js",
196196
"package": {
197-
"name": "vuepress",
198-
"version": "4.5.6",
197+
"name": "@vue/cli-service",
198+
"version": "1.2.3",
199199
},
200200
"plugins": [],
201201
"staticAssetsDirectory": undefined,

packages/framework-info/tests/frameworks.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import Ajv from 'ajv'
44
import glob from 'fast-glob'
55
import { describe, expect, test } from 'vitest'
66

7-
import { FRAMEWORK_NAMES } from '../src/frameworks/main.js'
7+
import { FRAMEWORK_NAMES } from '../src/generated/frameworkNames.js'
88
import { FRAMEWORKS } from '../src/generated/frameworks.js'
99

1010
const FRAMEWORKS_DIR = new URL('../src/frameworks/', import.meta.url)

0 commit comments

Comments
 (0)