30 lines
		
	
	
	
		
			891 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			30 lines
		
	
	
	
		
			891 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import { getOptions } from 'loader-utils';
 | 
						|
 | 
						|
function trim(text, g) {
 | 
						|
	return text.substring(1, text.length - (g ? 2 : 0));
 | 
						|
}
 | 
						|
 | 
						|
export default function(src) {
 | 
						|
	const fn = options => {
 | 
						|
		const search = options.search;
 | 
						|
		const g = search[search.length - 1] == 'g';
 | 
						|
		const file = this.resourcePath.replace(/\\/g, '/');
 | 
						|
		const replace = options.i18n ? global[options.replace].bind(null, {
 | 
						|
			src: file,
 | 
						|
			lang: options.lang
 | 
						|
		}) : global[options.replace];
 | 
						|
		if (typeof search != 'string' || search.length == 0) console.error('invalid search');
 | 
						|
		if (typeof replace != 'function') console.error('invalid replacer:', replace, this.request);
 | 
						|
		src = src.replace(new RegExp(trim(search, g), g ? 'g' : ''), replace);
 | 
						|
	};
 | 
						|
 | 
						|
	this.cacheable();
 | 
						|
	const options = getOptions(this);
 | 
						|
	if (options.qs) {
 | 
						|
		options.qs.forEach(q => fn(q));
 | 
						|
	} else {
 | 
						|
		fn(options);
 | 
						|
	}
 | 
						|
	this.callback(null, src);
 | 
						|
	return src;
 | 
						|
}
 |