mirror of
				https://github.com/SillyTavern/SillyTavern.git
				synced 2025-06-05 21:59:27 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			82 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
const conversions = require('./conversions');
 | 
						|
const route = require('./route');
 | 
						|
 | 
						|
const convert = {};
 | 
						|
 | 
						|
const models = Object.keys(conversions);
 | 
						|
 | 
						|
function wrapRaw(fn) {
 | 
						|
	const wrappedFn = function (...args) {
 | 
						|
		const arg0 = args[0];
 | 
						|
		if (arg0 === undefined || arg0 === null) {
 | 
						|
			return arg0;
 | 
						|
		}
 | 
						|
 | 
						|
		if (arg0.length > 1) {
 | 
						|
			args = arg0;
 | 
						|
		}
 | 
						|
 | 
						|
		return fn(args);
 | 
						|
	};
 | 
						|
 | 
						|
	// Preserve .conversion property if there is one
 | 
						|
	if ('conversion' in fn) {
 | 
						|
		wrappedFn.conversion = fn.conversion;
 | 
						|
	}
 | 
						|
 | 
						|
	return wrappedFn;
 | 
						|
}
 | 
						|
 | 
						|
function wrapRounded(fn) {
 | 
						|
	const wrappedFn = function (...args) {
 | 
						|
		const arg0 = args[0];
 | 
						|
 | 
						|
		if (arg0 === undefined || arg0 === null) {
 | 
						|
			return arg0;
 | 
						|
		}
 | 
						|
 | 
						|
		if (arg0.length > 1) {
 | 
						|
			args = arg0;
 | 
						|
		}
 | 
						|
 | 
						|
		const result = fn(args);
 | 
						|
 | 
						|
		// We're assuming the result is an array here.
 | 
						|
		// see notice in conversions.js; don't use box types
 | 
						|
		// in conversion functions.
 | 
						|
		if (typeof result === 'object') {
 | 
						|
			for (let len = result.length, i = 0; i < len; i++) {
 | 
						|
				result[i] = Math.round(result[i]);
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		return result;
 | 
						|
	};
 | 
						|
 | 
						|
	// Preserve .conversion property if there is one
 | 
						|
	if ('conversion' in fn) {
 | 
						|
		wrappedFn.conversion = fn.conversion;
 | 
						|
	}
 | 
						|
 | 
						|
	return wrappedFn;
 | 
						|
}
 | 
						|
 | 
						|
models.forEach(fromModel => {
 | 
						|
	convert[fromModel] = {};
 | 
						|
 | 
						|
	Object.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});
 | 
						|
	Object.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});
 | 
						|
 | 
						|
	const routes = route(fromModel);
 | 
						|
	const routeModels = Object.keys(routes);
 | 
						|
 | 
						|
	routeModels.forEach(toModel => {
 | 
						|
		const fn = routes[toModel];
 | 
						|
 | 
						|
		convert[fromModel][toModel] = wrapRounded(fn);
 | 
						|
		convert[fromModel][toModel].raw = wrapRaw(fn);
 | 
						|
	});
 | 
						|
});
 | 
						|
 | 
						|
module.exports = convert;
 |