@statedelta-actions/actions 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @statedelta-actions/actions
2
2
 
3
+ ## 0.9.0
4
+
5
+ ### Minor Changes
6
+
7
+ - Remove JIT genérico (`buildDirectiveExecutor`) — interpreter assume como `_directiveExecutor` em todos os modos.
8
+
9
+ **Bug fix:** `engine.runDirectives` em mode `"jit"` ou após auto-promote em `"auto"` deixava de tratar diretivas reservadas (`const`/`let`/`return`/`throw`/`if`), `as`, `halt`, `catch`, e chamava `resolve(ctx)` sem `scope`. Sub-blocos de handlers com `subDirectives` (ex: `simulate`) perdiam `data`, bindings e refs léxicas silenciosamente. Interpreter passa a cobrir todos os caminhos com SSOT.
10
+
11
+ **Breaking de surface (actions, sdk):** exports públicos `buildDirectiveExecutor` e `GeneratedDirectiveExecutor` removidos.
12
+
13
+ **Decisão arquitetural:** ADR-031 documenta o JIT genérico como `Deferred` — reabrir só com benchmark mostrando gargalo real no `_directiveExecutor`.
14
+
3
15
  ## 0.8.0
4
16
 
5
17
  ### Minor Changes
package/README.md CHANGED
@@ -128,9 +128,12 @@ const handlers = {
128
128
  | Fase | Quando | Propósito |
129
129
  |------|--------|-----------|
130
130
  | `validate` | Register | Validação estrutural (rejeita diretivas malformadas) |
131
- | `execute` | Runtime | Processa a diretiva e retorna resultado |
131
+ | `execute` | Runtime | Floor — processa a diretiva e retorna resultado |
132
+ | `executeAsync` | Runtime | Variante opcional — usada em actions transitivamente async (ver [Handler Multi-Variant](#handler-multi-variant)) |
133
+ | `executeInteractive` | Runtime | Variante opcional — usada em actions transitivamente interactive |
132
134
  | `analyze` | — | Consumido pelo `ActionAnalyzer` externo, não pelo engine |
133
135
  | `async` (flag) | Construct | Marca handler como assíncrono (opt-in explícito) |
136
+ | `interactive` (flag) | Construct | Marca handler como interactive (opt-in explícito) |
134
137
  | `subDirectives` | Register | Declara campos com sub-arrays que entram no grafo |
135
138
 
136
139
  ### Sub-Directives — handlers com filhos no grafo
@@ -289,6 +292,65 @@ engine.invoke("anything"); // throws — use invokeAsync
289
292
  // action que usa `fetchDB` → wrapper async, await no handler
290
293
  ```
291
294
 
295
+ ### Handler Multi-Variant
296
+
297
+ Para **wrapper handlers** (`simulate`, `try_`, `transaction`) que delegam execução do sub-bloco, o modo correto depende do **conteúdo concreto do sub-bloco**, não de algo intrínseco ao handler. Em JS, uma função tem shape fixo na definição (`function` / `async function` / `function*` / `async function*`), então um único `execute` não consegue ser polimórfico.
298
+
299
+ Solução: o handler declara **3 variantes opcionais**. O engine escolhe a certa em compile-time da action via mini-graph:
300
+
301
+ ```typescript
302
+ const simulate = {
303
+ subDirectives: { directives: { required: true } },
304
+
305
+ // Floor — usado em actions sync transitivas
306
+ execute(d, frame, engine) {
307
+ beginTx(frame.ctx);
308
+ const r = engine.runDirectives(d.directives, frame);
309
+ if (!r.success) rollback(frame.ctx); else commit(frame.ctx);
310
+ return { ok: r.success, data: r.data };
311
+ },
312
+
313
+ // Opcional — usado em actions async transitivas
314
+ async executeAsync(d, frame, engine) {
315
+ beginTx(frame.ctx);
316
+ const r = await engine.runDirectivesAsync(d.directives, frame);
317
+ if (!r.success) rollback(frame.ctx); else commit(frame.ctx);
318
+ return { ok: r.success, data: r.data };
319
+ },
320
+
321
+ // Opcional — usado em actions interactive transitivas (propaga pauses)
322
+ async *executeInteractive(d, frame, engine) {
323
+ beginTx(frame.ctx);
324
+ const session = engine.runDirectivesInteractive(d.directives, frame);
325
+ const r = yield* session;
326
+ if (!r.success) rollback(frame.ctx); else commit(frame.ctx);
327
+ return { ok: r.success, data: r.data };
328
+ },
329
+ };
330
+ ```
331
+
332
+ **Regras de seleção** (compile-time da action, via mini-graph):
333
+
334
+ | Action transitivamente | Variante chamada |
335
+ |------------------------|------------------|
336
+ | sync | `execute` (floor) |
337
+ | async | `executeAsync` se presente, senão `execute` (engine awaita — `await` em sync é no-op) |
338
+ | interactive | `executeInteractive` se presente, senão `execute` (deve ser generator ou flag `interactive: true`) |
339
+
340
+ **Custo runtime: zero.** A escolha de variante acontece 1x no compile da action. JIT consome `$.h[type]` direto — código gerado é idêntico ao single-mode. Benchmark confirma: multi-variant vs single-mode = **+1.23% (dentro do ruído)**.
341
+
342
+ **Convenção:** `executeInteractive` é sempre `async function*` (async generator) — cobre os 2 modos interactive (sync+interactive e async+interactive) com 1 implementação. `await` em valor sync é no-op (V8 otimiza).
343
+
344
+ **Capability vs Mode.** Variantes opcionais (`executeAsync`, `executeInteractive`) são **capabilities** — declaram "o handler pode ser chamado nesse modo se necessário". NÃO entram no `asyncHandlerSet`/`interactiveHandlerSet` do mini-graph. O **modo** do handler em si é determinado pelo floor `execute` + flags. Isso preserva o princípio "actions sync não pagam overhead async/interactive".
345
+
346
+ **Validação register-time.** Se uma action é transitivamente interactive (sub-bloco contém `pause`, handler interactive, ou call pra action interactive) e o wrapper handler usado **não tem suporte interactive** (`executeInteractive` ausente + `execute` não é generator + flag `interactive: true` não set), o register lança erro `MISSING_INTERACTIVE_VARIANT` e remove a action do registry (rollback). Leaf handlers (sem `subDirectives`) não precisam de variante interactive — JIT chama `execute` regular mesmo em action interactive.
347
+
348
+ **Quem precisa de variantes?** Wrapper handlers que delegam o sub-bloco. Leaf handlers (`state`, `emit`, `log`, `fetchUser`) continuam single-mode normal.
349
+
350
+ **Inversão do "function coloring problem".** Em JS, uma função declarada async contamina toda a cadeia de callers. Aqui o engine resolve a contaminação automaticamente — o customer escreve `simulate` 1x com variantes, e o engine decide qual chamar baseado em quem usa. Mesmo nome, múltiplos modos.
351
+
352
+ Ver [ADR-030](./docs/DECISIONS.md#adr-030-handler-multi-variant--execute--executeasync--executeinteractive) para detalhes da decisão.
353
+
292
354
  ## Ações
293
355
 
294
356
  Uma ação é um ID mais diretivas:
@@ -778,10 +840,6 @@ import type { Listener } from "@statedelta-actions/actions";
778
840
  // Interpreter
779
841
  import { createDirectiveInterpreter } from "@statedelta-actions/actions";
780
842
 
781
- // JIT (generic)
782
- import { buildDirectiveExecutor } from "@statedelta-actions/actions";
783
- import type { GeneratedDirectiveExecutor } from "@statedelta-actions/actions";
784
-
785
843
  // JIT (per-action)
786
844
  import { buildActionExecutor } from "@statedelta-actions/actions";
787
845
  import type { GeneratedActionExecutor } from "@statedelta-actions/actions";
package/dist/index.cjs CHANGED
@@ -1,9 +1,5 @@
1
- 'use strict';var core=require('@statedelta-actions/core');function We(i,e){let t;for(;;){let r=i.next(t);if(r.done)return r.value;t=e?e(r.value):void 0;}}async function Je(i,e){let t;for(;;){let r=await i.next(t);if(r.done)return r.value;t=e?await e(r.value):void 0;}}function Ye(i){let e=0;return ()=>{if(!(e>=i.length))return i[e++]}}var X=class{_listeners=new Map;on(e,t){let r=this._listeners.get(e);r||(r=new Set,this._listeners.set(e,r)),r.add(t);let o=false;return ()=>{o||(o=true,r.delete(t),r.size===0&&this._listeners.delete(e));}}once(e,t){let r=this.on(e,o=>{r(),t(o);});return r}emit(e,t){let r=this._listeners.get(e);if(!r||r.size===0)return;let o=[...r];for(let n=0;n<o.length;n++)try{o[n](t);}catch(s){console.error(`[SimpleEmitter] Listener error on "${e}":`,s);}}listenerCount(e){return this._listeners.get(e)?.size??0}hasListeners(e){let t=this._listeners.get(e);return t!==void 0&&t.size>0}off(e){this._listeners.delete(e);}removeAllListeners(){this._listeners.clear();}};var N=new Set(["const","let","return","throw","pause","if"]);function ke(i,e,t,r){let o=[];return se(i.directives,e,t,r,"directive",o,i.id),o}function se(i,e,t,r,o,n,s){for(let a=0;a<i.length;a++){let c=i[a],u=c[r],d=`${o}[${a}]`;if(!u){n.push(`${d}: missing type field "${r}"`);continue}if(u==="if"){let g=c.cond;typeof g!="function"&&typeof g!="boolean"&&n.push(`${d}: "if" requires cond as function or boolean`);let A=c.then;Array.isArray(A)?se(A,e,t,r,`${d}.then`,n,s):n.push(`${d}: "if" requires then as array`);let D=c.else;D!==void 0&&(Array.isArray(D)?se(D,e,t,r,`${d}.else`,n,s):n.push(`${d}.else: must be array`));continue}if(N.has(u))continue;if(!e[u])throw new Error(`Action "${s}" ${d}: no handler registered for type "${u}". Register the handler in createActionEngine({ handlers }) before registering this action.`);let h=t.get(u);if(h?.validate)try{let g=h.validate(c);g&&!g.valid&&n.push(`${d}: ${g.error??"validation failed"}`);}catch(g){n.push(`${d}: validate threw: ${g}`);}let f=c.catch;if(f&&Array.isArray(f))for(let g=0;g<f.length;g++){let D=f[g][r];if(!(D&&N.has(D))&&D&&!e[D])throw new Error(`Action "${s}" ${d}.catch[${g}]: no handler registered for type "${D}". Register the handler in createActionEngine({ handlers }) before registering this action.`)}let p=h?.subDirectives;if(p===void 0)continue;let l=Object.keys(p);for(let g=0;g<l.length;g++){let A=l[g];if(A==="catch")continue;let D=c[A];if(D===void 0){if(p[A].required)throw new Error(`Action "${s}" ${d}: handler "${u}" requires sub-directives field "${A}"`);continue}if(!Array.isArray(D))throw new Error(`Action "${s}" ${d}.${A}: must be an array of directives`);se(D,e,t,r,`${d}.${A}`,n,s);}}}var Qe=new Map;function B(i,e,t=Qe){let r=i.length,o=new Array(r);for(let n=0;n<r;n++){let s=i[n],a=s[e],c=s,u=false,d=s.catch;if(Array.isArray(d)&&d.length>0&&(c={...c,catch:B(d,e,t)},u=true),a==="if"){let h=s.then;Array.isArray(h)&&h.length>0&&(c={...c,then:B(h,e,t)},u=true);let f=s.else;Array.isArray(f)&&f.length>0&&(c={...c,else:B(f,e,t)},u=true);}else if(a!==void 0){let h=t.get(a);if(h!==void 0)for(let f=0;f<h.length;f++){let p=h[f],l=s[p];!Array.isArray(l)||l.length===0||(c={...c,[p]:B(l,e,t)},u=true);}}o[n]=u?c:s;}return o}function Ee(i,e,t,r,o,n,s){let a=new Set;return Z(i,e,t,r,o,n,s,a),a}function Z(i,e,t,r,o,n,s,a){for(let c of i){let u=c[e];if(u!==void 0){let f=t.get(u);if(f!==void 0&&f.subDirectives!==void 0){let p=r.get(u);if(p!==void 0){let l=false;for(let g=0;g<p.length;g++){let A=c[p[g]];if(!(!Array.isArray(A)||A.length===0)&&ee(A,e,r,o,n)){l=true;break}}l&&(f.executeInteractive!==void 0||f.interactive===true||s(f.execute)||a.add(u));}}}let d=c.catch;if(Array.isArray(d)&&d.length>0&&Z(d,e,t,r,o,n,s,a),u==="if"){let f=c.then;Array.isArray(f)&&f.length>0&&Z(f,e,t,r,o,n,s,a);let p=c.else;Array.isArray(p)&&p.length>0&&Z(p,e,t,r,o,n,s,a);continue}if(u===void 0)continue;let h=r.get(u);if(h!==void 0)for(let f=0;f<h.length;f++){let p=c[h[f]];!Array.isArray(p)||p.length===0||Z(p,e,t,r,o,n,s,a);}}}function ee(i,e,t,r,o){for(let n of i){let s=n[e];if(s==="pause"||s!==void 0&&r.has(s)||s==="action"&&typeof n.id=="string"&&o(n.id))return true;let a=n.catch;if(Array.isArray(a)&&a.length>0&&ee(a,e,t,r,o))return true;if(s==="if"){let u=n.then;if(Array.isArray(u)&&u.length>0&&ee(u,e,t,r,o))return true;let d=n.else;if(Array.isArray(d)&&d.length>0&&ee(d,e,t,r,o))return true;continue}if(s===void 0)continue;let c=t.get(s);if(c!==void 0)for(let u=0;u<c.length;u++){let d=n[c[u]];if(!(!Array.isArray(d)||d.length===0)&&ee(d,e,t,r,o))return true}}return false}function j(i,e,t,r,o,n){let s=i.name;if(typeof i.resolve=="function")try{t[s]=i.resolve(e,t).value;}catch(a){r.push({directiveIndex:o,error:`Binding resolve: ${a}`}),n.errors++;}else t[s]=i.value;}function L(i,e,t,r,o,n){let s=i.value;if(typeof i.resolve=="function")try{let a=i.resolve(e,t);s="value"in a?a.value:"return"in a?a.return:s;}catch(a){return r.push({directiveIndex:o,error:`Control resolve: ${a}`}),n.errors++,{ok:false}}return {ok:true,data:s}}function O(i,e,t,r,o,n){let s=i.message;if(typeof i.resolve=="function")try{let a=i.resolve(e,t);s="message"in a?a.message:"throw"in a?a.throw:s;}catch(a){return r.push({directiveIndex:o,error:`Control resolve: ${a}`}),n.errors++,{ok:false}}return {ok:true,data:s}}function V(i,e,t,r,o,n,s,a,c,u,d){let h;try{let p=i.cond;h=typeof p=="function"?!!p(e,t):!!p;}catch(p){c.push({directiveIndex:u,error:`if cond: ${p}`}),d.errors++;return}let f=h?i.then:i.else;if(Array.isArray(f)&&f.length>0){let p=Math.min(f.length,a),l=o?n:s;r.push({dirs:f,i:0,len:p,topLevelIfIndex:l});}}function z(i,e,t){let r=core.processIntercept(i,"beforeDirective");if(r.action===core.Intercept.SKIP)return {action:"skip"};if(r.action===core.Intercept.ABORT)return {action:"abort",reason:r.abortReason};let o=t,n=e;return r.ctx!==void 0&&(o=t.withCtx(r.ctx)),r.directive!==void 0&&(n=r.directive),{action:"continue",directive:n,dFrame:o}}function G(i,e,t,r,o){i.push({directiveIndex:t,error:`Hook ${r}: ${o}`}),e.errors++;}function S(i,e,t,r,o){return {success:false,aborted:true,abortedBy:i,appliedCount:e.appliedCount,skippedCount:e.skippedCount,errors:e.errors,processedCount:t,totalCount:r,counters:e.counters,data:o}}function K(i,e,t,r){return {success:true,aborted:true,abortedBy:"halt",appliedCount:i.appliedCount,skippedCount:i.skippedCount,errors:i.errors,processedCount:e,totalCount:t,counters:i.counters,data:r}}function U(i,e,t,r){return {success:true,aborted:false,appliedCount:i.appliedCount,skippedCount:i.skippedCount,errors:i.errors,processedCount:e,totalCount:t,counters:i.counters,data:r}}function q(i,e){return {success:true,aborted:false,appliedCount:i.appliedCount,skippedCount:i.skippedCount,errors:i.errors,processedCount:e,totalCount:e,counters:i.counters}}function W(i,e,t,r){return {success:r.success,aborted:true,abortedBy:r.abortedBy,appliedCount:i.appliedCount,skippedCount:i.skippedCount,errors:i.errors,processedCount:e,totalCount:t,counters:i.counters,data:r.data}}function J(i,e,t,r,o){if(typeof i.resolve!="function")return i;try{let n=i.resolve(e.ctx,e.scope);return {...i,...n}}catch(n){return t.push({directiveIndex:r,error:`Directive resolve: ${n}`}),o.errors++,null}}function Y(i,e){return [{dirs:i,i:0,len:e,topLevelIfIndex:-1}]}function Ze(i){let e=i.filledNames.has("beforeDirective"),t=i.filledNames.has("afterDirective"),r=i.filledNames.has("onDirectivesComplete");return function(n,s,a,c,u,d,h){let f=Math.min(n.length,h),p=[],l={appliedCount:0,skippedCount:0,errors:p,counters:s.counters},{scope:g}=s,A=s.ctx,D=Y(n,f),R=0;for(;D.length>0;){let b=D[D.length-1];if(b.i>=b.len){D.pop();continue}let I=b.i++,T=b.topLevelIfIndex!==-1,_=T?b.topLevelIfIndex:I;T||(R=I+1);let C=b.dirs[I],k=C[u];if(k==="const"||k==="let"){j(C,A,g,p,_,l.counters);continue}if(k==="return"){let v=L(C,A,g,p,_,l.counters);if(!v.ok)continue;return U(l,R,f,v.data)}if(k==="throw"){let v=O(C,A,g,p,_,l.counters);if(!v.ok)continue;return S("throw",l,R,f,v.data)}if(k==="if"){V(C,A,g,D,T,b.topLevelIfIndex,I,h,p,_,l.counters);continue}let x=C,E=s;if(e)try{let v=c.beforeDirective(x,s),y=z(v,x,s);if(y.action==="skip"){l.skippedCount++,l.counters.directivesSkipped++;continue}if(y.action==="abort"){let w=R===0?I:R-1;return S(y.reason,l,w,f)}x=y.directive,E=y.dFrame;}catch(v){G(p,l.counters,_,"beforeDirective",v);}let H=J(x,E,p,_,l.counters);if(H===null)continue;x=H;let M=x[u],F=M?a[M]:void 0;if(!F){p.push({directiveIndex:_,error:`No handler for directive type: ${M??"undefined"}`}),l.counters.errors++;continue}let m;try{m=F(x,E,d);}catch(v){m={ok:false,error:String(v)};}let $=R;if(m.ok){if(l.appliedCount++,l.counters.directivesApplied++,typeof x.as=="string"&&(g[x.as]=m.data),m.halt)return K(l,$,f,m.data)}else {if(m.halt)return S("halt",l,$,f,m.data);let v=x.catch;if(Array.isArray(v)&&v.length>0){g.$exception=m.error??"handler failed";let y=d.runDirectives(v,E);l.appliedCount+=y.appliedCount;for(let w=0;w<y.errors.length;w++)p.push(y.errors[w]);if(y.aborted)return W(l,$,f,y)}else p.push({directiveIndex:_,error:m.error??"handler failed"}),l.counters.errors++;}if(t)try{if(c.afterDirective(x,m,E)==="abort")return S("afterDirective",l,$,f)}catch(v){G(p,l.counters,_,"afterDirective",v);}}let P=q(l,f);if(r)try{c.onDirectivesComplete(P);}catch{}return P}}function et(i){let e=i.filledNames.has("beforeDirective"),t=i.filledNames.has("afterDirective"),r=i.filledNames.has("onDirectivesComplete");return async function(n,s,a,c,u,d,h){let f=Math.min(n.length,h),p=[],l={appliedCount:0,skippedCount:0,errors:p,counters:s.counters},{scope:g}=s,A=s.ctx,D=Y(n,f),R=0;for(;D.length>0;){let b=D[D.length-1];if(b.i>=b.len){D.pop();continue}let I=b.i++,T=b.topLevelIfIndex!==-1,_=T?b.topLevelIfIndex:I;T||(R=I+1);let C=b.dirs[I],k=C[u];if(k==="const"||k==="let"){j(C,A,g,p,_,l.counters);continue}if(k==="return"){let v=L(C,A,g,p,_,l.counters);if(!v.ok)continue;return U(l,R,f,v.data)}if(k==="throw"){let v=O(C,A,g,p,_,l.counters);if(!v.ok)continue;return S("throw",l,R,f,v.data)}if(k==="if"){V(C,A,g,D,T,b.topLevelIfIndex,I,h,p,_,l.counters);continue}let x=C,E=s;if(e)try{let v=await c.beforeDirective(x,s),y=z(v,x,s);if(y.action==="skip"){l.skippedCount++,l.counters.directivesSkipped++;continue}if(y.action==="abort"){let w=R===0?I:R-1;return S(y.reason,l,w,f)}x=y.directive,E=y.dFrame;}catch(v){G(p,l.counters,_,"beforeDirective",v);}let H=J(x,E,p,_,l.counters);if(H===null)continue;x=H;let M=x[u],F=M?a[M]:void 0;if(!F){p.push({directiveIndex:_,error:`No handler for directive type: ${M??"undefined"}`}),l.counters.errors++;continue}let m;try{m=await F(x,E,d);}catch(v){m={ok:false,error:String(v)};}let $=R;if(m.ok){if(l.appliedCount++,l.counters.directivesApplied++,typeof x.as=="string"&&(g[x.as]=m.data),m.halt)return K(l,$,f,m.data)}else {if(m.halt)return S("halt",l,$,f,m.data);let v=x.catch;if(Array.isArray(v)&&v.length>0){g.$exception=m.error??"handler failed";let y=await d.runDirectivesAsync(v,E);l.appliedCount+=y.appliedCount;for(let w=0;w<y.errors.length;w++)p.push(y.errors[w]);if(y.aborted)return W(l,$,f,y)}else p.push({directiveIndex:_,error:m.error??"handler failed"}),l.counters.errors++;}if(t)try{if(await c.afterDirective(x,m,E)==="abort")return S("afterDirective",l,$,f)}catch(v){G(p,l.counters,_,"afterDirective",v);}}let P=q(l,f);if(r)try{await c.onDirectivesComplete(P);}catch{}return P}}function oe(i,e){return e?et(i):Ze(i)}function de(i){if(i===null||typeof i!="object")return null;if(typeof i.next=="function")return i;let e=i.iterator;return e!=null&&typeof e=="object"&&typeof e.next=="function"?e:null}function fe(i,e,t){return {source:"pause",directive:i,frame:e,index:t,payload:{message:i.message}}}function pe(i){return i===false||i==="abort"||i==="cancel"}function ve(i,e,t,r){r.directivesApplied++,typeof i.as=="string"&&e!==void 0&&(t[i.as]=e);}function tt(i){let e=i.filledNames.has("beforeDirective"),t=i.filledNames.has("afterDirective"),r=i.filledNames.has("onDirectivesComplete");return function*(n,s,a,c,u,d,h){let f=Math.min(n.length,h),p=[],l={appliedCount:0,skippedCount:0,errors:p,counters:s.counters},{scope:g}=s,A=s.ctx,D=Y(n,f),R=0;for(;D.length>0;){let b=D[D.length-1];if(b.i>=b.len){D.pop();continue}let I=b.i++,T=b.topLevelIfIndex!==-1,_=T?b.topLevelIfIndex:I;T||(R=I+1);let C=b.dirs[I],k=C[u];if(k==="const"||k==="let"){j(C,A,g,p,_,l.counters);continue}if(k==="return"){let v=L(C,A,g,p,_,l.counters);if(!v.ok)continue;return U(l,R,f,v.data)}if(k==="throw"){let v=O(C,A,g,p,_,l.counters);if(!v.ok)continue;return S("throw",l,R,f,v.data)}if(k==="pause"){let v=R,y=yield fe(C,s,_);if(pe(y))return S("pause",l,v,f,y);l.appliedCount++,ve(C,y,g,l.counters);continue}if(k==="if"){V(C,A,g,D,T,b.topLevelIfIndex,I,h,p,_,l.counters);continue}let x=C,E=s;if(e)try{let v=c.beforeDirective(x,s),y=z(v,x,s);if(y.action==="skip"){l.skippedCount++,l.counters.directivesSkipped++;continue}if(y.action==="abort"){let w=R===0?I:R-1;return S(y.reason,l,w,f)}x=y.directive,E=y.dFrame;}catch(v){G(p,l.counters,_,"beforeDirective",v);}let H=J(x,E,p,_,l.counters);if(H===null)continue;x=H;let M=x[u],F=M?a[M]:void 0;if(!F){p.push({directiveIndex:_,error:`No handler for directive type: ${M??"undefined"}`}),l.counters.errors++;continue}let m;try{let v=F(x,E,d),y=de(v);y!==null?m=yield*y:m=v;}catch(v){m={ok:false,error:String(v)};}let $=R;if(m.ok){if(l.appliedCount++,l.counters.directivesApplied++,typeof x.as=="string"&&(g[x.as]=m.data),m.halt)return K(l,$,f,m.data)}else {if(m.halt)return S("halt",l,$,f,m.data);let v=x.catch;if(Array.isArray(v)&&v.length>0){g.$exception=m.error??"handler failed";let y=d.runDirectives(v,E);l.appliedCount+=y.appliedCount;for(let w=0;w<y.errors.length;w++)p.push(y.errors[w]);if(y.aborted)return W(l,$,f,y)}else p.push({directiveIndex:_,error:m.error??"handler failed"}),l.counters.errors++;}if(t)try{if(c.afterDirective(x,m,E)==="abort")return S("afterDirective",l,$,f)}catch(v){G(p,l.counters,_,"afterDirective",v);}}let P=q(l,f);if(r)try{c.onDirectivesComplete(P);}catch{}return P}}function rt(i){let e=i.filledNames.has("beforeDirective"),t=i.filledNames.has("afterDirective"),r=i.filledNames.has("onDirectivesComplete");return async function*(n,s,a,c,u,d,h){let f=Math.min(n.length,h),p=[],l={appliedCount:0,skippedCount:0,errors:p,counters:s.counters},{scope:g}=s,A=s.ctx,D=Y(n,f),R=0;for(;D.length>0;){let b=D[D.length-1];if(b.i>=b.len){D.pop();continue}let I=b.i++,T=b.topLevelIfIndex!==-1,_=T?b.topLevelIfIndex:I;T||(R=I+1);let C=b.dirs[I],k=C[u];if(k==="const"||k==="let"){j(C,A,g,p,_,l.counters);continue}if(k==="return"){let v=L(C,A,g,p,_,l.counters);if(!v.ok)continue;return U(l,R,f,v.data)}if(k==="throw"){let v=O(C,A,g,p,_,l.counters);if(!v.ok)continue;return S("throw",l,R,f,v.data)}if(k==="pause"){let v=R,y=yield fe(C,s,_);if(pe(y))return S("pause",l,v,f,y);l.appliedCount++,ve(C,y,g,l.counters);continue}if(k==="if"){V(C,A,g,D,T,b.topLevelIfIndex,I,h,p,_,l.counters);continue}let x=C,E=s;if(e)try{let v=await c.beforeDirective(x,s),y=z(v,x,s);if(y.action==="skip"){l.skippedCount++,l.counters.directivesSkipped++;continue}if(y.action==="abort"){let w=R===0?I:R-1;return S(y.reason,l,w,f)}x=y.directive,E=y.dFrame;}catch(v){G(p,l.counters,_,"beforeDirective",v);}let H=J(x,E,p,_,l.counters);if(H===null)continue;x=H;let M=x[u],F=M?a[M]:void 0;if(!F){p.push({directiveIndex:_,error:`No handler for directive type: ${M??"undefined"}`}),l.counters.errors++;continue}let m;try{let v=await F(x,E,d),y=de(v);y!==null?m=yield*y:m=v;}catch(v){m={ok:false,error:String(v)};}let $=R;if(m.ok){if(l.appliedCount++,l.counters.directivesApplied++,typeof x.as=="string"&&(g[x.as]=m.data),m.halt)return K(l,$,f,m.data)}else {if(m.halt)return S("halt",l,$,f,m.data);let v=x.catch;if(Array.isArray(v)&&v.length>0){g.$exception=m.error??"handler failed";let y=await d.runDirectivesAsync(v,E);l.appliedCount+=y.appliedCount;for(let w=0;w<y.errors.length;w++)p.push(y.errors[w]);if(y.aborted)return W(l,$,f,y)}else p.push({directiveIndex:_,error:m.error??"handler failed"}),l.counters.errors++;}if(t)try{if(await c.afterDirective(x,m,E)==="abort")return S("afterDirective",l,$,f)}catch(v){G(p,l.counters,_,"afterDirective",v);}}let P=q(l,f);if(r)try{await c.onDirectivesComplete(P);}catch{}return P}}function he(i,e){return e?rt(i):tt(i)}function ye(i,e=i.hasAnyAsync){let{filledNames:t}=i,r=d=>t.has(d),o=d=>i.asyncNames.has(d)?"await ":"",n=e?"await ":"",s=[];for(let d of t)s.push(`const ${d} = directiveHooks.${d};`);s.push("const len = Math.min(directives.length, maxDirectives);"),s.push("const errors = []; let appliedCount = 0; let skippedCount = 0;"),s.push("const counters = frame.counters;"),s.push("for (let i = 0; i < len; i++) {"),s.push(" let directive = directives[i];"),r("beforeDirective")?(s.push(" let _df = frame;"),s.push(" try {"),s.push(` const _bd = ${o("beforeDirective")}beforeDirective(directive, frame);`),s.push(' if (_bd === "skip") { skippedCount++; counters.directivesSkipped++; continue; }'),s.push(' if (_bd === "abort") return { success: false, aborted: true, abortedBy: "beforeDirective", appliedCount, skippedCount, errors, processedCount: i, totalCount: len, counters };'),s.push(' if (typeof _bd === "object" && _bd !== null) {'),s.push(' if ("abort" in _bd) return { success: false, aborted: true, abortedBy: _bd.abort, appliedCount, skippedCount, errors, processedCount: i, totalCount: len, counters };'),s.push(' if ("ctx" in _bd) _df = frame.withCtx(_bd.ctx);'),s.push(' if ("directive" in _bd) directive = _bd.directive;'),s.push(" }"),s.push(' } catch (_e) { errors.push({ directiveIndex: i, error: "Hook beforeDirective: " + _e }); counters.errors++; }')):s.push(" const _df = frame;"),s.push(' if (typeof directive.resolve === "function") {'),s.push(" try { const _r = directive.resolve(_df.ctx); directive = Object.assign({}, directive, _r); }"),s.push(' catch (_e) { errors.push({ directiveIndex: i, error: "Directive resolve: " + _e }); counters.errors++; continue; }'),s.push(" }"),s.push(" const _type = directive[typeField];"),s.push(" const _handler = _type ? handlers[_type] : undefined;"),s.push(' if (!_handler) { errors.push({ directiveIndex: i, error: "No handler for directive type: " + (_type || "undefined") }); counters.errors++; continue; }'),s.push(" let _result;"),s.push(` try { _result = ${n}_handler(directive, _df, engine); } catch (_e) { errors.push({ directiveIndex: i, error: String(_e) }); counters.errors++; continue; }`),s.push(" if (_result.ok) { appliedCount++; counters.directivesApplied++; }"),s.push(' else { errors.push({ directiveIndex: i, error: _result.error || "handler failed" }); counters.errors++; }'),r("afterDirective")&&(s.push(" try {"),s.push(` const _ad = ${o("afterDirective")}afterDirective(directive, _result, _df);`),s.push(' if (_ad === "abort") return { success: false, aborted: true, abortedBy: "afterDirective", appliedCount, skippedCount, errors, processedCount: i + 1, totalCount: len, counters };'),s.push(' } catch (_e) { errors.push({ directiveIndex: i, error: "Hook afterDirective: " + _e }); counters.errors++; }')),s.push("}"),s.push("const _finalResult = { success: true, aborted: false, appliedCount, skippedCount, errors, processedCount: len, totalCount: len, counters };"),r("onDirectivesComplete")&&s.push(`try { ${o("onDirectivesComplete")}onDirectivesComplete(_finalResult); } catch (_e) {}`),s.push("return _finalResult;");let a=s.join(`
2
- `),c=e?"async ":"";return {fn:new Function("directives","frame","handlers","directiveHooks","typeField","engine","maxDirectives",`"use strict";
3
- return (${c}() => {
4
- ${a}
5
- })();`),isAsync:e}}function ge(i,e,t){return `return{success:false,aborted:true,abortedBy:${i},appliedCount,skippedCount,errors,processedCount:${e},totalCount:${t},counters};`}function nt(i,e){return `return{success:true,aborted:true,abortedBy:"halt",appliedCount,skippedCount,errors,processedCount:${i},totalCount:${e},counters,data:_result.data};`}function it(i,e){return `return{success:false,aborted:true,abortedBy:"halt",appliedCount,skippedCount,errors,processedCount:${i},totalCount:${e},counters,data:_result.data};`}function st(i,e,t,r){i.push("const counters=frame.counters;"),i.push("const ctx=frame.ctx;"),i.push("const errors=[];"),i.push("let appliedCount=0;"),i.push("let skippedCount=0;");for(let[o,n]of e)i.push(`const ${n}=$.h[${JSON.stringify(o)}];`);t&&i.push("const _hookBefore=$.hooks.beforeDirective;"),r&&i.push("const _hookAfter=$.hooks.afterDirective;");}function ot(i,e,t,r){i.push(`const _finalResult={success:true,aborted:false,appliedCount,skippedCount,errors,processedCount:${e},totalCount:${e},counters};`),t&&i.push(`try{${r}$.hooks.onDirectivesComplete(_finalResult);}catch(_e){}`),i.push("return _finalResult;");}function ct(i,e,t){let r=`{
1
+ 'use strict';var core=require('@statedelta-actions/core');function qe(i,e){let t;for(;;){let n=i.next(t);if(n.done)return n.value;t=e?e(n.value):void 0;}}async function We(i,e){let t;for(;;){let n=await i.next(t);if(n.done)return n.value;t=e?await e(n.value):void 0;}}function Ye(i){let e=0;return ()=>{if(!(e>=i.length))return i[e++]}}var X=class{_listeners=new Map;on(e,t){let n=this._listeners.get(e);n||(n=new Set,this._listeners.set(e,n)),n.add(t);let s=false;return ()=>{s||(s=true,n.delete(t),n.size===0&&this._listeners.delete(e));}}once(e,t){let n=this.on(e,s=>{n(),t(s);});return n}emit(e,t){let n=this._listeners.get(e);if(!n||n.size===0)return;let s=[...n];for(let r=0;r<s.length;r++)try{s[r](t);}catch(o){console.error(`[SimpleEmitter] Listener error on "${e}":`,o);}}listenerCount(e){return this._listeners.get(e)?.size??0}hasListeners(e){let t=this._listeners.get(e);return t!==void 0&&t.size>0}off(e){this._listeners.delete(e);}removeAllListeners(){this._listeners.clear();}};var N=new Set(["const","let","return","throw","pause","if"]);function be(i,e,t,n){let s=[];return se(i.directives,e,t,n,"directive",s,i.id),s}function se(i,e,t,n,s,r,o){for(let a=0;a<i.length;a++){let c=i[a],u=c[n],d=`${s}[${a}]`;if(!u){r.push(`${d}: missing type field "${n}"`);continue}if(u==="if"){let g=c.cond;typeof g!="function"&&typeof g!="boolean"&&r.push(`${d}: "if" requires cond as function or boolean`);let A=c.then;Array.isArray(A)?se(A,e,t,n,`${d}.then`,r,o):r.push(`${d}: "if" requires then as array`);let D=c.else;D!==void 0&&(Array.isArray(D)?se(D,e,t,n,`${d}.else`,r,o):r.push(`${d}.else: must be array`));continue}if(N.has(u))continue;if(!e[u])throw new Error(`Action "${o}" ${d}: no handler registered for type "${u}". Register the handler in createActionEngine({ handlers }) before registering this action.`);let h=t.get(u);if(h?.validate)try{let g=h.validate(c);g&&!g.valid&&r.push(`${d}: ${g.error??"validation failed"}`);}catch(g){r.push(`${d}: validate threw: ${g}`);}let f=c.catch;if(f&&Array.isArray(f))for(let g=0;g<f.length;g++){let D=f[g][n];if(!(D&&N.has(D))&&D&&!e[D])throw new Error(`Action "${o}" ${d}.catch[${g}]: no handler registered for type "${D}". Register the handler in createActionEngine({ handlers }) before registering this action.`)}let p=h?.subDirectives;if(p===void 0)continue;let l=Object.keys(p);for(let g=0;g<l.length;g++){let A=l[g];if(A==="catch")continue;let D=c[A];if(D===void 0){if(p[A].required)throw new Error(`Action "${o}" ${d}: handler "${u}" requires sub-directives field "${A}"`);continue}if(!Array.isArray(D))throw new Error(`Action "${o}" ${d}.${A}: must be an array of directives`);se(D,e,t,n,`${d}.${A}`,r,o);}}}var Je=new Map;function B(i,e,t=Je){let n=i.length,s=new Array(n);for(let r=0;r<n;r++){let o=i[r],a=o[e],c=o,u=false,d=o.catch;if(Array.isArray(d)&&d.length>0&&(c={...c,catch:B(d,e,t)},u=true),a==="if"){let h=o.then;Array.isArray(h)&&h.length>0&&(c={...c,then:B(h,e,t)},u=true);let f=o.else;Array.isArray(f)&&f.length>0&&(c={...c,else:B(f,e,t)},u=true);}else if(a!==void 0){let h=t.get(a);if(h!==void 0)for(let f=0;f<h.length;f++){let p=h[f],l=o[p];!Array.isArray(l)||l.length===0||(c={...c,[p]:B(l,e,t)},u=true);}}s[r]=u?c:o;}return s}function ke(i,e,t,n,s,r,o){let a=new Set;return Z(i,e,t,n,s,r,o,a),a}function Z(i,e,t,n,s,r,o,a){for(let c of i){let u=c[e];if(u!==void 0){let f=t.get(u);if(f!==void 0&&f.subDirectives!==void 0){let p=n.get(u);if(p!==void 0){let l=false;for(let g=0;g<p.length;g++){let A=c[p[g]];if(!(!Array.isArray(A)||A.length===0)&&ee(A,e,n,s,r)){l=true;break}}l&&(f.executeInteractive!==void 0||f.interactive===true||o(f.execute)||a.add(u));}}}let d=c.catch;if(Array.isArray(d)&&d.length>0&&Z(d,e,t,n,s,r,o,a),u==="if"){let f=c.then;Array.isArray(f)&&f.length>0&&Z(f,e,t,n,s,r,o,a);let p=c.else;Array.isArray(p)&&p.length>0&&Z(p,e,t,n,s,r,o,a);continue}if(u===void 0)continue;let h=n.get(u);if(h!==void 0)for(let f=0;f<h.length;f++){let p=c[h[f]];!Array.isArray(p)||p.length===0||Z(p,e,t,n,s,r,o,a);}}}function ee(i,e,t,n,s){for(let r of i){let o=r[e];if(o==="pause"||o!==void 0&&n.has(o)||o==="action"&&typeof r.id=="string"&&s(r.id))return true;let a=r.catch;if(Array.isArray(a)&&a.length>0&&ee(a,e,t,n,s))return true;if(o==="if"){let u=r.then;if(Array.isArray(u)&&u.length>0&&ee(u,e,t,n,s))return true;let d=r.else;if(Array.isArray(d)&&d.length>0&&ee(d,e,t,n,s))return true;continue}if(o===void 0)continue;let c=t.get(o);if(c!==void 0)for(let u=0;u<c.length;u++){let d=r[c[u]];if(!(!Array.isArray(d)||d.length===0)&&ee(d,e,t,n,s))return true}}return false}function j(i,e,t,n,s,r){let o=i.name;if(typeof i.resolve=="function")try{t[o]=i.resolve(e,t).value;}catch(a){n.push({directiveIndex:s,error:`Binding resolve: ${a}`}),r.errors++;}else t[o]=i.value;}function L(i,e,t,n,s,r){let o=i.value;if(typeof i.resolve=="function")try{let a=i.resolve(e,t);o="value"in a?a.value:"return"in a?a.return:o;}catch(a){return n.push({directiveIndex:s,error:`Control resolve: ${a}`}),r.errors++,{ok:false}}return {ok:true,data:o}}function O(i,e,t,n,s,r){let o=i.message;if(typeof i.resolve=="function")try{let a=i.resolve(e,t);o="message"in a?a.message:"throw"in a?a.throw:o;}catch(a){return n.push({directiveIndex:s,error:`Control resolve: ${a}`}),r.errors++,{ok:false}}return {ok:true,data:o}}function V(i,e,t,n,s,r,o,a,c,u,d){let h;try{let p=i.cond;h=typeof p=="function"?!!p(e,t):!!p;}catch(p){c.push({directiveIndex:u,error:`if cond: ${p}`}),d.errors++;return}let f=h?i.then:i.else;if(Array.isArray(f)&&f.length>0){let p=Math.min(f.length,a),l=s?r:o;n.push({dirs:f,i:0,len:p,topLevelIfIndex:l});}}function z(i,e,t){let n=core.processIntercept(i,"beforeDirective");if(n.action===core.Intercept.SKIP)return {action:"skip"};if(n.action===core.Intercept.ABORT)return {action:"abort",reason:n.abortReason};let s=t,r=e;return n.ctx!==void 0&&(s=t.withCtx(n.ctx)),n.directive!==void 0&&(r=n.directive),{action:"continue",directive:r,dFrame:s}}function G(i,e,t,n,s){i.push({directiveIndex:t,error:`Hook ${n}: ${s}`}),e.errors++;}function S(i,e,t,n,s){return {success:false,aborted:true,abortedBy:i,appliedCount:e.appliedCount,skippedCount:e.skippedCount,errors:e.errors,processedCount:t,totalCount:n,counters:e.counters,data:s}}function K(i,e,t,n){return {success:true,aborted:true,abortedBy:"halt",appliedCount:i.appliedCount,skippedCount:i.skippedCount,errors:i.errors,processedCount:e,totalCount:t,counters:i.counters,data:n}}function U(i,e,t,n){return {success:true,aborted:false,appliedCount:i.appliedCount,skippedCount:i.skippedCount,errors:i.errors,processedCount:e,totalCount:t,counters:i.counters,data:n}}function q(i,e){return {success:true,aborted:false,appliedCount:i.appliedCount,skippedCount:i.skippedCount,errors:i.errors,processedCount:e,totalCount:e,counters:i.counters}}function W(i,e,t,n){return {success:n.success,aborted:true,abortedBy:n.abortedBy,appliedCount:i.appliedCount,skippedCount:i.skippedCount,errors:i.errors,processedCount:e,totalCount:t,counters:i.counters,data:n.data}}function Y(i,e,t,n,s){if(typeof i.resolve!="function")return i;try{let r=i.resolve(e.ctx,e.scope);return {...i,...r}}catch(r){return t.push({directiveIndex:n,error:`Directive resolve: ${r}`}),s.errors++,null}}function J(i,e){return [{dirs:i,i:0,len:e,topLevelIfIndex:-1}]}function Xe(i){let e=i.filledNames.has("beforeDirective"),t=i.filledNames.has("afterDirective"),n=i.filledNames.has("onDirectivesComplete");return function(r,o,a,c,u,d,h){let f=Math.min(r.length,h),p=[],l={appliedCount:0,skippedCount:0,errors:p,counters:o.counters},{scope:g}=o,A=o.ctx,D=J(r,f),b=0;for(;D.length>0;){let R=D[D.length-1];if(R.i>=R.len){D.pop();continue}let I=R.i++,T=R.topLevelIfIndex!==-1,_=T?R.topLevelIfIndex:I;T||(b=I+1);let C=R.dirs[I],k=C[u];if(k==="const"||k==="let"){j(C,A,g,p,_,l.counters);continue}if(k==="return"){let v=L(C,A,g,p,_,l.counters);if(!v.ok)continue;return U(l,b,f,v.data)}if(k==="throw"){let v=O(C,A,g,p,_,l.counters);if(!v.ok)continue;return S("throw",l,b,f,v.data)}if(k==="if"){V(C,A,g,D,T,R.topLevelIfIndex,I,h,p,_,l.counters);continue}let x=C,E=o;if(e)try{let v=c.beforeDirective(x,o),y=z(v,x,o);if(y.action==="skip"){l.skippedCount++,l.counters.directivesSkipped++;continue}if(y.action==="abort"){let w=b===0?I:b-1;return S(y.reason,l,w,f)}x=y.directive,E=y.dFrame;}catch(v){G(p,l.counters,_,"beforeDirective",v);}let M=Y(x,E,p,_,l.counters);if(M===null)continue;x=M;let H=x[u],F=H?a[H]:void 0;if(!F){p.push({directiveIndex:_,error:`No handler for directive type: ${H??"undefined"}`}),l.counters.errors++;continue}let m;try{m=F(x,E,d);}catch(v){m={ok:false,error:String(v)};}let $=b;if(m.ok){if(l.appliedCount++,l.counters.directivesApplied++,typeof x.as=="string"&&(g[x.as]=m.data),m.halt)return K(l,$,f,m.data)}else {if(m.halt)return S("halt",l,$,f,m.data);let v=x.catch;if(Array.isArray(v)&&v.length>0){g.$exception=m.error??"handler failed";let y=d.runDirectives(v,E);l.appliedCount+=y.appliedCount;for(let w=0;w<y.errors.length;w++)p.push(y.errors[w]);if(y.aborted)return W(l,$,f,y)}else p.push({directiveIndex:_,error:m.error??"handler failed"}),l.counters.errors++;}if(t)try{if(c.afterDirective(x,m,E)==="abort")return S("afterDirective",l,$,f)}catch(v){G(p,l.counters,_,"afterDirective",v);}}let P=q(l,f);if(n)try{c.onDirectivesComplete(P);}catch{}return P}}function Ze(i){let e=i.filledNames.has("beforeDirective"),t=i.filledNames.has("afterDirective"),n=i.filledNames.has("onDirectivesComplete");return async function(r,o,a,c,u,d,h){let f=Math.min(r.length,h),p=[],l={appliedCount:0,skippedCount:0,errors:p,counters:o.counters},{scope:g}=o,A=o.ctx,D=J(r,f),b=0;for(;D.length>0;){let R=D[D.length-1];if(R.i>=R.len){D.pop();continue}let I=R.i++,T=R.topLevelIfIndex!==-1,_=T?R.topLevelIfIndex:I;T||(b=I+1);let C=R.dirs[I],k=C[u];if(k==="const"||k==="let"){j(C,A,g,p,_,l.counters);continue}if(k==="return"){let v=L(C,A,g,p,_,l.counters);if(!v.ok)continue;return U(l,b,f,v.data)}if(k==="throw"){let v=O(C,A,g,p,_,l.counters);if(!v.ok)continue;return S("throw",l,b,f,v.data)}if(k==="if"){V(C,A,g,D,T,R.topLevelIfIndex,I,h,p,_,l.counters);continue}let x=C,E=o;if(e)try{let v=await c.beforeDirective(x,o),y=z(v,x,o);if(y.action==="skip"){l.skippedCount++,l.counters.directivesSkipped++;continue}if(y.action==="abort"){let w=b===0?I:b-1;return S(y.reason,l,w,f)}x=y.directive,E=y.dFrame;}catch(v){G(p,l.counters,_,"beforeDirective",v);}let M=Y(x,E,p,_,l.counters);if(M===null)continue;x=M;let H=x[u],F=H?a[H]:void 0;if(!F){p.push({directiveIndex:_,error:`No handler for directive type: ${H??"undefined"}`}),l.counters.errors++;continue}let m;try{m=await F(x,E,d);}catch(v){m={ok:false,error:String(v)};}let $=b;if(m.ok){if(l.appliedCount++,l.counters.directivesApplied++,typeof x.as=="string"&&(g[x.as]=m.data),m.halt)return K(l,$,f,m.data)}else {if(m.halt)return S("halt",l,$,f,m.data);let v=x.catch;if(Array.isArray(v)&&v.length>0){g.$exception=m.error??"handler failed";let y=await d.runDirectivesAsync(v,E);l.appliedCount+=y.appliedCount;for(let w=0;w<y.errors.length;w++)p.push(y.errors[w]);if(y.aborted)return W(l,$,f,y)}else p.push({directiveIndex:_,error:m.error??"handler failed"}),l.counters.errors++;}if(t)try{if(await c.afterDirective(x,m,E)==="abort")return S("afterDirective",l,$,f)}catch(v){G(p,l.counters,_,"afterDirective",v);}}let P=q(l,f);if(n)try{await c.onDirectivesComplete(P);}catch{}return P}}function oe(i,e){return e?Ze(i):Xe(i)}function de(i){if(i===null||typeof i!="object")return null;if(typeof i.next=="function")return i;let e=i.iterator;return e!=null&&typeof e=="object"&&typeof e.next=="function"?e:null}function fe(i,e,t){return {source:"pause",directive:i,frame:e,index:t,payload:{message:i.message}}}function pe(i){return i===false||i==="abort"||i==="cancel"}function ve(i,e,t,n){n.directivesApplied++,typeof i.as=="string"&&e!==void 0&&(t[i.as]=e);}function et(i){let e=i.filledNames.has("beforeDirective"),t=i.filledNames.has("afterDirective"),n=i.filledNames.has("onDirectivesComplete");return function*(r,o,a,c,u,d,h){let f=Math.min(r.length,h),p=[],l={appliedCount:0,skippedCount:0,errors:p,counters:o.counters},{scope:g}=o,A=o.ctx,D=J(r,f),b=0;for(;D.length>0;){let R=D[D.length-1];if(R.i>=R.len){D.pop();continue}let I=R.i++,T=R.topLevelIfIndex!==-1,_=T?R.topLevelIfIndex:I;T||(b=I+1);let C=R.dirs[I],k=C[u];if(k==="const"||k==="let"){j(C,A,g,p,_,l.counters);continue}if(k==="return"){let v=L(C,A,g,p,_,l.counters);if(!v.ok)continue;return U(l,b,f,v.data)}if(k==="throw"){let v=O(C,A,g,p,_,l.counters);if(!v.ok)continue;return S("throw",l,b,f,v.data)}if(k==="pause"){let v=b,y=yield fe(C,o,_);if(pe(y))return S("pause",l,v,f,y);l.appliedCount++,ve(C,y,g,l.counters);continue}if(k==="if"){V(C,A,g,D,T,R.topLevelIfIndex,I,h,p,_,l.counters);continue}let x=C,E=o;if(e)try{let v=c.beforeDirective(x,o),y=z(v,x,o);if(y.action==="skip"){l.skippedCount++,l.counters.directivesSkipped++;continue}if(y.action==="abort"){let w=b===0?I:b-1;return S(y.reason,l,w,f)}x=y.directive,E=y.dFrame;}catch(v){G(p,l.counters,_,"beforeDirective",v);}let M=Y(x,E,p,_,l.counters);if(M===null)continue;x=M;let H=x[u],F=H?a[H]:void 0;if(!F){p.push({directiveIndex:_,error:`No handler for directive type: ${H??"undefined"}`}),l.counters.errors++;continue}let m;try{let v=F(x,E,d),y=de(v);y!==null?m=yield*y:m=v;}catch(v){m={ok:false,error:String(v)};}let $=b;if(m.ok){if(l.appliedCount++,l.counters.directivesApplied++,typeof x.as=="string"&&(g[x.as]=m.data),m.halt)return K(l,$,f,m.data)}else {if(m.halt)return S("halt",l,$,f,m.data);let v=x.catch;if(Array.isArray(v)&&v.length>0){g.$exception=m.error??"handler failed";let y=d.runDirectives(v,E);l.appliedCount+=y.appliedCount;for(let w=0;w<y.errors.length;w++)p.push(y.errors[w]);if(y.aborted)return W(l,$,f,y)}else p.push({directiveIndex:_,error:m.error??"handler failed"}),l.counters.errors++;}if(t)try{if(c.afterDirective(x,m,E)==="abort")return S("afterDirective",l,$,f)}catch(v){G(p,l.counters,_,"afterDirective",v);}}let P=q(l,f);if(n)try{c.onDirectivesComplete(P);}catch{}return P}}function tt(i){let e=i.filledNames.has("beforeDirective"),t=i.filledNames.has("afterDirective"),n=i.filledNames.has("onDirectivesComplete");return async function*(r,o,a,c,u,d,h){let f=Math.min(r.length,h),p=[],l={appliedCount:0,skippedCount:0,errors:p,counters:o.counters},{scope:g}=o,A=o.ctx,D=J(r,f),b=0;for(;D.length>0;){let R=D[D.length-1];if(R.i>=R.len){D.pop();continue}let I=R.i++,T=R.topLevelIfIndex!==-1,_=T?R.topLevelIfIndex:I;T||(b=I+1);let C=R.dirs[I],k=C[u];if(k==="const"||k==="let"){j(C,A,g,p,_,l.counters);continue}if(k==="return"){let v=L(C,A,g,p,_,l.counters);if(!v.ok)continue;return U(l,b,f,v.data)}if(k==="throw"){let v=O(C,A,g,p,_,l.counters);if(!v.ok)continue;return S("throw",l,b,f,v.data)}if(k==="pause"){let v=b,y=yield fe(C,o,_);if(pe(y))return S("pause",l,v,f,y);l.appliedCount++,ve(C,y,g,l.counters);continue}if(k==="if"){V(C,A,g,D,T,R.topLevelIfIndex,I,h,p,_,l.counters);continue}let x=C,E=o;if(e)try{let v=await c.beforeDirective(x,o),y=z(v,x,o);if(y.action==="skip"){l.skippedCount++,l.counters.directivesSkipped++;continue}if(y.action==="abort"){let w=b===0?I:b-1;return S(y.reason,l,w,f)}x=y.directive,E=y.dFrame;}catch(v){G(p,l.counters,_,"beforeDirective",v);}let M=Y(x,E,p,_,l.counters);if(M===null)continue;x=M;let H=x[u],F=H?a[H]:void 0;if(!F){p.push({directiveIndex:_,error:`No handler for directive type: ${H??"undefined"}`}),l.counters.errors++;continue}let m;try{let v=await F(x,E,d),y=de(v);y!==null?m=yield*y:m=v;}catch(v){m={ok:false,error:String(v)};}let $=b;if(m.ok){if(l.appliedCount++,l.counters.directivesApplied++,typeof x.as=="string"&&(g[x.as]=m.data),m.halt)return K(l,$,f,m.data)}else {if(m.halt)return S("halt",l,$,f,m.data);let v=x.catch;if(Array.isArray(v)&&v.length>0){g.$exception=m.error??"handler failed";let y=await d.runDirectivesAsync(v,E);l.appliedCount+=y.appliedCount;for(let w=0;w<y.errors.length;w++)p.push(y.errors[w]);if(y.aborted)return W(l,$,f,y)}else p.push({directiveIndex:_,error:m.error??"handler failed"}),l.counters.errors++;}if(t)try{if(await c.afterDirective(x,m,E)==="abort")return S("afterDirective",l,$,f)}catch(v){G(p,l.counters,_,"afterDirective",v);}}let P=q(l,f);if(n)try{await c.onDirectivesComplete(P);}catch{}return P}}function he(i,e){return e?tt(i):et(i)}function ye(i,e,t){return `return{success:false,aborted:true,abortedBy:${i},appliedCount,skippedCount,errors,processedCount:${e},totalCount:${t},counters};`}function nt(i,e){return `return{success:true,aborted:true,abortedBy:"halt",appliedCount,skippedCount,errors,processedCount:${i},totalCount:${e},counters,data:_result.data};`}function rt(i,e){return `return{success:false,aborted:true,abortedBy:"halt",appliedCount,skippedCount,errors,processedCount:${i},totalCount:${e},counters,data:_result.data};`}function it(i,e,t,n){i.push("const counters=frame.counters;"),i.push("const ctx=frame.ctx;"),i.push("const errors=[];"),i.push("let appliedCount=0;"),i.push("let skippedCount=0;");for(let[s,r]of e)i.push(`const ${r}=$.h[${JSON.stringify(s)}];`);t&&i.push("const _hookBefore=$.hooks.beforeDirective;"),n&&i.push("const _hookAfter=$.hooks.afterDirective;");}function st(i,e,t,n){i.push(`const _finalResult={success:true,aborted:false,appliedCount,skippedCount,errors,processedCount:${e},totalCount:${e},counters};`),t&&i.push(`try{${n}$.hooks.onDirectivesComplete(_finalResult);}catch(_e){}`),i.push("return _finalResult;");}function ot(i,e,t){let n=`{
6
2
  ${i}
7
- }`;return t?`(${e?"async function*()":"function*()"}${r})()`:`(${e?"async ()=>":"()=>"}${r})()`}function at(i,e,t,r){let o=JSON.stringify(e.name);typeof e.resolve=="function"?(i.push("try{"),i.push(`scope[${o}]=${t}.resolve(ctx,scope).value;`),i.push(`}catch(_e){errors.push({directiveIndex:${r},error:"Binding resolve: "+_e});counters.errors++;}`)):i.push(`scope[${o}]=${t}.value;`);}function ut(i,e,t,r,o,n){typeof e.resolve=="function"?(i.push("try{"),i.push(`const _rv=${t}.resolve(ctx,scope);`),i.push(`return{success:true,aborted:false,appliedCount,skippedCount,errors,processedCount:${o},totalCount:${n},counters,data:"value" in _rv?_rv.value:"return" in _rv?_rv.return:${t}.value};`),i.push(`}catch(_e){errors.push({directiveIndex:${r},error:"Control resolve: "+_e});counters.errors++;}`)):i.push(`return{success:true,aborted:false,appliedCount,skippedCount,errors,processedCount:${o},totalCount:${n},counters,data:${t}.value};`);}function lt(i,e,t,r,o,n){typeof e.resolve=="function"?(i.push("try{"),i.push(`const _rv=${t}.resolve(ctx,scope);`),i.push(`return{success:false,aborted:true,abortedBy:"throw",appliedCount,skippedCount,errors,processedCount:${o},totalCount:${n},counters,data:"message" in _rv?_rv.message:"throw" in _rv?_rv.throw:${t}.message};`),i.push(`}catch(_e){errors.push({directiveIndex:${r},error:"Control resolve: "+_e});counters.errors++;}`)):i.push(`return{success:false,aborted:true,abortedBy:"throw",appliedCount,skippedCount,errors,processedCount:${o},totalCount:${n},counters,data:${t}.message};`);}function dt(i,e,t,r,o,n){let s=typeof e.as=="string",a=s?JSON.stringify(e.as):"";i.push(`{const _ack=yield{source:"pause",directive:${t},frame,index:${r},payload:{message:${t}.message}};`),i.push(`if(_ack===false||_ack==="abort"||_ack==="cancel")return{success:false,aborted:true,abortedBy:"pause",appliedCount,skippedCount,errors,processedCount:${o},totalCount:${n},counters,data:_ack};`),i.push("appliedCount++;counters.directivesApplied++;"),s&&i.push(`if(_ack!==undefined)scope[${a}]=_ack;`),i.push("}");}function ft(i,e,t,r,o){let{L:n,total:s,typeField:a,handlerVars:c,hasBefore:u,hasAfter:d,awBefore:h,awAfter:f,awHandler:p,actionIsAsync:l,actionIsInteractive:g,interactiveHandlerSet:A}=o,D=i[a],R=c.get(D),P=typeof i.resolve=="function",b=typeof i.as=="string",I=Array.isArray(i.catch)&&i.catch.length>0,T=b?JSON.stringify(i.as):"",_=g&&A.has(D),C=o.blockCounter.n++;n.push(`_b${C}:{`);let k=u||P,x=u;k&&n.push(`let _dir=${e};`),x&&n.push("let _df=frame;"),u&&(n.push("try{"),n.push(`const _bd=${h}_hookBefore(${e},frame);`),n.push(`if(_bd==="skip"){skippedCount++;counters.directivesSkipped++;break _b${C};}`),n.push(`if(_bd==="abort")${ge('"beforeDirective"',r-1,s)}`),n.push('if(typeof _bd==="object"&&_bd!==null){'),n.push(`if("abort" in _bd)${ge("_bd.abort",r-1,s)}`),n.push('if("ctx" in _bd)_df=frame.withCtx(_bd.ctx);'),n.push('if("directive" in _bd)_dir=_bd.directive;'),n.push("}"),n.push(`}catch(_e){errors.push({directiveIndex:${t},error:"Hook beforeDirective: "+_e});counters.errors++;}`)),u?(n.push('if(typeof _dir.resolve==="function"){'),n.push("try{const _r=_dir.resolve(_df.ctx,scope);_dir=Object.assign({},_dir,_r);}"),n.push(`catch(_e){errors.push({directiveIndex:${t},error:"Directive resolve: "+_e});counters.errors++;break _b${C};}}`)):P&&(n.push(`try{const _r=${e}.resolve(ctx,scope);_dir=Object.assign({},${e},_r);}`),n.push(`catch(_e){errors.push({directiveIndex:${t},error:"Directive resolve: "+_e});counters.errors++;break _b${C};}`));let E=k?"_dir":e,H=x?"_df":"frame";if(n.push("let _result;"),_?(n.push(`try{_result=yield* ${R}(${E},${H},$.engine);}`),n.push("catch(_e){_result={ok:false,error:String(_e)};}")):g?(n.push(`try{_result=${p}${R}(${E},${H},$.engine);if(_result&&_result.iterator)_result=yield* _result.iterator;}`),n.push("catch(_e){_result={ok:false,error:String(_e)};}")):(n.push(`try{_result=${p}${R}(${E},${H},$.engine);}`),n.push("catch(_e){_result={ok:false,error:String(_e)};}")),n.push("if(_result.ok){"),n.push("appliedCount++;counters.directivesApplied++;"),b&&n.push(`scope[${T}]=_result.data;`),n.push(`if(_result.halt)${nt(r,s)}`),n.push("}else{"),n.push(`if(_result.halt)${it(r,s)}`),I){n.push('scope.$exception=_result.error||"handler failed";');let M=l?"$.runner":"$.runnerSync";n.push(`const _cr=${p}${M}(${e}.catch,${H});`),n.push("appliedCount+=_cr.appliedCount;"),n.push("for(let _j=0;_j<_cr.errors.length;_j++)errors.push(_cr.errors[_j]);"),n.push(`if(_cr.aborted)return{success:_cr.success,aborted:true,abortedBy:_cr.abortedBy,appliedCount,skippedCount,errors,processedCount:${r},totalCount:${s},counters,data:_cr.data};`);}else n.push(`errors.push({directiveIndex:${t},error:_result.error||"handler failed"});counters.errors++;`);n.push("}"),d&&(n.push("try{"),n.push(`const _ad=${f}_hookAfter(${E},_result,${H});`),n.push(`if(_ad==="abort")${ge('"afterDirective"',r,s)}`),n.push(`}catch(_e){errors.push({directiveIndex:${t},error:"Hook afterDirective: "+_e});counters.errors++;}`)),n.push("}");}function pt(i,e,t,r,o,n){let{L:s}=n,a=i.cond,c=typeof a=="boolean";s.push("{"),c?s.push(`if(${a?"true":"false"}){`):(s.push("let _cond=false,_condOk=true;"),s.push(`try{const _c=${e}.cond;_cond=typeof _c==="function"?!!_c(ctx,scope):!!_c;}`),s.push(`catch(_e){errors.push({directiveIndex:${t},error:"if cond: "+_e});counters.errors++;_condOk=false;}`),s.push("if(_condOk){"),s.push("if(_cond){"));let u=i.then;Array.isArray(u)&&u.length>0&&xe(u,`${e}.then`,r,o,n),s.push("}");let d=i.else;Array.isArray(d)&&d.length>0&&(s.push("else{"),xe(d,`${e}.else`,r,o,n),s.push("}")),c||s.push("}"),s.push("}");}function xe(i,e,t,r,o){let n=t!==-1;for(let s=0;s<i.length;s++){let a=i[s],c=`${e}[${s}]`,u=n?t:s,d=n?r:s+1;switch(a[o.typeField]){case "const":case "let":at(o.L,a,c,u);break;case "return":ut(o.L,a,c,u,d,o.total);break;case "throw":lt(o.L,a,c,u,d,o.total);break;case "pause":dt(o.L,a,c,u,d,o.total);break;case "if":{let f=n?t:s,p=n?r:s+1;pt(a,c,u,f,p,o);break}default:ft(a,c,u,d,o);break}}}function me(i,e,t){for(let r of i){let o=r[e];if(o&&!N.has(o)&&t.add(o),o==="if"){let n=r.then;Array.isArray(n)&&n.length>0&&me(n,e,t);let s=r.else;Array.isArray(s)&&s.length>0&&me(s,e,t);}}}var we=new Set;function _e(i,e,t,r=we,o,n=false,s=we){let a=[],c=i.length,{filledNames:u,hasAnyAsync:d,asyncNames:h}=e,f=u.has("beforeDirective"),p=u.has("afterDirective"),l=u.has("onDirectivesComplete"),g=o!==void 0?o:ce(i,r,t),A=d||g,D=A?"await ":"",R=h.has("beforeDirective")?"await ":"",P=h.has("afterDirective")?"await ":"",b=h.has("onDirectivesComplete")?"await ":"",I=new Set;me(i,t,I);let T=new Map,_=0;for(let E of I)T.set(E,`_h${_++}`);st(a,T,f,p),xe(i,"$.d",-1,0,{L:a,total:c,typeField:t,handlerVars:T,hasBefore:f,hasAfter:p,awBefore:R,awAfter:P,awHandler:D,actionIsAsync:A,actionIsInteractive:n,interactiveHandlerSet:s,blockCounter:{n:0}}),ot(a,c,l,b);let k=ct(a.join(`
8
- `),A,n);return {fn:new Function("frame","scope","$",`"use strict";
9
- return ${k};`),isAsync:A,isInteractive:n}}function ce(i,e,t){for(let r of i){let o=r[t];if(o&&e.has(o))return true;if(o==="if"){let s=r.then;if(Array.isArray(s)&&s.length>0&&ce(s,e,t))return true;let a=r.else;if(Array.isArray(a)&&a.length>0&&ce(a,e,t))return true}let n=r.catch;if(Array.isArray(n)&&n.length>0&&ce(n,e,t))return true}return false}function De(i,e,t){return {success:false,aborted:false,appliedCount:0,skippedCount:0,processedCount:0,totalCount:0,errors:[{directiveIndex:-1,error:e}],counters:i,...t}}function Te(i,e){return De(e,`Action not found: "${i}"`,{aborted:true,abortedBy:"action-not-found"})}function Se(i,e,t){return De(t,`Max depth ${e} exceeded invoking "${i}"`,{aborted:true,abortedBy:"maxDepth"})}function $e(i,e){return De(e,`Action "${i}" is private (sub-action). Can only be invoked from within its parent scope.`)}function ae(i,e){return {success:true,aborted:false,appliedCount:0,skippedCount:0,processedCount:0,totalCount:0,errors:[],data:i,counters:e}}function vt(i){return typeof i=="object"&&i!==null&&"execute"in i}function He(i){let e=new Map;for(let[t,r]of i){let o=r.subDirectives;if(!o)continue;let n=Object.keys(o);if(n.length===0)continue;let s=null;for(let a=0;a<n.length;a++){let c=n[a];c!=="catch"&&o[c].graph!==false&&(s===null&&(s=[]),s.push(c));}s!==null&&e.set(t,s);}return e}function Me(i){let e=new Map;for(let[t,r]of i){let o=r.subDirectives;if(!o)continue;let n=Object.keys(o);if(n.length===0)continue;let s=null;for(let a=0;a<n.length;a++){let c=n[a];c!=="catch"&&(s===null&&(s=[]),s.push(c));}s!==null&&e.set(t,s);}return e}function Pe(i,e,t){if(!e)return t;let r=new Set(t);for(let[o,n]of i)n.executeInteractive!==void 0&&r.add(o);return r}function te(i,e,t){let r=Object.create(null);for(let[o,n]of i){let s;t&&n.executeInteractive!==void 0?s=n.executeInteractive:e&&n.executeAsync!==void 0?s=n.executeAsync:s=n.execute,r[o]=s;}return r}function Fe(i){let e=Object.create(null),t=new Map;for(let r of Object.keys(i)){let o=i[r];vt(o)?(e[r]=o.execute,t.set(r,o)):(e[r]=o,t.set(r,{execute:o}));}return {handlers:e,definitions:t}}function Ge(i,e){if(i==="*")return true;if(!i.includes("*"))return i===e;let t=i.replace(/[.+^${}()|[\]\\]/g,"\\$&");return new RegExp("^"+t.replace(/\*/g,".*")+"$").test(e)}function Be(i){return typeof i=="string"?{pattern:i}:i}function Ne(i,e,t){let r=new Map;if(!e&&!t){for(let o of i)r.set(o,{status:"available"});return r}if(e){let o=e.map(Be);for(let n of i){let s=o.some(a=>Ge(a.pattern,n));r.set(n,{status:s?"available":"denied"});}}else {let o=t.map(Be);for(let n of i){let s=o.find(a=>Ge(a.pattern,n));s?r.set(n,{status:"denied",reason:s.reason,source:s.source}):r.set(n,{status:"available"});}}return r}function Le(i){let{typeField:e,asyncHandlerSet:t,interactiveHandlerSet:r,subDirectiveFieldsForGraph:o}=i,n=new Map,s=new Set,a=new Set,c=new Set,u=new Set;return {upsert(d,h,f){n.set(d,ht(h,e,o)),ne(h,t,e,o)?s.add(d):s.delete(d),f||ie(h,r,e,o)?a.add(d):a.delete(d);},remove(d){n.delete(d),s.delete(d),a.delete(d);},recompute(){c=je(n,s),u=je(n,a);},isAsync(d){return c.has(d)},isInteractive(d){return u.has(d)},has(d){return n.has(d)}}}var ue=new Map;function ht(i,e,t=ue){let r=new Set;return re(i,e,t,r),r}function re(i,e,t,r){for(let o of i){let n=o[e];n==="action"&&typeof o.id=="string"&&r.add(o.id);let s=o.catch;if(Array.isArray(s)&&s.length>0&&re(s,e,t,r),n==="if"){let c=o.then;Array.isArray(c)&&c.length>0&&re(c,e,t,r);let u=o.else;Array.isArray(u)&&u.length>0&&re(u,e,t,r);continue}if(n===void 0)continue;let a=t.get(n);if(a!==void 0)for(let c=0;c<a.length;c++){let u=o[a[c]];!Array.isArray(u)||u.length===0||re(u,e,t,r);}}}function ne(i,e,t,r=ue){for(let o of i){let n=o[t];if(n!==void 0&&e.has(n))return true;let s=o.catch;if(Array.isArray(s)&&s.length>0&&ne(s,e,t,r))return true;if(n==="if"){let c=o.then;if(Array.isArray(c)&&c.length>0&&ne(c,e,t,r))return true;let u=o.else;if(Array.isArray(u)&&u.length>0&&ne(u,e,t,r))return true;continue}if(n===void 0)continue;let a=r.get(n);if(a!==void 0)for(let c=0;c<a.length;c++){let u=o[a[c]];if(!(!Array.isArray(u)||u.length===0)&&ne(u,e,t,r))return true}}return false}function ie(i,e,t,r=ue){for(let o of i){let n=o[t];if(n==="pause"||n!==void 0&&e.has(n))return true;let s=o.catch;if(Array.isArray(s)&&s.length>0&&ie(s,e,t,r))return true;if(n==="if"){let c=o.then;if(Array.isArray(c)&&c.length>0&&ie(c,e,t,r))return true;let u=o.else;if(Array.isArray(u)&&u.length>0&&ie(u,e,t,r))return true;continue}if(n===void 0)continue;let a=r.get(n);if(a!==void 0)for(let c=0;c<a.length;c++){let u=o[a[c]];if(!(!Array.isArray(u)||u.length===0)&&ie(u,e,t,r))return true}}return false}function Q(i,e,t=ue){for(let r of i){let o=r[e];if(o==="pause")return true;let n=r.catch;if(Array.isArray(n)&&n.length>0&&Q(n,e,t))return true;if(o==="if"){let a=r.then;if(Array.isArray(a)&&a.length>0&&Q(a,e,t))return true;let c=r.else;if(Array.isArray(c)&&c.length>0&&Q(c,e,t))return true;continue}if(o===void 0)continue;let s=t.get(o);if(s!==void 0)for(let a=0;a<s.length;a++){let c=r[s[a]];if(!(!Array.isArray(c)||c.length===0)&&Q(c,e,t))return true}}return false}function je(i,e){let t=new Set(e),r=true;for(;r;){r=false;for(let[o,n]of i)if(!t.has(o)){for(let s of n)if(t.has(s)){t.add(o),r=true;break}}}return t}var le=class{depth=0;errors=[];warnings=[];actions=[];registered=[];begin(){this.depth++,this.depth===1&&(this.errors=[],this.warnings=[],this.actions=[],this.registered=[]);}endDepth(){if(this.depth<=0)throw new Error("endBatch() called without matching beginBatch()");return this.depth--,this.depth===0}isActive(){return this.depth>0}accumulate(e,t,r,o){this.errors.push(...e),this.warnings.push(...t);for(let n of r)this.actions.push(n);this.registered.push(...o);}};function Oe(i){for(let e of i)if(N.has(e))throw new Error(`Handler type "${e}" is reserved for engine-internal directives`)}function Ve(i,e){if(i&&e)throw new Error("allowedDirectives and blockedDirectives are mutually exclusive. Provide one or neither.")}function ze(i,e,t){if(i)return;if(e.size>0){let o=Array.from(e).join(", ");throw new Error(`Handler(s) [${o}] are interactive but engine has no \`interactive\` config. Add \`interactive: {}\` to enable interactive mode.`)}let r=[];for(let[o,n]of t)n.executeInteractive!==void 0&&r.push(o);if(r.length>0)throw new Error(`Handler(s) [${r.join(", ")}] declare \`executeInteractive\` variant but engine has no \`interactive\` config. Add \`interactive: {}\` to enable interactive mode.`)}function Ke(i){let e=new Set,t=new Set;for(let[r,o]of i)(o.async===true||core.isAsyncFunction(o.execute))&&e.add(r),(o.interactive===true||core.isGeneratorFunction(o.execute))&&t.add(r);return {asyncHandlerSet:e,interactiveHandlerSet:t}}function Ue(i,e,t,r){let o=t?te(i,true,false):e,n=r?te(i,t,true):null;return {handlersAsync:o,handlersInteractive:n}}function Ae(i,e){return e?{next:()=>Promise.resolve({value:i,done:true}),return:()=>Promise.resolve({value:i,done:true}),throw:o=>Promise.reject(o),[Symbol.asyncIterator](){return this}}:{next:()=>({value:i,done:true}),return:()=>({value:i,done:true}),throw:r=>{throw r},[Symbol.iterator](){return this}}}function qe(i,e,t,r,o,n){if(n){let c=i;return {async next(d){let h=await c.next(d);if(h.done){let f=h.value;if(o!==null){let p=o(e,t,f,r);p!==void 0&&(f=p);}return {value:f,done:true}}return {value:h.value,done:false}},async return(){let d=await c.return(void 0),h=d.value;if(d.done&&o!==null){let f=o(e,t,h,r);f!==void 0&&(h=f);}return {value:h,done:true}},async throw(d){let h=await c.throw(d);if(h.done){let f=h.value;if(o!==null){let p=o(e,t,f,r);p!==void 0&&(f=p);}return {value:f,done:true}}return {value:h.value,done:false}},[Symbol.asyncIterator](){return this}}}let s=i;return {next(c){let u=s.next(c);if(u.done){let d=u.value;if(o!==null){let h=o(e,t,d,r);h!==void 0&&(d=h);}return {value:d,done:true}}return {value:u.value,done:false}},return(){let c=s.return(void 0),u=c.value;if(c.done&&o!==null){let d=o(e,t,u,r);d!==void 0&&(u=d);}return {value:u,done:true}},throw(c){let u=s.throw(c);if(u.done){let d=u.value;if(o!==null){let h=o(e,t,d,r);h!==void 0&&(d=h);}return {value:d,done:true}}return {value:u.value,done:false}},[Symbol.iterator](){return this}}}var Dt=8,At="type",be={maxDepth:10,maxRules:1e4,maxDirectives:1e5},Re=class{_directiveExecutor;_mode;_ctx;_requestedMode;_threshold;_limits;_typeField;_handlers;_handlersAsync;_handlersInteractive;_definitions;_directiveHooks;_directiveAnalysis;_asyncHandlerSet;_interactiveHandlerSet;_isAsync;_isInteractive;_directivePermissions;_subDirectiveFieldsForGraph;_subDirectiveFieldsAll;_miniGraph;_interactiveExecutor;_beforeAction;_afterAction;_registry=new Map;_emitter=new X;_batch=new le;_registeredIds=new Set;_directiveRunner;_directiveRunnerSync;_engineRef;constructor(e){this._requestedMode=e.mode??"auto",this._threshold=e.autoJitThreshold??Dt,this._typeField=e.typeField??At,this._limits={maxDepth:e.limits?.maxDepth??be.maxDepth,maxRules:e.limits?.maxRules??be.maxRules,maxDirectives:e.limits?.maxDirectives??be.maxDirectives};let{handlers:t,definitions:r}=Fe(e.handlers);Oe(Object.keys(e.handlers)),Ve(e.allowedDirectives,e.blockedDirectives),this._handlers=t,this._definitions=r,this._directivePermissions=Ne(Object.keys(t),e.allowedDirectives,e.blockedDirectives),this._directiveHooks=e.directiveHooks??{},this._beforeAction=e.actionHooks?.beforeAction??null,this._afterAction=e.actionHooks?.afterAction??null,this._directiveAnalysis=core.analyzeSlots(this._directiveHooks,core.DIRECTIVE_SLOT_NAMES);let{asyncHandlerSet:o,interactiveHandlerSet:n}=Ke(this._definitions);this._asyncHandlerSet=o,this._interactiveHandlerSet=n,this._isInteractive=e.interactive!==void 0,ze(this._isInteractive,n,this._definitions),this._isAsync=this._directiveAnalysis.hasAnyAsync||o.size>0;let{handlersAsync:s,handlersInteractive:a}=Ue(this._definitions,this._handlers,this._isAsync,this._isInteractive);this._handlersAsync=s,this._handlersInteractive=a;let c=He(this._definitions);this._subDirectiveFieldsForGraph=c,this._subDirectiveFieldsAll=Me(this._definitions),this._miniGraph=Le({typeField:this._typeField,asyncHandlerSet:o,interactiveHandlerSet:n,subDirectiveFieldsForGraph:c}),this._engineRef=this._buildEngineRef();let u=oe(this._directiveAnalysis,false);this._directiveRunner=this._buildDirectiveRunner(),this._directiveRunnerSync=this._buildDirectiveRunnerSync(u);let d=this._buildExecutors(u);this._directiveExecutor=d.directiveExecutor,this._mode=d.mode,this._interactiveExecutor=d.interactiveExecutor;}_buildEngineRef(){return {runDirectives:(e,t)=>this._executeDirectives(e,t),runDirectivesAsync:(e,t)=>this._executeDirectivesAsync(e,t),invoke:(e,t,r)=>this._invokeInternal(e,t,r),invokeAsync:(e,t,r)=>this._invokeInternalAsync(e,t,r),isActionAsync:e=>this._miniGraph.has(e)?this._miniGraph.isAsync(e):void 0,isActionInteractive:e=>this._miniGraph.has(e)?this._miniGraph.isInteractive(e):void 0,invokeInteractive:(e,t,r)=>this._invokeInteractiveInternal(e,t,r),runDirectivesInteractive:(e,t)=>this._executeDirectivesInteractive(e,t),evaluateRules:()=>{throw new Error("evaluateRules() not available in ActionEngine context. Use createRuleEngine().")},evaluateRulesAsync:()=>{throw new Error("evaluateRulesAsync() not available in ActionEngine context. Use createRuleEngine().")}}}_buildDirectiveRunner(){let e=this._isAsync?this._handlersAsync:this._handlers;return (t,r)=>this._directiveExecutor(t,r,e,this._directiveHooks,this._typeField,this._engineRef,this._limits.maxDirectives)}_buildDirectiveRunnerSync(e){return (t,r)=>e(t,r,this._handlers,this._directiveHooks,this._typeField,this._engineRef,this._limits.maxDirectives)}_buildExecutors(e){let t,r;this._requestedMode==="jit"?(t=this._buildJitDirectiveExecutor(),r="jit"):this._isAsync?(t=oe(this._directiveAnalysis,true),r="interpret"):(t=e,r="interpret");let o=this._isInteractive?this._isAsync?he(this._directiveAnalysis,true):he(this._directiveAnalysis,false):null;return {directiveExecutor:t,mode:r,interactiveExecutor:o}}register(e){let t=[],r=[],o=[],n=[];for(let c of e){if(!c.id){r.push({actionId:"",error:"Action must have an id"});continue}if(!this._isInteractive&&Q(c.directives,this._typeField,this._subDirectiveFieldsForGraph)){r.push({actionId:c.id,error:'Action uses directive type:"pause" but engine has no `interactive` config. Add `interactive: {}` to enable.'});continue}let u=ke(c,this._handlers,this._definitions,this._typeField);if(u.length>0){for(let d of u)r.push({actionId:c.id,error:d});continue}n.push(c);}for(let c of n){let u=B(c.directives,this._typeField,this._subDirectiveFieldsAll),d={definition:c,directives:u,compiled:null,invokeCount:0};this._registry.set(c.id,d),this._registeredIds.add(c.id),this._miniGraph.upsert(c.id,u,c.interactive===true),t.push(c.id);}if(this._batch.isActive())return this._batch.accumulate(r,o,n,t),{registered:t,errors:r,warnings:o};let s=t;if(n.length>0){this._miniGraph.recompute();let c=this._validateInteractiveVariants(t);c.errors.length>0&&r.push(...c.errors),c.warnings.length>0&&o.push(...c.warnings),s=c.validRegistered,this._invalidateAndMaybeRecompile();}let a={registered:s,errors:r,warnings:o};if(s.length>0){let c=new Set(s),u=n.filter(d=>c.has(d.id));this._emitter.emit("register",{actions:u,result:a,registered:s});}return a}unregister(e){let t=this._registry.delete(e);t&&(this._registeredIds.delete(e),this._miniGraph.remove(e));let r=e+"/",o=[];for(let n of this._registry.keys())n.startsWith(r)&&(this._registry.delete(n),this._registeredIds.delete(n),this._miniGraph.remove(n),o.push(n));return t&&(this._miniGraph.recompute(),this._invalidateAndMaybeRecompile(),this._emitter.emit("unregister",{id:e,cascaded:o})),t}invoke(e,t,r){if(this._miniGraph.isInteractive(e))throw new Error(`Cannot call invoke("${e}") \u2014 action is interactive (transitively). Use invokeInteractive() instead.`);if(this._miniGraph.isAsync(e))throw new Error(`Cannot call invoke("${e}") \u2014 action is async (transitively). Use invokeAsync() instead.`);if(this._directiveAnalysis.hasAnyAsync)throw new Error(`Cannot call invoke("${e}") \u2014 engine has async directive hooks. Use invokeAsync() instead.`);let o=r!==void 0?r:this._requireCtx(),n=core.createRootFrame(o,this._limits);return this._invokeInternal(e,t,n)}async invokeAsync(e,t,r){if(this._miniGraph.isInteractive(e))throw new Error(`Cannot call invokeAsync("${e}") \u2014 action is interactive (transitively). Use invokeInteractive() instead.`);let o=r!==void 0?r:this._requireCtx(),n=core.createRootFrame(o,this._limits);return this._invokeInternalAsync(e,t,n)}setContext(e){this._ctx=e;}context(e,t){let r=this._ctx;this._ctx=e;try{return t()}finally{this._ctx=r;}}beginBatch(){this._batch.begin();}endBatch(){if(!this._batch.endDepth())return {registered:[],errors:[],warnings:[]};let t=this._batch.registered;if(this._batch.registered.length>0){this._miniGraph.recompute();let o=this._validateInteractiveVariants(this._batch.registered);this._batch.errors.push(...o.errors),this._batch.warnings.push(...o.warnings),t=o.validRegistered,this._invalidateAndMaybeRecompile();}let r={registered:t,errors:this._batch.errors,warnings:this._batch.warnings};if(t.length>0){let o=new Set(t),n=this._batch.actions.filter(s=>o.has(s.id));this._emitter.emit("register",{actions:n,result:r,registered:t});}return r}on(e,t){return this._emitter.on(e,t)}get handlerDefinitions(){return this._definitions}get registeredIds(){return this._registeredIds}getActionDefinition(e){return this._registry.get(e)?.definition}get typeField(){return this._typeField}get subDirectiveFieldsForGraph(){return this._subDirectiveFieldsForGraph}get directivePermissions(){return this._directivePermissions}get isAsync(){return this._isAsync}get isInteractive(){return this._isInteractive}isActionAsync(e){if(this._miniGraph.has(e))return this._miniGraph.isAsync(e)}isActionInteractive(e){if(this._miniGraph.has(e))return this._miniGraph.isInteractive(e)}invokeInteractive(e,t,r){if(!this._isInteractive||this._interactiveExecutor===null)throw new Error("Cannot call invokeInteractive() \u2014 engine has no `interactive` config. Add `interactive: {}` to enable.");let o=r!==void 0?r:this._requireCtx(),n=core.createRootFrame(o,this._limits);return this._invokeInteractiveInternal(e,t,n)}_invokeInteractiveInternal(e,t,r){let o=this._prepareInvoke(e,t,r);if("success"in o)return Ae(o,this._isAsync);let{stored:n,childFrame:s,childScope:a}=o;if(this._beforeAction!==null){let u=this._beforeAction(e,t,s);if(u?.skip)return Ae(ae(u.data,s.counters),this._isAsync)}let c;if(n.compiled&&n.compiled.isInteractive)c=n.compiled.fn(s,s.scope,n.compiled.$);else {let u=this._interactiveExecutor;c=u(n.directives,s,this._handlersInteractive,this._directiveHooks,this._typeField,this._engineRef,this._limits.maxDirectives);}return qe(c,e,t,s,this._afterAction,this._isAsync)}_executeDirectivesInteractive(e,t){if(!this._isInteractive||this._interactiveExecutor===null)throw new Error("runDirectivesInteractive: engine has no `interactive` config");return this._interactiveExecutor(e,t,this._handlersInteractive,this._directiveHooks,this._typeField,this._engineRef,this._limits.maxDirectives)}get compilationMode(){return this._mode}get directiveHookSlots(){return this._directiveAnalysis.filledNames}get asyncSlots(){return this._directiveAnalysis.asyncNames}compile(){if(this._requestedMode!=="interpret"){this._mode!=="jit"&&this._promote();for(let[e,t]of this._registry)t.compiled||(t.compiled=this._compileAction(e,t.directives));}}_invokeInternal(e,t,r){let o=this._prepareInvoke(e,t,r);if("success"in o)return o;let{stored:n,childFrame:s,childScope:a}=o;if(this._beforeAction!==null){let u=this._beforeAction(e,t,s);if(u?.skip)return ae(u.data,s.counters)}let c;if(n.compiled?c=n.compiled.fn(s,a,n.compiled.$):this._isAsync&&!this._miniGraph.isAsync(e)?(n.compiled=this._compileAction(e,n.directives),c=n.compiled.fn(s,a,n.compiled.$)):(c=this._directiveRunner(n.directives,s),this._maybeAutoPromote(n)),this._afterAction!==null){let u=this._afterAction(e,t,c,s);u!==void 0&&(c=u);}return c}async _invokeInternalAsync(e,t,r){let o=this._prepareInvoke(e,t,r);if("success"in o)return o;let{stored:n,childFrame:s,childScope:a}=o;if(this._beforeAction!==null){let u=this._beforeAction(e,t,s);if(u?.skip)return ae(u.data,s.counters)}let c;if(n.compiled?c=await n.compiled.fn(s,a,n.compiled.$):(c=await this._directiveRunner(n.directives,s),this._maybeAutoPromote(n)),this._afterAction!==null){let u=this._afterAction(e,t,c,s);u!==void 0&&(c=u);}return c}_prepareInvoke(e,t,r){let o=this._registry.get(e);if(!o)return Te(e,r.counters);if(e.includes("/")&&!this._isAccessible(e,r))return $e(e,r.counters);if(r.depth>=r.limits.maxDepth)return Se(e,r.limits.maxDepth,r.counters);let n=Object.create(r.scope);t&&Object.assign(n,t);let s=r.child("action:"+e,0,e).withScope(n);return {stored:o,childFrame:s,childScope:n}}_maybeAutoPromote(e){this._requestedMode==="auto"&&++e.invokeCount>=this._threshold&&(e.compiled=this._compileAction(e.definition.id,e.directives),this._mode!=="jit"&&this._promote());}_executeDirectives(e,t){return this._directiveExecutor(e,t,this._handlers,this._directiveHooks,this._typeField,this._engineRef,this._limits.maxDirectives)}async _executeDirectivesAsync(e,t){return this._directiveExecutor(e,t,this._handlers,this._directiveHooks,this._typeField,this._engineRef,this._limits.maxDirectives)}_compileAction(e,t){let r=this._miniGraph.isAsync(e),o=this._miniGraph.isInteractive(e),n=Pe(this._definitions,o,this._interactiveHandlerSet),{fn:s,isAsync:a,isInteractive:c}=_e(t,this._directiveAnalysis,this._typeField,this._asyncHandlerSet,r,o,n),u=te(this._definitions,a,c),d={d:t,h:u,hooks:this._directiveHooks,engine:this._engineRef,runner:this._directiveRunner,runnerSync:this._directiveRunnerSync};return {fn:s,$:d,isAsync:a,isInteractive:c}}_isAccessible(e,t){let o="action:"+e.slice(0,e.lastIndexOf("/"));return t.path.includes(o)}_requireCtx(){if(this._ctx===void 0)throw new Error("No context set. Pass ctx to invoke(id, params, ctx), call setContext(ctx), or use context(ctx, fn).");return this._ctx}_promote(){this._directiveExecutor=this._buildJitDirectiveExecutor(),this._mode="jit";}_buildJitDirectiveExecutor(){let{fn:e}=ye(this._directiveAnalysis,this._isAsync);return e}_validateInteractiveVariants(e){let t=[],r=[],o=new Set(e),n=new Set;for(let a of this._registeredIds){if(!this._miniGraph.isInteractive(a))continue;let c=this._registry.get(a);if(c===void 0)continue;let u=Ee(c.directives,this._typeField,this._definitions,this._subDirectiveFieldsForGraph,this._interactiveHandlerSet,h=>this._miniGraph.isInteractive(h),core.isGeneratorFunction);if(u.size===0)continue;let d=o.has(a);for(let h of u){let f=`Action "${a}" is transitively interactive but handler "${h}" has no executeInteractive variant (and execute is not a generator function, and interactive flag is not set)`;d?(t.push({actionId:a,error:f,code:"MISSING_INTERACTIVE_VARIANT"}),n.add(a)):r.push({actionId:a,code:"MISSING_INTERACTIVE_VARIANT",message:f});}}if(n.size>0){for(let a of n)this._registry.delete(a),this._registeredIds.delete(a),this._miniGraph.remove(a);this._miniGraph.recompute();}return {validRegistered:e.filter(a=>!n.has(a)),errors:t,warnings:r}}_invalidateAndMaybeRecompile(){for(let e of this._registry.values())e.compiled=null;if(this._requestedMode==="jit")for(let[e,t]of this._registry)t.compiled=this._compileAction(e,t.directives);}};function Ct(i){return new Re(i)}exports.RESERVED_TYPES=N;exports.SimpleEmitter=X;exports.buildActionExecutor=_e;exports.buildDirectiveExecutor=ye;exports.createActionEngine=Ct;exports.createDirectiveInterpreter=oe;exports.drainAsync=Je;exports.drainSync=We;exports.normalizeDirectives=B;exports.replayResponder=Ye;
3
+ }`;return t?`(${e?"async function*()":"function*()"}${n})()`:`(${e?"async ()=>":"()=>"}${n})()`}function ct(i,e,t,n){let s=JSON.stringify(e.name);typeof e.resolve=="function"?(i.push("try{"),i.push(`scope[${s}]=${t}.resolve(ctx,scope).value;`),i.push(`}catch(_e){errors.push({directiveIndex:${n},error:"Binding resolve: "+_e});counters.errors++;}`)):i.push(`scope[${s}]=${t}.value;`);}function at(i,e,t,n,s,r){typeof e.resolve=="function"?(i.push("try{"),i.push(`const _rv=${t}.resolve(ctx,scope);`),i.push(`return{success:true,aborted:false,appliedCount,skippedCount,errors,processedCount:${s},totalCount:${r},counters,data:"value" in _rv?_rv.value:"return" in _rv?_rv.return:${t}.value};`),i.push(`}catch(_e){errors.push({directiveIndex:${n},error:"Control resolve: "+_e});counters.errors++;}`)):i.push(`return{success:true,aborted:false,appliedCount,skippedCount,errors,processedCount:${s},totalCount:${r},counters,data:${t}.value};`);}function ut(i,e,t,n,s,r){typeof e.resolve=="function"?(i.push("try{"),i.push(`const _rv=${t}.resolve(ctx,scope);`),i.push(`return{success:false,aborted:true,abortedBy:"throw",appliedCount,skippedCount,errors,processedCount:${s},totalCount:${r},counters,data:"message" in _rv?_rv.message:"throw" in _rv?_rv.throw:${t}.message};`),i.push(`}catch(_e){errors.push({directiveIndex:${n},error:"Control resolve: "+_e});counters.errors++;}`)):i.push(`return{success:false,aborted:true,abortedBy:"throw",appliedCount,skippedCount,errors,processedCount:${s},totalCount:${r},counters,data:${t}.message};`);}function lt(i,e,t,n,s,r){let o=typeof e.as=="string",a=o?JSON.stringify(e.as):"";i.push(`{const _ack=yield{source:"pause",directive:${t},frame,index:${n},payload:{message:${t}.message}};`),i.push(`if(_ack===false||_ack==="abort"||_ack==="cancel")return{success:false,aborted:true,abortedBy:"pause",appliedCount,skippedCount,errors,processedCount:${s},totalCount:${r},counters,data:_ack};`),i.push("appliedCount++;counters.directivesApplied++;"),o&&i.push(`if(_ack!==undefined)scope[${a}]=_ack;`),i.push("}");}function dt(i,e,t,n,s){let{L:r,total:o,typeField:a,handlerVars:c,hasBefore:u,hasAfter:d,awBefore:h,awAfter:f,awHandler:p,actionIsAsync:l,actionIsInteractive:g,interactiveHandlerSet:A}=s,D=i[a],b=c.get(D),P=typeof i.resolve=="function",R=typeof i.as=="string",I=Array.isArray(i.catch)&&i.catch.length>0,T=R?JSON.stringify(i.as):"",_=g&&A.has(D),C=s.blockCounter.n++;r.push(`_b${C}:{`);let k=u||P,x=u;k&&r.push(`let _dir=${e};`),x&&r.push("let _df=frame;"),u&&(r.push("try{"),r.push(`const _bd=${h}_hookBefore(${e},frame);`),r.push(`if(_bd==="skip"){skippedCount++;counters.directivesSkipped++;break _b${C};}`),r.push(`if(_bd==="abort")${ye('"beforeDirective"',n-1,o)}`),r.push('if(typeof _bd==="object"&&_bd!==null){'),r.push(`if("abort" in _bd)${ye("_bd.abort",n-1,o)}`),r.push('if("ctx" in _bd)_df=frame.withCtx(_bd.ctx);'),r.push('if("directive" in _bd)_dir=_bd.directive;'),r.push("}"),r.push(`}catch(_e){errors.push({directiveIndex:${t},error:"Hook beforeDirective: "+_e});counters.errors++;}`)),u?(r.push('if(typeof _dir.resolve==="function"){'),r.push("try{const _r=_dir.resolve(_df.ctx,scope);_dir=Object.assign({},_dir,_r);}"),r.push(`catch(_e){errors.push({directiveIndex:${t},error:"Directive resolve: "+_e});counters.errors++;break _b${C};}}`)):P&&(r.push(`try{const _r=${e}.resolve(ctx,scope);_dir=Object.assign({},${e},_r);}`),r.push(`catch(_e){errors.push({directiveIndex:${t},error:"Directive resolve: "+_e});counters.errors++;break _b${C};}`));let E=k?"_dir":e,M=x?"_df":"frame";if(r.push("let _result;"),_?(r.push(`try{_result=yield* ${b}(${E},${M},$.engine);}`),r.push("catch(_e){_result={ok:false,error:String(_e)};}")):g?(r.push(`try{_result=${p}${b}(${E},${M},$.engine);if(_result&&_result.iterator)_result=yield* _result.iterator;}`),r.push("catch(_e){_result={ok:false,error:String(_e)};}")):(r.push(`try{_result=${p}${b}(${E},${M},$.engine);}`),r.push("catch(_e){_result={ok:false,error:String(_e)};}")),r.push("if(_result.ok){"),r.push("appliedCount++;counters.directivesApplied++;"),R&&r.push(`scope[${T}]=_result.data;`),r.push(`if(_result.halt)${nt(n,o)}`),r.push("}else{"),r.push(`if(_result.halt)${rt(n,o)}`),I){r.push('scope.$exception=_result.error||"handler failed";');let H=l?"$.runner":"$.runnerSync";r.push(`const _cr=${p}${H}(${e}.catch,${M});`),r.push("appliedCount+=_cr.appliedCount;"),r.push("for(let _j=0;_j<_cr.errors.length;_j++)errors.push(_cr.errors[_j]);"),r.push(`if(_cr.aborted)return{success:_cr.success,aborted:true,abortedBy:_cr.abortedBy,appliedCount,skippedCount,errors,processedCount:${n},totalCount:${o},counters,data:_cr.data};`);}else r.push(`errors.push({directiveIndex:${t},error:_result.error||"handler failed"});counters.errors++;`);r.push("}"),d&&(r.push("try{"),r.push(`const _ad=${f}_hookAfter(${E},_result,${M});`),r.push(`if(_ad==="abort")${ye('"afterDirective"',n,o)}`),r.push(`}catch(_e){errors.push({directiveIndex:${t},error:"Hook afterDirective: "+_e});counters.errors++;}`)),r.push("}");}function ft(i,e,t,n,s,r){let{L:o}=r,a=i.cond,c=typeof a=="boolean";o.push("{"),c?o.push(`if(${a?"true":"false"}){`):(o.push("let _cond=false,_condOk=true;"),o.push(`try{const _c=${e}.cond;_cond=typeof _c==="function"?!!_c(ctx,scope):!!_c;}`),o.push(`catch(_e){errors.push({directiveIndex:${t},error:"if cond: "+_e});counters.errors++;_condOk=false;}`),o.push("if(_condOk){"),o.push("if(_cond){"));let u=i.then;Array.isArray(u)&&u.length>0&&ge(u,`${e}.then`,n,s,r),o.push("}");let d=i.else;Array.isArray(d)&&d.length>0&&(o.push("else{"),ge(d,`${e}.else`,n,s,r),o.push("}")),c||o.push("}"),o.push("}");}function ge(i,e,t,n,s){let r=t!==-1;for(let o=0;o<i.length;o++){let a=i[o],c=`${e}[${o}]`,u=r?t:o,d=r?n:o+1;switch(a[s.typeField]){case "const":case "let":ct(s.L,a,c,u);break;case "return":at(s.L,a,c,u,d,s.total);break;case "throw":ut(s.L,a,c,u,d,s.total);break;case "pause":lt(s.L,a,c,u,d,s.total);break;case "if":{let f=r?t:o,p=r?n:o+1;ft(a,c,u,f,p,s);break}default:dt(a,c,u,d,s);break}}}function xe(i,e,t){for(let n of i){let s=n[e];if(s&&!N.has(s)&&t.add(s),s==="if"){let r=n.then;Array.isArray(r)&&r.length>0&&xe(r,e,t);let o=n.else;Array.isArray(o)&&o.length>0&&xe(o,e,t);}}}var Ie=new Set;function me(i,e,t,n=Ie,s,r=false,o=Ie){let a=[],c=i.length,{filledNames:u,hasAnyAsync:d,asyncNames:h}=e,f=u.has("beforeDirective"),p=u.has("afterDirective"),l=u.has("onDirectivesComplete"),g=s!==void 0?s:ce(i,n,t),A=d||g,D=A?"await ":"",b=h.has("beforeDirective")?"await ":"",P=h.has("afterDirective")?"await ":"",R=h.has("onDirectivesComplete")?"await ":"",I=new Set;xe(i,t,I);let T=new Map,_=0;for(let E of I)T.set(E,`_h${_++}`);it(a,T,f,p),ge(i,"$.d",-1,0,{L:a,total:c,typeField:t,handlerVars:T,hasBefore:f,hasAfter:p,awBefore:b,awAfter:P,awHandler:D,actionIsAsync:A,actionIsInteractive:r,interactiveHandlerSet:o,blockCounter:{n:0}}),st(a,c,l,R);let k=ot(a.join(`
4
+ `),A,r);return {fn:new Function("frame","scope","$",`"use strict";
5
+ return ${k};`),isAsync:A,isInteractive:r}}function ce(i,e,t){for(let n of i){let s=n[t];if(s&&e.has(s))return true;if(s==="if"){let o=n.then;if(Array.isArray(o)&&o.length>0&&ce(o,e,t))return true;let a=n.else;if(Array.isArray(a)&&a.length>0&&ce(a,e,t))return true}let r=n.catch;if(Array.isArray(r)&&r.length>0&&ce(r,e,t))return true}return false}function _e(i,e,t){return {success:false,aborted:false,appliedCount:0,skippedCount:0,processedCount:0,totalCount:0,errors:[{directiveIndex:-1,error:e}],counters:i,...t}}function we(i,e){return _e(e,`Action not found: "${i}"`,{aborted:true,abortedBy:"action-not-found"})}function Te(i,e,t){return _e(t,`Max depth ${e} exceeded invoking "${i}"`,{aborted:true,abortedBy:"maxDepth"})}function Se(i,e){return _e(e,`Action "${i}" is private (sub-action). Can only be invoked from within its parent scope.`)}function ae(i,e){return {success:true,aborted:false,appliedCount:0,skippedCount:0,processedCount:0,totalCount:0,errors:[],data:i,counters:e}}function pt(i){return typeof i=="object"&&i!==null&&"execute"in i}function $e(i){let e=new Map;for(let[t,n]of i){let s=n.subDirectives;if(!s)continue;let r=Object.keys(s);if(r.length===0)continue;let o=null;for(let a=0;a<r.length;a++){let c=r[a];c!=="catch"&&s[c].graph!==false&&(o===null&&(o=[]),o.push(c));}o!==null&&e.set(t,o);}return e}function Me(i){let e=new Map;for(let[t,n]of i){let s=n.subDirectives;if(!s)continue;let r=Object.keys(s);if(r.length===0)continue;let o=null;for(let a=0;a<r.length;a++){let c=r[a];c!=="catch"&&(o===null&&(o=[]),o.push(c));}o!==null&&e.set(t,o);}return e}function He(i,e,t){if(!e)return t;let n=new Set(t);for(let[s,r]of i)r.executeInteractive!==void 0&&n.add(s);return n}function te(i,e,t){let n=Object.create(null);for(let[s,r]of i){let o;t&&r.executeInteractive!==void 0?o=r.executeInteractive:e&&r.executeAsync!==void 0?o=r.executeAsync:o=r.execute,n[s]=o;}return n}function Pe(i){let e=Object.create(null),t=new Map;for(let n of Object.keys(i)){let s=i[n];pt(s)?(e[n]=s.execute,t.set(n,s)):(e[n]=s,t.set(n,{execute:s}));}return {handlers:e,definitions:t}}function Fe(i,e){if(i==="*")return true;if(!i.includes("*"))return i===e;let t=i.replace(/[.+^${}()|[\]\\]/g,"\\$&");return new RegExp("^"+t.replace(/\*/g,".*")+"$").test(e)}function Ge(i){return typeof i=="string"?{pattern:i}:i}function Be(i,e,t){let n=new Map;if(!e&&!t){for(let s of i)n.set(s,{status:"available"});return n}if(e){let s=e.map(Ge);for(let r of i){let o=s.some(a=>Fe(a.pattern,r));n.set(r,{status:o?"available":"denied"});}}else {let s=t.map(Ge);for(let r of i){let o=s.find(a=>Fe(a.pattern,r));o?n.set(r,{status:"denied",reason:o.reason,source:o.source}):n.set(r,{status:"available"});}}return n}function je(i){let{typeField:e,asyncHandlerSet:t,interactiveHandlerSet:n,subDirectiveFieldsForGraph:s}=i,r=new Map,o=new Set,a=new Set,c=new Set,u=new Set;return {upsert(d,h,f){r.set(d,vt(h,e,s)),re(h,t,e,s)?o.add(d):o.delete(d),f||ie(h,n,e,s)?a.add(d):a.delete(d);},remove(d){r.delete(d),o.delete(d),a.delete(d);},recompute(){c=Ne(r,o),u=Ne(r,a);},isAsync(d){return c.has(d)},isInteractive(d){return u.has(d)},has(d){return r.has(d)}}}var ue=new Map;function vt(i,e,t=ue){let n=new Set;return ne(i,e,t,n),n}function ne(i,e,t,n){for(let s of i){let r=s[e];r==="action"&&typeof s.id=="string"&&n.add(s.id);let o=s.catch;if(Array.isArray(o)&&o.length>0&&ne(o,e,t,n),r==="if"){let c=s.then;Array.isArray(c)&&c.length>0&&ne(c,e,t,n);let u=s.else;Array.isArray(u)&&u.length>0&&ne(u,e,t,n);continue}if(r===void 0)continue;let a=t.get(r);if(a!==void 0)for(let c=0;c<a.length;c++){let u=s[a[c]];!Array.isArray(u)||u.length===0||ne(u,e,t,n);}}}function re(i,e,t,n=ue){for(let s of i){let r=s[t];if(r!==void 0&&e.has(r))return true;let o=s.catch;if(Array.isArray(o)&&o.length>0&&re(o,e,t,n))return true;if(r==="if"){let c=s.then;if(Array.isArray(c)&&c.length>0&&re(c,e,t,n))return true;let u=s.else;if(Array.isArray(u)&&u.length>0&&re(u,e,t,n))return true;continue}if(r===void 0)continue;let a=n.get(r);if(a!==void 0)for(let c=0;c<a.length;c++){let u=s[a[c]];if(!(!Array.isArray(u)||u.length===0)&&re(u,e,t,n))return true}}return false}function ie(i,e,t,n=ue){for(let s of i){let r=s[t];if(r==="pause"||r!==void 0&&e.has(r))return true;let o=s.catch;if(Array.isArray(o)&&o.length>0&&ie(o,e,t,n))return true;if(r==="if"){let c=s.then;if(Array.isArray(c)&&c.length>0&&ie(c,e,t,n))return true;let u=s.else;if(Array.isArray(u)&&u.length>0&&ie(u,e,t,n))return true;continue}if(r===void 0)continue;let a=n.get(r);if(a!==void 0)for(let c=0;c<a.length;c++){let u=s[a[c]];if(!(!Array.isArray(u)||u.length===0)&&ie(u,e,t,n))return true}}return false}function Q(i,e,t=ue){for(let n of i){let s=n[e];if(s==="pause")return true;let r=n.catch;if(Array.isArray(r)&&r.length>0&&Q(r,e,t))return true;if(s==="if"){let a=n.then;if(Array.isArray(a)&&a.length>0&&Q(a,e,t))return true;let c=n.else;if(Array.isArray(c)&&c.length>0&&Q(c,e,t))return true;continue}if(s===void 0)continue;let o=t.get(s);if(o!==void 0)for(let a=0;a<o.length;a++){let c=n[o[a]];if(!(!Array.isArray(c)||c.length===0)&&Q(c,e,t))return true}}return false}function Ne(i,e){let t=new Set(e),n=true;for(;n;){n=false;for(let[s,r]of i)if(!t.has(s)){for(let o of r)if(t.has(o)){t.add(s),n=true;break}}}return t}var le=class{depth=0;errors=[];warnings=[];actions=[];registered=[];begin(){this.depth++,this.depth===1&&(this.errors=[],this.warnings=[],this.actions=[],this.registered=[]);}endDepth(){if(this.depth<=0)throw new Error("endBatch() called without matching beginBatch()");return this.depth--,this.depth===0}isActive(){return this.depth>0}accumulate(e,t,n,s){this.errors.push(...e),this.warnings.push(...t);for(let r of n)this.actions.push(r);this.registered.push(...s);}};function Le(i){for(let e of i)if(N.has(e))throw new Error(`Handler type "${e}" is reserved for engine-internal directives`)}function Oe(i,e){if(i&&e)throw new Error("allowedDirectives and blockedDirectives are mutually exclusive. Provide one or neither.")}function Ve(i,e,t){if(i)return;if(e.size>0){let s=Array.from(e).join(", ");throw new Error(`Handler(s) [${s}] are interactive but engine has no \`interactive\` config. Add \`interactive: {}\` to enable interactive mode.`)}let n=[];for(let[s,r]of t)r.executeInteractive!==void 0&&n.push(s);if(n.length>0)throw new Error(`Handler(s) [${n.join(", ")}] declare \`executeInteractive\` variant but engine has no \`interactive\` config. Add \`interactive: {}\` to enable interactive mode.`)}function ze(i){let e=new Set,t=new Set;for(let[n,s]of i)(s.async===true||core.isAsyncFunction(s.execute))&&e.add(n),(s.interactive===true||core.isGeneratorFunction(s.execute))&&t.add(n);return {asyncHandlerSet:e,interactiveHandlerSet:t}}function Ke(i,e,t,n){let s=t?te(i,true,false):e,r=n?te(i,t,true):null;return {handlersAsync:s,handlersInteractive:r}}function De(i,e){return e?{next:()=>Promise.resolve({value:i,done:true}),return:()=>Promise.resolve({value:i,done:true}),throw:s=>Promise.reject(s),[Symbol.asyncIterator](){return this}}:{next:()=>({value:i,done:true}),return:()=>({value:i,done:true}),throw:n=>{throw n},[Symbol.iterator](){return this}}}function Ue(i,e,t,n,s,r){if(r){let c=i;return {async next(d){let h=await c.next(d);if(h.done){let f=h.value;if(s!==null){let p=s(e,t,f,n);p!==void 0&&(f=p);}return {value:f,done:true}}return {value:h.value,done:false}},async return(){let d=await c.return(void 0),h=d.value;if(d.done&&s!==null){let f=s(e,t,h,n);f!==void 0&&(h=f);}return {value:h,done:true}},async throw(d){let h=await c.throw(d);if(h.done){let f=h.value;if(s!==null){let p=s(e,t,f,n);p!==void 0&&(f=p);}return {value:f,done:true}}return {value:h.value,done:false}},[Symbol.asyncIterator](){return this}}}let o=i;return {next(c){let u=o.next(c);if(u.done){let d=u.value;if(s!==null){let h=s(e,t,d,n);h!==void 0&&(d=h);}return {value:d,done:true}}return {value:u.value,done:false}},return(){let c=o.return(void 0),u=c.value;if(c.done&&s!==null){let d=s(e,t,u,n);d!==void 0&&(u=d);}return {value:u,done:true}},throw(c){let u=o.throw(c);if(u.done){let d=u.value;if(s!==null){let h=s(e,t,d,n);h!==void 0&&(d=h);}return {value:d,done:true}}return {value:u.value,done:false}},[Symbol.iterator](){return this}}}var _t=8,Dt="type",Ce={maxDepth:10,maxRules:1e4,maxDirectives:1e5},Re=class{_directiveExecutor;_mode;_ctx;_requestedMode;_threshold;_limits;_typeField;_handlers;_handlersAsync;_handlersInteractive;_definitions;_directiveHooks;_directiveAnalysis;_asyncHandlerSet;_interactiveHandlerSet;_isAsync;_isInteractive;_directivePermissions;_subDirectiveFieldsForGraph;_subDirectiveFieldsAll;_miniGraph;_interactiveExecutor;_beforeAction;_afterAction;_registry=new Map;_emitter=new X;_batch=new le;_registeredIds=new Set;_directiveRunner;_directiveRunnerSync;_engineRef;constructor(e){this._requestedMode=e.mode??"auto",this._threshold=e.autoJitThreshold??_t,this._typeField=e.typeField??Dt,this._limits={maxDepth:e.limits?.maxDepth??Ce.maxDepth,maxRules:e.limits?.maxRules??Ce.maxRules,maxDirectives:e.limits?.maxDirectives??Ce.maxDirectives};let{handlers:t,definitions:n}=Pe(e.handlers);Le(Object.keys(e.handlers)),Oe(e.allowedDirectives,e.blockedDirectives),this._handlers=t,this._definitions=n,this._directivePermissions=Be(Object.keys(t),e.allowedDirectives,e.blockedDirectives),this._directiveHooks=e.directiveHooks??{},this._beforeAction=e.actionHooks?.beforeAction??null,this._afterAction=e.actionHooks?.afterAction??null,this._directiveAnalysis=core.analyzeSlots(this._directiveHooks,core.DIRECTIVE_SLOT_NAMES);let{asyncHandlerSet:s,interactiveHandlerSet:r}=ze(this._definitions);this._asyncHandlerSet=s,this._interactiveHandlerSet=r,this._isInteractive=e.interactive!==void 0,Ve(this._isInteractive,r,this._definitions),this._isAsync=this._directiveAnalysis.hasAnyAsync||s.size>0;let{handlersAsync:o,handlersInteractive:a}=Ke(this._definitions,this._handlers,this._isAsync,this._isInteractive);this._handlersAsync=o,this._handlersInteractive=a;let c=$e(this._definitions);this._subDirectiveFieldsForGraph=c,this._subDirectiveFieldsAll=Me(this._definitions),this._miniGraph=je({typeField:this._typeField,asyncHandlerSet:s,interactiveHandlerSet:r,subDirectiveFieldsForGraph:c}),this._engineRef=this._buildEngineRef();let u=oe(this._directiveAnalysis,false);this._directiveRunner=this._buildDirectiveRunner(),this._directiveRunnerSync=this._buildDirectiveRunnerSync(u);let d=this._buildExecutors(u);this._directiveExecutor=d.directiveExecutor,this._mode=d.mode,this._interactiveExecutor=d.interactiveExecutor;}_buildEngineRef(){return {runDirectives:(e,t)=>this._executeDirectives(e,t),runDirectivesAsync:(e,t)=>this._executeDirectivesAsync(e,t),invoke:(e,t,n)=>this._invokeInternal(e,t,n),invokeAsync:(e,t,n)=>this._invokeInternalAsync(e,t,n),isActionAsync:e=>this._miniGraph.has(e)?this._miniGraph.isAsync(e):void 0,isActionInteractive:e=>this._miniGraph.has(e)?this._miniGraph.isInteractive(e):void 0,invokeInteractive:(e,t,n)=>this._invokeInteractiveInternal(e,t,n),runDirectivesInteractive:(e,t)=>this._executeDirectivesInteractive(e,t),evaluateRules:()=>{throw new Error("evaluateRules() not available in ActionEngine context. Use createRuleEngine().")},evaluateRulesAsync:()=>{throw new Error("evaluateRulesAsync() not available in ActionEngine context. Use createRuleEngine().")}}}_buildDirectiveRunner(){let e=this._isAsync?this._handlersAsync:this._handlers;return (t,n)=>this._directiveExecutor(t,n,e,this._directiveHooks,this._typeField,this._engineRef,this._limits.maxDirectives)}_buildDirectiveRunnerSync(e){return (t,n)=>e(t,n,this._handlers,this._directiveHooks,this._typeField,this._engineRef,this._limits.maxDirectives)}_buildExecutors(e){let t=this._isAsync?oe(this._directiveAnalysis,true):e,n=this._requestedMode==="jit"?"jit":"interpret",s=this._isInteractive?this._isAsync?he(this._directiveAnalysis,true):he(this._directiveAnalysis,false):null;return {directiveExecutor:t,mode:n,interactiveExecutor:s}}register(e){let t=[],n=[],s=[],r=[];for(let c of e){if(!c.id){n.push({actionId:"",error:"Action must have an id"});continue}if(!this._isInteractive&&Q(c.directives,this._typeField,this._subDirectiveFieldsForGraph)){n.push({actionId:c.id,error:'Action uses directive type:"pause" but engine has no `interactive` config. Add `interactive: {}` to enable.'});continue}let u=be(c,this._handlers,this._definitions,this._typeField);if(u.length>0){for(let d of u)n.push({actionId:c.id,error:d});continue}r.push(c);}for(let c of r){let u=B(c.directives,this._typeField,this._subDirectiveFieldsAll),d={definition:c,directives:u,compiled:null,invokeCount:0};this._registry.set(c.id,d),this._registeredIds.add(c.id),this._miniGraph.upsert(c.id,u,c.interactive===true),t.push(c.id);}if(this._batch.isActive())return this._batch.accumulate(n,s,r,t),{registered:t,errors:n,warnings:s};let o=t;if(r.length>0){this._miniGraph.recompute();let c=this._validateInteractiveVariants(t);c.errors.length>0&&n.push(...c.errors),c.warnings.length>0&&s.push(...c.warnings),o=c.validRegistered,this._invalidateAndMaybeRecompile();}let a={registered:o,errors:n,warnings:s};if(o.length>0){let c=new Set(o),u=r.filter(d=>c.has(d.id));this._emitter.emit("register",{actions:u,result:a,registered:o});}return a}unregister(e){let t=this._registry.delete(e);t&&(this._registeredIds.delete(e),this._miniGraph.remove(e));let n=e+"/",s=[];for(let r of this._registry.keys())r.startsWith(n)&&(this._registry.delete(r),this._registeredIds.delete(r),this._miniGraph.remove(r),s.push(r));return t&&(this._miniGraph.recompute(),this._invalidateAndMaybeRecompile(),this._emitter.emit("unregister",{id:e,cascaded:s})),t}invoke(e,t,n){if(this._miniGraph.isInteractive(e))throw new Error(`Cannot call invoke("${e}") \u2014 action is interactive (transitively). Use invokeInteractive() instead.`);if(this._miniGraph.isAsync(e))throw new Error(`Cannot call invoke("${e}") \u2014 action is async (transitively). Use invokeAsync() instead.`);if(this._directiveAnalysis.hasAnyAsync)throw new Error(`Cannot call invoke("${e}") \u2014 engine has async directive hooks. Use invokeAsync() instead.`);let s=n!==void 0?n:this._requireCtx(),r=core.createRootFrame(s,this._limits);return this._invokeInternal(e,t,r)}async invokeAsync(e,t,n){if(this._miniGraph.isInteractive(e))throw new Error(`Cannot call invokeAsync("${e}") \u2014 action is interactive (transitively). Use invokeInteractive() instead.`);let s=n!==void 0?n:this._requireCtx(),r=core.createRootFrame(s,this._limits);return this._invokeInternalAsync(e,t,r)}setContext(e){this._ctx=e;}context(e,t){let n=this._ctx;this._ctx=e;try{return t()}finally{this._ctx=n;}}beginBatch(){this._batch.begin();}endBatch(){if(!this._batch.endDepth())return {registered:[],errors:[],warnings:[]};let t=this._batch.registered;if(this._batch.registered.length>0){this._miniGraph.recompute();let s=this._validateInteractiveVariants(this._batch.registered);this._batch.errors.push(...s.errors),this._batch.warnings.push(...s.warnings),t=s.validRegistered,this._invalidateAndMaybeRecompile();}let n={registered:t,errors:this._batch.errors,warnings:this._batch.warnings};if(t.length>0){let s=new Set(t),r=this._batch.actions.filter(o=>s.has(o.id));this._emitter.emit("register",{actions:r,result:n,registered:t});}return n}on(e,t){return this._emitter.on(e,t)}get handlerDefinitions(){return this._definitions}get registeredIds(){return this._registeredIds}getActionDefinition(e){return this._registry.get(e)?.definition}get typeField(){return this._typeField}get subDirectiveFieldsForGraph(){return this._subDirectiveFieldsForGraph}get directivePermissions(){return this._directivePermissions}get isAsync(){return this._isAsync}get isInteractive(){return this._isInteractive}isActionAsync(e){if(this._miniGraph.has(e))return this._miniGraph.isAsync(e)}isActionInteractive(e){if(this._miniGraph.has(e))return this._miniGraph.isInteractive(e)}invokeInteractive(e,t,n){if(!this._isInteractive||this._interactiveExecutor===null)throw new Error("Cannot call invokeInteractive() \u2014 engine has no `interactive` config. Add `interactive: {}` to enable.");let s=n!==void 0?n:this._requireCtx(),r=core.createRootFrame(s,this._limits);return this._invokeInteractiveInternal(e,t,r)}_invokeInteractiveInternal(e,t,n){let s=this._prepareInvoke(e,t,n);if("success"in s)return De(s,this._isAsync);let{stored:r,childFrame:o,childScope:a}=s;if(this._beforeAction!==null){let u=this._beforeAction(e,t,o);if(u?.skip)return De(ae(u.data,o.counters),this._isAsync)}let c;if(r.compiled&&r.compiled.isInteractive)c=r.compiled.fn(o,o.scope,r.compiled.$);else {let u=this._interactiveExecutor;c=u(r.directives,o,this._handlersInteractive,this._directiveHooks,this._typeField,this._engineRef,this._limits.maxDirectives);}return Ue(c,e,t,o,this._afterAction,this._isAsync)}_executeDirectivesInteractive(e,t){if(!this._isInteractive||this._interactiveExecutor===null)throw new Error("runDirectivesInteractive: engine has no `interactive` config");return this._interactiveExecutor(e,t,this._handlersInteractive,this._directiveHooks,this._typeField,this._engineRef,this._limits.maxDirectives)}get compilationMode(){return this._mode}get directiveHookSlots(){return this._directiveAnalysis.filledNames}get asyncSlots(){return this._directiveAnalysis.asyncNames}compile(){if(this._requestedMode!=="interpret"){this._mode!=="jit"&&(this._mode="jit");for(let[e,t]of this._registry)t.compiled||(t.compiled=this._compileAction(e,t.directives));}}_invokeInternal(e,t,n){let s=this._prepareInvoke(e,t,n);if("success"in s)return s;let{stored:r,childFrame:o,childScope:a}=s;if(this._beforeAction!==null){let u=this._beforeAction(e,t,o);if(u?.skip)return ae(u.data,o.counters)}let c;if(r.compiled?c=r.compiled.fn(o,a,r.compiled.$):this._isAsync&&!this._miniGraph.isAsync(e)?(r.compiled=this._compileAction(e,r.directives),c=r.compiled.fn(o,a,r.compiled.$)):(c=this._directiveRunner(r.directives,o),this._maybeAutoPromote(r)),this._afterAction!==null){let u=this._afterAction(e,t,c,o);u!==void 0&&(c=u);}return c}async _invokeInternalAsync(e,t,n){let s=this._prepareInvoke(e,t,n);if("success"in s)return s;let{stored:r,childFrame:o,childScope:a}=s;if(this._beforeAction!==null){let u=this._beforeAction(e,t,o);if(u?.skip)return ae(u.data,o.counters)}let c;if(r.compiled?c=await r.compiled.fn(o,a,r.compiled.$):(c=await this._directiveRunner(r.directives,o),this._maybeAutoPromote(r)),this._afterAction!==null){let u=this._afterAction(e,t,c,o);u!==void 0&&(c=u);}return c}_prepareInvoke(e,t,n){let s=this._registry.get(e);if(!s)return we(e,n.counters);if(e.includes("/")&&!this._isAccessible(e,n))return Se(e,n.counters);if(n.depth>=n.limits.maxDepth)return Te(e,n.limits.maxDepth,n.counters);let r=Object.create(n.scope);t&&Object.assign(r,t);let o=n.child("action:"+e,0,e).withScope(r);return {stored:s,childFrame:o,childScope:r}}_maybeAutoPromote(e){this._requestedMode==="auto"&&++e.invokeCount>=this._threshold&&(e.compiled=this._compileAction(e.definition.id,e.directives),this._mode!=="jit"&&(this._mode="jit"));}_executeDirectives(e,t){return this._directiveExecutor(e,t,this._handlers,this._directiveHooks,this._typeField,this._engineRef,this._limits.maxDirectives)}async _executeDirectivesAsync(e,t){return this._directiveExecutor(e,t,this._handlers,this._directiveHooks,this._typeField,this._engineRef,this._limits.maxDirectives)}_compileAction(e,t){let n=this._miniGraph.isAsync(e),s=this._miniGraph.isInteractive(e),r=He(this._definitions,s,this._interactiveHandlerSet),{fn:o,isAsync:a,isInteractive:c}=me(t,this._directiveAnalysis,this._typeField,this._asyncHandlerSet,n,s,r),u=te(this._definitions,a,c),d={d:t,h:u,hooks:this._directiveHooks,engine:this._engineRef,runner:this._directiveRunner,runnerSync:this._directiveRunnerSync};return {fn:o,$:d,isAsync:a,isInteractive:c}}_isAccessible(e,t){let s="action:"+e.slice(0,e.lastIndexOf("/"));return t.path.includes(s)}_requireCtx(){if(this._ctx===void 0)throw new Error("No context set. Pass ctx to invoke(id, params, ctx), call setContext(ctx), or use context(ctx, fn).");return this._ctx}_validateInteractiveVariants(e){let t=[],n=[],s=new Set(e),r=new Set;for(let a of this._registeredIds){if(!this._miniGraph.isInteractive(a))continue;let c=this._registry.get(a);if(c===void 0)continue;let u=ke(c.directives,this._typeField,this._definitions,this._subDirectiveFieldsForGraph,this._interactiveHandlerSet,h=>this._miniGraph.isInteractive(h),core.isGeneratorFunction);if(u.size===0)continue;let d=s.has(a);for(let h of u){let f=`Action "${a}" is transitively interactive but handler "${h}" has no executeInteractive variant (and execute is not a generator function, and interactive flag is not set)`;d?(t.push({actionId:a,error:f,code:"MISSING_INTERACTIVE_VARIANT"}),r.add(a)):n.push({actionId:a,code:"MISSING_INTERACTIVE_VARIANT",message:f});}}if(r.size>0){for(let a of r)this._registry.delete(a),this._registeredIds.delete(a),this._miniGraph.remove(a);this._miniGraph.recompute();}return {validRegistered:e.filter(a=>!r.has(a)),errors:t,warnings:n}}_invalidateAndMaybeRecompile(){for(let e of this._registry.values())e.compiled=null;if(this._requestedMode==="jit")for(let[e,t]of this._registry)t.compiled=this._compileAction(e,t.directives);}};function At(i){return new Re(i)}exports.RESERVED_TYPES=N;exports.SimpleEmitter=X;exports.buildActionExecutor=me;exports.createActionEngine=At;exports.createDirectiveInterpreter=oe;exports.drainAsync=We;exports.drainSync=qe;exports.normalizeDirectives=B;exports.replayResponder=Ye;
package/dist/index.d.cts CHANGED
@@ -658,22 +658,6 @@ declare function createDirectiveInterpreter<TCtx>(analysis: SlotAnalysis, isAsyn
658
658
 
659
659
  declare function createActionEngine<TCtx>(config: IActionEngineConfig<TCtx>): IActionEngine<TCtx>;
660
660
 
661
- type RuntimeDirectiveExecutorFn = (directives: readonly unknown[], frame: unknown, handlers: unknown, directiveHooks: unknown, typeField: string, engine: unknown, maxDirectives: number) => unknown;
662
- interface GeneratedDirectiveExecutor {
663
- fn: RuntimeDirectiveExecutorFn;
664
- isAsync: boolean;
665
- }
666
- /**
667
- * Compila um executor genérico de diretivas via `new Function`.
668
- *
669
- * @param analysis — slot analysis dos directive hooks (filled/async).
670
- * @param isAsync — se true, gera função `async ()` e prefixa `await` na chamada
671
- * do handler. Default: `analysis.hasAnyAsync` (preserva o comportamento legado
672
- * pra callers que não conhecem handler async). O engine sempre passa explícito,
673
- * computado a partir de `directiveAnalysis.hasAnyAsync || asyncHandlerSet.size > 0`.
674
- */
675
- declare function buildDirectiveExecutor(analysis: SlotAnalysis, isAsync?: boolean): GeneratedDirectiveExecutor;
676
-
677
661
  /**
678
662
  * Assinatura da função compilada pelo JIT per-action.
679
663
  *
@@ -725,4 +709,4 @@ interface GeneratedActionExecutor {
725
709
  */
726
710
  declare function buildActionExecutor(directives: readonly Directive[], analysis: SlotAnalysis, typeField: string, asyncHandlerSet?: ReadonlySet<string>, actionUsesAsyncOverride?: boolean, actionIsInteractive?: boolean, interactiveHandlerSet?: ReadonlySet<string>): GeneratedActionExecutor;
727
711
 
728
- export { type ActionDefinition, type ActionHooks, type ActionInterceptResult, type AsyncHandlerExecute, type AsyncInteractiveSession, type DirectiveExecutorFn, type DirectiveHandler, type DirectiveHandlerMap, type DirectiveHooks, type DirectivePermission, type DirectivePermissionConfig, type DirectivePermissionEntry, type DirectivePermissionStatus, type DirectiveRunnerFn, type EngineEventMap, type EngineEventName, type GeneratedActionExecutor, type GeneratedActionExecutorFn, type GeneratedDirectiveExecutor, type HandlerAnalysis, type HandlerBaseDefinition, type HandlerDefinition, type HandlerInput, type HandlerInputMap, type IActionEngine, type IActionEngineConfig, type InteractiveApplyResult, type InteractiveConfig, type InteractiveHandlerExecute, type InteractiveSession, type Listener, type PauseEvent, RESERVED_TYPES, type RegisterError, type RegisterEvent, type RegisterResult, type Responder, SimpleEmitter, type SubDirectiveFieldConfig, type SyncHandlerExecute, type UnregisterEvent, type ValidationResult, buildActionExecutor, buildDirectiveExecutor, createActionEngine, createDirectiveInterpreter, drainAsync, drainSync, normalizeDirectives, replayResponder };
712
+ export { type ActionDefinition, type ActionHooks, type ActionInterceptResult, type AsyncHandlerExecute, type AsyncInteractiveSession, type DirectiveExecutorFn, type DirectiveHandler, type DirectiveHandlerMap, type DirectiveHooks, type DirectivePermission, type DirectivePermissionConfig, type DirectivePermissionEntry, type DirectivePermissionStatus, type DirectiveRunnerFn, type EngineEventMap, type EngineEventName, type GeneratedActionExecutor, type GeneratedActionExecutorFn, type HandlerAnalysis, type HandlerBaseDefinition, type HandlerDefinition, type HandlerInput, type HandlerInputMap, type IActionEngine, type IActionEngineConfig, type InteractiveApplyResult, type InteractiveConfig, type InteractiveHandlerExecute, type InteractiveSession, type Listener, type PauseEvent, RESERVED_TYPES, type RegisterError, type RegisterEvent, type RegisterResult, type Responder, SimpleEmitter, type SubDirectiveFieldConfig, type SyncHandlerExecute, type UnregisterEvent, type ValidationResult, buildActionExecutor, createActionEngine, createDirectiveInterpreter, drainAsync, drainSync, normalizeDirectives, replayResponder };
package/dist/index.d.ts CHANGED
@@ -658,22 +658,6 @@ declare function createDirectiveInterpreter<TCtx>(analysis: SlotAnalysis, isAsyn
658
658
 
659
659
  declare function createActionEngine<TCtx>(config: IActionEngineConfig<TCtx>): IActionEngine<TCtx>;
660
660
 
661
- type RuntimeDirectiveExecutorFn = (directives: readonly unknown[], frame: unknown, handlers: unknown, directiveHooks: unknown, typeField: string, engine: unknown, maxDirectives: number) => unknown;
662
- interface GeneratedDirectiveExecutor {
663
- fn: RuntimeDirectiveExecutorFn;
664
- isAsync: boolean;
665
- }
666
- /**
667
- * Compila um executor genérico de diretivas via `new Function`.
668
- *
669
- * @param analysis — slot analysis dos directive hooks (filled/async).
670
- * @param isAsync — se true, gera função `async ()` e prefixa `await` na chamada
671
- * do handler. Default: `analysis.hasAnyAsync` (preserva o comportamento legado
672
- * pra callers que não conhecem handler async). O engine sempre passa explícito,
673
- * computado a partir de `directiveAnalysis.hasAnyAsync || asyncHandlerSet.size > 0`.
674
- */
675
- declare function buildDirectiveExecutor(analysis: SlotAnalysis, isAsync?: boolean): GeneratedDirectiveExecutor;
676
-
677
661
  /**
678
662
  * Assinatura da função compilada pelo JIT per-action.
679
663
  *
@@ -725,4 +709,4 @@ interface GeneratedActionExecutor {
725
709
  */
726
710
  declare function buildActionExecutor(directives: readonly Directive[], analysis: SlotAnalysis, typeField: string, asyncHandlerSet?: ReadonlySet<string>, actionUsesAsyncOverride?: boolean, actionIsInteractive?: boolean, interactiveHandlerSet?: ReadonlySet<string>): GeneratedActionExecutor;
727
711
 
728
- export { type ActionDefinition, type ActionHooks, type ActionInterceptResult, type AsyncHandlerExecute, type AsyncInteractiveSession, type DirectiveExecutorFn, type DirectiveHandler, type DirectiveHandlerMap, type DirectiveHooks, type DirectivePermission, type DirectivePermissionConfig, type DirectivePermissionEntry, type DirectivePermissionStatus, type DirectiveRunnerFn, type EngineEventMap, type EngineEventName, type GeneratedActionExecutor, type GeneratedActionExecutorFn, type GeneratedDirectiveExecutor, type HandlerAnalysis, type HandlerBaseDefinition, type HandlerDefinition, type HandlerInput, type HandlerInputMap, type IActionEngine, type IActionEngineConfig, type InteractiveApplyResult, type InteractiveConfig, type InteractiveHandlerExecute, type InteractiveSession, type Listener, type PauseEvent, RESERVED_TYPES, type RegisterError, type RegisterEvent, type RegisterResult, type Responder, SimpleEmitter, type SubDirectiveFieldConfig, type SyncHandlerExecute, type UnregisterEvent, type ValidationResult, buildActionExecutor, buildDirectiveExecutor, createActionEngine, createDirectiveInterpreter, drainAsync, drainSync, normalizeDirectives, replayResponder };
712
+ export { type ActionDefinition, type ActionHooks, type ActionInterceptResult, type AsyncHandlerExecute, type AsyncInteractiveSession, type DirectiveExecutorFn, type DirectiveHandler, type DirectiveHandlerMap, type DirectiveHooks, type DirectivePermission, type DirectivePermissionConfig, type DirectivePermissionEntry, type DirectivePermissionStatus, type DirectiveRunnerFn, type EngineEventMap, type EngineEventName, type GeneratedActionExecutor, type GeneratedActionExecutorFn, type HandlerAnalysis, type HandlerBaseDefinition, type HandlerDefinition, type HandlerInput, type HandlerInputMap, type IActionEngine, type IActionEngineConfig, type InteractiveApplyResult, type InteractiveConfig, type InteractiveHandlerExecute, type InteractiveSession, type Listener, type PauseEvent, RESERVED_TYPES, type RegisterError, type RegisterEvent, type RegisterResult, type Responder, SimpleEmitter, type SubDirectiveFieldConfig, type SyncHandlerExecute, type UnregisterEvent, type ValidationResult, buildActionExecutor, createActionEngine, createDirectiveInterpreter, drainAsync, drainSync, normalizeDirectives, replayResponder };
package/dist/index.js CHANGED
@@ -1,9 +1,5 @@
1
- import {analyzeSlots,DIRECTIVE_SLOT_NAMES,createRootFrame,processIntercept,Intercept,isAsyncFunction,isGeneratorFunction}from'@statedelta-actions/core';function We(i,e){let t;for(;;){let r=i.next(t);if(r.done)return r.value;t=e?e(r.value):void 0;}}async function Je(i,e){let t;for(;;){let r=await i.next(t);if(r.done)return r.value;t=e?await e(r.value):void 0;}}function Ye(i){let e=0;return ()=>{if(!(e>=i.length))return i[e++]}}var X=class{_listeners=new Map;on(e,t){let r=this._listeners.get(e);r||(r=new Set,this._listeners.set(e,r)),r.add(t);let o=false;return ()=>{o||(o=true,r.delete(t),r.size===0&&this._listeners.delete(e));}}once(e,t){let r=this.on(e,o=>{r(),t(o);});return r}emit(e,t){let r=this._listeners.get(e);if(!r||r.size===0)return;let o=[...r];for(let n=0;n<o.length;n++)try{o[n](t);}catch(s){console.error(`[SimpleEmitter] Listener error on "${e}":`,s);}}listenerCount(e){return this._listeners.get(e)?.size??0}hasListeners(e){let t=this._listeners.get(e);return t!==void 0&&t.size>0}off(e){this._listeners.delete(e);}removeAllListeners(){this._listeners.clear();}};var N=new Set(["const","let","return","throw","pause","if"]);function ke(i,e,t,r){let o=[];return se(i.directives,e,t,r,"directive",o,i.id),o}function se(i,e,t,r,o,n,s){for(let a=0;a<i.length;a++){let c=i[a],u=c[r],d=`${o}[${a}]`;if(!u){n.push(`${d}: missing type field "${r}"`);continue}if(u==="if"){let g=c.cond;typeof g!="function"&&typeof g!="boolean"&&n.push(`${d}: "if" requires cond as function or boolean`);let A=c.then;Array.isArray(A)?se(A,e,t,r,`${d}.then`,n,s):n.push(`${d}: "if" requires then as array`);let D=c.else;D!==void 0&&(Array.isArray(D)?se(D,e,t,r,`${d}.else`,n,s):n.push(`${d}.else: must be array`));continue}if(N.has(u))continue;if(!e[u])throw new Error(`Action "${s}" ${d}: no handler registered for type "${u}". Register the handler in createActionEngine({ handlers }) before registering this action.`);let h=t.get(u);if(h?.validate)try{let g=h.validate(c);g&&!g.valid&&n.push(`${d}: ${g.error??"validation failed"}`);}catch(g){n.push(`${d}: validate threw: ${g}`);}let f=c.catch;if(f&&Array.isArray(f))for(let g=0;g<f.length;g++){let D=f[g][r];if(!(D&&N.has(D))&&D&&!e[D])throw new Error(`Action "${s}" ${d}.catch[${g}]: no handler registered for type "${D}". Register the handler in createActionEngine({ handlers }) before registering this action.`)}let p=h?.subDirectives;if(p===void 0)continue;let l=Object.keys(p);for(let g=0;g<l.length;g++){let A=l[g];if(A==="catch")continue;let D=c[A];if(D===void 0){if(p[A].required)throw new Error(`Action "${s}" ${d}: handler "${u}" requires sub-directives field "${A}"`);continue}if(!Array.isArray(D))throw new Error(`Action "${s}" ${d}.${A}: must be an array of directives`);se(D,e,t,r,`${d}.${A}`,n,s);}}}var Qe=new Map;function B(i,e,t=Qe){let r=i.length,o=new Array(r);for(let n=0;n<r;n++){let s=i[n],a=s[e],c=s,u=false,d=s.catch;if(Array.isArray(d)&&d.length>0&&(c={...c,catch:B(d,e,t)},u=true),a==="if"){let h=s.then;Array.isArray(h)&&h.length>0&&(c={...c,then:B(h,e,t)},u=true);let f=s.else;Array.isArray(f)&&f.length>0&&(c={...c,else:B(f,e,t)},u=true);}else if(a!==void 0){let h=t.get(a);if(h!==void 0)for(let f=0;f<h.length;f++){let p=h[f],l=s[p];!Array.isArray(l)||l.length===0||(c={...c,[p]:B(l,e,t)},u=true);}}o[n]=u?c:s;}return o}function Ee(i,e,t,r,o,n,s){let a=new Set;return Z(i,e,t,r,o,n,s,a),a}function Z(i,e,t,r,o,n,s,a){for(let c of i){let u=c[e];if(u!==void 0){let f=t.get(u);if(f!==void 0&&f.subDirectives!==void 0){let p=r.get(u);if(p!==void 0){let l=false;for(let g=0;g<p.length;g++){let A=c[p[g]];if(!(!Array.isArray(A)||A.length===0)&&ee(A,e,r,o,n)){l=true;break}}l&&(f.executeInteractive!==void 0||f.interactive===true||s(f.execute)||a.add(u));}}}let d=c.catch;if(Array.isArray(d)&&d.length>0&&Z(d,e,t,r,o,n,s,a),u==="if"){let f=c.then;Array.isArray(f)&&f.length>0&&Z(f,e,t,r,o,n,s,a);let p=c.else;Array.isArray(p)&&p.length>0&&Z(p,e,t,r,o,n,s,a);continue}if(u===void 0)continue;let h=r.get(u);if(h!==void 0)for(let f=0;f<h.length;f++){let p=c[h[f]];!Array.isArray(p)||p.length===0||Z(p,e,t,r,o,n,s,a);}}}function ee(i,e,t,r,o){for(let n of i){let s=n[e];if(s==="pause"||s!==void 0&&r.has(s)||s==="action"&&typeof n.id=="string"&&o(n.id))return true;let a=n.catch;if(Array.isArray(a)&&a.length>0&&ee(a,e,t,r,o))return true;if(s==="if"){let u=n.then;if(Array.isArray(u)&&u.length>0&&ee(u,e,t,r,o))return true;let d=n.else;if(Array.isArray(d)&&d.length>0&&ee(d,e,t,r,o))return true;continue}if(s===void 0)continue;let c=t.get(s);if(c!==void 0)for(let u=0;u<c.length;u++){let d=n[c[u]];if(!(!Array.isArray(d)||d.length===0)&&ee(d,e,t,r,o))return true}}return false}function j(i,e,t,r,o,n){let s=i.name;if(typeof i.resolve=="function")try{t[s]=i.resolve(e,t).value;}catch(a){r.push({directiveIndex:o,error:`Binding resolve: ${a}`}),n.errors++;}else t[s]=i.value;}function L(i,e,t,r,o,n){let s=i.value;if(typeof i.resolve=="function")try{let a=i.resolve(e,t);s="value"in a?a.value:"return"in a?a.return:s;}catch(a){return r.push({directiveIndex:o,error:`Control resolve: ${a}`}),n.errors++,{ok:false}}return {ok:true,data:s}}function O(i,e,t,r,o,n){let s=i.message;if(typeof i.resolve=="function")try{let a=i.resolve(e,t);s="message"in a?a.message:"throw"in a?a.throw:s;}catch(a){return r.push({directiveIndex:o,error:`Control resolve: ${a}`}),n.errors++,{ok:false}}return {ok:true,data:s}}function V(i,e,t,r,o,n,s,a,c,u,d){let h;try{let p=i.cond;h=typeof p=="function"?!!p(e,t):!!p;}catch(p){c.push({directiveIndex:u,error:`if cond: ${p}`}),d.errors++;return}let f=h?i.then:i.else;if(Array.isArray(f)&&f.length>0){let p=Math.min(f.length,a),l=o?n:s;r.push({dirs:f,i:0,len:p,topLevelIfIndex:l});}}function z(i,e,t){let r=processIntercept(i,"beforeDirective");if(r.action===Intercept.SKIP)return {action:"skip"};if(r.action===Intercept.ABORT)return {action:"abort",reason:r.abortReason};let o=t,n=e;return r.ctx!==void 0&&(o=t.withCtx(r.ctx)),r.directive!==void 0&&(n=r.directive),{action:"continue",directive:n,dFrame:o}}function G(i,e,t,r,o){i.push({directiveIndex:t,error:`Hook ${r}: ${o}`}),e.errors++;}function S(i,e,t,r,o){return {success:false,aborted:true,abortedBy:i,appliedCount:e.appliedCount,skippedCount:e.skippedCount,errors:e.errors,processedCount:t,totalCount:r,counters:e.counters,data:o}}function K(i,e,t,r){return {success:true,aborted:true,abortedBy:"halt",appliedCount:i.appliedCount,skippedCount:i.skippedCount,errors:i.errors,processedCount:e,totalCount:t,counters:i.counters,data:r}}function U(i,e,t,r){return {success:true,aborted:false,appliedCount:i.appliedCount,skippedCount:i.skippedCount,errors:i.errors,processedCount:e,totalCount:t,counters:i.counters,data:r}}function q(i,e){return {success:true,aborted:false,appliedCount:i.appliedCount,skippedCount:i.skippedCount,errors:i.errors,processedCount:e,totalCount:e,counters:i.counters}}function W(i,e,t,r){return {success:r.success,aborted:true,abortedBy:r.abortedBy,appliedCount:i.appliedCount,skippedCount:i.skippedCount,errors:i.errors,processedCount:e,totalCount:t,counters:i.counters,data:r.data}}function J(i,e,t,r,o){if(typeof i.resolve!="function")return i;try{let n=i.resolve(e.ctx,e.scope);return {...i,...n}}catch(n){return t.push({directiveIndex:r,error:`Directive resolve: ${n}`}),o.errors++,null}}function Y(i,e){return [{dirs:i,i:0,len:e,topLevelIfIndex:-1}]}function Ze(i){let e=i.filledNames.has("beforeDirective"),t=i.filledNames.has("afterDirective"),r=i.filledNames.has("onDirectivesComplete");return function(n,s,a,c,u,d,h){let f=Math.min(n.length,h),p=[],l={appliedCount:0,skippedCount:0,errors:p,counters:s.counters},{scope:g}=s,A=s.ctx,D=Y(n,f),R=0;for(;D.length>0;){let b=D[D.length-1];if(b.i>=b.len){D.pop();continue}let I=b.i++,T=b.topLevelIfIndex!==-1,_=T?b.topLevelIfIndex:I;T||(R=I+1);let C=b.dirs[I],k=C[u];if(k==="const"||k==="let"){j(C,A,g,p,_,l.counters);continue}if(k==="return"){let v=L(C,A,g,p,_,l.counters);if(!v.ok)continue;return U(l,R,f,v.data)}if(k==="throw"){let v=O(C,A,g,p,_,l.counters);if(!v.ok)continue;return S("throw",l,R,f,v.data)}if(k==="if"){V(C,A,g,D,T,b.topLevelIfIndex,I,h,p,_,l.counters);continue}let x=C,E=s;if(e)try{let v=c.beforeDirective(x,s),y=z(v,x,s);if(y.action==="skip"){l.skippedCount++,l.counters.directivesSkipped++;continue}if(y.action==="abort"){let w=R===0?I:R-1;return S(y.reason,l,w,f)}x=y.directive,E=y.dFrame;}catch(v){G(p,l.counters,_,"beforeDirective",v);}let H=J(x,E,p,_,l.counters);if(H===null)continue;x=H;let M=x[u],F=M?a[M]:void 0;if(!F){p.push({directiveIndex:_,error:`No handler for directive type: ${M??"undefined"}`}),l.counters.errors++;continue}let m;try{m=F(x,E,d);}catch(v){m={ok:false,error:String(v)};}let $=R;if(m.ok){if(l.appliedCount++,l.counters.directivesApplied++,typeof x.as=="string"&&(g[x.as]=m.data),m.halt)return K(l,$,f,m.data)}else {if(m.halt)return S("halt",l,$,f,m.data);let v=x.catch;if(Array.isArray(v)&&v.length>0){g.$exception=m.error??"handler failed";let y=d.runDirectives(v,E);l.appliedCount+=y.appliedCount;for(let w=0;w<y.errors.length;w++)p.push(y.errors[w]);if(y.aborted)return W(l,$,f,y)}else p.push({directiveIndex:_,error:m.error??"handler failed"}),l.counters.errors++;}if(t)try{if(c.afterDirective(x,m,E)==="abort")return S("afterDirective",l,$,f)}catch(v){G(p,l.counters,_,"afterDirective",v);}}let P=q(l,f);if(r)try{c.onDirectivesComplete(P);}catch{}return P}}function et(i){let e=i.filledNames.has("beforeDirective"),t=i.filledNames.has("afterDirective"),r=i.filledNames.has("onDirectivesComplete");return async function(n,s,a,c,u,d,h){let f=Math.min(n.length,h),p=[],l={appliedCount:0,skippedCount:0,errors:p,counters:s.counters},{scope:g}=s,A=s.ctx,D=Y(n,f),R=0;for(;D.length>0;){let b=D[D.length-1];if(b.i>=b.len){D.pop();continue}let I=b.i++,T=b.topLevelIfIndex!==-1,_=T?b.topLevelIfIndex:I;T||(R=I+1);let C=b.dirs[I],k=C[u];if(k==="const"||k==="let"){j(C,A,g,p,_,l.counters);continue}if(k==="return"){let v=L(C,A,g,p,_,l.counters);if(!v.ok)continue;return U(l,R,f,v.data)}if(k==="throw"){let v=O(C,A,g,p,_,l.counters);if(!v.ok)continue;return S("throw",l,R,f,v.data)}if(k==="if"){V(C,A,g,D,T,b.topLevelIfIndex,I,h,p,_,l.counters);continue}let x=C,E=s;if(e)try{let v=await c.beforeDirective(x,s),y=z(v,x,s);if(y.action==="skip"){l.skippedCount++,l.counters.directivesSkipped++;continue}if(y.action==="abort"){let w=R===0?I:R-1;return S(y.reason,l,w,f)}x=y.directive,E=y.dFrame;}catch(v){G(p,l.counters,_,"beforeDirective",v);}let H=J(x,E,p,_,l.counters);if(H===null)continue;x=H;let M=x[u],F=M?a[M]:void 0;if(!F){p.push({directiveIndex:_,error:`No handler for directive type: ${M??"undefined"}`}),l.counters.errors++;continue}let m;try{m=await F(x,E,d);}catch(v){m={ok:false,error:String(v)};}let $=R;if(m.ok){if(l.appliedCount++,l.counters.directivesApplied++,typeof x.as=="string"&&(g[x.as]=m.data),m.halt)return K(l,$,f,m.data)}else {if(m.halt)return S("halt",l,$,f,m.data);let v=x.catch;if(Array.isArray(v)&&v.length>0){g.$exception=m.error??"handler failed";let y=await d.runDirectivesAsync(v,E);l.appliedCount+=y.appliedCount;for(let w=0;w<y.errors.length;w++)p.push(y.errors[w]);if(y.aborted)return W(l,$,f,y)}else p.push({directiveIndex:_,error:m.error??"handler failed"}),l.counters.errors++;}if(t)try{if(await c.afterDirective(x,m,E)==="abort")return S("afterDirective",l,$,f)}catch(v){G(p,l.counters,_,"afterDirective",v);}}let P=q(l,f);if(r)try{await c.onDirectivesComplete(P);}catch{}return P}}function oe(i,e){return e?et(i):Ze(i)}function de(i){if(i===null||typeof i!="object")return null;if(typeof i.next=="function")return i;let e=i.iterator;return e!=null&&typeof e=="object"&&typeof e.next=="function"?e:null}function fe(i,e,t){return {source:"pause",directive:i,frame:e,index:t,payload:{message:i.message}}}function pe(i){return i===false||i==="abort"||i==="cancel"}function ve(i,e,t,r){r.directivesApplied++,typeof i.as=="string"&&e!==void 0&&(t[i.as]=e);}function tt(i){let e=i.filledNames.has("beforeDirective"),t=i.filledNames.has("afterDirective"),r=i.filledNames.has("onDirectivesComplete");return function*(n,s,a,c,u,d,h){let f=Math.min(n.length,h),p=[],l={appliedCount:0,skippedCount:0,errors:p,counters:s.counters},{scope:g}=s,A=s.ctx,D=Y(n,f),R=0;for(;D.length>0;){let b=D[D.length-1];if(b.i>=b.len){D.pop();continue}let I=b.i++,T=b.topLevelIfIndex!==-1,_=T?b.topLevelIfIndex:I;T||(R=I+1);let C=b.dirs[I],k=C[u];if(k==="const"||k==="let"){j(C,A,g,p,_,l.counters);continue}if(k==="return"){let v=L(C,A,g,p,_,l.counters);if(!v.ok)continue;return U(l,R,f,v.data)}if(k==="throw"){let v=O(C,A,g,p,_,l.counters);if(!v.ok)continue;return S("throw",l,R,f,v.data)}if(k==="pause"){let v=R,y=yield fe(C,s,_);if(pe(y))return S("pause",l,v,f,y);l.appliedCount++,ve(C,y,g,l.counters);continue}if(k==="if"){V(C,A,g,D,T,b.topLevelIfIndex,I,h,p,_,l.counters);continue}let x=C,E=s;if(e)try{let v=c.beforeDirective(x,s),y=z(v,x,s);if(y.action==="skip"){l.skippedCount++,l.counters.directivesSkipped++;continue}if(y.action==="abort"){let w=R===0?I:R-1;return S(y.reason,l,w,f)}x=y.directive,E=y.dFrame;}catch(v){G(p,l.counters,_,"beforeDirective",v);}let H=J(x,E,p,_,l.counters);if(H===null)continue;x=H;let M=x[u],F=M?a[M]:void 0;if(!F){p.push({directiveIndex:_,error:`No handler for directive type: ${M??"undefined"}`}),l.counters.errors++;continue}let m;try{let v=F(x,E,d),y=de(v);y!==null?m=yield*y:m=v;}catch(v){m={ok:false,error:String(v)};}let $=R;if(m.ok){if(l.appliedCount++,l.counters.directivesApplied++,typeof x.as=="string"&&(g[x.as]=m.data),m.halt)return K(l,$,f,m.data)}else {if(m.halt)return S("halt",l,$,f,m.data);let v=x.catch;if(Array.isArray(v)&&v.length>0){g.$exception=m.error??"handler failed";let y=d.runDirectives(v,E);l.appliedCount+=y.appliedCount;for(let w=0;w<y.errors.length;w++)p.push(y.errors[w]);if(y.aborted)return W(l,$,f,y)}else p.push({directiveIndex:_,error:m.error??"handler failed"}),l.counters.errors++;}if(t)try{if(c.afterDirective(x,m,E)==="abort")return S("afterDirective",l,$,f)}catch(v){G(p,l.counters,_,"afterDirective",v);}}let P=q(l,f);if(r)try{c.onDirectivesComplete(P);}catch{}return P}}function rt(i){let e=i.filledNames.has("beforeDirective"),t=i.filledNames.has("afterDirective"),r=i.filledNames.has("onDirectivesComplete");return async function*(n,s,a,c,u,d,h){let f=Math.min(n.length,h),p=[],l={appliedCount:0,skippedCount:0,errors:p,counters:s.counters},{scope:g}=s,A=s.ctx,D=Y(n,f),R=0;for(;D.length>0;){let b=D[D.length-1];if(b.i>=b.len){D.pop();continue}let I=b.i++,T=b.topLevelIfIndex!==-1,_=T?b.topLevelIfIndex:I;T||(R=I+1);let C=b.dirs[I],k=C[u];if(k==="const"||k==="let"){j(C,A,g,p,_,l.counters);continue}if(k==="return"){let v=L(C,A,g,p,_,l.counters);if(!v.ok)continue;return U(l,R,f,v.data)}if(k==="throw"){let v=O(C,A,g,p,_,l.counters);if(!v.ok)continue;return S("throw",l,R,f,v.data)}if(k==="pause"){let v=R,y=yield fe(C,s,_);if(pe(y))return S("pause",l,v,f,y);l.appliedCount++,ve(C,y,g,l.counters);continue}if(k==="if"){V(C,A,g,D,T,b.topLevelIfIndex,I,h,p,_,l.counters);continue}let x=C,E=s;if(e)try{let v=await c.beforeDirective(x,s),y=z(v,x,s);if(y.action==="skip"){l.skippedCount++,l.counters.directivesSkipped++;continue}if(y.action==="abort"){let w=R===0?I:R-1;return S(y.reason,l,w,f)}x=y.directive,E=y.dFrame;}catch(v){G(p,l.counters,_,"beforeDirective",v);}let H=J(x,E,p,_,l.counters);if(H===null)continue;x=H;let M=x[u],F=M?a[M]:void 0;if(!F){p.push({directiveIndex:_,error:`No handler for directive type: ${M??"undefined"}`}),l.counters.errors++;continue}let m;try{let v=await F(x,E,d),y=de(v);y!==null?m=yield*y:m=v;}catch(v){m={ok:false,error:String(v)};}let $=R;if(m.ok){if(l.appliedCount++,l.counters.directivesApplied++,typeof x.as=="string"&&(g[x.as]=m.data),m.halt)return K(l,$,f,m.data)}else {if(m.halt)return S("halt",l,$,f,m.data);let v=x.catch;if(Array.isArray(v)&&v.length>0){g.$exception=m.error??"handler failed";let y=await d.runDirectivesAsync(v,E);l.appliedCount+=y.appliedCount;for(let w=0;w<y.errors.length;w++)p.push(y.errors[w]);if(y.aborted)return W(l,$,f,y)}else p.push({directiveIndex:_,error:m.error??"handler failed"}),l.counters.errors++;}if(t)try{if(await c.afterDirective(x,m,E)==="abort")return S("afterDirective",l,$,f)}catch(v){G(p,l.counters,_,"afterDirective",v);}}let P=q(l,f);if(r)try{await c.onDirectivesComplete(P);}catch{}return P}}function he(i,e){return e?rt(i):tt(i)}function ye(i,e=i.hasAnyAsync){let{filledNames:t}=i,r=d=>t.has(d),o=d=>i.asyncNames.has(d)?"await ":"",n=e?"await ":"",s=[];for(let d of t)s.push(`const ${d} = directiveHooks.${d};`);s.push("const len = Math.min(directives.length, maxDirectives);"),s.push("const errors = []; let appliedCount = 0; let skippedCount = 0;"),s.push("const counters = frame.counters;"),s.push("for (let i = 0; i < len; i++) {"),s.push(" let directive = directives[i];"),r("beforeDirective")?(s.push(" let _df = frame;"),s.push(" try {"),s.push(` const _bd = ${o("beforeDirective")}beforeDirective(directive, frame);`),s.push(' if (_bd === "skip") { skippedCount++; counters.directivesSkipped++; continue; }'),s.push(' if (_bd === "abort") return { success: false, aborted: true, abortedBy: "beforeDirective", appliedCount, skippedCount, errors, processedCount: i, totalCount: len, counters };'),s.push(' if (typeof _bd === "object" && _bd !== null) {'),s.push(' if ("abort" in _bd) return { success: false, aborted: true, abortedBy: _bd.abort, appliedCount, skippedCount, errors, processedCount: i, totalCount: len, counters };'),s.push(' if ("ctx" in _bd) _df = frame.withCtx(_bd.ctx);'),s.push(' if ("directive" in _bd) directive = _bd.directive;'),s.push(" }"),s.push(' } catch (_e) { errors.push({ directiveIndex: i, error: "Hook beforeDirective: " + _e }); counters.errors++; }')):s.push(" const _df = frame;"),s.push(' if (typeof directive.resolve === "function") {'),s.push(" try { const _r = directive.resolve(_df.ctx); directive = Object.assign({}, directive, _r); }"),s.push(' catch (_e) { errors.push({ directiveIndex: i, error: "Directive resolve: " + _e }); counters.errors++; continue; }'),s.push(" }"),s.push(" const _type = directive[typeField];"),s.push(" const _handler = _type ? handlers[_type] : undefined;"),s.push(' if (!_handler) { errors.push({ directiveIndex: i, error: "No handler for directive type: " + (_type || "undefined") }); counters.errors++; continue; }'),s.push(" let _result;"),s.push(` try { _result = ${n}_handler(directive, _df, engine); } catch (_e) { errors.push({ directiveIndex: i, error: String(_e) }); counters.errors++; continue; }`),s.push(" if (_result.ok) { appliedCount++; counters.directivesApplied++; }"),s.push(' else { errors.push({ directiveIndex: i, error: _result.error || "handler failed" }); counters.errors++; }'),r("afterDirective")&&(s.push(" try {"),s.push(` const _ad = ${o("afterDirective")}afterDirective(directive, _result, _df);`),s.push(' if (_ad === "abort") return { success: false, aborted: true, abortedBy: "afterDirective", appliedCount, skippedCount, errors, processedCount: i + 1, totalCount: len, counters };'),s.push(' } catch (_e) { errors.push({ directiveIndex: i, error: "Hook afterDirective: " + _e }); counters.errors++; }')),s.push("}"),s.push("const _finalResult = { success: true, aborted: false, appliedCount, skippedCount, errors, processedCount: len, totalCount: len, counters };"),r("onDirectivesComplete")&&s.push(`try { ${o("onDirectivesComplete")}onDirectivesComplete(_finalResult); } catch (_e) {}`),s.push("return _finalResult;");let a=s.join(`
2
- `),c=e?"async ":"";return {fn:new Function("directives","frame","handlers","directiveHooks","typeField","engine","maxDirectives",`"use strict";
3
- return (${c}() => {
4
- ${a}
5
- })();`),isAsync:e}}function ge(i,e,t){return `return{success:false,aborted:true,abortedBy:${i},appliedCount,skippedCount,errors,processedCount:${e},totalCount:${t},counters};`}function nt(i,e){return `return{success:true,aborted:true,abortedBy:"halt",appliedCount,skippedCount,errors,processedCount:${i},totalCount:${e},counters,data:_result.data};`}function it(i,e){return `return{success:false,aborted:true,abortedBy:"halt",appliedCount,skippedCount,errors,processedCount:${i},totalCount:${e},counters,data:_result.data};`}function st(i,e,t,r){i.push("const counters=frame.counters;"),i.push("const ctx=frame.ctx;"),i.push("const errors=[];"),i.push("let appliedCount=0;"),i.push("let skippedCount=0;");for(let[o,n]of e)i.push(`const ${n}=$.h[${JSON.stringify(o)}];`);t&&i.push("const _hookBefore=$.hooks.beforeDirective;"),r&&i.push("const _hookAfter=$.hooks.afterDirective;");}function ot(i,e,t,r){i.push(`const _finalResult={success:true,aborted:false,appliedCount,skippedCount,errors,processedCount:${e},totalCount:${e},counters};`),t&&i.push(`try{${r}$.hooks.onDirectivesComplete(_finalResult);}catch(_e){}`),i.push("return _finalResult;");}function ct(i,e,t){let r=`{
1
+ import {analyzeSlots,DIRECTIVE_SLOT_NAMES,createRootFrame,processIntercept,Intercept,isAsyncFunction,isGeneratorFunction}from'@statedelta-actions/core';function qe(i,e){let t;for(;;){let n=i.next(t);if(n.done)return n.value;t=e?e(n.value):void 0;}}async function We(i,e){let t;for(;;){let n=await i.next(t);if(n.done)return n.value;t=e?await e(n.value):void 0;}}function Ye(i){let e=0;return ()=>{if(!(e>=i.length))return i[e++]}}var X=class{_listeners=new Map;on(e,t){let n=this._listeners.get(e);n||(n=new Set,this._listeners.set(e,n)),n.add(t);let s=false;return ()=>{s||(s=true,n.delete(t),n.size===0&&this._listeners.delete(e));}}once(e,t){let n=this.on(e,s=>{n(),t(s);});return n}emit(e,t){let n=this._listeners.get(e);if(!n||n.size===0)return;let s=[...n];for(let r=0;r<s.length;r++)try{s[r](t);}catch(o){console.error(`[SimpleEmitter] Listener error on "${e}":`,o);}}listenerCount(e){return this._listeners.get(e)?.size??0}hasListeners(e){let t=this._listeners.get(e);return t!==void 0&&t.size>0}off(e){this._listeners.delete(e);}removeAllListeners(){this._listeners.clear();}};var N=new Set(["const","let","return","throw","pause","if"]);function be(i,e,t,n){let s=[];return se(i.directives,e,t,n,"directive",s,i.id),s}function se(i,e,t,n,s,r,o){for(let a=0;a<i.length;a++){let c=i[a],u=c[n],d=`${s}[${a}]`;if(!u){r.push(`${d}: missing type field "${n}"`);continue}if(u==="if"){let g=c.cond;typeof g!="function"&&typeof g!="boolean"&&r.push(`${d}: "if" requires cond as function or boolean`);let A=c.then;Array.isArray(A)?se(A,e,t,n,`${d}.then`,r,o):r.push(`${d}: "if" requires then as array`);let D=c.else;D!==void 0&&(Array.isArray(D)?se(D,e,t,n,`${d}.else`,r,o):r.push(`${d}.else: must be array`));continue}if(N.has(u))continue;if(!e[u])throw new Error(`Action "${o}" ${d}: no handler registered for type "${u}". Register the handler in createActionEngine({ handlers }) before registering this action.`);let h=t.get(u);if(h?.validate)try{let g=h.validate(c);g&&!g.valid&&r.push(`${d}: ${g.error??"validation failed"}`);}catch(g){r.push(`${d}: validate threw: ${g}`);}let f=c.catch;if(f&&Array.isArray(f))for(let g=0;g<f.length;g++){let D=f[g][n];if(!(D&&N.has(D))&&D&&!e[D])throw new Error(`Action "${o}" ${d}.catch[${g}]: no handler registered for type "${D}". Register the handler in createActionEngine({ handlers }) before registering this action.`)}let p=h?.subDirectives;if(p===void 0)continue;let l=Object.keys(p);for(let g=0;g<l.length;g++){let A=l[g];if(A==="catch")continue;let D=c[A];if(D===void 0){if(p[A].required)throw new Error(`Action "${o}" ${d}: handler "${u}" requires sub-directives field "${A}"`);continue}if(!Array.isArray(D))throw new Error(`Action "${o}" ${d}.${A}: must be an array of directives`);se(D,e,t,n,`${d}.${A}`,r,o);}}}var Je=new Map;function B(i,e,t=Je){let n=i.length,s=new Array(n);for(let r=0;r<n;r++){let o=i[r],a=o[e],c=o,u=false,d=o.catch;if(Array.isArray(d)&&d.length>0&&(c={...c,catch:B(d,e,t)},u=true),a==="if"){let h=o.then;Array.isArray(h)&&h.length>0&&(c={...c,then:B(h,e,t)},u=true);let f=o.else;Array.isArray(f)&&f.length>0&&(c={...c,else:B(f,e,t)},u=true);}else if(a!==void 0){let h=t.get(a);if(h!==void 0)for(let f=0;f<h.length;f++){let p=h[f],l=o[p];!Array.isArray(l)||l.length===0||(c={...c,[p]:B(l,e,t)},u=true);}}s[r]=u?c:o;}return s}function ke(i,e,t,n,s,r,o){let a=new Set;return Z(i,e,t,n,s,r,o,a),a}function Z(i,e,t,n,s,r,o,a){for(let c of i){let u=c[e];if(u!==void 0){let f=t.get(u);if(f!==void 0&&f.subDirectives!==void 0){let p=n.get(u);if(p!==void 0){let l=false;for(let g=0;g<p.length;g++){let A=c[p[g]];if(!(!Array.isArray(A)||A.length===0)&&ee(A,e,n,s,r)){l=true;break}}l&&(f.executeInteractive!==void 0||f.interactive===true||o(f.execute)||a.add(u));}}}let d=c.catch;if(Array.isArray(d)&&d.length>0&&Z(d,e,t,n,s,r,o,a),u==="if"){let f=c.then;Array.isArray(f)&&f.length>0&&Z(f,e,t,n,s,r,o,a);let p=c.else;Array.isArray(p)&&p.length>0&&Z(p,e,t,n,s,r,o,a);continue}if(u===void 0)continue;let h=n.get(u);if(h!==void 0)for(let f=0;f<h.length;f++){let p=c[h[f]];!Array.isArray(p)||p.length===0||Z(p,e,t,n,s,r,o,a);}}}function ee(i,e,t,n,s){for(let r of i){let o=r[e];if(o==="pause"||o!==void 0&&n.has(o)||o==="action"&&typeof r.id=="string"&&s(r.id))return true;let a=r.catch;if(Array.isArray(a)&&a.length>0&&ee(a,e,t,n,s))return true;if(o==="if"){let u=r.then;if(Array.isArray(u)&&u.length>0&&ee(u,e,t,n,s))return true;let d=r.else;if(Array.isArray(d)&&d.length>0&&ee(d,e,t,n,s))return true;continue}if(o===void 0)continue;let c=t.get(o);if(c!==void 0)for(let u=0;u<c.length;u++){let d=r[c[u]];if(!(!Array.isArray(d)||d.length===0)&&ee(d,e,t,n,s))return true}}return false}function j(i,e,t,n,s,r){let o=i.name;if(typeof i.resolve=="function")try{t[o]=i.resolve(e,t).value;}catch(a){n.push({directiveIndex:s,error:`Binding resolve: ${a}`}),r.errors++;}else t[o]=i.value;}function L(i,e,t,n,s,r){let o=i.value;if(typeof i.resolve=="function")try{let a=i.resolve(e,t);o="value"in a?a.value:"return"in a?a.return:o;}catch(a){return n.push({directiveIndex:s,error:`Control resolve: ${a}`}),r.errors++,{ok:false}}return {ok:true,data:o}}function O(i,e,t,n,s,r){let o=i.message;if(typeof i.resolve=="function")try{let a=i.resolve(e,t);o="message"in a?a.message:"throw"in a?a.throw:o;}catch(a){return n.push({directiveIndex:s,error:`Control resolve: ${a}`}),r.errors++,{ok:false}}return {ok:true,data:o}}function V(i,e,t,n,s,r,o,a,c,u,d){let h;try{let p=i.cond;h=typeof p=="function"?!!p(e,t):!!p;}catch(p){c.push({directiveIndex:u,error:`if cond: ${p}`}),d.errors++;return}let f=h?i.then:i.else;if(Array.isArray(f)&&f.length>0){let p=Math.min(f.length,a),l=s?r:o;n.push({dirs:f,i:0,len:p,topLevelIfIndex:l});}}function z(i,e,t){let n=processIntercept(i,"beforeDirective");if(n.action===Intercept.SKIP)return {action:"skip"};if(n.action===Intercept.ABORT)return {action:"abort",reason:n.abortReason};let s=t,r=e;return n.ctx!==void 0&&(s=t.withCtx(n.ctx)),n.directive!==void 0&&(r=n.directive),{action:"continue",directive:r,dFrame:s}}function G(i,e,t,n,s){i.push({directiveIndex:t,error:`Hook ${n}: ${s}`}),e.errors++;}function S(i,e,t,n,s){return {success:false,aborted:true,abortedBy:i,appliedCount:e.appliedCount,skippedCount:e.skippedCount,errors:e.errors,processedCount:t,totalCount:n,counters:e.counters,data:s}}function K(i,e,t,n){return {success:true,aborted:true,abortedBy:"halt",appliedCount:i.appliedCount,skippedCount:i.skippedCount,errors:i.errors,processedCount:e,totalCount:t,counters:i.counters,data:n}}function U(i,e,t,n){return {success:true,aborted:false,appliedCount:i.appliedCount,skippedCount:i.skippedCount,errors:i.errors,processedCount:e,totalCount:t,counters:i.counters,data:n}}function q(i,e){return {success:true,aborted:false,appliedCount:i.appliedCount,skippedCount:i.skippedCount,errors:i.errors,processedCount:e,totalCount:e,counters:i.counters}}function W(i,e,t,n){return {success:n.success,aborted:true,abortedBy:n.abortedBy,appliedCount:i.appliedCount,skippedCount:i.skippedCount,errors:i.errors,processedCount:e,totalCount:t,counters:i.counters,data:n.data}}function Y(i,e,t,n,s){if(typeof i.resolve!="function")return i;try{let r=i.resolve(e.ctx,e.scope);return {...i,...r}}catch(r){return t.push({directiveIndex:n,error:`Directive resolve: ${r}`}),s.errors++,null}}function J(i,e){return [{dirs:i,i:0,len:e,topLevelIfIndex:-1}]}function Xe(i){let e=i.filledNames.has("beforeDirective"),t=i.filledNames.has("afterDirective"),n=i.filledNames.has("onDirectivesComplete");return function(r,o,a,c,u,d,h){let f=Math.min(r.length,h),p=[],l={appliedCount:0,skippedCount:0,errors:p,counters:o.counters},{scope:g}=o,A=o.ctx,D=J(r,f),b=0;for(;D.length>0;){let R=D[D.length-1];if(R.i>=R.len){D.pop();continue}let I=R.i++,T=R.topLevelIfIndex!==-1,_=T?R.topLevelIfIndex:I;T||(b=I+1);let C=R.dirs[I],k=C[u];if(k==="const"||k==="let"){j(C,A,g,p,_,l.counters);continue}if(k==="return"){let v=L(C,A,g,p,_,l.counters);if(!v.ok)continue;return U(l,b,f,v.data)}if(k==="throw"){let v=O(C,A,g,p,_,l.counters);if(!v.ok)continue;return S("throw",l,b,f,v.data)}if(k==="if"){V(C,A,g,D,T,R.topLevelIfIndex,I,h,p,_,l.counters);continue}let x=C,E=o;if(e)try{let v=c.beforeDirective(x,o),y=z(v,x,o);if(y.action==="skip"){l.skippedCount++,l.counters.directivesSkipped++;continue}if(y.action==="abort"){let w=b===0?I:b-1;return S(y.reason,l,w,f)}x=y.directive,E=y.dFrame;}catch(v){G(p,l.counters,_,"beforeDirective",v);}let M=Y(x,E,p,_,l.counters);if(M===null)continue;x=M;let H=x[u],F=H?a[H]:void 0;if(!F){p.push({directiveIndex:_,error:`No handler for directive type: ${H??"undefined"}`}),l.counters.errors++;continue}let m;try{m=F(x,E,d);}catch(v){m={ok:false,error:String(v)};}let $=b;if(m.ok){if(l.appliedCount++,l.counters.directivesApplied++,typeof x.as=="string"&&(g[x.as]=m.data),m.halt)return K(l,$,f,m.data)}else {if(m.halt)return S("halt",l,$,f,m.data);let v=x.catch;if(Array.isArray(v)&&v.length>0){g.$exception=m.error??"handler failed";let y=d.runDirectives(v,E);l.appliedCount+=y.appliedCount;for(let w=0;w<y.errors.length;w++)p.push(y.errors[w]);if(y.aborted)return W(l,$,f,y)}else p.push({directiveIndex:_,error:m.error??"handler failed"}),l.counters.errors++;}if(t)try{if(c.afterDirective(x,m,E)==="abort")return S("afterDirective",l,$,f)}catch(v){G(p,l.counters,_,"afterDirective",v);}}let P=q(l,f);if(n)try{c.onDirectivesComplete(P);}catch{}return P}}function Ze(i){let e=i.filledNames.has("beforeDirective"),t=i.filledNames.has("afterDirective"),n=i.filledNames.has("onDirectivesComplete");return async function(r,o,a,c,u,d,h){let f=Math.min(r.length,h),p=[],l={appliedCount:0,skippedCount:0,errors:p,counters:o.counters},{scope:g}=o,A=o.ctx,D=J(r,f),b=0;for(;D.length>0;){let R=D[D.length-1];if(R.i>=R.len){D.pop();continue}let I=R.i++,T=R.topLevelIfIndex!==-1,_=T?R.topLevelIfIndex:I;T||(b=I+1);let C=R.dirs[I],k=C[u];if(k==="const"||k==="let"){j(C,A,g,p,_,l.counters);continue}if(k==="return"){let v=L(C,A,g,p,_,l.counters);if(!v.ok)continue;return U(l,b,f,v.data)}if(k==="throw"){let v=O(C,A,g,p,_,l.counters);if(!v.ok)continue;return S("throw",l,b,f,v.data)}if(k==="if"){V(C,A,g,D,T,R.topLevelIfIndex,I,h,p,_,l.counters);continue}let x=C,E=o;if(e)try{let v=await c.beforeDirective(x,o),y=z(v,x,o);if(y.action==="skip"){l.skippedCount++,l.counters.directivesSkipped++;continue}if(y.action==="abort"){let w=b===0?I:b-1;return S(y.reason,l,w,f)}x=y.directive,E=y.dFrame;}catch(v){G(p,l.counters,_,"beforeDirective",v);}let M=Y(x,E,p,_,l.counters);if(M===null)continue;x=M;let H=x[u],F=H?a[H]:void 0;if(!F){p.push({directiveIndex:_,error:`No handler for directive type: ${H??"undefined"}`}),l.counters.errors++;continue}let m;try{m=await F(x,E,d);}catch(v){m={ok:false,error:String(v)};}let $=b;if(m.ok){if(l.appliedCount++,l.counters.directivesApplied++,typeof x.as=="string"&&(g[x.as]=m.data),m.halt)return K(l,$,f,m.data)}else {if(m.halt)return S("halt",l,$,f,m.data);let v=x.catch;if(Array.isArray(v)&&v.length>0){g.$exception=m.error??"handler failed";let y=await d.runDirectivesAsync(v,E);l.appliedCount+=y.appliedCount;for(let w=0;w<y.errors.length;w++)p.push(y.errors[w]);if(y.aborted)return W(l,$,f,y)}else p.push({directiveIndex:_,error:m.error??"handler failed"}),l.counters.errors++;}if(t)try{if(await c.afterDirective(x,m,E)==="abort")return S("afterDirective",l,$,f)}catch(v){G(p,l.counters,_,"afterDirective",v);}}let P=q(l,f);if(n)try{await c.onDirectivesComplete(P);}catch{}return P}}function oe(i,e){return e?Ze(i):Xe(i)}function de(i){if(i===null||typeof i!="object")return null;if(typeof i.next=="function")return i;let e=i.iterator;return e!=null&&typeof e=="object"&&typeof e.next=="function"?e:null}function fe(i,e,t){return {source:"pause",directive:i,frame:e,index:t,payload:{message:i.message}}}function pe(i){return i===false||i==="abort"||i==="cancel"}function ve(i,e,t,n){n.directivesApplied++,typeof i.as=="string"&&e!==void 0&&(t[i.as]=e);}function et(i){let e=i.filledNames.has("beforeDirective"),t=i.filledNames.has("afterDirective"),n=i.filledNames.has("onDirectivesComplete");return function*(r,o,a,c,u,d,h){let f=Math.min(r.length,h),p=[],l={appliedCount:0,skippedCount:0,errors:p,counters:o.counters},{scope:g}=o,A=o.ctx,D=J(r,f),b=0;for(;D.length>0;){let R=D[D.length-1];if(R.i>=R.len){D.pop();continue}let I=R.i++,T=R.topLevelIfIndex!==-1,_=T?R.topLevelIfIndex:I;T||(b=I+1);let C=R.dirs[I],k=C[u];if(k==="const"||k==="let"){j(C,A,g,p,_,l.counters);continue}if(k==="return"){let v=L(C,A,g,p,_,l.counters);if(!v.ok)continue;return U(l,b,f,v.data)}if(k==="throw"){let v=O(C,A,g,p,_,l.counters);if(!v.ok)continue;return S("throw",l,b,f,v.data)}if(k==="pause"){let v=b,y=yield fe(C,o,_);if(pe(y))return S("pause",l,v,f,y);l.appliedCount++,ve(C,y,g,l.counters);continue}if(k==="if"){V(C,A,g,D,T,R.topLevelIfIndex,I,h,p,_,l.counters);continue}let x=C,E=o;if(e)try{let v=c.beforeDirective(x,o),y=z(v,x,o);if(y.action==="skip"){l.skippedCount++,l.counters.directivesSkipped++;continue}if(y.action==="abort"){let w=b===0?I:b-1;return S(y.reason,l,w,f)}x=y.directive,E=y.dFrame;}catch(v){G(p,l.counters,_,"beforeDirective",v);}let M=Y(x,E,p,_,l.counters);if(M===null)continue;x=M;let H=x[u],F=H?a[H]:void 0;if(!F){p.push({directiveIndex:_,error:`No handler for directive type: ${H??"undefined"}`}),l.counters.errors++;continue}let m;try{let v=F(x,E,d),y=de(v);y!==null?m=yield*y:m=v;}catch(v){m={ok:false,error:String(v)};}let $=b;if(m.ok){if(l.appliedCount++,l.counters.directivesApplied++,typeof x.as=="string"&&(g[x.as]=m.data),m.halt)return K(l,$,f,m.data)}else {if(m.halt)return S("halt",l,$,f,m.data);let v=x.catch;if(Array.isArray(v)&&v.length>0){g.$exception=m.error??"handler failed";let y=d.runDirectives(v,E);l.appliedCount+=y.appliedCount;for(let w=0;w<y.errors.length;w++)p.push(y.errors[w]);if(y.aborted)return W(l,$,f,y)}else p.push({directiveIndex:_,error:m.error??"handler failed"}),l.counters.errors++;}if(t)try{if(c.afterDirective(x,m,E)==="abort")return S("afterDirective",l,$,f)}catch(v){G(p,l.counters,_,"afterDirective",v);}}let P=q(l,f);if(n)try{c.onDirectivesComplete(P);}catch{}return P}}function tt(i){let e=i.filledNames.has("beforeDirective"),t=i.filledNames.has("afterDirective"),n=i.filledNames.has("onDirectivesComplete");return async function*(r,o,a,c,u,d,h){let f=Math.min(r.length,h),p=[],l={appliedCount:0,skippedCount:0,errors:p,counters:o.counters},{scope:g}=o,A=o.ctx,D=J(r,f),b=0;for(;D.length>0;){let R=D[D.length-1];if(R.i>=R.len){D.pop();continue}let I=R.i++,T=R.topLevelIfIndex!==-1,_=T?R.topLevelIfIndex:I;T||(b=I+1);let C=R.dirs[I],k=C[u];if(k==="const"||k==="let"){j(C,A,g,p,_,l.counters);continue}if(k==="return"){let v=L(C,A,g,p,_,l.counters);if(!v.ok)continue;return U(l,b,f,v.data)}if(k==="throw"){let v=O(C,A,g,p,_,l.counters);if(!v.ok)continue;return S("throw",l,b,f,v.data)}if(k==="pause"){let v=b,y=yield fe(C,o,_);if(pe(y))return S("pause",l,v,f,y);l.appliedCount++,ve(C,y,g,l.counters);continue}if(k==="if"){V(C,A,g,D,T,R.topLevelIfIndex,I,h,p,_,l.counters);continue}let x=C,E=o;if(e)try{let v=await c.beforeDirective(x,o),y=z(v,x,o);if(y.action==="skip"){l.skippedCount++,l.counters.directivesSkipped++;continue}if(y.action==="abort"){let w=b===0?I:b-1;return S(y.reason,l,w,f)}x=y.directive,E=y.dFrame;}catch(v){G(p,l.counters,_,"beforeDirective",v);}let M=Y(x,E,p,_,l.counters);if(M===null)continue;x=M;let H=x[u],F=H?a[H]:void 0;if(!F){p.push({directiveIndex:_,error:`No handler for directive type: ${H??"undefined"}`}),l.counters.errors++;continue}let m;try{let v=await F(x,E,d),y=de(v);y!==null?m=yield*y:m=v;}catch(v){m={ok:false,error:String(v)};}let $=b;if(m.ok){if(l.appliedCount++,l.counters.directivesApplied++,typeof x.as=="string"&&(g[x.as]=m.data),m.halt)return K(l,$,f,m.data)}else {if(m.halt)return S("halt",l,$,f,m.data);let v=x.catch;if(Array.isArray(v)&&v.length>0){g.$exception=m.error??"handler failed";let y=await d.runDirectivesAsync(v,E);l.appliedCount+=y.appliedCount;for(let w=0;w<y.errors.length;w++)p.push(y.errors[w]);if(y.aborted)return W(l,$,f,y)}else p.push({directiveIndex:_,error:m.error??"handler failed"}),l.counters.errors++;}if(t)try{if(await c.afterDirective(x,m,E)==="abort")return S("afterDirective",l,$,f)}catch(v){G(p,l.counters,_,"afterDirective",v);}}let P=q(l,f);if(n)try{await c.onDirectivesComplete(P);}catch{}return P}}function he(i,e){return e?tt(i):et(i)}function ye(i,e,t){return `return{success:false,aborted:true,abortedBy:${i},appliedCount,skippedCount,errors,processedCount:${e},totalCount:${t},counters};`}function nt(i,e){return `return{success:true,aborted:true,abortedBy:"halt",appliedCount,skippedCount,errors,processedCount:${i},totalCount:${e},counters,data:_result.data};`}function rt(i,e){return `return{success:false,aborted:true,abortedBy:"halt",appliedCount,skippedCount,errors,processedCount:${i},totalCount:${e},counters,data:_result.data};`}function it(i,e,t,n){i.push("const counters=frame.counters;"),i.push("const ctx=frame.ctx;"),i.push("const errors=[];"),i.push("let appliedCount=0;"),i.push("let skippedCount=0;");for(let[s,r]of e)i.push(`const ${r}=$.h[${JSON.stringify(s)}];`);t&&i.push("const _hookBefore=$.hooks.beforeDirective;"),n&&i.push("const _hookAfter=$.hooks.afterDirective;");}function st(i,e,t,n){i.push(`const _finalResult={success:true,aborted:false,appliedCount,skippedCount,errors,processedCount:${e},totalCount:${e},counters};`),t&&i.push(`try{${n}$.hooks.onDirectivesComplete(_finalResult);}catch(_e){}`),i.push("return _finalResult;");}function ot(i,e,t){let n=`{
6
2
  ${i}
7
- }`;return t?`(${e?"async function*()":"function*()"}${r})()`:`(${e?"async ()=>":"()=>"}${r})()`}function at(i,e,t,r){let o=JSON.stringify(e.name);typeof e.resolve=="function"?(i.push("try{"),i.push(`scope[${o}]=${t}.resolve(ctx,scope).value;`),i.push(`}catch(_e){errors.push({directiveIndex:${r},error:"Binding resolve: "+_e});counters.errors++;}`)):i.push(`scope[${o}]=${t}.value;`);}function ut(i,e,t,r,o,n){typeof e.resolve=="function"?(i.push("try{"),i.push(`const _rv=${t}.resolve(ctx,scope);`),i.push(`return{success:true,aborted:false,appliedCount,skippedCount,errors,processedCount:${o},totalCount:${n},counters,data:"value" in _rv?_rv.value:"return" in _rv?_rv.return:${t}.value};`),i.push(`}catch(_e){errors.push({directiveIndex:${r},error:"Control resolve: "+_e});counters.errors++;}`)):i.push(`return{success:true,aborted:false,appliedCount,skippedCount,errors,processedCount:${o},totalCount:${n},counters,data:${t}.value};`);}function lt(i,e,t,r,o,n){typeof e.resolve=="function"?(i.push("try{"),i.push(`const _rv=${t}.resolve(ctx,scope);`),i.push(`return{success:false,aborted:true,abortedBy:"throw",appliedCount,skippedCount,errors,processedCount:${o},totalCount:${n},counters,data:"message" in _rv?_rv.message:"throw" in _rv?_rv.throw:${t}.message};`),i.push(`}catch(_e){errors.push({directiveIndex:${r},error:"Control resolve: "+_e});counters.errors++;}`)):i.push(`return{success:false,aborted:true,abortedBy:"throw",appliedCount,skippedCount,errors,processedCount:${o},totalCount:${n},counters,data:${t}.message};`);}function dt(i,e,t,r,o,n){let s=typeof e.as=="string",a=s?JSON.stringify(e.as):"";i.push(`{const _ack=yield{source:"pause",directive:${t},frame,index:${r},payload:{message:${t}.message}};`),i.push(`if(_ack===false||_ack==="abort"||_ack==="cancel")return{success:false,aborted:true,abortedBy:"pause",appliedCount,skippedCount,errors,processedCount:${o},totalCount:${n},counters,data:_ack};`),i.push("appliedCount++;counters.directivesApplied++;"),s&&i.push(`if(_ack!==undefined)scope[${a}]=_ack;`),i.push("}");}function ft(i,e,t,r,o){let{L:n,total:s,typeField:a,handlerVars:c,hasBefore:u,hasAfter:d,awBefore:h,awAfter:f,awHandler:p,actionIsAsync:l,actionIsInteractive:g,interactiveHandlerSet:A}=o,D=i[a],R=c.get(D),P=typeof i.resolve=="function",b=typeof i.as=="string",I=Array.isArray(i.catch)&&i.catch.length>0,T=b?JSON.stringify(i.as):"",_=g&&A.has(D),C=o.blockCounter.n++;n.push(`_b${C}:{`);let k=u||P,x=u;k&&n.push(`let _dir=${e};`),x&&n.push("let _df=frame;"),u&&(n.push("try{"),n.push(`const _bd=${h}_hookBefore(${e},frame);`),n.push(`if(_bd==="skip"){skippedCount++;counters.directivesSkipped++;break _b${C};}`),n.push(`if(_bd==="abort")${ge('"beforeDirective"',r-1,s)}`),n.push('if(typeof _bd==="object"&&_bd!==null){'),n.push(`if("abort" in _bd)${ge("_bd.abort",r-1,s)}`),n.push('if("ctx" in _bd)_df=frame.withCtx(_bd.ctx);'),n.push('if("directive" in _bd)_dir=_bd.directive;'),n.push("}"),n.push(`}catch(_e){errors.push({directiveIndex:${t},error:"Hook beforeDirective: "+_e});counters.errors++;}`)),u?(n.push('if(typeof _dir.resolve==="function"){'),n.push("try{const _r=_dir.resolve(_df.ctx,scope);_dir=Object.assign({},_dir,_r);}"),n.push(`catch(_e){errors.push({directiveIndex:${t},error:"Directive resolve: "+_e});counters.errors++;break _b${C};}}`)):P&&(n.push(`try{const _r=${e}.resolve(ctx,scope);_dir=Object.assign({},${e},_r);}`),n.push(`catch(_e){errors.push({directiveIndex:${t},error:"Directive resolve: "+_e});counters.errors++;break _b${C};}`));let E=k?"_dir":e,H=x?"_df":"frame";if(n.push("let _result;"),_?(n.push(`try{_result=yield* ${R}(${E},${H},$.engine);}`),n.push("catch(_e){_result={ok:false,error:String(_e)};}")):g?(n.push(`try{_result=${p}${R}(${E},${H},$.engine);if(_result&&_result.iterator)_result=yield* _result.iterator;}`),n.push("catch(_e){_result={ok:false,error:String(_e)};}")):(n.push(`try{_result=${p}${R}(${E},${H},$.engine);}`),n.push("catch(_e){_result={ok:false,error:String(_e)};}")),n.push("if(_result.ok){"),n.push("appliedCount++;counters.directivesApplied++;"),b&&n.push(`scope[${T}]=_result.data;`),n.push(`if(_result.halt)${nt(r,s)}`),n.push("}else{"),n.push(`if(_result.halt)${it(r,s)}`),I){n.push('scope.$exception=_result.error||"handler failed";');let M=l?"$.runner":"$.runnerSync";n.push(`const _cr=${p}${M}(${e}.catch,${H});`),n.push("appliedCount+=_cr.appliedCount;"),n.push("for(let _j=0;_j<_cr.errors.length;_j++)errors.push(_cr.errors[_j]);"),n.push(`if(_cr.aborted)return{success:_cr.success,aborted:true,abortedBy:_cr.abortedBy,appliedCount,skippedCount,errors,processedCount:${r},totalCount:${s},counters,data:_cr.data};`);}else n.push(`errors.push({directiveIndex:${t},error:_result.error||"handler failed"});counters.errors++;`);n.push("}"),d&&(n.push("try{"),n.push(`const _ad=${f}_hookAfter(${E},_result,${H});`),n.push(`if(_ad==="abort")${ge('"afterDirective"',r,s)}`),n.push(`}catch(_e){errors.push({directiveIndex:${t},error:"Hook afterDirective: "+_e});counters.errors++;}`)),n.push("}");}function pt(i,e,t,r,o,n){let{L:s}=n,a=i.cond,c=typeof a=="boolean";s.push("{"),c?s.push(`if(${a?"true":"false"}){`):(s.push("let _cond=false,_condOk=true;"),s.push(`try{const _c=${e}.cond;_cond=typeof _c==="function"?!!_c(ctx,scope):!!_c;}`),s.push(`catch(_e){errors.push({directiveIndex:${t},error:"if cond: "+_e});counters.errors++;_condOk=false;}`),s.push("if(_condOk){"),s.push("if(_cond){"));let u=i.then;Array.isArray(u)&&u.length>0&&xe(u,`${e}.then`,r,o,n),s.push("}");let d=i.else;Array.isArray(d)&&d.length>0&&(s.push("else{"),xe(d,`${e}.else`,r,o,n),s.push("}")),c||s.push("}"),s.push("}");}function xe(i,e,t,r,o){let n=t!==-1;for(let s=0;s<i.length;s++){let a=i[s],c=`${e}[${s}]`,u=n?t:s,d=n?r:s+1;switch(a[o.typeField]){case "const":case "let":at(o.L,a,c,u);break;case "return":ut(o.L,a,c,u,d,o.total);break;case "throw":lt(o.L,a,c,u,d,o.total);break;case "pause":dt(o.L,a,c,u,d,o.total);break;case "if":{let f=n?t:s,p=n?r:s+1;pt(a,c,u,f,p,o);break}default:ft(a,c,u,d,o);break}}}function me(i,e,t){for(let r of i){let o=r[e];if(o&&!N.has(o)&&t.add(o),o==="if"){let n=r.then;Array.isArray(n)&&n.length>0&&me(n,e,t);let s=r.else;Array.isArray(s)&&s.length>0&&me(s,e,t);}}}var we=new Set;function _e(i,e,t,r=we,o,n=false,s=we){let a=[],c=i.length,{filledNames:u,hasAnyAsync:d,asyncNames:h}=e,f=u.has("beforeDirective"),p=u.has("afterDirective"),l=u.has("onDirectivesComplete"),g=o!==void 0?o:ce(i,r,t),A=d||g,D=A?"await ":"",R=h.has("beforeDirective")?"await ":"",P=h.has("afterDirective")?"await ":"",b=h.has("onDirectivesComplete")?"await ":"",I=new Set;me(i,t,I);let T=new Map,_=0;for(let E of I)T.set(E,`_h${_++}`);st(a,T,f,p),xe(i,"$.d",-1,0,{L:a,total:c,typeField:t,handlerVars:T,hasBefore:f,hasAfter:p,awBefore:R,awAfter:P,awHandler:D,actionIsAsync:A,actionIsInteractive:n,interactiveHandlerSet:s,blockCounter:{n:0}}),ot(a,c,l,b);let k=ct(a.join(`
8
- `),A,n);return {fn:new Function("frame","scope","$",`"use strict";
9
- return ${k};`),isAsync:A,isInteractive:n}}function ce(i,e,t){for(let r of i){let o=r[t];if(o&&e.has(o))return true;if(o==="if"){let s=r.then;if(Array.isArray(s)&&s.length>0&&ce(s,e,t))return true;let a=r.else;if(Array.isArray(a)&&a.length>0&&ce(a,e,t))return true}let n=r.catch;if(Array.isArray(n)&&n.length>0&&ce(n,e,t))return true}return false}function De(i,e,t){return {success:false,aborted:false,appliedCount:0,skippedCount:0,processedCount:0,totalCount:0,errors:[{directiveIndex:-1,error:e}],counters:i,...t}}function Te(i,e){return De(e,`Action not found: "${i}"`,{aborted:true,abortedBy:"action-not-found"})}function Se(i,e,t){return De(t,`Max depth ${e} exceeded invoking "${i}"`,{aborted:true,abortedBy:"maxDepth"})}function $e(i,e){return De(e,`Action "${i}" is private (sub-action). Can only be invoked from within its parent scope.`)}function ae(i,e){return {success:true,aborted:false,appliedCount:0,skippedCount:0,processedCount:0,totalCount:0,errors:[],data:i,counters:e}}function vt(i){return typeof i=="object"&&i!==null&&"execute"in i}function He(i){let e=new Map;for(let[t,r]of i){let o=r.subDirectives;if(!o)continue;let n=Object.keys(o);if(n.length===0)continue;let s=null;for(let a=0;a<n.length;a++){let c=n[a];c!=="catch"&&o[c].graph!==false&&(s===null&&(s=[]),s.push(c));}s!==null&&e.set(t,s);}return e}function Me(i){let e=new Map;for(let[t,r]of i){let o=r.subDirectives;if(!o)continue;let n=Object.keys(o);if(n.length===0)continue;let s=null;for(let a=0;a<n.length;a++){let c=n[a];c!=="catch"&&(s===null&&(s=[]),s.push(c));}s!==null&&e.set(t,s);}return e}function Pe(i,e,t){if(!e)return t;let r=new Set(t);for(let[o,n]of i)n.executeInteractive!==void 0&&r.add(o);return r}function te(i,e,t){let r=Object.create(null);for(let[o,n]of i){let s;t&&n.executeInteractive!==void 0?s=n.executeInteractive:e&&n.executeAsync!==void 0?s=n.executeAsync:s=n.execute,r[o]=s;}return r}function Fe(i){let e=Object.create(null),t=new Map;for(let r of Object.keys(i)){let o=i[r];vt(o)?(e[r]=o.execute,t.set(r,o)):(e[r]=o,t.set(r,{execute:o}));}return {handlers:e,definitions:t}}function Ge(i,e){if(i==="*")return true;if(!i.includes("*"))return i===e;let t=i.replace(/[.+^${}()|[\]\\]/g,"\\$&");return new RegExp("^"+t.replace(/\*/g,".*")+"$").test(e)}function Be(i){return typeof i=="string"?{pattern:i}:i}function Ne(i,e,t){let r=new Map;if(!e&&!t){for(let o of i)r.set(o,{status:"available"});return r}if(e){let o=e.map(Be);for(let n of i){let s=o.some(a=>Ge(a.pattern,n));r.set(n,{status:s?"available":"denied"});}}else {let o=t.map(Be);for(let n of i){let s=o.find(a=>Ge(a.pattern,n));s?r.set(n,{status:"denied",reason:s.reason,source:s.source}):r.set(n,{status:"available"});}}return r}function Le(i){let{typeField:e,asyncHandlerSet:t,interactiveHandlerSet:r,subDirectiveFieldsForGraph:o}=i,n=new Map,s=new Set,a=new Set,c=new Set,u=new Set;return {upsert(d,h,f){n.set(d,ht(h,e,o)),ne(h,t,e,o)?s.add(d):s.delete(d),f||ie(h,r,e,o)?a.add(d):a.delete(d);},remove(d){n.delete(d),s.delete(d),a.delete(d);},recompute(){c=je(n,s),u=je(n,a);},isAsync(d){return c.has(d)},isInteractive(d){return u.has(d)},has(d){return n.has(d)}}}var ue=new Map;function ht(i,e,t=ue){let r=new Set;return re(i,e,t,r),r}function re(i,e,t,r){for(let o of i){let n=o[e];n==="action"&&typeof o.id=="string"&&r.add(o.id);let s=o.catch;if(Array.isArray(s)&&s.length>0&&re(s,e,t,r),n==="if"){let c=o.then;Array.isArray(c)&&c.length>0&&re(c,e,t,r);let u=o.else;Array.isArray(u)&&u.length>0&&re(u,e,t,r);continue}if(n===void 0)continue;let a=t.get(n);if(a!==void 0)for(let c=0;c<a.length;c++){let u=o[a[c]];!Array.isArray(u)||u.length===0||re(u,e,t,r);}}}function ne(i,e,t,r=ue){for(let o of i){let n=o[t];if(n!==void 0&&e.has(n))return true;let s=o.catch;if(Array.isArray(s)&&s.length>0&&ne(s,e,t,r))return true;if(n==="if"){let c=o.then;if(Array.isArray(c)&&c.length>0&&ne(c,e,t,r))return true;let u=o.else;if(Array.isArray(u)&&u.length>0&&ne(u,e,t,r))return true;continue}if(n===void 0)continue;let a=r.get(n);if(a!==void 0)for(let c=0;c<a.length;c++){let u=o[a[c]];if(!(!Array.isArray(u)||u.length===0)&&ne(u,e,t,r))return true}}return false}function ie(i,e,t,r=ue){for(let o of i){let n=o[t];if(n==="pause"||n!==void 0&&e.has(n))return true;let s=o.catch;if(Array.isArray(s)&&s.length>0&&ie(s,e,t,r))return true;if(n==="if"){let c=o.then;if(Array.isArray(c)&&c.length>0&&ie(c,e,t,r))return true;let u=o.else;if(Array.isArray(u)&&u.length>0&&ie(u,e,t,r))return true;continue}if(n===void 0)continue;let a=r.get(n);if(a!==void 0)for(let c=0;c<a.length;c++){let u=o[a[c]];if(!(!Array.isArray(u)||u.length===0)&&ie(u,e,t,r))return true}}return false}function Q(i,e,t=ue){for(let r of i){let o=r[e];if(o==="pause")return true;let n=r.catch;if(Array.isArray(n)&&n.length>0&&Q(n,e,t))return true;if(o==="if"){let a=r.then;if(Array.isArray(a)&&a.length>0&&Q(a,e,t))return true;let c=r.else;if(Array.isArray(c)&&c.length>0&&Q(c,e,t))return true;continue}if(o===void 0)continue;let s=t.get(o);if(s!==void 0)for(let a=0;a<s.length;a++){let c=r[s[a]];if(!(!Array.isArray(c)||c.length===0)&&Q(c,e,t))return true}}return false}function je(i,e){let t=new Set(e),r=true;for(;r;){r=false;for(let[o,n]of i)if(!t.has(o)){for(let s of n)if(t.has(s)){t.add(o),r=true;break}}}return t}var le=class{depth=0;errors=[];warnings=[];actions=[];registered=[];begin(){this.depth++,this.depth===1&&(this.errors=[],this.warnings=[],this.actions=[],this.registered=[]);}endDepth(){if(this.depth<=0)throw new Error("endBatch() called without matching beginBatch()");return this.depth--,this.depth===0}isActive(){return this.depth>0}accumulate(e,t,r,o){this.errors.push(...e),this.warnings.push(...t);for(let n of r)this.actions.push(n);this.registered.push(...o);}};function Oe(i){for(let e of i)if(N.has(e))throw new Error(`Handler type "${e}" is reserved for engine-internal directives`)}function Ve(i,e){if(i&&e)throw new Error("allowedDirectives and blockedDirectives are mutually exclusive. Provide one or neither.")}function ze(i,e,t){if(i)return;if(e.size>0){let o=Array.from(e).join(", ");throw new Error(`Handler(s) [${o}] are interactive but engine has no \`interactive\` config. Add \`interactive: {}\` to enable interactive mode.`)}let r=[];for(let[o,n]of t)n.executeInteractive!==void 0&&r.push(o);if(r.length>0)throw new Error(`Handler(s) [${r.join(", ")}] declare \`executeInteractive\` variant but engine has no \`interactive\` config. Add \`interactive: {}\` to enable interactive mode.`)}function Ke(i){let e=new Set,t=new Set;for(let[r,o]of i)(o.async===true||isAsyncFunction(o.execute))&&e.add(r),(o.interactive===true||isGeneratorFunction(o.execute))&&t.add(r);return {asyncHandlerSet:e,interactiveHandlerSet:t}}function Ue(i,e,t,r){let o=t?te(i,true,false):e,n=r?te(i,t,true):null;return {handlersAsync:o,handlersInteractive:n}}function Ae(i,e){return e?{next:()=>Promise.resolve({value:i,done:true}),return:()=>Promise.resolve({value:i,done:true}),throw:o=>Promise.reject(o),[Symbol.asyncIterator](){return this}}:{next:()=>({value:i,done:true}),return:()=>({value:i,done:true}),throw:r=>{throw r},[Symbol.iterator](){return this}}}function qe(i,e,t,r,o,n){if(n){let c=i;return {async next(d){let h=await c.next(d);if(h.done){let f=h.value;if(o!==null){let p=o(e,t,f,r);p!==void 0&&(f=p);}return {value:f,done:true}}return {value:h.value,done:false}},async return(){let d=await c.return(void 0),h=d.value;if(d.done&&o!==null){let f=o(e,t,h,r);f!==void 0&&(h=f);}return {value:h,done:true}},async throw(d){let h=await c.throw(d);if(h.done){let f=h.value;if(o!==null){let p=o(e,t,f,r);p!==void 0&&(f=p);}return {value:f,done:true}}return {value:h.value,done:false}},[Symbol.asyncIterator](){return this}}}let s=i;return {next(c){let u=s.next(c);if(u.done){let d=u.value;if(o!==null){let h=o(e,t,d,r);h!==void 0&&(d=h);}return {value:d,done:true}}return {value:u.value,done:false}},return(){let c=s.return(void 0),u=c.value;if(c.done&&o!==null){let d=o(e,t,u,r);d!==void 0&&(u=d);}return {value:u,done:true}},throw(c){let u=s.throw(c);if(u.done){let d=u.value;if(o!==null){let h=o(e,t,d,r);h!==void 0&&(d=h);}return {value:d,done:true}}return {value:u.value,done:false}},[Symbol.iterator](){return this}}}var Dt=8,At="type",be={maxDepth:10,maxRules:1e4,maxDirectives:1e5},Re=class{_directiveExecutor;_mode;_ctx;_requestedMode;_threshold;_limits;_typeField;_handlers;_handlersAsync;_handlersInteractive;_definitions;_directiveHooks;_directiveAnalysis;_asyncHandlerSet;_interactiveHandlerSet;_isAsync;_isInteractive;_directivePermissions;_subDirectiveFieldsForGraph;_subDirectiveFieldsAll;_miniGraph;_interactiveExecutor;_beforeAction;_afterAction;_registry=new Map;_emitter=new X;_batch=new le;_registeredIds=new Set;_directiveRunner;_directiveRunnerSync;_engineRef;constructor(e){this._requestedMode=e.mode??"auto",this._threshold=e.autoJitThreshold??Dt,this._typeField=e.typeField??At,this._limits={maxDepth:e.limits?.maxDepth??be.maxDepth,maxRules:e.limits?.maxRules??be.maxRules,maxDirectives:e.limits?.maxDirectives??be.maxDirectives};let{handlers:t,definitions:r}=Fe(e.handlers);Oe(Object.keys(e.handlers)),Ve(e.allowedDirectives,e.blockedDirectives),this._handlers=t,this._definitions=r,this._directivePermissions=Ne(Object.keys(t),e.allowedDirectives,e.blockedDirectives),this._directiveHooks=e.directiveHooks??{},this._beforeAction=e.actionHooks?.beforeAction??null,this._afterAction=e.actionHooks?.afterAction??null,this._directiveAnalysis=analyzeSlots(this._directiveHooks,DIRECTIVE_SLOT_NAMES);let{asyncHandlerSet:o,interactiveHandlerSet:n}=Ke(this._definitions);this._asyncHandlerSet=o,this._interactiveHandlerSet=n,this._isInteractive=e.interactive!==void 0,ze(this._isInteractive,n,this._definitions),this._isAsync=this._directiveAnalysis.hasAnyAsync||o.size>0;let{handlersAsync:s,handlersInteractive:a}=Ue(this._definitions,this._handlers,this._isAsync,this._isInteractive);this._handlersAsync=s,this._handlersInteractive=a;let c=He(this._definitions);this._subDirectiveFieldsForGraph=c,this._subDirectiveFieldsAll=Me(this._definitions),this._miniGraph=Le({typeField:this._typeField,asyncHandlerSet:o,interactiveHandlerSet:n,subDirectiveFieldsForGraph:c}),this._engineRef=this._buildEngineRef();let u=oe(this._directiveAnalysis,false);this._directiveRunner=this._buildDirectiveRunner(),this._directiveRunnerSync=this._buildDirectiveRunnerSync(u);let d=this._buildExecutors(u);this._directiveExecutor=d.directiveExecutor,this._mode=d.mode,this._interactiveExecutor=d.interactiveExecutor;}_buildEngineRef(){return {runDirectives:(e,t)=>this._executeDirectives(e,t),runDirectivesAsync:(e,t)=>this._executeDirectivesAsync(e,t),invoke:(e,t,r)=>this._invokeInternal(e,t,r),invokeAsync:(e,t,r)=>this._invokeInternalAsync(e,t,r),isActionAsync:e=>this._miniGraph.has(e)?this._miniGraph.isAsync(e):void 0,isActionInteractive:e=>this._miniGraph.has(e)?this._miniGraph.isInteractive(e):void 0,invokeInteractive:(e,t,r)=>this._invokeInteractiveInternal(e,t,r),runDirectivesInteractive:(e,t)=>this._executeDirectivesInteractive(e,t),evaluateRules:()=>{throw new Error("evaluateRules() not available in ActionEngine context. Use createRuleEngine().")},evaluateRulesAsync:()=>{throw new Error("evaluateRulesAsync() not available in ActionEngine context. Use createRuleEngine().")}}}_buildDirectiveRunner(){let e=this._isAsync?this._handlersAsync:this._handlers;return (t,r)=>this._directiveExecutor(t,r,e,this._directiveHooks,this._typeField,this._engineRef,this._limits.maxDirectives)}_buildDirectiveRunnerSync(e){return (t,r)=>e(t,r,this._handlers,this._directiveHooks,this._typeField,this._engineRef,this._limits.maxDirectives)}_buildExecutors(e){let t,r;this._requestedMode==="jit"?(t=this._buildJitDirectiveExecutor(),r="jit"):this._isAsync?(t=oe(this._directiveAnalysis,true),r="interpret"):(t=e,r="interpret");let o=this._isInteractive?this._isAsync?he(this._directiveAnalysis,true):he(this._directiveAnalysis,false):null;return {directiveExecutor:t,mode:r,interactiveExecutor:o}}register(e){let t=[],r=[],o=[],n=[];for(let c of e){if(!c.id){r.push({actionId:"",error:"Action must have an id"});continue}if(!this._isInteractive&&Q(c.directives,this._typeField,this._subDirectiveFieldsForGraph)){r.push({actionId:c.id,error:'Action uses directive type:"pause" but engine has no `interactive` config. Add `interactive: {}` to enable.'});continue}let u=ke(c,this._handlers,this._definitions,this._typeField);if(u.length>0){for(let d of u)r.push({actionId:c.id,error:d});continue}n.push(c);}for(let c of n){let u=B(c.directives,this._typeField,this._subDirectiveFieldsAll),d={definition:c,directives:u,compiled:null,invokeCount:0};this._registry.set(c.id,d),this._registeredIds.add(c.id),this._miniGraph.upsert(c.id,u,c.interactive===true),t.push(c.id);}if(this._batch.isActive())return this._batch.accumulate(r,o,n,t),{registered:t,errors:r,warnings:o};let s=t;if(n.length>0){this._miniGraph.recompute();let c=this._validateInteractiveVariants(t);c.errors.length>0&&r.push(...c.errors),c.warnings.length>0&&o.push(...c.warnings),s=c.validRegistered,this._invalidateAndMaybeRecompile();}let a={registered:s,errors:r,warnings:o};if(s.length>0){let c=new Set(s),u=n.filter(d=>c.has(d.id));this._emitter.emit("register",{actions:u,result:a,registered:s});}return a}unregister(e){let t=this._registry.delete(e);t&&(this._registeredIds.delete(e),this._miniGraph.remove(e));let r=e+"/",o=[];for(let n of this._registry.keys())n.startsWith(r)&&(this._registry.delete(n),this._registeredIds.delete(n),this._miniGraph.remove(n),o.push(n));return t&&(this._miniGraph.recompute(),this._invalidateAndMaybeRecompile(),this._emitter.emit("unregister",{id:e,cascaded:o})),t}invoke(e,t,r){if(this._miniGraph.isInteractive(e))throw new Error(`Cannot call invoke("${e}") \u2014 action is interactive (transitively). Use invokeInteractive() instead.`);if(this._miniGraph.isAsync(e))throw new Error(`Cannot call invoke("${e}") \u2014 action is async (transitively). Use invokeAsync() instead.`);if(this._directiveAnalysis.hasAnyAsync)throw new Error(`Cannot call invoke("${e}") \u2014 engine has async directive hooks. Use invokeAsync() instead.`);let o=r!==void 0?r:this._requireCtx(),n=createRootFrame(o,this._limits);return this._invokeInternal(e,t,n)}async invokeAsync(e,t,r){if(this._miniGraph.isInteractive(e))throw new Error(`Cannot call invokeAsync("${e}") \u2014 action is interactive (transitively). Use invokeInteractive() instead.`);let o=r!==void 0?r:this._requireCtx(),n=createRootFrame(o,this._limits);return this._invokeInternalAsync(e,t,n)}setContext(e){this._ctx=e;}context(e,t){let r=this._ctx;this._ctx=e;try{return t()}finally{this._ctx=r;}}beginBatch(){this._batch.begin();}endBatch(){if(!this._batch.endDepth())return {registered:[],errors:[],warnings:[]};let t=this._batch.registered;if(this._batch.registered.length>0){this._miniGraph.recompute();let o=this._validateInteractiveVariants(this._batch.registered);this._batch.errors.push(...o.errors),this._batch.warnings.push(...o.warnings),t=o.validRegistered,this._invalidateAndMaybeRecompile();}let r={registered:t,errors:this._batch.errors,warnings:this._batch.warnings};if(t.length>0){let o=new Set(t),n=this._batch.actions.filter(s=>o.has(s.id));this._emitter.emit("register",{actions:n,result:r,registered:t});}return r}on(e,t){return this._emitter.on(e,t)}get handlerDefinitions(){return this._definitions}get registeredIds(){return this._registeredIds}getActionDefinition(e){return this._registry.get(e)?.definition}get typeField(){return this._typeField}get subDirectiveFieldsForGraph(){return this._subDirectiveFieldsForGraph}get directivePermissions(){return this._directivePermissions}get isAsync(){return this._isAsync}get isInteractive(){return this._isInteractive}isActionAsync(e){if(this._miniGraph.has(e))return this._miniGraph.isAsync(e)}isActionInteractive(e){if(this._miniGraph.has(e))return this._miniGraph.isInteractive(e)}invokeInteractive(e,t,r){if(!this._isInteractive||this._interactiveExecutor===null)throw new Error("Cannot call invokeInteractive() \u2014 engine has no `interactive` config. Add `interactive: {}` to enable.");let o=r!==void 0?r:this._requireCtx(),n=createRootFrame(o,this._limits);return this._invokeInteractiveInternal(e,t,n)}_invokeInteractiveInternal(e,t,r){let o=this._prepareInvoke(e,t,r);if("success"in o)return Ae(o,this._isAsync);let{stored:n,childFrame:s,childScope:a}=o;if(this._beforeAction!==null){let u=this._beforeAction(e,t,s);if(u?.skip)return Ae(ae(u.data,s.counters),this._isAsync)}let c;if(n.compiled&&n.compiled.isInteractive)c=n.compiled.fn(s,s.scope,n.compiled.$);else {let u=this._interactiveExecutor;c=u(n.directives,s,this._handlersInteractive,this._directiveHooks,this._typeField,this._engineRef,this._limits.maxDirectives);}return qe(c,e,t,s,this._afterAction,this._isAsync)}_executeDirectivesInteractive(e,t){if(!this._isInteractive||this._interactiveExecutor===null)throw new Error("runDirectivesInteractive: engine has no `interactive` config");return this._interactiveExecutor(e,t,this._handlersInteractive,this._directiveHooks,this._typeField,this._engineRef,this._limits.maxDirectives)}get compilationMode(){return this._mode}get directiveHookSlots(){return this._directiveAnalysis.filledNames}get asyncSlots(){return this._directiveAnalysis.asyncNames}compile(){if(this._requestedMode!=="interpret"){this._mode!=="jit"&&this._promote();for(let[e,t]of this._registry)t.compiled||(t.compiled=this._compileAction(e,t.directives));}}_invokeInternal(e,t,r){let o=this._prepareInvoke(e,t,r);if("success"in o)return o;let{stored:n,childFrame:s,childScope:a}=o;if(this._beforeAction!==null){let u=this._beforeAction(e,t,s);if(u?.skip)return ae(u.data,s.counters)}let c;if(n.compiled?c=n.compiled.fn(s,a,n.compiled.$):this._isAsync&&!this._miniGraph.isAsync(e)?(n.compiled=this._compileAction(e,n.directives),c=n.compiled.fn(s,a,n.compiled.$)):(c=this._directiveRunner(n.directives,s),this._maybeAutoPromote(n)),this._afterAction!==null){let u=this._afterAction(e,t,c,s);u!==void 0&&(c=u);}return c}async _invokeInternalAsync(e,t,r){let o=this._prepareInvoke(e,t,r);if("success"in o)return o;let{stored:n,childFrame:s,childScope:a}=o;if(this._beforeAction!==null){let u=this._beforeAction(e,t,s);if(u?.skip)return ae(u.data,s.counters)}let c;if(n.compiled?c=await n.compiled.fn(s,a,n.compiled.$):(c=await this._directiveRunner(n.directives,s),this._maybeAutoPromote(n)),this._afterAction!==null){let u=this._afterAction(e,t,c,s);u!==void 0&&(c=u);}return c}_prepareInvoke(e,t,r){let o=this._registry.get(e);if(!o)return Te(e,r.counters);if(e.includes("/")&&!this._isAccessible(e,r))return $e(e,r.counters);if(r.depth>=r.limits.maxDepth)return Se(e,r.limits.maxDepth,r.counters);let n=Object.create(r.scope);t&&Object.assign(n,t);let s=r.child("action:"+e,0,e).withScope(n);return {stored:o,childFrame:s,childScope:n}}_maybeAutoPromote(e){this._requestedMode==="auto"&&++e.invokeCount>=this._threshold&&(e.compiled=this._compileAction(e.definition.id,e.directives),this._mode!=="jit"&&this._promote());}_executeDirectives(e,t){return this._directiveExecutor(e,t,this._handlers,this._directiveHooks,this._typeField,this._engineRef,this._limits.maxDirectives)}async _executeDirectivesAsync(e,t){return this._directiveExecutor(e,t,this._handlers,this._directiveHooks,this._typeField,this._engineRef,this._limits.maxDirectives)}_compileAction(e,t){let r=this._miniGraph.isAsync(e),o=this._miniGraph.isInteractive(e),n=Pe(this._definitions,o,this._interactiveHandlerSet),{fn:s,isAsync:a,isInteractive:c}=_e(t,this._directiveAnalysis,this._typeField,this._asyncHandlerSet,r,o,n),u=te(this._definitions,a,c),d={d:t,h:u,hooks:this._directiveHooks,engine:this._engineRef,runner:this._directiveRunner,runnerSync:this._directiveRunnerSync};return {fn:s,$:d,isAsync:a,isInteractive:c}}_isAccessible(e,t){let o="action:"+e.slice(0,e.lastIndexOf("/"));return t.path.includes(o)}_requireCtx(){if(this._ctx===void 0)throw new Error("No context set. Pass ctx to invoke(id, params, ctx), call setContext(ctx), or use context(ctx, fn).");return this._ctx}_promote(){this._directiveExecutor=this._buildJitDirectiveExecutor(),this._mode="jit";}_buildJitDirectiveExecutor(){let{fn:e}=ye(this._directiveAnalysis,this._isAsync);return e}_validateInteractiveVariants(e){let t=[],r=[],o=new Set(e),n=new Set;for(let a of this._registeredIds){if(!this._miniGraph.isInteractive(a))continue;let c=this._registry.get(a);if(c===void 0)continue;let u=Ee(c.directives,this._typeField,this._definitions,this._subDirectiveFieldsForGraph,this._interactiveHandlerSet,h=>this._miniGraph.isInteractive(h),isGeneratorFunction);if(u.size===0)continue;let d=o.has(a);for(let h of u){let f=`Action "${a}" is transitively interactive but handler "${h}" has no executeInteractive variant (and execute is not a generator function, and interactive flag is not set)`;d?(t.push({actionId:a,error:f,code:"MISSING_INTERACTIVE_VARIANT"}),n.add(a)):r.push({actionId:a,code:"MISSING_INTERACTIVE_VARIANT",message:f});}}if(n.size>0){for(let a of n)this._registry.delete(a),this._registeredIds.delete(a),this._miniGraph.remove(a);this._miniGraph.recompute();}return {validRegistered:e.filter(a=>!n.has(a)),errors:t,warnings:r}}_invalidateAndMaybeRecompile(){for(let e of this._registry.values())e.compiled=null;if(this._requestedMode==="jit")for(let[e,t]of this._registry)t.compiled=this._compileAction(e,t.directives);}};function Ct(i){return new Re(i)}export{N as RESERVED_TYPES,X as SimpleEmitter,_e as buildActionExecutor,ye as buildDirectiveExecutor,Ct as createActionEngine,oe as createDirectiveInterpreter,Je as drainAsync,We as drainSync,B as normalizeDirectives,Ye as replayResponder};
3
+ }`;return t?`(${e?"async function*()":"function*()"}${n})()`:`(${e?"async ()=>":"()=>"}${n})()`}function ct(i,e,t,n){let s=JSON.stringify(e.name);typeof e.resolve=="function"?(i.push("try{"),i.push(`scope[${s}]=${t}.resolve(ctx,scope).value;`),i.push(`}catch(_e){errors.push({directiveIndex:${n},error:"Binding resolve: "+_e});counters.errors++;}`)):i.push(`scope[${s}]=${t}.value;`);}function at(i,e,t,n,s,r){typeof e.resolve=="function"?(i.push("try{"),i.push(`const _rv=${t}.resolve(ctx,scope);`),i.push(`return{success:true,aborted:false,appliedCount,skippedCount,errors,processedCount:${s},totalCount:${r},counters,data:"value" in _rv?_rv.value:"return" in _rv?_rv.return:${t}.value};`),i.push(`}catch(_e){errors.push({directiveIndex:${n},error:"Control resolve: "+_e});counters.errors++;}`)):i.push(`return{success:true,aborted:false,appliedCount,skippedCount,errors,processedCount:${s},totalCount:${r},counters,data:${t}.value};`);}function ut(i,e,t,n,s,r){typeof e.resolve=="function"?(i.push("try{"),i.push(`const _rv=${t}.resolve(ctx,scope);`),i.push(`return{success:false,aborted:true,abortedBy:"throw",appliedCount,skippedCount,errors,processedCount:${s},totalCount:${r},counters,data:"message" in _rv?_rv.message:"throw" in _rv?_rv.throw:${t}.message};`),i.push(`}catch(_e){errors.push({directiveIndex:${n},error:"Control resolve: "+_e});counters.errors++;}`)):i.push(`return{success:false,aborted:true,abortedBy:"throw",appliedCount,skippedCount,errors,processedCount:${s},totalCount:${r},counters,data:${t}.message};`);}function lt(i,e,t,n,s,r){let o=typeof e.as=="string",a=o?JSON.stringify(e.as):"";i.push(`{const _ack=yield{source:"pause",directive:${t},frame,index:${n},payload:{message:${t}.message}};`),i.push(`if(_ack===false||_ack==="abort"||_ack==="cancel")return{success:false,aborted:true,abortedBy:"pause",appliedCount,skippedCount,errors,processedCount:${s},totalCount:${r},counters,data:_ack};`),i.push("appliedCount++;counters.directivesApplied++;"),o&&i.push(`if(_ack!==undefined)scope[${a}]=_ack;`),i.push("}");}function dt(i,e,t,n,s){let{L:r,total:o,typeField:a,handlerVars:c,hasBefore:u,hasAfter:d,awBefore:h,awAfter:f,awHandler:p,actionIsAsync:l,actionIsInteractive:g,interactiveHandlerSet:A}=s,D=i[a],b=c.get(D),P=typeof i.resolve=="function",R=typeof i.as=="string",I=Array.isArray(i.catch)&&i.catch.length>0,T=R?JSON.stringify(i.as):"",_=g&&A.has(D),C=s.blockCounter.n++;r.push(`_b${C}:{`);let k=u||P,x=u;k&&r.push(`let _dir=${e};`),x&&r.push("let _df=frame;"),u&&(r.push("try{"),r.push(`const _bd=${h}_hookBefore(${e},frame);`),r.push(`if(_bd==="skip"){skippedCount++;counters.directivesSkipped++;break _b${C};}`),r.push(`if(_bd==="abort")${ye('"beforeDirective"',n-1,o)}`),r.push('if(typeof _bd==="object"&&_bd!==null){'),r.push(`if("abort" in _bd)${ye("_bd.abort",n-1,o)}`),r.push('if("ctx" in _bd)_df=frame.withCtx(_bd.ctx);'),r.push('if("directive" in _bd)_dir=_bd.directive;'),r.push("}"),r.push(`}catch(_e){errors.push({directiveIndex:${t},error:"Hook beforeDirective: "+_e});counters.errors++;}`)),u?(r.push('if(typeof _dir.resolve==="function"){'),r.push("try{const _r=_dir.resolve(_df.ctx,scope);_dir=Object.assign({},_dir,_r);}"),r.push(`catch(_e){errors.push({directiveIndex:${t},error:"Directive resolve: "+_e});counters.errors++;break _b${C};}}`)):P&&(r.push(`try{const _r=${e}.resolve(ctx,scope);_dir=Object.assign({},${e},_r);}`),r.push(`catch(_e){errors.push({directiveIndex:${t},error:"Directive resolve: "+_e});counters.errors++;break _b${C};}`));let E=k?"_dir":e,M=x?"_df":"frame";if(r.push("let _result;"),_?(r.push(`try{_result=yield* ${b}(${E},${M},$.engine);}`),r.push("catch(_e){_result={ok:false,error:String(_e)};}")):g?(r.push(`try{_result=${p}${b}(${E},${M},$.engine);if(_result&&_result.iterator)_result=yield* _result.iterator;}`),r.push("catch(_e){_result={ok:false,error:String(_e)};}")):(r.push(`try{_result=${p}${b}(${E},${M},$.engine);}`),r.push("catch(_e){_result={ok:false,error:String(_e)};}")),r.push("if(_result.ok){"),r.push("appliedCount++;counters.directivesApplied++;"),R&&r.push(`scope[${T}]=_result.data;`),r.push(`if(_result.halt)${nt(n,o)}`),r.push("}else{"),r.push(`if(_result.halt)${rt(n,o)}`),I){r.push('scope.$exception=_result.error||"handler failed";');let H=l?"$.runner":"$.runnerSync";r.push(`const _cr=${p}${H}(${e}.catch,${M});`),r.push("appliedCount+=_cr.appliedCount;"),r.push("for(let _j=0;_j<_cr.errors.length;_j++)errors.push(_cr.errors[_j]);"),r.push(`if(_cr.aborted)return{success:_cr.success,aborted:true,abortedBy:_cr.abortedBy,appliedCount,skippedCount,errors,processedCount:${n},totalCount:${o},counters,data:_cr.data};`);}else r.push(`errors.push({directiveIndex:${t},error:_result.error||"handler failed"});counters.errors++;`);r.push("}"),d&&(r.push("try{"),r.push(`const _ad=${f}_hookAfter(${E},_result,${M});`),r.push(`if(_ad==="abort")${ye('"afterDirective"',n,o)}`),r.push(`}catch(_e){errors.push({directiveIndex:${t},error:"Hook afterDirective: "+_e});counters.errors++;}`)),r.push("}");}function ft(i,e,t,n,s,r){let{L:o}=r,a=i.cond,c=typeof a=="boolean";o.push("{"),c?o.push(`if(${a?"true":"false"}){`):(o.push("let _cond=false,_condOk=true;"),o.push(`try{const _c=${e}.cond;_cond=typeof _c==="function"?!!_c(ctx,scope):!!_c;}`),o.push(`catch(_e){errors.push({directiveIndex:${t},error:"if cond: "+_e});counters.errors++;_condOk=false;}`),o.push("if(_condOk){"),o.push("if(_cond){"));let u=i.then;Array.isArray(u)&&u.length>0&&ge(u,`${e}.then`,n,s,r),o.push("}");let d=i.else;Array.isArray(d)&&d.length>0&&(o.push("else{"),ge(d,`${e}.else`,n,s,r),o.push("}")),c||o.push("}"),o.push("}");}function ge(i,e,t,n,s){let r=t!==-1;for(let o=0;o<i.length;o++){let a=i[o],c=`${e}[${o}]`,u=r?t:o,d=r?n:o+1;switch(a[s.typeField]){case "const":case "let":ct(s.L,a,c,u);break;case "return":at(s.L,a,c,u,d,s.total);break;case "throw":ut(s.L,a,c,u,d,s.total);break;case "pause":lt(s.L,a,c,u,d,s.total);break;case "if":{let f=r?t:o,p=r?n:o+1;ft(a,c,u,f,p,s);break}default:dt(a,c,u,d,s);break}}}function xe(i,e,t){for(let n of i){let s=n[e];if(s&&!N.has(s)&&t.add(s),s==="if"){let r=n.then;Array.isArray(r)&&r.length>0&&xe(r,e,t);let o=n.else;Array.isArray(o)&&o.length>0&&xe(o,e,t);}}}var Ie=new Set;function me(i,e,t,n=Ie,s,r=false,o=Ie){let a=[],c=i.length,{filledNames:u,hasAnyAsync:d,asyncNames:h}=e,f=u.has("beforeDirective"),p=u.has("afterDirective"),l=u.has("onDirectivesComplete"),g=s!==void 0?s:ce(i,n,t),A=d||g,D=A?"await ":"",b=h.has("beforeDirective")?"await ":"",P=h.has("afterDirective")?"await ":"",R=h.has("onDirectivesComplete")?"await ":"",I=new Set;xe(i,t,I);let T=new Map,_=0;for(let E of I)T.set(E,`_h${_++}`);it(a,T,f,p),ge(i,"$.d",-1,0,{L:a,total:c,typeField:t,handlerVars:T,hasBefore:f,hasAfter:p,awBefore:b,awAfter:P,awHandler:D,actionIsAsync:A,actionIsInteractive:r,interactiveHandlerSet:o,blockCounter:{n:0}}),st(a,c,l,R);let k=ot(a.join(`
4
+ `),A,r);return {fn:new Function("frame","scope","$",`"use strict";
5
+ return ${k};`),isAsync:A,isInteractive:r}}function ce(i,e,t){for(let n of i){let s=n[t];if(s&&e.has(s))return true;if(s==="if"){let o=n.then;if(Array.isArray(o)&&o.length>0&&ce(o,e,t))return true;let a=n.else;if(Array.isArray(a)&&a.length>0&&ce(a,e,t))return true}let r=n.catch;if(Array.isArray(r)&&r.length>0&&ce(r,e,t))return true}return false}function _e(i,e,t){return {success:false,aborted:false,appliedCount:0,skippedCount:0,processedCount:0,totalCount:0,errors:[{directiveIndex:-1,error:e}],counters:i,...t}}function we(i,e){return _e(e,`Action not found: "${i}"`,{aborted:true,abortedBy:"action-not-found"})}function Te(i,e,t){return _e(t,`Max depth ${e} exceeded invoking "${i}"`,{aborted:true,abortedBy:"maxDepth"})}function Se(i,e){return _e(e,`Action "${i}" is private (sub-action). Can only be invoked from within its parent scope.`)}function ae(i,e){return {success:true,aborted:false,appliedCount:0,skippedCount:0,processedCount:0,totalCount:0,errors:[],data:i,counters:e}}function pt(i){return typeof i=="object"&&i!==null&&"execute"in i}function $e(i){let e=new Map;for(let[t,n]of i){let s=n.subDirectives;if(!s)continue;let r=Object.keys(s);if(r.length===0)continue;let o=null;for(let a=0;a<r.length;a++){let c=r[a];c!=="catch"&&s[c].graph!==false&&(o===null&&(o=[]),o.push(c));}o!==null&&e.set(t,o);}return e}function Me(i){let e=new Map;for(let[t,n]of i){let s=n.subDirectives;if(!s)continue;let r=Object.keys(s);if(r.length===0)continue;let o=null;for(let a=0;a<r.length;a++){let c=r[a];c!=="catch"&&(o===null&&(o=[]),o.push(c));}o!==null&&e.set(t,o);}return e}function He(i,e,t){if(!e)return t;let n=new Set(t);for(let[s,r]of i)r.executeInteractive!==void 0&&n.add(s);return n}function te(i,e,t){let n=Object.create(null);for(let[s,r]of i){let o;t&&r.executeInteractive!==void 0?o=r.executeInteractive:e&&r.executeAsync!==void 0?o=r.executeAsync:o=r.execute,n[s]=o;}return n}function Pe(i){let e=Object.create(null),t=new Map;for(let n of Object.keys(i)){let s=i[n];pt(s)?(e[n]=s.execute,t.set(n,s)):(e[n]=s,t.set(n,{execute:s}));}return {handlers:e,definitions:t}}function Fe(i,e){if(i==="*")return true;if(!i.includes("*"))return i===e;let t=i.replace(/[.+^${}()|[\]\\]/g,"\\$&");return new RegExp("^"+t.replace(/\*/g,".*")+"$").test(e)}function Ge(i){return typeof i=="string"?{pattern:i}:i}function Be(i,e,t){let n=new Map;if(!e&&!t){for(let s of i)n.set(s,{status:"available"});return n}if(e){let s=e.map(Ge);for(let r of i){let o=s.some(a=>Fe(a.pattern,r));n.set(r,{status:o?"available":"denied"});}}else {let s=t.map(Ge);for(let r of i){let o=s.find(a=>Fe(a.pattern,r));o?n.set(r,{status:"denied",reason:o.reason,source:o.source}):n.set(r,{status:"available"});}}return n}function je(i){let{typeField:e,asyncHandlerSet:t,interactiveHandlerSet:n,subDirectiveFieldsForGraph:s}=i,r=new Map,o=new Set,a=new Set,c=new Set,u=new Set;return {upsert(d,h,f){r.set(d,vt(h,e,s)),re(h,t,e,s)?o.add(d):o.delete(d),f||ie(h,n,e,s)?a.add(d):a.delete(d);},remove(d){r.delete(d),o.delete(d),a.delete(d);},recompute(){c=Ne(r,o),u=Ne(r,a);},isAsync(d){return c.has(d)},isInteractive(d){return u.has(d)},has(d){return r.has(d)}}}var ue=new Map;function vt(i,e,t=ue){let n=new Set;return ne(i,e,t,n),n}function ne(i,e,t,n){for(let s of i){let r=s[e];r==="action"&&typeof s.id=="string"&&n.add(s.id);let o=s.catch;if(Array.isArray(o)&&o.length>0&&ne(o,e,t,n),r==="if"){let c=s.then;Array.isArray(c)&&c.length>0&&ne(c,e,t,n);let u=s.else;Array.isArray(u)&&u.length>0&&ne(u,e,t,n);continue}if(r===void 0)continue;let a=t.get(r);if(a!==void 0)for(let c=0;c<a.length;c++){let u=s[a[c]];!Array.isArray(u)||u.length===0||ne(u,e,t,n);}}}function re(i,e,t,n=ue){for(let s of i){let r=s[t];if(r!==void 0&&e.has(r))return true;let o=s.catch;if(Array.isArray(o)&&o.length>0&&re(o,e,t,n))return true;if(r==="if"){let c=s.then;if(Array.isArray(c)&&c.length>0&&re(c,e,t,n))return true;let u=s.else;if(Array.isArray(u)&&u.length>0&&re(u,e,t,n))return true;continue}if(r===void 0)continue;let a=n.get(r);if(a!==void 0)for(let c=0;c<a.length;c++){let u=s[a[c]];if(!(!Array.isArray(u)||u.length===0)&&re(u,e,t,n))return true}}return false}function ie(i,e,t,n=ue){for(let s of i){let r=s[t];if(r==="pause"||r!==void 0&&e.has(r))return true;let o=s.catch;if(Array.isArray(o)&&o.length>0&&ie(o,e,t,n))return true;if(r==="if"){let c=s.then;if(Array.isArray(c)&&c.length>0&&ie(c,e,t,n))return true;let u=s.else;if(Array.isArray(u)&&u.length>0&&ie(u,e,t,n))return true;continue}if(r===void 0)continue;let a=n.get(r);if(a!==void 0)for(let c=0;c<a.length;c++){let u=s[a[c]];if(!(!Array.isArray(u)||u.length===0)&&ie(u,e,t,n))return true}}return false}function Q(i,e,t=ue){for(let n of i){let s=n[e];if(s==="pause")return true;let r=n.catch;if(Array.isArray(r)&&r.length>0&&Q(r,e,t))return true;if(s==="if"){let a=n.then;if(Array.isArray(a)&&a.length>0&&Q(a,e,t))return true;let c=n.else;if(Array.isArray(c)&&c.length>0&&Q(c,e,t))return true;continue}if(s===void 0)continue;let o=t.get(s);if(o!==void 0)for(let a=0;a<o.length;a++){let c=n[o[a]];if(!(!Array.isArray(c)||c.length===0)&&Q(c,e,t))return true}}return false}function Ne(i,e){let t=new Set(e),n=true;for(;n;){n=false;for(let[s,r]of i)if(!t.has(s)){for(let o of r)if(t.has(o)){t.add(s),n=true;break}}}return t}var le=class{depth=0;errors=[];warnings=[];actions=[];registered=[];begin(){this.depth++,this.depth===1&&(this.errors=[],this.warnings=[],this.actions=[],this.registered=[]);}endDepth(){if(this.depth<=0)throw new Error("endBatch() called without matching beginBatch()");return this.depth--,this.depth===0}isActive(){return this.depth>0}accumulate(e,t,n,s){this.errors.push(...e),this.warnings.push(...t);for(let r of n)this.actions.push(r);this.registered.push(...s);}};function Le(i){for(let e of i)if(N.has(e))throw new Error(`Handler type "${e}" is reserved for engine-internal directives`)}function Oe(i,e){if(i&&e)throw new Error("allowedDirectives and blockedDirectives are mutually exclusive. Provide one or neither.")}function Ve(i,e,t){if(i)return;if(e.size>0){let s=Array.from(e).join(", ");throw new Error(`Handler(s) [${s}] are interactive but engine has no \`interactive\` config. Add \`interactive: {}\` to enable interactive mode.`)}let n=[];for(let[s,r]of t)r.executeInteractive!==void 0&&n.push(s);if(n.length>0)throw new Error(`Handler(s) [${n.join(", ")}] declare \`executeInteractive\` variant but engine has no \`interactive\` config. Add \`interactive: {}\` to enable interactive mode.`)}function ze(i){let e=new Set,t=new Set;for(let[n,s]of i)(s.async===true||isAsyncFunction(s.execute))&&e.add(n),(s.interactive===true||isGeneratorFunction(s.execute))&&t.add(n);return {asyncHandlerSet:e,interactiveHandlerSet:t}}function Ke(i,e,t,n){let s=t?te(i,true,false):e,r=n?te(i,t,true):null;return {handlersAsync:s,handlersInteractive:r}}function De(i,e){return e?{next:()=>Promise.resolve({value:i,done:true}),return:()=>Promise.resolve({value:i,done:true}),throw:s=>Promise.reject(s),[Symbol.asyncIterator](){return this}}:{next:()=>({value:i,done:true}),return:()=>({value:i,done:true}),throw:n=>{throw n},[Symbol.iterator](){return this}}}function Ue(i,e,t,n,s,r){if(r){let c=i;return {async next(d){let h=await c.next(d);if(h.done){let f=h.value;if(s!==null){let p=s(e,t,f,n);p!==void 0&&(f=p);}return {value:f,done:true}}return {value:h.value,done:false}},async return(){let d=await c.return(void 0),h=d.value;if(d.done&&s!==null){let f=s(e,t,h,n);f!==void 0&&(h=f);}return {value:h,done:true}},async throw(d){let h=await c.throw(d);if(h.done){let f=h.value;if(s!==null){let p=s(e,t,f,n);p!==void 0&&(f=p);}return {value:f,done:true}}return {value:h.value,done:false}},[Symbol.asyncIterator](){return this}}}let o=i;return {next(c){let u=o.next(c);if(u.done){let d=u.value;if(s!==null){let h=s(e,t,d,n);h!==void 0&&(d=h);}return {value:d,done:true}}return {value:u.value,done:false}},return(){let c=o.return(void 0),u=c.value;if(c.done&&s!==null){let d=s(e,t,u,n);d!==void 0&&(u=d);}return {value:u,done:true}},throw(c){let u=o.throw(c);if(u.done){let d=u.value;if(s!==null){let h=s(e,t,d,n);h!==void 0&&(d=h);}return {value:d,done:true}}return {value:u.value,done:false}},[Symbol.iterator](){return this}}}var _t=8,Dt="type",Ce={maxDepth:10,maxRules:1e4,maxDirectives:1e5},Re=class{_directiveExecutor;_mode;_ctx;_requestedMode;_threshold;_limits;_typeField;_handlers;_handlersAsync;_handlersInteractive;_definitions;_directiveHooks;_directiveAnalysis;_asyncHandlerSet;_interactiveHandlerSet;_isAsync;_isInteractive;_directivePermissions;_subDirectiveFieldsForGraph;_subDirectiveFieldsAll;_miniGraph;_interactiveExecutor;_beforeAction;_afterAction;_registry=new Map;_emitter=new X;_batch=new le;_registeredIds=new Set;_directiveRunner;_directiveRunnerSync;_engineRef;constructor(e){this._requestedMode=e.mode??"auto",this._threshold=e.autoJitThreshold??_t,this._typeField=e.typeField??Dt,this._limits={maxDepth:e.limits?.maxDepth??Ce.maxDepth,maxRules:e.limits?.maxRules??Ce.maxRules,maxDirectives:e.limits?.maxDirectives??Ce.maxDirectives};let{handlers:t,definitions:n}=Pe(e.handlers);Le(Object.keys(e.handlers)),Oe(e.allowedDirectives,e.blockedDirectives),this._handlers=t,this._definitions=n,this._directivePermissions=Be(Object.keys(t),e.allowedDirectives,e.blockedDirectives),this._directiveHooks=e.directiveHooks??{},this._beforeAction=e.actionHooks?.beforeAction??null,this._afterAction=e.actionHooks?.afterAction??null,this._directiveAnalysis=analyzeSlots(this._directiveHooks,DIRECTIVE_SLOT_NAMES);let{asyncHandlerSet:s,interactiveHandlerSet:r}=ze(this._definitions);this._asyncHandlerSet=s,this._interactiveHandlerSet=r,this._isInteractive=e.interactive!==void 0,Ve(this._isInteractive,r,this._definitions),this._isAsync=this._directiveAnalysis.hasAnyAsync||s.size>0;let{handlersAsync:o,handlersInteractive:a}=Ke(this._definitions,this._handlers,this._isAsync,this._isInteractive);this._handlersAsync=o,this._handlersInteractive=a;let c=$e(this._definitions);this._subDirectiveFieldsForGraph=c,this._subDirectiveFieldsAll=Me(this._definitions),this._miniGraph=je({typeField:this._typeField,asyncHandlerSet:s,interactiveHandlerSet:r,subDirectiveFieldsForGraph:c}),this._engineRef=this._buildEngineRef();let u=oe(this._directiveAnalysis,false);this._directiveRunner=this._buildDirectiveRunner(),this._directiveRunnerSync=this._buildDirectiveRunnerSync(u);let d=this._buildExecutors(u);this._directiveExecutor=d.directiveExecutor,this._mode=d.mode,this._interactiveExecutor=d.interactiveExecutor;}_buildEngineRef(){return {runDirectives:(e,t)=>this._executeDirectives(e,t),runDirectivesAsync:(e,t)=>this._executeDirectivesAsync(e,t),invoke:(e,t,n)=>this._invokeInternal(e,t,n),invokeAsync:(e,t,n)=>this._invokeInternalAsync(e,t,n),isActionAsync:e=>this._miniGraph.has(e)?this._miniGraph.isAsync(e):void 0,isActionInteractive:e=>this._miniGraph.has(e)?this._miniGraph.isInteractive(e):void 0,invokeInteractive:(e,t,n)=>this._invokeInteractiveInternal(e,t,n),runDirectivesInteractive:(e,t)=>this._executeDirectivesInteractive(e,t),evaluateRules:()=>{throw new Error("evaluateRules() not available in ActionEngine context. Use createRuleEngine().")},evaluateRulesAsync:()=>{throw new Error("evaluateRulesAsync() not available in ActionEngine context. Use createRuleEngine().")}}}_buildDirectiveRunner(){let e=this._isAsync?this._handlersAsync:this._handlers;return (t,n)=>this._directiveExecutor(t,n,e,this._directiveHooks,this._typeField,this._engineRef,this._limits.maxDirectives)}_buildDirectiveRunnerSync(e){return (t,n)=>e(t,n,this._handlers,this._directiveHooks,this._typeField,this._engineRef,this._limits.maxDirectives)}_buildExecutors(e){let t=this._isAsync?oe(this._directiveAnalysis,true):e,n=this._requestedMode==="jit"?"jit":"interpret",s=this._isInteractive?this._isAsync?he(this._directiveAnalysis,true):he(this._directiveAnalysis,false):null;return {directiveExecutor:t,mode:n,interactiveExecutor:s}}register(e){let t=[],n=[],s=[],r=[];for(let c of e){if(!c.id){n.push({actionId:"",error:"Action must have an id"});continue}if(!this._isInteractive&&Q(c.directives,this._typeField,this._subDirectiveFieldsForGraph)){n.push({actionId:c.id,error:'Action uses directive type:"pause" but engine has no `interactive` config. Add `interactive: {}` to enable.'});continue}let u=be(c,this._handlers,this._definitions,this._typeField);if(u.length>0){for(let d of u)n.push({actionId:c.id,error:d});continue}r.push(c);}for(let c of r){let u=B(c.directives,this._typeField,this._subDirectiveFieldsAll),d={definition:c,directives:u,compiled:null,invokeCount:0};this._registry.set(c.id,d),this._registeredIds.add(c.id),this._miniGraph.upsert(c.id,u,c.interactive===true),t.push(c.id);}if(this._batch.isActive())return this._batch.accumulate(n,s,r,t),{registered:t,errors:n,warnings:s};let o=t;if(r.length>0){this._miniGraph.recompute();let c=this._validateInteractiveVariants(t);c.errors.length>0&&n.push(...c.errors),c.warnings.length>0&&s.push(...c.warnings),o=c.validRegistered,this._invalidateAndMaybeRecompile();}let a={registered:o,errors:n,warnings:s};if(o.length>0){let c=new Set(o),u=r.filter(d=>c.has(d.id));this._emitter.emit("register",{actions:u,result:a,registered:o});}return a}unregister(e){let t=this._registry.delete(e);t&&(this._registeredIds.delete(e),this._miniGraph.remove(e));let n=e+"/",s=[];for(let r of this._registry.keys())r.startsWith(n)&&(this._registry.delete(r),this._registeredIds.delete(r),this._miniGraph.remove(r),s.push(r));return t&&(this._miniGraph.recompute(),this._invalidateAndMaybeRecompile(),this._emitter.emit("unregister",{id:e,cascaded:s})),t}invoke(e,t,n){if(this._miniGraph.isInteractive(e))throw new Error(`Cannot call invoke("${e}") \u2014 action is interactive (transitively). Use invokeInteractive() instead.`);if(this._miniGraph.isAsync(e))throw new Error(`Cannot call invoke("${e}") \u2014 action is async (transitively). Use invokeAsync() instead.`);if(this._directiveAnalysis.hasAnyAsync)throw new Error(`Cannot call invoke("${e}") \u2014 engine has async directive hooks. Use invokeAsync() instead.`);let s=n!==void 0?n:this._requireCtx(),r=createRootFrame(s,this._limits);return this._invokeInternal(e,t,r)}async invokeAsync(e,t,n){if(this._miniGraph.isInteractive(e))throw new Error(`Cannot call invokeAsync("${e}") \u2014 action is interactive (transitively). Use invokeInteractive() instead.`);let s=n!==void 0?n:this._requireCtx(),r=createRootFrame(s,this._limits);return this._invokeInternalAsync(e,t,r)}setContext(e){this._ctx=e;}context(e,t){let n=this._ctx;this._ctx=e;try{return t()}finally{this._ctx=n;}}beginBatch(){this._batch.begin();}endBatch(){if(!this._batch.endDepth())return {registered:[],errors:[],warnings:[]};let t=this._batch.registered;if(this._batch.registered.length>0){this._miniGraph.recompute();let s=this._validateInteractiveVariants(this._batch.registered);this._batch.errors.push(...s.errors),this._batch.warnings.push(...s.warnings),t=s.validRegistered,this._invalidateAndMaybeRecompile();}let n={registered:t,errors:this._batch.errors,warnings:this._batch.warnings};if(t.length>0){let s=new Set(t),r=this._batch.actions.filter(o=>s.has(o.id));this._emitter.emit("register",{actions:r,result:n,registered:t});}return n}on(e,t){return this._emitter.on(e,t)}get handlerDefinitions(){return this._definitions}get registeredIds(){return this._registeredIds}getActionDefinition(e){return this._registry.get(e)?.definition}get typeField(){return this._typeField}get subDirectiveFieldsForGraph(){return this._subDirectiveFieldsForGraph}get directivePermissions(){return this._directivePermissions}get isAsync(){return this._isAsync}get isInteractive(){return this._isInteractive}isActionAsync(e){if(this._miniGraph.has(e))return this._miniGraph.isAsync(e)}isActionInteractive(e){if(this._miniGraph.has(e))return this._miniGraph.isInteractive(e)}invokeInteractive(e,t,n){if(!this._isInteractive||this._interactiveExecutor===null)throw new Error("Cannot call invokeInteractive() \u2014 engine has no `interactive` config. Add `interactive: {}` to enable.");let s=n!==void 0?n:this._requireCtx(),r=createRootFrame(s,this._limits);return this._invokeInteractiveInternal(e,t,r)}_invokeInteractiveInternal(e,t,n){let s=this._prepareInvoke(e,t,n);if("success"in s)return De(s,this._isAsync);let{stored:r,childFrame:o,childScope:a}=s;if(this._beforeAction!==null){let u=this._beforeAction(e,t,o);if(u?.skip)return De(ae(u.data,o.counters),this._isAsync)}let c;if(r.compiled&&r.compiled.isInteractive)c=r.compiled.fn(o,o.scope,r.compiled.$);else {let u=this._interactiveExecutor;c=u(r.directives,o,this._handlersInteractive,this._directiveHooks,this._typeField,this._engineRef,this._limits.maxDirectives);}return Ue(c,e,t,o,this._afterAction,this._isAsync)}_executeDirectivesInteractive(e,t){if(!this._isInteractive||this._interactiveExecutor===null)throw new Error("runDirectivesInteractive: engine has no `interactive` config");return this._interactiveExecutor(e,t,this._handlersInteractive,this._directiveHooks,this._typeField,this._engineRef,this._limits.maxDirectives)}get compilationMode(){return this._mode}get directiveHookSlots(){return this._directiveAnalysis.filledNames}get asyncSlots(){return this._directiveAnalysis.asyncNames}compile(){if(this._requestedMode!=="interpret"){this._mode!=="jit"&&(this._mode="jit");for(let[e,t]of this._registry)t.compiled||(t.compiled=this._compileAction(e,t.directives));}}_invokeInternal(e,t,n){let s=this._prepareInvoke(e,t,n);if("success"in s)return s;let{stored:r,childFrame:o,childScope:a}=s;if(this._beforeAction!==null){let u=this._beforeAction(e,t,o);if(u?.skip)return ae(u.data,o.counters)}let c;if(r.compiled?c=r.compiled.fn(o,a,r.compiled.$):this._isAsync&&!this._miniGraph.isAsync(e)?(r.compiled=this._compileAction(e,r.directives),c=r.compiled.fn(o,a,r.compiled.$)):(c=this._directiveRunner(r.directives,o),this._maybeAutoPromote(r)),this._afterAction!==null){let u=this._afterAction(e,t,c,o);u!==void 0&&(c=u);}return c}async _invokeInternalAsync(e,t,n){let s=this._prepareInvoke(e,t,n);if("success"in s)return s;let{stored:r,childFrame:o,childScope:a}=s;if(this._beforeAction!==null){let u=this._beforeAction(e,t,o);if(u?.skip)return ae(u.data,o.counters)}let c;if(r.compiled?c=await r.compiled.fn(o,a,r.compiled.$):(c=await this._directiveRunner(r.directives,o),this._maybeAutoPromote(r)),this._afterAction!==null){let u=this._afterAction(e,t,c,o);u!==void 0&&(c=u);}return c}_prepareInvoke(e,t,n){let s=this._registry.get(e);if(!s)return we(e,n.counters);if(e.includes("/")&&!this._isAccessible(e,n))return Se(e,n.counters);if(n.depth>=n.limits.maxDepth)return Te(e,n.limits.maxDepth,n.counters);let r=Object.create(n.scope);t&&Object.assign(r,t);let o=n.child("action:"+e,0,e).withScope(r);return {stored:s,childFrame:o,childScope:r}}_maybeAutoPromote(e){this._requestedMode==="auto"&&++e.invokeCount>=this._threshold&&(e.compiled=this._compileAction(e.definition.id,e.directives),this._mode!=="jit"&&(this._mode="jit"));}_executeDirectives(e,t){return this._directiveExecutor(e,t,this._handlers,this._directiveHooks,this._typeField,this._engineRef,this._limits.maxDirectives)}async _executeDirectivesAsync(e,t){return this._directiveExecutor(e,t,this._handlers,this._directiveHooks,this._typeField,this._engineRef,this._limits.maxDirectives)}_compileAction(e,t){let n=this._miniGraph.isAsync(e),s=this._miniGraph.isInteractive(e),r=He(this._definitions,s,this._interactiveHandlerSet),{fn:o,isAsync:a,isInteractive:c}=me(t,this._directiveAnalysis,this._typeField,this._asyncHandlerSet,n,s,r),u=te(this._definitions,a,c),d={d:t,h:u,hooks:this._directiveHooks,engine:this._engineRef,runner:this._directiveRunner,runnerSync:this._directiveRunnerSync};return {fn:o,$:d,isAsync:a,isInteractive:c}}_isAccessible(e,t){let s="action:"+e.slice(0,e.lastIndexOf("/"));return t.path.includes(s)}_requireCtx(){if(this._ctx===void 0)throw new Error("No context set. Pass ctx to invoke(id, params, ctx), call setContext(ctx), or use context(ctx, fn).");return this._ctx}_validateInteractiveVariants(e){let t=[],n=[],s=new Set(e),r=new Set;for(let a of this._registeredIds){if(!this._miniGraph.isInteractive(a))continue;let c=this._registry.get(a);if(c===void 0)continue;let u=ke(c.directives,this._typeField,this._definitions,this._subDirectiveFieldsForGraph,this._interactiveHandlerSet,h=>this._miniGraph.isInteractive(h),isGeneratorFunction);if(u.size===0)continue;let d=s.has(a);for(let h of u){let f=`Action "${a}" is transitively interactive but handler "${h}" has no executeInteractive variant (and execute is not a generator function, and interactive flag is not set)`;d?(t.push({actionId:a,error:f,code:"MISSING_INTERACTIVE_VARIANT"}),r.add(a)):n.push({actionId:a,code:"MISSING_INTERACTIVE_VARIANT",message:f});}}if(r.size>0){for(let a of r)this._registry.delete(a),this._registeredIds.delete(a),this._miniGraph.remove(a);this._miniGraph.recompute();}return {validRegistered:e.filter(a=>!r.has(a)),errors:t,warnings:n}}_invalidateAndMaybeRecompile(){for(let e of this._registry.values())e.compiled=null;if(this._requestedMode==="jit")for(let[e,t]of this._registry)t.compiled=this._compileAction(e,t.directives);}};function At(i){return new Re(i)}export{N as RESERVED_TYPES,X as SimpleEmitter,me as buildActionExecutor,At as createActionEngine,oe as createDirectiveInterpreter,We as drainAsync,qe as drainSync,B as normalizeDirectives,Ye as replayResponder};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@statedelta-actions/actions",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "description": "Directive execution engine with JIT compilation and BailHook interception",
5
5
  "keywords": [
6
6
  "statedelta",