 b87b501161
			
		
	
	
	
	
	b87b501161* build: run eslint --fix * chore: manually fix all hasOwnProperty errors * chore: manually fix all void 0 vs undefined errors * chore: manually fix all async-in-promise errors * chore: manually fix lexical declaration in case block
		
			
				
	
	
		
			60 lines
		
	
	
	
		
			2 KiB
			
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
	
		
			2 KiB
			
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| // Implementation of chrome.i18n.getMessage
 | |
| // https://developer.chrome.com/extensions/i18n#method-getMessage
 | |
| //
 | |
| // Does not implement predefined messages:
 | |
| // https://developer.chrome.com/extensions/i18n#overview-predefined
 | |
| 
 | |
| import * as ipcRendererUtils from '@electron/internal/renderer/ipc-renderer-internal-utils'
 | |
| 
 | |
| interface Placeholder {
 | |
|   content: string;
 | |
|   example?: string;
 | |
| }
 | |
| 
 | |
| const getMessages = (extensionId: number) => {
 | |
|   try {
 | |
|     const data = ipcRendererUtils.invokeSync<string>('CHROME_GET_MESSAGES', extensionId)
 | |
|     return JSON.parse(data) || {}
 | |
|   } catch {
 | |
|     return {}
 | |
|   }
 | |
| }
 | |
| 
 | |
| const replaceNumberedSubstitutions = (message: string, substitutions: string[]) => {
 | |
|   return message.replace(/\$(\d+)/, (_, number) => {
 | |
|     const index = parseInt(number, 10) - 1
 | |
|     return substitutions[index] || ''
 | |
|   })
 | |
| }
 | |
| 
 | |
| const replacePlaceholders = (message: string, placeholders: Record<string, Placeholder>, substitutions: string[] | string) => {
 | |
|   if (typeof substitutions === 'string') substitutions = [substitutions]
 | |
|   if (!Array.isArray(substitutions)) substitutions = []
 | |
| 
 | |
|   if (placeholders) {
 | |
|     Object.keys(placeholders).forEach((name: string) => {
 | |
|       let { content } = placeholders[name]
 | |
|       const substitutionsArray = Array.isArray(substitutions) ? substitutions : []
 | |
|       content = replaceNumberedSubstitutions(content, substitutionsArray)
 | |
|       message = message.replace(new RegExp(`\\$${name}\\$`, 'gi'), content)
 | |
|     })
 | |
|   }
 | |
| 
 | |
|   return replaceNumberedSubstitutions(message, substitutions)
 | |
| }
 | |
| 
 | |
| const getMessage = (extensionId: number, messageName: string, substitutions: string[]) => {
 | |
|   const messages = getMessages(extensionId)
 | |
|   if (Object.prototype.hasOwnProperty.call(messages, messageName)) {
 | |
|     const { message, placeholders } = messages[messageName]
 | |
|     return replacePlaceholders(message, placeholders, substitutions)
 | |
|   }
 | |
| }
 | |
| 
 | |
| exports.setup = (extensionId: number) => {
 | |
|   return {
 | |
|     getMessage (messageName: string, substitutions: string[]) {
 | |
|       return getMessage(extensionId, messageName, substitutions)
 | |
|     }
 | |
|   }
 | |
| }
 |