UNPKG

@membranehq/cli

Version:

A command-line interface for working with Membrane in your local development environment.

14 lines 240 kB
#!/usr/bin/env node var Dr=Object.defineProperty;var l=(s,e)=>Dr(s,"name",{value:e,configurable:!0});import{jsx as m,jsxs as E,Fragment as wn}from"react/jsx-runtime";import*as j from"node:path";import{join as bn,resolve as Pr,dirname as xr}from"node:path";import{useInput as Me,Box as S,Text as C,Newline as Rr,render as It}from"ink";import _r from"minimist";import{SWRConfig as Mr}from"swr";import je,{createContext as Es,useState as B,useEffect as Ae,useContext as Is,useMemo as jr,useRef as Kr}from"react";import Os from"swr/immutable";import{MembraneConfigLoader as Fr,WorkspaceElementType as _,WorkspaceElementSpecs as be,MembraneAxiosInstance as qr,MembraneClient as As,WorkspaceSyncEventType as Br,ConnectorFileUpdateType as Sn,setValueAtLocator as Cn,extractMembraneErrorData as ue,getDataCollectionCreateFields as vn,excludeWriteOnlyFieldsFromSchema as Ns,valueToSchema as Ot,getRequiredFieldsFromSchema as Ur,getValueAtLocator as Jr,walkSchema as $s,makeDataLocationPath as Ls,getDataCollectionUpdateFields as kn}from"@membranehq/sdk";import Wr from"lodash/isEqual.js";import*as x from"node:fs";import{mkdirSync as Vr,writeFileSync as Gr,readFileSync as zr}from"node:fs";import Ne from"js-yaml";import Ds from"os";import{EventEmitter as Hr}from"events";import M from"path";import Yr from"conf";import Tn from"jsonwebtoken";import*as Zr from"node:crypto";import{createHash as Qr}from"node:crypto";import Xr from"chokidar";import{EventSource as eo}from"eventsource";import P from"fs";import to from"archiver";import no from"form-data";import so from"unzipper";import*as io from"node:os";import{exec as ro}from"node:child_process";import{Spinner as oo,TextInput as ao,Select as co}from"@inkjs/ui";import At from"ink-spinner";import lo from"ink-text-input";import{fileURLToPath as uo}from"node:url";import T from"chalk";import{Command as fo}from"commander";import En from"axios";import{FastMCP as ho}from"fastmcp";import{z as Z}from"zod";import In from"lodash/merge.js";import po from"@anthropic-ai/sdk";import{faker as ut}from"@faker-js/faker";import mo from"lodash/template.js";import go from"lodash/templateSettings.js";class ot{static{l(this,"ConfigLoader")}static instance=null;sdkLoader;constructor(){this.sdkLoader=new Fr}static getInstance(){return ot.instance||(ot.instance=new ot),ot.instance}loadConfig(e){e&&e!==this.sdkLoader.getCwd()&&this.sdkLoader.setCwd(e);try{return this.sdkLoader.loadConfig({validate:!0})}catch(t){if(t.message?.includes("Failed to parse"))throw t;return null}}clearCache(){this.sdkLoader.clearCache()}updateConfig(e){return this.sdkLoader.updateConfig(e)}saveToFile(e){return this.sdkLoader.saveToFile(e)}isCacheDefined(){return this.sdkLoader.hasValidConfig()}}const ft=ot.getInstance();var R={},Nt={},Ps;function xs(){if(Ps)return Nt;Ps=1,Object.defineProperty(Nt,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/[^A-Za-z0-9]+/g,"$").replace(/([a-z])([A-Z])/g,function(t,n,i){return n+"$"+i}).toLowerCase().replace(/(\$)(\w)/g,function(t,n,i){return i.toUpperCase()}):""}return l(s,"toCamelCase"),Nt.default=s,Nt}l(xs,"requireJsCamelcase");var $t={},Rs;function _s(){if(Rs)return $t;Rs=1,Object.defineProperty($t,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(t,n,i){return n+"_"+i.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g,"_").toLowerCase():""}return l(s,"toSnakeCase"),$t.default=s,$t}l(_s,"requireJsSnakecase");var Lt={},Ms;function js(){if(Ms)return Lt;Ms=1,Object.defineProperty(Lt,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"$").replace(/[^A-Za-z0-9]+/g,"$").replace(/([a-z])([A-Z])/g,function(t,n,i){return n+"$"+i}).toLowerCase().replace(/(\$)(\w?)/g,function(t,n,i){return i.toUpperCase()}):""}return l(s,"toPascalCase"),Lt.default=s,Lt}l(js,"requireJsPascalcase");var Dt={},Ks;function yo(){if(Ks)return Dt;Ks=1,Object.defineProperty(Dt,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(t,n,i){return n+"_"+i.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g,".").toLowerCase():""}return l(s,"toDotCase"),Dt.default=s,Dt}l(yo,"requireJsDotcase");var Pt={},Fs;function wo(){if(Fs)return Pt;Fs=1,Object.defineProperty(Pt,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(t,n,i){return n+"_"+i.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g,"/").toLowerCase():""}return l(s,"toPathCase"),Pt.default=s,Pt}l(wo,"requireJsPathcase");var xt={},qs;function bo(){if(qs)return xt;qs=1,Object.defineProperty(xt,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(t,n,i){return n+"_"+i.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g," ").toLowerCase():""}return l(s,"toTextCase"),xt.default=s,xt}l(bo,"requireJsTextcase");var Rt={},Bs;function So(){if(Bs)return Rt;Bs=1,Object.defineProperty(Rt,"__esModule",{value:!0});function s(e){if(e===void 0&&(e=""),!e)return"";var t=String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(n,i,r){return i+"_"+r.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g," ").toLowerCase();return t.charAt(0).toUpperCase()+t.slice(1)}return l(s,"toSentenceCase"),Rt.default=s,Rt}l(So,"requireJsSentencecase");var _t={},Us;function Co(){if(Us)return _t;Us=1,Object.defineProperty(_t,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(t,n,i){return n+"_"+i.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g," ").toLowerCase().replace(/( ?)(\w+)( ?)/g,function(t,n,i,r){return n+i.charAt(0).toUpperCase()+i.slice(1)+r}):""}return l(s,"toHeaderCase"),_t.default=s,_t}l(Co,"requireJsHeadercase");var Mt={},Js;function Ws(){if(Js)return Mt;Js=1,Object.defineProperty(Mt,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(t,n,i){return n+"_"+i.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g,"-").toLowerCase():""}return l(s,"toKebabCase"),Mt.default=s,Mt}l(Ws,"requireJsKebabcase");var Ke={},On={},Vs;function Fe(){return Vs||(Vs=1,function(s){Object.defineProperty(s,"__esModule",{value:!0}),s.belongToTypes=s.isValidObject=s.isArrayObject=s.validateOptions=s.DefaultOption=void 0,s.DefaultOption={recursive:!1,recursiveInArray:!1,keepTypesOnRecursion:[]},s.validateOptions=function(e){return e===void 0&&(e=s.DefaultOption),e.recursive==null?e=s.DefaultOption:e.recursiveInArray==null&&(e.recursiveInArray=!1),e},s.isArrayObject=function(e){return e!=null&&Array.isArray(e)},s.isValidObject=function(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)},s.belongToTypes=function(e,t){return(t||[]).some(function(n){return e instanceof n})}}(On)),On}l(Fe,"requireUtils");var Gs;function vo(){if(Gs)return Ke;Gs=1;var s=Ke&&Ke.__spreadArrays||function(){for(var n=0,i=0,r=arguments.length;i<r;i++)n+=arguments[i].length;for(var o=Array(n),a=0,i=0;i<r;i++)for(var c=arguments[i],u=0,f=c.length;u<f;u++,a++)o[a]=c[u];return o};Object.defineProperty(Ke,"__esModule",{value:!0});var e=Fe();function t(n,i){if(i===void 0&&(i=e.DefaultOption),!e.isValidObject(n))return null;i=e.validateOptions(i);var r={};return Object.keys(n).forEach(function(o){var a=n[o],c=o.toLowerCase();i.recursive&&(e.isValidObject(a)?e.belongToTypes(a,i.keepTypesOnRecursion)||(a=t(a,i)):i.recursiveInArray&&e.isArrayObject(a)&&(a=s(a).map(function(u){var f=u;if(e.isValidObject(u))e.belongToTypes(f,i.keepTypesOnRecursion)||(f=t(u,i));else if(e.isArrayObject(u)){var d=t({key:u},i);f=d.key}return f}))),r[c]=a}),r}return l(t,"lowerKeys"),Ke.default=t,Ke}l(vo,"requireLowercaseKeysObject");var qe={},zs;function ko(){if(zs)return qe;zs=1;var s=qe&&qe.__spreadArrays||function(){for(var n=0,i=0,r=arguments.length;i<r;i++)n+=arguments[i].length;for(var o=Array(n),a=0,i=0;i<r;i++)for(var c=arguments[i],u=0,f=c.length;u<f;u++,a++)o[a]=c[u];return o};Object.defineProperty(qe,"__esModule",{value:!0});var e=Fe();function t(n,i){if(i===void 0&&(i=e.DefaultOption),!e.isValidObject(n))return null;i=e.validateOptions(i);var r={};return Object.keys(n).forEach(function(o){var a=n[o],c=o.toUpperCase();i.recursive&&(e.isValidObject(a)?e.belongToTypes(a,i.keepTypesOnRecursion)||(a=t(a,i)):i.recursiveInArray&&e.isArrayObject(a)&&(a=s(a).map(function(u){var f=u;if(e.isValidObject(u))e.belongToTypes(f,i.keepTypesOnRecursion)||(f=t(u,i));else if(e.isArrayObject(u)){var d=t({key:u},i);f=d.key}return f}))),r[c]=a}),r}return l(t,"upperKeys"),qe.default=t,qe}l(ko,"requireUppercaseKeysObject");var Be={},Hs;function To(){if(Hs)return Be;Hs=1;var s=Be&&Be.__spreadArrays||function(){for(var i=0,r=0,o=arguments.length;r<o;r++)i+=arguments[r].length;for(var a=Array(i),c=0,r=0;r<o;r++)for(var u=arguments[r],f=0,d=u.length;f<d;f++,c++)a[c]=u[f];return a};Object.defineProperty(Be,"__esModule",{value:!0});var e=Fe(),t=xs();function n(i,r){if(r===void 0&&(r=e.DefaultOption),!e.isValidObject(i))return null;r=e.validateOptions(r);var o={};return Object.keys(i).forEach(function(a){var c=i[a],u=t.default(a);r.recursive&&(e.isValidObject(c)?e.belongToTypes(c,r.keepTypesOnRecursion)||(c=n(c,r)):r.recursiveInArray&&e.isArrayObject(c)&&(c=s(c).map(function(f){var d=f;if(e.isValidObject(f))e.belongToTypes(d,r.keepTypesOnRecursion)||(d=n(f,r));else if(e.isArrayObject(f)){var p=n({key:f},r);d=p.key}return d}))),o[u]=c}),o}return l(n,"camelKeys"),Be.default=n,Be}l(To,"requireCamelcaseKeysObject");var Ue={},Ys;function Eo(){if(Ys)return Ue;Ys=1;var s=Ue&&Ue.__spreadArrays||function(){for(var i=0,r=0,o=arguments.length;r<o;r++)i+=arguments[r].length;for(var a=Array(i),c=0,r=0;r<o;r++)for(var u=arguments[r],f=0,d=u.length;f<d;f++,c++)a[c]=u[f];return a};Object.defineProperty(Ue,"__esModule",{value:!0});var e=Fe(),t=_s();function n(i,r){if(r===void 0&&(r=e.DefaultOption),!e.isValidObject(i))return null;r=e.validateOptions(r);var o={};return Object.keys(i).forEach(function(a){var c=i[a],u=t.default(a);r.recursive&&(e.isValidObject(c)?e.belongToTypes(c,r.keepTypesOnRecursion)||(c=n(c,r)):r.recursiveInArray&&e.isArrayObject(c)&&(c=s(c).map(function(f){var d=f;if(e.isValidObject(f))e.belongToTypes(d,r.keepTypesOnRecursion)||(d=n(f,r));else if(e.isArrayObject(f)){var p=n({key:f},r);d=p.key}return d}))),o[u]=c}),o}return l(n,"snakeKeys"),Ue.default=n,Ue}l(Eo,"requireSnakecaseKeysObject");var Je={},Zs;function Io(){if(Zs)return Je;Zs=1;var s=Je&&Je.__spreadArrays||function(){for(var i=0,r=0,o=arguments.length;r<o;r++)i+=arguments[r].length;for(var a=Array(i),c=0,r=0;r<o;r++)for(var u=arguments[r],f=0,d=u.length;f<d;f++,c++)a[c]=u[f];return a};Object.defineProperty(Je,"__esModule",{value:!0});var e=Fe(),t=js();function n(i,r){if(r===void 0&&(r=e.DefaultOption),!e.isValidObject(i))return null;r=e.validateOptions(r);var o={};return Object.keys(i).forEach(function(a){var c=i[a],u=t.default(a);r.recursive&&(e.isValidObject(c)?e.belongToTypes(c,r.keepTypesOnRecursion)||(c=n(c,r)):r.recursiveInArray&&e.isArrayObject(c)&&(c=s(c).map(function(f){var d=f;if(e.isValidObject(f))e.belongToTypes(d,r.keepTypesOnRecursion)||(d=n(f,r));else if(e.isArrayObject(f)){var p=n({key:f},r);d=p.key}return d}))),o[u]=c}),o}return l(n,"pascalKeys"),Je.default=n,Je}l(Io,"requirePascalcaseKeysObject");var We={},Qs;function Oo(){if(Qs)return We;Qs=1;var s=We&&We.__spreadArrays||function(){for(var i=0,r=0,o=arguments.length;r<o;r++)i+=arguments[r].length;for(var a=Array(i),c=0,r=0;r<o;r++)for(var u=arguments[r],f=0,d=u.length;f<d;f++,c++)a[c]=u[f];return a};Object.defineProperty(We,"__esModule",{value:!0});var e=Fe(),t=Ws();function n(i,r){if(r===void 0&&(r=e.DefaultOption),!e.isValidObject(i))return null;r=e.validateOptions(r);var o={};return Object.keys(i).forEach(function(a){var c=i[a],u=t.default(a);r.recursive&&(e.isValidObject(c)?e.belongToTypes(c,r.keepTypesOnRecursion)||(c=n(c,r)):r.recursiveInArray&&e.isArrayObject(c)&&(c=s(c).map(function(f){var d=f;if(e.isValidObject(f))e.belongToTypes(d,r.keepTypesOnRecursion)||(d=n(f,r));else if(e.isArrayObject(f)){var p=n({key:f},r);d=p.key}return d}))),o[u]=c}),o}return l(n,"kebabKeys"),We.default=n,We}l(Oo,"requireKebabcaseKeysObject");var Xs;function Ao(){if(Xs)return R;Xs=1,Object.defineProperty(R,"__esModule",{value:!0}),R.kebabKeys=R.pascalKeys=R.snakeKeys=R.camelKeys=R.upperKeys=R.lowerKeys=R.toLowerCase=R.toUpperCase=R.toKebabCase=R.toHeaderCase=R.toSentenceCase=R.toTextCase=R.toPathCase=R.toDotCase=R.toPascalCase=R.toSnakeCase=R.toCamelCase=void 0;var s=xs();R.toCamelCase=s.default;var e=_s();R.toSnakeCase=e.default;var t=js();R.toPascalCase=t.default;var n=yo();R.toDotCase=n.default;var i=wo();R.toPathCase=i.default;var r=bo();R.toTextCase=r.default;var o=So();R.toSentenceCase=o.default;var a=Co();R.toHeaderCase=a.default;var c=Ws();R.toKebabCase=c.default;var u=vo();R.lowerKeys=u.default;var f=ko();R.upperKeys=f.default;var d=To();R.camelKeys=d.default;var p=Eo();R.snakeKeys=p.default;var g=Io();R.pascalKeys=g.default;var w=Oo();R.kebabKeys=w.default;var h=l(function(k){return String(k||"").toLowerCase()},"toLowerCase");R.toLowerCase=h;var y=l(function(k){return String(k||"").toUpperCase()},"toUpperCase");R.toUpperCase=y;var v={toCamelCase:s.default,toSnakeCase:e.default,toPascalCase:t.default,toDotCase:n.default,toPathCase:i.default,toTextCase:r.default,toSentenceCase:o.default,toHeaderCase:a.default,toKebabCase:c.default,toUpperCase:y,toLowerCase:h,lowerKeys:u.default,upperKeys:f.default,camelKeys:d.default,snakeKeys:p.default,pascalKeys:g.default,kebabKeys:w.default};return R.default=v,R}l(Ao,"requireLib");var An,ei;function No(){return ei||(ei=1,An=Ao()),An}l(No,"requireJsConvertCase");var $o=No();const he={UPDATE:"update",DELETE:"delete",CREATE:"create"},ee={INCOMING:"incoming",OUTGOING:"outgoing"},ne={[_.Integration]:{element:"integration",elements:"integrations",exportable:!1,exportCleanup:l(s=>({id:s.id,key:s.key,name:s.name,connectorId:s.connectorId,baseUri:s.baseUri,connectorVersion:s.connectorVersion}),"exportCleanup")},[_.Connector]:{element:"connector",elements:"connectors",exportable:!1},[_.Action]:{element:"action",elements:"actions",integrationSpecific:!0,exportCleanup:l(s=>(delete s.integration,s),"exportCleanup")},[_.AppDataSchema]:{element:"appDataSchema",elements:"appDataSchemas"},[_.AppEventType]:{element:"appEventType",elements:"appEventTypes"},[_.DataLinkTable]:{element:"dataLinkTable",elements:"dataLinkTables"},[_.DataSource]:{element:"dataSource",elements:"dataSources",parentKey:"universalDataSourceId",integrationSpecific:!0},[_.FieldMapping]:{element:"fieldMapping",elements:"fieldMappings",integrationSpecific:!0,parentKey:"universalFieldMappingId",exportCleanup:l(s=>(delete s.dataSourceId,s),"exportCleanup")},[_.Flow]:{element:"flow",elements:"flows",integrationSpecific:!0,parentKey:"universalFlowId"}};function Lo(s){return delete s.workspaceId,delete s.createdAt,delete s.updatedAt,delete s.revision,Object.keys(s).map(e=>{e.match(/universal.*Revision/g)&&delete s[e]}),s}l(Lo,"baseExportCleanup");const Do="membrane",Po=["**/node_modules/**","**/.git/**","**/.DS_Store","**/Thumbs.db","**/*.tmp","**/*.swp","**/*.swo","**/*.log","**/*.lock","**/.cache/**","**/.next/**","**/.vscode/**","**/.idea/**"];function Ve(s){return j.join(s,Do)}l(Ve,"getMembraneDir");const xo=["id","workspaceId","integrationId","createdAt","updatedAt","revision","archivedAt","baseUri","state","appliedToIntegrations","dependencies"],ti=[_.Action,_.FieldMapping,_.Flow,_.DataSource];class z{static{l(this,"Element")}type;key;integrationKey;data;constructor(e,t,n,i){if(!i)throw new Error("Element must always contain data");if(!t)throw new Error("Element must have a key");this.type=e,this.key=t,this.data=i,this.integrationKey=n||z.extractIntegrationKey(i)}get id(){return z.makeId(this.type,this.key,this.integrationKey)}get dirPath(){const e=be[this.type].apiPath;if(this.integrationKey){const t=be[_.Integration].apiPath;return j.join(t,this.integrationKey,e,this.key)}return j.join(e,this.key)}get path(){return j.join(this.dirPath,"spec.yaml")}get relativePath(){return j.relative(Ve(process.cwd()),this.path)}get absolutePath(){return j.resolve(j.join(Ve(process.cwd()),this.path))}isEqual(e){if(this.id!==e.id)return!1;const t=this.clean(),n=e.clean();return Wr(t,n)}hasParent(){const e=this.getParentKey();return!!e&&!!this.data?.[e]}clean(){const e={...this.data};return xo.forEach(t=>{delete e[t]}),Object.keys(e).forEach(t=>{t.match(/universal.*Revision/)&&delete e[t]}),e}getParentKey(){let e="parentId";return ne?.[this.type]?.parentKey&&(e=ne?.[this.type]?.parentKey),e}static new(e,t,n,i){return new z(e,t,n,i)}static fromData(e,t){if(!t?.key)throw new Error(`Element missing key: ${JSON.stringify(t)}`);const n=this.extractIntegrationKey(t);return new z(e,t.key,n,t)}static fromPathAndData(e,t){const n=z.parsePath(e);if(!t)return;const i=t?.key||n?.key;return n?z.new(n.type,i,n.integrationKey,t):void 0}static fromElement(e){return new z(e.type,e.key,e.integrationKey,{...e.data})}static idFromPath(e){const t=z.parsePath(e);if(t)return z.makeId(t.type,t.key,t.integrationKey)}static makeId(e,t,n){return e===_.Integration?`${e}:${t}`:z.isIntegrationSpecific(e)?`${n||"universal"}:${e}:${t}`:`${e}:${t}`}static parsePath(e){const t=this.getRelativePath(e);if(!this.isElementFile(t))return;const n=Object.values(be).map(c=>c.apiPath).join("|"),i=new RegExp(`^(?<elementType>${n})/(?<elementKey>[^/]+)/spec\\.ya?ml$`),r=t.match(i);if(r?.groups){const{elementType:c,elementKey:u}=r.groups,f=this.getElementTypeFromPath(c);if(f)return{type:f,key:u}}const o=new RegExp(`^integrations/(?<integrationKey>[^/]+)/(?<elementType>${n})/(?<elementKey>[^/]+)/spec\\.ya?ml$`),a=t.match(o);if(a?.groups){const{integrationKey:c,elementType:u,elementKey:f}=a.groups,d=this.getElementTypeFromPath(u);if(d)return{type:d,key:f,integrationKey:c}}}static extractIntegrationKey(e){return e?.integrationKey||e?.integration?.key||e?.integration_key||void 0}static isElementFile(e){return e.endsWith(".yml")||e.endsWith(".yaml")}static getElementTypeFromPath(e){return Object.values(_).find(t=>be[t].apiPath===e)}static getRelativePath(e){return j.relative(Ve(process.cwd()),e)}static isIntegrationSpecific(e){return ti.includes(e)}static canBeIntegrationSpecific(e){return ti.includes(e)}}const V={LogAdded:"logAdded",StateChanged:"stateChanged",StatsChanged:"statsChanged",ConflictsChanged:"conflictsChanged",McpStatusChanged:"mcpStatusChanged",McpServersChanged:"mcpServersChanged",ConfigChanged:"configChanged"};class Nn extends Hr{static{l(this,"TypedEventEmitter")}on(e,t){return super.on(e,t)}emit(e,...t){return super.emit(e,...t)}off(e,t){return super.off(e,t)}once(e,t){return super.once(e,t)}}const Ro="membrane",_o="membrane.config.yml",$n="https://api.integration.app";function Ln(){const s=process.cwd(),e=j.join(s,Ro),t=j.join(s,_o),n=e,i=j.join(n,"workspace.yaml");return{membraneDirPath:e,configPath:t,payloadDirPath:n,workspaceDataFilePath:i}}l(Ln,"getPaths");function Mo(){return Ln().membraneDirPath}l(Mo,"getBasePath");const jo={pat:{type:"string"},workspace:{type:"object"}},ni=new Yr({schema:jo,configName:"config",cwd:M.join(Ds.homedir(),".membrane")}),Ko=l(s=>{ni.set("pat",s)},"setPat"),si=l(()=>ni.get("pat"),"getPat");class ii{static{l(this,"AccountApiClient")}constructor(e=$n){this.apiBaseUrl=e}async request(e,t={}){const n=t.headers?t.headers instanceof Headers?new Headers(t.headers):new Headers(t.headers):new Headers;if(!n.has("Authorization")){const o=si();if(!o)throw new Error("Personal Access Token not found.");n.set("Authorization",`Bearer ${o}`)}t.body&&!n.has("Content-Type")&&n.set("Content-Type","application/json");const i=await fetch(`${this.apiBaseUrl}${e}`,{...t,headers:n});if(!i.ok){const o=await i.text();throw new Error(`API request failed: ${i.status} ${i.statusText} - ${o}`)}if(i.status===204)return{};const r=await i.text();return JSON.parse(r)}get(e){return this.request(e,{method:"GET"})}post(e,t){return this.request(e,{method:"POST",body:JSON.stringify(t)})}put(e,t){return this.request(e,{method:"PUT",body:JSON.stringify(t)})}patch(e,t){return this.request(e,{method:"PATCH",body:JSON.stringify(t)})}delete(e){return this.request(e,{method:"DELETE"})}}const Fo=l(s=>{const e=new ii($n);return t=>e.get(t)},"createAccountApiFetcher");function jt(s){return ft.loadConfig(s)}l(jt,"readProjectConfig");class qo{static{l(this,"RequestLogger")}constructor(e=qr){this.axiosInstance=e}interceptorsConfigured=!1;setup(){if(this.interceptorsConfigured)return;const e=l(t=>(this.logError(t),Promise.reject(t)),"errorHandler");this.axiosInstance.interceptors.request.use(t=>{t.metadata={startTime:Date.now()};const{method:n,url:i}=this.getRequestDetails(t);return b.debug(`[Request]: ${n} ${i}`),t},e),this.axiosInstance.interceptors.response.use(t=>{const{method:n,url:i}=this.getRequestDetails(t.config),r=this.getDuration(t.config),{status:o,statusText:a}=t;return b.debug(`[Response]: ${n} ${i} - ${o} ${a} (${r}ms)`),t},e),this.interceptorsConfigured=!0}getRequestDetails(e){const t=e?.method?.toUpperCase()??"UNKNOWN";if(!e?.url)return{method:t,url:"unknown"};if(e.url.startsWith("http"))return{method:t,url:e.url};const i=`${e.baseURL??""}/${e.url}`.replace(/\/+/g,"/").replace(/:\//,"://");return{method:t,url:i}}getDuration(e){return Date.now()-(e?.metadata?.startTime??Date.now())}logError(e){const{method:t,url:n}=this.getRequestDetails(e.config),i=this.getDuration(e.config);if(e.response){const{status:r,statusText:o}=e.response;b.error(`[Response]: ${t} ${n} - ${r} ${o} (${i}ms)`),e.response.data&&b.error(`[Response Data]: ${JSON.stringify(e.response.data,null,2)}`)}}}class Bo{static{l(this,"MembraneAPIManager")}client=null;currentConfig=null;tokenExpiry=0;requestTimes=[];maxRequestsPerSecond=80;windowSizeMs=1e3;semaphore=0;maxConcurrentRequests;maxRetries;retryDelay;requestTimeout;enableJitter;semaphoreQueue=[];rateLimitMutex=Promise.resolve();requestLogger=null;constructor(e={}){this.init(e)}init(e={}){this.windowSizeMs=e.windowSizeMs??1e3,this.maxRequestsPerSecond=e.maxRequestsPerSecond??80,this.maxConcurrentRequests=e.maxConcurrentRequests??Math.min(this.maxRequestsPerSecond/4,20),this.maxRetries=e.maxRetries??3,this.retryDelay=e.retryDelay??1e3,this.requestTimeout=e.requestTimeout??12e4,this.enableJitter=e.enableJitter!==!1,this.requestLogger=new qo,this.requestLogger.setup()}async withClient(e,t=process.cwd()){return this.withRetry(async()=>{const n=await this.getClient(t);await this.acquireSemaphore();try{return await this.waitIfNeeded(),this.recordRequest(),await this.withTimeout(e(n),this.requestTimeout)}finally{this.releaseSemaphore()}},"API request")}async generateAccessToken(e,t){return Tn.sign({name:"Membrane Agent",isAdmin:!0,exp:Math.floor(Date.now()/1e3)+3600,iss:e},t,{algorithm:"HS512"})}isTokenValid(){return Date.now()<this.tokenExpiry}getCurrentConfig(e){const t=jt(e);return!t?.workspaceKey||!t?.workspaceSecret?null:{workspaceKey:t.workspaceKey,workspaceSecret:t.workspaceSecret,apiUri:t.apiUri}}async createClient(e){const t=await this.generateAccessToken(e.workspaceKey,e.workspaceSecret);return this.tokenExpiry=Date.now()+36e5,this.currentConfig=e,new As({token:t,apiUri:e.apiUri})}async getClient(e=process.cwd()){const t=this.getCurrentConfig(e);if(!t)throw new Error("Unable to create MembraneClient: No workspace configuration found.");const n=!this.currentConfig||this.currentConfig.workspaceKey!==t.workspaceKey||this.currentConfig.workspaceSecret!==t.workspaceSecret||this.currentConfig.apiUri!==t.apiUri,i=!this.isTokenValid()||this.tokenExpiry-Date.now()<3e5;return(!this.client||n||i)&&(this.client=await this.createClient(t)),this.client}clearClient(){this.client=null,this.currentConfig=null,this.tokenExpiry=0,this.requestTimes=[],this.semaphore=0,this.semaphoreQueue=[],this.rateLimitMutex=Promise.resolve()}getCurrentConfigInfo(){return this.currentConfig}async waitIfNeeded(){this.rateLimitMutex=this.rateLimitMutex.then(async()=>{for(this.cleanOldRequests();this.requestTimes.length>=this.maxRequestsPerSecond;){const t=this.requestTimes[0]+this.windowSizeMs-Date.now()+10;if(t>0)await new Promise(n=>setTimeout(n,t)),this.cleanOldRequests();else break}}),await this.rateLimitMutex}recordRequest(){this.requestTimes.push(Date.now())}cleanOldRequests(){const e=Date.now()-this.windowSizeMs;this.requestTimes=this.requestTimes.filter(t=>t>e)}getRequestCount(){return this.cleanOldRequests(),this.requestTimes.length}async acquireSemaphore(){if(this.semaphore<this.maxConcurrentRequests){this.semaphore++;return}return new Promise(e=>{this.semaphoreQueue.push(e)})}releaseSemaphore(){if(this.semaphore--,this.semaphoreQueue.length>0){const e=this.semaphoreQueue.shift();this.semaphore++,e()}}async withRetry(e,t="operation"){let n;for(let i=0;i<=this.maxRetries;i++)try{return await e()}catch(r){if(n=r,!this.isRetryableError(r)||i===this.maxRetries)throw r;const o=new Date().toISOString(),a=i+2;b.debug(`[${o}] Retrying ${t} (attempt ${a}/${this.maxRetries+1})`);let c=this.retryDelay*Math.pow(2,i);if(this.enableJitter){const u=c*.25*(Math.random()*2-1);c=Math.max(0,c+u)}await new Promise(u=>setTimeout(u,c))}throw n||new Error("Unknown error occurred during retry attempts")}isRetryableError(e){if(!e)return!1;const t=(e.message||e.toString()||"").toLowerCase(),n=e.code;return n&&["econnrefused","enotfound","econnreset","etimedout","ehostunreach","enetunreach"].includes(n.toLowerCase())?!0:["econnrefused","connection refused","network error","timeout","socket hang up","request timeout","dns lookup failed"].some(o=>t.includes(o))}async withTimeout(e,t){let n;const i=new Promise((r,o)=>{n=setTimeout(()=>o(new Error(`Request timeout after ${t}ms`)),t)});try{const r=await Promise.race([e,i]);return n&&clearTimeout(n),r}catch(r){throw n&&clearTimeout(n),r}}}const K=new Bo;async function ri(s){const{id:e}=await K.withClient(t=>t.get("org-workspace-id"),s);return e}l(ri,"getWorkspaceId");class Uo extends Nn{static{l(this,"WorkspaceNotifications")}constructor(e){super(),this.config=e}clientId;heartbeatInterval;isCleaningUp=!1;async connectToRemote(){await this.registerWithRemoteServer(),await this.startHeartbeatLoop()}async setState(e){this.emit(V.StateChanged,{state:e}),await this.emitRemote({status:e})}setConflicts(e){this.emit(V.ConflictsChanged,{conflicts:e})}setConfig(e){this.emit(V.ConfigChanged,{config:e})}setStats(e){this.emit(V.StatsChanged,{stats:e})}addLog(e){this.emit(V.LogAdded,{log:e})}setMcpStatus(e){this.emit(V.McpStatusChanged,{status:e})}async setMcpServers(e){this.emit(V.McpServersChanged,{servers:e}),await this.emitRemote({mcpServers:e.map(t=>({name:t.agentName,totalRequests:t.totalRequests}))})}async cleanup(){!this.clientId||this.isCleaningUp||(this.isCleaningUp=!0,this.heartbeatInterval&&(clearInterval(this.heartbeatInterval),this.heartbeatInterval=void 0),await this.withErrorHandling(async()=>{await K.withClient(e=>e.delete(`/local-clients/${this.clientId}`))}),this.clientId=void 0)}async registerWithRemoteServer(){if(this.clientId)return;const e=await this.withErrorHandling(async()=>await K.withClient(t=>t.post("/local-clients",{hostname:Ds.hostname(),workingDirectory:process.cwd()})));e?.id?this.clientId=e.id:this.addLog({timestamp:new Date().toISOString(),message:"Failed to register with remote server",type:"error"})}async startHeartbeatLoop(){this.heartbeatInterval=setInterval(async()=>{this.clientId&&await this.sendHeartbeat()},this.config.heartbeatIntervalMs)}async sendHeartbeat(){this.clientId&&await this.withErrorHandling(async()=>{await K.withClient(e=>e.post(`/local-clients/${this.clientId}/keep-alive`,{}))})}async emitRemote(e){this.clientId&&await this.withErrorHandling(async()=>{await K.withClient(t=>t.patch(`/local-clients/${this.clientId}`,e))})}async withErrorHandling(e){try{return await e()}catch(t){const n=t instanceof Error?t.message:String(t);return this.addLog({timestamp:new Date().toISOString(),message:`Failed to connect to remote: ${n}`,type:"error"}),null}}}const pe=new Uo({heartbeatIntervalMs:15e3}),oi=bn(Ve(process.cwd()),".logs");class Jo{static{l(this,"WorkspaceLogger")}_logs;workspaceNotifications;verboseMode=!1;constructor(){this._logs=[],this.workspaceNotifications=pe}setVerboseMode(e){this.verboseMode=e}getVerboseMode(){return this.verboseMode}get logs(){return[...this._logs]}get latestLogs(){return this._logs.slice(this._logs.length-5)}log(e,t="info"){const n={timestamp:new Date().toISOString(),message:e,type:t};this._logs.push(n),this._logs=this._logs.slice(0,1e3),(t!=="debug"||this.verboseMode)&&this.workspaceNotifications.addLog(n)}info(e){this.log(e,"info")}success(e){this.log(e,"success")}warning(e){this.log(e,"warning")}error(e){this.log(e,"error")}debug(e){this.log(e,"debug")}clear(){this._logs=[]}saveLogsToFile(e){if(this._logs.length===0)return null;try{const t=new Date().toISOString().replace(/[:.]/g,"_"),n=e?`-${e}`:"",i=`${t}${n}.txt`;Vr(oi,{recursive:!0});const r=bn(oi,i),o=this._logs.map(a=>`[${a.timestamp}] ${a.type?.toUpperCase()||"INFO"}: ${a.message}`).join(` `);return Gr(r,o,"utf-8"),r}catch(t){return console.error("Failed to save logs:",t),null}}}const b=new Jo;class ai{static{l(this,"BaseWorkspaceElementsRepository")}constructor(e){this.cache=e}connectorsMapping;setConnectorsMapping(e){this.connectorsMapping=e}async getElements(){const e=[];try{const t=await this.getIntegrations();e.push(...t);const n=[_.Integration,_.Connector],i=Object.keys(ne),r=await Promise.all(i.filter(o=>!n.includes(o)).map(async o=>this.getElementsByType(o,t)));for(const o of r)e.push(...o)}catch(t){throw b.error(`Failed to get elements: ${t}`),t}return e}async putElement(e){let t=this.cache.get(e.id);return e.data.id&&t?t=await this.updateElement(e,t,{elements:this.cache.getAll(),connectorsMapping:this.connectorsMapping}):t=await this.createElement(e,{elements:this.cache.getAll(),connectorsMapping:this.connectorsMapping}),t}async getElementsByType(e,t){return[]}async createElement(e,t){return e}async updateElement(e,t,n){return t}async getElement(e){}async getIntegrations(){return[]}async deleteElement(e,t){}}class Wo extends ai{static{l(this,"LocalWorkspaceElementsRepository")}basePath;constructor(e){super(e),this.basePath=Ve(process.cwd())}async getElementsByType(e,t){const n=[],i=j.join(this.basePath,be[e].apiPath),r=await this.readElementsInDir(i);n.push(...r);for(const o of t){const a=j.join(this.basePath,be[_.Integration].apiPath,o.key,be[e].apiPath),c=await this.readElementsInDir(a);n.push(...c)}return n.length>0&&b.debug(`[local] Fetched ${n.length} ${e}${n.length!==1?"s":""}`),n}async getElement(e){return this.readElement(e.path)}async createElement(e){return this.updateElement(e,e)}async updateElement(e,t){if(!e.data)throw new Error("Element must have data to write");const n=j.join(this.basePath,t.dirPath),i=j.join(this.basePath,t.path);return x.existsSync(n)||x.mkdirSync(n,{recursive:!0}),x.writeFileSync(i,Ne.dump(e.data)),b.debug(`[local] Written ${t.relativePath}`),t}async deleteElement(e){const t=j.join(this.basePath,e.path),n=j.join(this.basePath,e.dirPath);x.existsSync(t)&&x.rmSync(t,{force:!0}),this.pruneEmptyDir(n),b.debug(`[local] Deleted ${e.relativePath}`)}async getIntegrations(){const e=j.join(this.basePath,be[_.Integration].apiPath);return this.readElementsInDir(e)}async readElement(e){if(!x.existsSync(e))return;const t=x.readFileSync(e,"utf8"),n=Ne.load(t);if(n)return z.fromPathAndData(e,n)}async readElementsInDir(e){const t=[];if(!x.existsSync(e))return t;const n=x.readdirSync(e);if(n.length===0)return t;const i=n.map(async o=>{const a=j.join(e,o,"spec.yaml");return this.readElement(a)});return(await Promise.all(i)).filter(o=>o!=null)}pruneEmptyDir(e){try{if(!e.startsWith(this.basePath)||e===this.basePath||!x.existsSync(e)||x.readdirSync(e).length>0)return;x.rmdirSync(e),this.pruneEmptyDir(j.dirname(e))}catch(t){console.warn(`Failed to prune empty directory ${e}:`,t)}}}class Vo extends ai{static{l(this,"RemoteWorkspaceElementsRepository")}async getElementsByType(e,t){const n=await this.findAll(e);if(!z.canBeIntegrationSpecific(e))return n;for(const i of t){const r=i.key,o=i.data.id,a=await this.findAll(e,o?{integrationId:o}:{integrationKey:r});n.push(...a)}return n.length>0&&b.debug(`[remote] Fetched ${n.length} ${e}${n.length!==1?"s":""}`),n}async getElement(e){const t=await K.withClient(n=>n[ne[e.type].element](e.data.id).get(),process.cwd());return z.fromData(e.type,t)}async createElement(e,t){const n=e.clean();this.transformElementForCreate(e,n,t);const i=await K.withClient(o=>o[ne[e.type].elements].create(n),process.cwd()),r=z.fromData(e.type,i);return b.debug(`[remote] Created ${r.id}`),r}async updateElement(e,t,n){if(!e.data.id)throw new Error("Element must have an id to update");const i=e.clean();this.transformElementForUpdate(e,i,n);const r=await K.withClient(a=>a[ne[e.type].element](t.data.id).put(i),process.cwd()),o=z.fromData(t.type,r);return b.debug(`[remote] Updated ${t.id}`),o}async deleteElement(e){if(!e.data.id)throw new Error("Element must have an id to delete");await K.withClient(t=>t[ne[e.type].element](e.data.id).archive(),process.cwd()),b.debug(`[remote] Deleted ${e.id}`)}async getIntegrations(){const t=(await K.withClient(n=>n.integrations.findAll(),process.cwd())).map(n=>z.fromData(_.Integration,n));return t.length>0&&b.debug(`[remote] Fetched ${t.length} integrations`),t}async getByInternalId(e,t){let n;try{n=await K.withClient(i=>i[ne[t].element](e).get())}catch{return}return z.fromData(t,n)}transformElementForCreate(e,t,n){if(e.integrationKey){const i=n.elements.find(r=>r.type===_.Integration&&r.key===e.integrationKey);if(i)t.integrationId=i.data.id;else throw new Error(`Dependency integration ${e.integrationKey} not found for ${e.id}`)}if(e.type===_.Integration){const i=n.connectorsMapping?.[t.connectorId];i&&(t.connectorId=i)}this.transformParentDependency(e,t,n)}transformElementForUpdate(e,t,n){if(e.type===_.Integration){const i=n.connectorsMapping?.[t.connectorId];i&&(t.connectorId=i)}if(e.integrationKey){t.integrationKey=e.integrationKey;const i=n.elements.find(r=>r.type===_.Integration&&r.key===e.integrationKey);if(i)t.integrationId=i.data.id;else throw new Error(`Dependency integration ${e.integrationKey} not found for ${e.id}`)}this.transformParentDependency(e,t,n)}transformParentDependency(e,t,n){if(!e.hasParent())return;const i=e.getParentKey();if(!i)return;const r=n.elements.find(o=>o.type===e.type&&o.key===e.key&&!o.hasParent());if(r)t[i]=r.data.id;else throw new Error(`Parent ${e.getParentKey()} not found for ${e.id}`)}async findAll(e,t={}){return(await K.withClient(i=>i[ne[e].elements].findAll(t),process.cwd())).filter(i=>i.key).map(i=>z.fromData(e,i))}}const Dn=Symbol.for("yaml.alias"),Pn=Symbol.for("yaml.document"),Se=Symbol.for("yaml.map"),ci=Symbol.for("yaml.pair"),fe=Symbol.for("yaml.scalar"),Ge=Symbol.for("yaml.seq"),re=Symbol.for("yaml.node.type"),Ce=l(s=>!!s&&typeof s=="object"&&s[re]===Dn,"isAlias"),$e=l(s=>!!s&&typeof s=="object"&&s[re]===Pn,"isDocument"),ze=l(s=>!!s&&typeof s=="object"&&s[re]===Se,"isMap"),U=l(s=>!!s&&typeof s=="object"&&s[re]===ci,"isPair"),q=l(s=>!!s&&typeof s=="object"&&s[re]===fe,"isScalar$1"),He=l(s=>!!s&&typeof s=="object"&&s[re]===Ge,"isSeq");function J(s){if(s&&typeof s=="object")switch(s[re]){case Se:case Ge:return!0}return!1}l(J,"isCollection$1");function W(s){if(s&&typeof s=="object")switch(s[re]){case Dn:case Se:case fe:case Ge:return!0}return!1}l(W,"isNode");const li=l(s=>(q(s)||J(s))&&!!s.anchor,"hasAnchor"),te=Symbol("break visit"),ui=Symbol("skip children"),de=Symbol("remove node");function Le(s,e){const t=fi(e);$e(s)?Ye(null,s.contents,t,Object.freeze([s]))===de&&(s.contents=null):Ye(null,s,t,Object.freeze([]))}l(Le,"visit$1"),Le.BREAK=te,Le.SKIP=ui,Le.REMOVE=de;function Ye(s,e,t,n){const i=di(s,e,t,n);if(W(i)||U(i))return hi(s,n,i),Ye(s,i,t,n);if(typeof i!="symbol"){if(J(e)){n=Object.freeze(n.concat(e));for(let r=0;r<e.items.length;++r){const o=Ye(r,e.items[r],t,n);if(typeof o=="number")r=o-1;else{if(o===te)return te;o===de&&(e.items.splice(r,1),r-=1)}}}else if(U(e)){n=Object.freeze(n.concat(e));const r=Ye("key",e.key,t,n);if(r===te)return te;r===de&&(e.key=null);const o=Ye("value",e.value,t,n);if(o===te)return te;o===de&&(e.value=null)}}return i}l(Ye,"visit_");async function Kt(s,e){const t=fi(e);$e(s)?await Ze(null,s.contents,t,Object.freeze([s]))===de&&(s.contents=null):await Ze(null,s,t,Object.freeze([]))}l(Kt,"visitAsync"),Kt.BREAK=te,Kt.SKIP=ui,Kt.REMOVE=de;async function Ze(s,e,t,n){const i=await di(s,e,t,n);if(W(i)||U(i))return hi(s,n,i),Ze(s,i,t,n);if(typeof i!="symbol"){if(J(e)){n=Object.freeze(n.concat(e));for(let r=0;r<e.items.length;++r){const o=await Ze(r,e.items[r],t,n);if(typeof o=="number")r=o-1;else{if(o===te)return te;o===de&&(e.items.splice(r,1),r-=1)}}}else if(U(e)){n=Object.freeze(n.concat(e));const r=await Ze("key",e.key,t,n);if(r===te)return te;r===de&&(e.key=null);const o=await Ze("value",e.value,t,n);if(o===te)return te;o===de&&(e.value=null)}}return i}l(Ze,"visitAsync_");function fi(s){return typeof s=="object"&&(s.Collection||s.Node||s.Value)?Object.assign({Alias:s.Node,Map:s.Node,Scalar:s.Node,Seq:s.Node},s.Value&&{Map:s.Value,Scalar:s.Value,Seq:s.Value},s.Collection&&{Map:s.Collection,Seq:s.Collection},s):s}l(fi,"initVisitor");function di(s,e,t,n){if(typeof t=="function")return t(s,e,n);if(ze(e))return t.Map?.(s,e,n);if(He(e))return t.Seq?.(s,e,n);if(U(e))return t.Pair?.(s,e,n);if(q(e))return t.Scalar?.(s,e,n);if(Ce(e))return t.Alias?.(s,e,n)}l(di,"callVisitor");function hi(s,e,t){const n=e[e.length-1];if(J(n))n.items[s]=t;else if(U(n))s==="key"?n.key=t:n.value=t;else if($e(n))n.contents=t;else{const i=Ce(n)?"alias":"scalar";throw new Error(`Cannot replace node with ${i} parent`)}}l(hi,"replaceNode");const Go={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},zo=l(s=>s.replace(/[!,[\]{}]/g,e=>Go[e]),"escapeTagName");class X{static{l(this,"Directives")}constructor(e,t){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},X.defaultYaml,e),this.tags=Object.assign({},X.defaultTags,t)}clone(){const e=new X(this.yaml,this.tags);return e.docStart=this.docStart,e}atDocument(){const e=new X(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:X.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},X.defaultTags);break}return e}add(e,t){this.atNextDocument&&(this.yaml={explicit:X.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},X.defaultTags),this.atNextDocument=!1);const n=e.trim().split(/[ \t]+/),i=n.shift();switch(i){case"%TAG":{if(n.length!==2&&(t(0,"%TAG directive should contain exactly two parts"),n.length<2))return!1;const[r,o]=n;return this.tags[r]=o,!0}case"%YAML":{if(this.yaml.explicit=!0,n.length!==1)return t(0,"%YAML directive should contain exactly one part"),!1;const[r]=n;if(r==="1.1"||r==="1.2")return this.yaml.version=r,!0;{const o=/^\d+\.\d+$/.test(r);return t(6,`Unsupported YAML version ${r}`,o),!1}}default:return t(0,`Unknown directive ${i}`,!0),!1}}tagName(e,t){if(e==="!")return"!";if(e[0]!=="!")return t(`Not a valid tag: ${e}`),null;if(e[1]==="<"){const o=e.slice(2,-1);return o==="!"||o==="!!"?(t(`Verbatim tags aren't resolved, so ${e} is invalid.`),null):(e[e.length-1]!==">"&&t("Verbatim tags must end with a >"),o)}const[,n,i]=e.match(/^(.*!)([^!]*)$/s);i||t(`The ${e} tag has no suffix`);const r=this.tags[n];if(r)try{return r+decodeURIComponent(i)}catch(o){return t(String(o)),null}return n==="!"?e:(t(`Could not resolve tag: ${e}`),null)}tagString(e){for(const[t,n]of Object.entries(this.tags))if(e.startsWith(n))return t+zo(e.substring(n.length));return e[0]==="!"?e:`!<${e}>`}toString(e){const t=this.yaml.explicit?[`%YAML ${this.yaml.version||"1.2"}`]:[],n=Object.entries(this.tags);let i;if(e&&n.length>0&&W(e.contents)){const r={};Le(e.contents,(o,a)=>{W(a)&&a.tag&&(r[a.tag]=!0)}),i=Object.keys(r)}else i=[];for(const[r,o]of n)r==="!!"&&o==="tag:yaml.org,2002:"||(!e||i.some(a=>a.startsWith(o)))&&t.push(`%TAG ${r} ${o}`);return t.join(` `)}}X.defaultYaml={explicit:!1,version:"1.2"},X.defaultTags={"!!":"tag:yaml.org,2002:"};function pi(s){if(/[\x00-\x19\s,[\]{}]/.test(s)){const t=`Anchor must not contain whitespace or control characters: ${JSON.stringify(s)}`;throw new Error(t)}return!0}l(pi,"anchorIsValid");function mi(s){const e=new Set;return Le(s,{Value(t,n){n.anchor&&e.add(n.anchor)}}),e}l(mi,"anchorNames");function gi(s,e){for(let t=1;;++t){const n=`${s}${t}`;if(!e.has(n))return n}}l(gi,"findNewAnchor");function Ho(s,e){const t=[],n=new Map;let i=null;return{onAnchor:l(r=>{t.push(r),i??(i=mi(s));const o=gi(e,i);return i.add(o),o},"onAnchor"),setAnchors:l(()=>{for(const r of t){const o=n.get(r);if(typeof o=="object"&&o.anchor&&(q(o.node)||J(o.node)))o.node.anchor=o.anchor;else{const a=new Error("Failed to resolve repeated object (this should not happen)");throw a.source=r,a}}},"setAnchors"),sourceObjects:n}}l(Ho,"createNodeAnchors");function Qe(s,e,t,n){if(n&&typeof n=="object")if(Array.isArray(n))for(let i=0,r=n.length;i<r;++i){const o=n[i],a=Qe(s,n,String(i),o);a===void 0?delete n[i]:a!==o&&(n[i]=a)}else if(n instanceof Map)for(const i of Array.from(n.keys())){const r=n.get(i),o=Qe(s,n,i,r);o===void 0?n.delete(i):o!==r&&n.set(i,o)}else if(n instanceof Set)for(const i of Array.from(n)){const r=Qe(s,n,i,i);r===void 0?n.delete(i):r!==i&&(n.delete(i),n.add(r))}else for(const[i,r]of Object.entries(n)){const o=Qe(s,n,i,r);o===void 0?delete n[i]:o!==r&&(n[i]=o)}return s.call(e,t,n)}l(Qe,"applyReviver");function oe(s,e,t){if(Array.isArray(s))return s.map((n,i)=>oe(n,String(i),t));if(s&&typeof s.toJSON=="function"){if(!t||!li(s))return s.toJSON(e,t);const n={aliasCount:0,count:1,res:void 0};t.anchors.set(s,n),t.onCreate=r=>{n.res=r,delete t.onCreate};const i=s.toJSON(e,t);return t.onCreate&&t.onCreate(i),i}return typeof s=="bigint"&&!t?.keep?Number(s):s}l(oe,"toJS");class xn{static{l(this,"NodeBase")}constructor(e){Object.defineProperty(this,re,{value:e})}clone(){const e=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return this.range&&(e.range=this.range.slice()),e}toJS(e,{mapAsMap:t,maxAliasCount:n,onAnchor:i,reviver:r}={}){if(!$e(e))throw new TypeError("A document argument is required");const o={anchors:new Map,doc:e,keep:!0,mapAsMap:t===!0,mapKeyWarned:!1,maxAliasCount:typeof n=="number"?n:100},a=oe(this,"",o);if(typeof i=="function")for(const{count:c,res:u}of o.anchors.values())i(u,c);return typeof r=="function"?Qe(r,{"":a},"",a):a}}class Ft extends xn{static{l(this,"Alias")}constructor(e){super(Dn),this.source=e,Object.defineProperty(this,"tag",{set(){throw new Error("Alias nodes cannot have tags")}})}resolve(e,t){let n;t?.aliasResolveCache?n=t.aliasResolveCache:(n=[],Le(e,{Node:l((r,o)=>{(Ce(o)||li(o))&&n.push(o)},"Node")}),t&&(t.aliasResolveCache=n));let i;for(const r of n){if(r===this)break;r.anchor===this.source&&(i=r)}return i}toJSON(e,t){if(!t)return{source:this.source};const{anchors:n,doc:i,maxAliasCount:r}=t,o=this.resolve(i,t);if(!o){const c=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new ReferenceError(c)}let a=n.get(o);if(a||(oe(o,null,t),a=n.get(o)),!a||a.res===void 0){const c="This should not happen: Alias anchor was not resolved?";throw new ReferenceError(c)}if(r>=0&&(a.count+=1,a.aliasCount===0&&(a.aliasCount=qt(i,o,n)),a.count*a.aliasCount>r)){const c="Excessive alias count indicates a resource exhaustion attack";throw new ReferenceError(c)}return a.res}toString(e,t,n){const i=`*${this.source}`;if(e){if(pi(this.source),e.options.verifyAliasOrder&&!e.anchors.has(this.source)){const r=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new Error(r)}if(e.implicitKey)return`${i} `}return i}}function qt(s,e,t){if(Ce(e)){const n=e.resolve(s),i=t&&n&&t.get(n);return i?i.count*i.aliasCount:0}else if(J(e)){let n=0;for(const i of e.items){const r=qt(s,i,t);r>n&&(n=r)}return n}else if(U(e)){const n=qt(s,e.key,t),i=qt(s,e.value,t);return Math.max(n,i)}return 1}l(qt,"getAliasCount");const yi=l(s=>!s||typeof s!="function"&&typeof s!="object","isScalarValue");class D extends xn{static{l(this,"Scalar")}constructor(e){super(fe),this.value=e}toJSON(e,t){return t?.keep?this.value:oe(this.value,e,t)}toString(){return String(this.value)}}D.BLOCK_FOLDED="BLOCK_FOLDED",D.BLOCK_LITERAL="BLOCK_LITERAL",D.PLAIN="PLAIN",D.QUOTE_DOUBLE="QUOTE_DOUBLE",D.QUOTE_SINGLE="QUOTE_SINGLE";const Yo="tag:yaml.org,2002:";function Zo(s,e,t){if(e){const n=t.filter(r=>r.tag===e),i=n.find(r=>!r.format)??n[0];if(!i)throw new Error(`Tag ${e} not found`);return i}return t.find(n=>n.identify?.(s)&&!n.format)}l(Zo,"findTagObject");function dt(s,e,t){if($e(s)&&(s=s.contents),W(s))return s;if(U(s)){const d=t.schema[Se].createNode?.(t.schema,null,t);return d.items.push(s),d}(s instanceof String||s instanceof Number||s instanceof Boolean||typeof BigInt<"u"&&s instanceof BigInt)&&(s=s.valueOf());const{aliasDuplicateObjects:n,onAnchor:i,onTagObj:r,schema:o,sourceObjects:a}=t;let c;if(n&&s&&typeof s=="object"){if(c=a.get(s),c)return c.anchor??(c.anchor=i(s)),new Ft(c.anchor);c={anchor:null,node:null},a.set(s,c)}e?.startsWith("!!")&&(e=Yo+e.slice(2));let u=Zo(s,e,o.tags);if(!u){if(s&&typeof s.toJSON=="function"&&(s=s.toJSON()),!s||typeof s!="object"){const d=new D(s);return c&&(c.node=d),d}u=s instanceof Map?o[Se]:Symbol.iterator in Object(s)?o[Ge]:o[Se]}r&&(r(u),delete t.onTagObj);const f=u?.createNode?u.createNode(t.schema,s,t):typeof u?.nodeClass?.from=="function"?u.nodeClass.from(t.schema,s,t):new D(s);return e?f.tag=e:u.default||(f.tag=u.tag),c&&(c.node=f),f}l(dt,"createNode");function Bt(s,e,t){let n=t;for(let i=e.length-1;i>=0;--i){const r=e[i];if(typeof r=="number"&&Number.isInteger(r)&&r>=0){const o=[];o[r]=n,n=o}else n=new Map([[r,n]])}return dt(n,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:l(()=>{throw new Error("This should not happen, please report a bug.")},"onAnchor"),schema:s,sourceObjects:new Map})}l(Bt,"collectionFromPath");const ht=l(s=>s==null||typeof s=="object"&&!!s[Symbol.iterator]().next().done,"isEmptyPath");class wi extends xn{static{l(this,"Collection")}constructor(e,t){super(e),Object.defineProperty(this,"schema",{value:t,configurable:!0,enumerable:!1,writable:!0})}clone(e){const t=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return e&&(t.schema=e),t.items=t.items.map(n=>W(n)||U(n)?n.clone(e):n),this.range&&(t.range=this.range.slice()),t}addIn(e,t){if(ht(e))this.add(t);else{const[n,...i]=e,r=this.get(n,!0);if(J(r))r.addIn(i,t);else if(r===void 0&&this.schema)this.set(n,Bt(this.schema,i,t));else throw new Error(`Expected YAML collection at ${n}. Remaining path: ${i}`)}}deleteIn(e){const[t,...n]=e;if(n.length===0)return this.delete(t);const i=this.get(t,!0);if(J(i))return i.deleteIn(n);throw new Error(`Expected YAML collection at ${t}. Remaining path: ${n}`)}getIn(e,t){const[n,...i]=e,r=this.get(n,!0);return i.length===0?!t&&q(r)?r.value:r:J(r)?r.getIn(i,t):void 0}hasAllNullValues(e){return this.items.every(t=>{if(!U(t))return!1;const n=t.value;return n==null||e&&q(n)&&n.value==null&&!n.commentBefore&&!n.comment&&!n.tag})}hasIn(e){const[t,...n]=e;if(n.length===0)return this.has(t);const i=this.get(t,!0);return J(i)?i.hasIn(n):!1}setIn(e,t){const[n,...i]=e;if(i.length===0)this.set(n,t);else{const r=this.get(n,!0);if(J(r))r.setIn(i,t);else if(r===void 0&&this.schema)this.set(n,Bt(this.schema,i,t));else throw new Error(`Expected YAML collection at ${n}. Remaining path: ${i}`)}}}const Qo=l(s=>s.replace(/^(?!$)(?: $)?/gm,"#"),"stringifyComment");function me(s,e){return/^\n+$/.test(s)?s.substring(1):e?s.replace(/^(?! *$)/gm,e):s}l(me,"indentComment");const De=l((s,e,t)=>s.endsWith(` `)?me(t,e):t.includes(` `)?` `+me(t,e):(s.endsWith(" ")?"":" ")+t,"lineComment"),bi="flow",Rn="block",Ut="quoted";function Jt(s,e,t="flow",{indentAtStart:n,lineWidth:i=80,minContentWidth:r=20,onFold:o,onOverflow:a}={}){if(!i||i<0)return s;i<r&&(r=0);const c=Math.max(1+r,1+i-e.length);if(s.length<=c)return s;const u=[],f={};let d=i-e.length;typeof n=="number"&&(n>i-Math.max(2,r)?u.push(0):d=i-n);let p,g,w=!1,h=-1,y=-1,v=-1;t===Rn&&(h=Si(s,h,e.length),h!==-1&&(d=h+c));for(let A;A=s[h+=1];){if(t===Ut&&A==="\\"){switch(y=h,s[h+1]){case"x":h+=3;break;case"u":h+=5;break;case"U":h+=9;break;default:h+=1}v=h}if(A===` `)t===Rn&&(h=Si(s,h,e.length)),d=h+e.length+c,p=void 0;else{if(A===" "&&g&&g!==" "&&g!==` `&&g!==" "){const O=s[h+1];O&&O!==" "&&O!==` `&&O!==" "&&(p=h)}if(h>=d)if(p)u.push(p),d=p+c,p=void 0;else if(t===Ut){for(;g===" "||g===" ";)g=A,A=s[h+=1],w=!0;const O=h>v+1?h-2:y-1;if(f[O])return s;u.push(O),f[O]=!0,d=O+c,p=void 0}else w=!0}g=A}if(w&&a&&a(),u.length===0)return s;o&&o();let k=s.slice(0,u[0]);for(let A=0;A<u.length;++A){const O=u[A],N=u[A+1]||s.length;O===0?k=` ${e}${s.slice(0,N)}`:(t===Ut&&f[O]&&(k+=`${s[O]}\\`),k+=` ${e}${s.slice(O+1,N)}`)}return k}l(Jt,"foldFlowLines");function Si(s,e,t){let n=e,i=e+1,r=s[i];for(;r===" "||r===" ";)if(e<i+t)r=s[++e];else{do r=s[++e];while(r&&r!==` `);n=e,i=e+1,r=s[i]}return n}l(Si,"consumeMoreIndentedLines");const Wt=l((s,e)=>({indentAtStart:e?s.indent.length:s.indentAtStart,lineWidth:s.options.lineWidth,minContentWidth:s.options.minContentWidth}),"getFoldOptions"),Vt=l(s=>/^(%|---|\.\.\.)/m.test(s),"containsDocumentMarker");function Xo(s,e,t){if(!e||e<0)return!1;const n=e-t,i=s.length;if(i<=n)return!1;for(let r=0,o=0;r<i;++r)if(s[r]===` `){if(r-o>n)return!0;if(o=r+1,i-o<=n)return!1}return!0}l(Xo,"lineLengthOverLimit");function pt(s,e){const t=JSON.stringify