@@ -10,83 +10,94 @@ const macroManager = require("./macro-manager");
1010const frontendCommunicator = require ( "../common/frontend-communicator" ) ;
1111const { getCustomVariable } = require ( "../common/custom-variable-manager" ) ;
1212const util = require ( "../utility" ) ;
13+ class ReplaceVariableManager extends EventEmitter {
14+ #registeredVariableHandlers = new Map ( ) ;
15+ #variableAndAliasHandlers = new Map ( ) ;
16+ #registeredLookupHandlers = new Map ( ) ;
17+
18+ /**
19+ * @type {Record<string, Array<{ eventSourceId: string, eventId: string }>> }
20+ */
21+ additionalVariableEvents = { } ;
1322
14- function preeval ( options , variable ) {
15- if ( ! variable . triggers ) {
16- return ;
23+ constructor ( ) {
24+ super ( ) ;
1725 }
1826
19- const optionsTrigger = options . trigger || { type : null } ;
20- const display = options . trigger . type ? options . trigger . type . toLowerCase ( ) : "unknown trigger" ;
27+ #preeval( options , variable ) {
28+ if ( ! variable . triggers ) {
29+ return ;
30+ }
2131
22- const varTrigger = variable . triggers [ optionsTrigger . type ] ;
23- if ( varTrigger == null || varTrigger === false ) {
24- throw new ExpressionVariableError (
25- `$${ variable . handle } does not support being triggered by: ${ display } ` ,
26- variable . position ,
27- variable . handle
28- ) ;
29- }
32+ const optionsTrigger = options . trigger || { type : null } ;
33+ const display = options . trigger . type ? options . trigger . type . toLowerCase ( ) : "unknown trigger" ;
3034
31- if ( Array . isArray ( varTrigger ) ) {
32- if ( ! varTrigger . some ( ( id ) => id === options . trigger . id ) ) {
35+ const varTrigger = variable . triggers [ optionsTrigger . type ] ;
36+ if ( varTrigger == null || varTrigger === false ) {
3337 throw new ExpressionVariableError (
34- `$${ variable . handle } does not support this specific trigger type : ${ display } ` ,
38+ `$${ variable . handle } does not support being triggered by : ${ display } ` ,
3539 variable . position ,
3640 variable . handle
3741 ) ;
3842 }
39- }
40- }
4143
42- class ReplaceVariableManager extends EventEmitter {
43- constructor ( ) {
44- super ( ) ;
45- this . _registeredVariableHandlers = new Map ( ) ;
46- this . _variableAndAliasHandlers = new Map ( ) ;
47- this . _registeredLookupHandlers = new Map ( ) ;
44+ if ( Array . isArray ( varTrigger ) ) {
45+ if ( optionsTrigger . type === "event" ) {
46+ const additionalEvents = this . additionalVariableEvents [ variable . handle ] ?. map ( e => `${ e . eventSourceId } :${ e . eventId } ` ) ?? [ ] ;
47+ varTrigger . push ( ...additionalEvents ) ;
48+ }
49+ if ( ! varTrigger . some ( id => id === options . trigger . id ) ) {
50+ throw new ExpressionVariableError (
51+ `$${ variable . handle } does not support this specific trigger type: ${ display } ` ,
52+ variable . position ,
53+ variable . handle
54+ ) ;
55+ }
56+ }
4857 }
4958
5059 registerReplaceVariable ( variable ) {
51- if ( this . _registeredVariableHandlers . has ( variable . definition . handle ) ) {
60+ if ( this . #registeredVariableHandlers . has ( variable . definition . handle ) ) {
5261 throw new TypeError ( `A variable with the handle ${ variable . definition . handle } already exists.` ) ;
5362 }
54- this . _registeredVariableHandlers . set ( variable . definition . handle , {
63+ this . #registeredVariableHandlers . set ( variable . definition . handle , {
5564 definition : variable . definition ,
5665 handle : variable . definition . handle ,
5766 argsCheck : variable . argsCheck ,
5867 evaluator : variable . evaluator ,
5968 triggers : variable . definition . triggers
6069 } ) ;
6170
62- this . _variableAndAliasHandlers = this . _generateVariableAndAliasHandlers ( ) ;
71+ this . #variableAndAliasHandlers = this . _generateVariableAndAliasHandlers ( ) ;
6372
6473 logger . debug ( `Registered replace variable ${ variable . definition . handle } ` ) ;
6574
6675 this . emit ( "replaceVariableRegistered" , variable ) ;
6776
6877 frontendCommunicator . send ( "replace-variable-registered" , variable . definition ) ;
6978 }
79+
7080 getReplaceVariables ( ) {
7181 // Map register variables Map to array
72- const registeredVariables = this . _registeredVariableHandlers ;
82+ const registeredVariables = this . #registeredVariableHandlers ;
7383 const variables = [ ] ;
7484 /* eslint-disable-next-line @typescript-eslint/no-unused-vars */
7585 for ( const [ key , value ] of registeredVariables ) {
7686 variables . push ( value ) ;
7787 }
7888 return variables ;
7989 }
90+
8091 getVariableHandlers ( ) {
81- return this . _registeredVariableHandlers ;
92+ return this . #registeredVariableHandlers ;
8293 }
8394
8495 registerLookupHandler ( prefix , lookup ) {
85- this . _registeredLookupHandlers . set ( prefix , lookup ) ;
96+ this . #registeredLookupHandlers . set ( prefix , lookup ) ;
8697 }
8798
8899 _generateVariableAndAliasHandlers ( ) {
89- return Array . from ( this . _registeredVariableHandlers . entries ( ) ) . reduce ( ( map , [ mainHandle , varConfig ] ) => {
100+ return Array . from ( this . #registeredVariableHandlers . entries ( ) ) . reduce ( ( map , [ mainHandle , varConfig ] ) => {
90101 map . set ( mainHandle , varConfig ) ;
91102 if ( varConfig . definition . aliases ) {
92103 varConfig . definition . aliases . forEach ( ( alias ) => {
@@ -103,12 +114,12 @@ class ReplaceVariableManager extends EventEmitter {
103114 evaluateText ( input , metadata , trigger , onlyValidate ) {
104115 if ( input . includes ( "$" ) ) {
105116 return expressionish ( {
106- handlers : this . _variableAndAliasHandlers ,
117+ handlers : this . #variableAndAliasHandlers ,
107118 expression : input ,
108119 metadata,
109120 trigger,
110- preeval,
111- lookups : this . _registeredLookupHandlers ,
121+ preeval : ( options , variable ) => this . #preeval ( options , variable ) ,
122+ lookups : this . #registeredLookupHandlers ,
112123 onlyValidate : ! ! onlyValidate
113124 } ) ;
114125 }
@@ -185,12 +196,22 @@ class ReplaceVariableManager extends EventEmitter {
185196
186197 return errors ;
187198 }
199+
200+ addEventToVariable ( variableHandle , eventSourceId , eventId ) {
201+ const additionalEvents = this . additionalVariableEvents [ variableHandle ] ?? [ ] ;
202+
203+ additionalEvents . push ( { eventSourceId, eventId } ) ;
204+
205+ this . additionalVariableEvents [ variableHandle ] = additionalEvents ;
206+
207+ frontendCommunicator . send ( "additional-variable-events-updated" , this . additionalVariableEvents ) ;
208+ }
188209}
189210
190211const manager = new ReplaceVariableManager ( ) ;
191212
192213// custom variable shorthand
193- manager . registerLookupHandler ( "$" , ( name ) => ( {
214+ manager . registerLookupHandler ( "$" , name => ( {
194215 evaluator : ( trigger , ...path ) => {
195216 let result = getCustomVariable ( name ) ;
196217 for ( const item of path ) {
@@ -204,7 +225,7 @@ manager.registerLookupHandler("$", (name) => ({
204225} ) ) ;
205226
206227// Effect Output shorthand
207- manager . registerLookupHandler ( "&" , ( name ) => ( {
228+ manager . registerLookupHandler ( "&" , name => ( {
208229 evaluator : ( trigger , ...path ) => {
209230 let result = trigger . effectOutputs ;
210231 if ( result != null ) {
@@ -222,15 +243,15 @@ manager.registerLookupHandler("&", (name) => ({
222243} ) ) ;
223244
224245// Preset effect Args shorthand
225- manager . registerLookupHandler ( "#" , ( name ) => ( {
246+ manager . registerLookupHandler ( "#" , name => ( {
226247 evaluator : ( trigger ) => {
227248 const arg = ( trigger . metadata ?. presetListArgs || { } ) [ name ] ;
228249 return arg == null ? null : arg ;
229250 }
230251} ) ) ;
231252
232253// Macro Args shorthand
233- manager . registerLookupHandler ( "^" , ( name ) => ( {
254+ manager . registerLookupHandler ( "^" , name => ( {
234255 evaluator : ( trigger , ...args ) => {
235256 const { macroArgs, macroNamedArgs } = trigger ;
236257 if (
@@ -239,7 +260,7 @@ manager.registerLookupHandler("^", (name) => ({
239260 macroNamedArgs != null &&
240261 typeof name === "string"
241262 ) {
242- const namedArgIdx = macroNamedArgs . findIndex ( ( item ) => item === name ) ;
263+ const namedArgIdx = macroNamedArgs . findIndex ( item => item === name ) ;
243264 if ( namedArgIdx > - 1 ) {
244265 return macroArgs [ namedArgIdx ] ;
245266 }
@@ -248,7 +269,7 @@ manager.registerLookupHandler("^", (name) => ({
248269} ) ) ;
249270
250271// Macro shorthand
251- manager . registerLookupHandler ( "%" , ( name ) => ( {
272+ manager . registerLookupHandler ( "%" , name => ( {
252273 evaluator : ( trigger , ...macroArgs ) => {
253274 const macro = macroManager . getMacroByName ( name ) ;
254275 if ( macro != null ) {
@@ -265,8 +286,8 @@ manager.registerLookupHandler("%", (name) => ({
265286frontendCommunicator . on ( "getReplaceVariableDefinitions" , ( ) => {
266287 logger . debug ( "got 'get all vars' request" ) ;
267288 return Array . from ( manager . getVariableHandlers ( ) . values ( ) )
268- . map ( ( v ) => v . definition )
269- . filter ( ( v ) => ! v . hidden ) ;
289+ . map ( v => v . definition )
290+ . filter ( v => ! v . hidden ) ;
270291} ) ;
271292
272293frontendCommunicator . onAsync ( "validateVariables" , async ( eventData ) => {
@@ -283,4 +304,9 @@ frontendCommunicator.onAsync("validateVariables", async (eventData) => {
283304 return errors ;
284305} ) ;
285306
307+ frontendCommunicator . on ( "get-additional-variable-events" , ( ) => {
308+ logger . debug ( "got 'get-additional-variable-events' request" ) ;
309+ return manager . additionalVariableEvents ;
310+ } ) ;
311+
286312module . exports = manager ;
0 commit comments