mirror of
				https://github.com/SillyTavern/SillyTavern.git
				synced 2025-06-05 21:59:27 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			58 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // eslint-disable-next-line no-unused-vars
 | |
| import { uuidv4 } from '../utils.js';
 | |
| import { SlashCommand } from './SlashCommand.js';
 | |
| // eslint-disable-next-line no-unused-vars
 | |
| import { SlashCommandClosure } from './SlashCommandClosure.js';
 | |
| import { SlashCommandNamedArgumentAssignment } from './SlashCommandNamedArgumentAssignment.js';
 | |
| // eslint-disable-next-line no-unused-vars
 | |
| import { PARSER_FLAG } from './SlashCommandParser.js';
 | |
| import { SlashCommandUnnamedArgumentAssignment } from './SlashCommandUnnamedArgumentAssignment.js';
 | |
| 
 | |
| export class SlashCommandExecutor {
 | |
|     /**@type {Boolean}*/ injectPipe = true;
 | |
|     /**@type {Number}*/ start;
 | |
|     /**@type {Number}*/ end;
 | |
|     /**@type {Number}*/ startNamedArgs;
 | |
|     /**@type {Number}*/ endNamedArgs;
 | |
|     /**@type {Number}*/ startUnnamedArgs;
 | |
|     /**@type {Number}*/ endUnnamedArgs;
 | |
|     /**@type {String}*/ name = '';
 | |
|     /**@type {String}*/ #source = uuidv4();
 | |
|     get source() { return this.#source; }
 | |
|     set source(value) {
 | |
|         this.#source = value;
 | |
|         for (const arg of this.namedArgumentList.filter(it=>it.value instanceof SlashCommandClosure)) {
 | |
|             arg.value.source = value;
 | |
|         }
 | |
|         for (const arg of this.unnamedArgumentList.filter(it=>it.value instanceof SlashCommandClosure)) {
 | |
|             arg.value.source = value;
 | |
|         }
 | |
|     }
 | |
|     /**@type {SlashCommand}*/ command;
 | |
|     // @ts-ignore
 | |
|     /**@type {SlashCommandNamedArgumentAssignment[]}*/ namedArgumentList = [];
 | |
|     /**@type {SlashCommandUnnamedArgumentAssignment[]}*/ unnamedArgumentList = [];
 | |
|     /**@type {{[id:PARSER_FLAG]:boolean}} */ parserFlags;
 | |
| 
 | |
|     get commandCount() {
 | |
|         return 1
 | |
|             + this.namedArgumentList.filter(it=>it.value instanceof SlashCommandClosure).map(it=>/**@type {SlashCommandClosure}*/(it.value).commandCount).reduce((cur, sum)=>cur + sum, 0)
 | |
|             + this.unnamedArgumentList.filter(it=>it.value instanceof SlashCommandClosure).map(it=>/**@type {SlashCommandClosure}*/(it.value).commandCount).reduce((cur, sum)=>cur + sum, 0)
 | |
|         ;
 | |
|     }
 | |
| 
 | |
|     set onProgress(value) {
 | |
|         const closures = /**@type {SlashCommandClosure[]}*/([
 | |
|             ...this.namedArgumentList.filter(it=>it.value instanceof SlashCommandClosure).map(it=>it.value),
 | |
|             ...this.unnamedArgumentList.filter(it=>it.value instanceof SlashCommandClosure).map(it=>it.value),
 | |
|         ]);
 | |
|         for (const closure of closures) {
 | |
|             closure.onProgress = value;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     constructor(start) {
 | |
|         this.start = start;
 | |
|     }
 | |
| }
 |