34 lines
		
	
	
		
			986 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			986 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import * as vscode from "vscode";
 | |
| 
 | |
| export const globalMap: Map<string, string> = new Map();
 | |
| 
 | |
| export async function loadMappingJson(uri: vscode.Uri): Promise<void> {
 | |
|   const bytes = await vscode.workspace.fs.readFile(uri);
 | |
|   const text = new TextDecoder('utf-8').decode(bytes);
 | |
| 
 | |
|   let raw: unknown;
 | |
|   try {
 | |
|     raw = JSON.parse(text);
 | |
|   } catch (err: any) {
 | |
|     throw new Error(`Failed to parse JSON: ${err?.message ?? String(err)}`);
 | |
|   }
 | |
| 
 | |
|   if (typeof raw !== 'object' || raw === null || Array.isArray(raw)) {
 | |
|     throw new Error(`Expected a JSON object at top level (key → value mapping).`);
 | |
|   }
 | |
| 
 | |
|   const obj = raw as Record<string, unknown>;
 | |
| 
 | |
|   globalMap.clear();
 | |
| 
 | |
|   for (const [key, value] of Object.entries(obj)) {
 | |
|     if (typeof value !== 'string') {
 | |
|       console.warn(`⚠️ Skipping key '${key}' because its value is not a string.`);
 | |
|       continue;
 | |
|     }
 | |
|     globalMap.set(key, value);
 | |
|   }
 | |
| 
 | |
|   console.log(`✅ Loaded ${globalMap.size} valid mappings from ${uri.fsPath}`);
 | |
| }
 |