4
4
createSerializedOptionsFromPersisted ,
5
5
getAllAddOns ,
6
6
getFrameworkById ,
7
+ getRawRegistry ,
8
+ getRegistryAddOns ,
7
9
readConfigFile ,
8
10
recursivelyGatherFiles ,
9
11
} from '@tanstack/cta-engine'
@@ -17,18 +19,24 @@ import {
17
19
getForcedRouterMode ,
18
20
getProjectOptions ,
19
21
getProjectPath ,
20
- getRegistry ,
22
+ getRegistry as getRegistryURL ,
21
23
} from './server-environment.js'
22
24
23
- import type { SerializedOptions } from '@tanstack/cta-engine'
24
- import type { Registry } from '../types.js'
25
+ import type { AddOn , SerializedOptions } from '@tanstack/cta-engine'
26
+ import type { AddOnInfo } from '../types.js'
25
27
26
- function absolutizeUrl ( originalUrl : string , relativeUrl : string ) {
27
- if ( relativeUrl . startsWith ( 'http' ) || relativeUrl . startsWith ( 'https' ) ) {
28
- return relativeUrl
28
+ function convertAddOnToAddOnInfo ( addOn : AddOn ) : AddOnInfo {
29
+ return {
30
+ id : addOn . id ,
31
+ name : addOn . name ,
32
+ description : addOn . description ,
33
+ modes : addOn . modes as Array < 'code-router' | 'file-router' > ,
34
+ type : addOn . type ,
35
+ smallLogo : addOn . smallLogo ,
36
+ logo : addOn . logo ,
37
+ link : addOn . link ! ,
38
+ dependsOn : addOn . dependsOn ,
29
39
}
30
- const baseUrl = originalUrl . replace ( / r e g i s t r y .j s o n $ / , '' )
31
- return `${ baseUrl } ${ relativeUrl . replace ( / ^ \. \/ / , '' ) } `
32
40
}
33
41
34
42
export async function generateInitialPayload ( ) {
@@ -68,20 +76,8 @@ export async function generateInitialPayload() {
68
76
}
69
77
}
70
78
71
- const registryUrl = getRegistry ( )
72
- let registry : Registry | undefined
73
- if ( registryUrl ) {
74
- registry = ( await fetch ( registryUrl ) . then ( ( res ) => res . json ( ) ) ) as Registry
75
- for ( const addOn of registry [ 'add-ons' ] ) {
76
- addOn . url = absolutizeUrl ( registryUrl , addOn . url )
77
- }
78
- for ( const starter of registry . starters ) {
79
- starter . url = absolutizeUrl ( registryUrl , starter . url )
80
- if ( starter . banner ) {
81
- starter . banner = absolutizeUrl ( registryUrl , starter . banner )
82
- }
83
- }
84
- }
79
+ const rawRegistry = await getRawRegistry ( getRegistryURL ( ) )
80
+ const registryAddOns = await getRegistryAddOns ( getRegistryURL ( ) )
85
81
86
82
const serializedOptions = await getSerializedOptions ( )
87
83
@@ -91,39 +87,46 @@ export async function generateInitialPayload() {
91
87
92
88
const framework = await getFrameworkById ( serializedOptions . framework )
93
89
94
- const codeRouter = getAllAddOns ( framework ! , 'code-router' ) . map ( ( addOn ) => ( {
95
- id : addOn . id ,
96
- name : addOn . name ,
97
- description : addOn . description ,
98
- type : addOn . type ,
99
- smallLogo : addOn . smallLogo ,
100
- logo : addOn . logo ,
101
- link : addOn . link ,
102
- dependsOn : addOn . dependsOn ,
103
- } ) )
90
+ const codeRouterAddOns = getAllAddOns ( framework ! , 'code-router' ) . map (
91
+ convertAddOnToAddOnInfo ,
92
+ )
93
+
94
+ const fileRouterAddOns = getAllAddOns ( framework ! , 'file-router' ) . map (
95
+ convertAddOnToAddOnInfo ,
96
+ )
97
+
98
+ for ( const addOnInfo of registryAddOns || [ ] ) {
99
+ const addOnFramework = rawRegistry ?. [ 'add-ons' ] . find (
100
+ ( addOn ) => addOn . url === addOnInfo . id ,
101
+ )
102
+ if ( addOnFramework ?. framework === serializedOptions . framework ) {
103
+ if ( addOnInfo . modes . includes ( 'code-router' ) ) {
104
+ codeRouterAddOns . push ( convertAddOnToAddOnInfo ( addOnInfo ) )
105
+ }
106
+ if ( addOnInfo . modes . includes ( 'file-router' ) ) {
107
+ fileRouterAddOns . push ( convertAddOnToAddOnInfo ( addOnInfo ) )
108
+ }
109
+ }
110
+ }
104
111
105
- const fileRouter = getAllAddOns ( framework ! , 'file-router' ) . map ( ( addOn ) => ( {
106
- id : addOn . id ,
107
- name : addOn . name ,
108
- description : addOn . description ,
109
- type : addOn . type ,
110
- smallLogo : addOn . smallLogo ,
111
- logo : addOn . logo ,
112
- link : addOn . link ,
113
- dependsOn : addOn . dependsOn ,
114
- } ) )
112
+ const serializedRegistry = {
113
+ [ 'add-ons' ] : [ ] ,
114
+ starters : ( rawRegistry ?. starters || [ ] ) . filter (
115
+ ( starter ) => starter . framework === serializedOptions . framework ,
116
+ ) ,
117
+ }
115
118
116
119
return {
117
120
applicationMode,
118
121
localFiles,
119
122
addOns : {
120
- 'code-router' : codeRouter ,
121
- 'file-router' : fileRouter ,
123
+ 'code-router' : codeRouterAddOns ,
124
+ 'file-router' : fileRouterAddOns ,
122
125
} ,
123
126
options : serializedOptions ,
124
127
output,
125
128
forcedRouterMode,
126
129
forcedAddOns : getForcedAddOns ( ) ,
127
- registry,
130
+ registry : serializedRegistry ,
128
131
}
129
132
}
0 commit comments