44 createSerializedOptionsFromPersisted ,
55 getAllAddOns ,
66 getFrameworkById ,
7+ getRawRegistry ,
8+ getRegistryAddOns ,
79 readConfigFile ,
810 recursivelyGatherFiles ,
911} from '@tanstack/cta-engine'
@@ -17,18 +19,24 @@ import {
1719 getForcedRouterMode ,
1820 getProjectOptions ,
1921 getProjectPath ,
20- getRegistry ,
22+ getRegistry as getRegistryURL ,
2123} from './server-environment.js'
2224
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'
2527
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 ,
2939 }
30- const baseUrl = originalUrl . replace ( / r e g i s t r y .j s o n $ / , '' )
31- return `${ baseUrl } ${ relativeUrl . replace ( / ^ \. \/ / , '' ) } `
3240}
3341
3442export async function generateInitialPayload ( ) {
@@ -68,20 +76,8 @@ export async function generateInitialPayload() {
6876 }
6977 }
7078
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 ( ) )
8581
8682 const serializedOptions = await getSerializedOptions ( )
8783
@@ -91,39 +87,46 @@ export async function generateInitialPayload() {
9187
9288 const framework = await getFrameworkById ( serializedOptions . framework )
9389
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+ }
104111
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+ }
115118
116119 return {
117120 applicationMode,
118121 localFiles,
119122 addOns : {
120- 'code-router' : codeRouter ,
121- 'file-router' : fileRouter ,
123+ 'code-router' : codeRouterAddOns ,
124+ 'file-router' : fileRouterAddOns ,
122125 } ,
123126 options : serializedOptions ,
124127 output,
125128 forcedRouterMode,
126129 forcedAddOns : getForcedAddOns ( ) ,
127- registry,
130+ registry : serializedRegistry ,
128131 }
129132}
0 commit comments