@membranehq/cli 0.5.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +65 -65
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var Fi=Object.defineProperty;var c=(s,e)=>Fi(s,"name",{value:e,configurable:!0});import{jsx as m,jsxs as I,Fragment as Yt}from"react/jsx-runtime";import*as D from"node:path";import{resolve as Bi,dirname as Ui,join as qi}from"node:path";import{useInput as xe,Box as b,Text as S,Newline as Ji,render as dt}from"ink";import Wi from"minimist";import{SWRConfig as Gi}from"swr";import Vi from"os";import F from"path";import Hi from"conf";import De,{createContext as zt,useContext as Qt,useState as K,useEffect as ye,useCallback as ts,useMemo as Yi,useRef as zi}from"react";import*as x from"node:fs";import{readFileSync as Qi}from"node:fs";import de from"js-yaml";import{z as B}from"zod";import{exec as Xi}from"node:child_process";import*as Zi from"node:crypto";import{createHash as er}from"node:crypto";import*as tr from"node:os";import{TextInput as nr,Select as sr}from"@inkjs/ui";import ht from"ink-spinner";import ns from"swr/immutable";import ir from"ink-text-input";import{EventEmitter as rr}from"events";import{WorkspaceElementType as U,IntegrationAppClient as ss,WorkspaceElementSpecs as he,setValueAtLocator as Xt,extractIntegrationAppErrorData as ce,getDataCollectionCreateFields as Zt,excludeWriteOnlyFieldsFromSchema as is,valueToSchema as pt,getRequiredFieldsFromSchema as or,getValueAtLocator as ar,walkSchema as rs,makeDataLocationPath as os,getDataCollectionUpdateFields as en}from"@membranehq/sdk";import j from"fs";import cr from"archiver";import lr from"form-data";import ur from"unzipper";import tn from"jsonwebtoken";import fr from"lodash/isEqual.js";import dr from"chokidar";import{fileURLToPath as hr}from"node:url";import k from"chalk";import{Command as pr}from"commander";import nn from"axios";import{FastMCP as mr}from"fastmcp";import sn from"lodash/merge.js";import gr from"@anthropic-ai/sdk";import{faker as Xe}from"@faker-js/faker";import yr from"lodash/template.js";import wr from"lodash/templateSettings.js";const br="membrane",Sr="membrane.config.yml",rn="https://api.integration.app";function on(){const s=process.cwd(),e=D.join(s,br),t=D.join(s,Sr),n=e,i=D.join(n,"workspace.yaml");return{membraneDirPath:e,configPath:t,payloadDirPath:n,workspaceDataFilePath:i}}c(on,"getPaths");function Cr(){return on().membraneDirPath}c(Cr,"getBasePath");const kr={pat:{type:"string"},workspace:{type:"object"}},as=new Hi({schema:kr,configName:"config",cwd:F.join(Vi.homedir(),".membrane")}),vr=c(s=>{as.set("pat",s)},"setPat"),cs=c(()=>as.get("pat"),"getPat");class ls{static{c(this,"AccountApiClient")}constructor(e=rn){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=cs();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 Er=c(s=>{const e=new ls(rn);return t=>e.get(t)},"createAccountApiFetcher"),us=zt(process.cwd());function Tr({cwd:s,children:e}){return m(us.Provider,{value:s,children:e})}c(Tr,"CwdProvider");function fs(){return Qt(us)}c(fs,"useCwd");const Ir="membrane.config.yml";function Pe(s){const e=D.join(s??process.cwd(),Ir);try{const t=x.readFileSync(e,"utf8"),n=de.load(t),i=ds.safeParse(n);return i.success?i.data:null}catch{return null}}c(Pe,"readProjectConfig");const Nr="membrane.config.yml",ds=B.object({workspaceKey:B.string().optional(),workspaceSecret:B.string().optional(),apiUri:B.string().optional(),testCustomerId:B.string().optional(),anthropicApiKey:B.string().optional()});B.enum(["pull"]);const hs=zt(void 0);function Ar({children:s}){const e=fs(),[t,n]=K(null),[i,r]=K(!0);ye(()=>{const u=Pe(e);n(u),r(!1)},[e]);const o=ts(u=>{const p=D.join(e,Nr),f={...Pe(e)??{},...u},g=ds.safeParse(f);return g.success?(x.writeFileSync(p,de.dump(g.data)),n(g.data),!0):!1},[e]),a=ts(()=>!!(t?.workspaceKey&&t?.workspaceSecret),[t]),l={config:t,isLoading:i,updateConfig:o,validateConfig:a};return m(hs.Provider,{value:l,children:s})}c(Ar,"ProjectConfigProvider");function Ze(){const s=Qt(hs);if(s===void 0)throw new Error("useProjectConfig must be used within a ProjectConfigProvider");return s}c(Ze,"useProjectConfig");function mt({cwd:s,children:e}){const t=s||process.cwd();return m(Tr,{cwd:t,children:m(Ar,{children:m(Gi,{value:{fetcher:Er()},children:e})})})}c(mt,"Layout");const an=[{id:"claude-code",name:"Claude Code",description:"Anthropic Claude Code agent",actionDescription:"Adding membrane MCP to .mcp.json in the current directory",addConfig:c(()=>{const s=D.join(process.cwd(),".mcp.json"),e={mcpServers:{membrane:{command:"membrane",args:["mcp"],env:{AGENT_NAME:"Claude Code"}}}};let t={};if(x.existsSync(s))try{t=JSON.parse(x.readFileSync(s,"utf8"))}catch{t={}}const n={...t,mcpServers:{...t.mcpServers,...e.mcpServers}};return x.writeFileSync(s,JSON.stringify(n,null,2)),`MCP server configuration added to ${s}`},"addConfig")},{id:"cursor",name:"Cursor",description:"Cursor AI editor",actionDescription:"Adding membrane MCP to .cursor/mcp.json in the current directory",addConfig:c(()=>{const s=D.join(process.cwd(),".cursor"),e=D.join(s,"mcp.json");x.existsSync(s)||x.mkdirSync(s);const t={mcpServers:{membrane:{command:"membrane",args:["mcp"],env:{AGENT_NAME:"Cursor"}}}};let n={};if(x.existsSync(e))try{n=JSON.parse(x.readFileSync(e,"utf8"))}catch{n={}}const i={...n,mcpServers:{...n.mcpServers,...t.mcpServers}};return x.writeFileSync(e,JSON.stringify(i,null,2)),`MCP server configuration added to ${e}`},"addConfig")}];function Or({onExit:s,onComplete:e}){const[t,n]=K(0),[i,r]=K(!1),[o,a]=K(null),[l,u]=K(""),[p,d]=K("");xe((w,h)=>{if(l||p){(h.escape||w==="q"||h.return)&&e();return}if(i)h.return||w===" "?f(o):h.escape&&(r(!1),a(null));else if(h.escape)s();else if(h.upArrow||w==="k")n(Math.max(0,t-1));else if(h.downArrow||w==="j")n(Math.min(an.length-1,t+1));else if(h.return||w===" "){const y=an[t];a(y),r(!0)}});const f=c(w=>{try{const h=w.addConfig();u(h)}catch(h){d(`Failed to write configuration: ${h.message||h}`)}},"addMcpConfiguration"),g=Math.min(80,process.stdout.columns||80);return l?I(b,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:g,children:[m(b,{marginTop:-1,marginBottom:1,children:I(S,{bold:!0,children:["\u{1F517} Connect Agent \u2014 ",m(S,{color:"green",children:"Success"})]})}),I(b,{flexDirection:"column",paddingLeft:2,children:[m(S,{color:"green",children:l}),m(b,{marginTop:1,children:m(S,{color:"grey",children:"The agent will now be able to use Membrane's integration capabilities."})})]}),m(b,{marginTop:1,paddingLeft:2,children:m(S,{color:"white",children:"[esc/q/enter: exit]"})})]}):p?I(b,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:g,children:[m(b,{marginTop:-1,marginBottom:1,children:I(S,{bold:!0,children:["\u{1F517} Connect Agent \u2014 ",m(S,{color:"red",children:"Error"})]})}),m(b,{flexDirection:"column",paddingLeft:2,children:m(S,{color:"red",children:p})}),m(b,{marginTop:1,children:m(S,{color:"grey",children:"[esc/q/enter: exit]"})})]}):i&&o?I(b,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:g,children:[m(b,{marginTop:-1,marginBottom:1,children:I(S,{bold:!0,children:["\u{1F517} Connect Agent \u2014 ",m(S,{color:"cyan",children:"Confirmation"})]})}),I(b,{flexDirection:"column",paddingLeft:2,children:[I(S,{children:["Connect ",m(S,{bold:!0,children:o.name})," to Membrane via MCP?"]}),m(b,{marginTop:1,children:m(S,{color:"grey",children:"This will add an MCP server configuration that allows the agent to use Membrane's integration capabilities."})}),m(b,{marginTop:1,children:m(S,{color:"yellow",bold:!0,children:o.actionDescription})}),m(b,{marginTop:2,marginBottom:1,children:I(S,{children:[m(S,{color:"white",bold:!0,children:"[Enter] Confirm"})," ",m(S,{color:"gray",children:"[Esc] Cancel"})]})})]})]}):I(b,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:g,children:[m(b,{marginTop:-1,marginBottom:1,children:I(S,{bold:!0,children:["\u{1F517} Connect Agent \u2014 ",m(S,{color:"cyan",children:"Select Agent"})]})}),I(b,{flexDirection:"column",paddingLeft:2,children:[m(S,{color:"grey",children:"Choose an agent to connect to Membrane via MCP:"}),m(b,{marginTop:1,children:m(S,{color:"grey",children:"This will add an MCP server configuration that allows the agent to use Membrane's integration capabilities."})}),m(b,{marginTop:1,flexDirection:"column",children:an.map((w,h)=>I(b,{children:[I(S,{color:t===h?"cyan":"white",children:[t===h?"\u25B6 ":" ",w.name]}),I(S,{color:"grey",children:[" \u2014 ",w.description]})]},w.id))})]}),m(b,{marginTop:1,children:m(S,{color:"grey",children:"[\u2191\u2193: select] [enter: choose] [esc: exit]"})})]})}c(Or,"AddMcpServerScreen");const we=D.join(tr.tmpdir(),"membrane-mcp-status"),ps=3e4;function cn(s){return er("md5").update(s).digest("hex").slice(0,8)}c(cn,"getCwdHash");function ln(s,e){const t=cn(e);return D.join(we,`mcp-${t}-${s}.json`)}c(ln,"getStatusFilePath");function Me(s,e){try{const t=e||process.cwd();if(!s){const i=gt(t);return i.length===0?null:i[0]}const n=ln(s,t);if(x.existsSync(n)){const i=x.statSync(n),r=new Date;if(r.getTime()-i.mtime.getTime()>ps)return et(s,t),null;const a=x.readFileSync(n,"utf8"),l=JSON.parse(a);if(l.isRunning){const u=new Date(l.lastActivity).getTime();if(r.getTime()-u>ps)return et(s,t),null}return l}}catch{s&&e&&et(s,e)}return null}c(Me,"getMcpStatus");function gt(s){try{const e=s||process.cwd(),t=cn(e);if(!x.existsSync(we))return[];const n=x.readdirSync(we),i=[];for(const r of n){const o=r.match(new RegExp(`^mcp-${t}-(\\d+)\\.json$`));if(o){const a=parseInt(o[1],10),l=Me(a,e);l&&i.push(l)}}return i.sort((r,o)=>new Date(o.startTime).getTime()-new Date(r.startTime).getTime())}catch{return[]}}c(gt,"getAllMcpStatusFiles");function un(s){try{const t={...Me(s.processId,s.cwd)||{isRunning:!1,startTime:new Date().toISOString(),lastActivity:new Date().toISOString(),toolsCount:0,totalRequests:0,processId:s.processId,cwd:s.cwd,agentName:process.env.AGENT_NAME||"Unnamed Agent"},...s};x.existsSync(we)||x.mkdirSync(we,{recursive:!0});const n=ln(s.processId,s.cwd);x.writeFileSync(n,JSON.stringify(t,null,2))}catch{}}c(un,"updateMcpStatus");function et(s,e){try{const t=e||process.cwd();if(s){const n=ln(s,t);x.existsSync(n)&&x.unlinkSync(n)}else{const n=cn(t);if(x.existsSync(we)){const i=x.readdirSync(we);for(const r of i)r.match(new RegExp(`^mcp-${n}-\\d+\\.json$`))&&x.unlinkSync(D.join(we,r))}}}catch{}}c(et,"clearMcpStatus");function $r(s,e){const t=Me(s,e);t&&un({processId:s,cwd:e,totalRequests:t.totalRequests+1,lastRequestTime:new Date().toISOString(),lastActivity:new Date().toISOString()})}c($r,"trackToolExecution");function Lr(){const[s,e]=K(Me()),[t,n]=K(gt()),[i,r]=K(null);return ye(()=>{try{const a=process.cwd();e(Me(void 0,a)),n(gt(a)),r(null)}catch(a){r("Failed to read MCP status:"+a),e(null),n([])}const o=setInterval(()=>{try{const a=process.cwd(),l=Me(void 0,a),u=gt(a);e(l),n(u),r(null)}catch(a){r("Failed to read MCP status: "+a),e(null),n([])}},2e3);return()=>clearInterval(o)},[]),{mcpStatus:s,allMcpServers:t,error:i,isRunning:s?.isRunning||!1,toolsCount:s?.toolsCount||0,totalRequests:s?.totalRequests||0,lastActivity:s?.lastActivity,processId:s?.processId,serverCount:t.length}}c(Lr,"useMcpStatus");function xr(){const{error:s,serverCount:e,allMcpServers:t}=Lr(),n=Math.min(100,process.stdout.columns||100);return I(b,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:n,children:[m(b,{marginTop:-1,marginBottom:0,flexDirection:"column",children:I(S,{bold:!0,children:["\u{1F916} Connected AI Agents:"," ",s?m(S,{color:"red",children:"error reading status"}):e===0?m(S,{color:"yellow",children:"none"}):m(S,{color:"green",children:e})]})}),!s&&e===0&&m(b,{marginTop:1,children:I(S,{color:"grey",children:["Connect your AI agents to Membrane.",m(Ji,{}),"It will give them tools and context to build integrations."]})}),t.length>0&&m(b,{flexDirection:"column",paddingLeft:2,marginTop:1,children:t.map((i,r)=>m(b,{children:I(S,{color:"grey",children:["#",r+1," ",i.agentName,": ",i.totalRequests," calls"]})},i.processId))}),m(b,{marginTop:1,children:m(S,{color:"grey",children:"[a: connect an agent]"})})]})}c(xr,"Agent");function ms({onExit:s,showEscOption:e=!0}){const[t,n]=K(""),{data:i,error:r,isLoading:o}=ns("/account"),{updateConfig:a,isLoading:l}=Ze(),u=i?.workspaces,p=o||l;if(xe((y,C)=>{C.escape&&s?.()}),p)return I(b,{children:[m(ht,{}),m(S,{children:" Fetching workspaces..."})]});if(r)return I(b,{flexDirection:"column",children:[I(S,{color:"red",children:["Error: ",r.message]}),m(b,{marginTop:1,children:m(S,{color:"grey",children:"Press ESC to go back"})})]});const d=u?.filter(y=>y.name.toLowerCase().includes(t.toLowerCase()))??[],f=d.map(y=>({label:y.name,value:y.id})),g=f.length,w=u?.length??0;async function h(y){const C=d.find(T=>T.id===y);if(!C)return;const{key:v,secret:A}=C;!v||!A||(await a({workspaceKey:v,workspaceSecret:A}),s?.())}return c(h,"handleSelect"),I(b,{flexDirection:"column",borderStyle:"round",borderTop:!0,width:70,paddingX:1,children:[m(b,{marginTop:-1,children:m(S,{bold:!0,children:"\u{1F4C1} Select your workspace"})}),I(b,{marginTop:1,children:[m(S,{children:"Search: "}),m(nr,{placeholder:"Enter a search query...",onChange:n})]}),w>5&&I(S,{children:["Showing ",g," of ",w," workspaces."]}),m(b,{marginTop:1,children:m(sr,{options:f,onChange:c(y=>{y&&h(y)},"onChange")})}),e&&m(b,{marginTop:1,children:m(S,{color:"grey",children:"Press ESC to go back"})})]})}c(ms,"SelectWorkspace");function Dr({currentPat:s,onSubmit:e}){const[t,n]=K(""),[i,r]=K(!1),[o,a]=K(null);return I(b,{flexDirection:"column",borderStyle:"round",borderTop:!0,width:70,paddingX:1,children:[m(b,{marginTop:-1,marginBottom:1,children:m(S,{bold:!0,children:"\u{1F511} Enter your Personal Access Token"})}),m(S,{children:"Please provide your Personal Access Token. You can find it here:"}),m(b,{marginTop:1,marginBottom:1,children:m(S,{color:"yellow",children:"https://console.integration.app/w/0/manage-account/api-token"})}),s&&m(S,{dimColor:!0,children:"Press Enter to keep your current token or type a new one."}),m(ir,{mask:"*",placeholder:`${s?"******":"Enter your token here..."}`,value:t,onChange:n,onSubmit:c(async u=>{a(null),r(!0);try{await e(u),n("")}catch{a("Invalid token. Please try again.")}finally{r(!1)}},"handleSubmit")}),i&&m(b,{marginTop:1,children:I(S,{children:[m(ht,{type:"dots"})," Validating token..."]})}),o&&m(S,{color:"red",children:o})]})}c(Dr,"PersonalAccessTokenInput");var tt=(s=>(s[s.Authenticate=0]="Authenticate",s[s.ConnectWorkspace=1]="ConnectWorkspace",s))(tt||{});const Pr={0:"Authenticate in Membrane",1:"Connect a Membrane Workspace"},gs=c(()=>{const{config:s}=Ze(),e=!!(s?.workspaceKey&&s?.workspaceSecret);return{workspaceIsConfigured:e,isSetupComplete:e}},"useSetup"),fn=[tt.Authenticate,tt.ConnectWorkspace];function ys({onComplete:s}){const[e,t]=K(!1),[n,i]=K(0),{isSetupComplete:r}=gs(),o=cs(),a=fn[n],l=n+1,u=fn.length,p=fn.map((g,w)=>{let h="pending";return w<n?h="done":w===n&&(h="current"),{id:g,label:Pr[g],status:h}});async function d(g){const w=o&&g===""?o:g,h=new ls;try{await h.request("/account",{headers:{Authorization:`Bearer ${w}`}}),vr(w),i(y=>y+1)}catch(y){console.error(y)}}c(d,"handlePatSubmit");function f(){t(!0),s&&s()}return c(f,"handleWorkspaceSelected"),xe((g,w)=>{r&&w.escape&&s&&s()}),e?m(b,{children:m(S,{children:"\u2705 Setup complete. You are ready to go!"})}):I(b,{flexDirection:"column",alignSelf:"flex-start",gap:1,children:[I(b,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:70,children:[m(b,{marginTop:-1,marginBottom:1,children:I(S,{bold:!0,children:["\u{1F6E0}\uFE0F Setup \u2014"," ",I(S,{color:"cyan",children:["Step ",l," of ",u]}),r&&m(S,{color:"grey",children:" [esc: go back]"})]})}),m(b,{flexDirection:"column",paddingLeft:2,children:p.map(g=>m(Mr,{status:g.status,label:g.label},g.id))})]}),a===tt.Authenticate&&m(Dr,{currentPat:o,onSubmit:d}),a===tt.ConnectWorkspace&&m(ms,{onExit:f,showEscOption:!1})]})}c(ys,"Setup");function Mr({status:s,label:e}){return I(b,{children:[I(b,{width:2,children:[s==="current"&&m(ht,{type:"dots"}),s==="done"&&m(S,{children:"\u2705"})]}),m(S,{dimColor:s!=="current",children:e})]})}c(Mr,"StepDisplay");const te={LogAdded:"logAdded",StateChanged:"stateChanged",StatsChanged:"statsChanged",ConflictsChanged:"conflictsChanged"};class ws extends rr{static{c(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)}}class jr extends ws{static{c(this,"WorkspaceNotifications")}constructor(){super()}setState(e){this.emit(te.StateChanged,{state:e})}setConflicts(e){this.emit(te.ConflictsChanged,{conflicts:e})}setStats(e){this.emit(te.StatsChanged,{stats:e})}addLog(e){this.emit(te.LogAdded,{log:e})}}const re=new jr,ne={[U.Integration]:{element:"integration",elements:"integrations",exportable:!1,exportCleanup:c(s=>({id:s.id,key:s.key,name:s.name,connectorId:s.connectorId,baseUri:s.baseUri,connectorVersion:s.connectorVersion}),"exportCleanup")},[U.Connector]:{element:"connector",elements:"connectors",exportable:!1},[U.Action]:{element:"action",elements:"actions",integrationSpecific:!0,exportCleanup:c(s=>(delete s.integration,s),"exportCleanup")},[U.AppDataSchema]:{element:"appDataSchema",elements:"appDataSchemas"},[U.AppEventType]:{element:"appEventType",elements:"appEventTypes"},[U.DataLinkTable]:{element:"dataLinkTable",elements:"dataLinkTables"},[U.DataSource]:{element:"dataSource",elements:"dataSources",parentKey:"universalDataSourceId",integrationSpecific:!0},[U.FieldMapping]:{element:"fieldMapping",elements:"fieldMappings",integrationSpecific:!0,parentKey:"universalFieldMappingId",exportCleanup:c(s=>(delete s.dataSourceId,s),"exportCleanup")},[U.Flow]:{element:"flow",elements:"flows",integrationSpecific:!0,parentKey:"universalFlowId"}};function Rr(s){return delete s.workspaceId,delete s.createdAt,delete s.updatedAt,delete s.revision,delete s.parentRevision,Object.keys(s).map(e=>{e.match(/universal.*Revision/g)&&delete s[e]}),s}c(Rr,"baseExportCleanup");class bs{static{c(this,"ElementsCache")}elements=new Map;typeIndex=new Map;constructor(e){e&&this.addAll(e)}add(e){const t=e.id;this.elements.set(t,e),this.typeIndex.has(e.type)||this.typeIndex.set(e.type,new Set),this.typeIndex.get(e.type).add(t)}remove(e){const t=e.id,n=this.elements.delete(t);if(n){const i=this.typeIndex.get(e.type);i&&(i.delete(t),i.size===0&&this.typeIndex.delete(e.type))}return n}put(e){this.elements.has(e.id)&&this.remove(e),this.add(e)}get(e){return this.elements.get(e)}getElementsByType(e){const t=this.typeIndex.get(e);return t?Array.from(t).map(n=>this.elements.get(n)).filter(n=>n!==void 0):[]}getAll(){return Array.from(this.elements.values())??[]}getTypes(){return Array.from(this.typeIndex.keys())}addAll(e){for(const t of e)t&&this.add(t)}removeAll(e){for(const t of e)this.remove(t)}getElementIdsByType(e){return this.typeIndex.get(e)}clear(){this.elements.clear(),this.typeIndex.clear()}getAllIds(){return new Set(this.elements.keys())}}class Kr{static{c(this,"WorkspaceLogger")}_logs;workspaceNotifications;constructor(){this._logs=[],this.workspaceNotifications=re}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),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")}clear(){this._logs=[]}}const $=new Kr;class Ss{static{c(this,"ElementsManager")}cache;handler;constructor(e){this.cache=new bs,this.handler=e}async refresh(){try{const e=new bs,t=await this.handler.getIntegrations();e.addAll(t);const n=[U.Integration,U.Connector],i=Object.keys(ne),r=await Promise.all(i.filter(o=>!n.includes(o)).map(async o=>this.handler.getElementsByType(o,t)));for(const o of r)e.addAll(o);this.cache.clear(),this.cache.addAll(e.getAll())}catch(e){$.error(`Failed to refresh elements: ${e instanceof Error?e.message:"Unknown error"}`)}}async putElement(e){let t;try{e.data.id&&this.cache.get(e.id)?t=await this.handler.updateElement(e):t=await this.handler.createElement(e),this.cache.put(t)}catch(n){$.error(`Failed to ${e.data.id?"update":"create"} element: ${n instanceof Error?n.message:"Unknown error"}`)}}async deleteElement(e){try{await this.handler.deleteElement(e),this.cache.remove(e)}catch(t){$.error(`Failed to delete element: ${t instanceof Error?t.message:"Unknown error"}`)}}}async function _r(s,e="full"){const t={};$.info("[connectors] Getting remote workspace data");const n=await s.integrations.findAll();t.integration=n.map(i=>dn("integration",i));for(const i of Object.keys(ne)){const r=ne[i];if(r.exportable===!1)continue;const o=[];$.info(`[connectors] Reading ${r.elements} from remote workspace`);const a=await s[r.elements].findAll();if(o.push(...a.map(l=>dn(i,l))),r.integrationSpecific)for(const l of n){const u=await s[r.elements].findAll({integrationId:l.id});o.push(...u.map(p=>(p.integrationKey=l.key,dn(i,p))))}o.length>0&&e=="full"&&(console.table(o.map(l=>({key:l.key,integrationKey:l.integrationKey,universal:!l.integrationKey})).reduce((l,u)=>(l||(l={}),l[u.key]||(l[u.key]={}),u.universal&&(l[u.key].universal=!0),u.integrationKey&&(l[u.key].integration?l[u.key].integration+=` ${u.integrationKey}`:l[u.key].integration=u.integrationKey),l),{})),console.groupEnd()),t[i]=o}return $.success("[connectors] Remote workspace data retrieved successfully"),t}c(_r,"getWorkspaceData");function dn(s,e){return e=Rr(e),ne[s].exportCleanup?ne[s].exportCleanup(e):e}c(dn,"cleanUpForExport");class Fr{static{c(this,"MembraneClient")}client=null;currentConfig=null;tokenExpiry=0;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=Pe(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 ss({token:t,apiUri:e.apiUri})}async getClient(e){const t=this.getCurrentConfig(e);if(!t)throw new Error("Unable to create IntegrationAppClient: 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}getCurrentConfigInfo(){return this.currentConfig}}const yt=new Fr;async function Cs(s){const e=await yt.getClient(s);if(!e)throw new Error("No workspace configuration found");return(await e.get("org-workspace-id")).id}c(Cs,"getWorkspaceId");const ks="connectors",vs="development",hn={};async function Br({integrations:s,allConnectors:e=!1}){const t=Cr(),n=await yt.getClient(process.cwd()),i=new Set,r={};for(const o of s){const a=o.connectorId,l=o.connectorVersion;if(!r[a]?.has(o.connectorVersion)){const u=await Es({client:n,connectorId:a}),d=!!u.workspaceId||e;if(!u?.key){$.error(`[connectors] Connector ${a} has no key. Skipping..`);continue}d&&(i.has(a)||(await Vr({basePath:t,connector:u}),i.add(a)),r[a]||(r[a]=new Set),r[a].has(l)||(await Hr({client:n,connector:u,connectorVersion:l,basePath:t}),r[a].add(l)))}}}c(Br,"pullConnectors");async function Ur(){const s=await yt.getClient(process.cwd()),e=await _r(s,"minified"),n=(await s.get("org-workspace-id")).id,i={};$.info("[connectors] Loading custom connectors");const r=s,o=await r.get(`/connectors?workspaceId=${n}`);$.info("[connectors] Loading public connectors"),e.connector=o;const a=pn(),u=(j.existsSync(a)?j.readdirSync(a):[]).filter(p=>{if(p.startsWith("."))return!1;const d=F.join(a,p);try{return j.statSync(d).isDirectory()}catch{return!1}});for(const p of u){$.info(`[connectors] Loading connector from: ${p}`);const d=j.readdirSync(F.join(a,p)),f=await qr(p);if("baseUri"in f&&delete f.baseUri,f.uuid&&e.connector?.find(w=>w.uuid==f.uuid))i[f.id]=e.connector.find(w=>w.uuid==f.uuid).id,$.info(`[connectors] Matched ${f.name} uuid: ${f.uuid}`);else if(!i[f.id])if(!!(await Es({client:s,connectorId:f.id})).workspaceId){$.info(`[connectors] Creating custom connector ${f.name} (${f.key})`);const y=await r.post("connectors",{...f,workspaceId:n});i[f.id]=y.id}else{$.info(`[connectors] Skipping public connector ${f.name} (${f.key})`);continue}const g=d.filter(w=>j.statSync(F.join(a,p,w)).isDirectory());for(const w of g)await Gr({client:s,connector:f,version:w,connectorId:i[f.id]})}}c(Ur,"pushConnectors");function pn(){const s=on();return F.join(s.membraneDirPath,ks)}c(pn,"getConnectorsPath");async function qr(s){return de.load(j.readFileSync(F.join(pn(),s,`${s}.yml`),"utf8"))}c(qr,"readConnector");async function Jr(s,e){return $.info(`[connectors] Zipping ${s} into ${e}`),new Promise((t,n)=>{const i=j.createWriteStream(e),r=cr("zip",{zlib:{level:9}});i.on("close",()=>{$.success(`[connectors] Successfully created ${e}`),t()}),i.on("end",()=>{$.info("[connectors] Data has been drained")}),r.on("warning",a=>{a.code==="ENOENT"?console.warn(a):n(a)}),r.on("error",a=>{n(a)}),r.pipe(i);const o=j.readdirSync(s);for(const a of o){const l=F.join(s,a),u=j.statSync(l);u.isFile()?r.file(l,{name:a}):u.isDirectory()&&r.directory(l,a)}r.finalize()})}c(Jr,"createZipArchive");async function Wr(s,e){return $.info(`[connectors] Unzipping into ${e}`),new Promise((t,n)=>{const i=ur.Parse();i.on("entry",r=>{const o=r.path;if(r.type==="Directory"){const l=F.join(e,o);j.mkdirSync(l,{recursive:!0}),r.autodrain()}else{const l=F.join(e,o),u=F.dirname(l);j.mkdirSync(u,{recursive:!0});const p=j.createWriteStream(l);r.pipe(p),p.on("finish",()=>{console.debug(`Extracted: ${o}`)})}}),i.on("end",()=>{$.success(`[connectors] Successfully extracted to ${e}`),t()}),i.on("error",r=>{n(r)}),i.write(s),i.end()})}c(Wr,"extractZipArchive");async function Gr({client:s,connector:e,version:t,connectorId:n}){const i=F.join(pn(),wt(e),Ts(t)),r=F.join(i,"src"),o=F.join(i,"src.zip"),a=j.existsSync(o);if(j.existsSync(r)&&($.info(`[connectors] Archiving source code for ${e.name} version ${t}`),await Jr(r,o)),!j.existsSync(o)){$.warning(`[connectors] No source code found for ${e.name} version ${t}`);return}try{const l=new lr;if(l.append("file",j.createReadStream(o),"file.zip"),$.info(`[connectors] Pushing connector version ${t} for ${e.name}`),t==vs)$.info(`[connectors] Uploading connector ${n}`),await s.post(`connectors/${n}/upload`,l,{headers:{...l.getHeaders()}});else{if(l.append("version",t),l.append("changelog","Imported Version"),(await s.get(`/connectors/${n}/versions`)).find(p=>p.version==t)){$.info(`[connectors] Version ${t} already published`);return}$.info(`[connectors] Publishing version ${t} of connector ${n}`),await s.post(`connectors/${n}/publish-version`,l,{headers:{...l.getHeaders()}})}$.success(`Successfully pushed connector version ${t} for ${e.name}`)}catch{$.error(`Error pushing connector version ${t} for ${e.name}`)}finally{!a&&j.existsSync(o)&&($.info(`[connectors] Cleaning up temporary zip file for ${e.name} version ${t}`),j.unlinkSync(o))}}c(Gr,"pushConnectorVersion");async function Es({client:s,connectorId:e}){if(hn[e])return hn[e];const t=await s.get(`connectors/${e}`);return hn[e]=t,t}c(Es,"getConnector");async function Vr({basePath:s,connector:e}){const t=wt(e),n=F.join(s,ks,t);j.mkdirSync(n,{recursive:!0});const i=F.join(n,`${wt(e)}.yml`);j.writeFileSync(i,de.dump(e)),$.info(`[connectors] Pulled connector ${e.name}`)}c(Vr,"pullConnector");async function Hr({client:s,connector:e,connectorVersion:t,basePath:n}){const i=wt(e),r=Ts(t),o=F.join(n,"connectors",i,r),a=await s.get(`connectors/${e.id}/download`,{version:t},{responseType:"arraybuffer",headers:{Accept:"application/zip"},timeout:1e6});j.mkdirSync(o,{recursive:!0});const l=F.join(o,"src.zip");j.writeFileSync(l,a);const u=F.join(o,"src");j.existsSync(u)&&await Wr(a,u),$.info(`[connectors] Pulled connector version: ${e.name} (${r})`)}c(Hr,"pullConnectorVersion");function wt(s){return s.key}c(wt,"getConnectorDirName");function Ts(s){return s??vs}c(Ts,"getConnectorVersionDirName");const P={NOT_SYNCED:"not_synced",PULLING:"pulling",PUSHING:"pushing",RESOLVING:"resolving",CONFLICTS:"conflicts",SYNCED:"synced",WATCHING:"watching",ERROR:"error"},Yr="membrane",zr=["**/node_modules/**","**/.git/**","**/.DS_Store","**/Thumbs.db","**/*.tmp","**/*.swp","**/*.swo","**/*.log","**/*.lock","**/dist/**","**/build/**","**/.cache/**","**/.next/**","**/.vscode/**","**/.idea/**"];function bt(s){return D.join(s,Yr)}c(bt,"getMembraneDir");const Qr=["id","workspaceId","integrationId","createdAt","updatedAt","revision","parentRevision","archivedAt","baseUri","state"],Is=[U.Action,U.FieldMapping,U.Flow,U.DataSource];class V{static{c(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||V.extractIntegrationKey(i)}get id(){return V.makeId(this.type,this.key,this.integrationKey)}get dirPath(){const e=he[this.type].apiPath;if(this.integrationKey){const t=he[U.Integration].apiPath;return D.join(t,this.integrationKey,e,this.key)}return D.join(e,this.key)}get path(){return D.join(this.dirPath,"spec.yaml")}get relativePath(){return D.relative(bt(process.cwd()),this.path)}isEqual(e){if(this.id!==e.id)return!1;const t=this.clean(),n=e.clean();return fr(t,n)}hasParent(){const e=this.getParentKey();return!!e&&!!this.data?.[e]}clean(){const e={...this.data};return Qr.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 V(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 V(e,t.key,n,t)}static fromPathAndData(e,t){const n=V.parsePath(e);if(!t)return;const i=t?.key||n?.key;if(n)return V.new(n.type,i,n.integrationKey,t)}static fromElement(e){return new V(e.type,e.key,e.integrationKey,{...e.data})}static idFromPath(e){const t=V.parsePath(e);if(t)return V.makeId(t.type,t.key,t.integrationKey)}static makeId(e,t,n){return e===U.Integration?`${e}:${t}`:V.isIntegrationSpecific(e)?`${n||"universal"}:${e}:${t}`:`${e}:${t}`}static parsePath(e){const t=this.getRelativePath(e);if(this.isConnectorFile(t)||!this.isElementFile(t))return;const n=Object.values(he).map(l=>l.apiPath).join("|"),i=new RegExp(`^(?<elementType>${n})/(?<elementKey>[^/]+)/spec\\.ya?ml$`),r=t.match(i);if(r?.groups){const{elementType:l,elementKey:u}=r.groups,p=this.getElementTypeFromPath(l);if(p)return{type:p,key:u}}const o=new RegExp(`^integrations/(?<integrationKey>[^/]+)/(?<elementType>${n})/(?<elementKey>[^/]+)/spec\\.ya?ml$`),a=t.match(o);if(a?.groups){const{integrationKey:l,elementType:u,elementKey:p}=a.groups,d=this.getElementTypeFromPath(u);if(d)return{type:d,key:p,integrationKey:l}}}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 isConnectorFile(e){const[t]=e.split(D.sep);return t===he[U.Connector].apiPath}static getElementTypeFromPath(e){return Object.values(U).find(t=>he[t].apiPath===e)}static getRelativePath(e){return D.relative(bt(process.cwd()),e)}static isIntegrationSpecific(e){return Is.includes(e)}static canBeIntegrationSpecific(e){return Is.includes(e)}}class Xr{static{c(this,"LocalElementsHandler")}basePath;constructor(){this.basePath=bt(process.cwd())}async getElementsByType(e,t){const n=[],i=D.join(this.basePath,he[e].apiPath),r=await this.readElementsInDir(i);n.push(...r);for(const o of t){const a=D.join(this.basePath,he[U.Integration].apiPath,o.key,he[e].apiPath),l=await this.readElementsInDir(a);n.push(...l)}return n.length>0&&$.success(`[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)}async updateElement(e){if(!e.data)throw new Error("Element must have data to write");const t=D.join(this.basePath,e.dirPath),n=D.join(this.basePath,e.path);return x.existsSync(t)||x.mkdirSync(t,{recursive:!0}),x.writeFileSync(n,de.dump(e.data)),$.info(`[local] Written ${e.relativePath}`),e}async deleteElement(e){const t=D.join(this.basePath,e.path),n=D.join(this.basePath,e.dirPath);x.existsSync(t)&&x.rmSync(t,{force:!0}),this.pruneEmptyDir(n),$.info(`[local] Deleted ${e.relativePath}`)}async getIntegrations(){const e=D.join(this.basePath,he[U.Integration].apiPath);return this.readElementsInDir(e)}async readElement(e){if(!x.existsSync(e))return;const t=x.readFileSync(e,"utf8"),n=de.load(t);if(n)return V.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=D.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(D.dirname(e))}catch(t){console.warn(`Failed to prune empty directory ${e}:`,t)}}}class Zr{static{c(this,"RemoteElementsHandler")}client;async getElementsByType(e,t){const n=await this.findAll(e);if(!V.canBeIntegrationSpecific(e))return n;for(const i of t){const r=i.key,o=i.data.id,a=await this.findAll(e,{integrationKey:r,integrationId:o});n.push(...a)}return n.length>0&&$.success(`[remote] Fetched ${n.length} ${e}${n.length!==1?"s":""}`),n}async getElement(e){const n=await(await this.getClient())[ne[e.type].element](e.data.id).get();return V.fromData(e.type,n)}async createElement(e){const t=e.clean(),i=await(await this.getClient())[ne[e.type].elements].create(t),r=V.fromData(e.type,i);return $.info(`[remote] Created ${r.id}`),r}async updateElement(e){if(!e.data.id)throw new Error("Element must have an id to update");const t=e.clean(),i=await(await this.getClient())[ne[e.type].element](e.data.id).put(t),r=V.fromData(e.type,i);return $.info(`[remote] Updated ${e.id}`),r}async deleteElement(e){if(!e.data.id)throw new Error("Element must have an id to delete");await(await this.getClient())[ne[e.type].element](e.data.id).archive(),$.info(`[remote] Deleted ${e.id}`)}async getIntegrations(){const n=(await(await this.getClient()).integrations.findAll()).map(i=>V.fromData(U.Integration,i));return n.length>0&&$.success(`[remote] Fetched ${n.length} integrations`),n}async findAll(e,t={}){return(await(await this.getClient())[ne[e].elements].findAll(t)).map(r=>V.fromData(e,r))}async getClient(){return this.client||(this.client=await yt.getClient(process.cwd())),this.client}}const mn=Symbol.for("yaml.alias"),gn=Symbol.for("yaml.document"),be=Symbol.for("yaml.map"),Ns=Symbol.for("yaml.pair"),le=Symbol.for("yaml.scalar"),je=Symbol.for("yaml.seq"),se=Symbol.for("yaml.node.type"),Se=c(s=>!!s&&typeof s=="object"&&s[se]===mn,"isAlias"),Ee=c(s=>!!s&&typeof s=="object"&&s[se]===gn,"isDocument"),Re=c(s=>!!s&&typeof s=="object"&&s[se]===be,"isMap"),_=c(s=>!!s&&typeof s=="object"&&s[se]===Ns,"isPair"),R=c(s=>!!s&&typeof s=="object"&&s[se]===le,"isScalar$1"),Ke=c(s=>!!s&&typeof s=="object"&&s[se]===je,"isSeq");function q(s){if(s&&typeof s=="object")switch(s[se]){case be:case je:return!0}return!1}c(q,"isCollection$1");function J(s){if(s&&typeof s=="object")switch(s[se]){case mn:case be:case le:case je:return!0}return!1}c(J,"isNode");const As=c(s=>(R(s)||q(s))&&!!s.anchor,"hasAnchor"),X=Symbol("break visit"),Os=Symbol("skip children"),ue=Symbol("remove node");function Te(s,e){const t=$s(e);Ee(s)?_e(null,s.contents,t,Object.freeze([s]))===ue&&(s.contents=null):_e(null,s,t,Object.freeze([]))}c(Te,"visit$1"),Te.BREAK=X,Te.SKIP=Os,Te.REMOVE=ue;function _e(s,e,t,n){const i=Ls(s,e,t,n);if(J(i)||_(i))return xs(s,n,i),_e(s,i,t,n);if(typeof i!="symbol"){if(q(e)){n=Object.freeze(n.concat(e));for(let r=0;r<e.items.length;++r){const o=_e(r,e.items[r],t,n);if(typeof o=="number")r=o-1;else{if(o===X)return X;o===ue&&(e.items.splice(r,1),r-=1)}}}else if(_(e)){n=Object.freeze(n.concat(e));const r=_e("key",e.key,t,n);if(r===X)return X;r===ue&&(e.key=null);const o=_e("value",e.value,t,n);if(o===X)return X;o===ue&&(e.value=null)}}return i}c(_e,"visit_");async function St(s,e){const t=$s(e);Ee(s)?await Fe(null,s.contents,t,Object.freeze([s]))===ue&&(s.contents=null):await Fe(null,s,t,Object.freeze([]))}c(St,"visitAsync"),St.BREAK=X,St.SKIP=Os,St.REMOVE=ue;async function Fe(s,e,t,n){const i=await Ls(s,e,t,n);if(J(i)||_(i))return xs(s,n,i),Fe(s,i,t,n);if(typeof i!="symbol"){if(q(e)){n=Object.freeze(n.concat(e));for(let r=0;r<e.items.length;++r){const o=await Fe(r,e.items[r],t,n);if(typeof o=="number")r=o-1;else{if(o===X)return X;o===ue&&(e.items.splice(r,1),r-=1)}}}else if(_(e)){n=Object.freeze(n.concat(e));const r=await Fe("key",e.key,t,n);if(r===X)return X;r===ue&&(e.key=null);const o=await Fe("value",e.value,t,n);if(o===X)return X;o===ue&&(e.value=null)}}return i}c(Fe,"visitAsync_");function $s(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}c($s,"initVisitor");function Ls(s,e,t,n){if(typeof t=="function")return t(s,e,n);if(Re(e))return t.Map?.(s,e,n);if(Ke(e))return t.Seq?.(s,e,n);if(_(e))return t.Pair?.(s,e,n);if(R(e))return t.Scalar?.(s,e,n);if(Se(e))return t.Alias?.(s,e,n)}c(Ls,"callVisitor");function xs(s,e,t){const n=e[e.length-1];if(q(n))n.items[s]=t;else if(_(n))s==="key"?n.key=t:n.value=t;else if(Ee(n))n.contents=t;else{const i=Se(n)?"alias":"scalar";throw new Error(`Cannot replace node with ${i} parent`)}}c(xs,"replaceNode");const eo={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},to=c(s=>s.replace(/[!,[\]{}]/g,e=>eo[e]),"escapeTagName");class Q{static{c(this,"Directives")}constructor(e,t){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},Q.defaultYaml,e),this.tags=Object.assign({},Q.defaultTags,t)}clone(){const e=new Q(this.yaml,this.tags);return e.docStart=this.docStart,e}atDocument(){const e=new Q(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:Q.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},Q.defaultTags);break}return e}add(e,t){this.atNextDocument&&(this.yaml={explicit:Q.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},Q.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+to(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&&J(e.contents)){const r={};Te(e.contents,(o,a)=>{J(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(`
|
|
3
|
-
`)}}Q.defaultYaml={explicit:!1,version:"1.2"},Q.defaultTags={"!!":"tag:yaml.org,2002:"};function Ds(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}c(Ds,"anchorIsValid");function Ps(s){const e=new Set;return Te(s,{Value(t,n){n.anchor&&e.add(n.anchor)}}),e}c(Ps,"anchorNames");function Ms(s,e){for(let t=1;;++t){const n=`${s}${t}`;if(!e.has(n))return n}}c(Ms,"findNewAnchor");function no(s,e){const t=[],n=new Map;let i=null;return{onAnchor:c(r=>{t.push(r),i??(i=Ps(s));const o=Ms(e,i);return i.add(o),o},"onAnchor"),setAnchors:c(()=>{for(const r of t){const o=n.get(r);if(typeof o=="object"&&o.anchor&&(
|
|
2
|
+
var _i=Object.defineProperty;var c=(s,e)=>_i(s,"name",{value:e,configurable:!0});import{jsx as m,jsxs as I,Fragment as Yt}from"react/jsx-runtime";import*as D from"node:path";import{resolve as Bi,dirname as Ui,join as qi}from"node:path";import{useInput as xe,Box as b,Text as S,Newline as Ji,render as dt}from"ink";import Wi from"minimist";import{SWRConfig as Gi}from"swr";import Vi from"os";import B from"path";import Hi from"conf";import De,{createContext as zt,useContext as Qt,useState as F,useEffect as ye,useCallback as ts,useMemo as Yi,useRef as zi}from"react";import*as x from"node:fs";import{readFileSync as Qi}from"node:fs";import de from"js-yaml";import{z as U}from"zod";import{exec as Xi}from"node:child_process";import*as Zi from"node:crypto";import{createHash as er}from"node:crypto";import*as tr from"node:os";import{TextInput as nr,Select as sr}from"@inkjs/ui";import ht from"ink-spinner";import ns from"swr/immutable";import ir from"ink-text-input";import{EventEmitter as rr}from"events";import{WorkspaceElementType as j,IntegrationAppClient as ss,WorkspaceElementSpecs as he,setValueAtLocator as Xt,extractIntegrationAppErrorData as ce,getDataCollectionCreateFields as Zt,excludeWriteOnlyFieldsFromSchema as is,valueToSchema as pt,getRequiredFieldsFromSchema as or,getValueAtLocator as ar,walkSchema as rs,makeDataLocationPath as os,getDataCollectionUpdateFields as en}from"@membranehq/sdk";import R from"fs";import cr from"archiver";import lr from"form-data";import ur from"unzipper";import tn from"jsonwebtoken";import fr from"lodash/isEqual.js";import dr from"chokidar";import{fileURLToPath as hr}from"node:url";import k from"chalk";import{Command as pr}from"commander";import nn from"axios";import{FastMCP as mr}from"fastmcp";import sn from"lodash/merge.js";import gr from"@anthropic-ai/sdk";import{faker as Xe}from"@faker-js/faker";import yr from"lodash/template.js";import wr from"lodash/templateSettings.js";const br="membrane",Sr="membrane.config.yml",rn="https://api.integration.app";function on(){const s=process.cwd(),e=D.join(s,br),t=D.join(s,Sr),n=e,i=D.join(n,"workspace.yaml");return{membraneDirPath:e,configPath:t,payloadDirPath:n,workspaceDataFilePath:i}}c(on,"getPaths");function Cr(){return on().membraneDirPath}c(Cr,"getBasePath");const kr={pat:{type:"string"},workspace:{type:"object"}},as=new Hi({schema:kr,configName:"config",cwd:B.join(Vi.homedir(),".membrane")}),vr=c(s=>{as.set("pat",s)},"setPat"),cs=c(()=>as.get("pat"),"getPat");class ls{static{c(this,"AccountApiClient")}constructor(e=rn){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=cs();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 Er=c(s=>{const e=new ls(rn);return t=>e.get(t)},"createAccountApiFetcher"),us=zt(process.cwd());function Tr({cwd:s,children:e}){return m(us.Provider,{value:s,children:e})}c(Tr,"CwdProvider");function fs(){return Qt(us)}c(fs,"useCwd");const Ir="membrane.config.yml";function Pe(s){const e=D.join(s??process.cwd(),Ir);try{const t=x.readFileSync(e,"utf8"),n=de.load(t),i=ds.safeParse(n);return i.success?i.data:null}catch{return null}}c(Pe,"readProjectConfig");const Nr="membrane.config.yml",ds=U.object({workspaceKey:U.string().optional(),workspaceSecret:U.string().optional(),apiUri:U.string().optional(),testCustomerId:U.string().optional(),anthropicApiKey:U.string().optional()});U.enum(["pull"]);const hs=zt(void 0);function Ar({children:s}){const e=fs(),[t,n]=F(null),[i,r]=F(!0);ye(()=>{const u=Pe(e);n(u),r(!1)},[e]);const o=ts(u=>{const p=D.join(e,Nr),f={...Pe(e)??{},...u},g=ds.safeParse(f);return g.success?(x.writeFileSync(p,de.dump(g.data)),n(g.data),!0):!1},[e]),a=ts(()=>!!(t?.workspaceKey&&t?.workspaceSecret),[t]),l={config:t,isLoading:i,updateConfig:o,validateConfig:a};return m(hs.Provider,{value:l,children:s})}c(Ar,"ProjectConfigProvider");function Ze(){const s=Qt(hs);if(s===void 0)throw new Error("useProjectConfig must be used within a ProjectConfigProvider");return s}c(Ze,"useProjectConfig");function mt({cwd:s,children:e}){const t=s||process.cwd();return m(Tr,{cwd:t,children:m(Ar,{children:m(Gi,{value:{fetcher:Er()},children:e})})})}c(mt,"Layout");const an=[{id:"claude-code",name:"Claude Code",description:"Anthropic Claude Code agent",actionDescription:"Adding membrane MCP to .mcp.json in the current directory",addConfig:c(()=>{const s=D.join(process.cwd(),".mcp.json"),e={mcpServers:{membrane:{command:"membrane",args:["mcp"],env:{AGENT_NAME:"Claude Code"}}}};let t={};if(x.existsSync(s))try{t=JSON.parse(x.readFileSync(s,"utf8"))}catch{t={}}const n={...t,mcpServers:{...t.mcpServers,...e.mcpServers}};return x.writeFileSync(s,JSON.stringify(n,null,2)),`MCP server configuration added to ${s}`},"addConfig")},{id:"cursor",name:"Cursor",description:"Cursor AI editor",actionDescription:"Adding membrane MCP to .cursor/mcp.json in the current directory",addConfig:c(()=>{const s=D.join(process.cwd(),".cursor"),e=D.join(s,"mcp.json");x.existsSync(s)||x.mkdirSync(s);const t={mcpServers:{membrane:{command:"membrane",args:["mcp"],env:{AGENT_NAME:"Cursor"}}}};let n={};if(x.existsSync(e))try{n=JSON.parse(x.readFileSync(e,"utf8"))}catch{n={}}const i={...n,mcpServers:{...n.mcpServers,...t.mcpServers}};return x.writeFileSync(e,JSON.stringify(i,null,2)),`MCP server configuration added to ${e}`},"addConfig")}];function Or({onExit:s,onComplete:e}){const[t,n]=F(0),[i,r]=F(!1),[o,a]=F(null),[l,u]=F(""),[p,h]=F("");xe((w,d)=>{if(l||p){(d.escape||w==="q"||d.return)&&e();return}if(i)d.return||w===" "?f(o):d.escape&&(r(!1),a(null));else if(d.escape)s();else if(d.upArrow||w==="k")n(Math.max(0,t-1));else if(d.downArrow||w==="j")n(Math.min(an.length-1,t+1));else if(d.return||w===" "){const y=an[t];a(y),r(!0)}});const f=c(w=>{try{const d=w.addConfig();u(d)}catch(d){h(`Failed to write configuration: ${d.message||d}`)}},"addMcpConfiguration"),g=Math.min(80,process.stdout.columns||80);return l?I(b,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:g,children:[m(b,{marginTop:-1,marginBottom:1,children:I(S,{bold:!0,children:["\u{1F517} Connect Agent \u2014 ",m(S,{color:"green",children:"Success"})]})}),I(b,{flexDirection:"column",paddingLeft:2,children:[m(S,{color:"green",children:l}),m(b,{marginTop:1,children:m(S,{color:"grey",children:"The agent will now be able to use Membrane's integration capabilities."})})]}),m(b,{marginTop:1,paddingLeft:2,children:m(S,{color:"white",children:"[esc/q/enter: exit]"})})]}):p?I(b,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:g,children:[m(b,{marginTop:-1,marginBottom:1,children:I(S,{bold:!0,children:["\u{1F517} Connect Agent \u2014 ",m(S,{color:"red",children:"Error"})]})}),m(b,{flexDirection:"column",paddingLeft:2,children:m(S,{color:"red",children:p})}),m(b,{marginTop:1,children:m(S,{color:"grey",children:"[esc/q/enter: exit]"})})]}):i&&o?I(b,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:g,children:[m(b,{marginTop:-1,marginBottom:1,children:I(S,{bold:!0,children:["\u{1F517} Connect Agent \u2014 ",m(S,{color:"cyan",children:"Confirmation"})]})}),I(b,{flexDirection:"column",paddingLeft:2,children:[I(S,{children:["Connect ",m(S,{bold:!0,children:o.name})," to Membrane via MCP?"]}),m(b,{marginTop:1,children:m(S,{color:"grey",children:"This will add an MCP server configuration that allows the agent to use Membrane's integration capabilities."})}),m(b,{marginTop:1,children:m(S,{color:"yellow",bold:!0,children:o.actionDescription})}),m(b,{marginTop:2,marginBottom:1,children:I(S,{children:[m(S,{color:"white",bold:!0,children:"[Enter] Confirm"})," ",m(S,{color:"gray",children:"[Esc] Cancel"})]})})]})]}):I(b,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:g,children:[m(b,{marginTop:-1,marginBottom:1,children:I(S,{bold:!0,children:["\u{1F517} Connect Agent \u2014 ",m(S,{color:"cyan",children:"Select Agent"})]})}),I(b,{flexDirection:"column",paddingLeft:2,children:[m(S,{color:"grey",children:"Choose an agent to connect to Membrane via MCP:"}),m(b,{marginTop:1,children:m(S,{color:"grey",children:"This will add an MCP server configuration that allows the agent to use Membrane's integration capabilities."})}),m(b,{marginTop:1,flexDirection:"column",children:an.map((w,d)=>I(b,{children:[I(S,{color:t===d?"cyan":"white",children:[t===d?"\u25B6 ":" ",w.name]}),I(S,{color:"grey",children:[" \u2014 ",w.description]})]},w.id))})]}),m(b,{marginTop:1,children:m(S,{color:"grey",children:"[\u2191\u2193: select] [enter: choose] [esc: exit]"})})]})}c(Or,"AddMcpServerScreen");const we=D.join(tr.tmpdir(),"membrane-mcp-status"),ps=3e4;function cn(s){return er("md5").update(s).digest("hex").slice(0,8)}c(cn,"getCwdHash");function ln(s,e){const t=cn(e);return D.join(we,`mcp-${t}-${s}.json`)}c(ln,"getStatusFilePath");function Me(s,e){try{const t=e||process.cwd();if(!s){const i=gt(t);return i.length===0?null:i[0]}const n=ln(s,t);if(x.existsSync(n)){const i=x.statSync(n),r=new Date;if(r.getTime()-i.mtime.getTime()>ps)return et(s,t),null;const a=x.readFileSync(n,"utf8"),l=JSON.parse(a);if(l.isRunning){const u=new Date(l.lastActivity).getTime();if(r.getTime()-u>ps)return et(s,t),null}return l}}catch{s&&e&&et(s,e)}return null}c(Me,"getMcpStatus");function gt(s){try{const e=s||process.cwd(),t=cn(e);if(!x.existsSync(we))return[];const n=x.readdirSync(we),i=[];for(const r of n){const o=r.match(new RegExp(`^mcp-${t}-(\\d+)\\.json$`));if(o){const a=parseInt(o[1],10),l=Me(a,e);l&&i.push(l)}}return i.sort((r,o)=>new Date(o.startTime).getTime()-new Date(r.startTime).getTime())}catch{return[]}}c(gt,"getAllMcpStatusFiles");function un(s){try{const t={...Me(s.processId,s.cwd)||{isRunning:!1,startTime:new Date().toISOString(),lastActivity:new Date().toISOString(),toolsCount:0,totalRequests:0,processId:s.processId,cwd:s.cwd,agentName:process.env.AGENT_NAME||"Unnamed Agent"},...s};x.existsSync(we)||x.mkdirSync(we,{recursive:!0});const n=ln(s.processId,s.cwd);x.writeFileSync(n,JSON.stringify(t,null,2))}catch{}}c(un,"updateMcpStatus");function et(s,e){try{const t=e||process.cwd();if(s){const n=ln(s,t);x.existsSync(n)&&x.unlinkSync(n)}else{const n=cn(t);if(x.existsSync(we)){const i=x.readdirSync(we);for(const r of i)r.match(new RegExp(`^mcp-${n}-\\d+\\.json$`))&&x.unlinkSync(D.join(we,r))}}}catch{}}c(et,"clearMcpStatus");function $r(s,e){const t=Me(s,e);t&&un({processId:s,cwd:e,totalRequests:t.totalRequests+1,lastRequestTime:new Date().toISOString(),lastActivity:new Date().toISOString()})}c($r,"trackToolExecution");function Lr(){const[s,e]=F(Me()),[t,n]=F(gt()),[i,r]=F(null);return ye(()=>{try{const a=process.cwd();e(Me(void 0,a)),n(gt(a)),r(null)}catch(a){r("Failed to read MCP status:"+a),e(null),n([])}const o=setInterval(()=>{try{const a=process.cwd(),l=Me(void 0,a),u=gt(a);e(l),n(u),r(null)}catch(a){r("Failed to read MCP status: "+a),e(null),n([])}},2e3);return()=>clearInterval(o)},[]),{mcpStatus:s,allMcpServers:t,error:i,isRunning:s?.isRunning||!1,toolsCount:s?.toolsCount||0,totalRequests:s?.totalRequests||0,lastActivity:s?.lastActivity,processId:s?.processId,serverCount:t.length}}c(Lr,"useMcpStatus");function xr(){const{error:s,serverCount:e,allMcpServers:t}=Lr(),n=Math.min(100,process.stdout.columns||100);return I(b,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:n,children:[m(b,{marginTop:-1,marginBottom:0,flexDirection:"column",children:I(S,{bold:!0,children:["\u{1F916} Connected AI Agents:"," ",s?m(S,{color:"red",children:"error reading status"}):e===0?m(S,{color:"yellow",children:"none"}):m(S,{color:"green",children:e})]})}),!s&&e===0&&m(b,{marginTop:1,children:I(S,{color:"grey",children:["Connect your AI agents to Membrane.",m(Ji,{}),"It will give them tools and context to build integrations."]})}),t.length>0&&m(b,{flexDirection:"column",paddingLeft:2,marginTop:1,children:t.map((i,r)=>m(b,{children:I(S,{color:"grey",children:["#",r+1," ",i.agentName,": ",i.totalRequests," calls"]})},i.processId))}),m(b,{marginTop:1,children:m(S,{color:"grey",children:"[a: connect an agent]"})})]})}c(xr,"Agent");function ms({onExit:s,showEscOption:e=!0}){const[t,n]=F(""),{data:i,error:r,isLoading:o}=ns("/account"),{updateConfig:a,isLoading:l}=Ze(),u=i?.workspaces,p=o||l;if(xe((y,C)=>{C.escape&&s?.()}),p)return I(b,{children:[m(ht,{}),m(S,{children:" Fetching workspaces..."})]});if(r)return I(b,{flexDirection:"column",children:[I(S,{color:"red",children:["Error: ",r.message]}),m(b,{marginTop:1,children:m(S,{color:"grey",children:"Press ESC to go back"})})]});const h=u?.filter(y=>y.name.toLowerCase().includes(t.toLowerCase()))??[],f=h.map(y=>({label:y.name,value:y.id})),g=f.length,w=u?.length??0;async function d(y){const C=h.find(T=>T.id===y);if(!C)return;const{key:v,secret:A}=C;!v||!A||(await a({workspaceKey:v,workspaceSecret:A}),s?.())}return c(d,"handleSelect"),I(b,{flexDirection:"column",borderStyle:"round",borderTop:!0,width:70,paddingX:1,children:[m(b,{marginTop:-1,children:m(S,{bold:!0,children:"\u{1F4C1} Select your workspace"})}),I(b,{marginTop:1,children:[m(S,{children:"Search: "}),m(nr,{placeholder:"Enter a search query...",onChange:n})]}),w>5&&I(S,{children:["Showing ",g," of ",w," workspaces."]}),m(b,{marginTop:1,children:m(sr,{options:f,onChange:c(y=>{y&&d(y)},"onChange")})}),e&&m(b,{marginTop:1,children:m(S,{color:"grey",children:"Press ESC to go back"})})]})}c(ms,"SelectWorkspace");function Dr({currentPat:s,onSubmit:e}){const[t,n]=F(""),[i,r]=F(!1),[o,a]=F(null);return I(b,{flexDirection:"column",borderStyle:"round",borderTop:!0,width:70,paddingX:1,children:[m(b,{marginTop:-1,marginBottom:1,children:m(S,{bold:!0,children:"\u{1F511} Enter your Personal Access Token"})}),m(S,{children:"Please provide your Personal Access Token. You can find it here:"}),m(b,{marginTop:1,marginBottom:1,children:m(S,{color:"yellow",children:"https://console.integration.app/w/0/manage-account/api-token"})}),s&&m(S,{dimColor:!0,children:"Press Enter to keep your current token or type a new one."}),m(ir,{mask:"*",placeholder:`${s?"******":"Enter your token here..."}`,value:t,onChange:n,onSubmit:c(async u=>{a(null),r(!0);try{await e(u),n("")}catch{a("Invalid token. Please try again.")}finally{r(!1)}},"handleSubmit")}),i&&m(b,{marginTop:1,children:I(S,{children:[m(ht,{type:"dots"})," Validating token..."]})}),o&&m(S,{color:"red",children:o})]})}c(Dr,"PersonalAccessTokenInput");var tt=(s=>(s[s.Authenticate=0]="Authenticate",s[s.ConnectWorkspace=1]="ConnectWorkspace",s))(tt||{});const Pr={0:"Authenticate in Membrane",1:"Connect a Membrane Workspace"},gs=c(()=>{const{config:s}=Ze(),e=!!(s?.workspaceKey&&s?.workspaceSecret);return{workspaceIsConfigured:e,isSetupComplete:e}},"useSetup"),fn=[tt.Authenticate,tt.ConnectWorkspace];function ys({onComplete:s}){const[e,t]=F(!1),[n,i]=F(0),{isSetupComplete:r}=gs(),o=cs(),a=fn[n],l=n+1,u=fn.length,p=fn.map((g,w)=>{let d="pending";return w<n?d="done":w===n&&(d="current"),{id:g,label:Pr[g],status:d}});async function h(g){const w=o&&g===""?o:g,d=new ls;try{await d.request("/account",{headers:{Authorization:`Bearer ${w}`}}),vr(w),i(y=>y+1)}catch(y){console.error(y)}}c(h,"handlePatSubmit");function f(){t(!0),s&&s()}return c(f,"handleWorkspaceSelected"),xe((g,w)=>{r&&w.escape&&s&&s()}),e?m(b,{children:m(S,{children:"\u2705 Setup complete. You are ready to go!"})}):I(b,{flexDirection:"column",alignSelf:"flex-start",gap:1,children:[I(b,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:70,children:[m(b,{marginTop:-1,marginBottom:1,children:I(S,{bold:!0,children:["\u{1F6E0}\uFE0F Setup \u2014"," ",I(S,{color:"cyan",children:["Step ",l," of ",u]}),r&&m(S,{color:"grey",children:" [esc: go back]"})]})}),m(b,{flexDirection:"column",paddingLeft:2,children:p.map(g=>m(Mr,{status:g.status,label:g.label},g.id))})]}),a===tt.Authenticate&&m(Dr,{currentPat:o,onSubmit:h}),a===tt.ConnectWorkspace&&m(ms,{onExit:f,showEscOption:!1})]})}c(ys,"Setup");function Mr({status:s,label:e}){return I(b,{children:[I(b,{width:2,children:[s==="current"&&m(ht,{type:"dots"}),s==="done"&&m(S,{children:"\u2705"})]}),m(S,{dimColor:s!=="current",children:e})]})}c(Mr,"StepDisplay");const te={LogAdded:"logAdded",StateChanged:"stateChanged",StatsChanged:"statsChanged",ConflictsChanged:"conflictsChanged"};class ws extends rr{static{c(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)}}class Rr extends ws{static{c(this,"WorkspaceNotifications")}constructor(){super()}setState(e){this.emit(te.StateChanged,{state:e})}setConflicts(e){this.emit(te.ConflictsChanged,{conflicts:e})}setStats(e){this.emit(te.StatsChanged,{stats:e})}addLog(e){this.emit(te.LogAdded,{log:e})}}const re=new Rr,ne={[j.Integration]:{element:"integration",elements:"integrations",exportable:!1,exportCleanup:c(s=>({id:s.id,key:s.key,name:s.name,connectorId:s.connectorId,baseUri:s.baseUri,connectorVersion:s.connectorVersion}),"exportCleanup")},[j.Connector]:{element:"connector",elements:"connectors",exportable:!1},[j.Action]:{element:"action",elements:"actions",integrationSpecific:!0,exportCleanup:c(s=>(delete s.integration,s),"exportCleanup")},[j.AppDataSchema]:{element:"appDataSchema",elements:"appDataSchemas"},[j.AppEventType]:{element:"appEventType",elements:"appEventTypes"},[j.DataLinkTable]:{element:"dataLinkTable",elements:"dataLinkTables"},[j.DataSource]:{element:"dataSource",elements:"dataSources",parentKey:"universalDataSourceId",integrationSpecific:!0},[j.FieldMapping]:{element:"fieldMapping",elements:"fieldMappings",integrationSpecific:!0,parentKey:"universalFieldMappingId",exportCleanup:c(s=>(delete s.dataSourceId,s),"exportCleanup")},[j.Flow]:{element:"flow",elements:"flows",integrationSpecific:!0,parentKey:"universalFlowId"}};function jr(s){return delete s.workspaceId,delete s.createdAt,delete s.updatedAt,delete s.revision,delete s.parentRevision,Object.keys(s).map(e=>{e.match(/universal.*Revision/g)&&delete s[e]}),s}c(jr,"baseExportCleanup");class bs{static{c(this,"ElementsCache")}elements=new Map;typeIndex=new Map;constructor(e){e&&this.addAll(e)}add(e){const t=e.id;this.elements.set(t,e),this.typeIndex.has(e.type)||this.typeIndex.set(e.type,new Set),this.typeIndex.get(e.type).add(t)}remove(e){const t=e.id,n=this.elements.delete(t);if(n){const i=this.typeIndex.get(e.type);i&&(i.delete(t),i.size===0&&this.typeIndex.delete(e.type))}return n}put(e){this.elements.has(e.id)&&this.remove(e),this.add(e)}get(e){return this.elements.get(e)}getElementsByType(e){const t=this.typeIndex.get(e);return t?Array.from(t).map(n=>this.elements.get(n)).filter(n=>n!==void 0):[]}getAll(){return Array.from(this.elements.values())??[]}getTypes(){return Array.from(this.typeIndex.keys())}addAll(e){for(const t of e)t&&this.add(t)}removeAll(e){for(const t of e)this.remove(t)}getElementIdsByType(e){return this.typeIndex.get(e)}clear(){this.elements.clear(),this.typeIndex.clear()}getAllIds(){return new Set(this.elements.keys())}}class Kr{static{c(this,"WorkspaceLogger")}_logs;workspaceNotifications;constructor(){this._logs=[],this.workspaceNotifications=re}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),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")}clear(){this._logs=[]}}const O=new Kr;class Ss{static{c(this,"ElementsManager")}cache;handler;connectorsMapping;constructor(e){this.cache=new bs,this.handler=e}async refresh(){try{const e=new bs,t=await this.handler.getIntegrations();e.addAll(t);const n=[j.Integration,j.Connector],i=Object.keys(ne),r=await Promise.all(i.filter(o=>!n.includes(o)).map(async o=>this.handler.getElementsByType(o,t)));for(const o of r)e.addAll(o);this.cache.clear(),this.cache.addAll(e.getAll())}catch(e){throw O.error(`Failed to refresh elements: ${e instanceof Error?e.message:"Unknown error"}`),e}}async putElement(e){let t,n=this.cache.get(e.id);try{e.data.id&&n?(t="update",n=await this.handler.updateElement(e,n,{elements:this.cache.getAll(),connectorsMapping:this.connectorsMapping})):(t="create",n=await this.handler.createElement(e,{elements:this.cache.getAll(),connectorsMapping:this.connectorsMapping})),this.cache.put(n)}catch(i){O.error(`Failed to ${t} element ${e.type}/${e.key} ${e.integrationKey?`for integration ${e.integrationKey}`:""} (${e.id}): ${i instanceof Error?i.message:"Unknown error"}`)}}async deleteElement(e){try{await this.handler.deleteElement(e,{elements:this.cache.getAll(),connectorsMapping:this.connectorsMapping}),this.cache.remove(e)}catch(t){O.error(`Failed to delete element: ${t instanceof Error?t.message:"Unknown error"}`)}}setConnectorsMapping(e){this.connectorsMapping=e}}async function Fr(s,e="full"){const t={};O.info("[connectors] Getting remote workspace data");const n=await s.integrations.findAll();t.integration=n.map(i=>dn("integration",i));for(const i of Object.keys(ne)){const r=ne[i];if(r.exportable===!1)continue;const o=[];O.info(`[connectors] Reading ${r.elements} from remote workspace`);const a=await s[r.elements].findAll();if(o.push(...a.map(l=>dn(i,l))),r.integrationSpecific)for(const l of n){const u=await s[r.elements].findAll({integrationId:l.id});o.push(...u.map(p=>(p.integrationKey=l.key,dn(i,p))))}o.length>0&&e=="full"&&(console.table(o.map(l=>({key:l.key,integrationKey:l.integrationKey,universal:!l.integrationKey})).reduce((l,u)=>(l||(l={}),l[u.key]||(l[u.key]={}),u.universal&&(l[u.key].universal=!0),u.integrationKey&&(l[u.key].integration?l[u.key].integration+=` ${u.integrationKey}`:l[u.key].integration=u.integrationKey),l),{})),console.groupEnd()),t[i]=o}return O.success("[connectors] Remote workspace data retrieved successfully"),t}c(Fr,"getWorkspaceData");function dn(s,e){return e=jr(e),ne[s].exportCleanup?ne[s].exportCleanup(e):e}c(dn,"cleanUpForExport");class _r{static{c(this,"MembraneClient")}client=null;currentConfig=null;tokenExpiry=0;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=Pe(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 ss({token:t,apiUri:e.apiUri})}async getClient(e){const t=this.getCurrentConfig(e);if(!t)throw new Error("Unable to create IntegrationAppClient: 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}getCurrentConfigInfo(){return this.currentConfig}}const yt=new _r;async function Cs(s){const e=await yt.getClient(s);if(!e)throw new Error("No workspace configuration found");return(await e.get("org-workspace-id")).id}c(Cs,"getWorkspaceId");const ks="connectors",vs="development",hn={};async function Br({integrations:s,allConnectors:e=!1}){const t=Cr(),n=await yt.getClient(process.cwd()),i=new Set,r={};for(const o of s){const a=o.connectorId,l=o.connectorVersion;if(!r[a]?.has(o.connectorVersion)){const u=await Es({client:n,connectorId:a}),h=!!u.workspaceId||e;if(!u?.key){O.error(`[connectors] Connector ${a} has no key. Skipping..`);continue}h&&(i.has(a)||(await Vr({basePath:t,connector:u}),i.add(a)),r[a]||(r[a]=new Set),r[a].has(l)||(await Hr({client:n,connector:u,connectorVersion:l,basePath:t}),r[a].add(l)))}}}c(Br,"pullConnectors");async function Ur(){const s=await yt.getClient(process.cwd()),e=await Fr(s,"minified"),n=(await s.get("org-workspace-id")).id,i={};O.info("[connectors] Loading custom connectors");const r=s,o=await r.get(`/connectors?workspaceId=${n}`);O.info("[connectors] Loading public connectors"),e.connector=o;const a=pn(),u=(R.existsSync(a)?R.readdirSync(a):[]).filter(p=>{if(p.startsWith("."))return!1;const h=B.join(a,p);try{return R.statSync(h).isDirectory()}catch{return!1}});for(const p of u){O.info(`[connectors] Loading connector from: ${p}`);const h=R.readdirSync(B.join(a,p)),f=await qr(p);if("baseUri"in f&&delete f.baseUri,f.uuid&&e.connector?.find(w=>w.uuid==f.uuid))i[f.id]=e.connector.find(w=>w.uuid==f.uuid).id,O.info(`[connectors] Matched ${f.name} uuid: ${f.uuid}`);else if(!i[f.id]){let w=!1;try{const d=await Es({client:s,connectorId:f.id});d&&!d.workspaceId&&(w=!0)}catch{}if(!w){O.info(`[connectors] Creating custom connector ${f.name} (${f.key})`);const d=await r.post("connectors",{...f,workspaceId:n});i[f.id]=d.id}}const g=h.filter(w=>R.statSync(B.join(a,p,w)).isDirectory());for(const w of g)await Gr({client:s,connector:f,version:w,connectorId:i[f.id]})}return i}c(Ur,"pushConnectors");function pn(){const s=on();return B.join(s.membraneDirPath,ks)}c(pn,"getConnectorsPath");async function qr(s){return de.load(R.readFileSync(B.join(pn(),s,`${s}.yml`),"utf8"))}c(qr,"readConnector");async function Jr(s,e){return O.info(`[connectors] Zipping ${s} into ${e}`),new Promise((t,n)=>{const i=R.createWriteStream(e),r=cr("zip",{zlib:{level:9}});i.on("close",()=>{O.success(`[connectors] Successfully created ${e}`),t()}),i.on("end",()=>{O.info("[connectors] Data has been drained")}),r.on("warning",a=>{a.code==="ENOENT"?console.warn(a):n(a)}),r.on("error",a=>{n(a)}),r.pipe(i);const o=R.readdirSync(s);for(const a of o){const l=B.join(s,a),u=R.statSync(l);u.isFile()?r.file(l,{name:a}):u.isDirectory()&&r.directory(l,a)}r.finalize()})}c(Jr,"createZipArchive");async function Wr(s,e){return O.info(`[connectors] Unzipping into ${e}`),new Promise((t,n)=>{const i=ur.Parse();i.on("entry",r=>{const o=r.path;if(r.type==="Directory"){const l=B.join(e,o);R.mkdirSync(l,{recursive:!0}),r.autodrain()}else{const l=B.join(e,o),u=B.dirname(l);R.mkdirSync(u,{recursive:!0});const p=R.createWriteStream(l);r.pipe(p),p.on("finish",()=>{console.debug(`Extracted: ${o}`)})}}),i.on("end",()=>{O.success(`[connectors] Successfully extracted to ${e}`),t()}),i.on("error",r=>{n(r)}),i.write(s),i.end()})}c(Wr,"extractZipArchive");async function Gr({client:s,connector:e,version:t,connectorId:n}){const i=B.join(pn(),wt(e),Ts(t)),r=B.join(i,"src"),o=B.join(i,"src.zip"),a=R.existsSync(o);if(R.existsSync(r)&&(O.info(`[connectors] Archiving source code for ${e.name} version ${t}`),await Jr(r,o)),!R.existsSync(o)){O.warning(`[connectors] No source code found for ${e.name} version ${t}`);return}try{const l=new lr;if(l.append("file",R.createReadStream(o),"file.zip"),O.info(`[connectors] Pushing connector version ${t} for ${e.name}`),t==vs)O.info(`[connectors] Uploading connector ${n}`),await s.post(`connectors/${n}/upload`,l,{headers:{...l.getHeaders()}});else{if(l.append("version",t),l.append("changelog","Imported Version"),(await s.get(`/connectors/${n}/versions`)).find(p=>p.version==t)){O.info(`[connectors] Version ${t} already published`);return}O.info(`[connectors] Publishing version ${t} of connector ${n}`),await s.post(`connectors/${n}/publish-version`,l,{headers:{...l.getHeaders()}})}O.success(`Successfully pushed connector version ${t} for ${e.name}`)}catch(l){O.error(`Error pushing connector version ${t} for ${e.name}: ${l}`)}finally{!a&&R.existsSync(o)&&(O.info(`[connectors] Cleaning up temporary zip file for ${e.name} version ${t}`),R.unlinkSync(o))}}c(Gr,"pushConnectorVersion");async function Es({client:s,connectorId:e}){if(hn[e])return hn[e];const t=await s.get(`connectors/${e}`);return hn[e]=t,t}c(Es,"getConnector");async function Vr({basePath:s,connector:e}){const t=wt(e),n=B.join(s,ks,t);R.mkdirSync(n,{recursive:!0});const i=B.join(n,`${wt(e)}.yml`);R.writeFileSync(i,de.dump(e)),O.info(`[connectors] Pulled connector ${e.name}`)}c(Vr,"pullConnector");async function Hr({client:s,connector:e,connectorVersion:t,basePath:n}){const i=wt(e),r=Ts(t),o=B.join(n,"connectors",i,r),a=await s.get(`connectors/${e.id}/download`,{version:t},{responseType:"arraybuffer",headers:{Accept:"application/zip"},timeout:1e6});R.mkdirSync(o,{recursive:!0});const l=B.join(o,"src.zip");R.writeFileSync(l,a);const u=B.join(o,"src");R.existsSync(u)&&await Wr(a,u),O.info(`[connectors] Pulled connector version: ${e.name} (${r})`)}c(Hr,"pullConnectorVersion");function wt(s){return s.key}c(wt,"getConnectorDirName");function Ts(s){return s??vs}c(Ts,"getConnectorVersionDirName");const P={NOT_SYNCED:"not_synced",PULLING:"pulling",PUSHING:"pushing",RESOLVING:"resolving",CONFLICTS:"conflicts",SYNCED:"synced",WATCHING:"watching",ERROR:"error"},Yr="membrane",zr=["**/node_modules/**","**/.git/**","**/.DS_Store","**/Thumbs.db","**/*.tmp","**/*.swp","**/*.swo","**/*.log","**/*.lock","**/dist/**","**/build/**","**/.cache/**","**/.next/**","**/.vscode/**","**/.idea/**"];function bt(s){return D.join(s,Yr)}c(bt,"getMembraneDir");const Qr=["id","workspaceId","integrationId","createdAt","updatedAt","revision","parentRevision","archivedAt","baseUri","state"],Is=[j.Action,j.FieldMapping,j.Flow,j.DataSource];class V{static{c(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||V.extractIntegrationKey(i)}get id(){return V.makeId(this.type,this.key,this.integrationKey)}get dirPath(){const e=he[this.type].apiPath;if(this.integrationKey){const t=he[j.Integration].apiPath;return D.join(t,this.integrationKey,e,this.key)}return D.join(e,this.key)}get path(){return D.join(this.dirPath,"spec.yaml")}get relativePath(){return D.relative(bt(process.cwd()),this.path)}isEqual(e){if(this.id!==e.id)return!1;const t=this.clean(),n=e.clean();return fr(t,n)}hasParent(){const e=this.getParentKey();return!!e&&!!this.data?.[e]}clean(){const e={...this.data};return Qr.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 V(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 V(e,t.key,n,t)}static fromPathAndData(e,t){const n=V.parsePath(e);if(!t)return;const i=t?.key||n?.key;return n?V.new(n.type,i,n.integrationKey,t):void 0}static fromElement(e){return new V(e.type,e.key,e.integrationKey,{...e.data})}static idFromPath(e){const t=V.parsePath(e);if(t)return V.makeId(t.type,t.key,t.integrationKey)}static makeId(e,t,n){return e===j.Integration?`${e}:${t}`:V.isIntegrationSpecific(e)?`${n||"universal"}:${e}:${t}`:`${e}:${t}`}static parsePath(e){const t=this.getRelativePath(e);if(this.isConnectorFile(t)||!this.isElementFile(t))return;const n=Object.values(he).map(l=>l.apiPath).join("|"),i=new RegExp(`^(?<elementType>${n})/(?<elementKey>[^/]+)/spec\\.ya?ml$`),r=t.match(i);if(r?.groups){const{elementType:l,elementKey:u}=r.groups,p=this.getElementTypeFromPath(l);if(p)return{type:p,key:u}}const o=new RegExp(`^integrations/(?<integrationKey>[^/]+)/(?<elementType>${n})/(?<elementKey>[^/]+)/spec\\.ya?ml$`),a=t.match(o);if(a?.groups){const{integrationKey:l,elementType:u,elementKey:p}=a.groups,h=this.getElementTypeFromPath(u);if(h)return{type:h,key:p,integrationKey:l}}}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 isConnectorFile(e){const[t]=e.split(D.sep);return t===he[j.Connector].apiPath}static getElementTypeFromPath(e){return Object.values(j).find(t=>he[t].apiPath===e)}static getRelativePath(e){return D.relative(bt(process.cwd()),e)}static isIntegrationSpecific(e){return Is.includes(e)}static canBeIntegrationSpecific(e){return Is.includes(e)}}class Xr{static{c(this,"LocalElementsHandler")}basePath;constructor(){this.basePath=bt(process.cwd())}async getElementsByType(e,t){const n=[],i=D.join(this.basePath,he[e].apiPath),r=await this.readElementsInDir(i);n.push(...r);for(const o of t){const a=D.join(this.basePath,he[j.Integration].apiPath,o.key,he[e].apiPath),l=await this.readElementsInDir(a);n.push(...l)}return n.length>0&&O.success(`[local] Fetched ${n.length} ${e}${n.length!==1?"s":""}`),n}async fetchElement(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=D.join(this.basePath,t.dirPath),i=D.join(this.basePath,t.path);return x.existsSync(n)||x.mkdirSync(n,{recursive:!0}),x.writeFileSync(i,de.dump(e.data)),O.info(`[local] Written ${t.relativePath}`),t}async deleteElement(e){const t=D.join(this.basePath,e.path),n=D.join(this.basePath,e.dirPath);x.existsSync(t)&&x.rmSync(t,{force:!0}),this.pruneEmptyDir(n),O.info(`[local] Deleted ${e.relativePath}`)}async getIntegrations(){const e=D.join(this.basePath,he[j.Integration].apiPath);return this.readElementsInDir(e)}async readElement(e){if(!x.existsSync(e))return;const t=x.readFileSync(e,"utf8"),n=de.load(t);if(n)return V.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=D.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(D.dirname(e))}catch(t){console.warn(`Failed to prune empty directory ${e}:`,t)}}}class Zr{static{c(this,"RemoteElementsHandler")}client;async getElementsByType(e,t){const n=await this.findAll(e);if(!V.canBeIntegrationSpecific(e))return n;for(const i of t){const r=i.key,o=i.data.id,a=await this.findAll(e,{integrationKey:r,integrationId:o});n.push(...a)}return n.length>0&&O.success(`[remote] Fetched ${n.length} ${e}${n.length!==1?"s":""}`),n}async fetchElement(e){const n=await(await this.getClient())[ne[e.type].element](e.data.id).get();return V.fromData(e.type,n)}async createElement(e,t){const n=e.clean(),i=await this.getClient();this.transformElementForCreate(e,n,t),e.key==="download-document-by-id"&&O.info(`CREATE ${e.id}:`+JSON.stringify(n));const r=await i[ne[e.type].elements].create(n),o=V.fromData(e.type,r);return O.info(`[remote] Created ${o.id}`),o}async updateElement(e,t,n){if(!e.data.id)throw new Error("Element must have an id to update");const i=e.clean(),r=await this.getClient();this.transformElementForUpdate(e,i,n);const o=await r[ne[e.type].element](t.data.id).put(i),a=V.fromData(t.type,o);return O.info(`[remote] Updated ${t.id}`),a}async deleteElement(e){if(!e.data.id)throw new Error("Element must have an id to delete");await(await this.getClient())[ne[e.type].element](e.data.id).archive(),O.info(`[remote] Deleted ${e.id}`)}async getIntegrations(){const n=(await(await this.getClient()).integrations.findAll()).map(i=>V.fromData(j.Integration,i));return n.length>0&&O.success(`[remote] Fetched ${n.length} integrations`),n}transformElementForCreate(e,t,n){if(e.integrationKey){const i=n.elements.find(r=>r.type===j.Integration&&r.key===e.integrationKey);if(i)t.integrationId=i.data.id;else throw new Error(`Integration ${e.integrationKey} not found. Integrations: ${n.elements.filter(r=>r.type===j.Integration).map(r=>r.key).join(", ")}`)}if(e.type===j.Integration){const i=n.connectorsMapping?.[t.connectorId];i&&(t.connectorId=i)}}transformElementForUpdate(e,t,n){if(e.type===j.Integration){const i=n.connectorsMapping?.[t.connectorId];i&&(t.connectorId=i)}}async findAll(e,t={}){return(await(await this.getClient())[ne[e].elements].findAll(t)).filter(r=>r.key).map(r=>V.fromData(e,r))}async getClient(){return this.client||(this.client=await yt.getClient(process.cwd())),this.client}}const mn=Symbol.for("yaml.alias"),gn=Symbol.for("yaml.document"),be=Symbol.for("yaml.map"),Ns=Symbol.for("yaml.pair"),le=Symbol.for("yaml.scalar"),Re=Symbol.for("yaml.seq"),se=Symbol.for("yaml.node.type"),Se=c(s=>!!s&&typeof s=="object"&&s[se]===mn,"isAlias"),Ee=c(s=>!!s&&typeof s=="object"&&s[se]===gn,"isDocument"),je=c(s=>!!s&&typeof s=="object"&&s[se]===be,"isMap"),_=c(s=>!!s&&typeof s=="object"&&s[se]===Ns,"isPair"),K=c(s=>!!s&&typeof s=="object"&&s[se]===le,"isScalar$1"),Ke=c(s=>!!s&&typeof s=="object"&&s[se]===Re,"isSeq");function q(s){if(s&&typeof s=="object")switch(s[se]){case be:case Re:return!0}return!1}c(q,"isCollection$1");function J(s){if(s&&typeof s=="object")switch(s[se]){case mn:case be:case le:case Re:return!0}return!1}c(J,"isNode");const As=c(s=>(K(s)||q(s))&&!!s.anchor,"hasAnchor"),X=Symbol("break visit"),Os=Symbol("skip children"),ue=Symbol("remove node");function Te(s,e){const t=$s(e);Ee(s)?Fe(null,s.contents,t,Object.freeze([s]))===ue&&(s.contents=null):Fe(null,s,t,Object.freeze([]))}c(Te,"visit$1"),Te.BREAK=X,Te.SKIP=Os,Te.REMOVE=ue;function Fe(s,e,t,n){const i=Ls(s,e,t,n);if(J(i)||_(i))return xs(s,n,i),Fe(s,i,t,n);if(typeof i!="symbol"){if(q(e)){n=Object.freeze(n.concat(e));for(let r=0;r<e.items.length;++r){const o=Fe(r,e.items[r],t,n);if(typeof o=="number")r=o-1;else{if(o===X)return X;o===ue&&(e.items.splice(r,1),r-=1)}}}else if(_(e)){n=Object.freeze(n.concat(e));const r=Fe("key",e.key,t,n);if(r===X)return X;r===ue&&(e.key=null);const o=Fe("value",e.value,t,n);if(o===X)return X;o===ue&&(e.value=null)}}return i}c(Fe,"visit_");async function St(s,e){const t=$s(e);Ee(s)?await _e(null,s.contents,t,Object.freeze([s]))===ue&&(s.contents=null):await _e(null,s,t,Object.freeze([]))}c(St,"visitAsync"),St.BREAK=X,St.SKIP=Os,St.REMOVE=ue;async function _e(s,e,t,n){const i=await Ls(s,e,t,n);if(J(i)||_(i))return xs(s,n,i),_e(s,i,t,n);if(typeof i!="symbol"){if(q(e)){n=Object.freeze(n.concat(e));for(let r=0;r<e.items.length;++r){const o=await _e(r,e.items[r],t,n);if(typeof o=="number")r=o-1;else{if(o===X)return X;o===ue&&(e.items.splice(r,1),r-=1)}}}else if(_(e)){n=Object.freeze(n.concat(e));const r=await _e("key",e.key,t,n);if(r===X)return X;r===ue&&(e.key=null);const o=await _e("value",e.value,t,n);if(o===X)return X;o===ue&&(e.value=null)}}return i}c(_e,"visitAsync_");function $s(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}c($s,"initVisitor");function Ls(s,e,t,n){if(typeof t=="function")return t(s,e,n);if(je(e))return t.Map?.(s,e,n);if(Ke(e))return t.Seq?.(s,e,n);if(_(e))return t.Pair?.(s,e,n);if(K(e))return t.Scalar?.(s,e,n);if(Se(e))return t.Alias?.(s,e,n)}c(Ls,"callVisitor");function xs(s,e,t){const n=e[e.length-1];if(q(n))n.items[s]=t;else if(_(n))s==="key"?n.key=t:n.value=t;else if(Ee(n))n.contents=t;else{const i=Se(n)?"alias":"scalar";throw new Error(`Cannot replace node with ${i} parent`)}}c(xs,"replaceNode");const eo={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},to=c(s=>s.replace(/[!,[\]{}]/g,e=>eo[e]),"escapeTagName");class Q{static{c(this,"Directives")}constructor(e,t){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},Q.defaultYaml,e),this.tags=Object.assign({},Q.defaultTags,t)}clone(){const e=new Q(this.yaml,this.tags);return e.docStart=this.docStart,e}atDocument(){const e=new Q(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:Q.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},Q.defaultTags);break}return e}add(e,t){this.atNextDocument&&(this.yaml={explicit:Q.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},Q.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+to(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&&J(e.contents)){const r={};Te(e.contents,(o,a)=>{J(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(`
|
|
3
|
+
`)}}Q.defaultYaml={explicit:!1,version:"1.2"},Q.defaultTags={"!!":"tag:yaml.org,2002:"};function Ds(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}c(Ds,"anchorIsValid");function Ps(s){const e=new Set;return Te(s,{Value(t,n){n.anchor&&e.add(n.anchor)}}),e}c(Ps,"anchorNames");function Ms(s,e){for(let t=1;;++t){const n=`${s}${t}`;if(!e.has(n))return n}}c(Ms,"findNewAnchor");function no(s,e){const t=[],n=new Map;let i=null;return{onAnchor:c(r=>{t.push(r),i??(i=Ps(s));const o=Ms(e,i);return i.add(o),o},"onAnchor"),setAnchors:c(()=>{for(const r of t){const o=n.get(r);if(typeof o=="object"&&o.anchor&&(K(o.node)||q(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}}c(no,"createNodeAnchors");function Be(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=Be(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=Be(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=Be(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=Be(s,n,i,r);o===void 0?delete n[i]:o!==r&&(n[i]=o)}return s.call(e,t,n)}c(Be,"applyReviver");function ie(s,e,t){if(Array.isArray(s))return s.map((n,i)=>ie(n,String(i),t));if(s&&typeof s.toJSON=="function"){if(!t||!As(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}c(ie,"toJS");class yn{static{c(this,"NodeBase")}constructor(e){Object.defineProperty(this,se,{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(!Ee(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=ie(this,"",o);if(typeof i=="function")for(const{count:l,res:u}of o.anchors.values())i(u,l);return typeof r=="function"?Be(r,{"":a},"",a):a}}class Ct extends yn{static{c(this,"Alias")}constructor(e){super(mn),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=[],Te(e,{Node:c((r,o)=>{(Se(o)||As(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 l=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new ReferenceError(l)}let a=n.get(o);if(a||(ie(o,null,t),a=n.get(o)),!a||a.res===void 0){const l="This should not happen: Alias anchor was not resolved?";throw new ReferenceError(l)}if(r>=0&&(a.count+=1,a.aliasCount===0&&(a.aliasCount=kt(i,o,n)),a.count*a.aliasCount>r)){const l="Excessive alias count indicates a resource exhaustion attack";throw new ReferenceError(l)}return a.res}toString(e,t,n){const i=`*${this.source}`;if(e){if(Ds(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 kt(s,e,t){if(Se(e)){const n=e.resolve(s),i=t&&n&&t.get(n);return i?i.count*i.aliasCount:0}else if(q(e)){let n=0;for(const i of e.items){const r=kt(s,i,t);r>n&&(n=r)}return n}else if(_(e)){const n=kt(s,e.key,t),i=kt(s,e.value,t);return Math.max(n,i)}return 1}c(kt,"getAliasCount");const Rs=c(s=>!s||typeof s!="function"&&typeof s!="object","isScalarValue");class L extends yn{static{c(this,"Scalar")}constructor(e){super(le),this.value=e}toJSON(e,t){return t?.keep?this.value:ie(this.value,e,t)}toString(){return String(this.value)}}L.BLOCK_FOLDED="BLOCK_FOLDED",L.BLOCK_LITERAL="BLOCK_LITERAL",L.PLAIN="PLAIN",L.QUOTE_DOUBLE="QUOTE_DOUBLE",L.QUOTE_SINGLE="QUOTE_SINGLE";const so="tag:yaml.org,2002:";function io(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)}c(io,"findTagObject");function nt(s,e,t){if(Ee(s)&&(s=s.contents),J(s))return s;if(_(s)){const h=t.schema[be].createNode?.(t.schema,null,t);return h.items.push(s),h}(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 l;if(n&&s&&typeof s=="object"){if(l=a.get(s),l)return l.anchor??(l.anchor=i(s)),new Ct(l.anchor);l={anchor:null,node:null},a.set(s,l)}e?.startsWith("!!")&&(e=so+e.slice(2));let u=io(s,e,o.tags);if(!u){if(s&&typeof s.toJSON=="function"&&(s=s.toJSON()),!s||typeof s!="object"){const h=new L(s);return l&&(l.node=h),h}u=s instanceof Map?o[be]:Symbol.iterator in Object(s)?o[Re]:o[be]}r&&(r(u),delete t.onTagObj);const p=u?.createNode?u.createNode(t.schema,s,t):typeof u?.nodeClass?.from=="function"?u.nodeClass.from(t.schema,s,t):new L(s);return e?p.tag=e:u.default||(p.tag=u.tag),l&&(l.node=p),p}c(nt,"createNode");function vt(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 nt(n,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:c(()=>{throw new Error("This should not happen, please report a bug.")},"onAnchor"),schema:s,sourceObjects:new Map})}c(vt,"collectionFromPath");const st=c(s=>s==null||typeof s=="object"&&!!s[Symbol.iterator]().next().done,"isEmptyPath");class js extends yn{static{c(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=>J(n)||_(n)?n.clone(e):n),this.range&&(t.range=this.range.slice()),t}addIn(e,t){if(st(e))this.add(t);else{const[n,...i]=e,r=this.get(n,!0);if(q(r))r.addIn(i,t);else if(r===void 0&&this.schema)this.set(n,vt(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(q(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&&K(r)?r.value:r:q(r)?r.getIn(i,t):void 0}hasAllNullValues(e){return this.items.every(t=>{if(!_(t))return!1;const n=t.value;return n==null||e&&K(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 q(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(q(r))r.setIn(i,t);else if(r===void 0&&this.schema)this.set(n,vt(this.schema,i,t));else throw new Error(`Expected YAML collection at ${n}. Remaining path: ${i}`)}}}const ro=c(s=>s.replace(/^(?!$)(?: $)?/gm,"#"),"stringifyComment");function pe(s,e){return/^\n+$/.test(s)?s.substring(1):e?s.replace(/^(?! *$)/gm,e):s}c(pe,"indentComment");const Ie=c((s,e,t)=>s.endsWith(`
|
|
4
4
|
`)?pe(t,e):t.includes(`
|
|
5
5
|
`)?`
|
|
6
|
-
`+pe(t,e):(s.endsWith(" ")?"":" ")+t,"lineComment"),Ks="flow",wn="block",Et="quoted";function Tt(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 l=Math.max(1+r,1+i-e.length);if(s.length<=l)return s;const u=[],p={};let
|
|
7
|
-
`)t===wn&&(
|
|
8
|
-
`&&g!==" "){const T=s[
|
|
9
|
-
`&&T!==" "&&(f=
|
|
6
|
+
`+pe(t,e):(s.endsWith(" ")?"":" ")+t,"lineComment"),Ks="flow",wn="block",Et="quoted";function Tt(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 l=Math.max(1+r,1+i-e.length);if(s.length<=l)return s;const u=[],p={};let h=i-e.length;typeof n=="number"&&(n>i-Math.max(2,r)?u.push(0):h=i-n);let f,g,w=!1,d=-1,y=-1,C=-1;t===wn&&(d=Fs(s,d,e.length),d!==-1&&(h=d+l));for(let A;A=s[d+=1];){if(t===Et&&A==="\\"){switch(y=d,s[d+1]){case"x":d+=3;break;case"u":d+=5;break;case"U":d+=9;break;default:d+=1}C=d}if(A===`
|
|
7
|
+
`)t===wn&&(d=Fs(s,d,e.length)),h=d+e.length+l,f=void 0;else{if(A===" "&&g&&g!==" "&&g!==`
|
|
8
|
+
`&&g!==" "){const T=s[d+1];T&&T!==" "&&T!==`
|
|
9
|
+
`&&T!==" "&&(f=d)}if(d>=h)if(f)u.push(f),h=f+l,f=void 0;else if(t===Et){for(;g===" "||g===" ";)g=A,A=s[d+=1],w=!0;const T=d>C+1?d-2:y-1;if(p[T])return s;u.push(T),p[T]=!0,h=T+l,f=void 0}else w=!0}g=A}if(w&&a&&a(),u.length===0)return s;o&&o();let v=s.slice(0,u[0]);for(let A=0;A<u.length;++A){const T=u[A],N=u[A+1]||s.length;T===0?v=`
|
|
10
10
|
${e}${s.slice(0,N)}`:(t===Et&&p[T]&&(v+=`${s[T]}\\`),v+=`
|
|
11
|
-
${e}${s.slice(T+1,N)}`)}return v}c(Tt,"foldFlowLines");function
|
|
12
|
-
`);n=e,i=e+1,r=s[i]}return n}c(
|
|
11
|
+
${e}${s.slice(T+1,N)}`)}return v}c(Tt,"foldFlowLines");function Fs(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!==`
|
|
12
|
+
`);n=e,i=e+1,r=s[i]}return n}c(Fs,"consumeMoreIndentedLines");const It=c((s,e)=>({indentAtStart:e?s.indent.length:s.indentAtStart,lineWidth:s.options.lineWidth,minContentWidth:s.options.minContentWidth}),"getFoldOptions"),Nt=c(s=>/^(%|---|\.\.\.)/m.test(s),"containsDocumentMarker");function oo(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]===`
|
|
13
13
|
`){if(r-o>n)return!0;if(o=r+1,i-o<=n)return!1}return!0}c(oo,"lineLengthOverLimit");function it(s,e){const t=JSON.stringify(s);if(e.options.doubleQuotedAsJSON)return t;const{implicitKey:n}=e,i=e.options.doubleQuotedMinMultiLineLength,r=e.indent||(Nt(s)?" ":"");let o="",a=0;for(let l=0,u=t[l];u;u=t[++l])if(u===" "&&t[l+1]==="\\"&&t[l+2]==="n"&&(o+=t.slice(a,l)+"\\ ",l+=1,a=l,u="\\"),u==="\\")switch(t[l+1]){case"u":{o+=t.slice(a,l);const p=t.substr(l+2,4);switch(p){case"0000":o+="\\0";break;case"0007":o+="\\a";break;case"000b":o+="\\v";break;case"001b":o+="\\e";break;case"0085":o+="\\N";break;case"00a0":o+="\\_";break;case"2028":o+="\\L";break;case"2029":o+="\\P";break;default:p.substr(0,2)==="00"?o+="\\x"+p.substr(2):o+=t.substr(l,6)}l+=5,a=l+1}break;case"n":if(n||t[l+2]==='"'||t.length<i)l+=1;else{for(o+=t.slice(a,l)+`
|
|
14
14
|
|
|
15
15
|
`;t[l+2]==="\\"&&t[l+3]==="n"&&t[l+4]!=='"';)o+=`
|
|
@@ -20,84 +20,84 @@ ${t}`)+"'";return e.implicitKey?n:Tt(n,t,Ks,It(e,!1))}c(bn,"singleQuotedString")
|
|
|
20
20
|
+(?!
|
|
21
21
|
|$)`,"g")}catch{Sn=/\n+(?!\n|$)/g}function At({comment:s,type:e,value:t},n,i,r){const{blockQuote:o,commentString:a,lineWidth:l}=n.options;if(!o||/\n[\t ]+$/.test(t)||/^\s*$/.test(t))return Ue(t,n);const u=n.indent||(n.forceBlockIndent||Nt(t)?" ":""),p=o==="literal"?!0:o==="folded"||e===L.BLOCK_FOLDED?!1:e===L.BLOCK_LITERAL?!0:!oo(t,l,u.length);if(!t)return p?`|
|
|
22
22
|
`:`>
|
|
23
|
-
`;let
|
|
23
|
+
`;let h,f;for(f=t.length;f>0;--f){const N=t[f-1];if(N!==`
|
|
24
24
|
`&&N!==" "&&N!==" ")break}let g=t.substring(f);const w=g.indexOf(`
|
|
25
|
-
`);w===-1?
|
|
26
|
-
`&&(g=g.slice(0,-1)),g=g.replace(Sn,`$&${u}`));let
|
|
27
|
-
`)C=y;else break}let v=t.substring(0,C<y?C+1:y);v&&(t=t.substring(v.length),v=v.replace(/\n+/g,`$&${u}`));let T=(
|
|
28
|
-
$&`).replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,"$1$2").replace(/\n+/g,`$&${u}`);let
|
|
25
|
+
`);w===-1?h="-":t===g||w!==g.length-1?(h="+",r&&r()):h="",g&&(t=t.slice(0,-g.length),g[g.length-1]===`
|
|
26
|
+
`&&(g=g.slice(0,-1)),g=g.replace(Sn,`$&${u}`));let d=!1,y,C=-1;for(y=0;y<t.length;++y){const N=t[y];if(N===" ")d=!0;else if(N===`
|
|
27
|
+
`)C=y;else break}let v=t.substring(0,C<y?C+1:y);v&&(t=t.substring(v.length),v=v.replace(/\n+/g,`$&${u}`));let T=(d?u?"2":"1":"")+h;if(s&&(T+=" "+a(s.replace(/ ?[\r\n]+/g," ")),i&&i()),!p){const N=t.replace(/\n+/g,`
|
|
28
|
+
$&`).replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,"$1$2").replace(/\n+/g,`$&${u}`);let $=!1;const M=It(n,!0);o!=="folded"&&e!==L.BLOCK_FOLDED&&(M.onOverflow=()=>{$=!0});const E=Tt(`${v}${N}${g}`,u,wn,M);if(!$)return`>${T}
|
|
29
29
|
${u}${E}`}return t=t.replace(/\n+/g,`$&${u}`),`|${T}
|
|
30
30
|
${u}${v}${t}${g}`}c(At,"blockString");function ao(s,e,t,n){const{type:i,value:r}=s,{actualString:o,implicitKey:a,indent:l,indentStep:u,inFlow:p}=e;if(a&&r.includes(`
|
|
31
31
|
`)||p&&/[[\]{},]/.test(r))return Ue(r,e);if(/^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(r))return a||p||!r.includes(`
|
|
32
32
|
`)?Ue(r,e):At(s,e,t,n);if(!a&&!p&&i!==L.PLAIN&&r.includes(`
|
|
33
|
-
`))return At(s,e,t,n);if(Nt(r)){if(l==="")return e.forceBlockIndent=!0,At(s,e,t,n);if(a&&l===u)return Ue(r,e)}const
|
|
34
|
-
${l}`);if(o){const f=c(
|
|
35
|
-
${e.indent}${a}`:a}c(qe,"stringify$2");function uo({key:s,value:e},t,n,i){const{allNullValues:r,doc:o,indent:a,indentStep:l,options:{commentString:u,indentSeq:p,simpleKeys:
|
|
36
|
-
${a}:`):(y=`${y}:`,f&&(y+=Ie(y,t.indent,u(f))));let C,v,A;J(e)?(C=!!e.spaceBefore,v=e.commentBefore,A=e.comment):(C=!1,v=null,A=null,e&&typeof e=="object"&&(e=o.createNode(e))),t.implicitKey=!1,!g&&!f&&
|
|
37
|
-
`:"",v){const M=u(v)
|
|
38
|
-
${pe(M,t.indent)}`}N===""&&!t.inFlow
|
|
39
|
-
`&&(
|
|
40
|
-
|
|
41
|
-
`)
|
|
33
|
+
`))return At(s,e,t,n);if(Nt(r)){if(l==="")return e.forceBlockIndent=!0,At(s,e,t,n);if(a&&l===u)return Ue(r,e)}const h=r.replace(/\n+/g,`$&
|
|
34
|
+
${l}`);if(o){const f=c(d=>d.default&&d.tag!=="tag:yaml.org,2002:str"&&d.test?.test(h),"test"),{compat:g,tags:w}=e.doc.schema;if(w.some(f)||g?.some(f))return Ue(r,e)}return a?h:Tt(h,l,Ks,It(e,!1))}c(ao,"plainString");function rt(s,e,t,n){const{implicitKey:i,inFlow:r}=e,o=typeof s.value=="string"?s:Object.assign({},s,{value:String(s.value)});let{type:a}=s;a!==L.QUOTE_DOUBLE&&/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(o.value)&&(a=L.QUOTE_DOUBLE);const l=c(p=>{switch(p){case L.BLOCK_FOLDED:case L.BLOCK_LITERAL:return i||r?Ue(o.value,e):At(o,e,t,n);case L.QUOTE_DOUBLE:return it(o.value,e);case L.QUOTE_SINGLE:return bn(o.value,e);case L.PLAIN:return ao(o,e,t,n);default:return null}},"_stringify");let u=l(a);if(u===null){const{defaultKeyType:p,defaultStringType:h}=e.options,f=i&&p||h;if(u=l(f),u===null)throw new Error(`Unsupported default string type ${f}`)}return u}c(rt,"stringifyString");function _s(s,e){const t=Object.assign({blockQuote:!0,commentString:ro,defaultKeyType:null,defaultStringType:"PLAIN",directives:null,doubleQuotedAsJSON:!1,doubleQuotedMinMultiLineLength:40,falseStr:"false",flowCollectionPadding:!0,indentSeq:!0,lineWidth:80,minContentWidth:20,nullStr:"null",simpleKeys:!1,singleQuote:null,trueStr:"true",verifyAliasOrder:!0},s.schema.toStringOptions,e);let n;switch(t.collectionStyle){case"block":n=!1;break;case"flow":n=!0;break;default:n=null}return{anchors:new Set,doc:s,flowCollectionPadding:t.flowCollectionPadding?" ":"",indent:"",indentStep:typeof t.indent=="number"?" ".repeat(t.indent):" ",inFlow:n,options:t}}c(_s,"createStringifyContext");function co(s,e){if(e.tag){const i=s.filter(r=>r.tag===e.tag);if(i.length>0)return i.find(r=>r.format===e.format)??i[0]}let t,n;if(K(e)){n=e.value;let i=s.filter(r=>r.identify?.(n));if(i.length>1){const r=i.filter(o=>o.test);r.length>0&&(i=r)}t=i.find(r=>r.format===e.format)??i.find(r=>!r.format)}else n=e,t=s.find(i=>i.nodeClass&&n instanceof i.nodeClass);if(!t){const i=n?.constructor?.name??(n===null?"null":typeof n);throw new Error(`Tag not resolved for ${i} value`)}return t}c(co,"getTagObject");function lo(s,e,{anchors:t,doc:n}){if(!n.directives)return"";const i=[],r=(K(s)||q(s))&&s.anchor;r&&Ds(r)&&(t.add(r),i.push(`&${r}`));const o=s.tag??(e.default?null:e.tag);return o&&i.push(n.directives.tagString(o)),i.join(" ")}c(lo,"stringifyProps");function qe(s,e,t,n){if(_(s))return s.toString(e,t,n);if(Se(s)){if(e.doc.directives)return s.toString(e);if(e.resolvedAliases?.has(s))throw new TypeError("Cannot stringify circular structure without alias nodes");e.resolvedAliases?e.resolvedAliases.add(s):e.resolvedAliases=new Set([s]),s=s.resolve(e.doc)}let i;const r=J(s)?s:e.doc.createNode(s,{onTagObj:c(l=>i=l,"onTagObj")});i??(i=co(e.doc.schema.tags,r));const o=lo(r,i,e);o.length>0&&(e.indentAtStart=(e.indentAtStart??0)+o.length+1);const a=typeof i.stringify=="function"?i.stringify(r,e,t,n):K(r)?rt(r,e,t,n):r.toString(e,t,n);return o?K(r)||a[0]==="{"||a[0]==="["?`${o} ${a}`:`${o}
|
|
35
|
+
${e.indent}${a}`:a}c(qe,"stringify$2");function uo({key:s,value:e},t,n,i){const{allNullValues:r,doc:o,indent:a,indentStep:l,options:{commentString:u,indentSeq:p,simpleKeys:h}}=t;let f=J(s)&&s.comment||null;if(h){if(f)throw new Error("With simple keys, key nodes cannot have comments");if(q(s)||!J(s)&&typeof s=="object"){const M="With simple keys, collection cannot be used as a key value";throw new Error(M)}}let g=!h&&(!s||f&&e==null&&!t.inFlow||q(s)||(K(s)?s.type===L.BLOCK_FOLDED||s.type===L.BLOCK_LITERAL:typeof s=="object"));t=Object.assign({},t,{allNullValues:!1,implicitKey:!g&&(h||!r),indent:a+l});let w=!1,d=!1,y=qe(s,t,()=>w=!0,()=>d=!0);if(!g&&!t.inFlow&&y.length>1024){if(h)throw new Error("With simple keys, single line scalar must not span more than 1024 characters");g=!0}if(t.inFlow){if(r||e==null)return w&&n&&n(),y===""?"?":g?`? ${y}`:y}else if(r&&!h||e==null&&g)return y=`? ${y}`,f&&!w?y+=Ie(y,t.indent,u(f)):d&&i&&i(),y;w&&(f=null),g?(f&&(y+=Ie(y,t.indent,u(f))),y=`? ${y}
|
|
36
|
+
${a}:`):(y=`${y}:`,f&&(y+=Ie(y,t.indent,u(f))));let C,v,A;J(e)?(C=!!e.spaceBefore,v=e.commentBefore,A=e.comment):(C=!1,v=null,A=null,e&&typeof e=="object"&&(e=o.createNode(e))),t.implicitKey=!1,!g&&!f&&K(e)&&(t.indentAtStart=y.length+1),d=!1,!p&&l.length>=2&&!t.inFlow&&!g&&Ke(e)&&!e.flow&&!e.tag&&!e.anchor&&(t.indent=t.indent.substring(2));let T=!1;const N=qe(e,t,()=>T=!0,()=>d=!0);let $=" ";if(f||C||v){if($=C?`
|
|
37
|
+
`:"",v){const M=u(v);$+=`
|
|
38
|
+
${pe(M,t.indent)}`}N===""&&!t.inFlow?$===`
|
|
39
|
+
`&&($=`
|
|
40
|
+
|
|
41
|
+
`):$+=`
|
|
42
42
|
${t.indent}`}else if(!g&&q(e)){const M=N[0],E=N.indexOf(`
|
|
43
|
-
`),W=E!==-1,ge=t.inFlow??e.flow??e.items.length===0;if(W||!ge){let Le=!1;if(W&&(M==="&"||M==="!")){let H=N.indexOf(" ");M==="&"&&H!==-1&&H<E&&N[H+1]==="!"&&(H=N.indexOf(" ",H+1)),(H===-1||E<H)&&(Le=!0)}Le||(
|
|
43
|
+
`),W=E!==-1,ge=t.inFlow??e.flow??e.items.length===0;if(W||!ge){let Le=!1;if(W&&(M==="&"||M==="!")){let H=N.indexOf(" ");M==="&"&&H!==-1&&H<E&&N[H+1]==="!"&&(H=N.indexOf(" ",H+1)),(H===-1||E<H)&&(Le=!0)}Le||($=`
|
|
44
44
|
${t.indent}`)}}else(N===""||N[0]===`
|
|
45
|
-
`)&&(
|
|
46
|
-
${l}${
|
|
45
|
+
`)&&($="");return y+=$+N,t.inFlow?T&&n&&n():A&&!T?y+=Ie(y,t.indent,u(A)):d&&i&&i(),y}c(uo,"stringifyPair");function Bs(s,e){(s==="debug"||s==="warn")&&console.warn(e)}c(Bs,"warn");const Ot="<<",me={identify:c(s=>s===Ot||typeof s=="symbol"&&s.description===Ot,"identify"),default:"key",tag:"tag:yaml.org,2002:merge",test:/^<<$/,resolve:c(()=>Object.assign(new L(Symbol(Ot)),{addToJSMap:Us}),"resolve"),stringify:c(()=>Ot,"stringify")},fo=c((s,e)=>(me.identify(e)||K(e)&&(!e.type||e.type===L.PLAIN)&&me.identify(e.value))&&s?.doc.schema.tags.some(t=>t.tag===me.tag&&t.default),"isMergeKey");function Us(s,e,t){if(t=s&&Se(t)?t.resolve(s.doc):t,Ke(t))for(const n of t.items)Cn(s,e,n);else if(Array.isArray(t))for(const n of t)Cn(s,e,n);else Cn(s,e,t)}c(Us,"addMergeToJSMap");function Cn(s,e,t){const n=s&&Se(t)?t.resolve(s.doc):t;if(!je(n))throw new Error("Merge sources must be maps or map aliases");const i=n.toJSON(null,s,Map);for(const[r,o]of i)e instanceof Map?e.has(r)||e.set(r,o):e instanceof Set?e.add(r):Object.prototype.hasOwnProperty.call(e,r)||Object.defineProperty(e,r,{value:o,writable:!0,enumerable:!0,configurable:!0});return e}c(Cn,"mergeValue");function qs(s,e,{key:t,value:n}){if(J(t)&&t.addToJSMap)t.addToJSMap(s,e,n);else if(fo(s,t))Us(s,e,n);else{const i=ie(t,"",s);if(e instanceof Map)e.set(i,ie(n,i,s));else if(e instanceof Set)e.add(i);else{const r=ho(t,i,s),o=ie(n,r,s);r in e?Object.defineProperty(e,r,{value:o,writable:!0,enumerable:!0,configurable:!0}):e[r]=o}}return e}c(qs,"addPairToJSMap");function ho(s,e,t){if(e===null)return"";if(typeof e!="object")return String(e);if(J(s)&&t?.doc){const n=_s(t.doc,{});n.anchors=new Set;for(const r of t.anchors.keys())n.anchors.add(r.anchor);n.inFlow=!0,n.inStringifyKey=!0;const i=s.toString(n);if(!t.mapKeyWarned){let r=JSON.stringify(i);r.length>40&&(r=r.substring(0,36)+'..."'),Bs(t.doc.options.logLevel,`Keys with collection values will be stringified due to JS Object restrictions: ${r}. Set mapAsMap: true to use object keys.`),t.mapKeyWarned=!0}return i}return JSON.stringify(e)}c(ho,"stringifyKey");function kn(s,e,t){const n=nt(s,void 0,t),i=nt(e,void 0,t);return new Y(n,i)}c(kn,"createPair");class Y{static{c(this,"Pair")}constructor(e,t=null){Object.defineProperty(this,se,{value:Ns}),this.key=e,this.value=t}clone(e){let{key:t,value:n}=this;return J(t)&&(t=t.clone(e)),J(n)&&(n=n.clone(e)),new Y(t,n)}toJSON(e,t){const n=t?.mapAsMap?new Map:{};return qs(t,n,this)}toString(e,t,n){return e?.doc?uo(this,e,t,n):JSON.stringify(this)}}function Js(s,e,t){return(e.inFlow??s.flow?mo:po)(s,e,t)}c(Js,"stringifyCollection");function po({comment:s,items:e},t,{blockItemPrefix:n,flowChars:i,itemIndent:r,onChompKeep:o,onComment:a}){const{indent:l,options:{commentString:u}}=t,p=Object.assign({},t,{indent:r,type:null});let h=!1;const f=[];for(let w=0;w<e.length;++w){const d=e[w];let y=null;if(J(d))!h&&d.spaceBefore&&f.push(""),$t(t,f,d.commentBefore,h),d.comment&&(y=d.comment);else if(_(d)){const v=J(d.key)?d.key:null;v&&(!h&&v.spaceBefore&&f.push(""),$t(t,f,v.commentBefore,h))}h=!1;let C=qe(d,p,()=>y=null,()=>h=!0);y&&(C+=Ie(C,r,u(y))),h&&y&&(h=!1),f.push(n+C)}let g;if(f.length===0)g=i.start+i.end;else{g=f[0];for(let w=1;w<f.length;++w){const d=f[w];g+=d?`
|
|
46
|
+
${l}${d}`:`
|
|
47
47
|
`}}return s?(g+=`
|
|
48
|
-
`+pe(u(s),l),a&&a()):
|
|
49
|
-
`))&&(u=!0),
|
|
50
|
-
${r}${i}${
|
|
48
|
+
`+pe(u(s),l),a&&a()):h&&o&&o(),g}c(po,"stringifyBlockCollection");function mo({items:s},e,{flowChars:t,itemIndent:n}){const{indent:i,indentStep:r,flowCollectionPadding:o,options:{commentString:a}}=e;n+=r;const l=Object.assign({},e,{indent:n,inFlow:!0,type:null});let u=!1,p=0;const h=[];for(let w=0;w<s.length;++w){const d=s[w];let y=null;if(J(d))d.spaceBefore&&h.push(""),$t(e,h,d.commentBefore,!1),d.comment&&(y=d.comment);else if(_(d)){const v=J(d.key)?d.key:null;v&&(v.spaceBefore&&h.push(""),$t(e,h,v.commentBefore,!1),v.comment&&(u=!0));const A=J(d.value)?d.value:null;A?(A.comment&&(y=A.comment),A.commentBefore&&(u=!0)):d.value==null&&v?.comment&&(y=v.comment)}y&&(u=!0);let C=qe(d,l,()=>y=null);w<s.length-1&&(C+=","),y&&(C+=Ie(C,n,a(y))),!u&&(h.length>p||C.includes(`
|
|
49
|
+
`))&&(u=!0),h.push(C),p=h.length}const{start:f,end:g}=t;if(h.length===0)return f+g;if(!u){const w=h.reduce((d,y)=>d+y.length+2,2);u=e.options.lineWidth>0&&w>e.options.lineWidth}if(u){let w=f;for(const d of h)w+=d?`
|
|
50
|
+
${r}${i}${d}`:`
|
|
51
51
|
`;return`${w}
|
|
52
|
-
${i}${g}`}else return`${f}${o}${
|
|
53
|
-
`:" ")}return rt({comment:s,type:e,value:a},n,i,r)}};function Zs(s,e){if(Ke(s))for(let t=0;t<s.items.length;++t){let n=s.items[t];if(!_(n)){if(
|
|
52
|
+
${i}${g}`}else return`${f}${o}${h.join(" ")}${o}${g}`}c(mo,"stringifyFlowCollection");function $t({indent:s,options:{commentString:e}},t,n,i){if(n&&i&&(n=n.replace(/^\n+/,"")),n){const r=pe(e(n),s);t.push(r.trimStart())}}c($t,"addCommentBefore");function Ne(s,e){const t=K(e)?e.value:e;for(const n of s)if(_(n)&&(n.key===e||n.key===t||K(n.key)&&n.key.value===t))return n}c(Ne,"findPair");class ee extends js{static{c(this,"YAMLMap")}static get tagName(){return"tag:yaml.org,2002:map"}constructor(e){super(be,e),this.items=[]}static from(e,t,n){const{keepUndefined:i,replacer:r}=n,o=new this(e),a=c((l,u)=>{if(typeof r=="function")u=r.call(t,l,u);else if(Array.isArray(r)&&!r.includes(l))return;(u!==void 0||i)&&o.items.push(kn(l,u,n))},"add");if(t instanceof Map)for(const[l,u]of t)a(l,u);else if(t&&typeof t=="object")for(const l of Object.keys(t))a(l,t[l]);return typeof e.sortMapEntries=="function"&&o.items.sort(e.sortMapEntries),o}add(e,t){let n;_(e)?n=e:!e||typeof e!="object"||!("key"in e)?n=new Y(e,e?.value):n=new Y(e.key,e.value);const i=Ne(this.items,n.key),r=this.schema?.sortMapEntries;if(i){if(!t)throw new Error(`Key ${n.key} already set`);K(i.value)&&Rs(n.value)?i.value.value=n.value:i.value=n.value}else if(r){const o=this.items.findIndex(a=>r(n,a)<0);o===-1?this.items.push(n):this.items.splice(o,0,n)}else this.items.push(n)}delete(e){const t=Ne(this.items,e);return t?this.items.splice(this.items.indexOf(t),1).length>0:!1}get(e,t){const i=Ne(this.items,e)?.value;return(!t&&K(i)?i.value:i)??void 0}has(e){return!!Ne(this.items,e)}set(e,t){this.add(new Y(e,t),!0)}toJSON(e,t,n){const i=n?new n:t?.mapAsMap?new Map:{};t?.onCreate&&t.onCreate(i);for(const r of this.items)qs(t,i,r);return i}toString(e,t,n){if(!e)return JSON.stringify(this);for(const i of this.items)if(!_(i))throw new Error(`Map items must all be pairs; found ${JSON.stringify(i)} instead`);return!e.allNullValues&&this.hasAllNullValues(!1)&&(e=Object.assign({},e,{allNullValues:!0})),Js(this,e,{blockItemPrefix:"",flowChars:{start:"{",end:"}"},itemIndent:e.indent||"",onChompKeep:n,onComment:t})}}const Je={collection:"map",default:!0,nodeClass:ee,tag:"tag:yaml.org,2002:map",resolve(s,e){return je(s)||e("Expected a mapping for this tag"),s},createNode:c((s,e,t)=>ee.from(s,e,t),"createNode")};class Ce extends js{static{c(this,"YAMLSeq")}static get tagName(){return"tag:yaml.org,2002:seq"}constructor(e){super(Re,e),this.items=[]}add(e){this.items.push(e)}delete(e){const t=Lt(e);return typeof t!="number"?!1:this.items.splice(t,1).length>0}get(e,t){const n=Lt(e);if(typeof n!="number")return;const i=this.items[n];return!t&&K(i)?i.value:i}has(e){const t=Lt(e);return typeof t=="number"&&t<this.items.length}set(e,t){const n=Lt(e);if(typeof n!="number")throw new Error(`Expected a valid index, not ${e}.`);const i=this.items[n];K(i)&&Rs(t)?i.value=t:this.items[n]=t}toJSON(e,t){const n=[];t?.onCreate&&t.onCreate(n);let i=0;for(const r of this.items)n.push(ie(r,String(i++),t));return n}toString(e,t,n){return e?Js(this,e,{blockItemPrefix:"- ",flowChars:{start:"[",end:"]"},itemIndent:(e.indent||"")+" ",onChompKeep:n,onComment:t}):JSON.stringify(this)}static from(e,t,n){const{replacer:i}=n,r=new this(e);if(t&&Symbol.iterator in Object(t)){let o=0;for(let a of t){if(typeof i=="function"){const l=t instanceof Set?a:String(o++);a=i.call(t,l,a)}r.items.push(nt(a,void 0,n))}}return r}}function Lt(s){let e=K(s)?s.value:s;return e&&typeof e=="string"&&(e=Number(e)),typeof e=="number"&&Number.isInteger(e)&&e>=0?e:null}c(Lt,"asItemIndex");const We={collection:"seq",default:!0,nodeClass:Ce,tag:"tag:yaml.org,2002:seq",resolve(s,e){return Ke(s)||e("Expected a sequence for this tag"),s},createNode:c((s,e,t)=>Ce.from(s,e,t),"createNode")},xt={identify:c(s=>typeof s=="string","identify"),default:!0,tag:"tag:yaml.org,2002:str",resolve:c(s=>s,"resolve"),stringify(s,e,t,n){return e=Object.assign({actualString:!0},e),rt(s,e,t,n)}},Dt={identify:c(s=>s==null,"identify"),createNode:c(()=>new L(null),"createNode"),default:!0,tag:"tag:yaml.org,2002:null",test:/^(?:~|[Nn]ull|NULL)?$/,resolve:c(()=>new L(null),"resolve"),stringify:c(({source:s},e)=>typeof s=="string"&&Dt.test.test(s)?s:e.options.nullStr,"stringify")},vn={identify:c(s=>typeof s=="boolean","identify"),default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,resolve:c(s=>new L(s[0]==="t"||s[0]==="T"),"resolve"),stringify({source:s,value:e},t){if(s&&vn.test.test(s)){const n=s[0]==="t"||s[0]==="T";if(e===n)return s}return e?t.options.trueStr:t.options.falseStr}};function oe({format:s,minFractionDigits:e,tag:t,value:n}){if(typeof n=="bigint")return String(n);const i=typeof n=="number"?n:Number(n);if(!isFinite(i))return isNaN(i)?".nan":i<0?"-.inf":".inf";let r=JSON.stringify(n);if(!s&&e&&(!t||t==="tag:yaml.org,2002:float")&&/^\d/.test(r)){let o=r.indexOf(".");o<0&&(o=r.length,r+=".");let a=e-(r.length-o-1);for(;a-- >0;)r+="0"}return r}c(oe,"stringifyNumber");const Ws={identify:c(s=>typeof s=="number","identify"),default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:c(s=>s.slice(-3).toLowerCase()==="nan"?NaN:s[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,"resolve"),stringify:oe},Gs={identify:c(s=>typeof s=="number","identify"),default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)[eE][-+]?[0-9]+$/,resolve:c(s=>parseFloat(s),"resolve"),stringify(s){const e=Number(s.value);return isFinite(e)?e.toExponential():oe(s)}},Vs={identify:c(s=>typeof s=="number","identify"),default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:\.[0-9]+|[0-9]+\.[0-9]*)$/,resolve(s){const e=new L(parseFloat(s)),t=s.indexOf(".");return t!==-1&&s[s.length-1]==="0"&&(e.minFractionDigits=s.length-t-1),e},stringify:oe},Pt=c(s=>typeof s=="bigint"||Number.isInteger(s),"intIdentify$2"),En=c((s,e,t,{intAsBigInt:n})=>n?BigInt(s):parseInt(s.substring(e),t),"intResolve$1");function Hs(s,e,t){const{value:n}=s;return Pt(n)&&n>=0?t+n.toString(e):oe(s)}c(Hs,"intStringify$1");const Ys={identify:c(s=>Pt(s)&&s>=0,"identify"),default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^0o[0-7]+$/,resolve:c((s,e,t)=>En(s,2,8,t),"resolve"),stringify:c(s=>Hs(s,8,"0o"),"stringify")},zs={identify:Pt,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9]+$/,resolve:c((s,e,t)=>En(s,0,10,t),"resolve"),stringify:oe},Qs={identify:c(s=>Pt(s)&&s>=0,"identify"),default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^0x[0-9a-fA-F]+$/,resolve:c((s,e,t)=>En(s,2,16,t),"resolve"),stringify:c(s=>Hs(s,16,"0x"),"stringify")},go=[Je,We,xt,Dt,vn,Ys,zs,Qs,Ws,Gs,Vs];function Xs(s){return typeof s=="bigint"||Number.isInteger(s)}c(Xs,"intIdentify$1");const Mt=c(({value:s})=>JSON.stringify(s),"stringifyJSON"),yo=[{identify:c(s=>typeof s=="string","identify"),default:!0,tag:"tag:yaml.org,2002:str",resolve:c(s=>s,"resolve"),stringify:Mt},{identify:c(s=>s==null,"identify"),createNode:c(()=>new L(null),"createNode"),default:!0,tag:"tag:yaml.org,2002:null",test:/^null$/,resolve:c(()=>null,"resolve"),stringify:Mt},{identify:c(s=>typeof s=="boolean","identify"),default:!0,tag:"tag:yaml.org,2002:bool",test:/^true$|^false$/,resolve:c(s=>s==="true","resolve"),stringify:Mt},{identify:Xs,default:!0,tag:"tag:yaml.org,2002:int",test:/^-?(?:0|[1-9][0-9]*)$/,resolve:c((s,e,{intAsBigInt:t})=>t?BigInt(s):parseInt(s,10),"resolve"),stringify:c(({value:s})=>Xs(s)?s.toString():JSON.stringify(s),"stringify")},{identify:c(s=>typeof s=="number","identify"),default:!0,tag:"tag:yaml.org,2002:float",test:/^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,resolve:c(s=>parseFloat(s),"resolve"),stringify:Mt}],wo={default:!0,tag:"",test:/^/,resolve(s,e){return e(`Unresolved plain scalar ${JSON.stringify(s)}`),s}},bo=[Je,We].concat(yo,wo),Tn={identify:c(s=>s instanceof Uint8Array,"identify"),default:!1,tag:"tag:yaml.org,2002:binary",resolve(s,e){if(typeof atob=="function"){const t=atob(s.replace(/[\n\r]/g,"")),n=new Uint8Array(t.length);for(let i=0;i<t.length;++i)n[i]=t.charCodeAt(i);return n}else return e("This environment does not support reading binary tags; either Buffer or atob is required"),s},stringify({comment:s,type:e,value:t},n,i,r){if(!t)return"";const o=t;let a;if(typeof btoa=="function"){let l="";for(let u=0;u<o.length;++u)l+=String.fromCharCode(o[u]);a=btoa(l)}else throw new Error("This environment does not support writing binary tags; either Buffer or btoa is required");if(e??(e=L.BLOCK_LITERAL),e!==L.QUOTE_DOUBLE){const l=Math.max(n.options.lineWidth-n.indent.length,n.options.minContentWidth),u=Math.ceil(a.length/l),p=new Array(u);for(let h=0,f=0;h<u;++h,f+=l)p[h]=a.substr(f,l);a=p.join(e===L.BLOCK_LITERAL?`
|
|
53
|
+
`:" ")}return rt({comment:s,type:e,value:a},n,i,r)}};function Zs(s,e){if(Ke(s))for(let t=0;t<s.items.length;++t){let n=s.items[t];if(!_(n)){if(je(n)){n.items.length>1&&e("Each pair must have its own sequence indicator");const i=n.items[0]||new Y(new L(null));if(n.commentBefore&&(i.key.commentBefore=i.key.commentBefore?`${n.commentBefore}
|
|
54
54
|
${i.key.commentBefore}`:n.commentBefore),n.comment){const r=i.value??i.key;r.comment=r.comment?`${n.comment}
|
|
55
|
-
${r.comment}`:n.comment}n=i}s.items[t]=_(n)?n:new Y(n)}}else e("Expected a sequence for this tag");return s}c(Zs,"resolvePairs");function ei(s,e,t){const{replacer:n}=t,i=new Ce(s);i.tag="tag:yaml.org,2002:pairs";let r=0;if(e&&Symbol.iterator in Object(e))for(let o of e){typeof n=="function"&&(o=n.call(e,String(r++),o));let a,l;if(Array.isArray(o))if(o.length===2)a=o[0],l=o[1];else throw new TypeError(`Expected [key, value] tuple: ${o}`);else if(o&&o instanceof Object){const u=Object.keys(o);if(u.length===1)a=u[0],l=o[a];else throw new TypeError(`Expected tuple with one key, not ${u.length} keys`)}else a=o;i.items.push(kn(a,l,t))}return i}c(ei,"createPairs");const In={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:Zs,createNode:ei};class Ye extends Ce{static{c(this,"YAMLOMap")}constructor(){super(),this.add=ee.prototype.add.bind(this),this.delete=ee.prototype.delete.bind(this),this.get=ee.prototype.get.bind(this),this.has=ee.prototype.has.bind(this),this.set=ee.prototype.set.bind(this),this.tag=Ye.tag}toJSON(e,t){if(!t)return super.toJSON(e);const n=new Map;t?.onCreate&&t.onCreate(n);for(const i of this.items){let r,o;if(_(i)?(r=ie(i.key,"",t),o=ie(i.value,r,t)):r=ie(i,"",t),n.has(r))throw new Error("Ordered maps must not include duplicate keys");n.set(r,o)}return n}static from(e,t,n){const i=ei(e,t,n),r=new this;return r.items=i.items,r}}Ye.tag="tag:yaml.org,2002:omap";const Nn={collection:"seq",identify:c(s=>s instanceof Map,"identify"),nodeClass:Ye,default:!1,tag:"tag:yaml.org,2002:omap",resolve(s,e){const t=Zs(s,e),n=[];for(const{key:i}of t.items)R(i)&&(n.includes(i.value)?e(`Ordered maps must not include duplicate keys: ${i.value}`):n.push(i.value));return Object.assign(new Ye,t)},createNode:c((s,e,t)=>Ye.from(s,e,t),"createNode")};function ti({value:s,source:e},t){return e&&(s?ni:si).test.test(e)?e:s?t.options.trueStr:t.options.falseStr}c(ti,"boolStringify");const ni={identify:c(s=>s===!0,"identify"),default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,resolve:c(()=>new L(!0),"resolve"),stringify:ti},si={identify:c(s=>s===!1,"identify"),default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,resolve:c(()=>new L(!1),"resolve"),stringify:ti},So={identify:c(s=>typeof s=="number","identify"),default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:c(s=>s.slice(-3).toLowerCase()==="nan"?NaN:s[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,"resolve"),stringify:oe},Co={identify:c(s=>typeof s=="number","identify"),default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:[0-9][0-9_]*)?(?:\.[0-9_]*)?[eE][-+]?[0-9]+$/,resolve:c(s=>parseFloat(s.replace(/_/g,"")),"resolve"),stringify(s){const e=Number(s.value);return isFinite(e)?e.toExponential():oe(s)}},ko={identify:c(s=>typeof s=="number","identify"),default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*$/,resolve(s){const e=new L(parseFloat(s.replace(/_/g,""))),t=s.indexOf(".");if(t!==-1){const n=s.substring(t+1).replace(/_/g,"");n[n.length-1]==="0"&&(e.minFractionDigits=n.length)}return e},stringify:oe},ot=c(s=>typeof s=="bigint"||Number.isInteger(s),"intIdentify");function jt(s,e,t,{intAsBigInt:n}){const i=s[0];if((i==="-"||i==="+")&&(e+=1),s=s.substring(e).replace(/_/g,""),n){switch(t){case 2:s=`0b${s}`;break;case 8:s=`0o${s}`;break;case 16:s=`0x${s}`;break}const o=BigInt(s);return i==="-"?BigInt(-1)*o:o}const r=parseInt(s,t);return i==="-"?-1*r:r}c(jt,"intResolve");function An(s,e,t){const{value:n}=s;if(ot(n)){const i=n.toString(e);return n<0?"-"+t+i.substr(1):t+i}return oe(s)}c(An,"intStringify");const vo={identify:ot,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:c((s,e,t)=>jt(s,2,2,t),"resolve"),stringify:c(s=>An(s,2,"0b"),"stringify")},Eo={identify:ot,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:c((s,e,t)=>jt(s,1,8,t),"resolve"),stringify:c(s=>An(s,8,"0"),"stringify")},To={identify:ot,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:c((s,e,t)=>jt(s,0,10,t),"resolve"),stringify:oe},Io={identify:ot,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:c((s,e,t)=>jt(s,2,16,t),"resolve"),stringify:c(s=>An(s,16,"0x"),"stringify")};class ze extends ee{static{c(this,"YAMLSet")}constructor(e){super(e),this.tag=ze.tag}add(e){let t;_(e)?t=e:e&&typeof e=="object"&&"key"in e&&"value"in e&&e.value===null?t=new Y(e.key,null):t=new Y(e,null),Ne(this.items,t.key)||this.items.push(t)}get(e,t){const n=Ne(this.items,e);return!t&&_(n)?R(n.key)?n.key.value:n.key:n}set(e,t){if(typeof t!="boolean")throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof t}`);const n=Ne(this.items,e);n&&!t?this.items.splice(this.items.indexOf(n),1):!n&&t&&this.items.push(new Y(e))}toJSON(e,t){return super.toJSON(e,t,Set)}toString(e,t,n){if(!e)return JSON.stringify(this);if(this.hasAllNullValues(!0))return super.toString(Object.assign({},e,{allNullValues:!0}),t,n);throw new Error("Set items must all have null values")}static from(e,t,n){const{replacer:i}=n,r=new this(e);if(t&&Symbol.iterator in Object(t))for(let o of t)typeof i=="function"&&(o=i.call(t,o,o)),r.items.push(kn(o,null,n));return r}}ze.tag="tag:yaml.org,2002:set";const On={collection:"map",identify:c(s=>s instanceof Set,"identify"),nodeClass:ze,default:!1,tag:"tag:yaml.org,2002:set",createNode:c((s,e,t)=>ze.from(s,e,t),"createNode"),resolve(s,e){if(Re(s)){if(s.hasAllNullValues(!0))return Object.assign(new ze,s);e("Set items must all have null values")}else e("Expected a mapping for this tag");return s}};function $n(s,e){const t=s[0],n=t==="-"||t==="+"?s.substring(1):s,i=c(o=>e?BigInt(o):Number(o),"num"),r=n.replace(/_/g,"").split(":").reduce((o,a)=>o*i(60)+i(a),i(0));return t==="-"?i(-1)*r:r}c($n,"parseSexagesimal");function ii(s){let{value:e}=s,t=c(o=>o,"num");if(typeof e=="bigint")t=c(o=>BigInt(o),"num");else if(isNaN(e)||!isFinite(e))return oe(s);let n="";e<0&&(n="-",e*=t(-1));const i=t(60),r=[e%i];return e<60?r.unshift(0):(e=(e-r[0])/i,r.unshift(e%i),e>=60&&(e=(e-r[0])/i,r.unshift(e))),n+r.map(o=>String(o).padStart(2,"0")).join(":").replace(/000000\d*$/,"")}c(ii,"stringifySexagesimal");const ri={identify:c(s=>typeof s=="bigint"||Number.isInteger(s),"identify"),default:!0,tag:"tag:yaml.org,2002:int",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,resolve:c((s,e,{intAsBigInt:t})=>$n(s,t),"resolve"),stringify:ii},oi={identify:c(s=>typeof s=="number","identify"),default:!0,tag:"tag:yaml.org,2002:float",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*$/,resolve:c(s=>$n(s,!1),"resolve"),stringify:ii},Rt={identify:c(s=>s instanceof Date,"identify"),default:!0,tag:"tag:yaml.org,2002:timestamp",test:RegExp("^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})(?:(?:t|T|[ \\t]+)([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?)?$"),resolve(s){const e=s.match(Rt.test);if(!e)throw new Error("!!timestamp expects a date, starting with yyyy-mm-dd");const[,t,n,i,r,o,a]=e.map(Number),l=e[7]?Number((e[7]+"00").substr(1,3)):0;let u=Date.UTC(t,n-1,i,r||0,o||0,a||0,l);const p=e[8];if(p&&p!=="Z"){let d=$n(p,!1);Math.abs(d)<30&&(d*=60),u-=6e4*d}return new Date(u)},stringify:c(({value:s})=>s?.toISOString().replace(/(T00:00:00)?\.000Z$/,"")??"","stringify")},ai=[Je,We,xt,Dt,ni,si,vo,Eo,To,Io,So,Co,ko,Tn,me,Nn,In,On,ri,oi,Rt],ci=new Map([["core",go],["failsafe",[Je,We,xt]],["json",bo],["yaml11",ai],["yaml-1.1",ai]]),li={binary:Tn,bool:vn,float:Vs,floatExp:Gs,floatNaN:Ws,floatTime:oi,int:zs,intHex:Qs,intOct:Ys,intTime:ri,map:Je,merge:me,null:Dt,omap:Nn,pairs:In,seq:We,set:On,timestamp:Rt},No={"tag:yaml.org,2002:binary":Tn,"tag:yaml.org,2002:merge":me,"tag:yaml.org,2002:omap":Nn,"tag:yaml.org,2002:pairs":In,"tag:yaml.org,2002:set":On,"tag:yaml.org,2002:timestamp":Rt};function Ln(s,e,t){const n=ci.get(e);if(n&&!s)return t&&!n.includes(me)?n.concat(me):n.slice();let i=n;if(!i)if(Array.isArray(s))i=[];else{const r=Array.from(ci.keys()).filter(o=>o!=="yaml11").map(o=>JSON.stringify(o)).join(", ");throw new Error(`Unknown schema "${e}"; use one of ${r} or define customTags array`)}if(Array.isArray(s))for(const r of s)i=i.concat(r);else typeof s=="function"&&(i=s(i.slice()));return t&&(i=i.concat(me)),i.reduce((r,o)=>{const a=typeof o=="string"?li[o]:o;if(!a){const l=JSON.stringify(o),u=Object.keys(li).map(p=>JSON.stringify(p)).join(", ");throw new Error(`Unknown custom tag ${l}; use one of ${u}`)}return r.includes(a)||r.push(a),r},[])}c(Ln,"getTags");const Ao=c((s,e)=>s.key<e.key?-1:s.key>e.key?1:0,"sortMapEntriesByKey");class Ht{static{c(this,"Schema")}constructor({compat:e,customTags:t,merge:n,resolveKnownTags:i,schema:r,sortMapEntries:o,toStringDefaults:a}){this.compat=Array.isArray(e)?Ln(e,"compat"):e?Ln(null,e):null,this.name=typeof r=="string"&&r||"core",this.knownTags=i?No:{},this.tags=Ln(t,this.name,n),this.toStringOptions=a??null,Object.defineProperty(this,be,{value:Je}),Object.defineProperty(this,le,{value:xt}),Object.defineProperty(this,je,{value:We}),this.sortMapEntries=typeof o=="function"?o:o===!0?Ao:null}clone(){const e=Object.create(Ht.prototype,Object.getOwnPropertyDescriptors(this));return e.tags=this.tags.slice(),e}}function Oo(s,e){const t=[];let n=e.directives===!0;if(e.directives!==!1&&s.directives){const l=s.directives.toString(s);l?(t.push(l),n=!0):s.directives.docStart&&(n=!0)}n&&t.push("---");const i=Fs(s,e),{commentString:r}=i.options;if(s.commentBefore){t.length!==1&&t.unshift("");const l=r(s.commentBefore);t.unshift(pe(l,""))}let o=!1,a=null;if(s.contents){if(J(s.contents)){if(s.contents.spaceBefore&&n&&t.push(""),s.contents.commentBefore){const p=r(s.contents.commentBefore);t.push(pe(p,""))}i.forceBlockIndent=!!s.comment,a=s.contents.comment}const l=a?void 0:()=>o=!0;let u=qe(s.contents,i,()=>a=null,l);a&&(u+=Ie(u,"",r(a))),(u[0]==="|"||u[0]===">")&&t[t.length-1]==="---"?t[t.length-1]=`--- ${u}`:t.push(u)}else t.push(qe(s.contents,i));if(s.directives?.docEnd)if(s.comment){const l=r(s.comment);l.includes(`
|
|
55
|
+
${r.comment}`:n.comment}n=i}s.items[t]=_(n)?n:new Y(n)}}else e("Expected a sequence for this tag");return s}c(Zs,"resolvePairs");function ei(s,e,t){const{replacer:n}=t,i=new Ce(s);i.tag="tag:yaml.org,2002:pairs";let r=0;if(e&&Symbol.iterator in Object(e))for(let o of e){typeof n=="function"&&(o=n.call(e,String(r++),o));let a,l;if(Array.isArray(o))if(o.length===2)a=o[0],l=o[1];else throw new TypeError(`Expected [key, value] tuple: ${o}`);else if(o&&o instanceof Object){const u=Object.keys(o);if(u.length===1)a=u[0],l=o[a];else throw new TypeError(`Expected tuple with one key, not ${u.length} keys`)}else a=o;i.items.push(kn(a,l,t))}return i}c(ei,"createPairs");const In={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:Zs,createNode:ei};class Ye extends Ce{static{c(this,"YAMLOMap")}constructor(){super(),this.add=ee.prototype.add.bind(this),this.delete=ee.prototype.delete.bind(this),this.get=ee.prototype.get.bind(this),this.has=ee.prototype.has.bind(this),this.set=ee.prototype.set.bind(this),this.tag=Ye.tag}toJSON(e,t){if(!t)return super.toJSON(e);const n=new Map;t?.onCreate&&t.onCreate(n);for(const i of this.items){let r,o;if(_(i)?(r=ie(i.key,"",t),o=ie(i.value,r,t)):r=ie(i,"",t),n.has(r))throw new Error("Ordered maps must not include duplicate keys");n.set(r,o)}return n}static from(e,t,n){const i=ei(e,t,n),r=new this;return r.items=i.items,r}}Ye.tag="tag:yaml.org,2002:omap";const Nn={collection:"seq",identify:c(s=>s instanceof Map,"identify"),nodeClass:Ye,default:!1,tag:"tag:yaml.org,2002:omap",resolve(s,e){const t=Zs(s,e),n=[];for(const{key:i}of t.items)K(i)&&(n.includes(i.value)?e(`Ordered maps must not include duplicate keys: ${i.value}`):n.push(i.value));return Object.assign(new Ye,t)},createNode:c((s,e,t)=>Ye.from(s,e,t),"createNode")};function ti({value:s,source:e},t){return e&&(s?ni:si).test.test(e)?e:s?t.options.trueStr:t.options.falseStr}c(ti,"boolStringify");const ni={identify:c(s=>s===!0,"identify"),default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,resolve:c(()=>new L(!0),"resolve"),stringify:ti},si={identify:c(s=>s===!1,"identify"),default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,resolve:c(()=>new L(!1),"resolve"),stringify:ti},So={identify:c(s=>typeof s=="number","identify"),default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:c(s=>s.slice(-3).toLowerCase()==="nan"?NaN:s[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,"resolve"),stringify:oe},Co={identify:c(s=>typeof s=="number","identify"),default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:[0-9][0-9_]*)?(?:\.[0-9_]*)?[eE][-+]?[0-9]+$/,resolve:c(s=>parseFloat(s.replace(/_/g,"")),"resolve"),stringify(s){const e=Number(s.value);return isFinite(e)?e.toExponential():oe(s)}},ko={identify:c(s=>typeof s=="number","identify"),default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*$/,resolve(s){const e=new L(parseFloat(s.replace(/_/g,""))),t=s.indexOf(".");if(t!==-1){const n=s.substring(t+1).replace(/_/g,"");n[n.length-1]==="0"&&(e.minFractionDigits=n.length)}return e},stringify:oe},ot=c(s=>typeof s=="bigint"||Number.isInteger(s),"intIdentify");function Rt(s,e,t,{intAsBigInt:n}){const i=s[0];if((i==="-"||i==="+")&&(e+=1),s=s.substring(e).replace(/_/g,""),n){switch(t){case 2:s=`0b${s}`;break;case 8:s=`0o${s}`;break;case 16:s=`0x${s}`;break}const o=BigInt(s);return i==="-"?BigInt(-1)*o:o}const r=parseInt(s,t);return i==="-"?-1*r:r}c(Rt,"intResolve");function An(s,e,t){const{value:n}=s;if(ot(n)){const i=n.toString(e);return n<0?"-"+t+i.substr(1):t+i}return oe(s)}c(An,"intStringify");const vo={identify:ot,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:c((s,e,t)=>Rt(s,2,2,t),"resolve"),stringify:c(s=>An(s,2,"0b"),"stringify")},Eo={identify:ot,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:c((s,e,t)=>Rt(s,1,8,t),"resolve"),stringify:c(s=>An(s,8,"0"),"stringify")},To={identify:ot,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:c((s,e,t)=>Rt(s,0,10,t),"resolve"),stringify:oe},Io={identify:ot,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:c((s,e,t)=>Rt(s,2,16,t),"resolve"),stringify:c(s=>An(s,16,"0x"),"stringify")};class ze extends ee{static{c(this,"YAMLSet")}constructor(e){super(e),this.tag=ze.tag}add(e){let t;_(e)?t=e:e&&typeof e=="object"&&"key"in e&&"value"in e&&e.value===null?t=new Y(e.key,null):t=new Y(e,null),Ne(this.items,t.key)||this.items.push(t)}get(e,t){const n=Ne(this.items,e);return!t&&_(n)?K(n.key)?n.key.value:n.key:n}set(e,t){if(typeof t!="boolean")throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof t}`);const n=Ne(this.items,e);n&&!t?this.items.splice(this.items.indexOf(n),1):!n&&t&&this.items.push(new Y(e))}toJSON(e,t){return super.toJSON(e,t,Set)}toString(e,t,n){if(!e)return JSON.stringify(this);if(this.hasAllNullValues(!0))return super.toString(Object.assign({},e,{allNullValues:!0}),t,n);throw new Error("Set items must all have null values")}static from(e,t,n){const{replacer:i}=n,r=new this(e);if(t&&Symbol.iterator in Object(t))for(let o of t)typeof i=="function"&&(o=i.call(t,o,o)),r.items.push(kn(o,null,n));return r}}ze.tag="tag:yaml.org,2002:set";const On={collection:"map",identify:c(s=>s instanceof Set,"identify"),nodeClass:ze,default:!1,tag:"tag:yaml.org,2002:set",createNode:c((s,e,t)=>ze.from(s,e,t),"createNode"),resolve(s,e){if(je(s)){if(s.hasAllNullValues(!0))return Object.assign(new ze,s);e("Set items must all have null values")}else e("Expected a mapping for this tag");return s}};function $n(s,e){const t=s[0],n=t==="-"||t==="+"?s.substring(1):s,i=c(o=>e?BigInt(o):Number(o),"num"),r=n.replace(/_/g,"").split(":").reduce((o,a)=>o*i(60)+i(a),i(0));return t==="-"?i(-1)*r:r}c($n,"parseSexagesimal");function ii(s){let{value:e}=s,t=c(o=>o,"num");if(typeof e=="bigint")t=c(o=>BigInt(o),"num");else if(isNaN(e)||!isFinite(e))return oe(s);let n="";e<0&&(n="-",e*=t(-1));const i=t(60),r=[e%i];return e<60?r.unshift(0):(e=(e-r[0])/i,r.unshift(e%i),e>=60&&(e=(e-r[0])/i,r.unshift(e))),n+r.map(o=>String(o).padStart(2,"0")).join(":").replace(/000000\d*$/,"")}c(ii,"stringifySexagesimal");const ri={identify:c(s=>typeof s=="bigint"||Number.isInteger(s),"identify"),default:!0,tag:"tag:yaml.org,2002:int",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,resolve:c((s,e,{intAsBigInt:t})=>$n(s,t),"resolve"),stringify:ii},oi={identify:c(s=>typeof s=="number","identify"),default:!0,tag:"tag:yaml.org,2002:float",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*$/,resolve:c(s=>$n(s,!1),"resolve"),stringify:ii},jt={identify:c(s=>s instanceof Date,"identify"),default:!0,tag:"tag:yaml.org,2002:timestamp",test:RegExp("^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})(?:(?:t|T|[ \\t]+)([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?)?$"),resolve(s){const e=s.match(jt.test);if(!e)throw new Error("!!timestamp expects a date, starting with yyyy-mm-dd");const[,t,n,i,r,o,a]=e.map(Number),l=e[7]?Number((e[7]+"00").substr(1,3)):0;let u=Date.UTC(t,n-1,i,r||0,o||0,a||0,l);const p=e[8];if(p&&p!=="Z"){let h=$n(p,!1);Math.abs(h)<30&&(h*=60),u-=6e4*h}return new Date(u)},stringify:c(({value:s})=>s?.toISOString().replace(/(T00:00:00)?\.000Z$/,"")??"","stringify")},ai=[Je,We,xt,Dt,ni,si,vo,Eo,To,Io,So,Co,ko,Tn,me,Nn,In,On,ri,oi,jt],ci=new Map([["core",go],["failsafe",[Je,We,xt]],["json",bo],["yaml11",ai],["yaml-1.1",ai]]),li={binary:Tn,bool:vn,float:Vs,floatExp:Gs,floatNaN:Ws,floatTime:oi,int:zs,intHex:Qs,intOct:Ys,intTime:ri,map:Je,merge:me,null:Dt,omap:Nn,pairs:In,seq:We,set:On,timestamp:jt},No={"tag:yaml.org,2002:binary":Tn,"tag:yaml.org,2002:merge":me,"tag:yaml.org,2002:omap":Nn,"tag:yaml.org,2002:pairs":In,"tag:yaml.org,2002:set":On,"tag:yaml.org,2002:timestamp":jt};function Ln(s,e,t){const n=ci.get(e);if(n&&!s)return t&&!n.includes(me)?n.concat(me):n.slice();let i=n;if(!i)if(Array.isArray(s))i=[];else{const r=Array.from(ci.keys()).filter(o=>o!=="yaml11").map(o=>JSON.stringify(o)).join(", ");throw new Error(`Unknown schema "${e}"; use one of ${r} or define customTags array`)}if(Array.isArray(s))for(const r of s)i=i.concat(r);else typeof s=="function"&&(i=s(i.slice()));return t&&(i=i.concat(me)),i.reduce((r,o)=>{const a=typeof o=="string"?li[o]:o;if(!a){const l=JSON.stringify(o),u=Object.keys(li).map(p=>JSON.stringify(p)).join(", ");throw new Error(`Unknown custom tag ${l}; use one of ${u}`)}return r.includes(a)||r.push(a),r},[])}c(Ln,"getTags");const Ao=c((s,e)=>s.key<e.key?-1:s.key>e.key?1:0,"sortMapEntriesByKey");class Ht{static{c(this,"Schema")}constructor({compat:e,customTags:t,merge:n,resolveKnownTags:i,schema:r,sortMapEntries:o,toStringDefaults:a}){this.compat=Array.isArray(e)?Ln(e,"compat"):e?Ln(null,e):null,this.name=typeof r=="string"&&r||"core",this.knownTags=i?No:{},this.tags=Ln(t,this.name,n),this.toStringOptions=a??null,Object.defineProperty(this,be,{value:Je}),Object.defineProperty(this,le,{value:xt}),Object.defineProperty(this,Re,{value:We}),this.sortMapEntries=typeof o=="function"?o:o===!0?Ao:null}clone(){const e=Object.create(Ht.prototype,Object.getOwnPropertyDescriptors(this));return e.tags=this.tags.slice(),e}}function Oo(s,e){const t=[];let n=e.directives===!0;if(e.directives!==!1&&s.directives){const l=s.directives.toString(s);l?(t.push(l),n=!0):s.directives.docStart&&(n=!0)}n&&t.push("---");const i=_s(s,e),{commentString:r}=i.options;if(s.commentBefore){t.length!==1&&t.unshift("");const l=r(s.commentBefore);t.unshift(pe(l,""))}let o=!1,a=null;if(s.contents){if(J(s.contents)){if(s.contents.spaceBefore&&n&&t.push(""),s.contents.commentBefore){const p=r(s.contents.commentBefore);t.push(pe(p,""))}i.forceBlockIndent=!!s.comment,a=s.contents.comment}const l=a?void 0:()=>o=!0;let u=qe(s.contents,i,()=>a=null,l);a&&(u+=Ie(u,"",r(a))),(u[0]==="|"||u[0]===">")&&t[t.length-1]==="---"?t[t.length-1]=`--- ${u}`:t.push(u)}else t.push(qe(s.contents,i));if(s.directives?.docEnd)if(s.comment){const l=r(s.comment);l.includes(`
|
|
56
56
|
`)?(t.push("..."),t.push(pe(l,""))):t.push(`... ${l}`)}else t.push("...");else{let l=s.comment;l&&o&&(l=l.replace(/^\n+/,"")),l&&((!o||a)&&t[t.length-1]!==""&&t.push(""),t.push(pe(r(l),"")))}return t.join(`
|
|
57
57
|
`)+`
|
|
58
|
-
`}c(Oo,"stringifyDocument");class Qe{static{c(this,"Document")}constructor(e,t,n){this.commentBefore=null,this.comment=null,this.errors=[],this.warnings=[],Object.defineProperty(this,se,{value:gn});let i=null;typeof t=="function"||Array.isArray(t)?i=t:n===void 0&&t&&(n=t,t=void 0);const r=Object.assign({intAsBigInt:!1,keepSourceTokens:!1,logLevel:"warn",prettyErrors:!0,strict:!0,stringKeys:!1,uniqueKeys:!0,version:"1.2"},n);this.options=r;let{version:o}=r;n?._directives?(this.directives=n._directives.atDocument(),this.directives.yaml.explicit&&(o=this.directives.yaml.version)):this.directives=new Q({version:o}),this.setSchema(o,n),this.contents=e===void 0?null:this.createNode(e,i,n)}clone(){const e=Object.create(Qe.prototype,{[se]:{value:gn}});return e.commentBefore=this.commentBefore,e.comment=this.comment,e.errors=this.errors.slice(),e.warnings=this.warnings.slice(),e.options=Object.assign({},this.options),this.directives&&(e.directives=this.directives.clone()),e.schema=this.schema.clone(),e.contents=J(this.contents)?this.contents.clone(e.schema):this.contents,this.range&&(e.range=this.range.slice()),e}add(e){Ge(this.contents)&&this.contents.add(e)}addIn(e,t){Ge(this.contents)&&this.contents.addIn(e,t)}createAlias(e,t){if(!e.anchor){const n=Ps(this);e.anchor=!t||n.has(t)?Ms(t||"a",n):t}return new Ct(e.anchor)}createNode(e,t,n){let i;if(typeof t=="function")e=t.call({"":e},"",e),i=t;else if(Array.isArray(t)){const y=c(v=>typeof v=="number"||v instanceof String||v instanceof Number,"keyToStr"),C=t.filter(y).map(String);C.length>0&&(t=t.concat(C)),i=t}else n===void 0&&t&&(n=t,t=void 0);const{aliasDuplicateObjects:r,anchorPrefix:o,flow:a,keepUndefined:l,onTagObj:u,tag:p}=n??{},{onAnchor:
|
|
58
|
+
`}c(Oo,"stringifyDocument");class Qe{static{c(this,"Document")}constructor(e,t,n){this.commentBefore=null,this.comment=null,this.errors=[],this.warnings=[],Object.defineProperty(this,se,{value:gn});let i=null;typeof t=="function"||Array.isArray(t)?i=t:n===void 0&&t&&(n=t,t=void 0);const r=Object.assign({intAsBigInt:!1,keepSourceTokens:!1,logLevel:"warn",prettyErrors:!0,strict:!0,stringKeys:!1,uniqueKeys:!0,version:"1.2"},n);this.options=r;let{version:o}=r;n?._directives?(this.directives=n._directives.atDocument(),this.directives.yaml.explicit&&(o=this.directives.yaml.version)):this.directives=new Q({version:o}),this.setSchema(o,n),this.contents=e===void 0?null:this.createNode(e,i,n)}clone(){const e=Object.create(Qe.prototype,{[se]:{value:gn}});return e.commentBefore=this.commentBefore,e.comment=this.comment,e.errors=this.errors.slice(),e.warnings=this.warnings.slice(),e.options=Object.assign({},this.options),this.directives&&(e.directives=this.directives.clone()),e.schema=this.schema.clone(),e.contents=J(this.contents)?this.contents.clone(e.schema):this.contents,this.range&&(e.range=this.range.slice()),e}add(e){Ge(this.contents)&&this.contents.add(e)}addIn(e,t){Ge(this.contents)&&this.contents.addIn(e,t)}createAlias(e,t){if(!e.anchor){const n=Ps(this);e.anchor=!t||n.has(t)?Ms(t||"a",n):t}return new Ct(e.anchor)}createNode(e,t,n){let i;if(typeof t=="function")e=t.call({"":e},"",e),i=t;else if(Array.isArray(t)){const y=c(v=>typeof v=="number"||v instanceof String||v instanceof Number,"keyToStr"),C=t.filter(y).map(String);C.length>0&&(t=t.concat(C)),i=t}else n===void 0&&t&&(n=t,t=void 0);const{aliasDuplicateObjects:r,anchorPrefix:o,flow:a,keepUndefined:l,onTagObj:u,tag:p}=n??{},{onAnchor:h,setAnchors:f,sourceObjects:g}=no(this,o||"a"),w={aliasDuplicateObjects:r??!0,keepUndefined:l??!1,onAnchor:h,onTagObj:u,replacer:i,schema:this.schema,sourceObjects:g},d=nt(e,p,w);return a&&q(d)&&(d.flow=!0),f(),d}createPair(e,t,n={}){const i=this.createNode(e,null,n),r=this.createNode(t,null,n);return new Y(i,r)}delete(e){return Ge(this.contents)?this.contents.delete(e):!1}deleteIn(e){return st(e)?this.contents==null?!1:(this.contents=null,!0):Ge(this.contents)?this.contents.deleteIn(e):!1}get(e,t){return q(this.contents)?this.contents.get(e,t):void 0}getIn(e,t){return st(e)?!t&&K(this.contents)?this.contents.value:this.contents:q(this.contents)?this.contents.getIn(e,t):void 0}has(e){return q(this.contents)?this.contents.has(e):!1}hasIn(e){return st(e)?this.contents!==void 0:q(this.contents)?this.contents.hasIn(e):!1}set(e,t){this.contents==null?this.contents=vt(this.schema,[e],t):Ge(this.contents)&&this.contents.set(e,t)}setIn(e,t){st(e)?this.contents=t:this.contents==null?this.contents=vt(this.schema,Array.from(e),t):Ge(this.contents)&&this.contents.setIn(e,t)}setSchema(e,t={}){typeof e=="number"&&(e=String(e));let n;switch(e){case"1.1":this.directives?this.directives.yaml.version="1.1":this.directives=new Q({version:"1.1"}),n={resolveKnownTags:!1,schema:"yaml-1.1"};break;case"1.2":case"next":this.directives?this.directives.yaml.version=e:this.directives=new Q({version:e}),n={resolveKnownTags:!0,schema:"core"};break;case null:this.directives&&delete this.directives,n=null;break;default:{const i=JSON.stringify(e);throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${i}`)}}if(t.schema instanceof Object)this.schema=t.schema;else if(n)this.schema=new Ht(Object.assign(n,t));else throw new Error("With a null YAML version, the { schema: Schema } option is required")}toJS({json:e,jsonArg:t,mapAsMap:n,maxAliasCount:i,onAnchor:r,reviver:o}={}){const a={anchors:new Map,doc:this,keep:!e,mapAsMap:n===!0,mapKeyWarned:!1,maxAliasCount:typeof i=="number"?i:100},l=ie(this.contents,t??"",a);if(typeof r=="function")for(const{count:u,res:p}of a.anchors.values())r(p,u);return typeof o=="function"?Be(o,{"":l},"",l):l}toJSON(e,t){return this.toJS({json:!0,jsonArg:e,mapAsMap:!1,onAnchor:t})}toString(e={}){if(this.errors.length>0)throw new Error("Document with errors cannot be stringified");if("indent"in e&&(!Number.isInteger(e.indent)||Number(e.indent)<=0)){const t=JSON.stringify(e.indent);throw new Error(`"indent" option must be a positive integer, not ${t}`)}return Oo(this,e)}}function Ge(s){if(q(s))return!0;throw new Error("Expected a YAML collection as document contents")}c(Ge,"assertCollection");class xn extends Error{static{c(this,"YAMLError")}constructor(e,t,n,i){super(),this.name=e,this.code=n,this.message=i,this.pos=t}}class Ae extends xn{static{c(this,"YAMLParseError")}constructor(e,t,n){super("YAMLParseError",e,t,n)}}class ui extends xn{static{c(this,"YAMLWarning")}constructor(e,t,n){super("YAMLWarning",e,t,n)}}const Kt=c((s,e)=>t=>{if(t.pos[0]===-1)return;t.linePos=t.pos.map(a=>e.linePos(a));const{line:n,col:i}=t.linePos[0];t.message+=` at line ${n}, column ${i}`;let r=i-1,o=s.substring(e.lineStarts[n-1],e.lineStarts[n]).replace(/[\n\r]+$/,"");if(r>=60&&o.length>80){const a=Math.min(r-39,o.length-79);o="\u2026"+o.substring(a),r-=a-1}if(o.length>80&&(o=o.substring(0,79)+"\u2026"),n>1&&/^ *$/.test(o.substring(0,r))){let a=s.substring(e.lineStarts[n-2],e.lineStarts[n-1]);a.length>80&&(a=a.substring(0,79)+`\u2026
|
|
59
59
|
`),o=a+o}if(/[^ ]/.test(o)){let a=1;const l=t.linePos[1];l&&l.line===n&&l.col>i&&(a=Math.max(1,Math.min(l.col-i,80-r)));const u=" ".repeat(r)+"^".repeat(a);t.message+=`:
|
|
60
60
|
|
|
61
61
|
${o}
|
|
62
62
|
${u}
|
|
63
|
-
`}},"prettifyError");function Ve(s,{flow:e,indicator:t,next:n,offset:i,onError:r,parentIndent:o,startOnNewline:a}){let l=!1,u=a,p=a,
|
|
64
|
-
`))return!0;if(s.end){for(const e of s.end)if(e.type==="newline")return!0}return!1;case"flow-collection":for(const e of s.items){for(const t of e.start)if(t.type==="newline")return!0;if(e.sep){for(const t of e.sep)if(t.type==="newline")return!0}if(at(e.key)||at(e.value))return!0}return!1;default:return!0}}c(at,"containsNewline");function Dn(s,e,t){if(e?.type==="flow-collection"){const n=e.end[0];n.indent===s&&(n.source==="]"||n.source==="}")&&at(e)&&t(n,"BAD_INDENT","Flow end indicator should be more indented than parent",!0)}}c(Dn,"flowIndentCheck");function fi(s,e,t){const{uniqueKeys:n}=s.options;if(n===!1)return!1;const i=typeof n=="function"?n:(r,o)=>r===o||
|
|
65
|
-
`+
|
|
66
|
-
`+A.comment:v.comment=A.comment);const T=new Y(v);t.options.keepSourceTokens&&(T.srcToken=p),a.items.push(T)}}return u&&u<l&&i(u,"IMPOSSIBLE","Map comment with trailing content"),a.range=[n.offset,l,u??l],a}c($o,"resolveBlockMap");function Lo({composeNode:s,composeEmptyNode:e},t,n,i,r){const o=r?.nodeClass??Ce,a=new o(t.schema);t.atRoot&&(t.atRoot=!1),t.atKey&&(t.atKey=!1);let l=n.offset,u=null;for(const{start:p,value:
|
|
67
|
-
|
|
68
|
-
`+M:E.comment=M
|
|
69
|
-
`+W.comment:E.comment=W.comment);const Le=new Y(E,ge);if(t.options.keepSourceTokens&&(Le.srcToken=C),o){const H=u;fi(t,H.items,E)&&i(M,"DUPLICATE_KEY","Map keys must be unique"),H.items.push(Le)}else{const H=new ee(t.schema);H.flow=!0,H.items.push(Le);const es=(ge??E).range;H.range=[E.range[0],es[1],es[2]],u.items.push(H)}
|
|
70
|
-
`+y.comment:u.comment=y.comment),u.range=[n.offset,
|
|
71
|
-
`.repeat(Math.max(1,o.length-1)):"";let y=n+i.length;return e.source&&(y+=e.source.length),{value:
|
|
72
|
-
`;for(let
|
|
63
|
+
`}},"prettifyError");function Ve(s,{flow:e,indicator:t,next:n,offset:i,onError:r,parentIndent:o,startOnNewline:a}){let l=!1,u=a,p=a,h="",f="",g=!1,w=!1,d=null,y=null,C=null,v=null,A=null,T=null,N=null;for(const E of s)switch(w&&(E.type!=="space"&&E.type!=="newline"&&E.type!=="comma"&&r(E.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),w=!1),d&&(u&&E.type!=="comment"&&E.type!=="newline"&&r(d,"TAB_AS_INDENT","Tabs are not allowed as indentation"),d=null),E.type){case"space":!e&&(t!=="doc-start"||n?.type!=="flow-collection")&&E.source.includes(" ")&&(d=E),p=!0;break;case"comment":{p||r(E,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");const W=E.source.substring(1)||" ";h?h+=f+W:h=W,f="",u=!1;break}case"newline":u?h?h+=E.source:(!T||t!=="seq-item-ind")&&(l=!0):f+=E.source,u=!0,g=!0,(y||C)&&(v=E),p=!0;break;case"anchor":y&&r(E,"MULTIPLE_ANCHORS","A node can have at most one anchor"),E.source.endsWith(":")&&r(E.offset+E.source.length-1,"BAD_ALIAS","Anchor ending in : is ambiguous",!0),y=E,N??(N=E.offset),u=!1,p=!1,w=!0;break;case"tag":{C&&r(E,"MULTIPLE_TAGS","A node can have at most one tag"),C=E,N??(N=E.offset),u=!1,p=!1,w=!0;break}case t:(y||C)&&r(E,"BAD_PROP_ORDER",`Anchors and tags must be after the ${E.source} indicator`),T&&r(E,"UNEXPECTED_TOKEN",`Unexpected ${E.source} in ${e??"collection"}`),T=E,u=t==="seq-item-ind"||t==="explicit-key-ind",p=!1;break;case"comma":if(e){A&&r(E,"UNEXPECTED_TOKEN",`Unexpected , in ${e}`),A=E,u=!1,p=!1;break}default:r(E,"UNEXPECTED_TOKEN",`Unexpected ${E.type} token`),u=!1,p=!1}const $=s[s.length-1],M=$?$.offset+$.source.length:i;return w&&n&&n.type!=="space"&&n.type!=="newline"&&n.type!=="comma"&&(n.type!=="scalar"||n.source!=="")&&r(n.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),d&&(u&&d.indent<=o||n?.type==="block-map"||n?.type==="block-seq")&&r(d,"TAB_AS_INDENT","Tabs are not allowed as indentation"),{comma:A,found:T,spaceBefore:l,comment:h,hasNewline:g,anchor:y,tag:C,newlineAfterProp:v,end:M,start:N??M}}c(Ve,"resolveProps");function at(s){if(!s)return null;switch(s.type){case"alias":case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":if(s.source.includes(`
|
|
64
|
+
`))return!0;if(s.end){for(const e of s.end)if(e.type==="newline")return!0}return!1;case"flow-collection":for(const e of s.items){for(const t of e.start)if(t.type==="newline")return!0;if(e.sep){for(const t of e.sep)if(t.type==="newline")return!0}if(at(e.key)||at(e.value))return!0}return!1;default:return!0}}c(at,"containsNewline");function Dn(s,e,t){if(e?.type==="flow-collection"){const n=e.end[0];n.indent===s&&(n.source==="]"||n.source==="}")&&at(e)&&t(n,"BAD_INDENT","Flow end indicator should be more indented than parent",!0)}}c(Dn,"flowIndentCheck");function fi(s,e,t){const{uniqueKeys:n}=s.options;if(n===!1)return!1;const i=typeof n=="function"?n:(r,o)=>r===o||K(r)&&K(o)&&r.value===o.value;return e.some(r=>i(r.key,t))}c(fi,"mapIncludes");const di="All mapping items must start at the same column";function $o({composeNode:s,composeEmptyNode:e},t,n,i,r){const o=r?.nodeClass??ee,a=new o(t.schema);t.atRoot&&(t.atRoot=!1);let l=n.offset,u=null;for(const p of n.items){const{start:h,key:f,sep:g,value:w}=p,d=Ve(h,{indicator:"explicit-key-ind",next:f??g?.[0],offset:l,onError:i,parentIndent:n.indent,startOnNewline:!0}),y=!d.found;if(y){if(f&&(f.type==="block-seq"?i(l,"BLOCK_AS_IMPLICIT_KEY","A block sequence may not be used as an implicit map key"):"indent"in f&&f.indent!==n.indent&&i(l,"BAD_INDENT",di)),!d.anchor&&!d.tag&&!g){u=d.end,d.comment&&(a.comment?a.comment+=`
|
|
65
|
+
`+d.comment:a.comment=d.comment);continue}(d.newlineAfterProp||at(f))&&i(f??h[h.length-1],"MULTILINE_IMPLICIT_KEY","Implicit keys need to be on a single line")}else d.found?.indent!==n.indent&&i(l,"BAD_INDENT",di);t.atKey=!0;const C=d.end,v=f?s(t,f,d,i):e(t,C,h,null,d,i);t.schema.compat&&Dn(n.indent,f,i),t.atKey=!1,fi(t,a.items,v)&&i(C,"DUPLICATE_KEY","Map keys must be unique");const A=Ve(g??[],{indicator:"map-value-ind",next:w,offset:v.range[2],onError:i,parentIndent:n.indent,startOnNewline:!f||f.type==="block-scalar"});if(l=A.end,A.found){y&&(w?.type==="block-map"&&!A.hasNewline&&i(l,"BLOCK_AS_IMPLICIT_KEY","Nested mappings are not allowed in compact mappings"),t.options.strict&&d.start<A.found.offset-1024&&i(v.range,"KEY_OVER_1024_CHARS","The : indicator must be at most 1024 chars after the start of an implicit block mapping key"));const T=w?s(t,w,A,i):e(t,l,g,null,A,i);t.schema.compat&&Dn(n.indent,w,i),l=T.range[2];const N=new Y(v,T);t.options.keepSourceTokens&&(N.srcToken=p),a.items.push(N)}else{y&&i(v.range,"MISSING_CHAR","Implicit map keys need to be followed by map values"),A.comment&&(v.comment?v.comment+=`
|
|
66
|
+
`+A.comment:v.comment=A.comment);const T=new Y(v);t.options.keepSourceTokens&&(T.srcToken=p),a.items.push(T)}}return u&&u<l&&i(u,"IMPOSSIBLE","Map comment with trailing content"),a.range=[n.offset,l,u??l],a}c($o,"resolveBlockMap");function Lo({composeNode:s,composeEmptyNode:e},t,n,i,r){const o=r?.nodeClass??Ce,a=new o(t.schema);t.atRoot&&(t.atRoot=!1),t.atKey&&(t.atKey=!1);let l=n.offset,u=null;for(const{start:p,value:h}of n.items){const f=Ve(p,{indicator:"seq-item-ind",next:h,offset:l,onError:i,parentIndent:n.indent,startOnNewline:!0});if(!f.found)if(f.anchor||f.tag||h)h&&h.type==="block-seq"?i(f.end,"BAD_INDENT","All sequence items must start at the same column"):i(l,"MISSING_CHAR","Sequence item without - indicator");else{u=f.end,f.comment&&(a.comment=f.comment);continue}const g=h?s(t,h,f,i):e(t,f.end,p,null,f,i);t.schema.compat&&Dn(n.indent,h,i),l=g.range[2],a.items.push(g)}return a.range=[n.offset,l,u??l],a}c(Lo,"resolveBlockSeq");function ct(s,e,t,n){let i="";if(s){let r=!1,o="";for(const a of s){const{source:l,type:u}=a;switch(u){case"space":r=!0;break;case"comment":{t&&!r&&n(a,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");const p=l.substring(1)||" ";i?i+=o+p:i=p,o="";break}case"newline":i&&(o+=l),r=!0;break;default:n(a,"UNEXPECTED_TOKEN",`Unexpected ${u} at node end`)}e+=l.length}}return{comment:i,offset:e}}c(ct,"resolveEnd");const Pn="Block collections are not allowed within flow collections",Mn=c(s=>s&&(s.type==="block-map"||s.type==="block-seq"),"isBlock");function xo({composeNode:s,composeEmptyNode:e},t,n,i,r){const o=n.start.source==="{",a=o?"flow map":"flow sequence",l=r?.nodeClass??(o?ee:Ce),u=new l(t.schema);u.flow=!0;const p=t.atRoot;p&&(t.atRoot=!1),t.atKey&&(t.atKey=!1);let h=n.offset+n.start.source.length;for(let y=0;y<n.items.length;++y){const C=n.items[y],{start:v,key:A,sep:T,value:N}=C,$=Ve(v,{flow:a,indicator:"explicit-key-ind",next:A??T?.[0],offset:h,onError:i,parentIndent:n.indent,startOnNewline:!1});if(!$.found){if(!$.anchor&&!$.tag&&!T&&!N){y===0&&$.comma?i($.comma,"UNEXPECTED_TOKEN",`Unexpected , in ${a}`):y<n.items.length-1&&i($.start,"UNEXPECTED_TOKEN",`Unexpected empty item in ${a}`),$.comment&&(u.comment?u.comment+=`
|
|
67
|
+
`+$.comment:u.comment=$.comment),h=$.end;continue}!o&&t.options.strict&&at(A)&&i(A,"MULTILINE_IMPLICIT_KEY","Implicit keys of flow sequence pairs need to be on a single line")}if(y===0)$.comma&&i($.comma,"UNEXPECTED_TOKEN",`Unexpected , in ${a}`);else if($.comma||i($.start,"MISSING_CHAR",`Missing , between ${a} items`),$.comment){let M="";e:for(const E of v)switch(E.type){case"comma":case"space":break;case"comment":M=E.source.substring(1);break e;default:break e}if(M){let E=u.items[u.items.length-1];_(E)&&(E=E.value??E.key),E.comment?E.comment+=`
|
|
68
|
+
`+M:E.comment=M,$.comment=$.comment.substring(M.length+1)}}if(!o&&!T&&!$.found){const M=N?s(t,N,$,i):e(t,$.end,T,null,$,i);u.items.push(M),h=M.range[2],Mn(N)&&i(M.range,"BLOCK_IN_FLOW",Pn)}else{t.atKey=!0;const M=$.end,E=A?s(t,A,$,i):e(t,M,v,null,$,i);Mn(A)&&i(E.range,"BLOCK_IN_FLOW",Pn),t.atKey=!1;const W=Ve(T??[],{flow:a,indicator:"map-value-ind",next:N,offset:E.range[2],onError:i,parentIndent:n.indent,startOnNewline:!1});if(W.found){if(!o&&!$.found&&t.options.strict){if(T)for(const H of T){if(H===W.found)break;if(H.type==="newline"){i(H,"MULTILINE_IMPLICIT_KEY","Implicit keys of flow sequence pairs need to be on a single line");break}}$.start<W.found.offset-1024&&i(W.found,"KEY_OVER_1024_CHARS","The : indicator must be at most 1024 chars after the start of an implicit flow sequence key")}}else N&&("source"in N&&N.source&&N.source[0]===":"?i(N,"MISSING_CHAR",`Missing space after : in ${a}`):i(W.start,"MISSING_CHAR",`Missing , or : between ${a} items`));const ge=N?s(t,N,W,i):W.found?e(t,W.end,T,null,W,i):null;ge?Mn(N)&&i(ge.range,"BLOCK_IN_FLOW",Pn):W.comment&&(E.comment?E.comment+=`
|
|
69
|
+
`+W.comment:E.comment=W.comment);const Le=new Y(E,ge);if(t.options.keepSourceTokens&&(Le.srcToken=C),o){const H=u;fi(t,H.items,E)&&i(M,"DUPLICATE_KEY","Map keys must be unique"),H.items.push(Le)}else{const H=new ee(t.schema);H.flow=!0,H.items.push(Le);const es=(ge??E).range;H.range=[E.range[0],es[1],es[2]],u.items.push(H)}h=ge?ge.range[2]:W.end}}const f=o?"}":"]",[g,...w]=n.end;let d=h;if(g&&g.source===f)d=g.offset+g.source.length;else{const y=a[0].toUpperCase()+a.substring(1),C=p?`${y} must end with a ${f}`:`${y} in block collection must be sufficiently indented and end with a ${f}`;i(h,p?"MISSING_CHAR":"BAD_INDENT",C),g&&g.source.length!==1&&w.unshift(g)}if(w.length>0){const y=ct(w,d,t.options.strict,i);y.comment&&(u.comment?u.comment+=`
|
|
70
|
+
`+y.comment:u.comment=y.comment),u.range=[n.offset,d,y.offset]}else u.range=[n.offset,d,d];return u}c(xo,"resolveFlowCollection");function Rn(s,e,t,n,i,r){const o=t.type==="block-map"?$o(s,e,t,n,r):t.type==="block-seq"?Lo(s,e,t,n,r):xo(s,e,t,n,r),a=o.constructor;return i==="!"||i===a.tagName?(o.tag=a.tagName,o):(i&&(o.tag=i),o)}c(Rn,"resolveCollection");function Do(s,e,t,n,i){const r=n.tag,o=r?e.directives.tagName(r.source,f=>i(r,"TAG_RESOLVE_FAILED",f)):null;if(t.type==="block-seq"){const{anchor:f,newlineAfterProp:g}=n,w=f&&r?f.offset>r.offset?f:r:f??r;w&&(!g||g.offset<w.offset)&&i(w,"MISSING_CHAR","Missing newline after block sequence props")}const a=t.type==="block-map"?"map":t.type==="block-seq"?"seq":t.start.source==="{"?"map":"seq";if(!r||!o||o==="!"||o===ee.tagName&&a==="map"||o===Ce.tagName&&a==="seq")return Rn(s,e,t,i,o);let l=e.schema.tags.find(f=>f.tag===o&&f.collection===a);if(!l){const f=e.schema.knownTags[o];if(f&&f.collection===a)e.schema.tags.push(Object.assign({},f,{default:!1})),l=f;else return f?i(r,"BAD_COLLECTION_TYPE",`${f.tag} used for ${a} collection, but expects ${f.collection??"scalar"}`,!0):i(r,"TAG_RESOLVE_FAILED",`Unresolved tag: ${o}`,!0),Rn(s,e,t,i,o)}const u=Rn(s,e,t,i,o,l),p=l.resolve?.(u,f=>i(r,"TAG_RESOLVE_FAILED",f),e.options)??u,h=J(p)?p:new L(p);return h.range=u.range,h.tag=o,l?.format&&(h.format=l.format),h}c(Do,"composeCollection");function hi(s,e,t){const n=e.offset,i=Po(e,s.options.strict,t);if(!i)return{value:"",type:null,comment:"",range:[n,n,n]};const r=i.mode===">"?L.BLOCK_FOLDED:L.BLOCK_LITERAL,o=e.source?Mo(e.source):[];let a=o.length;for(let d=o.length-1;d>=0;--d){const y=o[d][1];if(y===""||y==="\r")a=d;else break}if(a===0){const d=i.chomp==="+"&&o.length>0?`
|
|
71
|
+
`.repeat(Math.max(1,o.length-1)):"";let y=n+i.length;return e.source&&(y+=e.source.length),{value:d,type:r,comment:i.comment,range:[n,y,y]}}let l=e.indent+i.indent,u=e.offset+i.length,p=0;for(let d=0;d<a;++d){const[y,C]=o[d];if(C===""||C==="\r")i.indent===0&&y.length>l&&(l=y.length);else{y.length<l&&t(u+y.length,"MISSING_CHAR","Block scalars with more-indented leading empty lines must use an explicit indentation indicator"),i.indent===0&&(l=y.length),p=d,l===0&&!s.atRoot&&t(u,"BAD_INDENT","Block scalar values in collections must be indented");break}u+=y.length+C.length+1}for(let d=o.length-1;d>=a;--d)o[d][0].length>l&&(a=d+1);let h="",f="",g=!1;for(let d=0;d<p;++d)h+=o[d][0].slice(l)+`
|
|
72
|
+
`;for(let d=p;d<a;++d){let[y,C]=o[d];u+=y.length+C.length+1;const v=C[C.length-1]==="\r";if(v&&(C=C.slice(0,-1)),C&&y.length<l){const T=`Block scalar lines must not be less indented than their ${i.indent?"explicit indentation indicator":"first line"}`;t(u-C.length-(v?2:1),"BAD_INDENT",T),y=""}r===L.BLOCK_LITERAL?(h+=f+y.slice(l)+C,f=`
|
|
73
73
|
`):y.length>l||C[0]===" "?(f===" "?f=`
|
|
74
74
|
`:!g&&f===`
|
|
75
75
|
`&&(f=`
|
|
76
76
|
|
|
77
|
-
`),
|
|
77
|
+
`),h+=f+y.slice(l)+C,f=`
|
|
78
78
|
`,g=!0):C===""?f===`
|
|
79
|
-
`?
|
|
79
|
+
`?h+=`
|
|
80
80
|
`:f=`
|
|
81
|
-
`:(
|
|
82
|
-
`+o[
|
|
83
|
-
`&&(
|
|
84
|
-
`);break;default:
|
|
85
|
-
`}const w=n+i.length+e.source.length;return{value:
|
|
81
|
+
`:(h+=f+C,f=" ",g=!1)}switch(i.chomp){case"-":break;case"+":for(let d=a;d<o.length;++d)h+=`
|
|
82
|
+
`+o[d][0].slice(l);h[h.length-1]!==`
|
|
83
|
+
`&&(h+=`
|
|
84
|
+
`);break;default:h+=`
|
|
85
|
+
`}const w=n+i.length+e.source.length;return{value:h,type:r,comment:i.comment,range:[n,w,w]}}c(hi,"resolveBlockScalar");function Po({offset:s,props:e},t,n){if(e[0].type!=="block-scalar-header")return n(e[0],"IMPOSSIBLE","Block scalar header not found"),null;const{source:i}=e[0],r=i[0];let o=0,a="",l=-1;for(let f=1;f<i.length;++f){const g=i[f];if(!a&&(g==="-"||g==="+"))a=g;else{const w=Number(g);!o&&w?o=w:l===-1&&(l=s+f)}}l!==-1&&n(l,"UNEXPECTED_TOKEN",`Block scalar header includes extra characters: ${i}`);let u=!1,p="",h=i.length;for(let f=1;f<e.length;++f){const g=e[f];switch(g.type){case"space":u=!0;case"newline":h+=g.source.length;break;case"comment":t&&!u&&n(g,"MISSING_CHAR","Comments must be separated from other tokens by white space characters"),h+=g.source.length,p=g.source.substring(1);break;case"error":n(g,"UNEXPECTED_TOKEN",g.message),h+=g.source.length;break;default:{const w=`Unexpected token in block scalar header: ${g.type}`;n(g,"UNEXPECTED_TOKEN",w);const d=g.source;d&&typeof d=="string"&&(h+=d.length)}}}return{mode:r,indent:o,chomp:a,comment:p,length:h}}c(Po,"parseBlockScalarHeader");function Mo(s){const e=s.split(/\n( *)/),t=e[0],n=t.match(/^( *)/),r=[n?.[1]?[n[1],t.slice(n[1].length)]:["",t]];for(let o=1;o<e.length;o+=2)r.push([e[o],e[o+1]]);return r}c(Mo,"splitLines");function pi(s,e,t){const{offset:n,type:i,source:r,end:o}=s;let a,l;const u=c((f,g,w)=>t(n+f,g,w),"_onError");switch(i){case"scalar":a=L.PLAIN,l=Ro(r,u);break;case"single-quoted-scalar":a=L.QUOTE_SINGLE,l=jo(r,u);break;case"double-quoted-scalar":a=L.QUOTE_DOUBLE,l=Ko(r,u);break;default:return t(s,"UNEXPECTED_TOKEN",`Expected a flow scalar value, but found: ${i}`),{value:"",type:null,comment:"",range:[n,n+r.length,n+r.length]}}const p=n+r.length,h=ct(o,p,e,t);return{value:l,type:a,comment:h.comment,range:[n,p,h.offset]}}c(pi,"resolveFlowScalar");function Ro(s,e){let t="";switch(s[0]){case" ":t="a tab character";break;case",":t="flow indicator character ,";break;case"%":t="directive indicator character %";break;case"|":case">":{t=`block scalar indicator ${s[0]}`;break}case"@":case"`":{t=`reserved character ${s[0]}`;break}}return t&&e(0,"BAD_SCALAR_START",`Plain value cannot start with ${t}`),mi(s)}c(Ro,"plainValue");function jo(s,e){return(s[s.length-1]!=="'"||s.length===1)&&e(s.length,"MISSING_CHAR","Missing closing 'quote"),mi(s.slice(1,-1)).replace(/''/g,"'")}c(jo,"singleQuotedValue");function mi(s){let e,t;try{e=new RegExp(`(.*?)(?<![ ])[ ]*\r?
|
|
86
86
|
`,"sy"),t=new RegExp(`[ ]*(.*?)(?:(?<![ ])[ ]*)?\r?
|
|
87
87
|
`,"sy")}catch{e=/(.*?)[ \t]*\r?\n/sy,t=/[ \t]*(.*?)[ \t]*\r?\n/sy}let n=e.exec(s);if(!n)return s;let i=n[1],r=" ",o=e.lastIndex;for(t.lastIndex=o;n=t.exec(s);)n[1]===""?r===`
|
|
88
88
|
`?i+=r:r=`
|
|
89
89
|
`:(i+=r+n[1],r=" "),o=t.lastIndex;const a=/[ \t]*(.*)/sy;return a.lastIndex=o,n=a.exec(s),i+r+(n?.[1]??"")}c(mi,"foldLines");function Ko(s,e){let t="";for(let n=1;n<s.length-1;++n){const i=s[n];if(!(i==="\r"&&s[n+1]===`
|
|
90
90
|
`))if(i===`
|
|
91
|
-
`){const{fold:r,offset:o}=
|
|
91
|
+
`){const{fold:r,offset:o}=Fo(s,n);t+=r,n=o}else if(i==="\\"){let r=s[++n];const o=_o[r];if(o)t+=o;else if(r===`
|
|
92
92
|
`)for(r=s[n+1];r===" "||r===" ";)r=s[++n+1];else if(r==="\r"&&s[n+1]===`
|
|
93
93
|
`)for(r=s[++n+1];r===" "||r===" ";)r=s[++n+1];else if(r==="x"||r==="u"||r==="U"){const a={x:2,u:4,U:8}[r];t+=Bo(s,n+1,a,e),n+=a}else{const a=s.substr(n-1,2);e(n-1,"BAD_DQ_ESCAPE",`Invalid escape sequence ${a}`),t+=a}}else if(i===" "||i===" "){const r=n;let o=s[n+1];for(;o===" "||o===" ";)o=s[++n+1];o!==`
|
|
94
94
|
`&&!(o==="\r"&&s[n+2]===`
|
|
95
|
-
`)&&(t+=n>r?s.slice(r,n+1):i)}else t+=i}return(s[s.length-1]!=='"'||s.length===1)&&e(s.length,"MISSING_CHAR",'Missing closing "quote'),t}c(Ko,"doubleQuotedValue");function
|
|
95
|
+
`)&&(t+=n>r?s.slice(r,n+1):i)}else t+=i}return(s[s.length-1]!=='"'||s.length===1)&&e(s.length,"MISSING_CHAR",'Missing closing "quote'),t}c(Ko,"doubleQuotedValue");function Fo(s,e){let t="",n=s[e+1];for(;(n===" "||n===" "||n===`
|
|
96
96
|
`||n==="\r")&&!(n==="\r"&&s[e+2]!==`
|
|
97
97
|
`);)n===`
|
|
98
98
|
`&&(t+=`
|
|
99
|
-
`),e+=1,n=s[e+1];return t||(t=" "),{fold:t,offset:e}}c(
|
|
100
|
-
`,r:"\r",t:" ",v:"\v",N:"\x85",_:"\xA0",L:"\u2028",P:"\u2029"," ":" ",'"':'"',"/":"/","\\":"\\"," ":" "};function Bo(s,e,t,n){const i=s.substr(e,t),o=i.length===t&&/^[0-9a-fA-F]+$/.test(i)?parseInt(i,16):NaN;if(isNaN(o)){const a=s.substr(e-2,t+2);return n(e-2,"BAD_DQ_ESCAPE",`Invalid escape sequence ${a}`),a}return String.fromCodePoint(o)}c(Bo,"parseCharCode");function gi(s,e,t,n){const{value:i,type:r,comment:o,range:a}=e.type==="block-scalar"?hi(s,e,n):pi(e,s.options.strict,n),l=t?s.directives.tagName(t.source,
|
|
99
|
+
`),e+=1,n=s[e+1];return t||(t=" "),{fold:t,offset:e}}c(Fo,"foldNewline");const _o={0:"\0",a:"\x07",b:"\b",e:"\x1B",f:"\f",n:`
|
|
100
|
+
`,r:"\r",t:" ",v:"\v",N:"\x85",_:"\xA0",L:"\u2028",P:"\u2029"," ":" ",'"':'"',"/":"/","\\":"\\"," ":" "};function Bo(s,e,t,n){const i=s.substr(e,t),o=i.length===t&&/^[0-9a-fA-F]+$/.test(i)?parseInt(i,16):NaN;if(isNaN(o)){const a=s.substr(e-2,t+2);return n(e-2,"BAD_DQ_ESCAPE",`Invalid escape sequence ${a}`),a}return String.fromCodePoint(o)}c(Bo,"parseCharCode");function gi(s,e,t,n){const{value:i,type:r,comment:o,range:a}=e.type==="block-scalar"?hi(s,e,n):pi(e,s.options.strict,n),l=t?s.directives.tagName(t.source,h=>n(t,"TAG_RESOLVE_FAILED",h)):null;let u;s.options.stringKeys&&s.atKey?u=s.schema[le]:l?u=Uo(s.schema,i,l,t,n):e.type==="scalar"?u=qo(s,i,e,n):u=s.schema[le];let p;try{const h=u.resolve(i,f=>n(t??e,"TAG_RESOLVE_FAILED",f),s.options);p=K(h)?h:new L(h)}catch(h){const f=h instanceof Error?h.message:String(h);n(t??e,"TAG_RESOLVE_FAILED",f),p=new L(i)}return p.range=a,p.source=i,r&&(p.type=r),l&&(p.tag=l),u.format&&(p.format=u.format),o&&(p.comment=o),p}c(gi,"composeScalar");function Uo(s,e,t,n,i){if(t==="!")return s[le];const r=[];for(const a of s.tags)if(!a.collection&&a.tag===t)if(a.default&&a.test)r.push(a);else return a;for(const a of r)if(a.test?.test(e))return a;const o=s.knownTags[t];return o&&!o.collection?(s.tags.push(Object.assign({},o,{default:!1,test:void 0})),o):(i(n,"TAG_RESOLVE_FAILED",`Unresolved tag: ${t}`,t!=="tag:yaml.org,2002:str"),s[le])}c(Uo,"findScalarTagByName");function qo({atKey:s,directives:e,schema:t},n,i,r){const o=t.tags.find(a=>(a.default===!0||s&&a.default==="key")&&a.test?.test(n))||t[le];if(t.compat){const a=t.compat.find(l=>l.default&&l.test?.test(n))??t[le];if(o.tag!==a.tag){const l=e.tagString(o.tag),u=e.tagString(a.tag),p=`Value may be parsed as either ${l} or ${u}`;r(i,"TAG_RESOLVE_FAILED",p,!0)}}return o}c(qo,"findScalarTagByTest");function Jo(s,e,t){if(e){t??(t=e.length);for(let n=t-1;n>=0;--n){let i=e[n];switch(i.type){case"space":case"comment":case"newline":s-=i.source.length;continue}for(i=e[++n];i?.type==="space";)s+=i.source.length,i=e[++n];break}}return s}c(Jo,"emptyScalarPosition");const Wo={composeNode:yi,composeEmptyNode:jn};function yi(s,e,t,n){const i=s.atKey,{spaceBefore:r,comment:o,anchor:a,tag:l}=t;let u,p=!0;switch(e.type){case"alias":u=Go(s,e,n),(a||l)&&n(e,"ALIAS_PROPS","An alias node must not specify any properties");break;case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"block-scalar":u=gi(s,e,l,n),a&&(u.anchor=a.source.substring(1));break;case"block-map":case"block-seq":case"flow-collection":u=Do(Wo,s,e,t,n),a&&(u.anchor=a.source.substring(1));break;default:{const h=e.type==="error"?e.message:`Unsupported token (type: ${e.type})`;n(e,"UNEXPECTED_TOKEN",h),u=jn(s,e.offset,void 0,null,t,n),p=!1}}return a&&u.anchor===""&&n(a,"BAD_ALIAS","Anchor cannot be an empty string"),i&&s.options.stringKeys&&(!K(u)||typeof u.value!="string"||u.tag&&u.tag!=="tag:yaml.org,2002:str")&&n(l??e,"NON_STRING_KEY","With stringKeys, all keys must be strings"),r&&(u.spaceBefore=!0),o&&(e.type==="scalar"&&e.source===""?u.comment=o:u.commentBefore=o),s.options.keepSourceTokens&&p&&(u.srcToken=e),u}c(yi,"composeNode");function jn(s,e,t,n,{spaceBefore:i,comment:r,anchor:o,tag:a,end:l},u){const p={type:"scalar",offset:Jo(e,t,n),indent:-1,source:""},h=gi(s,p,a,u);return o&&(h.anchor=o.source.substring(1),h.anchor===""&&u(o,"BAD_ALIAS","Anchor cannot be an empty string")),i&&(h.spaceBefore=!0),r&&(h.comment=r,h.range[2]=l),h}c(jn,"composeEmptyNode");function Go({options:s},{offset:e,source:t,end:n},i){const r=new Ct(t.substring(1));r.source===""&&i(e,"BAD_ALIAS","Alias cannot be an empty string"),r.source.endsWith(":")&&i(e+t.length-1,"BAD_ALIAS","Alias ending in : is ambiguous",!0);const o=e+t.length,a=ct(n,o,s.strict,i);return r.range=[e,o,a.offset],a.comment&&(r.comment=a.comment),r}c(Go,"composeAlias");function Vo(s,e,{offset:t,start:n,value:i,end:r},o){const a=Object.assign({_directives:e},s),l=new Qe(void 0,a),u={atKey:!1,atRoot:!0,directives:l.directives,options:l.options,schema:l.schema},p=Ve(n,{indicator:"doc-start",next:i??r?.[0],offset:t,onError:o,parentIndent:0,startOnNewline:!0});p.found&&(l.directives.docStart=!0,i&&(i.type==="block-map"||i.type==="block-seq")&&!p.hasNewline&&o(p.end,"MISSING_CHAR","Block collection cannot start on same line with directives-end marker")),l.contents=i?yi(u,i,p,o):jn(u,p.end,n,null,p,o);const h=l.contents.range[2],f=ct(r,h,!1,o);return f.comment&&(l.comment=f.comment),l.range=[t,h,f.offset],l}c(Vo,"composeDoc");function lt(s){if(typeof s=="number")return[s,s+1];if(Array.isArray(s))return s.length===2?s:[s[0],s[1]];const{offset:e,source:t}=s;return[e,e+(typeof t=="string"?t.length:1)]}c(lt,"getErrorPos");function wi(s){let e="",t=!1,n=!1;for(let i=0;i<s.length;++i){const r=s[i];switch(r[0]){case"#":e+=(e===""?"":n?`
|
|
101
101
|
|
|
102
102
|
`:`
|
|
103
103
|
`)+(r.substring(1)||" "),t=!0,n=!1;break;case"%":s[i+1]?.[0]!=="#"&&(i+=1),t=!1;break;default:t||(n=!0),t=!1}}return{comment:e,afterEmptyLine:n}}c(wi,"parsePrelude");class Kn{static{c(this,"Composer")}constructor(e={}){this.doc=null,this.atDirectives=!1,this.prelude=[],this.errors=[],this.warnings=[],this.onError=(t,n,i,r)=>{const o=lt(t);r?this.warnings.push(new ui(o,n,i)):this.errors.push(new Ae(o,n,i))},this.directives=new Q({version:e.version||"1.2"}),this.options=e}decorate(e,t){const{comment:n,afterEmptyLine:i}=wi(this.prelude);if(n){const r=e.contents;if(t)e.comment=e.comment?`${e.comment}
|
|
@@ -106,13 +106,13 @@ ${a}`:n}else{const o=r.commentBefore;r.commentBefore=o?`${n}
|
|
|
106
106
|
${o}`:n}}t?(Array.prototype.push.apply(e.errors,this.errors),Array.prototype.push.apply(e.warnings,this.warnings)):(e.errors=this.errors,e.warnings=this.warnings),this.prelude=[],this.errors=[],this.warnings=[]}streamInfo(){return{comment:wi(this.prelude).comment,directives:this.directives,errors:this.errors,warnings:this.warnings}}*compose(e,t=!1,n=-1){for(const i of e)yield*this.next(i);yield*this.end(t,n)}*next(e){switch(e.type){case"directive":this.directives.add(e.source,(t,n,i)=>{const r=lt(e);r[0]+=t,this.onError(r,"BAD_DIRECTIVE",n,i)}),this.prelude.push(e.source),this.atDirectives=!0;break;case"document":{const t=Vo(this.options,this.directives,e,this.onError);this.atDirectives&&!t.directives.docStart&&this.onError(e,"MISSING_CHAR","Missing directives-end/doc-start indicator line"),this.decorate(t,!1),this.doc&&(yield this.doc),this.doc=t,this.atDirectives=!1;break}case"byte-order-mark":case"space":break;case"comment":case"newline":this.prelude.push(e.source);break;case"error":{const t=e.source?`${e.message}: ${JSON.stringify(e.source)}`:e.message,n=new Ae(lt(e),"UNEXPECTED_TOKEN",t);this.atDirectives||!this.doc?this.errors.push(n):this.doc.errors.push(n);break}case"doc-end":{if(!this.doc){const n="Unexpected doc-end without preceding document";this.errors.push(new Ae(lt(e),"UNEXPECTED_TOKEN",n));break}this.doc.directives.docEnd=!0;const t=ct(e.end,e.offset+e.source.length,this.doc.options.strict,this.onError);if(this.decorate(this.doc,!0),t.comment){const n=this.doc.comment;this.doc.comment=n?`${n}
|
|
107
107
|
${t.comment}`:t.comment}this.doc.range[2]=t.offset;break}default:this.errors.push(new Ae(lt(e),"UNEXPECTED_TOKEN",`Unsupported token ${e.type}`))}}*end(e=!1,t=-1){if(this.doc)this.decorate(this.doc,!0),yield this.doc,this.doc=null;else if(e){const n=Object.assign({_directives:this.directives},this.options),i=new Qe(void 0,n);this.atDirectives&&this.onError(t,"MISSING_CHAR","Missing directives-end indicator line"),i.range=[0,t,t],this.decorate(i,!1),yield i}}}function Ho(s,e=!0,t){if(s){const n=c((i,r,o)=>{const a=typeof i=="number"?i:Array.isArray(i)?i[0]:i.offset;if(t)t(a,r,o);else throw new Ae([a,a+1],r,o)},"_onError");switch(s.type){case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return pi(s,e,n);case"block-scalar":return hi({options:{strict:e}},s,n)}}return null}c(Ho,"resolveAsScalar");function Yo(s,e){const{implicitKey:t=!1,indent:n,inFlow:i=!1,offset:r=-1,type:o="PLAIN"}=e,a=rt({type:o,value:s},{implicitKey:t,indent:n>0?" ".repeat(n):"",inFlow:i,options:{blockQuote:!0,lineWidth:-1}}),l=e.end??[{type:"newline",offset:-1,indent:n,source:`
|
|
108
108
|
`}];switch(a[0]){case"|":case">":{const u=a.indexOf(`
|
|
109
|
-
`),p=a.substring(0,u),
|
|
109
|
+
`),p=a.substring(0,u),h=a.substring(u+1)+`
|
|
110
110
|
`,f=[{type:"block-scalar-header",offset:r,indent:n,source:p}];return bi(f,l)||f.push({type:"newline",offset:-1,indent:n,source:`
|
|
111
|
-
`}),{type:"block-scalar",offset:r,indent:n,props:f,source:
|
|
111
|
+
`}),{type:"block-scalar",offset:r,indent:n,props:f,source:h}}case'"':return{type:"double-quoted-scalar",offset:r,indent:n,source:a,end:l};case"'":return{type:"single-quoted-scalar",offset:r,indent:n,source:a,end:l};default:return{type:"scalar",offset:r,indent:n,source:a,end:l}}}c(Yo,"createScalarToken");function zo(s,e,t={}){let{afterKey:n=!1,implicitKey:i=!1,inFlow:r=!1,type:o}=t,a="indent"in s?s.indent:null;if(n&&typeof a=="number"&&(a+=2),!o)switch(s.type){case"single-quoted-scalar":o="QUOTE_SINGLE";break;case"double-quoted-scalar":o="QUOTE_DOUBLE";break;case"block-scalar":{const u=s.props[0];if(u.type!=="block-scalar-header")throw new Error("Invalid block scalar header");o=u.source[0]===">"?"BLOCK_FOLDED":"BLOCK_LITERAL";break}default:o="PLAIN"}const l=rt({type:o,value:e},{implicitKey:i||a===null,indent:a!==null&&a>0?" ".repeat(a):"",inFlow:r,options:{blockQuote:!0,lineWidth:-1}});switch(l[0]){case"|":case">":Qo(s,l);break;case'"':Fn(s,l,"double-quoted-scalar");break;case"'":Fn(s,l,"single-quoted-scalar");break;default:Fn(s,l,"scalar")}}c(zo,"setScalarValue");function Qo(s,e){const t=e.indexOf(`
|
|
112
112
|
`),n=e.substring(0,t),i=e.substring(t+1)+`
|
|
113
113
|
`;if(s.type==="block-scalar"){const r=s.props[0];if(r.type!=="block-scalar-header")throw new Error("Invalid block scalar header");r.source=n,s.source=i}else{const{offset:r}=s,o="indent"in s?s.indent:-1,a=[{type:"block-scalar-header",offset:r,indent:o,source:n}];bi(a,"end"in s?s.end:void 0)||a.push({type:"newline",offset:-1,indent:o,source:`
|
|
114
|
-
`});for(const l of Object.keys(s))l!=="type"&&l!=="offset"&&delete s[l];Object.assign(s,{type:"block-scalar",indent:o,props:a,source:i})}}c(Qo,"setBlockScalarValue");function bi(s,e){if(e)for(const t of e)switch(t.type){case"space":case"comment":s.push(t);break;case"newline":return s.push(t),!0}return!1}c(bi,"addEndtoBlockProps");function
|
|
115
|
-
`};delete s.items,Object.assign(s,{type:t,source:e,end:[i]});break}default:{const n="indent"in s?s.indent:-1,i="end"in s&&Array.isArray(s.end)?s.end.filter(r=>r.type==="space"||r.type==="comment"||r.type==="newline"):[];for(const r of Object.keys(s))r!=="type"&&r!=="offset"&&delete s[r];Object.assign(s,{type:t,indent:n,source:e,end:i})}}}c(
|
|
114
|
+
`});for(const l of Object.keys(s))l!=="type"&&l!=="offset"&&delete s[l];Object.assign(s,{type:"block-scalar",indent:o,props:a,source:i})}}c(Qo,"setBlockScalarValue");function bi(s,e){if(e)for(const t of e)switch(t.type){case"space":case"comment":s.push(t);break;case"newline":return s.push(t),!0}return!1}c(bi,"addEndtoBlockProps");function Fn(s,e,t){switch(s.type){case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":s.type=t,s.source=e;break;case"block-scalar":{const n=s.props.slice(1);let i=e.length;s.props[0].type==="block-scalar-header"&&(i-=s.props[0].source.length);for(const r of n)r.offset+=i;delete s.props,Object.assign(s,{type:t,source:e,end:n});break}case"block-map":case"block-seq":{const i={type:"newline",offset:s.offset+e.length,indent:s.indent,source:`
|
|
115
|
+
`};delete s.items,Object.assign(s,{type:t,source:e,end:[i]});break}default:{const n="indent"in s?s.indent:-1,i="end"in s&&Array.isArray(s.end)?s.end.filter(r=>r.type==="space"||r.type==="comment"||r.type==="newline"):[];for(const r of Object.keys(s))r!=="type"&&r!=="offset"&&delete s[r];Object.assign(s,{type:t,indent:n,source:e,end:i})}}}c(Fn,"setFlowScalarValue");const Xo=c(s=>"type"in s?Ft(s):_t(s),"stringify$1");function Ft(s){switch(s.type){case"block-scalar":{let e="";for(const t of s.props)e+=Ft(t);return e+s.source}case"block-map":case"block-seq":{let e="";for(const t of s.items)e+=_t(t);return e}case"flow-collection":{let e=s.start.source;for(const t of s.items)e+=_t(t);for(const t of s.end)e+=t.source;return e}case"document":{let e=_t(s);if(s.end)for(const t of s.end)e+=t.source;return e}default:{let e=s.source;if("end"in s&&s.end)for(const t of s.end)e+=t.source;return e}}}c(Ft,"stringifyToken");function _t({start:s,key:e,sep:t,value:n}){let i="";for(const r of s)i+=r.source;if(e&&(i+=Ft(e)),t)for(const r of t)i+=r.source;return n&&(i+=Ft(n)),i}c(_t,"stringifyItem");const _n=Symbol("break visit"),Zo=Symbol("skip children"),Si=Symbol("remove item");function Oe(s,e){"type"in s&&s.type==="document"&&(s={start:s.start,value:s.value}),Ci(Object.freeze([]),s,e)}c(Oe,"visit"),Oe.BREAK=_n,Oe.SKIP=Zo,Oe.REMOVE=Si,Oe.itemAtPath=(s,e)=>{let t=s;for(const[n,i]of e){const r=t?.[n];if(r&&"items"in r)t=r.items[i];else return}return t},Oe.parentCollection=(s,e)=>{const t=Oe.itemAtPath(s,e.slice(0,-1)),n=e[e.length-1][0],i=t?.[n];if(i&&"items"in i)return i;throw new Error("Parent collection not found")};function Ci(s,e,t){let n=t(e,s);if(typeof n=="symbol")return n;for(const i of["key","value"]){const r=e[i];if(r&&"items"in r){for(let o=0;o<r.items.length;++o){const a=Ci(Object.freeze(s.concat([[i,o]])),r.items[o],t);if(typeof a=="number")o=a-1;else{if(a===_n)return _n;a===Si&&(r.items.splice(o,1),o-=1)}}typeof n=="function"&&i==="key"&&(n=n(e,s))}}return typeof n=="function"?n(e,s):n}c(Ci,"_visit");const Bt="\uFEFF",Ut="",qt="",ut="",ea=c(s=>!!s&&"items"in s,"isCollection"),ta=c(s=>!!s&&(s.type==="scalar"||s.type==="single-quoted-scalar"||s.type==="double-quoted-scalar"||s.type==="block-scalar"),"isScalar");function na(s){switch(s){case Bt:return"<BOM>";case Ut:return"<DOC>";case qt:return"<FLOW_END>";case ut:return"<SCALAR>";default:return JSON.stringify(s)}}c(na,"prettyToken");function ki(s){switch(s){case Bt:return"byte-order-mark";case Ut:return"doc-mode";case qt:return"flow-error-end";case ut:return"scalar";case"---":return"doc-start";case"...":return"doc-end";case"":case`
|
|
116
116
|
`:case`\r
|
|
117
117
|
`:return"newline";case"-":return"seq-item-ind";case"?":return"explicit-key-ind";case":":return"map-value-ind";case"{":return"flow-map-start";case"}":return"flow-map-end";case"[":return"flow-seq-start";case"]":return"flow-seq-end";case",":return"comma"}switch(s[0]){case" ":case" ":return"space";case"#":return"comment";case"%":return"directive-line";case"*":return"alias";case"&":return"anchor";case"!":return"tag";case"'":return"single-quoted-scalar";case'"':return"double-quoted-scalar";case"|":case">":return"block-scalar-header"}return null}c(ki,"tokenType");var sa=Object.freeze({__proto__:null,BOM:Bt,DOCUMENT:Ut,FLOW_END:qt,SCALAR:ut,createScalarToken:Yo,isCollection:ea,isScalar:ta,prettyToken:na,resolveAsScalar:Ho,setScalarValue:zo,stringify:Xo,tokenType:ki,visit:Oe});function ae(s){switch(s){case void 0:case" ":case`
|
|
118
118
|
`:case"\r":case" ":return!0;default:return!1}}c(ae,"isEmpty");const vi=new Set("0123456789ABCDEFabcdef"),ia=new Set("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()"),Jt=new Set(",[]{}"),ra=new Set(` ,[]{}
|
|
@@ -137,16 +137,16 @@ ${t.comment}`:t.comment}this.doc.range[2]=t.offset;break}default:this.errors.pus
|
|
|
137
137
|
`)+1;for(;t!==0;)this.onNewLine(this.offset+t),t=this.source.indexOf(`
|
|
138
138
|
`,t)+1}yield*this.pop();break;default:yield*this.pop(),yield*this.step()}}*blockMap(e){const t=e.items[e.items.length-1];switch(this.type){case"newline":if(this.onKeyLine=!1,t.value){const n="end"in t.value?t.value.end:void 0;(Array.isArray(n)?n[n.length-1]:void 0)?.type==="comment"?n?.push(this.sourceToken):e.items.push({start:[this.sourceToken]})}else t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken);return;case"space":case"comment":if(t.value)e.items.push({start:[this.sourceToken]});else if(t.sep)t.sep.push(this.sourceToken);else{if(this.atIndentedComment(t.start,e.indent)){const i=e.items[e.items.length-2]?.value?.end;if(Array.isArray(i)){Array.prototype.push.apply(i,t.start),i.push(this.sourceToken),e.items.pop();return}}t.start.push(this.sourceToken)}return}if(this.indent>=e.indent){const n=!this.onKeyLine&&this.indent===e.indent,i=n&&(t.sep||t.explicitKey)&&this.type!=="seq-item-ind";let r=[];if(i&&t.sep&&!t.value){const o=[];for(let a=0;a<t.sep.length;++a){const l=t.sep[a];switch(l.type){case"newline":o.push(a);break;case"space":break;case"comment":l.indent>e.indent&&(o.length=0);break;default:o.length=0}}o.length>=2&&(r=t.sep.splice(o[1]))}switch(this.type){case"anchor":case"tag":i||t.value?(r.push(this.sourceToken),e.items.push({start:r}),this.onKeyLine=!0):t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken);return;case"explicit-key-ind":!t.sep&&!t.explicitKey?(t.start.push(this.sourceToken),t.explicitKey=!0):i||t.value?(r.push(this.sourceToken),e.items.push({start:r,explicitKey:!0})):this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken],explicitKey:!0}]}),this.onKeyLine=!0;return;case"map-value-ind":if(t.explicitKey)if(t.sep)if(t.value)e.items.push({start:[],key:null,sep:[this.sourceToken]});else if(ke(t.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:r,key:null,sep:[this.sourceToken]}]});else if(Ni(t.key)&&!ke(t.sep,"newline")){const o=He(t.start),a=t.key,l=t.sep;l.push(this.sourceToken),delete t.key,delete t.sep,this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:o,key:a,sep:l}]})}else r.length>0?t.sep=t.sep.concat(r,this.sourceToken):t.sep.push(this.sourceToken);else if(ke(t.start,"newline"))Object.assign(t,{key:null,sep:[this.sourceToken]});else{const o=He(t.start);this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:o,key:null,sep:[this.sourceToken]}]})}else t.sep?t.value||i?e.items.push({start:r,key:null,sep:[this.sourceToken]}):ke(t.sep,"map-value-ind")?this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[],key:null,sep:[this.sourceToken]}]}):t.sep.push(this.sourceToken):Object.assign(t,{key:null,sep:[this.sourceToken]});this.onKeyLine=!0;return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{const o=this.flowScalar(this.type);i||t.value?(e.items.push({start:r,key:o,sep:[]}),this.onKeyLine=!0):t.sep?this.stack.push(o):(Object.assign(t,{key:o,sep:[]}),this.onKeyLine=!0);return}default:{const o=this.startBlockValue(e);if(o){if(o.type==="block-seq"){if(!t.explicitKey&&t.sep&&!ke(t.sep,"newline")){yield*this.pop({type:"error",offset:this.offset,message:"Unexpected block-seq-ind on same line with key",source:this.source});return}}else n&&e.items.push({start:r});this.stack.push(o);return}}}}yield*this.pop(),yield*this.step()}*blockSequence(e){const t=e.items[e.items.length-1];switch(this.type){case"newline":if(t.value){const n="end"in t.value?t.value.end:void 0;(Array.isArray(n)?n[n.length-1]:void 0)?.type==="comment"?n?.push(this.sourceToken):e.items.push({start:[this.sourceToken]})}else t.start.push(this.sourceToken);return;case"space":case"comment":if(t.value)e.items.push({start:[this.sourceToken]});else{if(this.atIndentedComment(t.start,e.indent)){const i=e.items[e.items.length-2]?.value?.end;if(Array.isArray(i)){Array.prototype.push.apply(i,t.start),i.push(this.sourceToken),e.items.pop();return}}t.start.push(this.sourceToken)}return;case"anchor":case"tag":if(t.value||this.indent<=e.indent)break;t.start.push(this.sourceToken);return;case"seq-item-ind":if(this.indent!==e.indent)break;t.value||ke(t.start,"seq-item-ind")?e.items.push({start:[this.sourceToken]}):t.start.push(this.sourceToken);return}if(this.indent>e.indent){const n=this.startBlockValue(e);if(n){this.stack.push(n);return}}yield*this.pop(),yield*this.step()}*flowCollection(e){const t=e.items[e.items.length-1];if(this.type==="flow-error-end"){let n;do yield*this.pop(),n=this.peek(1);while(n&&n.type==="flow-collection")}else if(e.end.length===0){switch(this.type){case"comma":case"explicit-key-ind":!t||t.sep?e.items.push({start:[this.sourceToken]}):t.start.push(this.sourceToken);return;case"map-value-ind":!t||t.value?e.items.push({start:[],key:null,sep:[this.sourceToken]}):t.sep?t.sep.push(this.sourceToken):Object.assign(t,{key:null,sep:[this.sourceToken]});return;case"space":case"comment":case"newline":case"anchor":case"tag":!t||t.value?e.items.push({start:[this.sourceToken]}):t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken);return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{const i=this.flowScalar(this.type);!t||t.value?e.items.push({start:[],key:i,sep:[]}):t.sep?this.stack.push(i):Object.assign(t,{key:i,sep:[]});return}case"flow-map-end":case"flow-seq-end":e.end.push(this.sourceToken);return}const n=this.startBlockValue(e);n?this.stack.push(n):(yield*this.pop(),yield*this.step())}else{const n=this.peek(2);if(n.type==="block-map"&&(this.type==="map-value-ind"&&n.indent===e.indent||this.type==="newline"&&!n.items[n.items.length-1].sep))yield*this.pop(),yield*this.step();else if(this.type==="map-value-ind"&&n.type!=="flow-collection"){const i=Wt(n),r=He(i);Ai(e);const o=e.end.splice(1,e.end.length);o.push(this.sourceToken);const a={type:"block-map",offset:e.offset,indent:e.indent,items:[{start:r,key:e,sep:o}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=a}else yield*this.lineEnd(e)}}flowScalar(e){if(this.onNewLine){let t=this.source.indexOf(`
|
|
139
139
|
`)+1;for(;t!==0;)this.onNewLine(this.offset+t),t=this.source.indexOf(`
|
|
140
|
-
`,t)+1}return{type:e,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(e){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;const t=Wt(e),n=He(t);return n.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:n,explicitKey:!0}]}}case"map-value-ind":{this.onKeyLine=!0;const t=Wt(e),n=He(t);return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:n,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(e,t){return this.type!=="comment"||this.indent<=t?!1:e.every(n=>n.type==="newline"||n.type==="space")}*documentEnd(e){this.type!=="doc-mode"&&(e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop()))}*lineEnd(e){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*this.pop(),yield*this.step();break;case"newline":this.onKeyLine=!1;case"space":case"comment":default:e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop())}}}function Oi(s){const e=s.prettyErrors!==!1;return{lineCounter:s.lineCounter||e&&new Ti||null,prettyErrors:e}}c(Oi,"parseOptions");function oa(s,e={}){const{lineCounter:t,prettyErrors:n}=Oi(e),i=new Un(t?.addNewLine),r=new Kn(e),o=Array.from(r.compose(i.parse(s)));if(n&&t)for(const a of o)a.errors.forEach(Kt(s,t)),a.warnings.forEach(Kt(s,t));return o.length>0?o:Object.assign([],{empty:!0},r.streamInfo())}c(oa,"parseAllDocuments");function $i(s,e={}){const{lineCounter:t,prettyErrors:n}=Oi(e),i=new Un(t?.addNewLine),r=new Kn(e);let o=null;for(const a of r.compose(i.parse(s),!0,s.length))if(!o)o=a;else if(o.options.logLevel!=="silent"){o.errors.push(new Ae(a.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}return n&&t&&(o.errors.forEach(Kt(s,t)),o.warnings.forEach(Kt(s,t))),o}c($i,"parseDocument");function aa(s,e,t){let n;typeof e=="function"?n=e:t===void 0&&e&&typeof e=="object"&&(t=e);const i=$i(s,t);if(!i)return null;if(i.warnings.forEach(r=>Bs(i.options.logLevel,r)),i.errors.length>0){if(i.options.logLevel!=="silent")throw i.errors[0];i.errors=[]}return i.toJS(Object.assign({reviver:n},t))}c(aa,"parse");function ca(s,e,t){let n=null;if(typeof e=="function"||Array.isArray(e)?n=e:t===void 0&&e&&(t=e),typeof t=="string"&&(t=t.length),typeof t=="number"){const i=Math.round(t);t=i<1?void 0:i>8?{indent:8}:{indent:i}}if(s===void 0){const{keepUndefined:i}=t??e??{};if(!i)return}return Ee(s)&&!n?s.toString(t):new Qe(s,n,t).toString(t)}c(ca,"stringify");var la=Object.freeze({__proto__:null,Alias:Ct,CST:sa,Composer:Kn,Document:Qe,Lexer:Ei,LineCounter:Ti,Pair:Y,Parser:Un,Scalar:L,Schema:Ht,YAMLError:xn,YAMLMap:ee,YAMLParseError:Ae,YAMLSeq:Ce,YAMLWarning:ui,isAlias:Se,isCollection:q,isDocument:Ee,isMap:Re,isNode:J,isPair:_,isScalar:R,isSeq:Ke,parse:aa,parseAllDocuments:oa,parseDocument:$i,stringify:ca,visit:Te,visitAsync:St});const Z={Added:"added",Changed:"changed",Deleted:"deleted",Stopped:"stopped"},ua={ignored:zr,persistent:!0,ignoreInitial:!0,followSymlinks:!1,depth:10,awaitWriteFinish:{stabilityThreshold:500,pollInterval:100},ignorePermissionErrors:!0,atomic:!0,usePolling:!1,alwaysStat:!1,interval:1e3,binaryInterval:300};class fa extends ws{static{c(this,"FileWatcher")}constructor(e){super(),this.options=e,this.membraneDir=bt(this.options.cwd)}isWatching=!1;watcher;membraneDir;contentCache={};async start(){this.isWatching||(x.existsSync(this.membraneDir)||x.mkdirSync(this.membraneDir,{recursive:!0}),this.initializeContentCache(),this.watcher=dr.watch(this.membraneDir,ua),this.watcher.on("add",e=>this.handleFileSystemEvent(Z.Added,e)).on("change",e=>this.handleFileSystemEvent(Z.Changed,e)).on("unlink",e=>this.handleFileSystemEvent(Z.Deleted,e)).on("ready",()=>this.isWatching=!0))}async stop(){!this.isWatching||!this.watcher||(await this.watcher.close(),this.isWatching=!1,this.watcher=void 0,this.clearCache(),this.emit(Z.Stopped))}getCwd(){return this.options.cwd}handleFileSystemEvent(e,t){const n=D.relative(this.membraneDir,t);if(e===Z.Deleted){this.removeFromCache(n);const a={filePath:t,relativePath:n,data:void 0};$.info(`[local] ${e}: ${a.relativePath}`),this.emit(e,a);return}const i=this.readFileContent(t);if(!this.hasContentChanged(n,i,e))return;const o=this.processFileEvent(t,i);this.updateCache(n,i),o&&($.info(`[local] ${e}: ${o.relativePath}`),this.emit(e,o))}readFileContent(e){return x.readFileSync(e,"utf8")}processFileEvent(e,t){const n=D.relative(this.membraneDir,e);let i;try{i=t?la.parse(t):void 0}catch{i=void 0}return{filePath:e,relativePath:n,data:i}}hasContentChanged(e,t,n){if(n==="added")return!0;if(!t)return this.contentCache[e]!==void 0;const i=this.getContentHash(t);return this.contentCache[e]!==i}getContentHash(e){return Zi.createHash("sha256").update(e).digest("hex")}updateCache(e,t){if(!t){delete this.contentCache[e];return}this.contentCache[e]=this.getContentHash(t)}removeFromCache(e){delete this.contentCache[e]}clearCache(){Object.keys(this.contentCache).forEach(e=>{delete this.contentCache[e]})}initializeContentCache(){x.existsSync(this.membraneDir)&&this.scanDirectoryForCache(this.membraneDir)}scanDirectoryForCache(e){const t=x.readdirSync(e,{withFileTypes:!0});for(const n of t){const i=D.join(e,n.name);if(n.isDirectory())this.scanDirectoryForCache(i);else if(n.isFile())try{const r=x.readFileSync(i,"utf8"),o=D.relative(this.membraneDir,i);this.updateCache(o,r)}catch{}}}}const z={UPDATE:"update",DELETE:"delete",CREATE:"create"},fe={INCOMING:"incoming",OUTGOING:"outgoing"};class ft{static{c(this,"ElementSyncService")}constructor(e,t){this.localManager=e,this.remoteManager=t,this.notifier=re}fileWatcher=void 0;notifier;changes=[];hasConflicts(){return this.changes.some(e=>e.isConflict)}hasChanges(){return this.changes.length>0}async startWatching(){this.fileWatcher=new fa({cwd:process.cwd()}),this.fileWatcher.on(Z.Added,e=>this.handleLocalEvent(e,Z.Added)),this.fileWatcher.on(Z.Changed,e=>this.handleLocalEvent(e,Z.Changed)),this.fileWatcher.on(Z.Deleted,e=>this.handleLocalEvent(e,Z.Deleted)),await this.fileWatcher.start(),$.success("[local] Tracking changes..")}async stopWatching(){await this.fileWatcher?.stop(),this.fileWatcher=void 0}async handleLocalEvent(e,t){let n=V.fromPathAndData(e.filePath,e.data);if(!n){const r=V.idFromPath(e.filePath);if(!r||(n=this.remoteManager.cache.get(r),!n))return}const i=this.getManager(fe.OUTGOING);switch($.info(`[resolver][${this.getDirectionLabel(fe.OUTGOING)}] ${t}: ${n.id}`),t){case Z.Added:case Z.Changed:await i.putElement(n);break;case Z.Deleted:await i.deleteElement(n);break}}detectIncomingChanges(){this.clearChanges();const e=ft.getChanges(fe.INCOMING,this.remoteManager.cache,this.localManager.cache);return this.updateChanges(e),e}detectOutgoingChanges(){this.clearChanges();const e=ft.getChanges(fe.OUTGOING,this.localManager.cache,this.remoteManager.cache);return this.updateChanges(e),e}getChange(e){const t=this.localManager.cache.get(e.id),n=this.remoteManager.cache.get(e.id);return!t&&n?{type:z.CREATE,element:n,direction:fe.INCOMING,isConflict:!1}:t&&!n?{type:z.DELETE,element:t,direction:fe.OUTGOING,isConflict:!0}:t&&n&&!t.isEqual(n)?{type:z.UPDATE,element:t,direction:fe.OUTGOING,isConflict:!0}:null}async resolveChanges(){this.hasChanges()&&($.info("[resolver] Resolving changes.."),await Promise.all(this.changes.map(e=>this.resolveChange(e))),$.success(`[resolver] Resolved ${this.changes.length} changes`))}async resolveChange(e){const t=this.getManager(e.direction);switch(e.type){case z.DELETE:return $.info(`[resolver][${this.getDirectionLabel(e.direction)}] Deleting ${e.element.id}`),t.deleteElement(e.element);case z.CREATE:return $.info(`[resolver][${this.getDirectionLabel(e.direction)}] Creating ${e.element.id}`),t.putElement(e.element);case z.UPDATE:return $.info(`[resolver][${this.getDirectionLabel(e.direction)}] Updating ${e.element.id}`),t.putElement(e.element)}}getManager(e){return e===fe.INCOMING?this.localManager:this.remoteManager}static getChanges(e,t,n){const i=t.getAllIds(),r=n.getAllIds(),o=new Set([...i,...r]),a=[];for(const l of o){const u=t.get(l),p=n.get(l),d=ft.detectChangeForElement(u,p,e);d&&a.push(d)}return a}updateChanges(e){this.changes=e;for(const t of e)$.info(`[resolver][${this.getDirectionLabel(t.direction)}] ${this.getTypeLabel(t.type)} ${t.element.id}`);if(this.hasConflicts()){const t=e.filter(n=>n.isConflict);$.warning("[resolver] Conflicts detected"),this.notifier.setConflicts(t)}}clearChanges(){this.changes=[]}getDirectionLabel(e){switch(e){case fe.INCOMING:return"local\u2190remote";case fe.OUTGOING:return"local\u2192remote"}}getTypeLabel(e){switch(e){case z.CREATE:return"ADD";case z.UPDATE:return"UPD";case z.DELETE:return"DEL"}}static detectChangeForElement(e,t,n){return e&&!t?{type:z.CREATE,element:e,direction:n,isConflict:!1}:!e&&t?{type:z.DELETE,element:t,direction:n,isConflict:!0}:e&&t&&!e.isEqual(t)?{type:z.UPDATE,element:e,direction:n,isConflict:!0}:null}}class da{static{c(this,"WorkspaceService")}notifier;local;remote;syncService;constructor(){this.notifier=re,this.local=new Ss(new Xr),this.remote=new Ss(new Zr),this.syncService=new ft(this.local,this.remote)}async push(e={}){if(this.notifier.setState(P.PUSHING),await this.refreshElements(),this.syncService.detectOutgoingChanges(),this.syncService.hasConflicts()&&!e.force)return this.notifier.setState(P.CONFLICTS);await Ur(),await this.resolveChanges({watch:e.watch})}async pull(e={}){if(this.notifier.setState(P.PULLING),await this.refreshElements(),this.syncService.detectIncomingChanges(),this.syncService.hasConflicts()&&!e.force)return this.notifier.setState(P.CONFLICTS);await Br({integrations:this.remote.cache.getElementsByType(U.Integration).map(t=>t.data),allConnectors:e.allConnectors}),await this.resolveChanges({watch:e.watch})}async resolveChanges(e={}){this.notifier.setState(P.RESOLVING),this.syncService.hasChanges()&&await this.syncService.resolveChanges(),this.updateStats(),this.notifier.setState(P.SYNCED),e.watch&&(this.notifier.setState(P.WATCHING),await this.syncService.startWatching()),e.onComplete?.()}async refreshElements(){return Promise.all([this.remote.refresh(),this.local.refresh()])}updateStats(){const e={};for(const t of this.local.cache.getAll())e[t.type]=(e[t.type]||0)+1;this.notifier.setStats(e)}}const qn=new da,Li=zt(null);function Jn({children:s,onExit:e}){const{config:t,isLoading:n}=Ze(),{data:i}=ns("/account"),[r,o]=K(P.NOT_SYNCED),[a,l]=K([]),[u,p]=K({}),[d,f]=K([]),w=i?.workspaces?.find(T=>T.key===t?.workspaceKey)||null,h=t?.workspaceKey&&t?.workspaceSecret;function y(T){if(h)try{qn.resolveChanges(T||{})}catch(N){console.error("Failed to resolve conflicts:",N),A()}}c(y,"resolveConflicts");function C(T){if(h)try{qn.pull(T||{})}catch(N){console.error("Failed to pull:",N),A()}}c(C,"pull");function v(T){if(h)try{qn.push(T||{})}catch(N){console.error("Failed to push:",N),A()}}c(v,"push");function A(){h&&e()}return c(A,"exit"),ye(()=>{const T=c(({state:E})=>o(E),"handleStateChanged"),N=c(({stats:E})=>p(E),"handleStatsChanged"),O=c(({log:E})=>f(W=>[...W,E]),"handleLogAdded"),M=c(({conflicts:E})=>l(E),"handleConflictsUpdated");return re.on(te.StateChanged,T),re.on(te.StatsChanged,N),re.on(te.LogAdded,O),re.on(te.ConflictsChanged,M),()=>{re.off(te.StateChanged,T),re.off(te.StatsChanged,N),re.off(te.LogAdded,O),re.off(te.ConflictsChanged,M)}},[]),n?null:h?m(Li.Provider,{value:{state:r,stats:u,logs:d,currentWorkspace:w,conflicts:a,resolveConflicts:y,pull:C,push:v,exit:A},children:s}):m(b,{children:m(S,{children:"No workspace selected. Please run `membrane init` to select a workspace."})})}c(Jn,"WorkspaceServiceProvider");function $e(){const s=Qt(Li);if(!s)throw new Error("useWorkspaceService must be used within WorkspaceServiceProvider");return s}c($e,"useWorkspaceService");function Wn(){const{stats:s}=$e(),e=Object.entries(s).filter(([t,n])=>n>0);return e.length===0?null:I(b,{flexDirection:"column",children:[m(b,{children:m(b,{width:12,children:m(S,{color:"grey",children:"Elements:"})})}),m(b,{flexDirection:"column",marginLeft:1,children:e.map(([t,n])=>I(b,{children:[m(b,{width:20,children:I(S,{children:[t,":"]})}),m(S,{color:"green",children:n})]},t))})]})}c(Wn,"ElementStats");const Gn=c(s=>{switch(s){case"error":return"red";case"success":return"green";case"warning":return"yellow";default:return}},"getLogColor");function xi(s,e){return e<3?s.slice(0,Math.max(0,e)):s.length<=e?s:`${s.slice(0,e-3)}...`}c(xi,"truncateText");const Vn=5,ha=6;function pa(){const{logs:s}=$e(),[e,t]=K(0),n=Math.min(100,process.stdout.columns||100),i=Vn,r=Math.max(0,s.length-i-e),o=s.length-e,a=s.slice(r,o),l=n-ha,u=e<s.length-i,p=e>0;return xe((d,f)=>{if(s.length!==0)if(f.upArrow){const g=Math.max(0,s.length-i);t(w=>Math.min(g,w+1))}else f.downArrow?t(g=>Math.max(0,g-1)):(d==="G"||d==="g")&&t(0)}),I(b,{flexDirection:"column",paddingTop:1,children:[I(S,{color:"grey",children:["Recent Activity (",r+1,"-",o," of ",s.length,"):",s.length>Vn&&m(S,{color:"grey",children:" [arrows: scroll] [g: end]"})]}),a.map((d,f)=>m(b,{marginLeft:1,children:m(S,{color:Gn(d.type),children:xi(d.message,l)})},d.timestamp+f)),s.length>Vn&&I(b,{marginLeft:1,flexDirection:"row",children:[u&&m(S,{color:"grey",children:"\u2191 "}),p&&m(S,{color:"grey",children:"\u2193 "})]})]})}c(pa,"Logs");const Gt=[{value:"sync",label:"Continue (overwrite/delete)",key:""},{value:"exit",label:"Cancel",key:""}];function ma(){const{state:s,resolveConflicts:e,exit:t}=$e(),[n,i]=K(0),[r,o]=K(!1);return xe((a,l)=>{r||(l.upArrow?i(u=>u>0?u-1:Gt.length-1):l.downArrow?i(u=>u<Gt.length-1?u+1:0):a.toLowerCase()==="y"?i(0):a.toLowerCase()==="n"?i(1):(l.return||a===" ")&&(o(!0),Gt[n].value==="sync"?e({watch:!0}):t()))}),ye(()=>{s!==P.CONFLICTS&&r&&o(!1)},[s,r]),I(b,{flexDirection:"column",paddingTop:1,children:[m(b,{children:m(b,{flexDirection:"row",gap:2,children:m(S,{bold:!0,color:"white",children:"Conflicts with remote"})})}),m(b,{children:m(S,{color:"grey",children:"The remote workspace has changes that aren't in your local workspace:"})}),m(b,{marginTop:1,marginLeft:2,children:m(Hn,{})}),I(b,{marginTop:2,flexDirection:"row",gap:1,children:[m(S,{color:"white",bold:!0,children:"What would you like to do?"}),m(S,{color:"grey",children:"[up/down, enter]"})]}),m(b,{children:r?I(b,{flexDirection:"row",gap:1,children:[m(ht,{type:"dots"}),m(S,{color:"blue",bold:!0,children:"Syncing with remote..."})]}):m(b,{flexDirection:"column",children:Gt.map((a,l)=>m(b,{flexDirection:"column",children:I(b,{flexDirection:"row",gap:1,children:[m(S,{color:n===l?"cyan":"grey",children:n===l?"\u25B6":" "}),m(S,{color:n===l?"cyan":"grey",bold:n===l,children:a.label})]})},a.value))})})]})}c(ma,"ResolveChangesUI");const ga={[z.UPDATE]:{incoming:{label:"Elements updated in remote",description:"(to be overwritten from remote)"},outgoing:{label:"Elements updated locally",description:"(to be pushed to remote)"}},[z.DELETE]:{incoming:{label:"Elements not existing in remote",description:"(to be deleted locally)"},outgoing:{label:"Elements deleted locally",description:"(to be deleted from remote)"}},[z.CREATE]:{incoming:{label:"Elements created in remote",description:"(to be created locally)"},outgoing:{label:"Elements created locally",description:"(to be created in remote)"}}};function Hn(){const{conflicts:s}=$e(),e=Yi(()=>{const t={};return s.forEach(n=>{const i=`${n.type}-${n.direction}`;t[i]||(t[i]=[]),t[i].push(n)}),t},[s]);return m(b,{flexDirection:"column",children:Object.entries(e).map(([t,n])=>{if(n.length===0)return null;const[i,r]=t.split("-"),o=ga[i][r];return I(b,{flexDirection:"column",children:[I(b,{flexDirection:"row",gap:1,children:[I(S,{color:"yellow",children:[o.label," (",n.length,")"]}),m(S,{color:"white",children:o.description})]}),n.map(a=>m(b,{marginLeft:2,children:I(S,{color:"grey",children:["\u2022 ",a.element.id," (",a.element.relativePath,")"]})},a.element.id))]},t)})})}c(Hn,"Conflicts");function ya(){const{config:s}=Ze(),{state:e,logs:t,currentWorkspace:n,pull:i}=$e(),r=n?.name,o=r?xi(r,30):s?.workspaceKey,a=Math.min(100,process.stdout.columns||100);return ye(()=>{i({allConnectors:!1,force:!1,watch:!0})},[]),I(b,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:a,children:[m(b,{marginTop:-1,marginBottom:1,children:I(b,{flexDirection:"row",gap:1,children:[m(S,{bold:!0,children:"\u{1F504} Workspace"}),I(S,{color:ba(e),children:[" [",wa(e),"] "]})]})}),I(b,{children:[m(b,{width:12,children:m(S,{color:"grey",children:"Local:"})}),m(S,{color:"grey",children:process.cwd()})]}),I(b,{children:[m(b,{width:12,children:m(S,{color:"grey",children:"Remote:"})}),s?.workspaceKey?I(S,{color:"grey",children:[o," [o: open in console] [w: change]"]}):I(S,{children:[m(S,{color:"yellow",children:"not selected"})," [w: select]"]})]}),e===P.CONFLICTS?m(ma,{}):I(Yt,{children:[m(b,{paddingTop:1,children:m(Wn,{})}),t.length>0&&m(pa,{})]})]})}c(ya,"Workspace");function wa(s){switch(s){case P.PULLING:return"pulling";case P.PUSHING:return"pushing";case P.CONFLICTS:return"conflicts";case P.SYNCED:return"synced";case P.ERROR:return"error";case P.WATCHING:return"tracking changes";case P.RESOLVING:return"resolving";case P.NOT_SYNCED:return"not synced"}}c(wa,"getStatusDisplay");function ba(s){switch(s){case P.PULLING:return"yellow";case P.PUSHING:return"yellow";case P.CONFLICTS:return"red";case P.SYNCED:return"green";case P.ERROR:return"red";case P.WATCHING:return"green";case P.RESOLVING:return"yellow";case P.NOT_SYNCED:return"grey"}}c(ba,"getStatusColor");const Sa=c(()=>{const{isSetupComplete:s}=gs(),{config:e}=Ze();return{isSetupComplete:s,workspaceKey:e?.workspaceKey,config:e}},"useStatus");function Ca({onExit:s}){const e=fs(),{isSetupComplete:t,workspaceKey:n,config:i}=Sa(),[r,o]=K(null),a=zi(!0),l=r??(t?"main":"setup");return xe(u=>{l==="main"&&(u==="w"&&o("workspace-selection"),u==="a"&&o("add-mcp-server"),u==="o"&&n&&i?.workspaceSecret&&(async()=>{try{const d=`https://console.integration.app/w/${await Cs(e)}`,f=process.platform==="darwin"?"open":process.platform==="win32"?"start":"xdg-open";Xi(`${f} "${d}"`)}catch(p){console.error("Failed to open workspace:",p),s()}})(),u==="s"&&o("setup"))}),ye(()=>(a.current=!0,()=>{a.current=!1}),[]),l==="workspace-selection"?m(ms,{onExit:c(()=>o(null),"onExit")}):l==="add-mcp-server"?m(Or,{onExit:c(()=>o(null),"onExit"),onComplete:c(()=>o(null),"onComplete")}):l==="setup"?m(ys,{onComplete:c(()=>o(null),"onComplete")},Date.now()):I(b,{flexDirection:"column",children:[m(b,{flexGrow:1,children:m(xr,{})}),m(Jn,{onExit:s,children:m(ya,{})}),m(b,{paddingLeft:2,children:m(S,{color:"grey",children:"[s: (re-)setup]"})})]})}c(Ca,"Main");const Di=Wi(process.argv.slice(2)),ka=Di.cwd?Bi(Di.cwd):process.cwd(),va=c(()=>process.exit(0),"onExit"),Ea=c(()=>m(mt,{cwd:ka,children:m(Ca,{onExit:va})}),"App");function Ta(){dt(m(Ea,{}))}c(Ta,"runAgent");function Ia(s){s.command("init").description("Run interactive setup for Membrane project").addHelpText("after",["","Examples:"," membrane init # Run interactive setup",""].join(`
|
|
141
|
-
`)).action(()=>{dt(De.createElement(mt,null,De.createElement(ys,{onComplete:c(()=>process.exit(0),"onComplete")})))})}c(Ia,"setupInitCommand");async function Pi(s,e){const t={iss:s,exp:Math.floor(Date.now()/1e3)+600,isAdmin:!0};return tn.sign(t,e)}c(Pi,"generateAdminAccessToken");async function Na(s,e){return(await nn.get(`${s}/docs-json`,{headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json"}})).data}c(Na,"fetchOpenApiSchema");function Mi(s,e=!0){if(!s)return e?
|
|
140
|
+
`,t)+1}return{type:e,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(e){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;const t=Wt(e),n=He(t);return n.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:n,explicitKey:!0}]}}case"map-value-ind":{this.onKeyLine=!0;const t=Wt(e),n=He(t);return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:n,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(e,t){return this.type!=="comment"||this.indent<=t?!1:e.every(n=>n.type==="newline"||n.type==="space")}*documentEnd(e){this.type!=="doc-mode"&&(e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop()))}*lineEnd(e){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*this.pop(),yield*this.step();break;case"newline":this.onKeyLine=!1;case"space":case"comment":default:e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop())}}}function Oi(s){const e=s.prettyErrors!==!1;return{lineCounter:s.lineCounter||e&&new Ti||null,prettyErrors:e}}c(Oi,"parseOptions");function oa(s,e={}){const{lineCounter:t,prettyErrors:n}=Oi(e),i=new Un(t?.addNewLine),r=new Kn(e),o=Array.from(r.compose(i.parse(s)));if(n&&t)for(const a of o)a.errors.forEach(Kt(s,t)),a.warnings.forEach(Kt(s,t));return o.length>0?o:Object.assign([],{empty:!0},r.streamInfo())}c(oa,"parseAllDocuments");function $i(s,e={}){const{lineCounter:t,prettyErrors:n}=Oi(e),i=new Un(t?.addNewLine),r=new Kn(e);let o=null;for(const a of r.compose(i.parse(s),!0,s.length))if(!o)o=a;else if(o.options.logLevel!=="silent"){o.errors.push(new Ae(a.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}return n&&t&&(o.errors.forEach(Kt(s,t)),o.warnings.forEach(Kt(s,t))),o}c($i,"parseDocument");function aa(s,e,t){let n;typeof e=="function"?n=e:t===void 0&&e&&typeof e=="object"&&(t=e);const i=$i(s,t);if(!i)return null;if(i.warnings.forEach(r=>Bs(i.options.logLevel,r)),i.errors.length>0){if(i.options.logLevel!=="silent")throw i.errors[0];i.errors=[]}return i.toJS(Object.assign({reviver:n},t))}c(aa,"parse");function ca(s,e,t){let n=null;if(typeof e=="function"||Array.isArray(e)?n=e:t===void 0&&e&&(t=e),typeof t=="string"&&(t=t.length),typeof t=="number"){const i=Math.round(t);t=i<1?void 0:i>8?{indent:8}:{indent:i}}if(s===void 0){const{keepUndefined:i}=t??e??{};if(!i)return}return Ee(s)&&!n?s.toString(t):new Qe(s,n,t).toString(t)}c(ca,"stringify");var la=Object.freeze({__proto__:null,Alias:Ct,CST:sa,Composer:Kn,Document:Qe,Lexer:Ei,LineCounter:Ti,Pair:Y,Parser:Un,Scalar:L,Schema:Ht,YAMLError:xn,YAMLMap:ee,YAMLParseError:Ae,YAMLSeq:Ce,YAMLWarning:ui,isAlias:Se,isCollection:q,isDocument:Ee,isMap:je,isNode:J,isPair:_,isScalar:K,isSeq:Ke,parse:aa,parseAllDocuments:oa,parseDocument:$i,stringify:ca,visit:Te,visitAsync:St});const Z={Added:"added",Changed:"changed",Deleted:"deleted",Stopped:"stopped"},ua={ignored:zr,persistent:!0,ignoreInitial:!0,followSymlinks:!1,depth:10,awaitWriteFinish:{stabilityThreshold:500,pollInterval:100},ignorePermissionErrors:!0,atomic:!0,usePolling:!1,alwaysStat:!1,interval:1e3,binaryInterval:300};class fa extends ws{static{c(this,"FileWatcher")}constructor(e){super(),this.options=e,this.membraneDir=bt(this.options.cwd)}isWatching=!1;watcher;membraneDir;contentCache={};async start(){this.isWatching||(x.existsSync(this.membraneDir)||x.mkdirSync(this.membraneDir,{recursive:!0}),this.initializeContentCache(),this.watcher=dr.watch(this.membraneDir,ua),this.watcher.on("add",e=>this.handleFileSystemEvent(Z.Added,e)).on("change",e=>this.handleFileSystemEvent(Z.Changed,e)).on("unlink",e=>this.handleFileSystemEvent(Z.Deleted,e)).on("ready",()=>this.isWatching=!0))}async stop(){!this.isWatching||!this.watcher||(await this.watcher.close(),this.isWatching=!1,this.watcher=void 0,this.clearCache(),this.emit(Z.Stopped))}getCwd(){return this.options.cwd}handleFileSystemEvent(e,t){const n=D.relative(this.membraneDir,t);if(e===Z.Deleted){this.removeFromCache(n);const a={filePath:t,relativePath:n,data:void 0};O.info(`[local] ${e}: ${a.relativePath}`),this.emit(e,a);return}const i=this.readFileContent(t);if(!this.hasContentChanged(n,i,e))return;const o=this.processFileEvent(t,i);this.updateCache(n,i),o&&(O.info(`[local] ${e}: ${o.relativePath}`),this.emit(e,o))}readFileContent(e){return x.readFileSync(e,"utf8")}processFileEvent(e,t){const n=D.relative(this.membraneDir,e);let i;try{i=t?la.parse(t):void 0}catch{i=void 0}return{filePath:e,relativePath:n,data:i}}hasContentChanged(e,t,n){if(n==="added")return!0;if(!t)return this.contentCache[e]!==void 0;const i=this.getContentHash(t);return this.contentCache[e]!==i}getContentHash(e){return Zi.createHash("sha256").update(e).digest("hex")}updateCache(e,t){if(!t){delete this.contentCache[e];return}this.contentCache[e]=this.getContentHash(t)}removeFromCache(e){delete this.contentCache[e]}clearCache(){Object.keys(this.contentCache).forEach(e=>{delete this.contentCache[e]})}initializeContentCache(){x.existsSync(this.membraneDir)&&this.scanDirectoryForCache(this.membraneDir)}scanDirectoryForCache(e){const t=x.readdirSync(e,{withFileTypes:!0});for(const n of t){const i=D.join(e,n.name);if(n.isDirectory())this.scanDirectoryForCache(i);else if(n.isFile())try{const r=x.readFileSync(i,"utf8"),o=D.relative(this.membraneDir,i);this.updateCache(o,r)}catch{}}}}const z={UPDATE:"update",DELETE:"delete",CREATE:"create"},fe={INCOMING:"incoming",OUTGOING:"outgoing"};class ft{static{c(this,"ElementSyncService")}constructor(e,t){this.localManager=e,this.remoteManager=t,this.notifier=re}fileWatcher=void 0;notifier;changes=[];hasConflicts(){return this.changes.some(e=>e.isConflict)}hasChanges(){return this.changes.length>0}async startWatching(){this.fileWatcher=new fa({cwd:process.cwd()}),this.fileWatcher.on(Z.Added,e=>this.handleLocalEvent(e,Z.Added)),this.fileWatcher.on(Z.Changed,e=>this.handleLocalEvent(e,Z.Changed)),this.fileWatcher.on(Z.Deleted,e=>this.handleLocalEvent(e,Z.Deleted)),await this.fileWatcher.start(),O.success("[local] Tracking changes..")}async stopWatching(){await this.fileWatcher?.stop(),this.fileWatcher=void 0}async handleLocalEvent(e,t){let n=V.fromPathAndData(e.filePath,e.data);if(!n){const r=V.idFromPath(e.filePath);if(!r||(n=this.remoteManager.cache.get(r),!n))return}const i=this.getManager(fe.OUTGOING);switch(O.info(`[resolver][${this.getDirectionLabel(fe.OUTGOING)}] ${t}: ${n.id}`),t){case Z.Added:case Z.Changed:await i.putElement(n);break;case Z.Deleted:await i.deleteElement(n);break}}detectIncomingChanges(){this.clearChanges();const e=ft.getChanges(fe.INCOMING,this.remoteManager.cache,this.localManager.cache);return this.updateChanges(e),e}detectOutgoingChanges(){this.clearChanges();const e=ft.getChanges(fe.OUTGOING,this.localManager.cache,this.remoteManager.cache);return this.updateChanges(e),e}getChange(e){const t=this.localManager.cache.get(e.id),n=this.remoteManager.cache.get(e.id);return!t&&n?{type:z.CREATE,element:n,direction:fe.INCOMING,isConflict:!1}:t&&!n?{type:z.DELETE,element:t,direction:fe.OUTGOING,isConflict:!0}:t&&n&&!t.isEqual(n)?{type:z.UPDATE,element:t,direction:fe.OUTGOING,isConflict:!0}:null}async resolveChanges(){this.hasChanges()&&(O.info("[resolver] Resolving changes.."),await Promise.all(this.changes.map(e=>this.resolveChange(e))),O.success(`[resolver] Resolved ${this.changes.length} changes`))}async resolveChange(e){const t=this.getManager(e.direction);switch(e.type){case z.DELETE:return O.info(`[resolver][${this.getDirectionLabel(e.direction)}] Deleting ${e.element.id}`),t.deleteElement(e.element);case z.CREATE:return O.info(`[resolver][${this.getDirectionLabel(e.direction)}] Creating ${e.element.id}`),t.putElement(e.element);case z.UPDATE:return O.info(`[resolver][${this.getDirectionLabel(e.direction)}] Updating ${e.element.id}`),t.putElement(e.element)}}getManager(e){return e===fe.INCOMING?this.localManager:this.remoteManager}static getChanges(e,t,n){const i=t.getAllIds(),r=n.getAllIds(),o=new Set([...i,...r]),a=[];for(const l of o){const u=t.get(l),p=n.get(l),h=ft.detectChangeForElement(u,p,e);h&&a.push(h)}return a}updateChanges(e){this.changes=e;for(const t of e)O.info(`[resolver][${this.getDirectionLabel(t.direction)}] ${this.getTypeLabel(t.type)} ${t.element.id}`);if(this.hasConflicts()){const t=e.filter(n=>n.isConflict);O.warning("[resolver] Conflicts detected"),this.notifier.setConflicts(t)}}clearChanges(){this.changes=[]}getDirectionLabel(e){switch(e){case fe.INCOMING:return"local\u2190remote";case fe.OUTGOING:return"local\u2192remote"}}getTypeLabel(e){switch(e){case z.CREATE:return"ADD";case z.UPDATE:return"UPD";case z.DELETE:return"DEL"}}static detectChangeForElement(e,t,n){return e&&!t?{type:z.CREATE,element:e,direction:n,isConflict:!1}:!e&&t?{type:z.DELETE,element:t,direction:n,isConflict:!0}:e&&t&&!e.isEqual(t)?{type:z.UPDATE,element:e,direction:n,isConflict:!0}:null}}class da{static{c(this,"WorkspaceService")}notifier;local;remote;syncService;constructor(){this.notifier=re,this.local=new Ss(new Xr),this.remote=new Ss(new Zr),this.syncService=new ft(this.local,this.remote)}async push(e={}){this.notifier.setState(P.PUSHING);try{await this.refreshElements()}catch(n){return O.error(`Failed to refresh elements: ${n instanceof Error?n.message:"Unknown error"}`),e?.onComplete?.()}if(this.syncService.detectOutgoingChanges(),this.syncService.hasConflicts()&&!e.force)return this.notifier.setState(P.CONFLICTS);const t=await Ur();this.remote.setConnectorsMapping(t),await this.syncLocalAndRemoteWorkspaces({watch:e.watch})}async pull(e={}){this.notifier.setState(P.PULLING);try{await this.refreshElements()}catch(t){return O.error(`Failed to refresh elements: ${t instanceof Error?t.message:"Unknown error"}`),e?.onComplete?.()}if(this.syncService.detectIncomingChanges(),this.syncService.hasConflicts()&&!e.force)return this.notifier.setState(P.CONFLICTS);await Br({integrations:this.remote.cache.getElementsByType(j.Integration).map(t=>t.data),allConnectors:e.allConnectors}),await this.syncLocalAndRemoteWorkspaces({watch:e.watch})}async syncLocalAndRemoteWorkspaces(e={}){this.notifier.setState(P.RESOLVING),this.syncService.hasChanges()&&await this.syncService.resolveChanges(),this.updateStats(),this.notifier.setState(P.SYNCED),e.watch&&(this.notifier.setState(P.WATCHING),await this.syncService.startWatching()),e.onComplete?.()}async refreshElements(){return Promise.all([this.remote.refresh(),this.local.refresh()])}updateStats(){const e={};for(const t of this.local.cache.getAll())e[t.type]=(e[t.type]||0)+1;this.notifier.setStats(e)}}const qn=new da,Li=zt(null);function Jn({children:s,onExit:e}){const{config:t,isLoading:n}=Ze(),{data:i}=ns("/account"),[r,o]=F(P.NOT_SYNCED),[a,l]=F([]),[u,p]=F({}),[h,f]=F([]),w=i?.workspaces?.find(T=>T.key===t?.workspaceKey)||null,d=t?.workspaceKey&&t?.workspaceSecret;function y(T){if(d)try{qn.syncLocalAndRemoteWorkspaces(T||{})}catch(N){console.error("Failed to resolve conflicts:",N),A()}}c(y,"resolveConflicts");function C(T){if(d)try{qn.pull(T||{})}catch(N){console.error("Failed to pull:",N),A()}}c(C,"pull");function v(T){if(d)try{qn.push(T||{})}catch(N){console.error("Failed to push:",N),A()}}c(v,"push");function A(){d&&e()}return c(A,"exit"),ye(()=>{const T=c(({state:E})=>o(E),"handleStateChanged"),N=c(({stats:E})=>p(E),"handleStatsChanged"),$=c(({log:E})=>f(W=>[...W,E]),"handleLogAdded"),M=c(({conflicts:E})=>l(E),"handleConflictsUpdated");return re.on(te.StateChanged,T),re.on(te.StatsChanged,N),re.on(te.LogAdded,$),re.on(te.ConflictsChanged,M),()=>{re.off(te.StateChanged,T),re.off(te.StatsChanged,N),re.off(te.LogAdded,$),re.off(te.ConflictsChanged,M)}},[]),n?null:d?m(Li.Provider,{value:{state:r,stats:u,logs:h,currentWorkspace:w,conflicts:a,resolveConflicts:y,pull:C,push:v,exit:A},children:s}):m(b,{children:m(S,{children:"No workspace selected. Please run `membrane init` to select a workspace."})})}c(Jn,"WorkspaceServiceProvider");function $e(){const s=Qt(Li);if(!s)throw new Error("useWorkspaceService must be used within WorkspaceServiceProvider");return s}c($e,"useWorkspaceService");function Wn(){const{stats:s}=$e(),e=Object.entries(s).filter(([t,n])=>n>0);return e.length===0?null:I(b,{flexDirection:"column",children:[m(b,{children:m(b,{width:12,children:m(S,{color:"grey",children:"Elements:"})})}),m(b,{flexDirection:"column",marginLeft:1,children:e.map(([t,n])=>I(b,{children:[m(b,{width:20,children:I(S,{children:[t,":"]})}),m(S,{color:"green",children:n})]},t))})]})}c(Wn,"ElementStats");const Gn=c(s=>{switch(s){case"error":return"red";case"success":return"green";case"warning":return"yellow";default:return}},"getLogColor");function xi(s,e){return e<3?s.slice(0,Math.max(0,e)):s.length<=e?s:`${s.slice(0,e-3)}...`}c(xi,"truncateText");const Vn=5,ha=6;function pa(){const{logs:s}=$e(),[e,t]=F(0),n=Math.min(100,process.stdout.columns||100),i=Vn,r=Math.max(0,s.length-i-e),o=s.length-e,a=s.slice(r,o),l=n-ha,u=e<s.length-i,p=e>0;return xe((h,f)=>{if(s.length!==0)if(f.upArrow){const g=Math.max(0,s.length-i);t(w=>Math.min(g,w+1))}else f.downArrow?t(g=>Math.max(0,g-1)):(h==="G"||h==="g")&&t(0)}),I(b,{flexDirection:"column",paddingTop:1,children:[I(S,{color:"grey",children:["Recent Activity (",r+1,"-",o," of ",s.length,"):",s.length>Vn&&m(S,{color:"grey",children:" [arrows: scroll] [g: end]"})]}),a.map((h,f)=>m(b,{marginLeft:1,children:m(S,{color:Gn(h.type),children:xi(h.message,l)})},h.timestamp+f)),s.length>Vn&&I(b,{marginLeft:1,flexDirection:"row",children:[u&&m(S,{color:"grey",children:"\u2191 "}),p&&m(S,{color:"grey",children:"\u2193 "})]})]})}c(pa,"Logs");const Gt=[{value:"sync",label:"Continue (overwrite/delete)",key:""},{value:"exit",label:"Cancel",key:""}];function ma(){const{state:s,resolveConflicts:e,exit:t}=$e(),[n,i]=F(0),[r,o]=F(!1);return xe((a,l)=>{r||(l.upArrow?i(u=>u>0?u-1:Gt.length-1):l.downArrow?i(u=>u<Gt.length-1?u+1:0):a.toLowerCase()==="y"?i(0):a.toLowerCase()==="n"?i(1):(l.return||a===" ")&&(o(!0),Gt[n].value==="sync"?e({watch:!0}):t()))}),ye(()=>{s!==P.CONFLICTS&&r&&o(!1)},[s,r]),I(b,{flexDirection:"column",paddingTop:1,children:[m(b,{children:m(b,{flexDirection:"row",gap:2,children:m(S,{bold:!0,color:"white",children:"Conflicts with remote"})})}),m(b,{children:m(S,{color:"grey",children:"The remote workspace has changes that aren't in your local workspace:"})}),m(b,{marginTop:1,marginLeft:2,children:m(Hn,{})}),I(b,{marginTop:2,flexDirection:"row",gap:1,children:[m(S,{color:"white",bold:!0,children:"What would you like to do?"}),m(S,{color:"grey",children:"[up/down, enter]"})]}),m(b,{children:r?I(b,{flexDirection:"row",gap:1,children:[m(ht,{type:"dots"}),m(S,{color:"blue",bold:!0,children:"Syncing with remote..."})]}):m(b,{flexDirection:"column",children:Gt.map((a,l)=>m(b,{flexDirection:"column",children:I(b,{flexDirection:"row",gap:1,children:[m(S,{color:n===l?"cyan":"grey",children:n===l?"\u25B6":" "}),m(S,{color:n===l?"cyan":"grey",bold:n===l,children:a.label})]})},a.value))})})]})}c(ma,"ResolveChangesUI");const ga={[z.UPDATE]:{incoming:{label:"Elements updated in remote",description:"(to be overwritten from remote)"},outgoing:{label:"Elements updated locally",description:"(to be pushed to remote)"}},[z.DELETE]:{incoming:{label:"Elements not existing in remote",description:"(to be deleted locally)"},outgoing:{label:"Elements deleted locally",description:"(to be deleted from remote)"}},[z.CREATE]:{incoming:{label:"Elements created in remote",description:"(to be created locally)"},outgoing:{label:"Elements created locally",description:"(to be created in remote)"}}};function Hn(){const{conflicts:s}=$e(),e=Yi(()=>{const t={};return s.forEach(n=>{const i=`${n.type}-${n.direction}`;t[i]||(t[i]=[]),t[i].push(n)}),t},[s]);return m(b,{flexDirection:"column",children:Object.entries(e).map(([t,n])=>{if(n.length===0)return null;const[i,r]=t.split("-"),o=ga[i][r];return I(b,{flexDirection:"column",children:[I(b,{flexDirection:"row",gap:1,children:[I(S,{color:"yellow",children:[o.label," (",n.length,")"]}),m(S,{color:"white",children:o.description})]}),n.map(a=>m(b,{marginLeft:2,children:I(S,{color:"grey",children:["\u2022 ",a.element.id," (",a.element.relativePath,")"]})},a.element.id))]},t)})})}c(Hn,"Conflicts");function ya(){const{config:s}=Ze(),{state:e,logs:t,currentWorkspace:n,pull:i}=$e(),r=n?.name,o=r?xi(r,30):s?.workspaceKey,a=Math.min(100,process.stdout.columns||100);return ye(()=>{i({allConnectors:!1,force:!1,watch:!0})},[]),I(b,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:a,children:[m(b,{marginTop:-1,marginBottom:1,children:I(b,{flexDirection:"row",gap:1,children:[m(S,{bold:!0,children:"\u{1F504} Workspace"}),I(S,{color:ba(e),children:[" [",wa(e),"] "]})]})}),I(b,{children:[m(b,{width:12,children:m(S,{color:"grey",children:"Local:"})}),m(S,{color:"grey",children:process.cwd()})]}),I(b,{children:[m(b,{width:12,children:m(S,{color:"grey",children:"Remote:"})}),s?.workspaceKey?I(S,{color:"grey",children:[o," [o: open in console] [w: change]"]}):I(S,{children:[m(S,{color:"yellow",children:"not selected"})," [w: select]"]})]}),e===P.CONFLICTS?m(ma,{}):I(Yt,{children:[m(b,{paddingTop:1,children:m(Wn,{})}),t.length>0&&m(pa,{})]})]})}c(ya,"Workspace");function wa(s){switch(s){case P.PULLING:return"pulling";case P.PUSHING:return"pushing";case P.CONFLICTS:return"conflicts";case P.SYNCED:return"synced";case P.ERROR:return"error";case P.WATCHING:return"tracking changes";case P.RESOLVING:return"resolving";case P.NOT_SYNCED:return"not synced"}}c(wa,"getStatusDisplay");function ba(s){switch(s){case P.PULLING:return"yellow";case P.PUSHING:return"yellow";case P.CONFLICTS:return"red";case P.SYNCED:return"green";case P.ERROR:return"red";case P.WATCHING:return"green";case P.RESOLVING:return"yellow";case P.NOT_SYNCED:return"grey"}}c(ba,"getStatusColor");const Sa=c(()=>{const{isSetupComplete:s}=gs(),{config:e}=Ze();return{isSetupComplete:s,workspaceKey:e?.workspaceKey,config:e}},"useStatus");function Ca({onExit:s}){const e=fs(),{isSetupComplete:t,workspaceKey:n,config:i}=Sa(),[r,o]=F(null),a=zi(!0),l=r??(t?"main":"setup");return xe(u=>{l==="main"&&(u==="w"&&o("workspace-selection"),u==="a"&&o("add-mcp-server"),u==="o"&&n&&i?.workspaceSecret&&(async()=>{try{const h=`https://console.integration.app/w/${await Cs(e)}`,f=process.platform==="darwin"?"open":process.platform==="win32"?"start":"xdg-open";Xi(`${f} "${h}"`)}catch(p){console.error("Failed to open workspace:",p),s()}})(),u==="s"&&o("setup"))}),ye(()=>(a.current=!0,()=>{a.current=!1}),[]),l==="workspace-selection"?m(ms,{onExit:c(()=>o(null),"onExit")}):l==="add-mcp-server"?m(Or,{onExit:c(()=>o(null),"onExit"),onComplete:c(()=>o(null),"onComplete")}):l==="setup"?m(ys,{onComplete:c(()=>o(null),"onComplete")},Date.now()):I(b,{flexDirection:"column",children:[m(b,{flexGrow:1,children:m(xr,{})}),m(Jn,{onExit:s,children:m(ya,{})}),m(b,{paddingLeft:2,children:m(S,{color:"grey",children:"[s: (re-)setup]"})})]})}c(Ca,"Main");const Di=Wi(process.argv.slice(2)),ka=Di.cwd?Bi(Di.cwd):process.cwd(),va=c(()=>process.exit(0),"onExit"),Ea=c(()=>m(mt,{cwd:ka,children:m(Ca,{onExit:va})}),"App");function Ta(){dt(m(Ea,{}))}c(Ta,"runAgent");function Ia(s){s.command("init").description("Run interactive setup for Membrane project").addHelpText("after",["","Examples:"," membrane init # Run interactive setup",""].join(`
|
|
141
|
+
`)).action(()=>{dt(De.createElement(mt,null,De.createElement(ys,{onComplete:c(()=>process.exit(0),"onComplete")})))})}c(Ia,"setupInitCommand");async function Pi(s,e){const t={iss:s,exp:Math.floor(Date.now()/1e3)+600,isAdmin:!0};return tn.sign(t,e)}c(Pi,"generateAdminAccessToken");async function Na(s,e){return(await nn.get(`${s}/docs-json`,{headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json"}})).data}c(Na,"fetchOpenApiSchema");function Mi(s,e=!0){if(!s)return e?U.string():U.string().optional();let t;switch(s.type){case"integer":t=U.coerce.number().int();break;case"number":t=U.coerce.number();break;case"boolean":t=U.coerce.boolean();break;case"string":default:t=U.string();break}return s.format==="uuid"?t=U.string().uuid():s.format==="email"?t=U.string().email():s.format==="date"?t=U.string().regex(/^\d{4}-\d{2}-\d{2}$/):s.format==="date-time"&&(t=U.string().datetime()),s.enum&&(t=U.enum(s.enum)),(s.type==="integer"||s.type==="number")&&(s.minimum!==void 0&&(t=t.min(s.minimum)),s.maximum!==void 0&&(t=t.max(s.maximum))),s.type==="string"&&(s.minLength!==void 0&&(t=t.min(s.minLength)),s.maxLength!==void 0&&(t=t.max(s.maxLength))),e?t:t.optional()}c(Mi,"convertOpenApiSchemaToZod");function Ri(s){const e=s.match(/\{([^}]+)\}/g);return e?e.map(t=>t.slice(1,-1)):[]}c(Ri,"extractPathParameters");function Aa(s,e,t,n,i,r){const o=s.operationId||`${t}_${e.replace(/[^a-zA-Z0-9]/g,"_")}`,a=s.description||s.summary||`${t.toUpperCase()} ${e}`,l={},u={},p={};if(s.parameters){for(const f of s.parameters)if(f.in==="path")u[f.name]=Mi(f.schema,!0).describe(f.description||`Path parameter: ${f.name}`);else if(f.in==="query"){const g=f.required===!0;p[f.name]=Mi(f.schema,g).describe(f.description||`Query parameter: ${f.name}`)}}Object.keys(u).length>0&&(l.params=U.object(u).describe("Path parameters")),Object.keys(p).length>0&&(l.query=U.object(p).describe("Query parameters")),s.requestBody&&s.requestBody.content&&s.requestBody.content["application/json"]&&(l.body=U.any().describe("Request body"));const h=Object.keys(l).length>0?U.object(l):U.object({});return{name:o,description:a,parameters:h,async execute(f){try{const g=Ri(e);if(g.length>0){if(!f.params)throw new Error(`Missing required path parameters: ${g.join(", ")}`);const T=g.filter(N=>!(N in f.params));if(T.length>0)throw new Error(`Missing required path parameters: ${T.join(", ")}`)}let w=`${n}${e}`;if(f.params)for(const[T,N]of Object.entries(f.params)){const $=`{${T}}`;w.includes($)&&(w=w.replace($,String(N)))}const d=Ri(w);if(d.length>0)throw new Error(`Unresolved path parameters: ${d.join(", ")}`);const y=new URLSearchParams;if(f.query)for(const[T,N]of Object.entries(f.query))N!=null&&y.append(T,String(N));y.toString()&&(w+=`?${y.toString()}`);const C=await Pi(i,r),v={method:t.toUpperCase(),headers:{Authorization:`Bearer ${C}`,"Content-Type":"application/json"}};f.body&&t.toLowerCase()!=="get"&&(v.data=f.body);const A=await nn.request({url:w,...v});return{content:[{type:"text",text:JSON.stringify(A.data,null,2)}]}}catch(g){return nn.isAxiosError(g)?{content:[{type:"text",text:`Error: ${g.response?.data?`HTTP ${g.response.status}: ${g.response.statusText} - ${JSON.stringify(g.response.data)}`:`HTTP ${g.response?.status||"unknown"}: ${g.message}`}`}],isError:!0}:g instanceof Error?{content:[{type:"text",text:`Error: API call failed: ${g.message}`}],isError:!0}:{content:[{type:"text",text:"Error: API call failed with unknown error"}],isError:!0}}}}}c(Aa,"createApiTool");function Oa(s,e,t,n){const i=[];if(!s.paths)return i;for(const[r,o]of Object.entries(s.paths))if(typeof o=="object"&&o!==null){for(const[a,l]of Object.entries(o))if(["get","post","put","delete","patch"].includes(a)&&l&&typeof l=="object"){const u=Aa(l,r,a,e,t,n);i.push(u)}}return i}c(Oa,"convertOpenApiToTools");function $a(s){s.command("mcp").description("Launch MCP server with OpenAPI endpoints as tools (API URI is read from membrane.config.yml)").addHelpText("after",["","Examples:"," membrane mcp # Launch MCP server using API URI from membrane.config.yml",""].join(`
|
|
142
142
|
`)).action(async()=>{try{process.env.FASTMCP_SUPPRESS_WARNINGS="true";const e=Pe();e||(console.error("No membrane.config.yml found. Please run `membrane init` first."),process.exit(1)),(!e.workspaceKey||!e.workspaceSecret)&&(console.error("Missing workspace credentials"),process.exit(1));const t=e.apiUri||rn,n=await Pi(e.workspaceKey,e.workspaceSecret),i=await Na(t,n),r=Oa(i,t,e.workspaceKey,e.workspaceSecret),o=new mr({name:"Membrane API",instructions:`This MCP server lets you interact with Membrane to configure, run, and troubleshoot integrations.
|
|
143
143
|
Use it for anything related to Membrane or integrations.
|
|
144
|
-
`,version:"1.0.0"});for(const u of r){const p=u.execute;u.execute=async
|
|
144
|
+
`,version:"1.0.0"});for(const u of r){const p=u.execute;u.execute=async h=>($r(process.pid,process.cwd()),p(h)),o.addTool(u)}un({isRunning:!0,startTime:new Date().toISOString(),toolsCount:r.length,lastActivity:new Date().toISOString(),processId:process.pid,cwd:process.cwd(),agentName:process.env.AGENT_NAME||"Unnamed Agent"});const a=setInterval(()=>{un({processId:process.pid,cwd:process.cwd(),lastActivity:new Date().toISOString()})},5e3),l=c(async()=>{clearInterval(a),et(process.pid,process.cwd());try{await o.stop()}catch{}},"cleanup");await o.start({transportType:"stdio"}),process.on("SIGINT",async()=>{await l(),process.exit(0)}),process.on("SIGTERM",async()=>{await l(),process.exit(0)}),process.on("exit",()=>{et(process.pid,process.cwd())}),process.on("uncaughtException",async u=>{console.error("Uncaught exception:",u.message),await l(),process.exit(1)}),process.on("unhandledRejection",async u=>{console.error("Unhandled rejection:",u),await l(),process.exit(1)})}catch(e){e instanceof Error&&(console.error(e.message),process.exit(1)),console.error("An unknown error occurred"),process.exit(1)}})}c($a,"setupMcpCommand");const La={info:"\u{1F4DD}",success:"\u2728",warning:"\u26A0\uFE0F",error:"\u274C",debug:"\u{1F50D}"},xa={info:k.blue,success:k.green,warning:k.yellow,error:k.red,debug:k.gray};class G{static{c(this,"Logger")}static formatMessage(e,t,n={}){const i=n.timestamp?`${k.gray(new Date().toISOString())} `:"",r=n.prefix?`${k.gray(n.prefix)} `:"",o=n.suffix?` ${k.gray(n.suffix)}`:"",a=La[t],l=xa[t];return`${i}${a} ${r}${l(e)}${o}`}static info(e,t){let n=k.blue;if(t?.color&&(n=k[t.color.toLowerCase()]||k.blue),t?.timestamp){const i=new Date().toLocaleTimeString();console.debug(`${k.gray(`[${i}]`)} ${n(e)}`)}else console.debug(n(e))}static group(e,t){}static groupEnd(){}static newLine(){}static success(e,t){console.debug(this.formatMessage(e,"success",t))}static warning(e,t){console.debug(this.formatMessage(e,"warning",t))}static error(e,t){console.error(this.formatMessage(e,"error",t))}static debug(e,t){t?.prefix?console.debug(k.gray(`[${t.prefix}] ${e}`),t.error?`
|
|
145
145
|
${k.red(t.error)}`:""):console.debug(k.gray(e),t?.error?`
|
|
146
146
|
${k.red(t.error)}`:"")}static step(e,t){}static header(e){console.debug(),console.debug(k.bold.cyan(`\u25B6 ${e}`)),console.debug()}static table(e,t){if(e.length===0)return;const n=t||Object.keys(e[0]),i=e.map(r=>{const o={};return n.forEach(a=>{o[a]=r[a]}),o});console.table(i,n)}static divider(){}}function Da(s){s.command("open").description("Open the workspace in the browser").addHelpText("after",["","Examples:"," membrane open # Open workspace in browser",""].join(`
|
|
147
|
-
`)).action(async()=>{try{G.header("Opening Workspace in Browser"),G.info("Loading configuration...");const e=Pe();if(!e)throw new Error("No membrane.config.yml found. Please run `membrane init` first.");if(!e.workspaceKey||!e.workspaceSecret)throw new Error("Missing workspace credentials");G.info("Retrieving workspace ID...");const n=`https://console.integration.app/w/${await Cs(process.cwd())}`;G.info(`Opening ${n}...`);const{default:i}=await import("open");await i(n),G.success("Browser opened successfully")}catch(e){e instanceof Error&&(G.error(e.message),process.exit(1)),G.error("An unknown error occurred"),process.exit(1)}})}c(Da,"setupOpenCommand");function Pa(s){return m(Jn,{onExit:s.onExit,children:m(Ma,{...s})})}c(Pa,"PullWrapper");function Ma(s){const{logs:e,state:t,conflicts:n,pull:i}=$e();ye(()=>{i(s)},[]);const r=t===P.CONFLICTS;return I(b,{flexDirection:"column",children:[e.slice().map((o,a)=>m(S,{color:Gn(o.type),children:o.message},o.timestamp+a)),r&&I(Yt,{children:[I(S,{color:"yellow",bold:!0,children:["Found ",n.length," conflicts with remote:"]}),m(Hn,{}),m(S,{color:"red",children:"Out of sync with remote, use --force to overwrite conflict changes"})]}),t===P.SYNCED&&m(Wn,{})]})}c(Ma,"Pull");function
|
|
148
|
-
`)).action(e=>{const t=c(()=>process.exit(0),"onExit"),n=e.watch?
|
|
149
|
-
`)).action(e=>{const t=c(()=>process.exit(0),"onExit"),n=e.watch?
|
|
147
|
+
`)).action(async()=>{try{G.header("Opening Workspace in Browser"),G.info("Loading configuration...");const e=Pe();if(!e)throw new Error("No membrane.config.yml found. Please run `membrane init` first.");if(!e.workspaceKey||!e.workspaceSecret)throw new Error("Missing workspace credentials");G.info("Retrieving workspace ID...");const n=`https://console.integration.app/w/${await Cs(process.cwd())}`;G.info(`Opening ${n}...`);const{default:i}=await import("open");await i(n),G.success("Browser opened successfully")}catch(e){e instanceof Error&&(G.error(e.message),process.exit(1)),G.error("An unknown error occurred"),process.exit(1)}})}c(Da,"setupOpenCommand");function Pa(s){return m(Jn,{onExit:s.onExit,children:m(Ma,{...s})})}c(Pa,"PullWrapper");function Ma(s){const{logs:e,state:t,conflicts:n,pull:i}=$e();ye(()=>{i(s)},[]);const r=t===P.CONFLICTS;return I(b,{flexDirection:"column",children:[e.slice().map((o,a)=>m(S,{color:Gn(o.type),children:o.message},o.timestamp+a)),r&&I(Yt,{children:[I(S,{color:"yellow",bold:!0,children:["Found ",n.length," conflicts with remote:"]}),m(Hn,{}),m(S,{color:"red",children:"Out of sync with remote, use --force to overwrite conflict changes"})]}),t===P.SYNCED&&m(Wn,{})]})}c(Ma,"Pull");function ji(){const s=setInterval(()=>{},3e4),e=c(()=>{clearInterval(s)},"cleanup");return process.on("SIGINT",()=>{e(),process.exit(0)}),process.on("SIGTERM",()=>{e(),process.exit(0)}),process.on("exit",e),()=>{}}c(ji,"getWatchModeCallback");function Ra(s){s.command("pull").description("Pull workspace data from specified workspace").option("--force","Overwrite conflicts with remote data",!1).option("--watch","Watch for changes and pull automatically",!1).option("--all-connectors","Include public connectors in export - to push to the self-hosted instance",!1).addHelpText("after",["","Examples:"," membrane pull # Pull from default workspace"," membrane pull --force # Overwrite conflicts with remote data"," membrane pull --all-connectors # Pull all connectors"," membrane pull --watch # Watch for changes and pull automatically",""].join(`
|
|
148
|
+
`)).action(e=>{const t=c(()=>process.exit(0),"onExit"),n=e.watch?ji():t;dt(De.createElement(mt,null,De.createElement(Pa,{force:e.force,watch:e.watch,allConnectors:e.allConnectors,onComplete:n,onExit:t})))})}c(Ra,"setupPullCommand");function ja(s){return m(Jn,{onExit:s.onExit,children:m(Ka,{...s})})}c(ja,"PushWrapper");function Ka(s){const{logs:e,state:t,conflicts:n,push:i}=$e();ye(()=>{i(s)},[]);const r=t===P.CONFLICTS;return I(b,{flexDirection:"column",children:[e.slice().map((o,a)=>m(S,{color:Gn(o.type),children:o.message},o.timestamp+a)),r&&I(Yt,{children:[I(S,{color:"yellow",bold:!0,children:["Found ",n.length," conflicts with remote:"]}),m(Hn,{}),m(S,{color:"red",children:"Out of sync with remote, use --force to overwrite conflict changes"})]}),t===P.SYNCED&&m(Wn,{})]})}c(Ka,"Push");function Fa(s){s.command("push").description("Push workspace data to specified workspace").option("--force","Overwrite conflicts with local data",!1).option("--watch","Watch for changes and push automatically",!1).addHelpText("after",["","Examples:"," membrane push # Push to default workspace"," membrane push --force # Overwrite conflicts with local data",""].join(`
|
|
149
|
+
`)).action(e=>{const t=c(()=>process.exit(0),"onExit"),n=e.watch?ji():t;dt(De.createElement(mt,null,De.createElement(ja,{force:e.force,watch:e.watch,onComplete:n,onExit:t})))})}c(Fa,"setupPushCommand");class _a{static{c(this,"BaseRunner")}constructor(e){if(this.options=e,this.fsPaths=on(),e&&typeof e=="object"){const t=e;"client"in t&&t.client&&(this.client=t.client),"workspace"in t&&(this.workspace=t.workspace)}}client;workspace;fsPaths}const Ba="claude-sonnet-4-20250514";class Zn{static{c(this,"TestEnvironment")}client;connectionId;testsDir;testBasePath;options;llm;state={};constructor({connectionId:e,testsDir:t,testBasePath:n,client:i,options:r,llm:o}){this.client=i,this.connectionId=e,this.testsDir=t,this.testBasePath=n,this.llm=o,this.options=r}static async create({connectionId:e,testBasePath:t,options:n}){const i=Pe();if(!i)throw new Error("No membrane.config.yml found. Please run `membrane init` first.");if(!i.workspaceKey||!i.workspaceSecret)throw new Error("Missing workspace credentials");if(!i.anthropicApiKey)throw new Error("Anthropic API key not configured. Run `membrane init` to set up testing.");const r=new ss({token:await this.createMembraneToken(i),apiUri:i.apiUri}),o=new gr({apiKey:i.anthropicApiKey}),a={complete:c(async({prompt:l,maxTokens:u})=>{const p=await o.messages.create({model:Ba,max_tokens:u,messages:[{role:"user",content:l}]});return p.content[0].type==="text"?p.content[0].text:""},"complete")};return new Zn({client:r,options:n,connectionId:e,testsDir:"src/testing/tests",testBasePath:t,llm:a})}async run(e){this.state={};const t={};for(const n of e)await n.run(),sn(t,n.getResult());this.writeResults(t)}async readYaml(e){const t=B.join(this.testsDir,this.testBasePath,this.connectionId,e);if(R.existsSync(t))return de.load(R.readFileSync(t,"utf8"))}async writeYaml(e,t){const n=B.join(this.testsDir,this.testBasePath,this.connectionId,e);R.mkdirSync(B.dirname(n),{recursive:!0}),R.writeFileSync(n,de.dump(t,{noRefs:!0}))}writeResults(e){const t=B.join(this.testsDir,this.testBasePath,this.connectionId);R.mkdirSync(t,{recursive:!0});const n=B.join(t,"test-results.yaml");R.writeFileSync(n,de.dump(e,{noRefs:!0})),console.debug(`[TestRunner] Results written to: ${n}`)}static async createMembraneToken(e){const t=e.testCustomerId||"test-customer",n={id:t,name:t},i={issuer:e.workspaceKey,expiresIn:7200,algorithm:"HS512"};return tn.sign(n,e.workspaceSecret,i)}}wr.interpolate=/{{([\s\S]+?)}}/g;function Yn(s,e){if(typeof s=="string"){const t=yr(s),n={state:e,random:{number:c(()=>Xe.number.int(),"number"),alphaNumeric:c(r=>Xe.string.alphanumeric(r),"alphaNumeric")},faker:{company:{name:c(()=>Xe.company.name(),"name"),catchPhrase:c(()=>Xe.company.catchPhrase(),"catchPhrase")},internet:{email:c(()=>Xe.internet.email(),"email")}},entries:e["journal-entries"],orders:e["purchase-orders"]||e["sales-orders"],bills:e["vendor-bills"]},i=t(n);return s.includes("{{")&&s.includes("}}")&&(console.debug(`[TEMPLATE] Input: ${s}`),console.debug(`[TEMPLATE] Output: ${i}`)),i}return Array.isArray(s)?s.map(t=>Yn(t,e)):typeof s=="object"&&s!==null?Object.fromEntries(Object.entries(s).map(([t,n])=>[t,Yn(n,e)])):s}c(Yn,"processNode");function Ua(s,e){return Yn(s,e)}c(Ua,"handleTemplate");class qa{static{c(this,"BaseTestSuite")}result;environment;constructor({environment:e}){this.environment=e,this.result={}}async run(){}getResult(){return this.result}async runTest(e){console.debug(`${k.bold.cyan("[start]")} ${k.yellow(e.path)}`);let t=!1,n=!1,i={},r={},o;for(;!t;)try{r=await e.readTestCase(),r||(r=await e.generateConfig(),await this.environment.writeYaml(e.getTestCasePath(),r),console.debug(`${k.bold.yellow("[initialized]")} ${k.yellow(e.path)}`)),o=Ua(r,this.environment.state),await e.run(o),console.debug(`${k.bold.green("[success]")} ${k.yellow(e.path)}`),t=!0,i=e.getResult(),Xt(this.result,e.path,i)}catch(l){if(console.error(`${k.bold.red("[error]")} ${k.yellow(e.path)}: ${l}`),this.environment.options.fix&&!n){n=!0;try{await e.fix(l);continue}catch(u){console.error(`${k.bold.red("[fix fail]")} ${k.yellow(e.path)}: ${u}`)}}Xt(this.result,e.path,{error:ce(l)}),t=!0,i={error:ce(l)}}const a={...o,result:i};await this.environment.writeYaml(e.getTestCasePath(),a)}async runTestSuite(e){await e.run(),sn(this.result,e.getResult())}}class ve{static{c(this,"BaseTester")}environment;level;logs;assertions;resultsLocator;path;constructor({environment:e,path:t}){this.environment=e,this.logs=[],this.assertions=[],this.path=t,this.level=0}async fix(e){const t=await this.readTestCase();if(!t)throw new Error(`No config found for test ${this.path}`);const n=await this.fixTestCase({config:t,error:e});console.debug(k.bold.yellow("[auto-fix]"),this.path),await this.environment.writeYaml(this.getTestCasePath(),n)}async readTestCase(){const e=this.getTestCasePath();return this.environment.readYaml(e)}async generateConfig(){return{}}async fixTestCase(e){throw new Error(`Auto-fix is not implemented for test ${this.path}`)}getResult(){return{logs:this.logs,assertions:this.assertions}}async assert(e,t,n){try{const i=await e();i?(this.logMsg(`\u2705 ${t}`),this.assertions.push({message:t,result:i})):(this.logMsg(`\u274C ${t}`),this.assertions.push({message:t,result:!1,details:n}))}catch(i){this.assertions.push({message:t,result:!1,details:ce(i)}),this.logMsg(`\u274C ${t}: ${i.message}`)}}logMsg(e){console.debug(`${" ".repeat(this.level*2)}${e}`)}getTestCasePath(){return`${this.path}.test.yml`}}function zn(s,e){const t={};for(const n in e){if(!(n in s)){t[n]=e[n];continue}const i=s[n],r=e[n];if(i&&r&&typeof i=="object"&&typeof r=="object"){if(Array.isArray(i)&&Array.isArray(r)){const o=r.filter(a=>!i.some(l=>{if(typeof l=="object"&&typeof a=="object"&&l!==null&&a!==null&&!Array.isArray(l)&&!Array.isArray(a)){for(const u in a)if(!(u in l)||!Qn(l[u],a[u]))return!1;return!0}else return JSON.stringify(l)===JSON.stringify(a)}));o.length>0&&(t[n]=o)}else if(!Array.isArray(i)&&!Array.isArray(r)){const o=zn(i,r);o!==null&&(t[n]=o)}else t[n]=r;continue}Qn(i,r)||(t[n]=r)}return Object.keys(t).length===0?null:t}c(zn,"getNotMatchingSubFields");function Qn(s,e){if(s==e||s?.toString?.()===e?.toString?.())return!0;const t=new Date(s),n=new Date(e);return!isNaN(t.getTime())&&!isNaN(n.getTime())?t.getTime()===n.getTime():!1}c(Qn,"softCompare");class Ja extends ve{static{c(this,"DataCollectionCreateTester")}dataCollectionKey;dataCollection;constructor({environment:e,dataCollectionKey:t,dataCollection:n}){super({environment:e,path:`data/${t}/create`}),this.dataCollectionKey=t,this.dataCollection=n}async run(e){const t=await this.environment.client.connection(this.environment.connectionId).dataCollection(this.dataCollectionKey).create(e.input);await this.assert(()=>!!t.id,"Returned ID of a created record"),t.id&&(this.environment.state[this.dataCollectionKey]={createdRecordId:t.id});const n=Zt(this.dataCollection);if(this.dataCollection.findById){const r=await this.environment.client.connection(this.environment.connectionId).dataCollection(this.dataCollectionKey).findById({id:t.id});await this.assert(()=>!!r.record,"Record is returned from findById"),r.record&&(this.environment.state[this.dataCollectionKey]={createdRecordId:t.id,createdRecord:r.record.fields});const o=is(n),a=pt(e.input.fields,o,{skipUnknownFields:!0}),l=pt(r.record.fields,o),u=zn(l,a);await this.assert(()=>!u,"Returned fields match created fields",{difference:u,sentFields:a,receivedFields:l})}const i=or(n);if(i.length>0){const r={};i.forEach(a=>{const l=ar(e.input.fields,a);typeof l<"u"&&Xt(r,a,l)});const o=await this.environment.client.connection(this.environment.connectionId).dataCollection(this.dataCollectionKey).create({fields:r});await this.assert(()=>!!o.id,"Record can be created with schema-defined required fields only")}}async generateConfig(){const e=Zt(this.dataCollection);if(!e?.properties)throw new Error("No fields schema found for data collection");return{input:{fields:await this.generateFieldsWithLLM(e)}}}async fixTestCase({config:e,error:t}){const n=ce(t),i=Zt(this.dataCollection),r=await this.getExampleRecordsForSchema(i),o=`I'm trying to create a data record in a data collection with the following fields schema:
|
|
150
150
|
|
|
151
151
|
${JSON.stringify(i,null,2)}
|
|
152
152
|
|
|
@@ -331,9 +331,9 @@ ${JSON.stringify(i,null,2)}`).join(`
|
|
|
331
331
|
|
|
332
332
|
`)}.
|
|
333
333
|
|
|
334
|
-
If you don't have an example for a given collection, leave the field empty instead of coming up with a fake record id.`}async findReferenceCollections(e){const t=new Set,n=[];return rs(e,i=>{if(i.referenceCollection){const r=i.referenceCollection.key,o=i.referenceCollection.parameters,a=`${r}:${JSON.stringify(o||{})}`;t.has(a)||(t.add(a),n.push({key:r,parameters:o}))}return i}),n}async fetchExampleRecords(e){return(await this.environment.client.connection(this.environment.connectionId).dataCollection(e.key).list({parameters:e.parameters})).records.map(n=>({id:n.id,fields:n.fields}))}async getExampleRecordsForSchema(e){const t=await this.findReferenceCollections(e),n={};for(const i of t){const r=os(i);n[r]=await this.fetchExampleRecords(i)}return n}}const Xn={spec:{testerClass:za},create:{testerClass:Ja,operationKey:"create"},"find-by-id":{testerClass:Ga,operationKey:"findById"},list:{testerClass:Va,operationKey:"list"},match:{testerClass:Ha,operationKey:"match"},search:{testerClass:Ya,operationKey:"search"},update:{testerClass:Qa,operationKey:"update"},delete:{testerClass:Wa,operationKey:"delete"}};class Xa extends qa{static{c(this,"DataCollectionTestSuite")}dataCollectionKey;testMethod;constructor({environment:e,dataCollectionKey:t,testMethod:n}){super({environment:e}),this.dataCollectionKey=t,this.testMethod=n}async run(){const e=await this.fetchDataCollection(),t=this.testMethod?[this.createTester(this.testMethod,e)]:this.createAllAvailableTesters(e);G.info("\u{1F680} Running tests...");for(const n of t)await this.runTest(n);this.displayTestSummary(t.length)}async fetchDataCollection(){return this.environment.client.connection(this.environment.connectionId).dataCollection(this.dataCollectionKey).get()}isOperationAvailable(e,t){return t?!!e[t]:!0}createTester(e,t){const n=Xn[e];if(!n)throw new Error(`Unknown test method "${e}". Available: ${this.getAvailableTestMethods(t).join(", ")}`);const i="operationKey"in n?n.operationKey:void 0;if(!this.isOperationAvailable(t,i))throw new Error(`${i} operation not available for data collection "${this.dataCollectionKey}"`);return this.instantiateTester(n,t)}createAllAvailableTesters(e){return Object.entries(Xn).filter(([,t])=>{const n="operationKey"in t?t.operationKey:void 0;return this.isOperationAvailable(e,n)}).map(([,t])=>this.instantiateTester(t,e))}instantiateTester(e,t){const n={environment:this.environment,dataCollectionKey:this.dataCollectionKey,dataCollection:t};return new e.testerClass(n)}getAvailableTestMethods(e){return Object.entries(Xn).filter(([,t])=>{const n="operationKey"in t?t.operationKey:void 0;return this.isOperationAvailable(e,n)}).map(([t])=>t)}displayTestSummary(e){G.info(`\u{1F4CA} ${e} test${e===1?"":"s"} executed`)}}class Za extends
|
|
334
|
+
If you don't have an example for a given collection, leave the field empty instead of coming up with a fake record id.`}async findReferenceCollections(e){const t=new Set,n=[];return rs(e,i=>{if(i.referenceCollection){const r=i.referenceCollection.key,o=i.referenceCollection.parameters,a=`${r}:${JSON.stringify(o||{})}`;t.has(a)||(t.add(a),n.push({key:r,parameters:o}))}return i}),n}async fetchExampleRecords(e){return(await this.environment.client.connection(this.environment.connectionId).dataCollection(e.key).list({parameters:e.parameters})).records.map(n=>({id:n.id,fields:n.fields}))}async getExampleRecordsForSchema(e){const t=await this.findReferenceCollections(e),n={};for(const i of t){const r=os(i);n[r]=await this.fetchExampleRecords(i)}return n}}const Xn={spec:{testerClass:za},create:{testerClass:Ja,operationKey:"create"},"find-by-id":{testerClass:Ga,operationKey:"findById"},list:{testerClass:Va,operationKey:"list"},match:{testerClass:Ha,operationKey:"match"},search:{testerClass:Ya,operationKey:"search"},update:{testerClass:Qa,operationKey:"update"},delete:{testerClass:Wa,operationKey:"delete"}};class Xa extends qa{static{c(this,"DataCollectionTestSuite")}dataCollectionKey;testMethod;constructor({environment:e,dataCollectionKey:t,testMethod:n}){super({environment:e}),this.dataCollectionKey=t,this.testMethod=n}async run(){const e=await this.fetchDataCollection(),t=this.testMethod?[this.createTester(this.testMethod,e)]:this.createAllAvailableTesters(e);G.info("\u{1F680} Running tests...");for(const n of t)await this.runTest(n);this.displayTestSummary(t.length)}async fetchDataCollection(){return this.environment.client.connection(this.environment.connectionId).dataCollection(this.dataCollectionKey).get()}isOperationAvailable(e,t){return t?!!e[t]:!0}createTester(e,t){const n=Xn[e];if(!n)throw new Error(`Unknown test method "${e}". Available: ${this.getAvailableTestMethods(t).join(", ")}`);const i="operationKey"in n?n.operationKey:void 0;if(!this.isOperationAvailable(t,i))throw new Error(`${i} operation not available for data collection "${this.dataCollectionKey}"`);return this.instantiateTester(n,t)}createAllAvailableTesters(e){return Object.entries(Xn).filter(([,t])=>{const n="operationKey"in t?t.operationKey:void 0;return this.isOperationAvailable(e,n)}).map(([,t])=>this.instantiateTester(t,e))}instantiateTester(e,t){const n={environment:this.environment,dataCollectionKey:this.dataCollectionKey,dataCollection:t};return new e.testerClass(n)}getAvailableTestMethods(e){return Object.entries(Xn).filter(([,t])=>{const n="operationKey"in t?t.operationKey:void 0;return this.isOperationAvailable(e,n)}).map(([t])=>t)}displayTestSummary(e){G.info(`\u{1F4CA} ${e} test${e===1?"":"s"} executed`)}}class Za extends _a{static{c(this,"TestRunner")}constructor(e){super(e)}async initialize(){G.debug("Initializing test runner",{prefix:"TestRunner"})}async run(){try{const{testPath:e,path:t,fix:n}=this.options,i=e.split("/");i.length<2&&(G.error("Invalid test path. Expected format: <type>/<name>[/additional/path][/method]"),process.exit(1));const[r,o,...a]=i;r!=="connectors"&&(G.error(`Test type "${r}" is not yet fully implemented. Currently only "connectors" is fully supported.`),G.error("Supported test types: connectors"),process.exit(1));const l=o,u=r,p=[...a,...t?t.split("/"):[]].join("/"),h=await Zn.create({connectionId:l,testBasePath:u,options:{fix:n}}),g=await h.client.get(`connections/${l}/data`),w=[],d=p?p.split("/"):[];if(d.length===0||d[0]==="data"){d[0]==="data"&&d.shift();let C,v;d.length>=1&&(v=d[0],d.length>=2&&d[1].trim()!==""&&(C=d[1]));for(const A of g){if(v&&v!==A.key)continue;const T=new Xa({environment:h,dataCollectionKey:A.key,testMethod:C});w.push(T)}}w.length===0&&(G.error(`No test suites found for path: ${e}${p?"/"+p:""}`),process.exit(1));const y={};for(const C of w){await C.run();const v=C.getResult();G.debug(`Suite ${C.constructor.name} result:`,{prefix:"TestRunner"}),sn(y,v)}console.debug("[TestRunner] All results collected:",Object.keys(y)),h.writeResults(y)}catch(e){throw console.error("Error in TestRunner.run():",e),e}}}const Vt=c(()=>[k.yellow("\u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510"),k.yellow("\u2502 \u26A0\uFE0F EXPERIMENTAL FEATURE WARNING \u2502"),k.yellow("\u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524"),k.yellow("\u2502 The test command is experimental and subject to rapid changes. \u2502"),k.yellow("\u2502 Features, APIs, and file structures may change without notice. \u2502"),k.yellow("\u2502 Use in production environments is not recommended. \u2502"),k.yellow("\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518"),""].join(`
|
|
335
335
|
`),"createExperimentalWarning");function ec(s){s.command("test").description("\u26A0\uFE0F EXPERIMENTAL: Test management commands - This feature is experimental and will be changing rapidly. Use at your own risk.").addHelpText("after",Vt()).action(async()=>{console.warn(Vt()),G.error("Please specify a subcommand. Use --help for available options."),process.exit(1)}).command("run").description("Run integration tests for various membrane components").argument("<testPath>",'Test path (e.g., "connectors/netsuite", "actions/create-contact", "connectors/hubspot/data/contacts", "connectors/netsuite/data/contacts/create")').option("-p, --path <path>","Additional path filter within the test scope").option("--fix","Enable auto-fix for test issues").addHelpText("after",["",k.bold("Examples:"),` ${k.gray("\u25B8")} ${k.cyan("membrane test run connectors/netsuite")} # Test all data collections for netsuite connector`,` ${k.gray("\u25B8")} ${k.cyan("membrane test run connectors/netsuite/data/contacts")} # Test specific data collection`,` ${k.gray("\u25B8")} ${k.cyan("membrane test run connectors/netsuite/data/contacts/create")} # Test specific method for data collection`,` ${k.gray("\u25B8")} ${k.cyan("membrane test run connectors/netsuite/data/contacts/delete")} # Test delete method for data collection`,` ${k.gray("\u25B8")} ${k.cyan("membrane test run actions/create-contact")} # Test specific action`,` ${k.gray("\u25B8")} ${k.cyan("membrane test run connectors/hubspot/events")} # Test events for hubspot`,` ${k.gray("\u25B8")} ${k.cyan("membrane test run connectors/salesforce --fix")} # Run tests with auto-fix enabled`,"",k.gray("For more information, visit:"),k.blue(" https://docs.integration.app/cli"),"",Vt()].join(`
|
|
336
336
|
`)).action(async(t,n)=>{try{console.warn(Vt()),t||(G.error("Test path is required"),process.exit(1)),G.header(`Testing: ${t}`);const i=new Za({testPath:t,path:n.path,fix:n.fix});await i.initialize(),await i.run(),G.success("Tests completed")}catch(i){i instanceof Error&&(G.error(i.message),process.exit(1)),G.error("An unknown error occurred"),process.exit(1)}})}c(ec,"setupTestCommand");const tc=c(()=>{try{const s=hr(import.meta.url),e=Ui(s),t=qi(e,"..","package.json");return JSON.parse(Qi(t,"utf-8")).version}catch{return"1.0.0"}},"getPackageVersion"),Ki=tc();function nc(){const s=new pr().name("membrane").description("Command-line interface for Membrane Agent").version(Ki,"-v, --version","Output the version number");s.configureHelp({sortSubcommands:!0,subcommandTerm:c(e=>k.cyan(e.name()),"subcommandTerm"),commandUsage:c(e=>e.name()==="membrane"?`${k.cyan(e.name())} ${k.gray("[options]")} ${k.cyan("[command]")}`:e.usage(),"commandUsage"),optionTerm:c(e=>{const t=e.flags;return`${k.gray("\u25B8")} ${k.cyan(t)}`},"optionTerm"),subcommandDescription:c(e=>k.gray(e.description()),"subcommandDescription"),optionDescription:c(e=>k.gray(e.description),"optionDescription"),commandDescription:c(e=>k.gray(e.description()),"commandDescription")}),s.addHelpText("beforeAll",`
|
|
337
337
|
${k.bold.cyan("Membrane Agent CLI")} ${k.gray(`v${Ki}`)}
|
|
338
338
|
|
|
339
|
-
`),
|
|
339
|
+
`),Ra(s),Fa(s),ec(s),Da(s),$a(s),Ia(s),process.argv.length===2&&(s.outputHelp(),process.exit(0)),s.parse()}c(nc,"runCLI");const Fi=["--cwd"];function sc(){const s=process.argv.slice(2);return s.some((e,t)=>t>0&&Fi.includes(s[t-1])?!1:!Fi.includes(e))}c(sc,"hasCLIArguments"),sc()?nc():Ta();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@membranehq/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.1",
|
|
4
4
|
"keywords": [
|
|
5
5
|
"cli",
|
|
6
6
|
"integration",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"@buildwithlayer/openapi-to-tools": "^1.3.3",
|
|
34
34
|
"@faker-js/faker": "^9.8.0",
|
|
35
35
|
"@inkjs/ui": "^2.0.0",
|
|
36
|
-
"@membranehq/sdk": "^0.
|
|
36
|
+
"@membranehq/sdk": "^0.4.0",
|
|
37
37
|
"@types/jsonwebtoken": "^9.0.10",
|
|
38
38
|
"archiver": "^7.0.1",
|
|
39
39
|
"axios": "^1.10.0",
|