@@ -54,7 +54,12 @@ import { createDebug } from '@hiogawa/utils'
5454import { scanBuildStripPlugin } from './plugins/scan'
5555import { validateImportPlugin } from './plugins/validate-import'
5656import { vitePluginFindSourceMapURL } from './plugins/find-source-map-url'
57- import { parseCssVirtual , toCssVirtual , parseIdQuery } from './plugins/shared'
57+ import {
58+ parseCssVirtual ,
59+ toCssVirtual ,
60+ parseIdQuery ,
61+ parseReferenceValidationVirtual ,
62+ } from './plugins/shared'
5863import { stripLiteral } from 'strip-literal'
5964
6065const isRolldownVite = 'rolldownVersion' in vite
@@ -261,6 +266,37 @@ export function vitePluginRscMinimal(
261266 ...vitePluginUseClient ( rscPluginOptions , manager ) ,
262267 ...vitePluginUseServer ( rscPluginOptions , manager ) ,
263268 ...vitePluginDefineEncryptionKey ( rscPluginOptions ) ,
269+ {
270+ name : 'rsc:reference-validation' ,
271+ apply : 'serve' ,
272+ load : {
273+ handler ( id , _options ) {
274+ if ( id . startsWith ( '\0virtual:vite-rsc/reference-validation?' ) ) {
275+ const parsed = parseReferenceValidationVirtual ( id )
276+ assert ( parsed )
277+ if ( parsed . type === 'client' ) {
278+ const meta = Object . values ( manager . clientReferenceMetaMap ) . find (
279+ ( meta ) => meta . referenceKey === parsed . id ,
280+ )
281+ if ( meta ) {
282+ return `export {}`
283+ }
284+ }
285+ if ( parsed . type === 'server' ) {
286+ const meta = Object . values ( manager . serverReferenceMetaMap ) . find (
287+ ( meta ) => meta . referenceKey === parsed . id ,
288+ )
289+ if ( meta ) {
290+ return `export {}`
291+ }
292+ }
293+ this . error (
294+ `[vite-rsc] invalid ${ parsed . type } reference '${ parsed . id } '` ,
295+ )
296+ }
297+ } ,
298+ } ,
299+ } ,
264300 scanBuildStripPlugin ( { manager } ) ,
265301 ]
266302}
0 commit comments