@@ -2,7 +2,7 @@ import type {
22 V2_MetaArgs as MetaArgs ,
33 V2_MetaDescriptor as MetaDescriptor ,
44} from "@remix-run/react" ;
5- import type { LoaderFunction } from "@remix-run/server-runtime" ;
5+ import type { LoaderFunction , SerializeFrom } from "@remix-run/server-runtime" ;
66
77function metaV1 <
88 Loader extends LoaderFunction | unknown = unknown ,
@@ -90,6 +90,38 @@ function fromMetaData(metaData: V1_MetaDescriptor): MetaDescriptor[] {
9090 return meta ;
9191}
9292
93+ function getMatchesData <
94+ Loader extends unknown = unknown ,
95+ MatchLoaders extends Record < string , unknown > = Record < string , unknown >
96+ > ( args : MetaArgs < Loader , MatchLoaders > ) {
97+ let { matches } = args ;
98+ return matches . reduce (
99+ ( data , match ) => {
100+ return {
101+ ...data ,
102+ [ match . id ] : match . data ,
103+ } ;
104+ } ,
105+ { } as {
106+ [ K in keyof MatchLoaders ] : MatchLoaders [ K ] extends LoaderFunction
107+ ? SerializeFrom < MatchLoaders [ K ] >
108+ : unknown ;
109+ }
110+ ) ;
111+ }
112+
113+ export interface V2_MetaMatch <
114+ RouteId extends string = string ,
115+ Loader extends LoaderFunction | unknown = unknown
116+ > {
117+ id : RouteId ;
118+ pathname : string ;
119+ data : Loader extends LoaderFunction ? SerializeFrom < Loader > : unknown ;
120+ handle ?: unknown ;
121+ params : { } ;
122+ meta : MetaDescriptor [ ] ;
123+ }
124+
93125function getMetaKey ( metaDescriptor : MetaDescriptor ) {
94126 if ( "title" in metaDescriptor && metaDescriptor . title != null ) {
95127 return "title" ;
@@ -155,5 +187,5 @@ interface V1_MetaDescriptor {
155187 | Array < Record < string , string > | string > ;
156188}
157189
158- export { fromMetaData , metaV1 , mergeMeta } ;
190+ export { fromMetaData , getMatchesData , metaV1 , mergeMeta } ;
159191export type { V1_MetaDescriptor } ;
0 commit comments