@kestra-io/ui-libs 0.0.187 → 0.0.188

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.
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const C=require("js-yaml"),s=require("yaml");function O(e,t=!0){if(e!==void 0)try{return C.load(e)}catch(n){if(t)throw n;return}}function j(e){if(e===void 0)return"";const t=structuredClone(e);return delete t.deleted,C.dump(w(t),{lineWidth:-1,noCompatMode:!0,quotingType:'"'})}const _=["id","type","namespace","description","revision","inputs","variables","tasks","errors","triggers","listeners","pluginDefaults"];function b(e){return Object.keys(e).sort((t,n)=>{const r=_.indexOf(t),i=_.indexOf(n),o=r>=0?r:Number.MAX_SAFE_INTEGER,c=i>=0?i:Number.MAX_SAFE_INTEGER;return o-c})}function q(e){const t=new s.YAMLMap;if(!s.isPair(e==null?void 0:e[0]))return t;for(const n of e)t.add(n);return t}function w(e){return e instanceof Array?e.map(t=>w(t)):typeof e=="string"||e instanceof String?e:e instanceof Object?b(e).reduce((t,n)=>(e[n]!==void 0&&(t[n]=w(e[n])),t),Object.create({})):e}function h({source:e,section:t}){const n=s.parseDocument(e),r=K({yamlDoc:n,section:t});return{yamlDoc:n,sectionNode:r}}function K({yamlDoc:e,section:t}){var r;const n=(r=e.contents)==null?void 0:r.items.find(i=>i.key.value===t);return n==null?void 0:n.value}function T({source:e,section:t,key:n,keyName:r}){r||(r="id");const{sectionNode:i}=h({source:e,section:t});if(!i)return;const o=D({yamlDoc:i,keyName:r,key:n});return o===void 0?void 0:new s.Document(o).toString(m)}function D({yamlDoc:e,keyName:t,key:n,callback:r}){function i(c){if(c){if(s.isMap(c)&&c.get("type")!==void 0&&n===c.get(t))return r?r(c):c;if(s.isSeq(c)||s.isMap(c))for(const[u,l]of c.items.entries()){const v=s.isMap(l)?i(l):i(l.value??void 0);if(v){if(r)s.isMap(c)&&s.isPair(l)?c.set(l.key,v):c.items[u]=v;else if(v)return v}}}}const o=i(e);if(o!==void 0)return r?new s.Document(o):new s.Document(o)}function B({source:e,section:t,keyName:n,key:r,newContent:i}){const{yamlDoc:o,sectionNode:c}=h({source:e,section:t}),u=o.createNode(s.parseDocument(i));if(c)return D({yamlDoc:c,keyName:n,key:r,callback(l){return W(l,u),u}}),o.toString(m)}function W(e,t){var n;for(const r of e.items)for(const i of t.items)if(r.key.value===i.key.value&&i.value&&i.value.comment===void 0){i.value.comment=(n=r.value)==null?void 0:n.comment;break}}function J({source:e,section:t,key1:n,key2:r,keyName:i}){i||(i="id");const{yamlDoc:o,sectionNode:c}=h({source:e,section:t});if(!c)return e;const u=D({yamlDoc:c,keyName:i,key:n}),l=D({yamlDoc:c,keyName:i,key:r});return!u||!l?e:(s.visit(o,{Pair(v,d){if(d.key.value==="dependsOn"&&d.value.items.map(a=>a.value).includes(n))throw{message:"dependency task",messageOptions:{taskId:r}}}}),D({yamlDoc:c,keyName:i,key:n,callback:()=>l}),D({yamlDoc:c,keyName:i,key:r,callback:()=>u}),o.toString(m))}function V({source:e,section:t,newBlock:n,refKey:r,position:i,parentKey:o,keyName:c,subBlockName:u}){var y,I,S,P;c||(c="id"),u||(u=t),i||(i="after");const{yamlDoc:l,sectionNode:v}=h({source:e,section:t}),d=l.createNode(s.parseDocument(n)),a=o&&v?(y=D({yamlDoc:v,keyName:c,key:o}))==null?void 0:y.contents:v;if(!a&&o)throw new Error(`Parent block with ID ${o} not found in ${t}`);if(!a||o&&!a.get(u)){const k=new s.YAMLSeq;k.items.push(d);const p=new s.Pair(new s.Scalar(u),k);if(!o)return(I=l.contents)==null||I.items.push(p),l.toString(m);if(a&&!a.get(u))return a.items.push(p),l.toString(m)}const f=r??(i==="after"?L({source:e,section:t,parentKey:o,keyName:c,subBlockName:u}):(P=(S=a.items)==null?void 0:S[0])==null?void 0:P.get(c));let g=!1;return s.visit(a,{Seq(k,p){for(const E of p.items)if(s.isMap(E)){if(g)return s.visit.BREAK;if(E.get(c)===f){const M=p.items.indexOf(E);i==="before"?M===0?p.items.unshift(d):p.items.splice(M,0,d):M===p.items.length-1?p.items.push(d):p.items.splice(M+1,0,d),g=!0}}}}),A(l).toString(m)}function F({source:e,section:t,key:n,keyName:r}){r||(r="id");const i=s.parseDocument(e);return s.visit(i,{Pair(o,c){c.key.value===t&&s.visit(c.value,{Map(u,l){if(l.get(r)===n)return s.visit.REMOVE}})}}),s.visit(i,{Pair(o,c){if(s.isSeq(c.value)&&c.value.items.length===0)return s.visit.REMOVE}}),i.toString(m)}function R(e,t,n,r,i){const{sectionNode:o}=h({source:e,section:t});if(!o)return!1;const c=D({yamlDoc:o,keyName:i,key:n});if(!c)return!1;let u=!1;return s.visit(c,{Map(l,v){if(v.get(i)===r)return u=!0,s.visit.BREAK}}),u}function N({source:e,sections:t,key1:n,key2:r,keyName:i}){return i||(i="id"),t.reduce((o,c)=>o||R(e,c,r,n,i)||R(e,c,n,r,i),!1)}function G(e,t,n){return e.replace(/^(id\s*:\s*(["']?))\S*/m,"$1"+t+"$2").replace(/^(namespace\s*:\s*(["']?))\S*/m,"$1"+n+"$2")}function z({source:e,section:t,newContent:n,keyName:r}){const{sectionNode:i}=h({source:e,section:t}),o=O(n);if(!i)return;let c=!1;return s.visit(i,{Map(u,l){if(l.get(r)===o[r])return c=!0,s.visit.BREAK}}),c?o[r]:void 0}function L({source:e,section:t,parentKey:n,keyName:r,subBlockName:i}){var c,u,l,v,d;if(r||(r="id"),i||(i=t),n){const{sectionNode:a}=h({source:e,section:t});if(!a)return;const f=D({yamlDoc:a,keyName:r,key:n});if(!((c=f==null?void 0:f.contents)!=null&&c.items))throw new Error(`Parent with ID ${n} not found`);const g=f.contents.items.find(y=>y.key.value===i);return!g||g.value&&"value"in g.value&&g.value.value===null||(u=g.value)==null?void 0:u.items[g.value.items.length-1].get(r)}const o=O(e);return(d=(v=o.tasks)==null?void 0:v[((l=o==null?void 0:o.tasks)==null?void 0:l.length)-1])==null?void 0:d.id}function H(e,t){var r;const n=s.parseDocument(e);if(!((r=n==null?void 0:n.contents)!=null&&r.items))return e;for(const i in t)n.contents.items.find(o=>o.key.value===i)?n.contents.items.find(o=>o.key.value===i).value=t[i]:n.contents.items.push(new s.Pair(new s.Scalar(i),t[i]));return A(n).toString(m)}const x=["tasks","triggers","errors","finally","afterExecution","pluginDefaults"],Y=["id","namespace","description","retry","labels","inputs","variables",...x,"taskDefaults","concurrency","outputs","disabled"];function X(e){return s.isSeq(e)||s.isMap(e)?e.items.length>0:!0}function A(e){var n,r;if(!((n=e==null?void 0:e.contents)!=null&&n.items))return e;const t=[];for(const i of Y){const o=(r=e.contents)==null?void 0:r.items.find(c=>c.key.value===i);o!=null&&o.value&&X(o.value)&&t.push(o)}return e.contents.items=t,e}function Q(e){const t=s.parseDocument(e);return A(t).toString(m)}function U(e){const t=s.parseDocument(e),n={};for(const r of t.contents.items)x.includes(r.key.value)||(n[r.key.value]=s.isMap(r.value)||s.isSeq(r.value)?r.value.toJSON():r.value.value);return n}function Z(e,t){const n=s.parseDocument(e);if(!n.contents.items)return e;const r=n.contents.items.find(i=>i.key.value===t);return r&&n.contents.items.splice(n.contents.items.indexOf(r),1),n.toString(m)}function ee(e){const{sectionNode:t}=h({source:e,section:"tasks"});return t?s.isSeq(t)&&t.items.length>0:!1}function te(e,t){return T({source:e,section:"pluginDefaults",key:t,keyName:"type"})}function ne(e,t,n){return B({source:e,section:"pluginDefaults",keyName:"type",key:t,newContent:n})}function re(e,t){return F({source:e,section:"pluginDefaults",key:t,keyName:"type"})}function ie(e,t,n){const r=s.parseDocument(e),i=r.createNode(s.parseDocument(t));let o=!1;return s.visit(r,{Map(c,u){var l,v,d;if(o)return s.visit.BREAK;if(u.get("id")===n){if(u.items.find(a=>a.key.value==="errors"))(d=(v=(l=u.items)==null?void 0:l.find(a=>a.key.value==="errors"))==null?void 0:v.value)==null||d.items.push(i);else{const a=new s.YAMLSeq;a.items.push(i);const f=new s.Pair(new s.Scalar("errors"),a);u.items.push(f)}return o=!0,u}}}),r.toString(m)}function oe(e,t,n=(i,o)=>!0,r=i=>!0){const i=s.parseDocument(e),o=[];return s.visit(i,{Map(c,u,l){var v,d,a;if(n(l.filter(f=>s.isPair(f)).map(f=>{var g;return(g=f==null?void 0:f.key)==null?void 0:g.value}).join("."))&&u.items){for(const f of u.items)if(((v=f==null?void 0:f.key)==null?void 0:v.value)===t){const g=((d=f==null?void 0:f.value)==null?void 0:d.value)??((a=f.value)==null?void 0:a.items);r(g)&&o.push({[t]:g,range:u.range})}}}}),o}function se(e,t=[]){return oe(e,"type",()=>!0,n=>t.some(r=>r===n))}function ce(e,t,n){const r=se(e,n),i=new s.LineCounter;s.parseDocument(e,{lineCounter:i});const o=i.lineStarts[t.lineNumber-1]+t.column;for(const c of r.reverse())if(o>=c.range[0])return c.type;return null}const m={lineWidth:0},$="([^:\\n]+): *",ue=new RegExp(`(( *)(?:${$})?)[^\\n]*?$`);function ae(e,t){if(t<2)return;const r=[...e.matchAll(new RegExp(`(?<! ) {${t-2}}(?! )${$}`,"g"))].pop();if(r!==void 0)return{key:r[1],valueStartIndex:r.index+r[0].length}}function le(e){const t=ue.exec(e);if(t===null)return;const[n,r,i]=[t[1],t[2],t[3]];return{indent:r.length,yamlKey:i,valueStartIndex:i===void 0?void 0:t.index+n.length}}function fe(e,t){var d;const n=e.substring(0,t),r=le(n);let{yamlKey:i}=r;const{indent:o}=r;let c;if(i===void 0){const a=ae(n,o);i=a==null?void 0:a.key,c=a==null?void 0:a.valueStartIndex}else c=n.lastIndexOf(i+":")+i.length+1;const u=s.parseDocument(e),l=[];return s.visit(u,{Pair(a,f,g){var y;if(((y=f.value)==null?void 0:y.range)!==void 0&&f.key.value===i){const I=e.substring(0,f.value.range[0]);l.push({parents:g.filter(S=>s.isMap(S)).map(S=>S.toJS(u)),key:f.key.value,value:f.value.toJS(u),range:[f.value.range[0]-(I.length-I.replaceAll(/\s*$/g,"").length),...f.value.range.slice(1)]})}}}),(d=l.filter(a=>a.range[0]<=c&&c<=a.range[2]).sort((a,f)=>f.range[0]-a.range[0]))==null?void 0:d[0]}function de(e){const t=s.parseDocument(e),n=[];return s.visit(t,{Map(r,i){var o,c;if(i.items){for(const u of i.items)if(((o=u==null?void 0:u.key)==null?void 0:o.value)==="charts"&&((c=u==null?void 0:u.value)!=null&&c.items))for(const l of u.value.items)n.push(l.toJSON())}}}),n}function ve(e,t){const n=s.parseDocument(e),r=new s.LineCounter;s.parseDocument(e,{lineCounter:r});const i=r.lineStarts[t.lineNumber-1]+t.column;let o;return s.visit(n,{Map(c,u){var l,v;if(u.items){for(const d of u.items)if(((l=d==null?void 0:d.key)==null?void 0:l.value)==="charts"&&(v=d==null?void 0:d.value)!=null&&v.items){for(const a of d.value.items)if(a.range[0]<=i&&a.range[1]>=i)return o=a,s.visit.BREAK}}}}),o?o.toJSON():null}exports.FLOW_SECTION_KEYS=x;exports.ORDERED_FLOW_ROOT_KEYS=Y;exports.checkBlockAlreadyExists=z;exports.cleanMetadata=Q;exports.deleteBlock=F;exports.deleteMetadata=Z;exports.deletePluginDefaults=re;exports.extractBlock=T;exports.extractPluginDefault=te;exports.flowHaveTasks=ee;exports.getAllCharts=de;exports.getChartAtPosition=ve;exports.getLastBlock=L;exports.getMetadata=U;exports.getTypeAtPosition=ce;exports.insertBlock=V;exports.insertErrorInFlowable=ie;exports.isParentChildrenRelation=N;exports.localizeElementAtIndex=fe;exports.pairsToMap=q;exports.parse=O;exports.replaceBlockInDocument=B;exports.replaceIdAndNamespace=G;exports.replacePluginDefaultsInDocument=ne;exports.sort=b;exports.stringify=j;exports.swapBlocks=J;exports.updateMetadata=H;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const C=require("js-yaml"),s=require("yaml");function x(e,t=!0){if(e!==void 0)try{return C.load(e)}catch(n){if(t)throw n;return}}function q(e){if(e===void 0)return"";const t=structuredClone(e);return delete t.deleted,C.dump(w(t),{lineWidth:-1,noCompatMode:!0,quotingType:'"'})}const _=["id","type","namespace","description","revision","inputs","variables","tasks","errors","triggers","listeners","pluginDefaults"];function b(e){return Object.keys(e).sort((t,n)=>{const r=_.indexOf(t),i=_.indexOf(n),o=r>=0?r:Number.MAX_SAFE_INTEGER,c=i>=0?i:Number.MAX_SAFE_INTEGER;return o-c})}function K(e){const t=new s.YAMLMap;if(!s.isPair(e==null?void 0:e[0]))return t;for(const n of e)t.add(n);return t}function w(e){return e instanceof Array?e.map(t=>w(t)):typeof e=="string"||e instanceof String?e:e instanceof Object?b(e).reduce((t,n)=>(e[n]!==void 0&&(t[n]=w(e[n])),t),Object.create({})):e}function h({source:e,section:t}){const n=s.parseDocument(e),r=W({yamlDoc:n,section:t});return{yamlDoc:n,sectionNode:r}}function W({yamlDoc:e,section:t}){var r;const n=(r=e.contents)==null?void 0:r.items.find(i=>i.key.value===t);return n==null?void 0:n.value}function T({source:e,section:t,key:n,keyName:r}){r||(r="id");const{sectionNode:i}=h({source:e,section:t});if(!i)return;const o=D({yamlDoc:i,keyName:r,key:n});return o===void 0?void 0:new s.Document(o).toString(g)}function D({yamlDoc:e,keyName:t,key:n,callback:r}){function i(c){if(c){if(s.isMap(c)&&c.get("type")!==void 0&&n===c.get(t))return r?r(c):c;if(s.isSeq(c)||s.isMap(c))for(const[u,l]of c.items.entries()){const v=s.isMap(l)?i(l):i(l.value??void 0);if(v){if(r)s.isMap(c)&&s.isPair(l)?c.set(l.key,v):c.items[u]=v;else if(v)return v}}}}const o=i(e);if(o!==void 0)return r?new s.Document(o):new s.Document(o)}function B({source:e,section:t,keyName:n,key:r,newContent:i}){const{yamlDoc:o,sectionNode:c}=h({source:e,section:t}),u=o.createNode(s.parseDocument(i));if(c)return D({yamlDoc:c,keyName:n,key:r,callback(l){return J(l,u),u}}),o.toString(g)}function J(e,t){var n;for(const r of e.items)for(const i of t.items)if(r.key.value===i.key.value&&i.value&&i.value.comment===void 0){i.value.comment=(n=r.value)==null?void 0:n.comment;break}}function V({source:e,section:t,key1:n,key2:r,keyName:i}){i||(i="id");const{yamlDoc:o,sectionNode:c}=h({source:e,section:t});if(!c)return e;const u=D({yamlDoc:c,keyName:i,key:n}),l=D({yamlDoc:c,keyName:i,key:r});return!u||!l?e:(s.visit(o,{Pair(v,d){if(d.key.value==="dependsOn"&&d.value.items.map(a=>a.value).includes(n))throw{message:"dependency task",messageOptions:{taskId:r}}}}),D({yamlDoc:c,keyName:i,key:n,callback:()=>l}),D({yamlDoc:c,keyName:i,key:r,callback:()=>u}),o.toString(g))}function N({source:e,section:t,newBlock:n,refKey:r,position:i,parentKey:o,keyName:c,subBlockName:u}){var y,M,S,P;c||(c="id"),u||(u=t),i||(i="after");const{yamlDoc:l,sectionNode:v}=h({source:e,section:t}),d=l.createNode(s.parseDocument(n)),a=o&&v?(y=D({yamlDoc:v,keyName:c,key:o}))==null?void 0:y.contents:v;if(!a&&o)throw new Error(`Parent block with ID ${o} not found in ${t}`);if(!a||o&&!a.get(u)){const k=new s.YAMLSeq;k.items.push(d);const p=new s.Pair(new s.Scalar(u),k);if(!o)return(M=l.contents)==null||M.items.push(p),l.toString(g);if(a&&!a.get(u))return a.items.push(p),l.toString(g)}const f=r??(i==="after"?L({source:e,section:t,parentKey:o,keyName:c,subBlockName:u}):(P=(S=a.items)==null?void 0:S[0])==null?void 0:P.get(c));let m=!1;return s.visit(a,{Seq(k,p){for(const E of p.items)if(s.isMap(E)){if(m)return s.visit.BREAK;if(E.get(c)===f){const I=p.items.indexOf(E);i==="before"?I===0?p.items.unshift(d):p.items.splice(I,0,d):I===p.items.length-1?p.items.push(d):p.items.splice(I+1,0,d),m=!0}}}}),A(l).toString(g)}function F({source:e,section:t,key:n,keyName:r}){r||(r="id");const i=s.parseDocument(e);return s.visit(i,{Pair(o,c){c.key.value===t&&s.visit(c.value,{Map(u,l){if(l.get(r)===n)return s.visit.REMOVE}})}}),s.visit(i,{Pair(o,c){if(s.isSeq(c.value)&&c.value.items.length===0)return s.visit.REMOVE}}),i.toString(g)}function R(e,t,n,r,i){const{sectionNode:o}=h({source:e,section:t});if(!o)return!1;const c=D({yamlDoc:o,keyName:i,key:n});if(!c)return!1;let u=!1;return s.visit(c,{Map(l,v){if(v.get(i)===r)return u=!0,s.visit.BREAK}}),u}function G({source:e,sections:t,key1:n,key2:r,keyName:i}){return i||(i="id"),t.reduce((o,c)=>o||R(e,c,r,n,i)||R(e,c,n,r,i),!1)}function z(e,t,n){return e.replace(/^(id\s*:\s*(["']?))\S*/m,"$1"+t+"$2").replace(/^(namespace\s*:\s*(["']?))\S*/m,"$1"+n+"$2")}function H({source:e,section:t,newContent:n,keyName:r}){const{sectionNode:i}=h({source:e,section:t}),o=x(n);if(!i)return;let c=!1;return s.visit(i,{Map(u,l){if(l.get(r)===o[r])return c=!0,s.visit.BREAK}}),c?o[r]:void 0}function L({source:e,section:t,parentKey:n,keyName:r,subBlockName:i}){var c,u,l,v,d;if(r||(r="id"),i||(i=t),n){const{sectionNode:a}=h({source:e,section:t});if(!a)return;const f=D({yamlDoc:a,keyName:r,key:n});if(!((c=f==null?void 0:f.contents)!=null&&c.items))throw new Error(`Parent with ID ${n} not found`);const m=f.contents.items.find(y=>y.key.value===i);return!m||m.value&&"value"in m.value&&m.value.value===null||(u=m.value)==null?void 0:u.items[m.value.items.length-1].get(r)}const o=x(e);return(d=(v=o.tasks)==null?void 0:v[((l=o==null?void 0:o.tasks)==null?void 0:l.length)-1])==null?void 0:d.id}function X(e,t){var r;const n=s.parseDocument(e);if(!((r=n==null?void 0:n.contents)!=null&&r.items))return e;for(const i in t)n.contents.items.find(o=>o.key.value===i)?n.contents.items.find(o=>o.key.value===i).value=t[i]:n.contents.items.push(new s.Pair(new s.Scalar(i),t[i]));return A(n).toString(g)}const O=["tasks","triggers","errors","finally","afterExecution","pluginDefaults"],Y=["id","namespace","description","retry","labels","inputs","variables",...O,"taskDefaults","concurrency","outputs","disabled"];function Q(e){return s.isSeq(e)||s.isMap(e)?e.items.length>0:!0}function A(e){var n,r;if(!((n=e==null?void 0:e.contents)!=null&&n.items))return e;const t=[];for(const i of Y){const o=(r=e.contents)==null?void 0:r.items.find(c=>c.key.value===i);o!=null&&o.value&&Q(o.value)&&t.push(o)}return e.contents.items=t,e}function U(e){const t=s.parseDocument(e);return A(t).toString(g)}function Z(e){const t=s.parseDocument(e),n={};for(const r of t.contents.items)O.includes(r.key.value)||(n[r.key.value]=s.isMap(r.value)||s.isSeq(r.value)?r.value.toJSON():r.value.value);return n}function ee(e,t){const n=s.parseDocument(e);if(!n.contents.items)return e;const r=n.contents.items.find(i=>i.key.value===t);return r&&n.contents.items.splice(n.contents.items.indexOf(r),1),n.toString(g)}function te(e){const{sectionNode:t}=h({source:e,section:"tasks"});return t?s.isSeq(t)&&t.items.length>0:!1}function ne(e,t){return T({source:e,section:"pluginDefaults",key:t,keyName:"type"})}function re(e,t,n){return B({source:e,section:"pluginDefaults",keyName:"type",key:t,newContent:n})}function ie(e,t){return F({source:e,section:"pluginDefaults",key:t,keyName:"type"})}function oe(e,t,n){const r=s.parseDocument(e),i=r.createNode(s.parseDocument(t));let o=!1;return s.visit(r,{Map(c,u){var l,v,d;if(o)return s.visit.BREAK;if(u.get("id")===n){if(u.items.find(a=>a.key.value==="errors"))(d=(v=(l=u.items)==null?void 0:l.find(a=>a.key.value==="errors"))==null?void 0:v.value)==null||d.items.push(i);else{const a=new s.YAMLSeq;a.items.push(i);const f=new s.Pair(new s.Scalar("errors"),a);u.items.push(f)}return o=!0,u}}}),r.toString(g)}function $(e,t,n=(i,o)=>!0,r=i=>!0){const i=s.parseDocument(e),o=[];return s.visit(i,{Map(c,u,l){var v,d,a;if(n(l.filter(f=>s.isPair(f)).map(f=>{var m;return(m=f==null?void 0:f.key)==null?void 0:m.value}).join("."))&&u.items){for(const f of u.items)if(((v=f==null?void 0:f.key)==null?void 0:v.value)===t){const m=((d=f==null?void 0:f.value)==null?void 0:d.value)??((a=f.value)==null?void 0:a.items);r(m)&&o.push({[t]:m,range:u.range})}}}}),o}function se(e,t=[]){return $(e,"type",()=>!0,n=>t.some(r=>r===n))}function ce(e,t,n){const r=se(e,n),i=new s.LineCounter;s.parseDocument(e,{lineCounter:i});const o=i.lineStarts[t.lineNumber-1]+t.column;for(const c of r.reverse())if(o>=c.range[0])return c.type;return null}const g={lineWidth:0},j="([^:\\n]+): *",ue=new RegExp(`(( *)(?:${j})?)[^\\n]*?$`);function ae(e,t){if(t<2)return;const r=[...e.matchAll(new RegExp(`(?<! ) {${t-2}}(?! )${j}`,"g"))].pop();if(r!==void 0)return{key:r[1],valueStartIndex:r.index+r[0].length}}function le(e){const t=ue.exec(e);if(t===null)return;const[n,r,i]=[t[1],t[2],t[3]];return{indent:r.length,yamlKey:i,valueStartIndex:i===void 0?void 0:t.index+n.length}}function fe(e,t){var d;const n=e.substring(0,t),r=le(n);let{yamlKey:i}=r;const{indent:o}=r;let c;if(i===void 0){const a=ae(n,o);i=a==null?void 0:a.key,c=a==null?void 0:a.valueStartIndex}else c=n.lastIndexOf(i+":")+i.length+1;const u=s.parseDocument(e),l=[];return s.visit(u,{Pair(a,f,m){var y;if(((y=f.value)==null?void 0:y.range)!==void 0&&f.key.value===i){const M=e.substring(0,f.value.range[0]);l.push({parents:m.filter(S=>s.isMap(S)).map(S=>S.toJS(u)),key:f.key.value,value:f.value.toJS(u),range:[f.value.range[0]-(M.length-M.replaceAll(/\s*$/g,"").length),...f.value.range.slice(1)]})}}}),(d=l.filter(a=>a.range[0]<=c&&c<=a.range[2]).sort((a,f)=>f.range[0]-a.range[0]))==null?void 0:d[0]}function de(e){const t=s.parseDocument(e),n=[];return s.visit(t,{Map(r,i){var o,c;if(i.items){for(const u of i.items)if(((o=u==null?void 0:u.key)==null?void 0:o.value)==="charts"&&((c=u==null?void 0:u.value)!=null&&c.items))for(const l of u.value.items)n.push(l.toJSON())}}}),n}function ve(e,t){const n=s.parseDocument(e),r=new s.LineCounter;s.parseDocument(e,{lineCounter:r});const i=r.lineStarts[t.lineNumber-1]+t.column;let o;return s.visit(n,{Map(c,u){var l,v;if(u.items){for(const d of u.items)if(((l=d==null?void 0:d.key)==null?void 0:l.value)==="charts"&&(v=d==null?void 0:d.value)!=null&&v.items){for(const a of d.value.items)if(a.range[0]<=i&&a.range[1]>=i)return o=a,s.visit.BREAK}}}}),o?o.toJSON():null}exports.FLOW_SECTION_KEYS=O;exports.ORDERED_FLOW_ROOT_KEYS=Y;exports.checkBlockAlreadyExists=H;exports.cleanMetadata=U;exports.deleteBlock=F;exports.deleteMetadata=ee;exports.deletePluginDefaults=ie;exports.extractBlock=T;exports.extractFieldFromMaps=$;exports.extractPluginDefault=ne;exports.flowHaveTasks=te;exports.getAllCharts=de;exports.getChartAtPosition=ve;exports.getLastBlock=L;exports.getMetadata=Z;exports.getTypeAtPosition=ce;exports.insertBlock=N;exports.insertErrorInFlowable=oe;exports.isParentChildrenRelation=G;exports.localizeElementAtIndex=fe;exports.pairsToMap=K;exports.parse=x;exports.replaceBlockInDocument=B;exports.replaceIdAndNamespace=z;exports.replacePluginDefaultsInDocument=re;exports.sort=b;exports.stringify=q;exports.swapBlocks=V;exports.updateMetadata=X;
2
2
  //# sourceMappingURL=kestra-flowyamlutils.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"kestra-flowyamlutils.cjs.js","sources":["../src/utils/FlowYamlUtils.ts"],"sourcesContent":["import {dump, load} from \"js-yaml\";\nimport {\n Scalar,\n YAMLMap,\n YAMLSeq,\n Document,\n Node,\n Pair,\n LineCounter,\n parseDocument,\n isPair,\n isMap,\n isSeq,\n visit,\n} from \"yaml\";\n\nexport function parse<T = any>(item?: string, throwIfError = true): T | undefined {\n if (item === undefined) return undefined;\n\n try {\n return load(item) as any;\n } catch (e) {\n if (throwIfError) throw e;\n return undefined;\n }\n}\n\nexport function stringify(item: any) {\n if (item === undefined) return \"\";\n\n const clonedValue = structuredClone(item);\n delete clonedValue.deleted;\n\n return dump(transform(clonedValue), {\n lineWidth: -1,\n noCompatMode: true,\n quotingType: \"\\\"\",\n });\n}\n\nconst SORT_FIELDS = [\n \"id\",\n \"type\",\n \"namespace\",\n \"description\",\n \"revision\",\n \"inputs\",\n \"variables\",\n \"tasks\",\n \"errors\",\n \"triggers\",\n \"listeners\",\n \"pluginDefaults\"\n];\n\nexport function sort(value: Record<string, any>) {\n return Object.keys(value)\n .sort((a, b) => {\n const aIndex = SORT_FIELDS.indexOf(a);\n const bIndex = SORT_FIELDS.indexOf(b);\n const aIndexProtected = aIndex >= 0 ? aIndex : Number.MAX_SAFE_INTEGER;\n const bIndexProtected = bIndex >= 0 ? bIndex : Number.MAX_SAFE_INTEGER;\n\n return aIndexProtected - bIndexProtected;\n });\n}\n\nexport function pairsToMap(pairs?: any[]) {\n const map = new YAMLMap();\n if (!isPair(pairs?.[0])) {\n return map;\n }\n\n for (const pair of pairs) {\n map.add(pair);\n };\n return map;\n}\n\nfunction transform(value: any): any {\n if (value instanceof Array) {\n return value.map((r) => {\n return transform(r);\n });\n } else if (typeof value === \"string\" || value instanceof String) {\n return value;\n } else if (value instanceof Object) {\n return sort(value).reduce((accumulator, r) => {\n if (value[r] !== undefined) {\n accumulator[r] = transform(value[r]);\n }\n\n return accumulator;\n }, Object.create({}));\n }\n\n return value;\n}\n\nfunction getSectionNodeAndDocumentFromSource({source, section}: {\n source: string,\n section: string\n}) {\n const yamlDoc = parseDocument(source) as Document<YAMLMap<{ value: string }, Node>>;\n const sectionNode = getSectionFromDocument({yamlDoc, section});\n return {yamlDoc, sectionNode};\n}\n\nfunction getSectionFromDocument({yamlDoc, section}:\n {\n yamlDoc: Document<YAMLMap<{ value: string }, Node>>,\n section: string\n }) {\n const sectionNode = yamlDoc.contents?.items.find(\n (e) => e.key.value === section\n ) as { value: YAMLSeq<YAMLMap<{ value: string }, Node>> } | undefined;\n return sectionNode?.value;\n}\n\nexport function extractBlock({source, section, key, keyName}: {\n source: string,\n section: string,\n key: string,\n keyName?: string\n}) {\n if (!keyName) {\n keyName = \"id\";\n }\n const {sectionNode} = getSectionNodeAndDocumentFromSource({source, section});\n if (!sectionNode) {\n return undefined;\n }\n\n const blockNode = extractBlockFromDocument({\n yamlDoc: sectionNode,\n keyName,\n key,\n });\n\n return blockNode === undefined\n ? undefined\n : new Document(blockNode).toString(TOSTRING_OPTIONS);\n}\n\nfunction extractBlockFromDocument({yamlDoc, keyName, key, callback}: {\n yamlDoc: Node,\n keyName: string,\n key: string,\n /**\n * Callback function to modify the found element\n * @param element The found YAMLMap element\n */\n callback?: (element: YAMLMap<{ value: string }, string | Node>) => void,\n}) {\n function find(element?: Node): Node | void {\n if (!element) {\n return;\n }\n if (isMap<{ value: string }, string | Node>(element)) {\n if (element.get(\"type\") !== undefined && key === element.get(keyName)) {\n return callback ? callback(element) : element;\n }\n }\n if (isSeq<{ value: Node }>(element)\n || isMap<{ value: string }, Node>(element)) {\n for (const [key, item] of element.items.entries()) {\n const result = isMap(item)\n ? find(item)\n : find(item.value ?? undefined)\n\n if (result) {\n if (callback) {\n if (isMap(element) && isPair<{ value: string }, Node>(item)) {\n // replace value in the map\n element.set(item.key, result);\n } else {\n element.items[key] = result as any;\n }\n } else if (result) {\n return result;\n }\n }\n }\n }\n }\n\n const result = find(yamlDoc);\n\n if (result === undefined) {\n return undefined;\n }\n\n if (callback) {\n return new Document(result);\n } else {\n return new Document(result);\n }\n}\n\nexport function replaceBlockInDocument({source, section, keyName, key, newContent}: {\n source: string,\n section: string,\n keyName: string,\n key: string,\n newContent: string\n}) {\n const {yamlDoc, sectionNode} = getSectionNodeAndDocumentFromSource({source, section});\n const newItem = yamlDoc.createNode(parseDocument(newContent));\n if (!sectionNode) {\n return undefined;\n }\n\n extractBlockFromDocument({\n yamlDoc: sectionNode, keyName, key, callback(oldValue) {\n restoreCommentsInBlock(\n oldValue as YAMLMap<{ value: string }, Node>,\n newItem as YAMLMap<{ value: string }, Node>\n );\n\n // replace the old value with the new value\n return newItem;\n }\n });\n\n return yamlDoc.toString(TOSTRING_OPTIONS);\n}\n\n/**\n * keep comments from old plugin property in the new\n * @param oldProperty \n * @param newProperty \n */\nfunction restoreCommentsInBlock(oldProperty: YAMLMap<{ value: string }, Node>, newProperty: YAMLMap<{ value: string }, Node>) {\n for (const oldProp of oldProperty.items) {\n for (const newProp of newProperty.items) {\n if (\n oldProp.key.value === newProp.key.value &&\n newProp.value &&\n newProp.value.comment === undefined\n ) {\n newProp.value.comment = oldProp.value?.comment;\n break;\n }\n }\n }\n}\n\nexport function swapBlocks({source, section, key1, key2, keyName}: {\n source: string,\n section: string,\n key1: string,\n key2: string,\n keyName?: string\n}) {\n if (!keyName) {\n keyName = \"id\";\n }\n const {yamlDoc, sectionNode} = getSectionNodeAndDocumentFromSource({source, section});\n if (!sectionNode) {\n return source;\n }\n const task1 = extractBlockFromDocument({yamlDoc: sectionNode, keyName, key: key1});\n const task2 = extractBlockFromDocument({yamlDoc: sectionNode, keyName, key: key2});\n\n if (!task1 || !task2) {\n return source;\n }\n\n visit(yamlDoc, {\n Pair(_, pair: any) {\n if (\n pair.key.value === \"dependsOn\" &&\n pair.value.items.map((e: any) => e.value).includes(key1)\n ) {\n throw {\n message: \"dependency task\",\n messageOptions: {taskId: key2},\n };\n }\n },\n });\n\n extractBlockFromDocument({yamlDoc: sectionNode, keyName, key: key1, callback: () => task2});\n extractBlockFromDocument({yamlDoc: sectionNode, keyName, key: key2, callback: () => task1});\n\n return yamlDoc.toString(TOSTRING_OPTIONS);\n}\n\nexport function insertBlock({source,\n section,\n newBlock,\n refKey,\n position,\n parentKey,\n keyName,\n subBlockName\n}: {\n source: string,\n section: string,\n newBlock: string,\n refKey?: string,\n position?: \"before\" | \"after\",\n parentKey?: string,\n keyName?: string,\n subBlockName?: string,\n}) {\n if (!keyName) {\n keyName = \"id\";\n }\n if (!subBlockName) {\n subBlockName = section;\n }\n if (!position) {\n position = \"after\";\n }\n const {yamlDoc, sectionNode} = getSectionNodeAndDocumentFromSource({source, section});\n const newPropNode = yamlDoc.createNode(parseDocument(newBlock));\n\n const parentNode: any = parentKey && sectionNode\n ? extractBlockFromDocument({yamlDoc: sectionNode, keyName, key: parentKey})?.contents\n : sectionNode;\n if (!parentNode && parentKey) {\n throw new Error(`Parent block with ID ${parentKey} not found in ${section}`);\n }\n\n // if the container (parentNode) is missing\n // - an entire section\n // - a tasks entry in a flowable task\n // - a condition section in a trigger\n if (!parentNode || (parentKey && !parentNode.get(subBlockName))) {\n const propertyList = new YAMLSeq();\n propertyList.items.push(newPropNode);\n const blocks = new Pair(new Scalar(subBlockName), propertyList);\n if (!parentKey) {\n yamlDoc.contents?.items.push(blocks);\n return yamlDoc.toString(TOSTRING_OPTIONS);\n }\n\n if (parentNode && !parentNode.get(subBlockName)) {\n parentNode.items.push(blocks);\n return yamlDoc.toString(TOSTRING_OPTIONS);\n }\n }\n\n const protectedReferenceKey = refKey\n ?? (position === \"after\"\n ? getLastBlock({source, section, parentKey: parentKey, keyName, subBlockName})\n : parentNode.items?.[0]?.get(keyName));\n\n let added = false;\n visit(parentNode, {\n Seq(_, seq) {\n for (const map of seq.items) {\n if (isMap(map)) {\n if (added) {\n return visit.BREAK;\n }\n if (map.get(keyName) === protectedReferenceKey) {\n const index = seq.items.indexOf(map);\n if (position === \"before\") {\n if (index === 0) {\n seq.items.unshift(newPropNode);\n } else {\n seq.items.splice(index, 0, newPropNode);\n }\n } else {\n if (index === seq.items.length - 1) {\n seq.items.push(newPropNode);\n } else {\n seq.items.splice(index + 1, 0, newPropNode);\n }\n }\n added = true;\n }\n }\n }\n },\n });\n return cleanMetadataDocument(yamlDoc).toString(TOSTRING_OPTIONS);\n}\n\nexport function deleteBlock({source, section, key, keyName}: {\n source: string,\n section: string,\n key: string,\n keyName?: string\n}) {\n if (!keyName) {\n keyName = \"id\";\n }\n const yamlDoc = parseDocument(source) as any;\n visit(yamlDoc, {\n Pair(_, pair: any) {\n if (pair.key.value === section) {\n visit(pair.value, {\n Map(_, map) {\n if (map.get(keyName) === key) {\n return visit.REMOVE;\n }\n },\n });\n }\n },\n });\n\n // delete empty sections\n visit(yamlDoc, {\n Pair(_, pair) {\n if (isSeq(pair.value) && pair.value.items.length === 0) {\n return visit.REMOVE;\n }\n },\n });\n return yamlDoc.toString(TOSTRING_OPTIONS);\n}\n\nfunction isChildrenOf(source: string, section: string, parentKey: string, childKey: string, keyName: string) {\n const {sectionNode} = getSectionNodeAndDocumentFromSource({source, section});\n if (!sectionNode) {\n return false;\n }\n\n const parentDoc = extractBlockFromDocument({yamlDoc: sectionNode, keyName, key: parentKey});\n\n if (!parentDoc) {\n return false;\n }\n\n let isChildrenOf = false;\n visit(parentDoc, {\n Map(_, map) {\n if (map.get(keyName) === childKey) {\n isChildrenOf = true;\n return visit.BREAK;\n }\n },\n });\n return isChildrenOf;\n}\n\nexport function isParentChildrenRelation({source, sections, key1, key2, keyName}:\n { source: string, sections: string[], key1: string, key2: string, keyName: string }) {\n if (!keyName) {\n keyName = \"id\";\n }\n return sections.reduce((acc, section) => (\n acc\n || isChildrenOf(source, section, key2, key1, keyName)\n || isChildrenOf(source, section, key1, key2, keyName)\n ), false);\n}\n\nexport function replaceIdAndNamespace(source: string, id: string, namespace: string) {\n return source\n .replace(/^(id\\s*:\\s*([\"']?))\\S*/m, \"$1\" + id + \"$2\")\n .replace(/^(namespace\\s*:\\s*([\"']?))\\S*/m, \"$1\" + namespace + \"$2\");\n}\n\nexport function checkBlockAlreadyExists({source, section, newContent, keyName}:\n { source: string, section: string, newContent: string, keyName: string }) {\n const {sectionNode} = getSectionNodeAndDocumentFromSource({source, section});\n const parsedProp = parse(newContent);\n if (!sectionNode) {\n return undefined\n }\n let propExists = false;\n visit(sectionNode, {\n Map(_, map) {\n if (map.get(keyName) === parsedProp[keyName]) {\n propExists = true;\n return visit.BREAK;\n }\n },\n });\n return propExists ? parsedProp[keyName] : undefined\n}\n\nexport function getLastBlock({source, section, parentKey, keyName, subBlockName}: {\n source: string,\n section: string,\n parentKey?: string,\n keyName?: string,\n subBlockName?: string\n}\n): string | undefined {\n if (!keyName) {\n keyName = \"id\";\n }\n if (!subBlockName) {\n subBlockName = section;\n }\n\n if (parentKey) {\n const {sectionNode} = getSectionNodeAndDocumentFromSource({source, section});\n if (!sectionNode) {\n return undefined\n }\n const parentProperty = extractBlockFromDocument({yamlDoc: sectionNode, keyName, key: parentKey}) as Document<YAMLMap<{\n value: string;\n }, YAMLSeq<YAMLMap>>>;\n\n if (!parentProperty?.contents?.items) {\n throw new Error(`Parent with ID ${parentKey} not found`);\n }\n\n const subBlocksNode = parentProperty.contents.items.find((pair: any) => pair.key.value === subBlockName);\n\n if (!subBlocksNode || (subBlocksNode.value && \"value\" in subBlocksNode.value && subBlocksNode.value.value === null)) {\n return undefined;\n }\n\n return subBlocksNode.value?.items[subBlocksNode.value.items.length - 1].get(keyName) as string;\n }\n\n const parsed = parse(source);\n\n return parsed.tasks?.[parsed?.tasks?.length - 1]?.id;\n}\n\nexport function updateMetadata(source: string, metadata: Record<string, any>) {\n // TODO: check how to keep comments\n const yamlDoc = parseDocument(source) as any;\n\n if (!yamlDoc?.contents?.items) {\n return source;\n }\n\n for (const property in metadata) {\n if (\n yamlDoc.contents.items.find((item: any) => item.key.value === property)\n ) {\n yamlDoc.contents.items.find(\n (item: any) => item.key.value === property\n ).value = metadata[property];\n } else {\n yamlDoc.contents.items.push(\n new Pair(new Scalar(property), metadata[property])\n );\n }\n }\n return cleanMetadataDocument(yamlDoc).toString(TOSTRING_OPTIONS);\n}\n\nexport const FLOW_SECTION_KEYS = [\n \"tasks\",\n \"triggers\",\n \"errors\",\n \"finally\",\n \"afterExecution\",\n \"pluginDefaults\",\n] as const\n\nexport type FlowSectionKeys = typeof FLOW_SECTION_KEYS[number];\n\nexport const ORDERED_FLOW_ROOT_KEYS = [\n \"id\",\n \"namespace\",\n \"description\",\n \"retry\",\n \"labels\",\n \"inputs\",\n \"variables\",\n ...FLOW_SECTION_KEYS,\n \"taskDefaults\",\n \"concurrency\",\n \"outputs\",\n \"disabled\",\n] as const\n\nexport type FlowRootKeys = typeof ORDERED_FLOW_ROOT_KEYS[number];\n\nfunction isItemTruthy(item: Node) {\n if (isSeq(item) || isMap(item)) {\n return item.items.length > 0\n } else {\n return true\n }\n}\n\nfunction cleanMetadataDocument(yamlDoc: Document<YAMLMap<{ value: string }, Node | YAMLSeq>>) {\n if (!yamlDoc?.contents?.items) {\n return yamlDoc;\n }\n const updatedItems = [];\n for (const prop of ORDERED_FLOW_ROOT_KEYS) {\n const item = yamlDoc.contents?.items.find(\n (e: any) => e.key.value === prop\n );\n if (item?.value && isItemTruthy(item.value)) {\n updatedItems.push(item);\n }\n }\n yamlDoc.contents.items = updatedItems;\n return yamlDoc;\n}\n\nexport function cleanMetadata(source: string) {\n const yamlDoc = parseDocument(source) as Document<YAMLMap<{ value: string }, Node>>;\n const cleanedYamlDoc = cleanMetadataDocument(yamlDoc);\n return cleanedYamlDoc.toString(TOSTRING_OPTIONS);\n}\n\nexport function getMetadata(source: string) {\n const yamlDoc = parseDocument(source) as any;\n const metadata: Record<string, any> = {};\n for (const item of yamlDoc.contents.items) {\n if (!FLOW_SECTION_KEYS.includes(item.key.value)) {\n metadata[item.key.value] =\n isMap(item.value) || isSeq(item.value)\n ? item.value.toJSON()\n : item.value.value;\n }\n }\n return metadata;\n}\n\nexport function deleteMetadata(source: any, metadata: any) {\n const yamlDoc = parseDocument(source) as any;\n\n if (!yamlDoc.contents.items) {\n return source;\n }\n\n const item = yamlDoc.contents.items.find((e: any) => e.key.value === metadata);\n if (item) {\n yamlDoc.contents.items.splice(yamlDoc.contents.items.indexOf(item), 1);\n }\n\n return yamlDoc.toString(TOSTRING_OPTIONS);\n}\n\nexport function flowHaveTasks(source: string) {\n const {sectionNode} = getSectionNodeAndDocumentFromSource({source, section: \"tasks\"});\n if (!sectionNode) {\n return false;\n }\n return isSeq(sectionNode) && sectionNode.items.length > 0;\n}\n\nexport function extractPluginDefault(source: string, pluginType: string) {\n return extractBlock({source, section: \"pluginDefaults\", key: pluginType, keyName: \"type\"});\n}\n\nexport function replacePluginDefaultsInDocument(source: string, pluginType: string, newContent: string) {\n return replaceBlockInDocument({source, section: \"pluginDefaults\", keyName: \"type\", key: pluginType, newContent});\n}\n\nexport function deletePluginDefaults(source: string, pluginType: string) {\n return deleteBlock({source, section: \"pluginDefaults\", key: pluginType, keyName: \"type\"});\n}\n\nexport function insertErrorInFlowable(source: string, errorTask: string, flowableTask: string) {\n const yamlDoc = parseDocument(source) as any;\n const newErrorNode = yamlDoc.createNode(parseDocument(errorTask));\n let added = false;\n visit(yamlDoc, {\n Map(_, map) {\n if (added) {\n return visit.BREAK;\n }\n if (map.get(\"id\") === flowableTask) {\n if (map.items.find((item: any) => item.key.value === \"errors\")) {\n (\n map.items?.find((item: any) => item.key.value === \"errors\")\n ?.value as any\n )?.items.push(newErrorNode);\n } else {\n const errorsSeq = new YAMLSeq();\n errorsSeq.items.push(newErrorNode);\n const errors = new Pair(new Scalar(\"errors\"), errorsSeq);\n map.items.push(errors);\n }\n added = true;\n return map;\n }\n },\n });\n return yamlDoc.toString(TOSTRING_OPTIONS);\n}\n\n/**\n * Specify a source yaml doc, the field to extract recursively in every map of the doc and optionally \n * a predicate to define which paths should be taken into account `parentPathPredicate` \n * will take a single argument which is the path of each parent property starting from the root doc (joined with \".\")\n * \"my.parent.task\" will mean that the field was retrieved in my -> parent -> task path.\n */\nfunction extractFieldFromMaps<T extends string>(\n source: string,\n fieldName: T,\n parentPathPredicate = (_: any, __?: any) => true,\n valuePredicate = (_: any) => true\n): any[] {\n const yamlDoc = parseDocument(source) as any;\n const maps: any[] = [];\n visit(yamlDoc, {\n Map(_, map, parent) {\n if (\n parentPathPredicate(\n parent\n .filter((p) => isPair(p))\n .map((p: any) => p?.key?.value)\n .join(\".\")\n ) &&\n map.items\n ) {\n for (const item of map.items as any[]) {\n if (item?.key?.value === fieldName) {\n\n const fieldValue = item?.value?.value ?? item.value?.items;\n if (valuePredicate(fieldValue)) {\n maps.push({\n [fieldName]: fieldValue,\n range: map.range,\n });\n }\n }\n }\n }\n },\n });\n return maps;\n}\n\nfunction extractAllTypes(source: string, validTypes: string[] = []): {\n type: string;\n range: [number, number, number]\n}[] {\n return extractFieldFromMaps(source, \"type\", () => true, (value) =>\n validTypes.some((t) => t === value)\n );\n}\n\n\n/**\n * Get task type at cursor position.\n * Useful to display/update the live docs\n */\nexport function getTypeAtPosition(\n source: string,\n position: { lineNumber: number; column: number },\n validTypes: any\n) {\n const types = extractAllTypes(source, validTypes);\n\n const lineCounter = new LineCounter();\n parseDocument(source, {lineCounter});\n const cursorIndex =\n lineCounter.lineStarts[position.lineNumber - 1] + position.column;\n\n for (const type of types.reverse()) {\n if (cursorIndex >= type.range[0]) {\n return type.type;\n }\n }\n return null;\n}\n\nconst TOSTRING_OPTIONS = {lineWidth: 0};\n\nconst yamlKeyCapture = \"([^:\\\\n]+): *\";\nconst indentAndYamlKeyCapture = new RegExp(\n `(( *)(?:${yamlKeyCapture})?)[^\\\\n]*?$`\n);\n\nfunction getParentKeyByChildIndent(\n stringToSearch: string,\n indent: number\n): { key: string; valueStartIndex: number } | undefined {\n if (indent < 2) {\n return undefined;\n }\n\n const matches = stringToSearch.matchAll(\n new RegExp(`(?<! ) {${indent - 2}}(?! )${yamlKeyCapture}`, \"g\")\n );\n const lastMatch = [...matches].pop();\n if (lastMatch === undefined) {\n return undefined;\n }\n return {\n key: lastMatch[1],\n valueStartIndex: lastMatch.index + lastMatch[0].length,\n };\n}\n\nfunction extractIndentAndMaybeYamlKey(stringToTest: string): {\n indent: number;\n yamlKey: string | undefined;\n valueStartIndex: number | undefined;\n} | undefined {\n const exec = indentAndYamlKeyCapture.exec(stringToTest);\n if (exec === null) {\n return undefined;\n }\n\n const [stringBeforeValue, indent, yamlKey]: [\n string,\n string,\n string | undefined\n ] = [exec[1], exec[2], exec[3]];\n return {\n indent: indent.length,\n yamlKey,\n valueStartIndex:\n yamlKey === undefined\n ? undefined\n : exec.index + stringBeforeValue.length,\n };\n}\n\nexport type YamlElement = {\n key?: string;\n value: Record<string, any>;\n parents: Record<string, any>[];\n range?: [number, number, number];\n};\n\nexport function localizeElementAtIndex(source: string, indexInSource: number): YamlElement {\n const tillCursor = source.substring(0, indexInSource);\n\n const indentAndYamlKey: any = extractIndentAndMaybeYamlKey(tillCursor);\n let {yamlKey} = indentAndYamlKey;\n const {indent} = indentAndYamlKey;\n // We search in previous keys to find the parent key\n let valueStartIndex;\n if (yamlKey === undefined) {\n const parentKeyExtract = getParentKeyByChildIndent(\n tillCursor,\n indent\n );\n yamlKey = parentKeyExtract?.key;\n valueStartIndex = parentKeyExtract?.valueStartIndex;\n } else {\n valueStartIndex =\n tillCursor.lastIndexOf(yamlKey + \":\") + yamlKey.length + 1;\n }\n\n const yamlDoc = parseDocument(source) as any;\n const elements: any = [];\n\n visit(yamlDoc, {\n Pair(_: any, pair: any, parents: readonly any[]) {\n if (pair.value?.range !== undefined && pair.key.value === yamlKey) {\n const beforeElement = source.substring(0, pair.value.range[0]);\n elements.push({\n parents: parents\n .filter((p) => isMap(p))\n .map((p) => p.toJS(yamlDoc)),\n key: pair.key.value,\n value: pair.value.toJS(yamlDoc),\n range: [\n pair.value.range[0] -\n (beforeElement.length -\n beforeElement.replaceAll(/\\s*$/g, \"\").length),\n ...pair.value.range.slice(1),\n ],\n });\n }\n },\n });\n\n const filter = elements.filter(\n (map: any) =>\n map.range[0] <= valueStartIndex && valueStartIndex <= map.range[2]\n );\n return filter.sort((a: any, b: any) => b.range[0] - a.range[0])?.[0];\n}\n\n// CHARTS for dashboard\n\nexport function getAllCharts(source: string) {\n const yamlDoc = parseDocument(source) as any;\n const charts: string[] = [];\n\n visit(yamlDoc, {\n Map(_, map) {\n if (map.items) {\n for (const item of map.items as any[]) {\n if (item?.key?.value === \"charts\" && item?.value?.items) {\n for (const chartItem of item.value.items) {\n charts.push(chartItem.toJSON());\n }\n }\n }\n }\n },\n });\n\n return charts;\n}\n\nexport function getChartAtPosition(source: string, position: { lineNumber: number; column: number }) {\n const yamlDoc = parseDocument(source) as any;\n const lineCounter = new LineCounter();\n parseDocument(source, {lineCounter});\n const cursorIndex =\n lineCounter.lineStarts[position.lineNumber - 1] + position.column;\n\n let chart: any;\n visit(yamlDoc, {\n Map(_, map) {\n if (map.items) {\n for (const item of map.items as any[]) {\n if (item?.key?.value === \"charts\") {\n if (item?.value?.items) {\n for (const chartItem of item.value.items) {\n if (\n chartItem.range[0] <= cursorIndex &&\n chartItem.range[1] >= cursorIndex\n ) {\n chart = chartItem;\n return visit.BREAK;\n }\n }\n }\n }\n }\n }\n },\n });\n\n return chart ? chart.toJSON() : null;\n}"],"names":["parse","item","throwIfError","load","e","stringify","clonedValue","dump","transform","SORT_FIELDS","sort","value","a","b","aIndex","bIndex","aIndexProtected","bIndexProtected","pairsToMap","pairs","map","YAMLMap","isPair","pair","r","accumulator","getSectionNodeAndDocumentFromSource","source","section","yamlDoc","parseDocument","sectionNode","getSectionFromDocument","_a","extractBlock","key","keyName","blockNode","extractBlockFromDocument","Document","TOSTRING_OPTIONS","callback","find","element","isMap","isSeq","result","replaceBlockInDocument","newContent","newItem","oldValue","restoreCommentsInBlock","oldProperty","newProperty","oldProp","newProp","swapBlocks","key1","key2","task1","task2","visit","_","insertBlock","newBlock","refKey","position","parentKey","subBlockName","newPropNode","parentNode","propertyList","YAMLSeq","blocks","Pair","Scalar","_b","protectedReferenceKey","getLastBlock","_d","_c","added","seq","index","cleanMetadataDocument","deleteBlock","isChildrenOf","childKey","parentDoc","isParentChildrenRelation","sections","acc","replaceIdAndNamespace","id","namespace","checkBlockAlreadyExists","parsedProp","propExists","parentProperty","subBlocksNode","parsed","_e","updateMetadata","metadata","property","FLOW_SECTION_KEYS","ORDERED_FLOW_ROOT_KEYS","isItemTruthy","updatedItems","prop","cleanMetadata","getMetadata","deleteMetadata","flowHaveTasks","extractPluginDefault","pluginType","replacePluginDefaultsInDocument","deletePluginDefaults","insertErrorInFlowable","errorTask","flowableTask","newErrorNode","errorsSeq","errors","extractFieldFromMaps","fieldName","parentPathPredicate","__","valuePredicate","maps","parent","p","fieldValue","extractAllTypes","validTypes","t","getTypeAtPosition","types","lineCounter","LineCounter","cursorIndex","type","yamlKeyCapture","indentAndYamlKeyCapture","getParentKeyByChildIndent","stringToSearch","indent","lastMatch","extractIndentAndMaybeYamlKey","stringToTest","exec","stringBeforeValue","yamlKey","localizeElementAtIndex","indexInSource","tillCursor","indentAndYamlKey","valueStartIndex","parentKeyExtract","elements","parents","beforeElement","getAllCharts","charts","chartItem","getChartAtPosition","chart"],"mappings":"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"}
