@@ -9,6 +9,10 @@ export class RenderedModelProvider
99 private static readonly scheme = 'sqlmesh-rendered'
1010
1111 private renderedModels = new Map < string , string > ( )
12+ // Track which source file URIs are associated with rendered models
13+ private sourceToRenderedUri = new Map < string , vscode . Uri > ( )
14+ // Track which rendered URIs are associated with source files
15+ private renderedToSourceUri = new Map < string , string > ( )
1216
1317 // Event emitter for content changes
1418 private _onDidChange = new vscode . EventEmitter < vscode . Uri > ( )
@@ -25,7 +29,7 @@ export class RenderedModelProvider
2529 /**
2630 * Store rendered model content and create a URI for it
2731 */
28- storeRenderedModel ( modelName : string , content : string ) : vscode . Uri {
32+ storeRenderedModel ( modelName : string , content : string , sourceUri ?: string ) : vscode . Uri {
2933 const fileName = `${ modelName } (rendered)`
3034 // Add a timestamp to make the URI unique for each render
3135 const timestamp = Date . now ( )
@@ -35,11 +39,56 @@ export class RenderedModelProvider
3539 path : fileName ,
3640 fragment : timestamp . toString ( ) ,
3741 } )
38- this . renderedModels . set ( uri . toString ( ) , content )
42+
43+ const uriString = uri . toString ( )
44+ this . renderedModels . set ( uriString , content )
45+
46+ // Track the association between source file and rendered model
47+ if ( sourceUri ) {
48+ // Remove any existing mapping for this source file
49+ const existingRenderedUri = this . sourceToRenderedUri . get ( sourceUri )
50+ if ( existingRenderedUri ) {
51+ this . renderedToSourceUri . delete ( existingRenderedUri . toString ( ) )
52+ }
53+
54+ this . sourceToRenderedUri . set ( sourceUri , uri )
55+ this . renderedToSourceUri . set ( uriString , sourceUri )
56+ }
57+
3958 this . _onDidChange . fire ( uri )
4059 return uri
4160 }
4261
62+ /**
63+ * Update an existing rendered model with new content
64+ */
65+ updateRenderedModel ( uri : vscode . Uri , content : string ) : void {
66+ const uriString = uri . toString ( )
67+ this . renderedModels . set ( uriString , content )
68+ this . _onDidChange . fire ( uri )
69+ }
70+
71+ /**
72+ * Get the rendered URI for a given source file URI
73+ */
74+ getRenderedUriForSource ( sourceUri : string ) : vscode . Uri | undefined {
75+ return this . sourceToRenderedUri . get ( sourceUri )
76+ }
77+
78+ /**
79+ * Get the source URI for a given rendered model URI
80+ */
81+ getSourceUriForRendered ( renderedUri : string ) : string | undefined {
82+ return this . renderedToSourceUri . get ( renderedUri )
83+ }
84+
85+ /**
86+ * Check if a source file has an associated rendered model
87+ */
88+ hasRenderedModelForSource ( sourceUri : string ) : boolean {
89+ return this . sourceToRenderedUri . has ( sourceUri )
90+ }
91+
4392 /**
4493 * Get the URI scheme for rendered models
4594 */
@@ -52,6 +101,8 @@ export class RenderedModelProvider
52101 */
53102 dispose ( ) {
54103 this . renderedModels . clear ( )
104+ this . sourceToRenderedUri . clear ( )
105+ this . renderedToSourceUri . clear ( )
55106 this . _onDidChange . dispose ( )
56107 }
57108}
0 commit comments