1
+ {"version":3,"file":"kestra-flowyamlutils.cjs.js","sources":["../src/utils/FlowYamlUtils.ts"],"sourcesContent":["import {dump, load} from \"js-yaml\";\nimport {\n Scalar,\n YAMLMap,\n YAMLSeq,\n Document,\n Node,\n Pair,\n LineCounter,\n parseDocument,\n isPair,\n isMap,\n isSeq,\n visit,\n} from \"yaml\";\n\nexport function parse<T = any>(item?: string, throwIfError = true): T | undefined {\n if (item === undefined) return undefined;\n\n try {\n return load(item) as any;\n } catch (e) {\n if (throwIfError) throw e;\n return undefined;\n }\n}\n\nexport function stringify(item: any) {\n if (item === undefined) return \"\";\n\n const clonedValue = structuredClone(item);\n delete clonedValue.deleted;\n\n return dump(transform(clonedValue), {\n lineWidth: -1,\n noCompatMode: true,\n quotingType: \"\\\"\",\n });\n}\n\nconst SORT_FIELDS = [\n \"id\",\n \"type\",\n \"namespace\",\n \"description\",\n \"revision\",\n \"inputs\",\n \"variables\",\n \"tasks\",\n \"errors\",\n \"triggers\",\n \"listeners\",\n \"pluginDefaults\"\n];\n\nexport function sort(value: Record<string, any>) {\n return Object.keys(value)\n .sort((a, b) => {\n const aIndex = SORT_FIELDS.indexOf(a);\n const bIndex = SORT_FIELDS.indexOf(b);\n const aIndexProtected = aIndex >= 0 ? aIndex : Number.MAX_SAFE_INTEGER;\n const bIndexProtected = bIndex >= 0 ? bIndex : Number.MAX_SAFE_INTEGER;\n\n return aIndexProtected - bIndexProtected;\n });\n}\n\nexport function pairsToMap(pairs?: any[]) {\n const map = new YAMLMap();\n if (!isPair(pairs?.[0])) {\n return map;\n }\n\n for (const pair of pairs) {\n map.add(pair);\n };\n return map;\n}\n\nfunction transform(value: any): any {\n if (value instanceof Array) {\n return value.map((r) => {\n return transform(r);\n });\n } else if (typeof value === \"string\" || value instanceof String) {\n return value;\n } else if (value instanceof Object) {\n return sort(value).reduce((accumulator, r) => {\n if (value[r] !== undefined) {\n accumulator[r] = transform(value[r]);\n }\n\n return accumulator;\n }, Object.create({}));\n }\n\n return value;\n}\n\nfunction getSectionNodeAndDocumentFromSource({source, section}: {\n source: string,\n section: string\n}) {\n const yamlDoc = parseDocument(source) as Document<YAMLMap<{ value: string }, Node>>;\n const sectionNode = getSectionFromDocument({yamlDoc, section});\n return {yamlDoc, sectionNode};\n}\n\nfunction getSectionFromDocument({yamlDoc, section}:\n {\n yamlDoc: Document<YAMLMap<{ value: string }, Node>>,\n section: string\n }) {\n const sectionNode = yamlDoc.contents?.items.find(\n (e) => e.key.value === section\n ) as { value: YAMLSeq<YAMLMap<{ value: string }, Node>> } | undefined;\n return sectionNode?.value;\n}\n\nexport function extractBlock({source, section, key, keyName}: {\n source: string,\n section: string,\n key: string,\n keyName?: string\n}) {\n if (!keyName) {\n keyName = \"id\";\n }\n const {sectionNode} = getSectionNodeAndDocumentFromSource({source, section});\n if (!sectionNode) {\n return undefined;\n }\n\n const blockNode = extractBlockFromDocument({\n yamlDoc: sectionNode,\n keyName,\n key,\n });\n\n return blockNode === undefined\n ? undefined\n : new Document(blockNode).toString(TOSTRING_OPTIONS);\n}\n\nfunction extractBlockFromDocument({yamlDoc, keyName, key, callback}: {\n yamlDoc: Node,\n keyName: string,\n key: string,\n /**\n * Callback function to modify the found element\n * @param element The found YAMLMap element\n */\n callback?: (element: YAMLMap<{ value: string }, string | Node>) => void,\n}) {\n function find(element?: Node): Node | void {\n if (!element) {\n return;\n }\n if (isMap<{ value: string }, string | Node>(element)) {\n if (element.get(\"type\") !== undefined && key === element.get(keyName)) {\n return callback ? callback(element) : element;\n }\n }\n if (isSeq<{ value: Node }>(element)\n || isMap<{ value: string }, Node>(element)) {\n for (const [key, item] of element.items.entries()) {\n const result = isMap(item)\n ? find(item)\n : find(item.value ?? undefined)\n\n if (result) {\n if (callback) {\n if (isMap(element) && isPair<{ value: string }, Node>(item)) {\n // replace value in the map\n element.set(item.key, result);\n } else {\n element.items[key] = result as any;\n }\n } else if (result) {\n return result;\n }\n }\n }\n }\n }\n\n const result = find(yamlDoc);\n\n if (result === undefined) {\n return undefined;\n }\n\n if (callback) {\n return new Document(result);\n } else {\n return new Document(result);\n }\n}\n\nexport function replaceBlockInDocument({source, section, keyName, key, newContent}: {\n source: string,\n section: string,\n keyName: string,\n key: string,\n newContent: string\n}) {\n const {yamlDoc, sectionNode} = getSectionNodeAndDocumentFromSource({source, section});\n const newItem = yamlDoc.createNode(parseDocument(newContent));\n if (!sectionNode) {\n return undefined;\n }\n\n extractBlockFromDocument({\n yamlDoc: sectionNode, keyName, key, callback(oldValue) {\n restoreCommentsInBlock(\n oldValue as YAMLMap<{ value: string }, Node>,\n newItem as YAMLMap<{ value: string }, Node>\n );\n\n // replace the old value with the new value\n return newItem;\n }\n });\n\n return yamlDoc.toString(TOSTRING_OPTIONS);\n}\n\n/**\n * keep comments from old plugin property in the new\n * @param oldProperty \n * @param newProperty \n */\nfunction restoreCommentsInBlock(oldProperty: YAMLMap<{ value: string }, Node>, newProperty: YAMLMap<{ value: string }, Node>) {\n for (const oldProp of oldProperty.items) {\n for (const newProp of newProperty.items) {\n if (\n oldProp.key.value === newProp.key.value &&\n newProp.value &&\n newProp.value.comment === undefined\n ) {\n newProp.value.comment = oldProp.value?.comment;\n break;\n }\n }\n }\n}\n\nexport function swapBlocks({source, section, key1, key2, keyName}: {\n source: string,\n section: string,\n key1: string,\n key2: string,\n keyName?: string\n}) {\n if (!keyName) {\n keyName = \"id\";\n }\n const {yamlDoc, sectionNode} = getSectionNodeAndDocumentFromSource({source, section});\n if (!sectionNode) {\n return source;\n }\n const task1 = extractBlockFromDocument({yamlDoc: sectionNode, keyName, key: key1});\n const task2 = extractBlockFromDocument({yamlDoc: sectionNode, keyName, key: key2});\n\n if (!task1 || !task2) {\n return source;\n }\n\n visit(yamlDoc, {\n Pair(_, pair: any) {\n if (\n pair.key.value === \"dependsOn\" &&\n pair.value.items.map((e: any) => e.value).includes(key1)\n ) {\n throw {\n message: \"dependency task\",\n messageOptions: {taskId: key2},\n };\n }\n },\n });\n\n extractBlockFromDocument({yamlDoc: sectionNode, keyName, key: key1, callback: () => task2});\n extractBlockFromDocument({yamlDoc: sectionNode, keyName, key: key2, callback: () => task1});\n\n return yamlDoc.toString(TOSTRING_OPTIONS);\n}\n\nexport function insertBlock({source,\n section,\n newBlock,\n refKey,\n position,\n parentKey,\n keyName,\n subBlockName\n}: {\n source: string,\n section: string,\n newBlock: string,\n refKey?: string,\n position?: \"before\" | \"after\",\n parentKey?: string,\n keyName?: string,\n subBlockName?: string,\n}) {\n if (!keyName) {\n keyName = \"id\";\n }\n if (!subBlockName) {\n subBlockName = section;\n }\n if (!position) {\n position = \"after\";\n }\n const {yamlDoc, sectionNode} = getSectionNodeAndDocumentFromSource({source, section});\n const newPropNode = yamlDoc.createNode(parseDocument(newBlock));\n\n const parentNode: any = parentKey && sectionNode\n ? extractBlockFromDocument({yamlDoc: sectionNode, keyName, key: parentKey})?.contents\n : sectionNode;\n if (!parentNode && parentKey) {\n throw new Error(`Parent block with ID ${parentKey} not found in ${section}`);\n }\n\n // if the container (parentNode) is missing\n // - an entire section\n // - a tasks entry in a flowable task\n // - a condition section in a trigger\n if (!parentNode || (parentKey && !parentNode.get(subBlockName))) {\n const propertyList = new YAMLSeq();\n propertyList.items.push(newPropNode);\n const blocks = new Pair(new Scalar(subBlockName), propertyList);\n if (!parentKey) {\n yamlDoc.contents?.items.push(blocks);\n return yamlDoc.toString(TOSTRING_OPTIONS);\n }\n\n if (parentNode && !parentNode.get(subBlockName)) {\n parentNode.items.push(blocks);\n return yamlDoc.toString(TOSTRING_OPTIONS);\n }\n }\n\n const protectedReferenceKey = refKey\n ?? (position === \"after\"\n ? getLastBlock({source, section, parentKey: parentKey, keyName, subBlockName})\n : parentNode.items?.[0]?.get(keyName));\n\n let added = false;\n visit(parentNode, {\n Seq(_, seq) {\n for (const map of seq.items) {\n if (isMap(map)) {\n if (added) {\n return visit.BREAK;\n }\n if (map.get(keyName) === protectedReferenceKey) {\n const index = seq.items.indexOf(map);\n if (position === \"before\") {\n if (index === 0) {\n seq.items.unshift(newPropNode);\n } else {\n seq.items.splice(index, 0, newPropNode);\n }\n } else {\n if (index === seq.items.length - 1) {\n seq.items.push(newPropNode);\n } else {\n seq.items.splice(index + 1, 0, newPropNode);\n }\n }\n added = true;\n }\n }\n }\n },\n });\n return cleanMetadataDocument(yamlDoc).toString(TOSTRING_OPTIONS);\n}\n\nexport function deleteBlock({source, section, key, keyName}: {\n source: string,\n section: string,\n key: string,\n keyName?: string\n}) {\n if (!keyName) {\n keyName = \"id\";\n }\n const yamlDoc = parseDocument(source) as any;\n visit(yamlDoc, {\n Pair(_, pair: any) {\n if (pair.key.value === section) {\n visit(pair.value, {\n Map(_, map) {\n if (map.get(keyName) === key) {\n return visit.REMOVE;\n }\n },\n });\n }\n },\n });\n\n // delete empty sections\n visit(yamlDoc, {\n Pair(_, pair) {\n if (isSeq(pair.value) && pair.value.items.length === 0) {\n return visit.REMOVE;\n }\n },\n });\n return yamlDoc.toString(TOSTRING_OPTIONS);\n}\n\nfunction isChildrenOf(source: string, section: string, parentKey: string, childKey: string, keyName: string) {\n const {sectionNode} = getSectionNodeAndDocumentFromSource({source, section});\n if (!sectionNode) {\n return false;\n }\n\n const parentDoc = extractBlockFromDocument({yamlDoc: sectionNode, keyName, key: parentKey});\n\n if (!parentDoc) {\n return false;\n }\n\n let isChildrenOf = false;\n visit(parentDoc, {\n Map(_, map) {\n if (map.get(keyName) === childKey) {\n isChildrenOf = true;\n return visit.BREAK;\n }\n },\n });\n return isChildrenOf;\n}\n\nexport function isParentChildrenRelation({source, sections, key1, key2, keyName}:\n { source: string, sections: string[], key1: string, key2: string, keyName: string }) {\n if (!keyName) {\n keyName = \"id\";\n }\n return sections.reduce((acc, section) => (\n acc\n || isChildrenOf(source, section, key2, key1, keyName)\n || isChildrenOf(source, section, key1, key2, keyName)\n ), false);\n}\n\nexport function replaceIdAndNamespace(source: string, id: string, namespace: string) {\n return source\n .replace(/^(id\\s*:\\s*([\"']?))\\S*/m, \"$1\" + id + \"$2\")\n .replace(/^(namespace\\s*:\\s*([\"']?))\\S*/m, \"$1\" + namespace + \"$2\");\n}\n\nexport function checkBlockAlreadyExists({source, section, newContent, keyName}:\n { source: string, section: string, newContent: string, keyName: string }) {\n const {sectionNode} = getSectionNodeAndDocumentFromSource({source, section});\n const parsedProp = parse(newContent);\n if (!sectionNode) {\n return undefined\n }\n let propExists = false;\n visit(sectionNode, {\n Map(_, map) {\n if (map.get(keyName) === parsedProp[keyName]) {\n propExists = true;\n return visit.BREAK;\n }\n },\n });\n return propExists ? parsedProp[keyName] : undefined\n}\n\nexport function getLastBlock({source, section, parentKey, keyName, subBlockName}: {\n source: string,\n section: string,\n parentKey?: string,\n keyName?: string,\n subBlockName?: string\n}\n): string | undefined {\n if (!keyName) {\n keyName = \"id\";\n }\n if (!subBlockName) {\n subBlockName = section;\n }\n\n if (parentKey) {\n const {sectionNode} = getSectionNodeAndDocumentFromSource({source, section});\n if (!sectionNode) {\n return undefined\n }\n const parentProperty = extractBlockFromDocument({yamlDoc: sectionNode, keyName, key: parentKey}) as Document<YAMLMap<{\n value: string;\n }, YAMLSeq<YAMLMap>>>;\n\n if (!parentProperty?.contents?.items) {\n throw new Error(`Parent with ID ${parentKey} not found`);\n }\n\n const subBlocksNode = parentProperty.contents.items.find((pair: any) => pair.key.value === subBlockName);\n\n if (!subBlocksNode || (subBlocksNode.value && \"value\" in subBlocksNode.value && subBlocksNode.value.value === null)) {\n return undefined;\n }\n\n return subBlocksNode.value?.items[subBlocksNode.value.items.length - 1].get(keyName) as string;\n }\n\n const parsed = parse(source);\n\n return parsed.tasks?.[parsed?.tasks?.length - 1]?.id;\n}\n\nexport function updateMetadata(source: string, metadata: Record<string, any>) {\n // TODO: check how to keep comments\n const yamlDoc = parseDocument(source) as any;\n\n if (!yamlDoc?.contents?.items) {\n return source;\n }\n\n for (const property in metadata) {\n if (\n yamlDoc.contents.items.find((item: any) => item.key.value === property)\n ) {\n yamlDoc.contents.items.find(\n (item: any) => item.key.value === property\n ).value = metadata[property];\n } else {\n yamlDoc.contents.items.push(\n new Pair(new Scalar(property), metadata[property])\n );\n }\n }\n return cleanMetadataDocument(yamlDoc).toString(TOSTRING_OPTIONS);\n}\n\nexport const FLOW_SECTION_KEYS = [\n \"tasks\",\n \"triggers\",\n \"errors\",\n \"finally\",\n \"afterExecution\",\n \"pluginDefaults\",\n] as const\n\nexport type FlowSectionKeys = typeof FLOW_SECTION_KEYS[number];\n\nexport const ORDERED_FLOW_ROOT_KEYS = [\n \"id\",\n \"namespace\",\n \"description\",\n \"retry\",\n \"labels\",\n \"inputs\",\n \"variables\",\n ...FLOW_SECTION_KEYS,\n \"taskDefaults\",\n \"concurrency\",\n \"outputs\",\n \"disabled\",\n] as const\n\nexport type FlowRootKeys = typeof ORDERED_FLOW_ROOT_KEYS[number];\n\nfunction isItemTruthy(item: Node) {\n if (isSeq(item) || isMap(item)) {\n return item.items.length > 0\n } else {\n return true\n }\n}\n\nfunction cleanMetadataDocument(yamlDoc: Document<YAMLMap<{ value: string }, Node | YAMLSeq>>) {\n if (!yamlDoc?.contents?.items) {\n return yamlDoc;\n }\n const updatedItems = [];\n for (const prop of ORDERED_FLOW_ROOT_KEYS) {\n const item = yamlDoc.contents?.items.find(\n (e: any) => e.key.value === prop\n );\n if (item?.value && isItemTruthy(item.value)) {\n updatedItems.push(item);\n }\n }\n yamlDoc.contents.items = updatedItems;\n return yamlDoc;\n}\n\nexport function cleanMetadata(source: string) {\n const yamlDoc = parseDocument(source) as Document<YAMLMap<{ value: string }, Node>>;\n const cleanedYamlDoc = cleanMetadataDocument(yamlDoc);\n return cleanedYamlDoc.toString(TOSTRING_OPTIONS);\n}\n\nexport function getMetadata(source: string) {\n const yamlDoc = parseDocument(source) as any;\n const metadata: Record<string, any> = {};\n for (const item of yamlDoc.contents.items) {\n if (!FLOW_SECTION_KEYS.includes(item.key.value)) {\n metadata[item.key.value] =\n isMap(item.value) || isSeq(item.value)\n ? item.value.toJSON()\n : item.value.value;\n }\n }\n return metadata;\n}\n\nexport function deleteMetadata(source: any, metadata: any) {\n const yamlDoc = parseDocument(source) as any;\n\n if (!yamlDoc.contents.items) {\n return source;\n }\n\n const item = yamlDoc.contents.items.find((e: any) => e.key.value === metadata);\n if (item) {\n yamlDoc.contents.items.splice(yamlDoc.contents.items.indexOf(item), 1);\n }\n\n return yamlDoc.toString(TOSTRING_OPTIONS);\n}\n\nexport function flowHaveTasks(source: string) {\n const {sectionNode} = getSectionNodeAndDocumentFromSource({source, section: \"tasks\"});\n if (!sectionNode) {\n return false;\n }\n return isSeq(sectionNode) && sectionNode.items.length > 0;\n}\n\nexport function extractPluginDefault(source: string, pluginType: string) {\n return extractBlock({source, section: \"pluginDefaults\", key: pluginType, keyName: \"type\"});\n}\n\nexport function replacePluginDefaultsInDocument(source: string, pluginType: string, newContent: string) {\n return replaceBlockInDocument({source, section: \"pluginDefaults\", keyName: \"type\", key: pluginType, newContent});\n}\n\nexport function deletePluginDefaults(source: string, pluginType: string) {\n return deleteBlock({source, section: \"pluginDefaults\", key: pluginType, keyName: \"type\"});\n}\n\nexport function insertErrorInFlowable(source: string, errorTask: string, flowableTask: string) {\n const yamlDoc = parseDocument(source) as any;\n const newErrorNode = yamlDoc.createNode(parseDocument(errorTask));\n let added = false;\n visit(yamlDoc, {\n Map(_, map) {\n if (added) {\n return visit.BREAK;\n }\n if (map.get(\"id\") === flowableTask) {\n if (map.items.find((item: any) => item.key.value === \"errors\")) {\n (\n map.items?.find((item: any) => item.key.value === \"errors\")\n ?.value as any\n )?.items.push(newErrorNode);\n } else {\n const errorsSeq = new YAMLSeq();\n errorsSeq.items.push(newErrorNode);\n const errors = new Pair(new Scalar(\"errors\"), errorsSeq);\n map.items.push(errors);\n }\n added = true;\n return map;\n }\n },\n });\n return yamlDoc.toString(TOSTRING_OPTIONS);\n}\n\n/**\n * Specify a source yaml doc, the field to extract recursively in every map of the doc and optionally \n * a predicate to define which paths should be taken into account `parentPathPredicate` \n * will take a single argument which is the path of each parent property starting from the root doc (joined with \".\")\n * \"my.parent.task\" will mean that the field was retrieved in my -> parent -> task path.\n */\nexport function extractFieldFromMaps<T extends string>(\n source: string,\n fieldName: T,\n parentPathPredicate = (_: any, __?: any) => true,\n valuePredicate = (_: any) => true\n): any[] {\n const yamlDoc = parseDocument(source) as any;\n const maps: any[] = [];\n visit(yamlDoc, {\n Map(_, map, parent) {\n if (\n parentPathPredicate(\n parent\n .filter((p) => isPair(p))\n .map((p: any) => p?.key?.value)\n .join(\".\")\n ) &&\n map.items\n ) {\n for (const item of map.items as any[]) {\n if (item?.key?.value === fieldName) {\n\n const fieldValue = item?.value?.value ?? item.value?.items;\n if (valuePredicate(fieldValue)) {\n maps.push({\n [fieldName]: fieldValue,\n range: map.range,\n });\n }\n }\n }\n }\n },\n });\n return maps;\n}\n\nfunction extractAllTypes(source: string, validTypes: string[] = []): {\n type: string;\n range: [number, number, number]\n}[] {\n return extractFieldFromMaps(source, \"type\", () => true, (value) =>\n validTypes.some((t) => t === value)\n );\n}\n\n\n/**\n * Get task type at cursor position.\n * Useful to display/update the live docs\n */\nexport function getTypeAtPosition(\n source: string,\n position: { lineNumber: number; column: number },\n validTypes: any\n) {\n const types = extractAllTypes(source, validTypes);\n\n const lineCounter = new LineCounter();\n parseDocument(source, {lineCounter});\n const cursorIndex =\n lineCounter.lineStarts[position.lineNumber - 1] + position.column;\n\n for (const type of types.reverse()) {\n if (cursorIndex >= type.range[0]) {\n return type.type;\n }\n }\n return null;\n}\n\nconst TOSTRING_OPTIONS = {lineWidth: 0};\n\nconst yamlKeyCapture = \"([^:\\\\n]+): *\";\nconst indentAndYamlKeyCapture = new RegExp(\n `(( *)(?:${yamlKeyCapture})?)[^\\\\n]*?$`\n);\n\nfunction getParentKeyByChildIndent(\n stringToSearch: string,\n indent: number\n): { key: string; valueStartIndex: number } | undefined {\n if (indent < 2) {\n return undefined;\n }\n\n const matches = stringToSearch.matchAll(\n new RegExp(`(?<! ) {${indent - 2}}(?! )${yamlKeyCapture}`, \"g\")\n );\n const lastMatch = [...matches].pop();\n if (lastMatch === undefined) {\n return undefined;\n }\n return {\n key: lastMatch[1],\n valueStartIndex: lastMatch.index + lastMatch[0].length,\n };\n}\n\nfunction extractIndentAndMaybeYamlKey(stringToTest: string): {\n indent: number;\n yamlKey: string | undefined;\n valueStartIndex: number | undefined;\n} | undefined {\n const exec = indentAndYamlKeyCapture.exec(stringToTest);\n if (exec === null) {\n return undefined;\n }\n\n const [stringBeforeValue, indent, yamlKey]: [\n string,\n string,\n string | undefined\n ] = [exec[1], exec[2], exec[3]];\n return {\n indent: indent.length,\n yamlKey,\n valueStartIndex:\n yamlKey === undefined\n ? undefined\n : exec.index + stringBeforeValue.length,\n };\n}\n\nexport type YamlElement = {\n key?: string;\n value: Record<string, any>;\n parents: Record<string, any>[];\n range?: [number, number, number];\n};\n\nexport function localizeElementAtIndex(source: string, indexInSource: number): YamlElement {\n const tillCursor = source.substring(0, indexInSource);\n\n const indentAndYamlKey: any = extractIndentAndMaybeYamlKey(tillCursor);\n let {yamlKey} = indentAndYamlKey;\n const {indent} = indentAndYamlKey;\n // We search in previous keys to find the parent key\n let valueStartIndex;\n if (yamlKey === undefined) {\n const parentKeyExtract = getParentKeyByChildIndent(\n tillCursor,\n indent\n );\n yamlKey = parentKeyExtract?.key;\n valueStartIndex = parentKeyExtract?.valueStartIndex;\n } else {\n valueStartIndex =\n tillCursor.lastIndexOf(yamlKey + \":\") + yamlKey.length + 1;\n }\n\n const yamlDoc = parseDocument(source) as any;\n const elements: any = [];\n\n visit(yamlDoc, {\n Pair(_: any, pair: any, parents: readonly any[]) {\n if (pair.value?.range !== undefined && pair.key.value === yamlKey) {\n const beforeElement = source.substring(0, pair.value.range[0]);\n elements.push({\n parents: parents\n .filter((p) => isMap(p))\n .map((p) => p.toJS(yamlDoc)),\n key: pair.key.value,\n value: pair.value.toJS(yamlDoc),\n range: [\n pair.value.range[0] -\n (beforeElement.length -\n beforeElement.replaceAll(/\\s*$/g, \"\").length),\n ...pair.value.range.slice(1),\n ],\n });\n }\n },\n });\n\n const filter = elements.filter(\n (map: any) =>\n map.range[0] <= valueStartIndex && valueStartIndex <= map.range[2]\n );\n return filter.sort((a: any, b: any) => b.range[0] - a.range[0])?.[0];\n}\n\n// CHARTS for dashboard\n\nexport function getAllCharts(source: string) {\n const yamlDoc = parseDocument(source) as any;\n const charts: string[] = [];\n\n visit(yamlDoc, {\n Map(_, map) {\n if (map.items) {\n for (const item of map.items as any[]) {\n if (item?.key?.value === \"charts\" && item?.value?.items) {\n for (const chartItem of item.value.items) {\n charts.push(chartItem.toJSON());\n }\n }\n }\n }\n },\n });\n\n return charts;\n}\n\nexport function getChartAtPosition(source: string, position: { lineNumber: number; column: number }) {\n const yamlDoc = parseDocument(source) as any;\n const lineCounter = new LineCounter();\n parseDocument(source, {lineCounter});\n const cursorIndex =\n lineCounter.lineStarts[position.lineNumber - 1] + position.column;\n\n let chart: any;\n visit(yamlDoc, {\n Map(_, map) {\n if (map.items) {\n for (const item of map.items as any[]) {\n if (item?.key?.value === \"charts\") {\n if (item?.value?.items) {\n for (const chartItem of item.value.items) {\n if (\n chartItem.range[0] <= cursorIndex &&\n chartItem.range[1] >= cursorIndex\n ) {\n chart = chartItem;\n return visit.BREAK;\n }\n }\n }\n }\n }\n }\n },\n });\n\n return chart ? chart.toJSON() : null;\n}\n"],"names":["parse","item","throwIfError","load","e","stringify","clonedValue","dump","transform","SORT_FIELDS","sort","value","a","b","aIndex","bIndex","aIndexProtected","bIndexProtected","pairsToMap","pairs","map","YAMLMap","isPair","pair","r","accumulator","getSectionNodeAndDocumentFromSource","source","section","yamlDoc","parseDocument","sectionNode","getSectionFromDocument","_a","extractBlock","key","keyName","blockNode","extractBlockFromDocument","Document","TOSTRING_OPTIONS","callback","find","element","isMap","isSeq","result","replaceBlockInDocument","newContent","newItem","oldValue","restoreCommentsInBlock","oldProperty","newProperty","oldProp","newProp","swapBlocks","key1","key2","task1","task2","visit","_","insertBlock","newBlock","refKey","position","parentKey","subBlockName","newPropNode","parentNode","propertyList","YAMLSeq","blocks","Pair","Scalar","_b","protectedReferenceKey","getLastBlock","_d","_c","added","seq","index","cleanMetadataDocument","deleteBlock","isChildrenOf","childKey","parentDoc","isParentChildrenRelation","sections","acc","replaceIdAndNamespace","id","namespace","checkBlockAlreadyExists","parsedProp","propExists","parentProperty","subBlocksNode","parsed","_e","updateMetadata","metadata","property","FLOW_SECTION_KEYS","ORDERED_FLOW_ROOT_KEYS","isItemTruthy","updatedItems","prop","cleanMetadata","getMetadata","deleteMetadata","flowHaveTasks","extractPluginDefault","pluginType","replacePluginDefaultsInDocument","deletePluginDefaults","insertErrorInFlowable","errorTask","flowableTask","newErrorNode","errorsSeq","errors","extractFieldFromMaps","fieldName","parentPathPredicate","__","valuePredicate","maps","parent","p","fieldValue","extractAllTypes","validTypes","t","getTypeAtPosition","types","lineCounter","LineCounter","cursorIndex","type","yamlKeyCapture","indentAndYamlKeyCapture","getParentKeyByChildIndent","stringToSearch","indent","lastMatch","extractIndentAndMaybeYamlKey","stringToTest","exec","stringBeforeValue","yamlKey","localizeElementAtIndex","indexInSource","tillCursor","indentAndYamlKey","valueStartIndex","parentKeyExtract","elements","parents","beforeElement","getAllCharts","charts","chartItem","getChartAtPosition","chart"],"mappings":"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"}
@@ -485,6 +485,7 @@ export {
485
485
  ht as deleteMetadata,
486
486
  It as deletePluginDefaults,
487
487
  X as extractBlock,
488
+ tt as extractFieldFromMaps,
488
489
  St as extractPluginDefault,
489
490
  yt as flowHaveTasks,
490
491
  Et as getAllCharts,
@@ -1 +1 @@
1
- {"version":3,"file":"kestra-flowyamlutils.es.js","sources":["../src/utils/FlowYamlUtils.ts"],"sourcesContent":["import {dump, load} from \"js-yaml\";\nimport {\n Scalar,\n YAMLMap,\n YAMLSeq,\n Document,\n Node,\n Pair,\n LineCounter,\n parseDocument,\n isPair,\n isMap,\n isSeq,\n visit,\n} from \"yaml\";\n\nexport function parse<T = any>(item?: string, throwIfError = true): T | undefined {\n if (item === undefined) return undefined;\n\n try {\n return load(item) as any;\n } catch (e) {\n if (throwIfError) throw e;\n return undefined;\n }\n}\n\nexport function stringify(item: any) {\n if (item === undefined) return \"\";\n\n const clonedValue = structuredClone(item);\n delete clonedValue.deleted;\n\n return dump(transform(clonedValue), {\n lineWidth: -1,\n noCompatMode: true,\n quotingType: \"\\\"\",\n });\n}\n\nconst SORT_FIELDS = [\n \"id\",\n \"type\",\n \"namespace\",\n \"description\",\n \"revision\",\n \"inputs\",\n \"variables\",\n \"tasks\",\n \"errors\",\n \"triggers\",\n \"listeners\",\n \"pluginDefaults\"\n];\n\nexport function sort(value: Record<string, any>) {\n return Object.keys(value)\n .sort((a, b) => {\n const aIndex = SORT_FIELDS.indexOf(a);\n const bIndex = SORT_FIELDS.indexOf(b);\n const aIndexProtected = aIndex >= 0 ? aIndex : Number.MAX_SAFE_INTEGER;\n const bIndexProtected = bIndex >= 0 ? bIndex : Number.MAX_SAFE_INTEGER;\n\n return aIndexProtected - bIndexProtected;\n });\n}\n\nexport function pairsToMap(pairs?: any[]) {\n const map = new YAMLMap();\n if (!isPair(pairs?.[0])) {\n return map;\n }\n\n for (const pair of pairs) {\n map.add(pair);\n };\n return map;\n}\n\nfunction transform(value: any): any {\n if (value instanceof Array) {\n return value.map((r) => {\n return transform(r);\n });\n } else if (typeof value === \"string\" || value instanceof String) {\n return value;\n } else if (value instanceof Object) {\n return sort(value).reduce((accumulator, r) => {\n if (value[r] !== undefined) {\n accumulator[r] = transform(value[r]);\n }\n\n return accumulator;\n }, Object.create({}));\n }\n\n return value;\n}\n\nfunction getSectionNodeAndDocumentFromSource({source, section}: {\n source: string,\n section: string\n}) {\n const yamlDoc = parseDocument(source) as Document<YAMLMap<{ value: string }, Node>>;\n const sectionNode = getSectionFromDocument({yamlDoc, section});\n return {yamlDoc, sectionNode};\n}\n\nfunction getSectionFromDocument({yamlDoc, section}:\n {\n yamlDoc: Document<YAMLMap<{ value: string }, Node>>,\n section: string\n }) {\n const sectionNode = yamlDoc.contents?.items.find(\n (e) => e.key.value === section\n ) as { value: YAMLSeq<YAMLMap<{ value: string }, Node>> } | undefined;\n return sectionNode?.value;\n}\n\nexport function extractBlock({source, section, key, keyName}: {\n source: string,\n section: string,\n key: string,\n keyName?: string\n}) {\n if (!keyName) {\n keyName = \"id\";\n }\n const {sectionNode} = getSectionNodeAndDocumentFromSource({source, section});\n if (!sectionNode) {\n return undefined;\n }\n\n const blockNode = extractBlockFromDocument({\n yamlDoc: sectionNode,\n keyName,\n key,\n });\n\n return blockNode === undefined\n ? undefined\n : new Document(blockNode).toString(TOSTRING_OPTIONS);\n}\n\nfunction extractBlockFromDocument({yamlDoc, keyName, key, callback}: {\n yamlDoc: Node,\n keyName: string,\n key: string,\n /**\n * Callback function to modify the found element\n * @param element The found YAMLMap element\n */\n callback?: (element: YAMLMap<{ value: string }, string | Node>) => void,\n}) {\n function find(element?: Node): Node | void {\n if (!element) {\n return;\n }\n if (isMap<{ value: string }, string | Node>(element)) {\n if (element.get(\"type\") !== undefined && key === element.get(keyName)) {\n return callback ? callback(element) : element;\n }\n }\n if (isSeq<{ value: Node }>(element)\n || isMap<{ value: string }, Node>(element)) {\n for (const [key, item] of element.items.entries()) {\n const result = isMap(item)\n ? find(item)\n : find(item.value ?? undefined)\n\n if (result) {\n if (callback) {\n if (isMap(element) && isPair<{ value: string }, Node>(item)) {\n // replace value in the map\n element.set(item.key, result);\n } else {\n element.items[key] = result as any;\n }\n } else if (result) {\n return result;\n }\n }\n }\n }\n }\n\n const result = find(yamlDoc);\n\n if (result === undefined) {\n return undefined;\n }\n\n if (callback) {\n return new Document(result);\n } else {\n return new Document(result);\n }\n}\n\nexport function replaceBlockInDocument({source, section, keyName, key, newContent}: {\n source: string,\n section: string,\n keyName: string,\n key: string,\n newContent: string\n}) {\n const {yamlDoc, sectionNode} = getSectionNodeAndDocumentFromSource({source, section});\n const newItem = yamlDoc.createNode(parseDocument(newContent));\n if (!sectionNode) {\n return undefined;\n }\n\n extractBlockFromDocument({\n yamlDoc: sectionNode, keyName, key, callback(oldValue) {\n restoreCommentsInBlock(\n oldValue as YAMLMap<{ value: string }, Node>,\n newItem as YAMLMap<{ value: string }, Node>\n );\n\n // replace the old value with the new value\n return newItem;\n }\n });\n\n return yamlDoc.toString(TOSTRING_OPTIONS);\n}\n\n/**\n * keep comments from old plugin property in the new\n * @param oldProperty \n * @param newProperty \n */\nfunction restoreCommentsInBlock(oldProperty: YAMLMap<{ value: string }, Node>, newProperty: YAMLMap<{ value: string }, Node>) {\n for (const oldProp of oldProperty.items) {\n for (const newProp of newProperty.items) {\n if (\n oldProp.key.value === newProp.key.value &&\n newProp.value &&\n newProp.value.comment === undefined\n ) {\n newProp.value.comment = oldProp.value?.comment;\n break;\n }\n }\n }\n}\n\nexport function swapBlocks({source, section, key1, key2, keyName}: {\n source: string,\n section: string,\n key1: string,\n key2: string,\n keyName?: string\n}) {\n if (!keyName) {\n keyName = \"id\";\n }\n const {yamlDoc, sectionNode} = getSectionNodeAndDocumentFromSource({source, section});\n if (!sectionNode) {\n return source;\n }\n const task1 = extractBlockFromDocument({yamlDoc: sectionNode, keyName, key: key1});\n const task2 = extractBlockFromDocument({yamlDoc: sectionNode, keyName, key: key2});\n\n if (!task1 || !task2) {\n return source;\n }\n\n visit(yamlDoc, {\n Pair(_, pair: any) {\n if (\n pair.key.value === \"dependsOn\" &&\n pair.value.items.map((e: any) => e.value).includes(key1)\n ) {\n throw {\n message: \"dependency task\",\n messageOptions: {taskId: key2},\n };\n }\n },\n });\n\n extractBlockFromDocument({yamlDoc: sectionNode, keyName, key: key1, callback: () => task2});\n extractBlockFromDocument({yamlDoc: sectionNode, keyName, key: key2, callback: () => task1});\n\n return yamlDoc.toString(TOSTRING_OPTIONS);\n}\n\nexport function insertBlock({source,\n section,\n newBlock,\n refKey,\n position,\n parentKey,\n keyName,\n subBlockName\n}: {\n source: string,\n section: string,\n newBlock: string,\n refKey?: string,\n position?: \"before\" | \"after\",\n parentKey?: string,\n keyName?: string,\n subBlockName?: string,\n}) {\n if (!keyName) {\n keyName = \"id\";\n }\n if (!subBlockName) {\n subBlockName = section;\n }\n if (!position) {\n position = \"after\";\n }\n const {yamlDoc, sectionNode} = getSectionNodeAndDocumentFromSource({source, section});\n const newPropNode = yamlDoc.createNode(parseDocument(newBlock));\n\n const parentNode: any = parentKey && sectionNode\n ? extractBlockFromDocument({yamlDoc: sectionNode, keyName, key: parentKey})?.contents\n : sectionNode;\n if (!parentNode && parentKey) {\n throw new Error(`Parent block with ID ${parentKey} not found in ${section}`);\n }\n\n // if the container (parentNode) is missing\n // - an entire section\n // - a tasks entry in a flowable task\n // - a condition section in a trigger\n if (!parentNode || (parentKey && !parentNode.get(subBlockName))) {\n const propertyList = new YAMLSeq();\n propertyList.items.push(newPropNode);\n const blocks = new Pair(new Scalar(subBlockName), propertyList);\n if (!parentKey) {\n yamlDoc.contents?.items.push(blocks);\n return yamlDoc.toString(TOSTRING_OPTIONS);\n }\n\n if (parentNode && !parentNode.get(subBlockName)) {\n parentNode.items.push(blocks);\n return yamlDoc.toString(TOSTRING_OPTIONS);\n }\n }\n\n const protectedReferenceKey = refKey\n ?? (position === \"after\"\n ? getLastBlock({source, section, parentKey: parentKey, keyName, subBlockName})\n : parentNode.items?.[0]?.get(keyName));\n\n let added = false;\n visit(parentNode, {\n Seq(_, seq) {\n for (const map of seq.items) {\n if (isMap(map)) {\n if (added) {\n return visit.BREAK;\n }\n if (map.get(keyName) === protectedReferenceKey) {\n const index = seq.items.indexOf(map);\n if (position === \"before\") {\n if (index === 0) {\n seq.items.unshift(newPropNode);\n } else {\n seq.items.splice(index, 0, newPropNode);\n }\n } else {\n if (index === seq.items.length - 1) {\n seq.items.push(newPropNode);\n } else {\n seq.items.splice(index + 1, 0, newPropNode);\n }\n }\n added = true;\n }\n }\n }\n },\n });\n return cleanMetadataDocument(yamlDoc).toString(TOSTRING_OPTIONS);\n}\n\nexport function deleteBlock({source, section, key, keyName}: {\n source: string,\n section: string,\n key: string,\n keyName?: string\n}) {\n if (!keyName) {\n keyName = \"id\";\n }\n const yamlDoc = parseDocument(source) as any;\n visit(yamlDoc, {\n Pair(_, pair: any) {\n if (pair.key.value === section) {\n visit(pair.value, {\n Map(_, map) {\n if (map.get(keyName) === key) {\n return visit.REMOVE;\n }\n },\n });\n }\n },\n });\n\n // delete empty sections\n visit(yamlDoc, {\n Pair(_, pair) {\n if (isSeq(pair.value) && pair.value.items.length === 0) {\n return visit.REMOVE;\n }\n },\n });\n return yamlDoc.toString(TOSTRING_OPTIONS);\n}\n\nfunction isChildrenOf(source: string, section: string, parentKey: string, childKey: string, keyName: string) {\n const {sectionNode} = getSectionNodeAndDocumentFromSource({source, section});\n if (!sectionNode) {\n return false;\n }\n\n const parentDoc = extractBlockFromDocument({yamlDoc: sectionNode, keyName, key: parentKey});\n\n if (!parentDoc) {\n return false;\n }\n\n let isChildrenOf = false;\n visit(parentDoc, {\n Map(_, map) {\n if (map.get(keyName) === childKey) {\n isChildrenOf = true;\n return visit.BREAK;\n }\n },\n });\n return isChildrenOf;\n}\n\nexport function isParentChildrenRelation({source, sections, key1, key2, keyName}:\n { source: string, sections: string[], key1: string, key2: string, keyName: string }) {\n if (!keyName) {\n keyName = \"id\";\n }\n return sections.reduce((acc, section) => (\n acc\n || isChildrenOf(source, section, key2, key1, keyName)\n || isChildrenOf(source, section, key1, key2, keyName)\n ), false);\n}\n\nexport function replaceIdAndNamespace(source: string, id: string, namespace: string) {\n return source\n .replace(/^(id\\s*:\\s*([\"']?))\\S*/m, \"$1\" + id + \"$2\")\n .replace(/^(namespace\\s*:\\s*([\"']?))\\S*/m, \"$1\" + namespace + \"$2\");\n}\n\nexport function checkBlockAlreadyExists({source, section, newContent, keyName}:\n { source: string, section: string, newContent: string, keyName: string }) {\n const {sectionNode} = getSectionNodeAndDocumentFromSource({source, section});\n const parsedProp = parse(newContent);\n if (!sectionNode) {\n return undefined\n }\n let propExists = false;\n visit(sectionNode, {\n Map(_, map) {\n if (map.get(keyName) === parsedProp[keyName]) {\n propExists = true;\n return visit.BREAK;\n }\n },\n });\n return propExists ? parsedProp[keyName] : undefined\n}\n\nexport function getLastBlock({source, section, parentKey, keyName, subBlockName}: {\n source: string,\n section: string,\n parentKey?: string,\n keyName?: string,\n subBlockName?: string\n}\n): string | undefined {\n if (!keyName) {\n keyName = \"id\";\n }\n if (!subBlockName) {\n subBlockName = section;\n }\n\n if (parentKey) {\n const {sectionNode} = getSectionNodeAndDocumentFromSource({source, section});\n if (!sectionNode) {\n return undefined\n }\n const parentProperty = extractBlockFromDocument({yamlDoc: sectionNode, keyName, key: parentKey}) as Document<YAMLMap<{\n value: string;\n }, YAMLSeq<YAMLMap>>>;\n\n if (!parentProperty?.contents?.items) {\n throw new Error(`Parent with ID ${parentKey} not found`);\n }\n\n const subBlocksNode = parentProperty.contents.items.find((pair: any) => pair.key.value === subBlockName);\n\n if (!subBlocksNode || (subBlocksNode.value && \"value\" in subBlocksNode.value && subBlocksNode.value.value === null)) {\n return undefined;\n }\n\n return subBlocksNode.value?.items[subBlocksNode.value.items.length - 1].get(keyName) as string;\n }\n\n const parsed = parse(source);\n\n return parsed.tasks?.[parsed?.tasks?.length - 1]?.id;\n}\n\nexport function updateMetadata(source: string, metadata: Record<string, any>) {\n // TODO: check how to keep comments\n const yamlDoc = parseDocument(source) as any;\n\n if (!yamlDoc?.contents?.items) {\n return source;\n }\n\n for (const property in metadata) {\n if (\n yamlDoc.contents.items.find((item: any) => item.key.value === property)\n ) {\n yamlDoc.contents.items.find(\n (item: any) => item.key.value === property\n ).value = metadata[property];\n } else {\n yamlDoc.contents.items.push(\n new Pair(new Scalar(property), metadata[property])\n );\n }\n }\n return cleanMetadataDocument(yamlDoc).toString(TOSTRING_OPTIONS);\n}\n\nexport const FLOW_SECTION_KEYS = [\n \"tasks\",\n \"triggers\",\n \"errors\",\n \"finally\",\n \"afterExecution\",\n \"pluginDefaults\",\n] as const\n\nexport type FlowSectionKeys = typeof FLOW_SECTION_KEYS[number];\n\nexport const ORDERED_FLOW_ROOT_KEYS = [\n \"id\",\n \"namespace\",\n \"description\",\n \"retry\",\n \"labels\",\n \"inputs\",\n \"variables\",\n ...FLOW_SECTION_KEYS,\n \"taskDefaults\",\n \"concurrency\",\n \"outputs\",\n \"disabled\",\n] as const\n\nexport type FlowRootKeys = typeof ORDERED_FLOW_ROOT_KEYS[number];\n\nfunction isItemTruthy(item: Node) {\n if (isSeq(item) || isMap(item)) {\n return item.items.length > 0\n } else {\n return true\n }\n}\n\nfunction cleanMetadataDocument(yamlDoc: Document<YAMLMap<{ value: string }, Node | YAMLSeq>>) {\n if (!yamlDoc?.contents?.items) {\n return yamlDoc;\n }\n const updatedItems = [];\n for (const prop of ORDERED_FLOW_ROOT_KEYS) {\n const item = yamlDoc.contents?.items.find(\n (e: any) => e.key.value === prop\n );\n if (item?.value && isItemTruthy(item.value)) {\n updatedItems.push(item);\n }\n }\n yamlDoc.contents.items = updatedItems;\n return yamlDoc;\n}\n\nexport function cleanMetadata(source: string) {\n const yamlDoc = parseDocument(source) as Document<YAMLMap<{ value: string }, Node>>;\n const cleanedYamlDoc = cleanMetadataDocument(yamlDoc);\n return cleanedYamlDoc.toString(TOSTRING_OPTIONS);\n}\n\nexport function getMetadata(source: string) {\n const yamlDoc = parseDocument(source) as any;\n const metadata: Record<string, any> = {};\n for (const item of yamlDoc.contents.items) {\n if (!FLOW_SECTION_KEYS.includes(item.key.value)) {\n metadata[item.key.value] =\n isMap(item.value) || isSeq(item.value)\n ? item.value.toJSON()\n : item.value.value;\n }\n }\n return metadata;\n}\n\nexport function deleteMetadata(source: any, metadata: any) {\n const yamlDoc = parseDocument(source) as any;\n\n if (!yamlDoc.contents.items) {\n return source;\n }\n\n const item = yamlDoc.contents.items.find((e: any) => e.key.value === metadata);\n if (item) {\n yamlDoc.contents.items.splice(yamlDoc.contents.items.indexOf(item), 1);\n }\n\n return yamlDoc.toString(TOSTRING_OPTIONS);\n}\n\nexport function flowHaveTasks(source: string) {\n const {sectionNode} = getSectionNodeAndDocumentFromSource({source, section: \"tasks\"});\n if (!sectionNode) {\n return false;\n }\n return isSeq(sectionNode) && sectionNode.items.length > 0;\n}\n\nexport function extractPluginDefault(source: string, pluginType: string) {\n return extractBlock({source, section: \"pluginDefaults\", key: pluginType, keyName: \"type\"});\n}\n\nexport function replacePluginDefaultsInDocument(source: string, pluginType: string, newContent: string) {\n return replaceBlockInDocument({source, section: \"pluginDefaults\", keyName: \"type\", key: pluginType, newContent});\n}\n\nexport function deletePluginDefaults(source: string, pluginType: string) {\n return deleteBlock({source, section: \"pluginDefaults\", key: pluginType, keyName: \"type\"});\n}\n\nexport function insertErrorInFlowable(source: string, errorTask: string, flowableTask: string) {\n const yamlDoc = parseDocument(source) as any;\n const newErrorNode = yamlDoc.createNode(parseDocument(errorTask));\n let added = false;\n visit(yamlDoc, {\n Map(_, map) {\n if (added) {\n return visit.BREAK;\n }\n if (map.get(\"id\") === flowableTask) {\n if (map.items.find((item: any) => item.key.value === \"errors\")) {\n (\n map.items?.find((item: any) => item.key.value === \"errors\")\n ?.value as any\n )?.items.push(newErrorNode);\n } else {\n const errorsSeq = new YAMLSeq();\n errorsSeq.items.push(newErrorNode);\n const errors = new Pair(new Scalar(\"errors\"), errorsSeq);\n map.items.push(errors);\n }\n added = true;\n return map;\n }\n },\n });\n return yamlDoc.toString(TOSTRING_OPTIONS);\n}\n\n/**\n * Specify a source yaml doc, the field to extract recursively in every map of the doc and optionally \n * a predicate to define which paths should be taken into account `parentPathPredicate` \n * will take a single argument which is the path of each parent property starting from the root doc (joined with \".\")\n * \"my.parent.task\" will mean that the field was retrieved in my -> parent -> task path.\n */\nfunction extractFieldFromMaps<T extends string>(\n source: string,\n fieldName: T,\n parentPathPredicate = (_: any, __?: any) => true,\n valuePredicate = (_: any) => true\n): any[] {\n const yamlDoc = parseDocument(source) as any;\n const maps: any[] = [];\n visit(yamlDoc, {\n Map(_, map, parent) {\n if (\n parentPathPredicate(\n parent\n .filter((p) => isPair(p))\n .map((p: any) => p?.key?.value)\n .join(\".\")\n ) &&\n map.items\n ) {\n for (const item of map.items as any[]) {\n if (item?.key?.value === fieldName) {\n\n const fieldValue = item?.value?.value ?? item.value?.items;\n if (valuePredicate(fieldValue)) {\n maps.push({\n [fieldName]: fieldValue,\n range: map.range,\n });\n }\n }\n }\n }\n },\n });\n return maps;\n}\n\nfunction extractAllTypes(source: string, validTypes: string[] = []): {\n type: string;\n range: [number, number, number]\n}[] {\n return extractFieldFromMaps(source, \"type\", () => true, (value) =>\n validTypes.some((t) => t === value)\n );\n}\n\n\n/**\n * Get task type at cursor position.\n * Useful to display/update the live docs\n */\nexport function getTypeAtPosition(\n source: string,\n position: { lineNumber: number; column: number },\n validTypes: any\n) {\n const types = extractAllTypes(source, validTypes);\n\n const lineCounter = new LineCounter();\n parseDocument(source, {lineCounter});\n const cursorIndex =\n lineCounter.lineStarts[position.lineNumber - 1] + position.column;\n\n for (const type of types.reverse()) {\n if (cursorIndex >= type.range[0]) {\n return type.type;\n }\n }\n return null;\n}\n\nconst TOSTRING_OPTIONS = {lineWidth: 0};\n\nconst yamlKeyCapture = \"([^:\\\\n]+): *\";\nconst indentAndYamlKeyCapture = new RegExp(\n `(( *)(?:${yamlKeyCapture})?)[^\\\\n]*?$`\n);\n\nfunction getParentKeyByChildIndent(\n stringToSearch: string,\n indent: number\n): { key: string; valueStartIndex: number } | undefined {\n if (indent < 2) {\n return undefined;\n }\n\n const matches = stringToSearch.matchAll(\n new RegExp(`(?<! ) {${indent - 2}}(?! )${yamlKeyCapture}`, \"g\")\n );\n const lastMatch = [...matches].pop();\n if (lastMatch === undefined) {\n return undefined;\n }\n return {\n key: lastMatch[1],\n valueStartIndex: lastMatch.index + lastMatch[0].length,\n };\n}\n\nfunction extractIndentAndMaybeYamlKey(stringToTest: string): {\n indent: number;\n yamlKey: string | undefined;\n valueStartIndex: number | undefined;\n} | undefined {\n const exec = indentAndYamlKeyCapture.exec(stringToTest);\n if (exec === null) {\n return undefined;\n }\n\n const [stringBeforeValue, indent, yamlKey]: [\n string,\n string,\n string | undefined\n ] = [exec[1], exec[2], exec[3]];\n return {\n indent: indent.length,\n yamlKey,\n valueStartIndex:\n yamlKey === undefined\n ? undefined\n : exec.index + stringBeforeValue.length,\n };\n}\n\nexport type YamlElement = {\n key?: string;\n value: Record<string, any>;\n parents: Record<string, any>[];\n range?: [number, number, number];\n};\n\nexport function localizeElementAtIndex(source: string, indexInSource: number): YamlElement {\n const tillCursor = source.substring(0, indexInSource);\n\n const indentAndYamlKey: any = extractIndentAndMaybeYamlKey(tillCursor);\n let {yamlKey} = indentAndYamlKey;\n const {indent} = indentAndYamlKey;\n // We search in previous keys to find the parent key\n let valueStartIndex;\n if (yamlKey === undefined) {\n const parentKeyExtract = getParentKeyByChildIndent(\n tillCursor,\n indent\n );\n yamlKey = parentKeyExtract?.key;\n valueStartIndex = parentKeyExtract?.valueStartIndex;\n } else {\n valueStartIndex =\n tillCursor.lastIndexOf(yamlKey + \":\") + yamlKey.length + 1;\n }\n\n const yamlDoc = parseDocument(source) as any;\n const elements: any = [];\n\n visit(yamlDoc, {\n Pair(_: any, pair: any, parents: readonly any[]) {\n if (pair.value?.range !== undefined && pair.key.value === yamlKey) {\n const beforeElement = source.substring(0, pair.value.range[0]);\n elements.push({\n parents: parents\n .filter((p) => isMap(p))\n .map((p) => p.toJS(yamlDoc)),\n key: pair.key.value,\n value: pair.value.toJS(yamlDoc),\n range: [\n pair.value.range[0] -\n (beforeElement.length -\n beforeElement.replaceAll(/\\s*$/g, \"\").length),\n ...pair.value.range.slice(1),\n ],\n });\n }\n },\n });\n\n const filter = elements.filter(\n (map: any) =>\n map.range[0] <= valueStartIndex && valueStartIndex <= map.range[2]\n );\n return filter.sort((a: any, b: any) => b.range[0] - a.range[0])?.[0];\n}\n\n// CHARTS for dashboard\n\nexport function getAllCharts(source: string) {\n const yamlDoc = parseDocument(source) as any;\n const charts: string[] = [];\n\n visit(yamlDoc, {\n Map(_, map) {\n if (map.items) {\n for (const item of map.items as any[]) {\n if (item?.key?.value === \"charts\" && item?.value?.items) {\n for (const chartItem of item.value.items) {\n charts.push(chartItem.toJSON());\n }\n }\n }\n }\n },\n });\n\n return charts;\n}\n\nexport function getChartAtPosition(source: string, position: { lineNumber: number; column: number }) {\n const yamlDoc = parseDocument(source) as any;\n const lineCounter = new LineCounter();\n parseDocument(source, {lineCounter});\n const cursorIndex =\n lineCounter.lineStarts[position.lineNumber - 1] + position.column;\n\n let chart: any;\n visit(yamlDoc, {\n Map(_, map) {\n if (map.items) {\n for (const item of map.items as any[]) {\n if (item?.key?.value === \"charts\") {\n if (item?.value?.items) {\n for (const chartItem of item.value.items) {\n if (\n chartItem.range[0] <= cursorIndex &&\n chartItem.range[1] >= cursorIndex\n ) {\n chart = chartItem;\n return visit.BREAK;\n }\n }\n }\n }\n }\n }\n },\n });\n\n return chart ? chart.toJSON() : null;\n}"],"names":["parse","item","throwIfError","load","e","stringify","clonedValue","dump","transform","SORT_FIELDS","sort","value","a","b","aIndex","bIndex","aIndexProtected","bIndexProtected","pairsToMap","pairs","map","YAMLMap","isPair","pair","r","accumulator","getSectionNodeAndDocumentFromSource","source","section","yamlDoc","parseDocument","sectionNode","getSectionFromDocument","_a","extractBlock","key","keyName","blockNode","extractBlockFromDocument","Document","TOSTRING_OPTIONS","callback","find","element","isMap","isSeq","result","replaceBlockInDocument","newContent","newItem","oldValue","restoreCommentsInBlock","oldProperty","newProperty","oldProp","newProp","swapBlocks","key1","key2","task1","task2","visit","_","insertBlock","newBlock","refKey","position","parentKey","subBlockName","newPropNode","parentNode","propertyList","YAMLSeq","blocks","Pair","Scalar","_b","protectedReferenceKey","getLastBlock","_d","_c","added","seq","index","cleanMetadataDocument","deleteBlock","isChildrenOf","childKey","parentDoc","isParentChildrenRelation","sections","acc","replaceIdAndNamespace","id","namespace","checkBlockAlreadyExists","parsedProp","propExists","parentProperty","subBlocksNode","parsed","_e","updateMetadata","metadata","property","FLOW_SECTION_KEYS","ORDERED_FLOW_ROOT_KEYS","isItemTruthy","updatedItems","prop","cleanMetadata","getMetadata","deleteMetadata","flowHaveTasks","extractPluginDefault","pluginType","replacePluginDefaultsInDocument","deletePluginDefaults","insertErrorInFlowable","errorTask","flowableTask","newErrorNode","errorsSeq","errors","extractFieldFromMaps","fieldName","parentPathPredicate","__","valuePredicate","maps","parent","p","fieldValue","extractAllTypes","validTypes","t","getTypeAtPosition","types","lineCounter","LineCounter","cursorIndex","type","yamlKeyCapture","indentAndYamlKeyCapture","getParentKeyByChildIndent","stringToSearch","indent","lastMatch","extractIndentAndMaybeYamlKey","stringToTest","exec","stringBeforeValue","yamlKey","localizeElementAtIndex","indexInSource","tillCursor","indentAndYamlKey","valueStartIndex","parentKeyExtract","elements","parents","beforeElement","getAllCharts","charts","chartItem","getChartAtPosition","chart"],"mappings":"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"}
1
+ {"version":3,"file":"kestra-flowyamlutils.es.js","sources":["../src/utils/FlowYamlUtils.ts"],"sourcesContent":["import {dump, load} from \"js-yaml\";\nimport {\n Scalar,\n YAMLMap,\n YAMLSeq,\n Document,\n Node,\n Pair,\n LineCounter,\n parseDocument,\n isPair,\n isMap,\n isSeq,\n visit,\n} from \"yaml\";\n\nexport function parse<T = any>(item?: string, throwIfError = true): T | undefined {\n if (item === undefined) return undefined;\n\n try {\n return load(item) as any;\n } catch (e) {\n if (throwIfError) throw e;\n return undefined;\n }\n}\n\nexport function stringify(item: any) {\n if (item === undefined) return \"\";\n\n const clonedValue = structuredClone(item);\n delete clonedValue.deleted;\n\n return dump(transform(clonedValue), {\n lineWidth: -1,\n noCompatMode: true,\n quotingType: \"\\\"\",\n });\n}\n\nconst SORT_FIELDS = [\n \"id\",\n \"type\",\n \"namespace\",\n \"description\",\n \"revision\",\n \"inputs\",\n \"variables\",\n \"tasks\",\n \"errors\",\n \"triggers\",\n \"listeners\",\n \"pluginDefaults\"\n];\n\nexport function sort(value: Record<string, any>) {\n return Object.keys(value)\n .sort((a, b) => {\n const aIndex = SORT_FIELDS.indexOf(a);\n const bIndex = SORT_FIELDS.indexOf(b);\n const aIndexProtected = aIndex >= 0 ? aIndex : Number.MAX_SAFE_INTEGER;\n const bIndexProtected = bIndex >= 0 ? bIndex : Number.MAX_SAFE_INTEGER;\n\n return aIndexProtected - bIndexProtected;\n });\n}\n\nexport function pairsToMap(pairs?: any[]) {\n const map = new YAMLMap();\n if (!isPair(pairs?.[0])) {\n return map;\n }\n\n for (const pair of pairs) {\n map.add(pair);\n };\n return map;\n}\n\nfunction transform(value: any): any {\n if (value instanceof Array) {\n return value.map((r) => {\n return transform(r);\n });\n } else if (typeof value === \"string\" || value instanceof String) {\n return value;\n } else if (value instanceof Object) {\n return sort(value).reduce((accumulator, r) => {\n if (value[r] !== undefined) {\n accumulator[r] = transform(value[r]);\n }\n\n return accumulator;\n }, Object.create({}));\n }\n\n return value;\n}\n\nfunction getSectionNodeAndDocumentFromSource({source, section}: {\n source: string,\n section: string\n}) {\n const yamlDoc = parseDocument(source) as Document<YAMLMap<{ value: string }, Node>>;\n const sectionNode = getSectionFromDocument({yamlDoc, section});\n return {yamlDoc, sectionNode};\n}\n\nfunction getSectionFromDocument({yamlDoc, section}:\n {\n yamlDoc: Document<YAMLMap<{ value: string }, Node>>,\n section: string\n }) {\n const sectionNode = yamlDoc.contents?.items.find(\n (e) => e.key.value === section\n ) as { value: YAMLSeq<YAMLMap<{ value: string }, Node>> } | undefined;\n return sectionNode?.value;\n}\n\nexport function extractBlock({source, section, key, keyName}: {\n source: string,\n section: string,\n key: string,\n keyName?: string\n}) {\n if (!keyName) {\n keyName = \"id\";\n }\n const {sectionNode} = getSectionNodeAndDocumentFromSource({source, section});\n if (!sectionNode) {\n return undefined;\n }\n\n const blockNode = extractBlockFromDocument({\n yamlDoc: sectionNode,\n keyName,\n key,\n });\n\n return blockNode === undefined\n ? undefined\n : new Document(blockNode).toString(TOSTRING_OPTIONS);\n}\n\nfunction extractBlockFromDocument({yamlDoc, keyName, key, callback}: {\n yamlDoc: Node,\n keyName: string,\n key: string,\n /**\n * Callback function to modify the found element\n * @param element The found YAMLMap element\n */\n callback?: (element: YAMLMap<{ value: string }, string | Node>) => void,\n}) {\n function find(element?: Node): Node | void {\n if (!element) {\n return;\n }\n if (isMap<{ value: string }, string | Node>(element)) {\n if (element.get(\"type\") !== undefined && key === element.get(keyName)) {\n return callback ? callback(element) : element;\n }\n }\n if (isSeq<{ value: Node }>(element)\n || isMap<{ value: string }, Node>(element)) {\n for (const [key, item] of element.items.entries()) {\n const result = isMap(item)\n ? find(item)\n : find(item.value ?? undefined)\n\n if (result) {\n if (callback) {\n if (isMap(element) && isPair<{ value: string }, Node>(item)) {\n // replace value in the map\n element.set(item.key, result);\n } else {\n element.items[key] = result as any;\n }\n } else if (result) {\n return result;\n }\n }\n }\n }\n }\n\n const result = find(yamlDoc);\n\n if (result === undefined) {\n return undefined;\n }\n\n if (callback) {\n return new Document(result);\n } else {\n return new Document(result);\n }\n}\n\nexport function replaceBlockInDocument({source, section, keyName, key, newContent}: {\n source: string,\n section: string,\n keyName: string,\n key: string,\n newContent: string\n}) {\n const {yamlDoc, sectionNode} = getSectionNodeAndDocumentFromSource({source, section});\n const newItem = yamlDoc.createNode(parseDocument(newContent));\n if (!sectionNode) {\n return undefined;\n }\n\n extractBlockFromDocument({\n yamlDoc: sectionNode, keyName, key, callback(oldValue) {\n restoreCommentsInBlock(\n oldValue as YAMLMap<{ value: string }, Node>,\n newItem as YAMLMap<{ value: string }, Node>\n );\n\n // replace the old value with the new value\n return newItem;\n }\n });\n\n return yamlDoc.toString(TOSTRING_OPTIONS);\n}\n\n/**\n * keep comments from old plugin property in the new\n * @param oldProperty \n * @param newProperty \n */\nfunction restoreCommentsInBlock(oldProperty: YAMLMap<{ value: string }, Node>, newProperty: YAMLMap<{ value: string }, Node>) {\n for (const oldProp of oldProperty.items) {\n for (const newProp of newProperty.items) {\n if (\n oldProp.key.value === newProp.key.value &&\n newProp.value &&\n newProp.value.comment === undefined\n ) {\n newProp.value.comment = oldProp.value?.comment;\n break;\n }\n }\n }\n}\n\nexport function swapBlocks({source, section, key1, key2, keyName}: {\n source: string,\n section: string,\n key1: string,\n key2: string,\n keyName?: string\n}) {\n if (!keyName) {\n keyName = \"id\";\n }\n const {yamlDoc, sectionNode} = getSectionNodeAndDocumentFromSource({source, section});\n if (!sectionNode) {\n return source;\n }\n const task1 = extractBlockFromDocument({yamlDoc: sectionNode, keyName, key: key1});\n const task2 = extractBlockFromDocument({yamlDoc: sectionNode, keyName, key: key2});\n\n if (!task1 || !task2) {\n return source;\n }\n\n visit(yamlDoc, {\n Pair(_, pair: any) {\n if (\n pair.key.value === \"dependsOn\" &&\n pair.value.items.map((e: any) => e.value).includes(key1)\n ) {\n throw {\n message: \"dependency task\",\n messageOptions: {taskId: key2},\n };\n }\n },\n });\n\n extractBlockFromDocument({yamlDoc: sectionNode, keyName, key: key1, callback: () => task2});\n extractBlockFromDocument({yamlDoc: sectionNode, keyName, key: key2, callback: () => task1});\n\n return yamlDoc.toString(TOSTRING_OPTIONS);\n}\n\nexport function insertBlock({source,\n section,\n newBlock,\n refKey,\n position,\n parentKey,\n keyName,\n subBlockName\n}: {\n source: string,\n section: string,\n newBlock: string,\n refKey?: string,\n position?: \"before\" | \"after\",\n parentKey?: string,\n keyName?: string,\n subBlockName?: string,\n}) {\n if (!keyName) {\n keyName = \"id\";\n }\n if (!subBlockName) {\n subBlockName = section;\n }\n if (!position) {\n position = \"after\";\n }\n const {yamlDoc, sectionNode} = getSectionNodeAndDocumentFromSource({source, section});\n const newPropNode = yamlDoc.createNode(parseDocument(newBlock));\n\n const parentNode: any = parentKey && sectionNode\n ? extractBlockFromDocument({yamlDoc: sectionNode, keyName, key: parentKey})?.contents\n : sectionNode;\n if (!parentNode && parentKey) {\n throw new Error(`Parent block with ID ${parentKey} not found in ${section}`);\n }\n\n // if the container (parentNode) is missing\n // - an entire section\n // - a tasks entry in a flowable task\n // - a condition section in a trigger\n if (!parentNode || (parentKey && !parentNode.get(subBlockName))) {\n const propertyList = new YAMLSeq();\n propertyList.items.push(newPropNode);\n const blocks = new Pair(new Scalar(subBlockName), propertyList);\n if (!parentKey) {\n yamlDoc.contents?.items.push(blocks);\n return yamlDoc.toString(TOSTRING_OPTIONS);\n }\n\n if (parentNode && !parentNode.get(subBlockName)) {\n parentNode.items.push(blocks);\n return yamlDoc.toString(TOSTRING_OPTIONS);\n }\n }\n\n const protectedReferenceKey = refKey\n ?? (position === \"after\"\n ? getLastBlock({source, section, parentKey: parentKey, keyName, subBlockName})\n : parentNode.items?.[0]?.get(keyName));\n\n let added = false;\n visit(parentNode, {\n Seq(_, seq) {\n for (const map of seq.items) {\n if (isMap(map)) {\n if (added) {\n return visit.BREAK;\n }\n if (map.get(keyName) === protectedReferenceKey) {\n const index = seq.items.indexOf(map);\n if (position === \"before\") {\n if (index === 0) {\n seq.items.unshift(newPropNode);\n } else {\n seq.items.splice(index, 0, newPropNode);\n }\n } else {\n if (index === seq.items.length - 1) {\n seq.items.push(newPropNode);\n } else {\n seq.items.splice(index + 1, 0, newPropNode);\n }\n }\n added = true;\n }\n }\n }\n },\n });\n return cleanMetadataDocument(yamlDoc).toString(TOSTRING_OPTIONS);\n}\n\nexport function deleteBlock({source, section, key, keyName}: {\n source: string,\n section: string,\n key: string,\n keyName?: string\n}) {\n if (!keyName) {\n keyName = \"id\";\n }\n const yamlDoc = parseDocument(source) as any;\n visit(yamlDoc, {\n Pair(_, pair: any) {\n if (pair.key.value === section) {\n visit(pair.value, {\n Map(_, map) {\n if (map.get(keyName) === key) {\n return visit.REMOVE;\n }\n },\n });\n }\n },\n });\n\n // delete empty sections\n visit(yamlDoc, {\n Pair(_, pair) {\n if (isSeq(pair.value) && pair.value.items.length === 0) {\n return visit.REMOVE;\n }\n },\n });\n return yamlDoc.toString(TOSTRING_OPTIONS);\n}\n\nfunction isChildrenOf(source: string, section: string, parentKey: string, childKey: string, keyName: string) {\n const {sectionNode} = getSectionNodeAndDocumentFromSource({source, section});\n if (!sectionNode) {\n return false;\n }\n\n const parentDoc = extractBlockFromDocument({yamlDoc: sectionNode, keyName, key: parentKey});\n\n if (!parentDoc) {\n return false;\n }\n\n let isChildrenOf = false;\n visit(parentDoc, {\n Map(_, map) {\n if (map.get(keyName) === childKey) {\n isChildrenOf = true;\n return visit.BREAK;\n }\n },\n });\n return isChildrenOf;\n}\n\nexport function isParentChildrenRelation({source, sections, key1, key2, keyName}:\n { source: string, sections: string[], key1: string, key2: string, keyName: string }) {\n if (!keyName) {\n keyName = \"id\";\n }\n return sections.reduce((acc, section) => (\n acc\n || isChildrenOf(source, section, key2, key1, keyName)\n || isChildrenOf(source, section, key1, key2, keyName)\n ), false);\n}\n\nexport function replaceIdAndNamespace(source: string, id: string, namespace: string) {\n return source\n .replace(/^(id\\s*:\\s*([\"']?))\\S*/m, \"$1\" + id + \"$2\")\n .replace(/^(namespace\\s*:\\s*([\"']?))\\S*/m, \"$1\" + namespace + \"$2\");\n}\n\nexport function checkBlockAlreadyExists({source, section, newContent, keyName}:\n { source: string, section: string, newContent: string, keyName: string }) {\n const {sectionNode} = getSectionNodeAndDocumentFromSource({source, section});\n const parsedProp = parse(newContent);\n if (!sectionNode) {\n return undefined\n }\n let propExists = false;\n visit(sectionNode, {\n Map(_, map) {\n if (map.get(keyName) === parsedProp[keyName]) {\n propExists = true;\n return visit.BREAK;\n }\n },\n });\n return propExists ? parsedProp[keyName] : undefined\n}\n\nexport function getLastBlock({source, section, parentKey, keyName, subBlockName}: {\n source: string,\n section: string,\n parentKey?: string,\n keyName?: string,\n subBlockName?: string\n}\n): string | undefined {\n if (!keyName) {\n keyName = \"id\";\n }\n if (!subBlockName) {\n subBlockName = section;\n }\n\n if (parentKey) {\n const {sectionNode} = getSectionNodeAndDocumentFromSource({source, section});\n if (!sectionNode) {\n return undefined\n }\n const parentProperty = extractBlockFromDocument({yamlDoc: sectionNode, keyName, key: parentKey}) as Document<YAMLMap<{\n value: string;\n }, YAMLSeq<YAMLMap>>>;\n\n if (!parentProperty?.contents?.items) {\n throw new Error(`Parent with ID ${parentKey} not found`);\n }\n\n const subBlocksNode = parentProperty.contents.items.find((pair: any) => pair.key.value === subBlockName);\n\n if (!subBlocksNode || (subBlocksNode.value && \"value\" in subBlocksNode.value && subBlocksNode.value.value === null)) {\n return undefined;\n }\n\n return subBlocksNode.value?.items[subBlocksNode.value.items.length - 1].get(keyName) as string;\n }\n\n const parsed = parse(source);\n\n return parsed.tasks?.[parsed?.tasks?.length - 1]?.id;\n}\n\nexport function updateMetadata(source: string, metadata: Record<string, any>) {\n // TODO: check how to keep comments\n const yamlDoc = parseDocument(source) as any;\n\n if (!yamlDoc?.contents?.items) {\n return source;\n }\n\n for (const property in metadata) {\n if (\n yamlDoc.contents.items.find((item: any) => item.key.value === property)\n ) {\n yamlDoc.contents.items.find(\n (item: any) => item.key.value === property\n ).value = metadata[property];\n } else {\n yamlDoc.contents.items.push(\n new Pair(new Scalar(property), metadata[property])\n );\n }\n }\n return cleanMetadataDocument(yamlDoc).toString(TOSTRING_OPTIONS);\n}\n\nexport const FLOW_SECTION_KEYS = [\n \"tasks\",\n \"triggers\",\n \"errors\",\n \"finally\",\n \"afterExecution\",\n \"pluginDefaults\",\n] as const\n\nexport type FlowSectionKeys = typeof FLOW_SECTION_KEYS[number];\n\nexport const ORDERED_FLOW_ROOT_KEYS = [\n \"id\",\n \"namespace\",\n \"description\",\n \"retry\",\n \"labels\",\n \"inputs\",\n \"variables\",\n ...FLOW_SECTION_KEYS,\n \"taskDefaults\",\n \"concurrency\",\n \"outputs\",\n \"disabled\",\n] as const\n\nexport type FlowRootKeys = typeof ORDERED_FLOW_ROOT_KEYS[number];\n\nfunction isItemTruthy(item: Node) {\n if (isSeq(item) || isMap(item)) {\n return item.items.length > 0\n } else {\n return true\n }\n}\n\nfunction cleanMetadataDocument(yamlDoc: Document<YAMLMap<{ value: string }, Node | YAMLSeq>>) {\n if (!yamlDoc?.contents?.items) {\n return yamlDoc;\n }\n const updatedItems = [];\n for (const prop of ORDERED_FLOW_ROOT_KEYS) {\n const item = yamlDoc.contents?.items.find(\n (e: any) => e.key.value === prop\n );\n if (item?.value && isItemTruthy(item.value)) {\n updatedItems.push(item);\n }\n }\n yamlDoc.contents.items = updatedItems;\n return yamlDoc;\n}\n\nexport function cleanMetadata(source: string) {\n const yamlDoc = parseDocument(source) as Document<YAMLMap<{ value: string }, Node>>;\n const cleanedYamlDoc = cleanMetadataDocument(yamlDoc);\n return cleanedYamlDoc.toString(TOSTRING_OPTIONS);\n}\n\nexport function getMetadata(source: string) {\n const yamlDoc = parseDocument(source) as any;\n const metadata: Record<string, any> = {};\n for (const item of yamlDoc.contents.items) {\n if (!FLOW_SECTION_KEYS.includes(item.key.value)) {\n metadata[item.key.value] =\n isMap(item.value) || isSeq(item.value)\n ? item.value.toJSON()\n : item.value.value;\n }\n }\n return metadata;\n}\n\nexport function deleteMetadata(source: any, metadata: any) {\n const yamlDoc = parseDocument(source) as any;\n\n if (!yamlDoc.contents.items) {\n return source;\n }\n\n const item = yamlDoc.contents.items.find((e: any) => e.key.value === metadata);\n if (item) {\n yamlDoc.contents.items.splice(yamlDoc.contents.items.indexOf(item), 1);\n }\n\n return yamlDoc.toString(TOSTRING_OPTIONS);\n}\n\nexport function flowHaveTasks(source: string) {\n const {sectionNode} = getSectionNodeAndDocumentFromSource({source, section: \"tasks\"});\n if (!sectionNode) {\n return false;\n }\n return isSeq(sectionNode) && sectionNode.items.length > 0;\n}\n\nexport function extractPluginDefault(source: string, pluginType: string) {\n return extractBlock({source, section: \"pluginDefaults\", key: pluginType, keyName: \"type\"});\n}\n\nexport function replacePluginDefaultsInDocument(source: string, pluginType: string, newContent: string) {\n return replaceBlockInDocument({source, section: \"pluginDefaults\", keyName: \"type\", key: pluginType, newContent});\n}\n\nexport function deletePluginDefaults(source: string, pluginType: string) {\n return deleteBlock({source, section: \"pluginDefaults\", key: pluginType, keyName: \"type\"});\n}\n\nexport function insertErrorInFlowable(source: string, errorTask: string, flowableTask: string) {\n const yamlDoc = parseDocument(source) as any;\n const newErrorNode = yamlDoc.createNode(parseDocument(errorTask));\n let added = false;\n visit(yamlDoc, {\n Map(_, map) {\n if (added) {\n return visit.BREAK;\n }\n if (map.get(\"id\") === flowableTask) {\n if (map.items.find((item: any) => item.key.value === \"errors\")) {\n (\n map.items?.find((item: any) => item.key.value === \"errors\")\n ?.value as any\n )?.items.push(newErrorNode);\n } else {\n const errorsSeq = new YAMLSeq();\n errorsSeq.items.push(newErrorNode);\n const errors = new Pair(new Scalar(\"errors\"), errorsSeq);\n map.items.push(errors);\n }\n added = true;\n return map;\n }\n },\n });\n return yamlDoc.toString(TOSTRING_OPTIONS);\n}\n\n/**\n * Specify a source yaml doc, the field to extract recursively in every map of the doc and optionally \n * a predicate to define which paths should be taken into account `parentPathPredicate` \n * will take a single argument which is the path of each parent property starting from the root doc (joined with \".\")\n * \"my.parent.task\" will mean that the field was retrieved in my -> parent -> task path.\n */\nexport function extractFieldFromMaps<T extends string>(\n source: string,\n fieldName: T,\n parentPathPredicate = (_: any, __?: any) => true,\n valuePredicate = (_: any) => true\n): any[] {\n const yamlDoc = parseDocument(source) as any;\n const maps: any[] = [];\n visit(yamlDoc, {\n Map(_, map, parent) {\n if (\n parentPathPredicate(\n parent\n .filter((p) => isPair(p))\n .map((p: any) => p?.key?.value)\n .join(\".\")\n ) &&\n map.items\n ) {\n for (const item of map.items as any[]) {\n if (item?.key?.value === fieldName) {\n\n const fieldValue = item?.value?.value ?? item.value?.items;\n if (valuePredicate(fieldValue)) {\n maps.push({\n [fieldName]: fieldValue,\n range: map.range,\n });\n }\n }\n }\n }\n },\n });\n return maps;\n}\n\nfunction extractAllTypes(source: string, validTypes: string[] = []): {\n type: string;\n range: [number, number, number]\n}[] {\n return extractFieldFromMaps(source, \"type\", () => true, (value) =>\n validTypes.some((t) => t === value)\n );\n}\n\n\n/**\n * Get task type at cursor position.\n * Useful to display/update the live docs\n */\nexport function getTypeAtPosition(\n source: string,\n position: { lineNumber: number; column: number },\n validTypes: any\n) {\n const types = extractAllTypes(source, validTypes);\n\n const lineCounter = new LineCounter();\n parseDocument(source, {lineCounter});\n const cursorIndex =\n lineCounter.lineStarts[position.lineNumber - 1] + position.column;\n\n for (const type of types.reverse()) {\n if (cursorIndex >= type.range[0]) {\n return type.type;\n }\n }\n return null;\n}\n\nconst TOSTRING_OPTIONS = {lineWidth: 0};\n\nconst yamlKeyCapture = \"([^:\\\\n]+): *\";\nconst indentAndYamlKeyCapture = new RegExp(\n `(( *)(?:${yamlKeyCapture})?)[^\\\\n]*?$`\n);\n\nfunction getParentKeyByChildIndent(\n stringToSearch: string,\n indent: number\n): { key: string; valueStartIndex: number } | undefined {\n if (indent < 2) {\n return undefined;\n }\n\n const matches = stringToSearch.matchAll(\n new RegExp(`(?<! ) {${indent - 2}}(?! )${yamlKeyCapture}`, \"g\")\n );\n const lastMatch = [...matches].pop();\n if (lastMatch === undefined) {\n return undefined;\n }\n return {\n key: lastMatch[1],\n valueStartIndex: lastMatch.index + lastMatch[0].length,\n };\n}\n\nfunction extractIndentAndMaybeYamlKey(stringToTest: string): {\n indent: number;\n yamlKey: string | undefined;\n valueStartIndex: number | undefined;\n} | undefined {\n const exec = indentAndYamlKeyCapture.exec(stringToTest);\n if (exec === null) {\n return undefined;\n }\n\n const [stringBeforeValue, indent, yamlKey]: [\n string,\n string,\n string | undefined\n ] = [exec[1], exec[2], exec[3]];\n return {\n indent: indent.length,\n yamlKey,\n valueStartIndex:\n yamlKey === undefined\n ? undefined\n : exec.index + stringBeforeValue.length,\n };\n}\n\nexport type YamlElement = {\n key?: string;\n value: Record<string, any>;\n parents: Record<string, any>[];\n range?: [number, number, number];\n};\n\nexport function localizeElementAtIndex(source: string, indexInSource: number): YamlElement {\n const tillCursor = source.substring(0, indexInSource);\n\n const indentAndYamlKey: any = extractIndentAndMaybeYamlKey(tillCursor);\n let {yamlKey} = indentAndYamlKey;\n const {indent} = indentAndYamlKey;\n // We search in previous keys to find the parent key\n let valueStartIndex;\n if (yamlKey === undefined) {\n const parentKeyExtract = getParentKeyByChildIndent(\n tillCursor,\n indent\n );\n yamlKey = parentKeyExtract?.key;\n valueStartIndex = parentKeyExtract?.valueStartIndex;\n } else {\n valueStartIndex =\n tillCursor.lastIndexOf(yamlKey + \":\") + yamlKey.length + 1;\n }\n\n const yamlDoc = parseDocument(source) as any;\n const elements: any = [];\n\n visit(yamlDoc, {\n Pair(_: any, pair: any, parents: readonly any[]) {\n if (pair.value?.range !== undefined && pair.key.value === yamlKey) {\n const beforeElement = source.substring(0, pair.value.range[0]);\n elements.push({\n parents: parents\n .filter((p) => isMap(p))\n .map((p) => p.toJS(yamlDoc)),\n key: pair.key.value,\n value: pair.value.toJS(yamlDoc),\n range: [\n pair.value.range[0] -\n (beforeElement.length -\n beforeElement.replaceAll(/\\s*$/g, \"\").length),\n ...pair.value.range.slice(1),\n ],\n });\n }\n },\n });\n\n const filter = elements.filter(\n (map: any) =>\n map.range[0] <= valueStartIndex && valueStartIndex <= map.range[2]\n );\n return filter.sort((a: any, b: any) => b.range[0] - a.range[0])?.[0];\n}\n\n// CHARTS for dashboard\n\nexport function getAllCharts(source: string) {\n const yamlDoc = parseDocument(source) as any;\n const charts: string[] = [];\n\n visit(yamlDoc, {\n Map(_, map) {\n if (map.items) {\n for (const item of map.items as any[]) {\n if (item?.key?.value === \"charts\" && item?.value?.items) {\n for (const chartItem of item.value.items) {\n charts.push(chartItem.toJSON());\n }\n }\n }\n }\n },\n });\n\n return charts;\n}\n\nexport function getChartAtPosition(source: string, position: { lineNumber: number; column: number }) {\n const yamlDoc = parseDocument(source) as any;\n const lineCounter = new LineCounter();\n parseDocument(source, {lineCounter});\n const cursorIndex =\n lineCounter.lineStarts[position.lineNumber - 1] + position.column;\n\n let chart: any;\n visit(yamlDoc, {\n Map(_, map) {\n if (map.items) {\n for (const item of map.items as any[]) {\n if (item?.key?.value === \"charts\") {\n if (item?.value?.items) {\n for (const chartItem of item.value.items) {\n if (\n chartItem.range[0] <= cursorIndex &&\n chartItem.range[1] >= cursorIndex\n ) {\n chart = chartItem;\n return visit.BREAK;\n }\n }\n }\n }\n }\n }\n },\n });\n\n return chart ? chart.toJSON() : null;\n}\n"],"names":["parse","item","throwIfError","load","e","stringify","clonedValue","dump","transform","SORT_FIELDS","sort","value","a","b","aIndex","bIndex","aIndexProtected","bIndexProtected","pairsToMap","pairs","map","YAMLMap","isPair","pair","r","accumulator","getSectionNodeAndDocumentFromSource","source","section","yamlDoc","parseDocument","sectionNode","getSectionFromDocument","_a","extractBlock","key","keyName","blockNode","extractBlockFromDocument","Document","TOSTRING_OPTIONS","callback","find","element","isMap","isSeq","result","replaceBlockInDocument","newContent","newItem","oldValue","restoreCommentsInBlock","oldProperty","newProperty","oldProp","newProp","swapBlocks","key1","key2","task1","task2","visit","_","insertBlock","newBlock","refKey","position","parentKey","subBlockName","newPropNode","parentNode","propertyList","YAMLSeq","blocks","Pair","Scalar","_b","protectedReferenceKey","getLastBlock","_d","_c","added","seq","index","cleanMetadataDocument","deleteBlock","isChildrenOf","childKey","parentDoc","isParentChildrenRelation","sections","acc","replaceIdAndNamespace","id","namespace","checkBlockAlreadyExists","parsedProp","propExists","parentProperty","subBlocksNode","parsed","_e","updateMetadata","metadata","property","FLOW_SECTION_KEYS","ORDERED_FLOW_ROOT_KEYS","isItemTruthy","updatedItems","prop","cleanMetadata","getMetadata","deleteMetadata","flowHaveTasks","extractPluginDefault","pluginType","replacePluginDefaultsInDocument","deletePluginDefaults","insertErrorInFlowable","errorTask","flowableTask","newErrorNode","errorsSeq","errors","extractFieldFromMaps","fieldName","parentPathPredicate","__","valuePredicate","maps","parent","p","fieldValue","extractAllTypes","validTypes","t","getTypeAtPosition","types","lineCounter","LineCounter","cursorIndex","type","yamlKeyCapture","indentAndYamlKeyCapture","getParentKeyByChildIndent","stringToSearch","indent","lastMatch","extractIndentAndMaybeYamlKey","stringToTest","exec","stringBeforeValue","yamlKey","localizeElementAtIndex","indexInSource","tillCursor","indentAndYamlKey","valueStartIndex","parentKeyExtract","elements","parents","beforeElement","getAllCharts","charts","chartItem","getChartAtPosition","chart"],"mappings":";;AAgBgB,SAAAA,EAAeC,GAAeC,IAAe,IAAqB;AAC1E,MAAAD,MAAS;AAET,QAAA;AACA,aAAOE,EAAKF,CAAI;AAAA,aACXG,GAAG;AACR,UAAIF,EAAoB,OAAAE;AACjB;AAAA,IAAA;AAEf;AAEO,SAASC,GAAUJ,GAAW;AAC7B,MAAAA,MAAS,OAAkB,QAAA;AAEzB,QAAAK,IAAc,gBAAgBL,CAAI;AACxC,gBAAOK,EAAY,SAEZC,EAAKC,EAAUF,CAAW,GAAG;AAAA,IAChC,WAAW;AAAA,IACX,cAAc;AAAA,IACd,aAAa;AAAA,EAAA,CAChB;AACL;AAEA,MAAMG,IAAc;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AAEO,SAASC,EAAKC,GAA4B;AAC7C,SAAO,OAAO,KAAKA,CAAK,EACnB,KAAK,CAACC,GAAGC,MAAM;AACN,UAAAC,IAASL,EAAY,QAAQG,CAAC,GAC9BG,IAASN,EAAY,QAAQI,CAAC,GAC9BG,IAAkBF,KAAU,IAAIA,IAAS,OAAO,kBAChDG,IAAkBF,KAAU,IAAIA,IAAS,OAAO;AAEtD,WAAOC,IAAkBC;AAAA,EAAA,CAC5B;AACT;AAEO,SAASC,GAAWC,GAAe;AAChC,QAAAC,IAAM,IAAIC,EAAQ;AACxB,MAAI,CAACC,EAAOH,KAAA,gBAAAA,EAAQ,EAAE;AACX,WAAAC;AAGX,aAAWG,KAAQJ;AACf,IAAAC,EAAI,IAAIG,CAAI;AAET,SAAAH;AACX;AAEA,SAASZ,EAAUG,GAAiB;AAChC,SAAIA,aAAiB,QACVA,EAAM,IAAI,CAACa,MACPhB,EAAUgB,CAAC,CACrB,IACM,OAAOb,KAAU,YAAYA,aAAiB,SAC9CA,IACAA,aAAiB,SACjBD,EAAKC,CAAK,EAAE,OAAO,CAACc,GAAaD,OAChCb,EAAMa,CAAC,MAAM,WACbC,EAAYD,CAAC,IAAIhB,EAAUG,EAAMa,CAAC,CAAC,IAGhCC,IACR,uBAAO,OAAO,CAAA,CAAE,CAAC,IAGjBd;AACX;AAEA,SAASe,EAAoC,EAAC,QAAAC,GAAQ,SAAAC,KAGnD;AACO,QAAAC,IAAUC,EAAcH,CAAM,GAC9BI,IAAcC,EAAuB,EAAC,SAAAH,GAAS,SAAAD,GAAQ;AACtD,SAAA,EAAC,SAAAC,GAAS,aAAAE,EAAW;AAChC;AAEA,SAASC,EAAuB,EAAC,SAAAH,GAAS,SAAAD,KAInC;;AACG,QAAAG,KAAcE,IAAAJ,EAAQ,aAAR,gBAAAI,EAAkB,MAAM;AAAA,IACxC,CAAC7B,MAAMA,EAAE,IAAI,UAAUwB;AAAA;AAE3B,SAAOG,KAAA,gBAAAA,EAAa;AACxB;AAEO,SAASG,EAAa,EAAC,QAAAP,GAAQ,SAAAC,GAAS,KAAAO,GAAK,SAAAC,KAKjD;AACC,EAAKA,MACSA,IAAA;AAEd,QAAM,EAAC,aAAAL,EAAW,IAAIL,EAAoC,EAAC,QAAAC,GAAQ,SAAAC,GAAQ;AAC3E,MAAI,CAACG;AACM;AAGX,QAAMM,IAAYC,EAAyB;AAAA,IACvC,SAASP;AAAA,IACT,SAAAK;AAAA,IACA,KAAAD;AAAA,EAAA,CACH;AAEM,SAAAE,MAAc,SACf,SACA,IAAIE,EAASF,CAAS,EAAE,SAASG,CAAgB;AAC3D;AAEA,SAASF,EAAyB,EAAC,SAAAT,GAAS,SAAAO,GAAS,KAAAD,GAAK,UAAAM,KASvD;AACC,WAASC,EAAKC,GAA6B;AACvC,QAAKA,GAGD;AAAA,UAAAC,EAAwCD,CAAO,KAC3CA,EAAQ,IAAI,MAAM,MAAM,UAAaR,MAAQQ,EAAQ,IAAIP,CAAO;AACzD,eAAAK,IAAWA,EAASE,CAAO,IAAIA;AAG9C,UAAIE,EAAuBF,CAAO,KAC3BC,EAA+BD,CAAO;AACzC,mBAAW,CAACR,GAAKlC,CAAI,KAAK0C,EAAQ,MAAM,WAAW;AACzCG,gBAAAA,IAASF,EAAM3C,CAAI,IACnByC,EAAKzC,CAAI,IACTyC,EAAKzC,EAAK,SAAS,MAAS;AAElC,cAAI6C;AACA,gBAAIL;AACA,cAAIG,EAAMD,CAAO,KAAKrB,EAAgCrB,CAAI,IAE9C0C,EAAA,IAAI1C,EAAK,KAAK6C,CAAM,IAEpBH,EAAA,MAAMR,CAAG,IAAIW;AAAAA,qBAElBA;AACAA,qBAAAA;AAAAA;AAAAA,QAEf;AAAA;AAAA,EAER;AAGE,QAAAA,IAASJ,EAAKb,CAAO;AAE3B,MAAIiB,MAAW;AAIf,WAAIL,IACO,IAAIF,EAASO,CAAM,IAEnB,IAAIP,EAASO,CAAM;AAElC;AAEO,SAASC,EAAuB,EAAC,QAAApB,GAAQ,SAAAC,GAAS,SAAAQ,GAAS,KAAAD,GAAK,YAAAa,KAMpE;AACO,QAAA,EAAC,SAAAnB,GAAS,aAAAE,EAAW,IAAIL,EAAoC,EAAC,QAAAC,GAAQ,SAAAC,GAAQ,GAC9EqB,IAAUpB,EAAQ,WAAWC,EAAckB,CAAU,CAAC;AAC5D,MAAKjB;AAIoB,WAAAO,EAAA;AAAA,MACrB,SAASP;AAAA,MAAa,SAAAK;AAAA,MAAS,KAAAD;AAAA,MAAK,SAASe,GAAU;AACnD,eAAAC;AAAA,UACID;AAAA,UACAD;AAAA,QACJ,GAGOA;AAAA,MAAA;AAAA,IACX,CACH,GAEMpB,EAAQ,SAASW,CAAgB;AAC5C;AAOA,SAASW,EAAuBC,GAA+CC,GAA+C;;AAC/G,aAAAC,KAAWF,EAAY;AACnB,eAAAG,KAAWF,EAAY;AAE1B,UAAAC,EAAQ,IAAI,UAAUC,EAAQ,IAAI,SAClCA,EAAQ,SACRA,EAAQ,MAAM,YAAY,QAC5B;AACU,QAAAA,EAAA,MAAM,WAAUtB,IAAAqB,EAAQ,UAAR,gBAAArB,EAAe;AACvC;AAAA,MAAA;AAIhB;AAEO,SAASuB,GAAW,EAAC,QAAA7B,GAAQ,SAAAC,GAAS,MAAA6B,GAAM,MAAAC,GAAM,SAAAtB,KAMtD;AACC,EAAKA,MACSA,IAAA;AAER,QAAA,EAAC,SAAAP,GAAS,aAAAE,EAAW,IAAIL,EAAoC,EAAC,QAAAC,GAAQ,SAAAC,GAAQ;AACpF,MAAI,CAACG;AACM,WAAAJ;AAEL,QAAAgC,IAAQrB,EAAyB,EAAC,SAASP,GAAa,SAAAK,GAAS,KAAKqB,GAAK,GAC3EG,IAAQtB,EAAyB,EAAC,SAASP,GAAa,SAAAK,GAAS,KAAKsB,GAAK;AAE7E,SAAA,CAACC,KAAS,CAACC,IACJjC,KAGXkC,EAAMhC,GAAS;AAAA,IACX,KAAKiC,GAAGvC,GAAW;AACf,UACIA,EAAK,IAAI,UAAU,eACnBA,EAAK,MAAM,MAAM,IAAI,CAACnB,MAAWA,EAAE,KAAK,EAAE,SAASqD,CAAI;AAEjD,cAAA;AAAA,UACF,SAAS;AAAA,UACT,gBAAgB,EAAC,QAAQC,EAAI;AAAA,QACjC;AAAA,IACJ;AAAA,EACJ,CACH,GAEwBpB,EAAA,EAAC,SAASP,GAAa,SAAAK,GAAS,KAAKqB,GAAM,UAAU,MAAMG,GAAM,GACjEtB,EAAA,EAAC,SAASP,GAAa,SAAAK,GAAS,KAAKsB,GAAM,UAAU,MAAMC,GAAM,GAEnF9B,EAAQ,SAASW,CAAgB;AAC5C;AAEO,SAASuB,GAAY;AAAA,EAAC,QAAApC;AAAA,EACzB,SAAAC;AAAA,EACA,UAAAoC;AAAA,EACA,QAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,SAAA/B;AAAA,EACA,cAAAgC;AACJ,GASG;;AACC,EAAKhC,MACSA,IAAA,OAETgC,MACcA,IAAAxC,IAEdsC,MACUA,IAAA;AAET,QAAA,EAAC,SAAArC,GAAS,aAAAE,EAAW,IAAIL,EAAoC,EAAC,QAAAC,GAAQ,SAAAC,GAAQ,GAC9EyC,IAAcxC,EAAQ,WAAWC,EAAckC,CAAQ,CAAC,GAExDM,IAAkBH,KAAapC,KAC/BE,IAAAK,EAAyB,EAAC,SAASP,GAAa,SAAAK,GAAS,KAAK+B,GAAU,MAAxE,gBAAAlC,EAA2E,WAC3EF;AACF,MAAA,CAACuC,KAAcH;AACf,UAAM,IAAI,MAAM,wBAAwBA,CAAS,iBAAiBvC,CAAO,EAAE;AAO/E,MAAI,CAAC0C,KAAeH,KAAa,CAACG,EAAW,IAAIF,CAAY,GAAI;AACvD,UAAAG,IAAe,IAAIC,EAAQ;AACpB,IAAAD,EAAA,MAAM,KAAKF,CAAW;AACnC,UAAMI,IAAS,IAAIC,EAAK,IAAIC,EAAOP,CAAY,GAAGG,CAAY;AAC9D,QAAI,CAACJ;AACO,cAAAS,IAAA/C,EAAA,aAAA,QAAA+C,EAAU,MAAM,KAAKH,IACtB5C,EAAQ,SAASW,CAAgB;AAG5C,QAAI8B,KAAc,CAACA,EAAW,IAAIF,CAAY;AAC/B,aAAAE,EAAA,MAAM,KAAKG,CAAM,GACrB5C,EAAQ,SAASW,CAAgB;AAAA,EAC5C;AAGJ,QAAMqC,IAAwBZ,MACtBC,MAAa,UACXY,EAAa,EAAC,QAAAnD,GAAQ,SAAAC,GAAS,WAAAuC,GAAsB,SAAA/B,GAAS,cAAAgC,EAAA,CAAa,KAC3EW,KAAAC,IAAAV,EAAW,UAAX,gBAAAU,EAAmB,OAAnB,gBAAAD,EAAuB,IAAI3C;AAErC,MAAI6C,IAAQ;AACZ,SAAApB,EAAMS,GAAY;AAAA,IACd,IAAIR,GAAGoB,GAAK;AACG,iBAAA9D,KAAO8D,EAAI;AACd,YAAAtC,EAAMxB,CAAG,GAAG;AACZ,cAAI6D;AACA,mBAAOpB,EAAM;AAEjB,cAAIzC,EAAI,IAAIgB,CAAO,MAAMyC,GAAuB;AAC5C,kBAAMM,IAAQD,EAAI,MAAM,QAAQ9D,CAAG;AACnC,YAAI8C,MAAa,WACTiB,MAAU,IACND,EAAA,MAAM,QAAQb,CAAW,IAE7Ba,EAAI,MAAM,OAAOC,GAAO,GAAGd,CAAW,IAGtCc,MAAUD,EAAI,MAAM,SAAS,IACzBA,EAAA,MAAM,KAAKb,CAAW,IAE1Ba,EAAI,MAAM,OAAOC,IAAQ,GAAG,GAAGd,CAAW,GAG1CY,IAAA;AAAA,UAAA;AAAA,QACZ;AAAA,IAER;AAAA,EACJ,CACH,GACMG,EAAsBvD,CAAO,EAAE,SAASW,CAAgB;AACnE;AAEO,SAAS6C,EAAY,EAAC,QAAA1D,GAAQ,SAAAC,GAAS,KAAAO,GAAK,SAAAC,KAKhD;AACC,EAAKA,MACSA,IAAA;AAER,QAAAP,IAAUC,EAAcH,CAAM;AACpC,SAAAkC,EAAMhC,GAAS;AAAA,IACX,KAAKiC,GAAGvC,GAAW;AACX,MAAAA,EAAK,IAAI,UAAUK,KACnBiC,EAAMtC,EAAK,OAAO;AAAA,QACd,IAAIuC,GAAG1C,GAAK;AACR,cAAIA,EAAI,IAAIgB,CAAO,MAAMD;AACrB,mBAAO0B,EAAM;AAAA,QACjB;AAAA,MACJ,CACH;AAAA,IACL;AAAA,EACJ,CACH,GAGDA,EAAMhC,GAAS;AAAA,IACX,KAAKiC,GAAGvC,GAAM;AACN,UAAAsB,EAAMtB,EAAK,KAAK,KAAKA,EAAK,MAAM,MAAM,WAAW;AACjD,eAAOsC,EAAM;AAAA,IACjB;AAAA,EACJ,CACH,GACMhC,EAAQ,SAASW,CAAgB;AAC5C;AAEA,SAAS8C,EAAa3D,GAAgBC,GAAiBuC,GAAmBoB,GAAkBnD,GAAiB;AACzG,QAAM,EAAC,aAAAL,EAAW,IAAIL,EAAoC,EAAC,QAAAC,GAAQ,SAAAC,GAAQ;AAC3E,MAAI,CAACG;AACM,WAAA;AAGL,QAAAyD,IAAYlD,EAAyB,EAAC,SAASP,GAAa,SAAAK,GAAS,KAAK+B,GAAU;AAE1F,MAAI,CAACqB;AACM,WAAA;AAGX,MAAIF,IAAe;AACnB,SAAAzB,EAAM2B,GAAW;AAAA,IACb,IAAI1B,GAAG1C,GAAK;AACR,UAAIA,EAAI,IAAIgB,CAAO,MAAMmD;AACrBD,eAAAA,IAAe,IACRzB,EAAM;AAAA,IACjB;AAAA,EACJ,CACH,GACMyB;AACX;AAEO,SAASG,GAAyB,EAAC,QAAA9D,GAAQ,UAAA+D,GAAU,MAAAjC,GAAM,MAAAC,GAAM,SAAAtB,KACiB;AACrF,SAAKA,MACSA,IAAA,OAEPsD,EAAS,OAAO,CAACC,GAAK/D,MACzB+D,KACGL,EAAa3D,GAAQC,GAAS8B,GAAMD,GAAMrB,CAAO,KACjDkD,EAAa3D,GAAQC,GAAS6B,GAAMC,GAAMtB,CAAO,GACrD,EAAK;AACZ;AAEgB,SAAAwD,GAAsBjE,GAAgBkE,GAAYC,GAAmB;AAC1E,SAAAnE,EACF,QAAQ,2BAA2B,OAAOkE,IAAK,IAAI,EACnD,QAAQ,kCAAkC,OAAOC,IAAY,IAAI;AAC1E;AAEO,SAASC,GAAwB,EAAC,QAAApE,GAAQ,SAAAC,GAAS,YAAAoB,GAAY,SAAAZ,KACQ;AAC1E,QAAM,EAAC,aAAAL,EAAW,IAAIL,EAAoC,EAAC,QAAAC,GAAQ,SAAAC,GAAQ,GACrEoE,IAAahG,EAAMgD,CAAU;AACnC,MAAI,CAACjB;AACM;AAEX,MAAIkE,IAAa;AACjB,SAAApC,EAAM9B,GAAa;AAAA,IACf,IAAI+B,GAAG1C,GAAK;AACR,UAAIA,EAAI,IAAIgB,CAAO,MAAM4D,EAAW5D,CAAO;AAC1B,eAAA6D,IAAA,IACNpC,EAAM;AAAA,IACjB;AAAA,EACJ,CACH,GACMoC,IAAaD,EAAW5D,CAAO,IAAI;AAC9C;AAEO,SAAS0C,EAAa,EAAC,QAAAnD,GAAQ,SAAAC,GAAS,WAAAuC,GAAW,SAAA/B,GAAS,cAAAgC,KAO7C;;AAQlB,MAPKhC,MACSA,IAAA,OAETgC,MACcA,IAAAxC,IAGfuC,GAAW;AACX,UAAM,EAAC,aAAApC,EAAW,IAAIL,EAAoC,EAAC,QAAAC,GAAQ,SAAAC,GAAQ;AAC3E,QAAI,CAACG;AACM;AAEL,UAAAmE,IAAiB5D,EAAyB,EAAC,SAASP,GAAa,SAAAK,GAAS,KAAK+B,GAAU;AAI3F,QAAA,GAAClC,IAAAiE,KAAA,gBAAAA,EAAgB,aAAhB,QAAAjE,EAA0B;AAC3B,YAAM,IAAI,MAAM,kBAAkBkC,CAAS,YAAY;AAGrD,UAAAgC,IAAgBD,EAAe,SAAS,MAAM,KAAK,CAAC3E,MAAcA,EAAK,IAAI,UAAU6C,CAAY;AAEnG,WAAA,CAAC+B,KAAkBA,EAAc,SAAS,WAAWA,EAAc,SAASA,EAAc,MAAM,UAAU,SAIvGvB,IAAAuB,EAAc,UAAd,OAHI,SAGJvB,EAAqB,MAAMuB,EAAc,MAAM,MAAM,SAAS,GAAG,IAAI/D;AAAA,EAAO;AAGjF,QAAAgE,IAASpG,EAAM2B,CAAM;AAE3B,UAAO0E,KAAAtB,IAAAqB,EAAO,UAAP,gBAAArB,IAAeC,IAAAoB,KAAA,gBAAAA,EAAQ,UAAR,gBAAApB,EAAe,UAAS,OAAvC,gBAAAqB,EAA2C;AACtD;AAEgB,SAAAC,GAAe3E,GAAgB4E,GAA+B;;AAEpE,QAAA1E,IAAUC,EAAcH,CAAM;AAEhC,MAAA,GAACM,IAAAJ,KAAA,gBAAAA,EAAS,aAAT,QAAAI,EAAmB;AACb,WAAAN;AAGX,aAAW6E,KAAYD;AAEf,IAAA1E,EAAQ,SAAS,MAAM,KAAK,CAAC5B,MAAcA,EAAK,IAAI,UAAUuG,CAAQ,IAEtE3E,EAAQ,SAAS,MAAM;AAAA,MACnB,CAAC5B,MAAcA,EAAK,IAAI,UAAUuG;AAAA,IAAA,EACpC,QAAQD,EAASC,CAAQ,IAE3B3E,EAAQ,SAAS,MAAM;AAAA,MACnB,IAAI6C,EAAK,IAAIC,EAAO6B,CAAQ,GAAGD,EAASC,CAAQ,CAAC;AAAA,IACrD;AAGR,SAAOpB,EAAsBvD,CAAO,EAAE,SAASW,CAAgB;AACnE;AAEO,MAAMiE,IAAoB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,GAIaC,IAAyB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAGD;AAAA,EACH;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AAIA,SAASE,EAAa1G,GAAY;AAC9B,SAAI4C,EAAM5C,CAAI,KAAK2C,EAAM3C,CAAI,IAClBA,EAAK,MAAM,SAAS,IAEpB;AAEf;AAEA,SAASmF,EAAsBvD,GAA+D;;AACtF,MAAA,GAACI,IAAAJ,KAAA,gBAAAA,EAAS,aAAT,QAAAI,EAAmB;AACb,WAAAJ;AAEX,QAAM+E,IAAe,CAAC;AACtB,aAAWC,KAAQH,GAAwB;AACjC,UAAAzG,KAAO2E,IAAA/C,EAAQ,aAAR,gBAAA+C,EAAkB,MAAM;AAAA,MACjC,CAACxE,MAAWA,EAAE,IAAI,UAAUyG;AAAA;AAEhC,IAAI5G,KAAA,QAAAA,EAAM,SAAS0G,EAAa1G,EAAK,KAAK,KACtC2G,EAAa,KAAK3G,CAAI;AAAA,EAC1B;AAEJ,SAAA4B,EAAQ,SAAS,QAAQ+E,GAClB/E;AACX;AAEO,SAASiF,GAAcnF,GAAgB;AACpC,QAAAE,IAAUC,EAAcH,CAAM;AAE7B,SADgByD,EAAsBvD,CAAO,EAC9B,SAASW,CAAgB;AACnD;AAEO,SAASuE,GAAYpF,GAAgB;AAClC,QAAAE,IAAUC,EAAcH,CAAM,GAC9B4E,IAAgC,CAAC;AAC5B,aAAAtG,KAAQ4B,EAAQ,SAAS;AAChC,IAAK4E,EAAkB,SAASxG,EAAK,IAAI,KAAK,MAC1CsG,EAAStG,EAAK,IAAI,KAAK,IACnB2C,EAAM3C,EAAK,KAAK,KAAK4C,EAAM5C,EAAK,KAAK,IAC/BA,EAAK,MAAM,WACXA,EAAK,MAAM;AAGtB,SAAAsG;AACX;AAEgB,SAAAS,GAAerF,GAAa4E,GAAe;AACjD,QAAA1E,IAAUC,EAAcH,CAAM;AAEhC,MAAA,CAACE,EAAQ,SAAS;AACX,WAAAF;AAGL,QAAA1B,IAAO4B,EAAQ,SAAS,MAAM,KAAK,CAACzB,MAAWA,EAAE,IAAI,UAAUmG,CAAQ;AAC7E,SAAItG,KACQ4B,EAAA,SAAS,MAAM,OAAOA,EAAQ,SAAS,MAAM,QAAQ5B,CAAI,GAAG,CAAC,GAGlE4B,EAAQ,SAASW,CAAgB;AAC5C;AAEO,SAASyE,GAActF,GAAgB;AACpC,QAAA,EAAC,aAAAI,MAAeL,EAAoC,EAAC,QAAAC,GAAQ,SAAS,SAAQ;AACpF,SAAKI,IAGEc,EAAMd,CAAW,KAAKA,EAAY,MAAM,SAAS,IAF7C;AAGf;AAEgB,SAAAmF,GAAqBvF,GAAgBwF,GAAoB;AAC9D,SAAAjF,EAAa,EAAC,QAAAP,GAAQ,SAAS,kBAAkB,KAAKwF,GAAY,SAAS,QAAO;AAC7F;AAEgB,SAAAC,GAAgCzF,GAAgBwF,GAAoBnE,GAAoB;AAC7F,SAAAD,EAAuB,EAAC,QAAApB,GAAQ,SAAS,kBAAkB,SAAS,QAAQ,KAAKwF,GAAY,YAAAnE,GAAW;AACnH;AAEgB,SAAAqE,GAAqB1F,GAAgBwF,GAAoB;AAC9D,SAAA9B,EAAY,EAAC,QAAA1D,GAAQ,SAAS,kBAAkB,KAAKwF,GAAY,SAAS,QAAO;AAC5F;AAEgB,SAAAG,GAAsB3F,GAAgB4F,GAAmBC,GAAsB;AACrF,QAAA3F,IAAUC,EAAcH,CAAM,GAC9B8F,IAAe5F,EAAQ,WAAWC,EAAcyF,CAAS,CAAC;AAChE,MAAItC,IAAQ;AACZ,SAAApB,EAAMhC,GAAS;AAAA,IACX,IAAIiC,GAAG1C,GAAK;;AACR,UAAI6D;AACA,eAAOpB,EAAM;AAEjB,UAAIzC,EAAI,IAAI,IAAI,MAAMoG,GAAc;AAC5B,YAAApG,EAAI,MAAM,KAAK,CAACnB,MAAcA,EAAK,IAAI,UAAU,QAAQ;AAErD,WAAA+E,KAAAJ,KAAA3C,IAAAb,EAAI,UAAJ,gBAAAa,EAAW,KAAK,CAAChC,MAAcA,EAAK,IAAI,UAAU,cAAlD,gBAAA2E,EACM,UADN,QAAAI,EAED,MAAM,KAAKyC;AAAA,aACX;AACG,gBAAAC,IAAY,IAAIlD,EAAQ;AACpB,UAAAkD,EAAA,MAAM,KAAKD,CAAY;AACjC,gBAAME,IAAS,IAAIjD,EAAK,IAAIC,EAAO,QAAQ,GAAG+C,CAAS;AACnD,UAAAtG,EAAA,MAAM,KAAKuG,CAAM;AAAA,QAAA;AAEjB,eAAA1C,IAAA,IACD7D;AAAA,MAAA;AAAA,IACX;AAAA,EACJ,CACH,GACMS,EAAQ,SAASW,CAAgB;AAC5C;AAQgB,SAAAoF,GACZjG,GACAkG,GACAC,IAAsB,CAAChE,GAAQiE,MAAa,IAC5CC,IAAiB,CAAClE,MAAW,IACxB;AACC,QAAAjC,IAAUC,EAAcH,CAAM,GAC9BsG,IAAc,CAAC;AACrB,SAAApE,EAAMhC,GAAS;AAAA,IACX,IAAIiC,GAAG1C,GAAK8G,GAAQ;;AAEZ,UAAAJ;AAAA,QACII,EACK,OAAO,CAACC,MAAM7G,EAAO6G,CAAC,CAAC,EACvB,IAAI,CAACA,MAAW;;AAAA,kBAAAlG,IAAAkG,KAAA,gBAAAA,EAAG,QAAH,gBAAAlG,EAAQ;AAAA,SAAK,EAC7B,KAAK,GAAG;AAAA,MAAA,KAEjBb,EAAI;AAEO,mBAAAnB,KAAQmB,EAAI;AACf,gBAAAa,IAAAhC,KAAA,gBAAAA,EAAM,QAAN,gBAAAgC,EAAW,WAAU4F,GAAW;AAEhC,kBAAMO,MAAaxD,IAAA3E,KAAA,gBAAAA,EAAM,UAAN,gBAAA2E,EAAa,YAASI,IAAA/E,EAAK,UAAL,gBAAA+E,EAAY;AACjD,YAAAgD,EAAeI,CAAU,KACzBH,EAAK,KAAK;AAAA,cACN,CAACJ,CAAS,GAAGO;AAAA,cACb,OAAOhH,EAAI;AAAA,YAAA,CACd;AAAA,UACL;AAAA;AAAA,IAGZ;AAAA,EACJ,CACH,GACM6G;AACX;AAEA,SAASI,GAAgB1G,GAAgB2G,IAAuB,IAG5D;AACO,SAAAV;AAAA,IAAqBjG;AAAA,IAAQ;AAAA,IAAQ,MAAM;AAAA,IAAM,CAAChB,MACrD2H,EAAW,KAAK,CAACC,MAAMA,MAAM5H,CAAK;AAAA,EACtC;AACJ;AAOgB,SAAA6H,GACZ7G,GACAuC,GACAoE,GACF;AACQ,QAAAG,IAAQJ,GAAgB1G,GAAQ2G,CAAU,GAE1CI,IAAc,IAAIC,EAAY;AACtB,EAAA7G,EAAAH,GAAQ,EAAC,aAAA+G,GAAY;AACnC,QAAME,IACFF,EAAY,WAAWxE,EAAS,aAAa,CAAC,IAAIA,EAAS;AAEpD,aAAA2E,KAAQJ,EAAM;AACrB,QAAIG,KAAeC,EAAK,MAAM,CAAC;AAC3B,aAAOA,EAAK;AAGb,SAAA;AACX;AAEA,MAAMrG,IAAmB,EAAC,WAAW,EAAC,GAEhCsG,IAAiB,iBACjBC,KAA0B,IAAI;AAAA,EAChC,WAAWD,CAAc;AAC7B;AAEA,SAASE,GACLC,GACAC,GACoD;AACpD,MAAIA,IAAS;AACF;AAMX,QAAMC,IAAY,CAAC,GAHHF,EAAe;AAAA,IAC3B,IAAI,OAAO,WAAWC,IAAS,CAAC,SAASJ,CAAc,IAAI,GAAG;AAAA,EAClE,CAC6B,EAAE,IAAI;AACnC,MAAIK,MAAc;AAGX,WAAA;AAAA,MACH,KAAKA,EAAU,CAAC;AAAA,MAChB,iBAAiBA,EAAU,QAAQA,EAAU,CAAC,EAAE;AAAA,IACpD;AACJ;AAEA,SAASC,GAA6BC,GAIxB;AACJ,QAAAC,IAAOP,GAAwB,KAAKM,CAAY;AACtD,MAAIC,MAAS;AACF;AAGX,QAAM,CAACC,GAAmBL,GAAQM,CAAO,IAIrC,CAACF,EAAK,CAAC,GAAGA,EAAK,CAAC,GAAGA,EAAK,CAAC,CAAC;AACvB,SAAA;AAAA,IACH,QAAQJ,EAAO;AAAA,IACf,SAAAM;AAAA,IACA,iBACIA,MAAY,SACN,SACAF,EAAK,QAAQC,EAAkB;AAAA,EAC7C;AACJ;AASgB,SAAAE,GAAuB9H,GAAgB+H,GAAoC;;AACvF,QAAMC,IAAahI,EAAO,UAAU,GAAG+H,CAAa,GAE9CE,IAAwBR,GAA6BO,CAAU;AACjE,MAAA,EAAC,SAAAH,MAAWI;AACV,QAAA,EAAC,QAAAV,MAAUU;AAEb,MAAAC;AACJ,MAAIL,MAAY,QAAW;AACvB,UAAMM,IAAmBd;AAAA,MACrBW;AAAA,MACAT;AAAA,IACJ;AACA,IAAAM,IAAUM,KAAA,gBAAAA,EAAkB,KAC5BD,IAAkBC,KAAA,gBAAAA,EAAkB;AAAA,EAAA;AAEpC,IAAAD,IACIF,EAAW,YAAYH,IAAU,GAAG,IAAIA,EAAQ,SAAS;AAG3D,QAAA3H,IAAUC,EAAcH,CAAM,GAC9BoI,IAAgB,CAAC;AAEvB,SAAAlG,EAAMhC,GAAS;AAAA,IACX,KAAKiC,GAAQvC,GAAWyI,GAAyB;;AAC7C,YAAI/H,IAAAV,EAAK,UAAL,gBAAAU,EAAY,WAAU,UAAaV,EAAK,IAAI,UAAUiI,GAAS;AACzD,cAAAS,IAAgBtI,EAAO,UAAU,GAAGJ,EAAK,MAAM,MAAM,CAAC,CAAC;AAC7D,QAAAwI,EAAS,KAAK;AAAA,UACV,SAASC,EACJ,OAAO,CAAC7B,MAAMvF,EAAMuF,CAAC,CAAC,EACtB,IAAI,CAACA,MAAMA,EAAE,KAAKtG,CAAO,CAAC;AAAA,UAC/B,KAAKN,EAAK,IAAI;AAAA,UACd,OAAOA,EAAK,MAAM,KAAKM,CAAO;AAAA,UAC9B,OAAO;AAAA,YACHN,EAAK,MAAM,MAAM,CAAC,KACjB0I,EAAc,SACXA,EAAc,WAAW,SAAS,EAAE,EAAE;AAAA,YAC1C,GAAG1I,EAAK,MAAM,MAAM,MAAM,CAAC;AAAA,UAAA;AAAA,QAC/B,CACH;AAAA,MAAA;AAAA,IACL;AAAA,EACJ,CACH,IAMMU,IAJQ8H,EAAS;AAAA,IACpB,CAAC3I,MACGA,EAAI,MAAM,CAAC,KAAKyI,KAAmBA,KAAmBzI,EAAI,MAAM,CAAC;AAAA,EACzE,EACc,KAAK,CAACR,GAAQC,MAAWA,EAAE,MAAM,CAAC,IAAID,EAAE,MAAM,CAAC,CAAC,MAAvD,gBAAAqB,EAA2D;AACtE;AAIO,SAASiI,GAAavI,GAAgB;AACnC,QAAAE,IAAUC,EAAcH,CAAM,GAC9BwI,IAAmB,CAAC;AAE1B,SAAAtG,EAAMhC,GAAS;AAAA,IACX,IAAIiC,GAAG1C,GAAK;;AACR,UAAIA,EAAI;AACO,mBAAAnB,KAAQmB,EAAI;AACnB,gBAAIa,IAAAhC,KAAA,gBAAAA,EAAM,QAAN,gBAAAgC,EAAW,WAAU,cAAY2C,IAAA3E,KAAA,gBAAAA,EAAM,UAAN,QAAA2E,EAAa;AACnC,uBAAAwF,KAAanK,EAAK,MAAM;AACxB,cAAAkK,EAAA,KAAKC,EAAU,QAAQ;AAAA;AAAA,IAI9C;AAAA,EACJ,CACH,GAEMD;AACX;AAEgB,SAAAE,GAAmB1I,GAAgBuC,GAAkD;AAC3F,QAAArC,IAAUC,EAAcH,CAAM,GAC9B+G,IAAc,IAAIC,EAAY;AACtB,EAAA7G,EAAAH,GAAQ,EAAC,aAAA+G,GAAY;AACnC,QAAME,IACFF,EAAY,WAAWxE,EAAS,aAAa,CAAC,IAAIA,EAAS;AAE3D,MAAAoG;AACJ,SAAAzG,EAAMhC,GAAS;AAAA,IACX,IAAIiC,GAAG1C,GAAK;;AACR,UAAIA,EAAI;AACO,mBAAAnB,KAAQmB,EAAI;AACf,gBAAAa,IAAAhC,KAAA,gBAAAA,EAAM,QAAN,gBAAAgC,EAAW,WAAU,aACjB2C,IAAA3E,KAAA,gBAAAA,EAAM,UAAN,QAAA2E,EAAa;AACF,uBAAAwF,KAAanK,EAAK,MAAM;AAE3B,kBAAAmK,EAAU,MAAM,CAAC,KAAKxB,KACtBwB,EAAU,MAAM,CAAC,KAAKxB;AAEd,uBAAA0B,IAAAF,GACDvG,EAAM;AAAA;AAAA;AAAA,IAMrC;AAAA,EACJ,CACH,GAEMyG,IAAQA,EAAM,OAAA,IAAW;AACpC;"}