@membranehq/cli 1.2.6 → 1.2.8
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 +94 -94
- package/package.json +2 -1
package/dist/index.js
CHANGED
|
@@ -1,77 +1,77 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var
|
|
3
|
-
`});return n.writeLine("// Generated TypeScript definitions for Membrane actions"),n.newLine(),n.writeLine("import type {"),n.writeLine(" ActionAccessor,"),n.writeLine(" ConnectionLevelActionAccessor,"),n.writeLine('} from "@membranehq/sdk";'),n.newLine(),
|
|
4
|
-
`),"createExperimentalWarning$2");function
|
|
5
|
-
`)).action(async t=>{try{console.warn(ir()),console.error(k.cyan("\u{1F527} Membrane Codegen")),console.error("Status: Loading membrane interfaces...");const n=await
|
|
6
|
-
`);return Xc(i,o,"utf-8"),i}catch(t){return console.error("Failed to save logs:",t),null}}}const b=new Gl,Wi=new gl;class Ji{static{c(this,"RequestLogger")}constructor(e=sl){this.axiosInstance=e}interceptorsConfigured=!1;setup(){if(this.interceptorsConfigured)return;const e=c(t=>(this.logError(t),Promise.reject(t)),"errorHandler");this.axiosInstance.interceptors.request.use(t=>{const n=Wi.getStore();t.metadata={startTime:Date.now(),skipErrorLog:n};const{method:r,url:i}=this.getRequestDetails(t);return b.debug(`[Request]: ${r} ${i}`),t},e),this.axiosInstance.interceptors.response.use(t=>{const{method:n,url:r}=this.getRequestDetails(t.config),i=this.getDuration(t.config),{status:o,statusText:a}=t;return b.debug(`[Response]: ${n} ${r} - ${o} ${a} (${i}ms)`),t},e),this.interceptorsConfigured=!0}static withSkipErrorLog(e){return Wi.run(!0,e)}getRequestDetails(e){const t=e?.method?.toUpperCase()??"UNKNOWN";if(!e?.url)return{method:t,url:"unknown"};if(e.url.startsWith("http"))return{method:t,url:e.url};const r=`${e.baseURL??""}/${e.url}`.replace(/\/+/g,"/").replace(/:\//,"://");return{method:t,url:r}}getDuration(e){return Date.now()-(e?.metadata?.startTime??Date.now())}logError(e){if(e.config?.metadata?.skipErrorLog)return;const{method:t,url:n}=this.getRequestDetails(e.config),r=this.getDuration(e.config);if(e.response){const{status:i,statusText:o}=e.response;b.error(`[Response]: ${t} ${n} - ${i} ${o} (${r}ms)`),e.response.data&&b.error(`[Response Data]: ${JSON.stringify(e.response.data,null,2)}`)}}}class Yl{static{c(this,"MembraneAPIManager")}client=null;currentConfig=null;tokenExpiry=0;requestTimes=[];maxRequestsPerSecond=80;windowSizeMs=1e3;semaphore=0;maxConcurrentRequests;maxRetries;retryDelay;requestTimeout;enableJitter;semaphoreQueue=[];rateLimitMutex=Promise.resolve();requestLogger=null;constructor(e={}){this.init(e)}init(e={}){this.windowSizeMs=e.windowSizeMs??1e3,this.maxRequestsPerSecond=e.maxRequestsPerSecond??80,this.maxConcurrentRequests=e.maxConcurrentRequests??Math.max(1,Math.min(Math.floor(this.maxRequestsPerSecond/4),20)),this.maxRetries=e.maxRetries??3,this.retryDelay=e.retryDelay??1e3,this.requestTimeout=e.requestTimeout??12e4,this.enableJitter=e.enableJitter!==!1,this.requestLogger=new Ji,this.requestLogger.setup()}async withClient(e,t=!0,n=process.cwd()){const r=c(async()=>{try{return await this.withRetry(async()=>{const i=await this.getClient(n);await this.acquireSemaphore();try{return await this.waitIfNeeded(),this.recordRequest(),await this.withTimeout(e(i),this.requestTimeout)}finally{this.releaseSemaphore()}},"API request")}catch(i){if(t)throw i;return}},"executeRequest");return t?r():Ji.withSkipErrorLog(r)}async generateAccessToken(e,t){return Qs.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=$n(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 Ii({token:t,apiUri:e.apiUri})}async getClient(e=process.cwd()){const t=this.getCurrentConfig(e);if(!t)throw new Error("Unable to create MembraneClient: No workspace configuration found.");const n=!this.currentConfig||this.currentConfig.workspaceKey!==t.workspaceKey||this.currentConfig.workspaceSecret!==t.workspaceSecret||this.currentConfig.apiUri!==t.apiUri,r=!this.isTokenValid()||this.tokenExpiry-Date.now()<3e5;return(!this.client||n||r)&&(this.client=await this.createClient(t)),this.client}clearClient(){this.client=null,this.currentConfig=null,this.tokenExpiry=0,this.requestTimes=[],this.semaphore=0,this.semaphoreQueue=[],this.rateLimitMutex=Promise.resolve()}getCurrentConfigInfo(){return this.currentConfig}async waitIfNeeded(){this.rateLimitMutex=this.rateLimitMutex.then(async()=>{for(this.cleanOldRequests();this.requestTimes.length>=this.maxRequestsPerSecond;){const t=this.requestTimes[0]+this.windowSizeMs-Date.now()+10;if(t>0)await new Promise(n=>setTimeout(n,t)),this.cleanOldRequests();else break}}),await this.rateLimitMutex}recordRequest(){this.requestTimes.push(Date.now())}cleanOldRequests(){const e=Date.now()-this.windowSizeMs;this.requestTimes=this.requestTimes.filter(t=>t>e)}getRequestCount(){return this.cleanOldRequests(),this.requestTimes.length}async acquireSemaphore(){if(this.semaphore<this.maxConcurrentRequests){this.semaphore++;return}return new Promise(e=>{this.semaphoreQueue.push(e)})}releaseSemaphore(){if(this.semaphore--,this.semaphoreQueue.length>0){const e=this.semaphoreQueue.shift();this.semaphore++,e()}}async withRetry(e,t="operation"){let n;for(let r=0;r<=this.maxRetries;r++)try{return await e()}catch(i){if(n=i,!this.isRetryableError(i)||r===this.maxRetries)throw i;const o=new Date().toISOString(),a=r+2;b.debug(`[${o}] Retrying ${t} (attempt ${a}/${this.maxRetries+1})`);let l=this.retryDelay*Math.pow(2,r);if(this.enableJitter){const u=l*.25*(Math.random()*2-1);l=Math.max(0,l+u)}await new Promise(u=>setTimeout(u,l))}throw n||new Error("Unknown error occurred during retry attempts")}isRetryableError(e){if(!e)return!1;const t=(e.message||e.toString()||"").toLowerCase(),n=e.code;return n&&["econnrefused","enotfound","econnreset","etimedout","ehostunreach","enetunreach"].includes(n.toLowerCase())?!0:["econnrefused","connection refused","network error","timeout","socket hang up","request timeout","dns lookup failed"].some(o=>t.includes(o))}async withTimeout(e,t){let n;const r=new Promise((i,o)=>{n=setTimeout(()=>o(new Error(`Request timeout after ${t}ms`)),t)});try{const i=await Promise.race([e,r]);return n&&clearTimeout(n),i}catch(i){throw n&&clearTimeout(n),i}}}const F=new Yl;async function Hi(s){const e=await F.withClient(t=>t.get("org-workspace-id"),!0,s);if(!e)throw new Error("Failed to get workspace ID");return e.id}c(Hi,"getWorkspaceId");var W={},Nn={},Vi;function zi(){if(Vi)return Nn;Vi=1,Object.defineProperty(Nn,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/[^A-Za-z0-9]+/g,"$").replace(/([a-z])([A-Z])/g,function(t,n,r){return n+"$"+r}).toLowerCase().replace(/(\$)(\w)/g,function(t,n,r){return r.toUpperCase()}):""}return c(s,"toCamelCase"),Nn.default=s,Nn}c(zi,"requireJsCamelcase");var xn={},Gi;function Yi(){if(Gi)return xn;Gi=1,Object.defineProperty(xn,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(t,n,r){return n+"_"+r.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g,"_").toLowerCase():""}return c(s,"toSnakeCase"),xn.default=s,xn}c(Yi,"requireJsSnakecase");var Pn={},Xi;function Zi(){if(Xi)return Pn;Xi=1,Object.defineProperty(Pn,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"$").replace(/[^A-Za-z0-9]+/g,"$").replace(/([a-z])([A-Z])/g,function(t,n,r){return n+"$"+r}).toLowerCase().replace(/(\$)(\w?)/g,function(t,n,r){return r.toUpperCase()}):""}return c(s,"toPascalCase"),Pn.default=s,Pn}c(Zi,"requireJsPascalcase");var Rn={},Qi;function Xl(){if(Qi)return Rn;Qi=1,Object.defineProperty(Rn,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(t,n,r){return n+"_"+r.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g,".").toLowerCase():""}return c(s,"toDotCase"),Rn.default=s,Rn}c(Xl,"requireJsDotcase");var Mn={},eo;function Zl(){if(eo)return Mn;eo=1,Object.defineProperty(Mn,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(t,n,r){return n+"_"+r.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g,"/").toLowerCase():""}return c(s,"toPathCase"),Mn.default=s,Mn}c(Zl,"requireJsPathcase");var Ln={},to;function Ql(){if(to)return Ln;to=1,Object.defineProperty(Ln,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(t,n,r){return n+"_"+r.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g," ").toLowerCase():""}return c(s,"toTextCase"),Ln.default=s,Ln}c(Ql,"requireJsTextcase");var Dn={},no;function eu(){if(no)return Dn;no=1,Object.defineProperty(Dn,"__esModule",{value:!0});function s(e){if(e===void 0&&(e=""),!e)return"";var t=String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(n,r,i){return r+"_"+i.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g," ").toLowerCase();return t.charAt(0).toUpperCase()+t.slice(1)}return c(s,"toSentenceCase"),Dn.default=s,Dn}c(eu,"requireJsSentencecase");var jn={},so;function tu(){if(so)return jn;so=1,Object.defineProperty(jn,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(t,n,r){return n+"_"+r.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g," ").toLowerCase().replace(/( ?)(\w+)( ?)/g,function(t,n,r,i){return n+r.charAt(0).toUpperCase()+r.slice(1)+i}):""}return c(s,"toHeaderCase"),jn.default=s,jn}c(tu,"requireJsHeadercase");var Fn={},ro;function io(){if(ro)return Fn;ro=1,Object.defineProperty(Fn,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(t,n,r){return n+"_"+r.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g,"-").toLowerCase():""}return c(s,"toKebabCase"),Fn.default=s,Fn}c(io,"requireJsKebabcase");var mt={},cr={},oo;function gt(){return oo||(oo=1,function(s){Object.defineProperty(s,"__esModule",{value:!0}),s.belongToTypes=s.isValidObject=s.isArrayObject=s.validateOptions=s.DefaultOption=void 0,s.DefaultOption={recursive:!1,recursiveInArray:!1,keepTypesOnRecursion:[]},s.validateOptions=function(e){return e===void 0&&(e=s.DefaultOption),e.recursive==null?e=s.DefaultOption:e.recursiveInArray==null&&(e.recursiveInArray=!1),e},s.isArrayObject=function(e){return e!=null&&Array.isArray(e)},s.isValidObject=function(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)},s.belongToTypes=function(e,t){return(t||[]).some(function(n){return e instanceof n})}}(cr)),cr}c(gt,"requireUtils");var ao;function nu(){if(ao)return mt;ao=1;var s=mt&&mt.__spreadArrays||function(){for(var n=0,r=0,i=arguments.length;r<i;r++)n+=arguments[r].length;for(var o=Array(n),a=0,r=0;r<i;r++)for(var l=arguments[r],u=0,d=l.length;u<d;u++,a++)o[a]=l[u];return o};Object.defineProperty(mt,"__esModule",{value:!0});var e=gt();function t(n,r){if(r===void 0&&(r=e.DefaultOption),!e.isValidObject(n))return null;r=e.validateOptions(r);var i={};return Object.keys(n).forEach(function(o){var a=n[o],l=o.toLowerCase();r.recursive&&(e.isValidObject(a)?e.belongToTypes(a,r.keepTypesOnRecursion)||(a=t(a,r)):r.recursiveInArray&&e.isArrayObject(a)&&(a=s(a).map(function(u){var d=u;if(e.isValidObject(u))e.belongToTypes(d,r.keepTypesOnRecursion)||(d=t(u,r));else if(e.isArrayObject(u)){var f=t({key:u},r);d=f.key}return d}))),i[l]=a}),i}return c(t,"lowerKeys"),mt.default=t,mt}c(nu,"requireLowercaseKeysObject");var yt={},co;function su(){if(co)return yt;co=1;var s=yt&&yt.__spreadArrays||function(){for(var n=0,r=0,i=arguments.length;r<i;r++)n+=arguments[r].length;for(var o=Array(n),a=0,r=0;r<i;r++)for(var l=arguments[r],u=0,d=l.length;u<d;u++,a++)o[a]=l[u];return o};Object.defineProperty(yt,"__esModule",{value:!0});var e=gt();function t(n,r){if(r===void 0&&(r=e.DefaultOption),!e.isValidObject(n))return null;r=e.validateOptions(r);var i={};return Object.keys(n).forEach(function(o){var a=n[o],l=o.toUpperCase();r.recursive&&(e.isValidObject(a)?e.belongToTypes(a,r.keepTypesOnRecursion)||(a=t(a,r)):r.recursiveInArray&&e.isArrayObject(a)&&(a=s(a).map(function(u){var d=u;if(e.isValidObject(u))e.belongToTypes(d,r.keepTypesOnRecursion)||(d=t(u,r));else if(e.isArrayObject(u)){var f=t({key:u},r);d=f.key}return d}))),i[l]=a}),i}return c(t,"upperKeys"),yt.default=t,yt}c(su,"requireUppercaseKeysObject");var wt={},lo;function ru(){if(lo)return wt;lo=1;var s=wt&&wt.__spreadArrays||function(){for(var r=0,i=0,o=arguments.length;i<o;i++)r+=arguments[i].length;for(var a=Array(r),l=0,i=0;i<o;i++)for(var u=arguments[i],d=0,f=u.length;d<f;d++,l++)a[l]=u[d];return a};Object.defineProperty(wt,"__esModule",{value:!0});var e=gt(),t=zi();function n(r,i){if(i===void 0&&(i=e.DefaultOption),!e.isValidObject(r))return null;i=e.validateOptions(i);var o={};return Object.keys(r).forEach(function(a){var l=r[a],u=t.default(a);i.recursive&&(e.isValidObject(l)?e.belongToTypes(l,i.keepTypesOnRecursion)||(l=n(l,i)):i.recursiveInArray&&e.isArrayObject(l)&&(l=s(l).map(function(d){var f=d;if(e.isValidObject(d))e.belongToTypes(f,i.keepTypesOnRecursion)||(f=n(d,i));else if(e.isArrayObject(d)){var h=n({key:d},i);f=h.key}return f}))),o[u]=l}),o}return c(n,"camelKeys"),wt.default=n,wt}c(ru,"requireCamelcaseKeysObject");var bt={},uo;function iu(){if(uo)return bt;uo=1;var s=bt&&bt.__spreadArrays||function(){for(var r=0,i=0,o=arguments.length;i<o;i++)r+=arguments[i].length;for(var a=Array(r),l=0,i=0;i<o;i++)for(var u=arguments[i],d=0,f=u.length;d<f;d++,l++)a[l]=u[d];return a};Object.defineProperty(bt,"__esModule",{value:!0});var e=gt(),t=Yi();function n(r,i){if(i===void 0&&(i=e.DefaultOption),!e.isValidObject(r))return null;i=e.validateOptions(i);var o={};return Object.keys(r).forEach(function(a){var l=r[a],u=t.default(a);i.recursive&&(e.isValidObject(l)?e.belongToTypes(l,i.keepTypesOnRecursion)||(l=n(l,i)):i.recursiveInArray&&e.isArrayObject(l)&&(l=s(l).map(function(d){var f=d;if(e.isValidObject(d))e.belongToTypes(f,i.keepTypesOnRecursion)||(f=n(d,i));else if(e.isArrayObject(d)){var h=n({key:d},i);f=h.key}return f}))),o[u]=l}),o}return c(n,"snakeKeys"),bt.default=n,bt}c(iu,"requireSnakecaseKeysObject");var St={},fo;function ou(){if(fo)return St;fo=1;var s=St&&St.__spreadArrays||function(){for(var r=0,i=0,o=arguments.length;i<o;i++)r+=arguments[i].length;for(var a=Array(r),l=0,i=0;i<o;i++)for(var u=arguments[i],d=0,f=u.length;d<f;d++,l++)a[l]=u[d];return a};Object.defineProperty(St,"__esModule",{value:!0});var e=gt(),t=Zi();function n(r,i){if(i===void 0&&(i=e.DefaultOption),!e.isValidObject(r))return null;i=e.validateOptions(i);var o={};return Object.keys(r).forEach(function(a){var l=r[a],u=t.default(a);i.recursive&&(e.isValidObject(l)?e.belongToTypes(l,i.keepTypesOnRecursion)||(l=n(l,i)):i.recursiveInArray&&e.isArrayObject(l)&&(l=s(l).map(function(d){var f=d;if(e.isValidObject(d))e.belongToTypes(f,i.keepTypesOnRecursion)||(f=n(d,i));else if(e.isArrayObject(d)){var h=n({key:d},i);f=h.key}return f}))),o[u]=l}),o}return c(n,"pascalKeys"),St.default=n,St}c(ou,"requirePascalcaseKeysObject");var Ct={},ho;function au(){if(ho)return Ct;ho=1;var s=Ct&&Ct.__spreadArrays||function(){for(var r=0,i=0,o=arguments.length;i<o;i++)r+=arguments[i].length;for(var a=Array(r),l=0,i=0;i<o;i++)for(var u=arguments[i],d=0,f=u.length;d<f;d++,l++)a[l]=u[d];return a};Object.defineProperty(Ct,"__esModule",{value:!0});var e=gt(),t=io();function n(r,i){if(i===void 0&&(i=e.DefaultOption),!e.isValidObject(r))return null;i=e.validateOptions(i);var o={};return Object.keys(r).forEach(function(a){var l=r[a],u=t.default(a);i.recursive&&(e.isValidObject(l)?e.belongToTypes(l,i.keepTypesOnRecursion)||(l=n(l,i)):i.recursiveInArray&&e.isArrayObject(l)&&(l=s(l).map(function(d){var f=d;if(e.isValidObject(d))e.belongToTypes(f,i.keepTypesOnRecursion)||(f=n(d,i));else if(e.isArrayObject(d)){var h=n({key:d},i);f=h.key}return f}))),o[u]=l}),o}return c(n,"kebabKeys"),Ct.default=n,Ct}c(au,"requireKebabcaseKeysObject");var po;function cu(){if(po)return W;po=1,Object.defineProperty(W,"__esModule",{value:!0}),W.kebabKeys=W.pascalKeys=W.snakeKeys=W.camelKeys=W.upperKeys=W.lowerKeys=W.toLowerCase=W.toUpperCase=W.toKebabCase=W.toHeaderCase=W.toSentenceCase=W.toTextCase=W.toPathCase=W.toDotCase=W.toPascalCase=W.toSnakeCase=W.toCamelCase=void 0;var s=zi();W.toCamelCase=s.default;var e=Yi();W.toSnakeCase=e.default;var t=Zi();W.toPascalCase=t.default;var n=Xl();W.toDotCase=n.default;var r=Zl();W.toPathCase=r.default;var i=Ql();W.toTextCase=i.default;var o=eu();W.toSentenceCase=o.default;var a=tu();W.toHeaderCase=a.default;var l=io();W.toKebabCase=l.default;var u=nu();W.lowerKeys=u.default;var d=su();W.upperKeys=d.default;var f=ru();W.camelKeys=f.default;var h=iu();W.snakeKeys=h.default;var m=ou();W.pascalKeys=m.default;var y=au();W.kebabKeys=y.default;var p=c(function(E){return String(E||"").toLowerCase()},"toLowerCase");W.toLowerCase=p;var w=c(function(E){return String(E||"").toUpperCase()},"toUpperCase");W.toUpperCase=w;var T={toCamelCase:s.default,toSnakeCase:e.default,toPascalCase:t.default,toDotCase:n.default,toPathCase:r.default,toTextCase:i.default,toSentenceCase:o.default,toHeaderCase:a.default,toKebabCase:l.default,toUpperCase:w,toLowerCase:p,lowerKeys:u.default,upperKeys:d.default,camelKeys:f.default,snakeKeys:h.default,pascalKeys:m.default,kebabKeys:y.default};return W.default=T,W}c(cu,"requireLib");var lr,mo;function lu(){return mo||(mo=1,lr=cu()),lr}c(lu,"requireJsConvertCase");var uu=lu();const Pe={UPDATE:"update",DELETE:"delete",CREATE:"create"},ce={INCOMING:"incoming",OUTGOING:"outgoing"},Ie={[N.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")},[N.Connector]:{element:"connector",elements:"connectors",exportable:!1},[N.Action]:{element:"action",elements:"actions",integrationSpecific:!0,exportCleanup:c(s=>(delete s.integration,s),"exportCleanup")},[N.AppDataSchema]:{element:"appDataSchema",elements:"appDataSchemas"},[N.AppEventType]:{element:"appEventType",elements:"appEventTypes"},[N.DataLinkTable]:{element:"dataLinkTable",elements:"dataLinkTables"},[N.DataSource]:{element:"dataSource",elements:"dataSources",parentKey:"universalDataSourceId",integrationSpecific:!0},[N.FieldMapping]:{element:"fieldMapping",elements:"fieldMappings",integrationSpecific:!0,parentKey:"universalFieldMappingId",exportCleanup:c(s=>(delete s.dataSourceId,s),"exportCleanup")},[N.Flow]:{element:"flow",elements:"flows",integrationSpecific:!0,parentKey:"universalFlowId"},[N.Package]:{element:"package",elements:"packages",integrationSpecific:!0}},du=["id","workspaceId","integrationId","createdAt","updatedAt","revision","archivedAt","baseUri","state","appliedToIntegrations","dependencies"],go=[N.Action,N.FieldMapping,N.Flow,N.DataSource,N.Package];class Z{static{c(this,"Element")}type;key;integrationKey;data;constructor(e,t,n,r){if(!r)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=r,this.integrationKey=n||Z.extractIntegrationKey(r)}get id(){return Z.makeId(this.type,this.key,this.integrationKey)}get dirPath(){const e=Ne[this.type].apiPath;if(this.integrationKey){const t=Ne[N.Integration].apiPath;return P.join(t,this.integrationKey,e,this.key)}return P.join(e,this.key)}get path(){return P.join(this.dirPath,"spec.yaml")}get relativePath(){return P.relative(pe(process.cwd()),this.path)}get absolutePath(){return P.resolve(P.join(pe(process.cwd()),this.path))}isEqual(e){if(this.id!==e.id)return!1;const t=this.clean(),n=e.clean();return yl(t,n)}hasParent(){if(this.data?.parentUuid)return!0;const e=this.getParentKey();return!!e&&!!this.data?.[e]}clean(){const e={...this.data};return du.forEach(t=>{delete e[t]}),Object.keys(e).forEach(t=>{t.match(/universal.*Revision/)&&delete e[t]}),e}getParentKey(){let e="parentId";return Ie?.[this.type]?.parentKey&&(e=Ie?.[this.type]?.parentKey),e}static new(e,t,n,r){return new Z(e,t,n,r)}static fromData(e,t){if(!t?.key)throw new Error(`Element missing key: ${JSON.stringify(t)}`);const n=this.extractIntegrationKey(t);return new Z(e,t.key,n,t)}static fromPathAndData(e,t){const n=Z.parsePath(e);if(!t)return;const r=t?.key||n?.key;return n?Z.new(n.type,r,n.integrationKey,t):void 0}static fromElement(e){return new Z(e.type,e.key,e.integrationKey,{...e.data})}static idFromPath(e){const t=Z.parsePath(e);if(t)return Z.makeId(t.type,t.key,t.integrationKey)}static makeId(e,t,n){return e===N.Integration?`${e}:${t}`:Z.isIntegrationSpecific(e)?`${n||"universal"}:${e}:${t}`:`${e}:${t}`}static parsePath(e){const t=this.getRelativePath(e);if(!this.isElementFile(t))return;const n=Object.values(Ne).map(l=>l.apiPath).join("|"),r=new RegExp(`^(?<elementType>${n})/(?<elementKey>[^/]+)/spec\\.ya?ml$`),i=t.match(r);if(i?.groups){const{elementType:l,elementKey:u}=i.groups,d=this.getElementTypeFromPath(l);if(d)return{type:d,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:d}=a.groups,f=this.getElementTypeFromPath(u);if(f)return{type:f,key:d,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 getElementTypeFromPath(e){return Object.values(N).find(t=>Ne[t].apiPath===e)}static getRelativePath(e){return P.relative(pe(process.cwd()),e)}static isIntegrationSpecific(e){return go.includes(e)}static canBeIntegrationSpecific(e){return go.includes(e)}}class yo{static{c(this,"BaseWorkspaceElementsRepository")}constructor(e){this.cache=e}connectorsMapping;sourceCache;setConnectorsMapping(e){this.connectorsMapping=e}setSourceCache(e){this.sourceCache=e}async getElements(){const e=[];try{const t=await this.getIntegrations();e.push(...t);const n=[N.Integration,N.Connector],r=Object.keys(Ie),i=await Promise.all(r.filter(o=>!n.includes(o)).map(async o=>this.getElementsByType(o,t)));for(const o of i)e.push(...o)}catch(t){throw b.error(`Failed to get elements: ${t}`),t}return e}async putElement(e){let t=this.cache.get(e.id);return t&&!e.data.id&&t.data.id&&(e.data.id=t.data.id),!t&&e.data.id&&(t=await this.getByInternalId(e.data.id,e.type,!1)),e.data.id&&t?t=await this.updateElement(e,t,{elements:this.cache.getAll(),connectorsMapping:this.connectorsMapping,sourceElements:this.sourceCache?.getAll()}):t=await this.createElement(e,{elements:this.cache.getAll(),connectorsMapping:this.connectorsMapping,sourceElements:this.sourceCache?.getAll()}),t}async getElementsByType(e,t){return[]}async createElement(e,t){return e}async updateElement(e,t,n){return t}async getElement(e){}async getIntegrations(){return[]}async getByInternalId(e,t,n=!0){}async deleteElement(e,t){}}function ur(s,e=!0){if(A.existsSync(s))try{const t=A.readFileSync(s,"utf8");return Se.load(t)||void 0}catch(t){if(!e)return;if(t instanceof Error){const n=P.relative(process.cwd(),s);throw new Error(`Failed to parse YAML file "${n}": ${t.message}`)}throw t}}c(ur,"readYaml$1");function fu(s,e,t){try{const n=Se.dump(e,t);A.writeFileSync(s,n,"utf8")}catch(n){if(n instanceof Error){const r=P.relative(process.cwd(),s);throw new Error(`Failed to write YAML file "${r}": ${n.message}`)}throw n}}c(fu,"writeYaml$1");class hu extends yo{static{c(this,"LocalWorkspaceElementsRepository")}basePath;constructor(e){super(e),this.basePath=pe(process.cwd())}async getElementsByType(e,t){const n=[],r=P.join(this.basePath,Ne[e].apiPath),i=await this.readElementsInDir(r);n.push(...i);for(const o of t){const a=P.join(this.basePath,Ne[N.Integration].apiPath,o.key,Ne[e].apiPath),l=await this.readElementsInDir(a);n.push(...l)}return n.length>0&&b.debug(`[local] Fetched ${n.length} ${e}${n.length!==1?"s":""}`),n}async getElement(e){return this.readElement(e.path)}async createElement(e){return this.updateElement(e,e)}async updateElement(e,t){if(!e.data)throw new Error("Element must have data to write");const n=P.join(this.basePath,t.dirPath),r=P.join(this.basePath,t.path);return A.existsSync(n)||A.mkdirSync(n,{recursive:!0}),fu(r,e.data),b.debug(`[local] Written ${t.relativePath}`),t}async deleteElement(e){const t=P.join(this.basePath,e.path),n=P.join(this.basePath,e.dirPath);A.existsSync(t)&&A.rmSync(t,{force:!0}),this.pruneEmptyDir(n),b.debug(`[local] Deleted ${e.relativePath}`)}async getIntegrations(){const e=P.join(this.basePath,Ne[N.Integration].apiPath);return this.readElementsInDir(e)}async readElement(e){const t=ur(e);if(t)return Z.fromPathAndData(e,t)}async readElementsInDir(e){const t=[];if(!A.existsSync(e))return t;const n=A.readdirSync(e);if(n.length===0)return t;const r=n.map(async o=>{const a=P.join(e,o,"spec.yaml");return this.readElement(a)});return(await Promise.all(r)).filter(o=>o!=null)}pruneEmptyDir(e){try{if(!e.startsWith(this.basePath)||e===this.basePath||!A.existsSync(e)||A.readdirSync(e).length>0)return;A.rmdirSync(e),this.pruneEmptyDir(P.dirname(e))}catch(t){console.warn(`Failed to prune empty directory ${e}:`,t)}}}class pu extends yo{static{c(this,"RemoteWorkspaceElementsRepository")}async getElementsByType(e,t){const n=Z.canBeIntegrationSpecific(e),r=await this.findAll(e,n?{layer:"universal"}:{});if(!Z.canBeIntegrationSpecific(e))return r;for(const i of t){const o=i.key,a=i.data.id,l=await this.findAll(e,a?{integrationId:a}:{integrationKey:o},o);r.push(...l)}return r.length>0&&b.debug(`[remote] Fetched ${r.length} ${e}${r.length!==1?"s":""}`),r}async getElement(e){const t=await F.withClient(n=>n[Ie[e.type].element](e.data.id).get());return Z.fromData(e.type,t)}async createElement(e,t){const n=e.clean();if(this.transformElementForCreate(e,n,t),e.hasParent()&&n.integrationId&&!n.isCustomized){const o=e.getParentKey(),a=new Set(["uuid","integrationId",o,"meta","integrationUuid","parentUuid"]);Object.keys(n).forEach(l=>{a.has(l)||delete n[l]})}const r=await F.withClient(o=>o[Ie[e.type].elements].create(n)),i=Z.fromData(e.type,r);return b.debug(`[remote] Created ${i.id}`),i}async updateElement(e,t,n){if(!e.data.id)throw new Error("Element must have an id to update");t.data.archivedAt&&await F.withClient(a=>a[Ie[e.type].element](t.data.id).restore());const r=e.clean();if(this.transformElementForUpdate(e,r,n),e.hasParent()&&r.integrationId&&!r.isCustomized)return b.debug(`[remote] Skipped update for ${t.id} (non-customized)`),t;const i=await F.withClient(a=>a[Ie[e.type].element](t.data.id).put(r)),o=Z.fromData(t.type,i);return b.debug(`[remote] Updated ${t.id}`),o}async deleteElement(e){if(!e.data.id)throw new Error("Element must have an id to delete");await F.withClient(t=>t[Ie[e.type].element](e.data.id).archive()),b.debug(`[remote] Deleted ${e.id}`)}async getIntegrations(){const e=await F.withClient(n=>n.integrations.findAll());if(!e)return[];const t=e.map(n=>Z.fromData(N.Integration,n));return t.length>0&&b.debug(`[remote] Fetched ${t.length} integrations`),t}async getByInternalId(e,t){let n;if(n=await F.withClient(r=>r[Ie[t].element](e).get(),!1),!!n)return Z.fromData(t,n)}transformElementForCreate(e,t,n){if(e.integrationKey){const r=n.elements.find(i=>i.type===N.Integration&&i.key===e.integrationKey);if(r)t.integrationId=r.data.id;else throw new Error(`Dependency integration ${e.integrationKey} not found for ${e.id}`)}if(e.type===N.Integration){const r=n.connectorsMapping?.[t.connectorId];r&&(t.connectorId=r)}this.transformPackageDependencies(e,t,n),this.transformParentDependency(e,t,n)}transformElementForUpdate(e,t,n){if(e.type===N.Integration){const r=n.connectorsMapping?.[t.connectorId];r&&(t.connectorId=r)}if(e.integrationKey){t.integrationKey=e.integrationKey;const r=n.elements.find(i=>i.type===N.Integration&&i.key===e.integrationKey);if(r)t.integrationId=r.data.id;else throw new Error(`Dependency integration ${e.integrationKey} not found for ${e.id}`)}this.transformPackageDependencies(e,t,n),this.transformParentDependency(e,t,n)}transformPackageDependencies(e,t,n){if(e.type!==N.Package||!t.elements)return;const r=t.elements.map(i=>{const a=(n.sourceElements||n.elements).find(u=>u.data.id===i.id&&u.type===i.type);if(!a)throw new Error(`Package element ${i.type} with id ${i.id} not found in source workspace for package ${e.id}`);const l=n.elements.find(u=>u.type===i.type&&u.key===a.key&&u.integrationKey===a.integrationKey);if(!l)throw new Error(`Package element ${i.type} with key ${a.key} not found in target workspace for package ${e.id}`);return{id:l.data.id,type:i.type}});t.elements=r}transformParentDependency(e,t,n){if(!e.hasParent())return;const r=e.getParentKey();if(!r)return;const i=n.elements.find(o=>o.type===e.type&&o.key===e.key&&!o.hasParent());if(i)t[r]=i.data.id;else throw new Error(`Parent ${e.getParentKey()} not found for ${e.id}`)}async findAll(e,t={},n){const r=await F.withClient(i=>i[Ie[e].elements].findAll(t));return r?r.filter(i=>i.key).map(i=>(n&&!i.integrationKey&&(i.integrationKey=n),Z.fromData(e,i))):[]}}const dr=Symbol.for("yaml.alias"),fr=Symbol.for("yaml.document"),Ke=Symbol.for("yaml.map"),wo=Symbol.for("yaml.pair"),Ae=Symbol.for("yaml.scalar"),vt=Symbol.for("yaml.seq"),me=Symbol.for("yaml.node.type"),Ue=c(s=>!!s&&typeof s=="object"&&s[me]===dr,"isAlias"),rt=c(s=>!!s&&typeof s=="object"&&s[me]===fr,"isDocument"),kt=c(s=>!!s&&typeof s=="object"&&s[me]===Ke,"isMap"),z=c(s=>!!s&&typeof s=="object"&&s[me]===wo,"isPair"),V=c(s=>!!s&&typeof s=="object"&&s[me]===Ae,"isScalar$1"),Tt=c(s=>!!s&&typeof s=="object"&&s[me]===vt,"isSeq");function Y(s){if(s&&typeof s=="object")switch(s[me]){case Ke:case vt:return!0}return!1}c(Y,"isCollection$1");function X(s){if(s&&typeof s=="object")switch(s[me]){case dr:case Ke:case Ae:case vt:return!0}return!1}c(X,"isNode");const bo=c(s=>(V(s)||Y(s))&&!!s.anchor,"hasAnchor"),le=Symbol("break visit"),So=Symbol("skip children"),Oe=Symbol("remove node");function it(s,e){const t=Co(e);rt(s)?Et(null,s.contents,t,Object.freeze([s]))===Oe&&(s.contents=null):Et(null,s,t,Object.freeze([]))}c(it,"visit$1"),it.BREAK=le,it.SKIP=So,it.REMOVE=Oe;function Et(s,e,t,n){const r=vo(s,e,t,n);if(X(r)||z(r))return ko(s,n,r),Et(s,r,t,n);if(typeof r!="symbol"){if(Y(e)){n=Object.freeze(n.concat(e));for(let i=0;i<e.items.length;++i){const o=Et(i,e.items[i],t,n);if(typeof o=="number")i=o-1;else{if(o===le)return le;o===Oe&&(e.items.splice(i,1),i-=1)}}}else if(z(e)){n=Object.freeze(n.concat(e));const i=Et("key",e.key,t,n);if(i===le)return le;i===Oe&&(e.key=null);const o=Et("value",e.value,t,n);if(o===le)return le;o===Oe&&(e.value=null)}}return r}c(Et,"visit_");async function qn(s,e){const t=Co(e);rt(s)?await _t(null,s.contents,t,Object.freeze([s]))===Oe&&(s.contents=null):await _t(null,s,t,Object.freeze([]))}c(qn,"visitAsync"),qn.BREAK=le,qn.SKIP=So,qn.REMOVE=Oe;async function _t(s,e,t,n){const r=await vo(s,e,t,n);if(X(r)||z(r))return ko(s,n,r),_t(s,r,t,n);if(typeof r!="symbol"){if(Y(e)){n=Object.freeze(n.concat(e));for(let i=0;i<e.items.length;++i){const o=await _t(i,e.items[i],t,n);if(typeof o=="number")i=o-1;else{if(o===le)return le;o===Oe&&(e.items.splice(i,1),i-=1)}}}else if(z(e)){n=Object.freeze(n.concat(e));const i=await _t("key",e.key,t,n);if(i===le)return le;i===Oe&&(e.key=null);const o=await _t("value",e.value,t,n);if(o===le)return le;o===Oe&&(e.value=null)}}return r}c(_t,"visitAsync_");function Co(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(Co,"initVisitor");function vo(s,e,t,n){if(typeof t=="function")return t(s,e,n);if(kt(e))return t.Map?.(s,e,n);if(Tt(e))return t.Seq?.(s,e,n);if(z(e))return t.Pair?.(s,e,n);if(V(e))return t.Scalar?.(s,e,n);if(Ue(e))return t.Alias?.(s,e,n)}c(vo,"callVisitor");function ko(s,e,t){const n=e[e.length-1];if(Y(n))n.items[s]=t;else if(z(n))s==="key"?n.key=t:n.value=t;else if(rt(n))n.contents=t;else{const r=Ue(n)?"alias":"scalar";throw new Error(`Cannot replace node with ${r} parent`)}}c(ko,"replaceNode");const mu={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},gu=c(s=>s.replace(/[!,[\]{}]/g,e=>mu[e]),"escapeTagName");class ae{static{c(this,"Directives")}constructor(e,t){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},ae.defaultYaml,e),this.tags=Object.assign({},ae.defaultTags,t)}clone(){const e=new ae(this.yaml,this.tags);return e.docStart=this.docStart,e}atDocument(){const e=new ae(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:ae.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},ae.defaultTags);break}return e}add(e,t){this.atNextDocument&&(this.yaml={explicit:ae.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},ae.defaultTags),this.atNextDocument=!1);const n=e.trim().split(/[ \t]+/),r=n.shift();switch(r){case"%TAG":{if(n.length!==2&&(t(0,"%TAG directive should contain exactly two parts"),n.length<2))return!1;const[i,o]=n;return this.tags[i]=o,!0}case"%YAML":{if(this.yaml.explicit=!0,n.length!==1)return t(0,"%YAML directive should contain exactly one part"),!1;const[i]=n;if(i==="1.1"||i==="1.2")return this.yaml.version=i,!0;{const o=/^\d+\.\d+$/.test(i);return t(6,`Unsupported YAML version ${i}`,o),!1}}default:return t(0,`Unknown directive ${r}`,!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,r]=e.match(/^(.*!)([^!]*)$/s);r||t(`The ${e} tag has no suffix`);const i=this.tags[n];if(i)try{return i+decodeURIComponent(r)}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+gu(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 r;if(e&&n.length>0&&X(e.contents)){const i={};it(e.contents,(o,a)=>{X(a)&&a.tag&&(i[a.tag]=!0)}),r=Object.keys(i)}else r=[];for(const[i,o]of n)i==="!!"&&o==="tag:yaml.org,2002:"||(!e||r.some(a=>a.startsWith(o)))&&t.push(`%TAG ${i} ${o}`);return t.join(`
|
|
7
|
-
`)}}ae.defaultYaml={explicit:!1,version:"1.2"},ae.defaultTags={"!!":"tag:yaml.org,2002:"};function
|
|
2
|
+
var Xc=Object.defineProperty;var c=(s,e)=>Xc(s,"name",{value:e,configurable:!0});import*as A from"node:fs";import{mkdirSync as Zc,writeFileSync as Qc,readFileSync as el}from"node:fs";import*as P from"node:path";import{join as Ks,dirname as tl}from"node:path";import{fileURLToPath as nl}from"node:url";import k from"chalk";import{Command as sl}from"commander";import{WorkspaceElementType as x,MembraneConfigLoader as rl,MembraneAxiosInstance as il,MembraneClient as Ai,WorkspaceElementSpecs as xe,WorkspaceSyncEventType as ol,ConnectorFileUpdateType as Us,NotFoundError as al,getMembraneElementPath as cl,parseMembraneElementPath as Qe,CONNECTOR_VERSION_DEVELOPMENT as Oi,compareWorkspaceExports as ll,WorkspaceElementChangeType as Ne,setValueAtLocator as Ws,extractMembraneErrorData as _e,getDataCollectionCreateFields as Js,excludeWriteOnlyFieldsFromSchema as $i,valueToSchema as En,getRequiredFieldsFromSchema as ul,getValueAtLocator as dl,walkSchema as xi,makeDataLocationPath as Ni,getDataCollectionUpdateFields as Hs}from"@membranehq/sdk";import Vs from"lodash/camelCase.js";import zs from"lodash/upperFirst.js";import fl from"code-block-writer";import hl from"lodash/uniqBy.js";import et,{createContext as Gs,useState as H,useEffect as pt,useContext as Ys,useId as pl,useRef as Xs,useLayoutEffect as _n,useMemo as ml}from"react";import{Box as C,Text as v,useInput as tt,render as Zs,Newline as gl}from"ink";import{jsx as g,jsxs as _,Fragment as In}from"react/jsx-runtime";import Pi from"swr/immutable";import Ri from"os";import K from"path";import yl from"conf";import Qs from"jsonwebtoken";import{AsyncLocalStorage as wl}from"async_hooks";import bl from"lodash/isEqual.js";import Se from"js-yaml";import*as Sl from"node:crypto";import{createHash as Cl}from"node:crypto";import vl from"chokidar";import{EventEmitter as kl}from"events";import{EventSource as Tl}from"eventsource";import U from"fs";import Mi from"archiver";import Li from"form-data";import Di from"unzipper";import*as El from"node:os";import"node:events";import ji from"ink-text-input";import{SWRConfig as _l}from"swr";import An from"ink-spinner";import{TextInput as Il,Select as Al,Spinner as Ol}from"@inkjs/ui";import{FastMCP as $l}from"fastmcp";import Ht from"axios";import{z as J}from"zod";import Fi from"ora";import Bi from"jszip";import{minimatch as xl}from"minimatch";import{exec as Nl}from"node:child_process";import er from"lodash/merge.js";import{faker as Vt}from"@faker-js/faker";import Pl from"lodash/template.js";import Rl from"lodash/templateSettings.js";function nt(s){if(s.type){if(Array.isArray(s.type))return{anyOf:s.type.map(t=>nt({...s,type:t}))};if(s.type==="array"){const t={type:"array",items:s.items?nt(s.items):{type:"object"}};return s.title&&(t.title=s.title),s.description&&(t.description=s.description),s.minItems!==void 0&&(t.minItems=s.minItems),s.maxItems!==void 0&&(t.maxItems=s.maxItems),s.uniqueItems!==void 0&&(t.uniqueItems=s.uniqueItems),t}}const e={};if(s.type&&!Array.isArray(s.type)&&(e.type=s.type),s.title&&(e.title=s.title),s.description&&(e.description=s.description),s.format&&(e.format=s.format),s.enum&&(e.enum=s.enum),s.default!==void 0&&(e.default=s.default),s.minimum!==void 0&&(e.minimum=s.minimum),s.maximum!==void 0&&(e.maximum=s.maximum),s.minLength!==void 0&&(e.minLength=s.minLength),s.maxLength!==void 0&&(e.maxLength=s.maxLength),s.maxItems!==void 0&&(e.maxItems=s.maxItems),s.readOnly!==void 0&&(e.readOnly=s.readOnly),s.writeOnly!==void 0&&(e.writeOnly=s.writeOnly),s.examples&&s.examples.length>0&&(e.example=s.examples[0]),s.properties){e.properties={};for(const[t,n]of Object.entries(s.properties))e.properties[t]=nt(n)}return s.anyOf&&(e.anyOf=s.anyOf.map(nt)),s.additionalProperties!==void 0&&(typeof s.additionalProperties=="boolean"?e.additionalProperties=s.additionalProperties:e.additionalProperties=nt(s.additionalProperties)),s.required&&(e.required=s.required),e}c(nt,"convertDataSchemaToOpenAPI");function Ml(s){const{membraneInterfaces:{actions:e}}=s,t=Ll(e);return JSON.stringify({openapi:"3.0.0",info:{title:"Membrane Actions API",version:"1.0.0",description:"Generated OpenAPI specification for Membrane actions"},paths:{},components:{schemas:t}},null,2)}c(Ml,"generateOpenAPIContent");function Ll(s){const e={};return s.forEach(t=>{const n=zs(Vs(t.key)),r={type:"object",properties:{id:{type:"string",description:"Request ID"},action:{type:"string",enum:[t.key]}},required:["id","action"]};if(t?.inputSchema){const a=nt(t.inputSchema);a.properties&&(r.properties={...r.properties,...a.properties}),a.required&&(r.required=[...r.required||[],...a.required])}e[`${n}Request`]=r;const i={type:"object",properties:{id:{type:"string",description:"Response ID"},success:{type:"boolean"},data:{type:"object"}},required:["id","success"]},o=t?.customOutputSchema||t?.outputSchema;if(o){const a=nt(o);i.properties={...i.properties,data:a}}e[`${n}Response`]=i}),e}c(Ll,"generateOpenAPISchemas");function Dl(s){const{membraneInterfaces:{actions:e}}=s,t=hl(e,"key"),n=new fl({indentNumberOfSpaces:2,newLine:`
|
|
3
|
+
`});return n.writeLine("// Generated TypeScript definitions for Membrane actions"),n.newLine(),n.writeLine("import type {"),n.writeLine(" ActionAccessor,"),n.writeLine(" ConnectionLevelActionAccessor,"),n.writeLine('} from "@membranehq/sdk";'),n.newLine(),jl(n,t),n.toString()}c(Dl,"generateTypeScriptContent");function jl(s,e){s.writeLine('declare module "@membranehq/sdk" {'),s.indent(()=>{e.forEach(t=>{const n=nr(t),r=t?.inputSchema;On(s,{interfaceName:n,properties:r?.properties,required:r?.required||[]});const i=sr(t),o=t?.customOutputSchema||t?.outputSchema;On(s,{interfaceName:i,properties:o?.properties,required:o?.required||[],fallbackContent:"result: unknown"}),s.newLine()}),On(s,{interfaceName:"MembraneClient",methods:e.map(t=>{const n=nr(t),r=sr(t);return{name:"action",parameters:`selector: "${t.key}"`,returnType:`ActionAccessor<${n}, ${r}>`}})}),s.newLine(),On(s,{interfaceName:"ConnectionAccessor",methods:e.map(t=>{const n=nr(t),r=sr(t);return{name:"action",parameters:`selector: "${t.key}"`,returnType:`ConnectionLevelActionAccessor<${n}, ${r}>`}})})}),s.writeLine("}")}c(jl,"generateModuleAugmentation");function On(s,e){const{interfaceName:t,properties:n,required:r=[],methods:i,fallbackContent:o}=e;s.writeLine(`interface ${t} {`),s.indent(()=>{n&&Object.keys(n).length>0&&Fl(s,n,r),i&&i.length>0&&(n&&Object.keys(n).length>0&&s.newLine(),i.forEach((a,l)=>{s.writeLine(`${a.name}(${a.parameters}): ${a.returnType};`),l<i.length-1&&s.newLine()})),o&&(!n||Object.keys(n).length===0)&&(!i||i.length===0)&&s.writeLine(o)}),s.writeLine("}")}c(On,"generateTypeScriptInterface");function Fl(s,e,t){Object.entries(e).forEach(([n,r])=>{const o=t.includes(n)?"":"?",a=tr(r);s.writeLine(`readonly ${n}${o}: ${a}`)})}c(Fl,"generateTypeScriptProperties");function tr(s){return s.type==="string"?s.enum?s.enum.map(e=>`'${e}'`).join(" | "):"string":s.type==="number"||s.type==="integer"?"number":s.type==="boolean"?"boolean":s.type==="array"?`${s.items?tr(s.items):"unknown"}[]`:s.type==="object"?s.properties?`{ ${Object.entries(s.properties).map(([t,n])=>{const i=(s.required||[]).includes(t)?"":"?",o=tr(n);return`readonly ${t}${i}: ${o}`}).join("; ")} }`:"Record<string, unknown>":"unknown"}c(tr,"convertJsonSchemaToTypeScript");function nr(s){return`${zs(Vs(s.key))}Input`}c(nr,"getInputTypeName");function sr(s){return`${zs(Vs(s.key))}Output`}c(sr,"getOutputTypeName");async function rr(s){const{out:e}=s;await A.promises.mkdir(e,{recursive:!0});const t=Bl(s);for(const[n,r]of Object.entries(t)){const i=P.join(e,n);await A.promises.writeFile(i,r,"utf-8")}}c(rr,"generateCode");function Bl(s){switch(s.target){case"openapi":return{"openapi.json":Ml(s)};case"typescript":return{"generated.d.ts":Dl(s)};default:throw new Error(`Unsupported target: ${s.target}`)}}c(Bl,"generateContent");const ir=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 codegen 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(`
|
|
4
|
+
`),"createExperimentalWarning$2");function ql(s,e){s.command("codegen").description("\u26A0\uFE0F EXPERIMENTAL: Generate code for easy integration within projects - This feature is experimental and will be changing rapidly. Use at your own risk.").requiredOption("--actions <actions>",'Comma-separated list of action names (e.g., "list-files,get-file-by-id")').requiredOption("--out <path>","Output directory for generated files").requiredOption("--target <type>","Target format: openapi or typescript").requiredOption("--schemasOnly","Generate only schemas without implementation").addHelpText("after",ir()).addHelpText("after",["",k.bold("Examples:"),` ${k.gray("\u25B8")} ${k.cyan("membrane codegen --actions list-files,get-file-by-id --out src/generated --target openapi --schemasOnly")}`,` ${k.gray("\u25B8")} ${k.cyan("membrane install --actions delete-file --out src/generated --target typescript --schemasOnly")}`,"",ir()].join(`
|
|
5
|
+
`)).action(async t=>{try{console.warn(ir()),console.error(k.cyan("\u{1F527} Membrane Codegen")),console.error("Status: Loading membrane interfaces...");const n=await Kl(e,t),r={out:t.out,target:t.target,schemasOnly:t.schemasOnly,membraneInterfaces:n};console.error(`Output: ${r.out}`),console.error(`Target: ${r.target}`),console.error(`Schemas Only: ${r.schemasOnly?"Yes":"No"}`),console.error(`Loaded ${n.actions.length} membrane interfaces`),console.error("Status: Generating code..."),await rr(r),console.error(k.green("\u2705 Code generation completed successfully!")),process.exit(0)}catch(n){console.error(k.red("\u274C Code generation failed:")),console.error(n instanceof Error?n.message:"Unknown error occurred"),process.exit(1)}})}c(ql,"setupCodegenCommand");async function Kl(s,e){return await s.fetchElements(),{actions:[...s.getSyncedElementsByType(x.Action).map(t=>t.data)].filter(t=>e.actions.includes(t.key||""))}}c(Kl,"loadMembraneInterfaces");const Ul="membrane",Wl="membrane.config.yml",or="https://api.integration.app",Jl="https://console.integration.app";function ar(){const s=process.cwd(),e=P.join(s,Ul),t=P.join(s,Wl),n=e,r=P.join(n,"workspace.yaml");return{membraneDirPath:e,configPath:t,payloadDirPath:n,workspaceDataFilePath:r}}c(ar,"getPaths");function qi(){return ar().membraneDirPath}c(qi,"getBasePath");const Hl={pat:{type:"string"},workspace:{type:"object"}},Ki=new yl({schema:Hl,configName:"config",cwd:K.join(Ri.homedir(),".membrane")}),Vl=c(s=>{Ki.set("pat",s)},"setPat"),Ui=c(()=>Ki.get("pat"),"getPat");class Wi{static{c(this,"AccountApiClient")}constructor(e=or){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=Ui();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 r=await fetch(`${this.apiBaseUrl}${e}`,{...t,headers:n});if(!r.ok){const o=await r.text();throw new Error(`API request failed: ${r.status} ${r.statusText} - ${o}`)}if(r.status===204)return{};const i=await r.text();return JSON.parse(i)}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 zl=c(s=>{const e=new Wi(or);return t=>e.get(t)},"createAccountApiFetcher");class Kt{static{c(this,"ConfigLoader")}static instance=null;sdkLoader;constructor(){this.sdkLoader=new rl}static getInstance(){return Kt.instance||(Kt.instance=new Kt),Kt.instance}loadConfig(e){e&&e!==this.sdkLoader.getCwd()&&this.sdkLoader.setCwd(e);try{return this.sdkLoader.loadConfig({validate:!0})}catch(t){if(t.message?.includes("Failed to parse"))throw t;return null}}clearCache(){this.sdkLoader.clearCache()}updateConfig(e){return this.sdkLoader.updateConfig(e)}saveToFile(e){return this.sdkLoader.saveToFile(e)}isCacheDefined(){return this.sdkLoader.hasValidConfig()}}const st=Kt.getInstance();function $n(s){return st.loadConfig(s)}c($n,"readProjectConfig");const Gl="membrane",Yl=["**/node_modules/**","**/.git/**","**/.DS_Store","**/Thumbs.db","**/*.tmp","**/*.swp","**/*.swo","**/*.log","**/*.lock","**/.cache/**","**/.next/**","**/.vscode/**","**/.idea/**","**/.logs/**"];function pe(s){return P.join(s,Gl)}c(pe,"getMembraneDir");const Ji=Ks(pe(process.cwd()),".logs");class Xl{static{c(this,"WorkspaceLogger")}_logs;verboseMode=!1;notificationHandler=null;constructor(){this._logs=[]}setNotificationHandler(e){this.notificationHandler=e}setVerboseMode(e){this.verboseMode=e}getVerboseMode(){return this.verboseMode}get logs(){return[...this._logs]}get latestLogs(){return this._logs.slice(this._logs.length-5)}log(e,t="info"){const n={timestamp:new Date().toISOString(),message:e,type:t};this._logs.push(n),this._logs=this._logs.slice(0,1e3),(t!=="debug"||this.verboseMode)&&this.notificationHandler&&this.notificationHandler.addLog(n)}info(e){this.log(e,"info")}success(e){this.log(e,"success")}warning(e){this.log(e,"warning")}error(e){this.log(e,"error")}debug(e){this.log(e,"debug")}clear(){this._logs=[]}saveLogsToFile(e){if(this._logs.length===0)return null;try{const t=new Date().toISOString().replace(/[:.]/g,"_"),n=e?`-${e}`:"",r=`${t}${n}.txt`;Zc(Ji,{recursive:!0});const i=Ks(Ji,r),o=this._logs.map(a=>`[${a.timestamp}] ${a.type?.toUpperCase()||"INFO"}: ${a.message}`).join(`
|
|
6
|
+
`);return Qc(i,o,"utf-8"),i}catch(t){return console.error("Failed to save logs:",t),null}}}const b=new Xl,Hi=new wl;class Vi{static{c(this,"RequestLogger")}constructor(e=il){this.axiosInstance=e}interceptorsConfigured=!1;setup(){if(this.interceptorsConfigured)return;const e=c(t=>(this.logError(t),Promise.reject(t)),"errorHandler");this.axiosInstance.interceptors.request.use(t=>{const n=Hi.getStore();t.metadata={startTime:Date.now(),skipErrorLog:n};const{method:r,url:i}=this.getRequestDetails(t);return b.debug(`[Request]: ${r} ${i}`),t},e),this.axiosInstance.interceptors.response.use(t=>{const{method:n,url:r}=this.getRequestDetails(t.config),i=this.getDuration(t.config),{status:o,statusText:a}=t;return b.debug(`[Response]: ${n} ${r} - ${o} ${a} (${i}ms)`),t},e),this.interceptorsConfigured=!0}static withSkipErrorLog(e){return Hi.run(!0,e)}getRequestDetails(e){const t=e?.method?.toUpperCase()??"UNKNOWN";if(!e?.url)return{method:t,url:"unknown"};if(e.url.startsWith("http"))return{method:t,url:e.url};const r=`${e.baseURL??""}/${e.url}`.replace(/\/+/g,"/").replace(/:\//,"://");return{method:t,url:r}}getDuration(e){return Date.now()-(e?.metadata?.startTime??Date.now())}logError(e){if(e.config?.metadata?.skipErrorLog)return;const{method:t,url:n}=this.getRequestDetails(e.config),r=this.getDuration(e.config);if(e.response){const{status:i,statusText:o}=e.response;b.error(`[Response]: ${t} ${n} - ${i} ${o} (${r}ms)`),e.response.data&&b.error(`[Response Data]: ${JSON.stringify(e.response.data,null,2)}`)}}}class Zl{static{c(this,"MembraneAPIManager")}client=null;currentConfig=null;tokenExpiry=0;requestTimes=[];maxRequestsPerSecond=80;windowSizeMs=1e3;semaphore=0;maxConcurrentRequests;maxRetries;retryDelay;requestTimeout;enableJitter;semaphoreQueue=[];rateLimitMutex=Promise.resolve();requestLogger=null;constructor(e={}){this.init(e)}init(e={}){this.windowSizeMs=e.windowSizeMs??1e3,this.maxRequestsPerSecond=e.maxRequestsPerSecond??80,this.maxConcurrentRequests=e.maxConcurrentRequests??Math.max(1,Math.min(Math.floor(this.maxRequestsPerSecond/4),20)),this.maxRetries=e.maxRetries??3,this.retryDelay=e.retryDelay??1e3,this.requestTimeout=e.requestTimeout??12e4,this.enableJitter=e.enableJitter!==!1,this.requestLogger=new Vi,this.requestLogger.setup()}async withClient(e,t=!0,n=process.cwd()){const r=c(async()=>{try{return await this.withRetry(async()=>{const i=await this.getClient(n);await this.acquireSemaphore();try{return await this.waitIfNeeded(),this.recordRequest(),await this.withTimeout(e(i),this.requestTimeout)}finally{this.releaseSemaphore()}},"API request")}catch(i){if(t)throw i;return}},"executeRequest");return t?r():Vi.withSkipErrorLog(r)}async generateAccessToken(e,t){return Qs.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=$n(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 Ai({token:t,apiUri:e.apiUri})}async getClient(e=process.cwd()){const t=this.getCurrentConfig(e);if(!t)throw new Error("Unable to create MembraneClient: No workspace configuration found.");const n=!this.currentConfig||this.currentConfig.workspaceKey!==t.workspaceKey||this.currentConfig.workspaceSecret!==t.workspaceSecret||this.currentConfig.apiUri!==t.apiUri,r=!this.isTokenValid()||this.tokenExpiry-Date.now()<3e5;return(!this.client||n||r)&&(this.client=await this.createClient(t)),this.client}clearClient(){this.client=null,this.currentConfig=null,this.tokenExpiry=0,this.requestTimes=[],this.semaphore=0,this.semaphoreQueue=[],this.rateLimitMutex=Promise.resolve()}getCurrentConfigInfo(){return this.currentConfig}async waitIfNeeded(){this.rateLimitMutex=this.rateLimitMutex.then(async()=>{for(this.cleanOldRequests();this.requestTimes.length>=this.maxRequestsPerSecond;){const t=this.requestTimes[0]+this.windowSizeMs-Date.now()+10;if(t>0)await new Promise(n=>setTimeout(n,t)),this.cleanOldRequests();else break}}),await this.rateLimitMutex}recordRequest(){this.requestTimes.push(Date.now())}cleanOldRequests(){const e=Date.now()-this.windowSizeMs;this.requestTimes=this.requestTimes.filter(t=>t>e)}getRequestCount(){return this.cleanOldRequests(),this.requestTimes.length}async acquireSemaphore(){if(this.semaphore<this.maxConcurrentRequests){this.semaphore++;return}return new Promise(e=>{this.semaphoreQueue.push(e)})}releaseSemaphore(){if(this.semaphore--,this.semaphoreQueue.length>0){const e=this.semaphoreQueue.shift();this.semaphore++,e()}}async withRetry(e,t="operation"){let n;for(let r=0;r<=this.maxRetries;r++)try{return await e()}catch(i){if(n=i,!this.isRetryableError(i)||r===this.maxRetries)throw i;const o=new Date().toISOString(),a=r+2;b.debug(`[${o}] Retrying ${t} (attempt ${a}/${this.maxRetries+1})`);let l=this.retryDelay*Math.pow(2,r);if(this.enableJitter){const u=l*.25*(Math.random()*2-1);l=Math.max(0,l+u)}await new Promise(u=>setTimeout(u,l))}throw n||new Error("Unknown error occurred during retry attempts")}isRetryableError(e){if(!e)return!1;const t=(e.message||e.toString()||"").toLowerCase(),n=e.code;return n&&["econnrefused","enotfound","econnreset","etimedout","ehostunreach","enetunreach"].includes(n.toLowerCase())?!0:["econnrefused","connection refused","network error","timeout","socket hang up","request timeout","dns lookup failed"].some(o=>t.includes(o))}async withTimeout(e,t){let n;const r=new Promise((i,o)=>{n=setTimeout(()=>o(new Error(`Request timeout after ${t}ms`)),t)});try{const i=await Promise.race([e,r]);return n&&clearTimeout(n),i}catch(i){throw n&&clearTimeout(n),i}}}const D=new Zl;async function zi(s){const e=await D.withClient(t=>t.get("org-workspace-id"),!0,s);if(!e)throw new Error("Failed to get workspace ID");return e.id}c(zi,"getWorkspaceId");var W={},xn={},Gi;function Yi(){if(Gi)return xn;Gi=1,Object.defineProperty(xn,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/[^A-Za-z0-9]+/g,"$").replace(/([a-z])([A-Z])/g,function(t,n,r){return n+"$"+r}).toLowerCase().replace(/(\$)(\w)/g,function(t,n,r){return r.toUpperCase()}):""}return c(s,"toCamelCase"),xn.default=s,xn}c(Yi,"requireJsCamelcase");var Nn={},Xi;function Zi(){if(Xi)return Nn;Xi=1,Object.defineProperty(Nn,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(t,n,r){return n+"_"+r.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g,"_").toLowerCase():""}return c(s,"toSnakeCase"),Nn.default=s,Nn}c(Zi,"requireJsSnakecase");var Pn={},Qi;function eo(){if(Qi)return Pn;Qi=1,Object.defineProperty(Pn,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"$").replace(/[^A-Za-z0-9]+/g,"$").replace(/([a-z])([A-Z])/g,function(t,n,r){return n+"$"+r}).toLowerCase().replace(/(\$)(\w?)/g,function(t,n,r){return r.toUpperCase()}):""}return c(s,"toPascalCase"),Pn.default=s,Pn}c(eo,"requireJsPascalcase");var Rn={},to;function Ql(){if(to)return Rn;to=1,Object.defineProperty(Rn,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(t,n,r){return n+"_"+r.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g,".").toLowerCase():""}return c(s,"toDotCase"),Rn.default=s,Rn}c(Ql,"requireJsDotcase");var Mn={},no;function eu(){if(no)return Mn;no=1,Object.defineProperty(Mn,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(t,n,r){return n+"_"+r.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g,"/").toLowerCase():""}return c(s,"toPathCase"),Mn.default=s,Mn}c(eu,"requireJsPathcase");var Ln={},so;function tu(){if(so)return Ln;so=1,Object.defineProperty(Ln,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(t,n,r){return n+"_"+r.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g," ").toLowerCase():""}return c(s,"toTextCase"),Ln.default=s,Ln}c(tu,"requireJsTextcase");var Dn={},ro;function nu(){if(ro)return Dn;ro=1,Object.defineProperty(Dn,"__esModule",{value:!0});function s(e){if(e===void 0&&(e=""),!e)return"";var t=String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(n,r,i){return r+"_"+i.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g," ").toLowerCase();return t.charAt(0).toUpperCase()+t.slice(1)}return c(s,"toSentenceCase"),Dn.default=s,Dn}c(nu,"requireJsSentencecase");var jn={},io;function su(){if(io)return jn;io=1,Object.defineProperty(jn,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(t,n,r){return n+"_"+r.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g," ").toLowerCase().replace(/( ?)(\w+)( ?)/g,function(t,n,r,i){return n+r.charAt(0).toUpperCase()+r.slice(1)+i}):""}return c(s,"toHeaderCase"),jn.default=s,jn}c(su,"requireJsHeadercase");var Fn={},oo;function ao(){if(oo)return Fn;oo=1,Object.defineProperty(Fn,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(t,n,r){return n+"_"+r.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g,"-").toLowerCase():""}return c(s,"toKebabCase"),Fn.default=s,Fn}c(ao,"requireJsKebabcase");var mt={},cr={},co;function gt(){return co||(co=1,function(s){Object.defineProperty(s,"__esModule",{value:!0}),s.belongToTypes=s.isValidObject=s.isArrayObject=s.validateOptions=s.DefaultOption=void 0,s.DefaultOption={recursive:!1,recursiveInArray:!1,keepTypesOnRecursion:[]},s.validateOptions=function(e){return e===void 0&&(e=s.DefaultOption),e.recursive==null?e=s.DefaultOption:e.recursiveInArray==null&&(e.recursiveInArray=!1),e},s.isArrayObject=function(e){return e!=null&&Array.isArray(e)},s.isValidObject=function(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)},s.belongToTypes=function(e,t){return(t||[]).some(function(n){return e instanceof n})}}(cr)),cr}c(gt,"requireUtils");var lo;function ru(){if(lo)return mt;lo=1;var s=mt&&mt.__spreadArrays||function(){for(var n=0,r=0,i=arguments.length;r<i;r++)n+=arguments[r].length;for(var o=Array(n),a=0,r=0;r<i;r++)for(var l=arguments[r],u=0,d=l.length;u<d;u++,a++)o[a]=l[u];return o};Object.defineProperty(mt,"__esModule",{value:!0});var e=gt();function t(n,r){if(r===void 0&&(r=e.DefaultOption),!e.isValidObject(n))return null;r=e.validateOptions(r);var i={};return Object.keys(n).forEach(function(o){var a=n[o],l=o.toLowerCase();r.recursive&&(e.isValidObject(a)?e.belongToTypes(a,r.keepTypesOnRecursion)||(a=t(a,r)):r.recursiveInArray&&e.isArrayObject(a)&&(a=s(a).map(function(u){var d=u;if(e.isValidObject(u))e.belongToTypes(d,r.keepTypesOnRecursion)||(d=t(u,r));else if(e.isArrayObject(u)){var f=t({key:u},r);d=f.key}return d}))),i[l]=a}),i}return c(t,"lowerKeys"),mt.default=t,mt}c(ru,"requireLowercaseKeysObject");var yt={},uo;function iu(){if(uo)return yt;uo=1;var s=yt&&yt.__spreadArrays||function(){for(var n=0,r=0,i=arguments.length;r<i;r++)n+=arguments[r].length;for(var o=Array(n),a=0,r=0;r<i;r++)for(var l=arguments[r],u=0,d=l.length;u<d;u++,a++)o[a]=l[u];return o};Object.defineProperty(yt,"__esModule",{value:!0});var e=gt();function t(n,r){if(r===void 0&&(r=e.DefaultOption),!e.isValidObject(n))return null;r=e.validateOptions(r);var i={};return Object.keys(n).forEach(function(o){var a=n[o],l=o.toUpperCase();r.recursive&&(e.isValidObject(a)?e.belongToTypes(a,r.keepTypesOnRecursion)||(a=t(a,r)):r.recursiveInArray&&e.isArrayObject(a)&&(a=s(a).map(function(u){var d=u;if(e.isValidObject(u))e.belongToTypes(d,r.keepTypesOnRecursion)||(d=t(u,r));else if(e.isArrayObject(u)){var f=t({key:u},r);d=f.key}return d}))),i[l]=a}),i}return c(t,"upperKeys"),yt.default=t,yt}c(iu,"requireUppercaseKeysObject");var wt={},fo;function ou(){if(fo)return wt;fo=1;var s=wt&&wt.__spreadArrays||function(){for(var r=0,i=0,o=arguments.length;i<o;i++)r+=arguments[i].length;for(var a=Array(r),l=0,i=0;i<o;i++)for(var u=arguments[i],d=0,f=u.length;d<f;d++,l++)a[l]=u[d];return a};Object.defineProperty(wt,"__esModule",{value:!0});var e=gt(),t=Yi();function n(r,i){if(i===void 0&&(i=e.DefaultOption),!e.isValidObject(r))return null;i=e.validateOptions(i);var o={};return Object.keys(r).forEach(function(a){var l=r[a],u=t.default(a);i.recursive&&(e.isValidObject(l)?e.belongToTypes(l,i.keepTypesOnRecursion)||(l=n(l,i)):i.recursiveInArray&&e.isArrayObject(l)&&(l=s(l).map(function(d){var f=d;if(e.isValidObject(d))e.belongToTypes(f,i.keepTypesOnRecursion)||(f=n(d,i));else if(e.isArrayObject(d)){var h=n({key:d},i);f=h.key}return f}))),o[u]=l}),o}return c(n,"camelKeys"),wt.default=n,wt}c(ou,"requireCamelcaseKeysObject");var bt={},ho;function au(){if(ho)return bt;ho=1;var s=bt&&bt.__spreadArrays||function(){for(var r=0,i=0,o=arguments.length;i<o;i++)r+=arguments[i].length;for(var a=Array(r),l=0,i=0;i<o;i++)for(var u=arguments[i],d=0,f=u.length;d<f;d++,l++)a[l]=u[d];return a};Object.defineProperty(bt,"__esModule",{value:!0});var e=gt(),t=Zi();function n(r,i){if(i===void 0&&(i=e.DefaultOption),!e.isValidObject(r))return null;i=e.validateOptions(i);var o={};return Object.keys(r).forEach(function(a){var l=r[a],u=t.default(a);i.recursive&&(e.isValidObject(l)?e.belongToTypes(l,i.keepTypesOnRecursion)||(l=n(l,i)):i.recursiveInArray&&e.isArrayObject(l)&&(l=s(l).map(function(d){var f=d;if(e.isValidObject(d))e.belongToTypes(f,i.keepTypesOnRecursion)||(f=n(d,i));else if(e.isArrayObject(d)){var h=n({key:d},i);f=h.key}return f}))),o[u]=l}),o}return c(n,"snakeKeys"),bt.default=n,bt}c(au,"requireSnakecaseKeysObject");var St={},po;function cu(){if(po)return St;po=1;var s=St&&St.__spreadArrays||function(){for(var r=0,i=0,o=arguments.length;i<o;i++)r+=arguments[i].length;for(var a=Array(r),l=0,i=0;i<o;i++)for(var u=arguments[i],d=0,f=u.length;d<f;d++,l++)a[l]=u[d];return a};Object.defineProperty(St,"__esModule",{value:!0});var e=gt(),t=eo();function n(r,i){if(i===void 0&&(i=e.DefaultOption),!e.isValidObject(r))return null;i=e.validateOptions(i);var o={};return Object.keys(r).forEach(function(a){var l=r[a],u=t.default(a);i.recursive&&(e.isValidObject(l)?e.belongToTypes(l,i.keepTypesOnRecursion)||(l=n(l,i)):i.recursiveInArray&&e.isArrayObject(l)&&(l=s(l).map(function(d){var f=d;if(e.isValidObject(d))e.belongToTypes(f,i.keepTypesOnRecursion)||(f=n(d,i));else if(e.isArrayObject(d)){var h=n({key:d},i);f=h.key}return f}))),o[u]=l}),o}return c(n,"pascalKeys"),St.default=n,St}c(cu,"requirePascalcaseKeysObject");var Ct={},mo;function lu(){if(mo)return Ct;mo=1;var s=Ct&&Ct.__spreadArrays||function(){for(var r=0,i=0,o=arguments.length;i<o;i++)r+=arguments[i].length;for(var a=Array(r),l=0,i=0;i<o;i++)for(var u=arguments[i],d=0,f=u.length;d<f;d++,l++)a[l]=u[d];return a};Object.defineProperty(Ct,"__esModule",{value:!0});var e=gt(),t=ao();function n(r,i){if(i===void 0&&(i=e.DefaultOption),!e.isValidObject(r))return null;i=e.validateOptions(i);var o={};return Object.keys(r).forEach(function(a){var l=r[a],u=t.default(a);i.recursive&&(e.isValidObject(l)?e.belongToTypes(l,i.keepTypesOnRecursion)||(l=n(l,i)):i.recursiveInArray&&e.isArrayObject(l)&&(l=s(l).map(function(d){var f=d;if(e.isValidObject(d))e.belongToTypes(f,i.keepTypesOnRecursion)||(f=n(d,i));else if(e.isArrayObject(d)){var h=n({key:d},i);f=h.key}return f}))),o[u]=l}),o}return c(n,"kebabKeys"),Ct.default=n,Ct}c(lu,"requireKebabcaseKeysObject");var go;function uu(){if(go)return W;go=1,Object.defineProperty(W,"__esModule",{value:!0}),W.kebabKeys=W.pascalKeys=W.snakeKeys=W.camelKeys=W.upperKeys=W.lowerKeys=W.toLowerCase=W.toUpperCase=W.toKebabCase=W.toHeaderCase=W.toSentenceCase=W.toTextCase=W.toPathCase=W.toDotCase=W.toPascalCase=W.toSnakeCase=W.toCamelCase=void 0;var s=Yi();W.toCamelCase=s.default;var e=Zi();W.toSnakeCase=e.default;var t=eo();W.toPascalCase=t.default;var n=Ql();W.toDotCase=n.default;var r=eu();W.toPathCase=r.default;var i=tu();W.toTextCase=i.default;var o=nu();W.toSentenceCase=o.default;var a=su();W.toHeaderCase=a.default;var l=ao();W.toKebabCase=l.default;var u=ru();W.lowerKeys=u.default;var d=iu();W.upperKeys=d.default;var f=ou();W.camelKeys=f.default;var h=au();W.snakeKeys=h.default;var m=cu();W.pascalKeys=m.default;var y=lu();W.kebabKeys=y.default;var p=c(function(E){return String(E||"").toLowerCase()},"toLowerCase");W.toLowerCase=p;var w=c(function(E){return String(E||"").toUpperCase()},"toUpperCase");W.toUpperCase=w;var T={toCamelCase:s.default,toSnakeCase:e.default,toPascalCase:t.default,toDotCase:n.default,toPathCase:r.default,toTextCase:i.default,toSentenceCase:o.default,toHeaderCase:a.default,toKebabCase:l.default,toUpperCase:w,toLowerCase:p,lowerKeys:u.default,upperKeys:d.default,camelKeys:f.default,snakeKeys:h.default,pascalKeys:m.default,kebabKeys:y.default};return W.default=T,W}c(uu,"requireLib");var lr,yo;function du(){return yo||(yo=1,lr=uu()),lr}c(du,"requireJsConvertCase");var fu=du();const Pe={UPDATE:"update",DELETE:"delete",CREATE:"create"},ce={INCOMING:"incoming",OUTGOING:"outgoing"},Ie={[x.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")},[x.Connector]:{element:"connector",elements:"connectors",exportable:!1},[x.Action]:{element:"action",elements:"actions",integrationSpecific:!0,exportCleanup:c(s=>(delete s.integration,s),"exportCleanup")},[x.AppDataSchema]:{element:"appDataSchema",elements:"appDataSchemas"},[x.AppEventType]:{element:"appEventType",elements:"appEventTypes"},[x.DataLinkTable]:{element:"dataLinkTable",elements:"dataLinkTables"},[x.DataSource]:{element:"dataSource",elements:"dataSources",parentKey:"universalDataSourceId",integrationSpecific:!0},[x.FieldMapping]:{element:"fieldMapping",elements:"fieldMappings",integrationSpecific:!0,parentKey:"universalFieldMappingId",exportCleanup:c(s=>(delete s.dataSourceId,s),"exportCleanup")},[x.Flow]:{element:"flow",elements:"flows",integrationSpecific:!0,parentKey:"universalFlowId"},[x.Package]:{element:"package",elements:"packages",integrationSpecific:!0}},hu=["id","workspaceId","integrationId","createdAt","updatedAt","revision","archivedAt","baseUri","state","appliedToIntegrations","dependencies"],wo=[x.Action,x.FieldMapping,x.Flow,x.DataSource,x.Package];class Z{static{c(this,"Element")}type;key;integrationKey;data;constructor(e,t,n,r){if(!r)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=r,this.integrationKey=n||Z.extractIntegrationKey(r)}get id(){return Z.makeId(this.type,this.key,this.integrationKey)}get dirPath(){const e=xe[this.type].apiPath;if(this.integrationKey){const t=xe[x.Integration].apiPath;return P.join(t,this.integrationKey,e,this.key)}return P.join(e,this.key)}get path(){return P.join(this.dirPath,"spec.yaml")}get relativePath(){return P.relative(pe(process.cwd()),this.path)}get absolutePath(){return P.resolve(P.join(pe(process.cwd()),this.path))}isEqual(e){if(this.id!==e.id)return!1;const t=this.clean(),n=e.clean();return bl(t,n)}hasParent(){if(this.data?.parentUuid)return!0;const e=this.getParentKey();return!!e&&!!this.data?.[e]}clean(){const e={...this.data};return hu.forEach(t=>{delete e[t]}),Object.keys(e).forEach(t=>{t.match(/universal.*Revision/)&&delete e[t]}),e}getParentKey(){let e="parentId";return Ie?.[this.type]?.parentKey&&(e=Ie?.[this.type]?.parentKey),e}static new(e,t,n,r){return new Z(e,t,n,r)}static fromData(e,t){if(!t?.key)throw new Error(`Element missing key: ${JSON.stringify(t)}`);const n=this.extractIntegrationKey(t);return new Z(e,t.key,n,t)}static fromPathAndData(e,t){const n=Z.parsePath(e);if(!t)return;const r=t?.key||n?.key;return n?Z.new(n.type,r,n.integrationKey,t):void 0}static fromElement(e){return new Z(e.type,e.key,e.integrationKey,{...e.data})}static idFromPath(e){const t=Z.parsePath(e);if(t)return Z.makeId(t.type,t.key,t.integrationKey)}static makeId(e,t,n){return e===x.Integration?`${e}:${t}`:Z.isIntegrationSpecific(e)?`${n||"universal"}:${e}:${t}`:`${e}:${t}`}static parsePath(e){const t=this.getRelativePath(e);if(!this.isElementFile(t))return;const n=Object.values(xe).map(l=>l.apiPath).join("|"),r=new RegExp(`^(?<elementType>${n})/(?<elementKey>[^/]+)/spec\\.ya?ml$`),i=t.match(r);if(i?.groups){const{elementType:l,elementKey:u}=i.groups,d=this.getElementTypeFromPath(l);if(d)return{type:d,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:d}=a.groups,f=this.getElementTypeFromPath(u);if(f)return{type:f,key:d,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 getElementTypeFromPath(e){return Object.values(x).find(t=>xe[t].apiPath===e)}static getRelativePath(e){return P.relative(pe(process.cwd()),e)}static isIntegrationSpecific(e){return wo.includes(e)}static canBeIntegrationSpecific(e){return wo.includes(e)}}class bo{static{c(this,"BaseWorkspaceElementsRepository")}constructor(e){this.cache=e}connectorsMapping;sourceCache;setConnectorsMapping(e){this.connectorsMapping=e}setSourceCache(e){this.sourceCache=e}async getElements(){const e=[];try{const t=await this.getIntegrations();e.push(...t);const n=[x.Integration,x.Connector],r=Object.keys(Ie),i=await Promise.all(r.filter(o=>!n.includes(o)).map(async o=>this.getElementsByType(o,t)));for(const o of i)e.push(...o)}catch(t){throw b.error(`Failed to get elements: ${t}`),t}return e}async putElement(e){let t=this.cache.get(e.id);return t&&!e.data.id&&t.data.id&&(e.data.id=t.data.id),!t&&e.data.id&&(t=await this.getByInternalId(e.data.id,e.type,!1)),e.data.id&&t?t=await this.updateElement(e,t,{elements:this.cache.getAll(),connectorsMapping:this.connectorsMapping,sourceElements:this.sourceCache?.getAll()}):t=await this.createElement(e,{elements:this.cache.getAll(),connectorsMapping:this.connectorsMapping,sourceElements:this.sourceCache?.getAll()}),t}async getElementsByType(e,t){return[]}async createElement(e,t){return e}async updateElement(e,t,n){return t}async getElement(e){}async getIntegrations(){return[]}async getByInternalId(e,t,n=!0){}async deleteElement(e,t){}}function ur(s,e=!0){if(A.existsSync(s))try{const t=A.readFileSync(s,"utf8");return Se.load(t)||void 0}catch(t){if(!e)return;if(t instanceof Error){const n=P.relative(process.cwd(),s);throw new Error(`Failed to parse YAML file "${n}": ${t.message}`)}throw t}}c(ur,"readYaml$1");function pu(s,e,t){try{const n=Se.dump(e,t);A.writeFileSync(s,n,"utf8")}catch(n){if(n instanceof Error){const r=P.relative(process.cwd(),s);throw new Error(`Failed to write YAML file "${r}": ${n.message}`)}throw n}}c(pu,"writeYaml$1");class mu extends bo{static{c(this,"LocalWorkspaceElementsRepository")}basePath;constructor(e){super(e),this.basePath=pe(process.cwd())}async getElementsByType(e,t){const n=[],r=P.join(this.basePath,xe[e].apiPath),i=await this.readElementsInDir(r);n.push(...i);for(const o of t){const a=P.join(this.basePath,xe[x.Integration].apiPath,o.key,xe[e].apiPath),l=await this.readElementsInDir(a);n.push(...l)}return n.length>0&&b.debug(`[local] Fetched ${n.length} ${e}${n.length!==1?"s":""}`),n}async getElement(e){return this.readElement(e.path)}async createElement(e){return this.updateElement(e,e)}async updateElement(e,t){if(!e.data)throw new Error("Element must have data to write");const n=P.join(this.basePath,t.dirPath),r=P.join(this.basePath,t.path);return A.existsSync(n)||A.mkdirSync(n,{recursive:!0}),pu(r,e.data),b.debug(`[local] Written ${t.relativePath}`),t}async deleteElement(e){const t=P.join(this.basePath,e.path),n=P.join(this.basePath,e.dirPath);A.existsSync(t)&&A.rmSync(t,{force:!0}),this.pruneEmptyDir(n),b.debug(`[local] Deleted ${e.relativePath}`)}async getIntegrations(){const e=P.join(this.basePath,xe[x.Integration].apiPath);return this.readElementsInDir(e)}async readElement(e){const t=ur(e);if(t)return Z.fromPathAndData(e,t)}async readElementsInDir(e){const t=[];if(!A.existsSync(e))return t;const n=A.readdirSync(e);if(n.length===0)return t;const r=n.map(async o=>{const a=P.join(e,o,"spec.yaml");return this.readElement(a)});return(await Promise.all(r)).filter(o=>o!=null)}pruneEmptyDir(e){try{if(!e.startsWith(this.basePath)||e===this.basePath||!A.existsSync(e)||A.readdirSync(e).length>0)return;A.rmdirSync(e),this.pruneEmptyDir(P.dirname(e))}catch(t){console.warn(`Failed to prune empty directory ${e}:`,t)}}}class gu extends bo{static{c(this,"RemoteWorkspaceElementsRepository")}async getElementsByType(e,t){const n=Z.canBeIntegrationSpecific(e),r=await this.findAll(e,n?{layer:"universal"}:{});if(!Z.canBeIntegrationSpecific(e))return r;for(const i of t){const o=i.key,a=i.data.id,l=await this.findAll(e,a?{integrationId:a}:{integrationKey:o},o);r.push(...l)}return r.length>0&&b.debug(`[remote] Fetched ${r.length} ${e}${r.length!==1?"s":""}`),r}async getElement(e){const t=await D.withClient(n=>n[Ie[e.type].element](e.data.id).get());return Z.fromData(e.type,t)}async createElement(e,t){const n=e.clean();if(this.transformElementForCreate(e,n,t),e.hasParent()&&n.integrationId&&!n.isCustomized){const o=e.getParentKey(),a=new Set(["uuid","integrationId",o,"meta","integrationUuid","parentUuid"]);Object.keys(n).forEach(l=>{a.has(l)||delete n[l]})}const r=await D.withClient(o=>o[Ie[e.type].elements].create(n)),i=Z.fromData(e.type,r);return b.debug(`[remote] Created ${i.id}`),i}async updateElement(e,t,n){if(!e.data.id)throw new Error("Element must have an id to update");t.data.archivedAt&&await D.withClient(a=>a[Ie[e.type].element](t.data.id).restore());const r=e.clean();if(this.transformElementForUpdate(e,r,n),e.hasParent()&&r.integrationId&&!r.isCustomized)return b.debug(`[remote] Skipped update for ${t.id} (non-customized)`),t;const i=await D.withClient(a=>a[Ie[e.type].element](t.data.id).put(r)),o=Z.fromData(t.type,i);return b.debug(`[remote] Updated ${t.id}`),o}async deleteElement(e){if(!e.data.id)throw new Error("Element must have an id to delete");await D.withClient(t=>t[Ie[e.type].element](e.data.id).archive()),b.debug(`[remote] Deleted ${e.id}`)}async getIntegrations(){const e=await D.withClient(n=>n.integrations.findAll());if(!e)return[];const t=e.map(n=>Z.fromData(x.Integration,n));return t.length>0&&b.debug(`[remote] Fetched ${t.length} integrations`),t}async getByInternalId(e,t){let n;if(n=await D.withClient(r=>r[Ie[t].element](e).get(),!1),!!n)return Z.fromData(t,n)}transformElementForCreate(e,t,n){if(e.integrationKey){const r=n.elements.find(i=>i.type===x.Integration&&i.key===e.integrationKey);if(r)t.integrationId=r.data.id;else throw new Error(`Dependency integration ${e.integrationKey} not found for ${e.id}`)}if(e.type===x.Integration){const r=n.connectorsMapping?.[t.connectorId];r&&(t.connectorId=r)}this.transformPackageDependencies(e,t,n),this.transformParentDependency(e,t,n)}transformElementForUpdate(e,t,n){if(e.type===x.Integration){const r=n.connectorsMapping?.[t.connectorId];r&&(t.connectorId=r)}if(e.integrationKey){t.integrationKey=e.integrationKey;const r=n.elements.find(i=>i.type===x.Integration&&i.key===e.integrationKey);if(r)t.integrationId=r.data.id;else throw new Error(`Dependency integration ${e.integrationKey} not found for ${e.id}`)}this.transformPackageDependencies(e,t,n),this.transformParentDependency(e,t,n)}transformPackageDependencies(e,t,n){if(e.type!==x.Package||!t.elements)return;const r=t.elements.map(i=>{const a=(n.sourceElements||n.elements).find(u=>u.data.id===i.id&&u.type===i.type);if(!a)throw new Error(`Package element ${i.type} with id ${i.id} not found in source workspace for package ${e.id}`);const l=n.elements.find(u=>u.type===i.type&&u.key===a.key&&u.integrationKey===a.integrationKey);if(!l)throw new Error(`Package element ${i.type} with key ${a.key} not found in target workspace for package ${e.id}`);return{id:l.data.id,type:i.type}});t.elements=r}transformParentDependency(e,t,n){if(!e.hasParent())return;const r=e.getParentKey();if(!r)return;const i=n.elements.find(o=>o.type===e.type&&o.key===e.key&&!o.hasParent());if(i)t[r]=i.data.id;else throw new Error(`Parent ${e.getParentKey()} not found for ${e.id}`)}async findAll(e,t={},n){const r=await D.withClient(i=>i[Ie[e].elements].findAll(t));return r?r.filter(i=>i.key).map(i=>(n&&!i.integrationKey&&(i.integrationKey=n),Z.fromData(e,i))):[]}}const dr=Symbol.for("yaml.alias"),fr=Symbol.for("yaml.document"),Ke=Symbol.for("yaml.map"),So=Symbol.for("yaml.pair"),Ae=Symbol.for("yaml.scalar"),vt=Symbol.for("yaml.seq"),me=Symbol.for("yaml.node.type"),Ue=c(s=>!!s&&typeof s=="object"&&s[me]===dr,"isAlias"),rt=c(s=>!!s&&typeof s=="object"&&s[me]===fr,"isDocument"),kt=c(s=>!!s&&typeof s=="object"&&s[me]===Ke,"isMap"),z=c(s=>!!s&&typeof s=="object"&&s[me]===So,"isPair"),V=c(s=>!!s&&typeof s=="object"&&s[me]===Ae,"isScalar$1"),Tt=c(s=>!!s&&typeof s=="object"&&s[me]===vt,"isSeq");function Y(s){if(s&&typeof s=="object")switch(s[me]){case Ke:case vt:return!0}return!1}c(Y,"isCollection$1");function X(s){if(s&&typeof s=="object")switch(s[me]){case dr:case Ke:case Ae:case vt:return!0}return!1}c(X,"isNode");const Co=c(s=>(V(s)||Y(s))&&!!s.anchor,"hasAnchor"),le=Symbol("break visit"),vo=Symbol("skip children"),Oe=Symbol("remove node");function it(s,e){const t=ko(e);rt(s)?Et(null,s.contents,t,Object.freeze([s]))===Oe&&(s.contents=null):Et(null,s,t,Object.freeze([]))}c(it,"visit$1"),it.BREAK=le,it.SKIP=vo,it.REMOVE=Oe;function Et(s,e,t,n){const r=To(s,e,t,n);if(X(r)||z(r))return Eo(s,n,r),Et(s,r,t,n);if(typeof r!="symbol"){if(Y(e)){n=Object.freeze(n.concat(e));for(let i=0;i<e.items.length;++i){const o=Et(i,e.items[i],t,n);if(typeof o=="number")i=o-1;else{if(o===le)return le;o===Oe&&(e.items.splice(i,1),i-=1)}}}else if(z(e)){n=Object.freeze(n.concat(e));const i=Et("key",e.key,t,n);if(i===le)return le;i===Oe&&(e.key=null);const o=Et("value",e.value,t,n);if(o===le)return le;o===Oe&&(e.value=null)}}return r}c(Et,"visit_");async function Bn(s,e){const t=ko(e);rt(s)?await _t(null,s.contents,t,Object.freeze([s]))===Oe&&(s.contents=null):await _t(null,s,t,Object.freeze([]))}c(Bn,"visitAsync"),Bn.BREAK=le,Bn.SKIP=vo,Bn.REMOVE=Oe;async function _t(s,e,t,n){const r=await To(s,e,t,n);if(X(r)||z(r))return Eo(s,n,r),_t(s,r,t,n);if(typeof r!="symbol"){if(Y(e)){n=Object.freeze(n.concat(e));for(let i=0;i<e.items.length;++i){const o=await _t(i,e.items[i],t,n);if(typeof o=="number")i=o-1;else{if(o===le)return le;o===Oe&&(e.items.splice(i,1),i-=1)}}}else if(z(e)){n=Object.freeze(n.concat(e));const i=await _t("key",e.key,t,n);if(i===le)return le;i===Oe&&(e.key=null);const o=await _t("value",e.value,t,n);if(o===le)return le;o===Oe&&(e.value=null)}}return r}c(_t,"visitAsync_");function ko(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(ko,"initVisitor");function To(s,e,t,n){if(typeof t=="function")return t(s,e,n);if(kt(e))return t.Map?.(s,e,n);if(Tt(e))return t.Seq?.(s,e,n);if(z(e))return t.Pair?.(s,e,n);if(V(e))return t.Scalar?.(s,e,n);if(Ue(e))return t.Alias?.(s,e,n)}c(To,"callVisitor");function Eo(s,e,t){const n=e[e.length-1];if(Y(n))n.items[s]=t;else if(z(n))s==="key"?n.key=t:n.value=t;else if(rt(n))n.contents=t;else{const r=Ue(n)?"alias":"scalar";throw new Error(`Cannot replace node with ${r} parent`)}}c(Eo,"replaceNode");const yu={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},wu=c(s=>s.replace(/[!,[\]{}]/g,e=>yu[e]),"escapeTagName");class ae{static{c(this,"Directives")}constructor(e,t){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},ae.defaultYaml,e),this.tags=Object.assign({},ae.defaultTags,t)}clone(){const e=new ae(this.yaml,this.tags);return e.docStart=this.docStart,e}atDocument(){const e=new ae(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:ae.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},ae.defaultTags);break}return e}add(e,t){this.atNextDocument&&(this.yaml={explicit:ae.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},ae.defaultTags),this.atNextDocument=!1);const n=e.trim().split(/[ \t]+/),r=n.shift();switch(r){case"%TAG":{if(n.length!==2&&(t(0,"%TAG directive should contain exactly two parts"),n.length<2))return!1;const[i,o]=n;return this.tags[i]=o,!0}case"%YAML":{if(this.yaml.explicit=!0,n.length!==1)return t(0,"%YAML directive should contain exactly one part"),!1;const[i]=n;if(i==="1.1"||i==="1.2")return this.yaml.version=i,!0;{const o=/^\d+\.\d+$/.test(i);return t(6,`Unsupported YAML version ${i}`,o),!1}}default:return t(0,`Unknown directive ${r}`,!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,r]=e.match(/^(.*!)([^!]*)$/s);r||t(`The ${e} tag has no suffix`);const i=this.tags[n];if(i)try{return i+decodeURIComponent(r)}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+wu(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 r;if(e&&n.length>0&&X(e.contents)){const i={};it(e.contents,(o,a)=>{X(a)&&a.tag&&(i[a.tag]=!0)}),r=Object.keys(i)}else r=[];for(const[i,o]of n)i==="!!"&&o==="tag:yaml.org,2002:"||(!e||r.some(a=>a.startsWith(o)))&&t.push(`%TAG ${i} ${o}`);return t.join(`
|
|
7
|
+
`)}}ae.defaultYaml={explicit:!1,version:"1.2"},ae.defaultTags={"!!":"tag:yaml.org,2002:"};function _o(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(_o,"anchorIsValid");function Io(s){const e=new Set;return it(s,{Value(t,n){n.anchor&&e.add(n.anchor)}}),e}c(Io,"anchorNames");function Ao(s,e){for(let t=1;;++t){const n=`${s}${t}`;if(!e.has(n))return n}}c(Ao,"findNewAnchor");function bu(s,e){const t=[],n=new Map;let r=null;return{onAnchor:c(i=>{t.push(i),r??(r=Io(s));const o=Ao(e,r);return r.add(o),o},"onAnchor"),setAnchors:c(()=>{for(const i of t){const o=n.get(i);if(typeof o=="object"&&o.anchor&&(V(o.node)||Y(o.node)))o.node.anchor=o.anchor;else{const a=new Error("Failed to resolve repeated object (this should not happen)");throw a.source=i,a}}},"setAnchors"),sourceObjects:n}}c(bu,"createNodeAnchors");function It(s,e,t,n){if(n&&typeof n=="object")if(Array.isArray(n))for(let r=0,i=n.length;r<i;++r){const o=n[r],a=It(s,n,String(r),o);a===void 0?delete n[r]:a!==o&&(n[r]=a)}else if(n instanceof Map)for(const r of Array.from(n.keys())){const i=n.get(r),o=It(s,n,r,i);o===void 0?n.delete(r):o!==i&&n.set(r,o)}else if(n instanceof Set)for(const r of Array.from(n)){const i=It(s,n,r,r);i===void 0?n.delete(r):i!==r&&(n.delete(r),n.add(i))}else for(const[r,i]of Object.entries(n)){const o=It(s,n,r,i);o===void 0?delete n[r]:o!==i&&(n[r]=o)}return s.call(e,t,n)}c(It,"applyReviver");function ge(s,e,t){if(Array.isArray(s))return s.map((n,r)=>ge(n,String(r),t));if(s&&typeof s.toJSON=="function"){if(!t||!Co(s))return s.toJSON(e,t);const n={aliasCount:0,count:1,res:void 0};t.anchors.set(s,n),t.onCreate=i=>{n.res=i,delete t.onCreate};const r=s.toJSON(e,t);return t.onCreate&&t.onCreate(r),r}return typeof s=="bigint"&&!t?.keep?Number(s):s}c(ge,"toJS");class hr{static{c(this,"NodeBase")}constructor(e){Object.defineProperty(this,me,{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:r,reviver:i}={}){if(!rt(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=ge(this,"",o);if(typeof r=="function")for(const{count:l,res:u}of o.anchors.values())r(u,l);return typeof i=="function"?It(i,{"":a},"",a):a}}class qn extends hr{static{c(this,"Alias")}constructor(e){super(dr),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=[],it(e,{Node:c((i,o)=>{(Ue(o)||Co(o))&&n.push(o)},"Node")}),t&&(t.aliasResolveCache=n));let r;for(const i of n){if(i===this)break;i.anchor===this.source&&(r=i)}return r}toJSON(e,t){if(!t)return{source:this.source};const{anchors:n,doc:r,maxAliasCount:i}=t,o=this.resolve(r,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||(ge(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(i>=0&&(a.count+=1,a.aliasCount===0&&(a.aliasCount=Kn(r,o,n)),a.count*a.aliasCount>i)){const l="Excessive alias count indicates a resource exhaustion attack";throw new ReferenceError(l)}return a.res}toString(e,t,n){const r=`*${this.source}`;if(e){if(_o(this.source),e.options.verifyAliasOrder&&!e.anchors.has(this.source)){const i=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new Error(i)}if(e.implicitKey)return`${r} `}return r}}function Kn(s,e,t){if(Ue(e)){const n=e.resolve(s),r=t&&n&&t.get(n);return r?r.count*r.aliasCount:0}else if(Y(e)){let n=0;for(const r of e.items){const i=Kn(s,r,t);i>n&&(n=i)}return n}else if(z(e)){const n=Kn(s,e.key,t),r=Kn(s,e.value,t);return Math.max(n,r)}return 1}c(Kn,"getAliasCount");const Oo=c(s=>!s||typeof s!="function"&&typeof s!="object","isScalarValue");class M extends hr{static{c(this,"Scalar")}constructor(e){super(Ae),this.value=e}toJSON(e,t){return t?.keep?this.value:ge(this.value,e,t)}toString(){return String(this.value)}}M.BLOCK_FOLDED="BLOCK_FOLDED",M.BLOCK_LITERAL="BLOCK_LITERAL",M.PLAIN="PLAIN",M.QUOTE_DOUBLE="QUOTE_DOUBLE",M.QUOTE_SINGLE="QUOTE_SINGLE";const Su="tag:yaml.org,2002:";function Cu(s,e,t){if(e){const n=t.filter(i=>i.tag===e),r=n.find(i=>!i.format)??n[0];if(!r)throw new Error(`Tag ${e} not found`);return r}return t.find(n=>n.identify?.(s)&&!n.format)}c(Cu,"findTagObject");function zt(s,e,t){if(rt(s)&&(s=s.contents),X(s))return s;if(z(s)){const f=t.schema[Ke].createNode?.(t.schema,null,t);return f.items.push(s),f}(s instanceof String||s instanceof Number||s instanceof Boolean||typeof BigInt<"u"&&s instanceof BigInt)&&(s=s.valueOf());const{aliasDuplicateObjects:n,onAnchor:r,onTagObj:i,schema:o,sourceObjects:a}=t;let l;if(n&&s&&typeof s=="object"){if(l=a.get(s),l)return l.anchor??(l.anchor=r(s)),new qn(l.anchor);l={anchor:null,node:null},a.set(s,l)}e?.startsWith("!!")&&(e=Su+e.slice(2));let u=Cu(s,e,o.tags);if(!u){if(s&&typeof s.toJSON=="function"&&(s=s.toJSON()),!s||typeof s!="object"){const f=new M(s);return l&&(l.node=f),f}u=s instanceof Map?o[Ke]:Symbol.iterator in Object(s)?o[vt]:o[Ke]}i&&(i(u),delete t.onTagObj);const d=u?.createNode?u.createNode(t.schema,s,t):typeof u?.nodeClass?.from=="function"?u.nodeClass.from(t.schema,s,t):new M(s);return e?d.tag=e:u.default||(d.tag=u.tag),l&&(l.node=d),d}c(zt,"createNode");function Un(s,e,t){let n=t;for(let r=e.length-1;r>=0;--r){const i=e[r];if(typeof i=="number"&&Number.isInteger(i)&&i>=0){const o=[];o[i]=n,n=o}else n=new Map([[i,n]])}return zt(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(Un,"collectionFromPath");const Gt=c(s=>s==null||typeof s=="object"&&!!s[Symbol.iterator]().next().done,"isEmptyPath");class $o extends hr{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=>X(n)||z(n)?n.clone(e):n),this.range&&(t.range=this.range.slice()),t}addIn(e,t){if(Gt(e))this.add(t);else{const[n,...r]=e,i=this.get(n,!0);if(Y(i))i.addIn(r,t);else if(i===void 0&&this.schema)this.set(n,Un(this.schema,r,t));else throw new Error(`Expected YAML collection at ${n}. Remaining path: ${r}`)}}deleteIn(e){const[t,...n]=e;if(n.length===0)return this.delete(t);const r=this.get(t,!0);if(Y(r))return r.deleteIn(n);throw new Error(`Expected YAML collection at ${t}. Remaining path: ${n}`)}getIn(e,t){const[n,...r]=e,i=this.get(n,!0);return r.length===0?!t&&V(i)?i.value:i:Y(i)?i.getIn(r,t):void 0}hasAllNullValues(e){return this.items.every(t=>{if(!z(t))return!1;const n=t.value;return n==null||e&&V(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 r=this.get(t,!0);return Y(r)?r.hasIn(n):!1}setIn(e,t){const[n,...r]=e;if(r.length===0)this.set(n,t);else{const i=this.get(n,!0);if(Y(i))i.setIn(r,t);else if(i===void 0&&this.schema)this.set(n,Un(this.schema,r,t));else throw new Error(`Expected YAML collection at ${n}. Remaining path: ${r}`)}}}const vu=c(s=>s.replace(/^(?!$)(?: $)?/gm,"#"),"stringifyComment");function Re(s,e){return/^\n+$/.test(s)?s.substring(1):e?s.replace(/^(?! *$)/gm,e):s}c(Re,"indentComment");const ot=c((s,e,t)=>s.endsWith(`
|
|
8
8
|
`)?Re(t,e):t.includes(`
|
|
9
9
|
`)?`
|
|
10
|
-
`+Re(t,e):(s.endsWith(" ")?"":" ")+t,"lineComment"),
|
|
11
|
-
`)t===pr&&(p
|
|
10
|
+
`+Re(t,e):(s.endsWith(" ")?"":" ")+t,"lineComment"),xo="flow",pr="block",Wn="quoted";function Jn(s,e,t="flow",{indentAtStart:n,lineWidth:r=80,minContentWidth:i=20,onFold:o,onOverflow:a}={}){if(!r||r<0)return s;r<i&&(i=0);const l=Math.max(1+i,1+r-e.length);if(s.length<=l)return s;const u=[],d={};let f=r-e.length;typeof n=="number"&&(n>r-Math.max(2,i)?u.push(0):f=r-n);let h,m,y=!1,p=-1,w=-1,T=-1;t===pr&&(p=No(s,p,e.length),p!==-1&&(f=p+l));for(let $;$=s[p+=1];){if(t===Wn&&$==="\\"){switch(w=p,s[p+1]){case"x":p+=3;break;case"u":p+=5;break;case"U":p+=9;break;default:p+=1}T=p}if($===`
|
|
11
|
+
`)t===pr&&(p=No(s,p,e.length)),f=p+e.length+l,h=void 0;else{if($===" "&&m&&m!==" "&&m!==`
|
|
12
12
|
`&&m!==" "){const I=s[p+1];I&&I!==" "&&I!==`
|
|
13
|
-
`&&I!==" "&&(h=p)}if(p>=f)if(h)u.push(h),f=h+l,h=void 0;else if(t===Wn){for(;m===" "||m===" ";)m=$,$=s[p+=1],y=!0;const I=p>T+1?p-2:w-1;if(d[I])return s;u.push(I),d[I]=!0,f=I+l,h=void 0}else y=!0}m=$}if(y&&a&&a(),u.length===0)return s;o&&o();let E=s.slice(0,u[0]);for(let $=0;$<u.length;++$){const I=u[$],
|
|
14
|
-
${e}${s.slice(0,
|
|
15
|
-
${e}${s.slice(I+1,
|
|
16
|
-
`);n=e,r=e+1,i=s[r]}return n}c(
|
|
17
|
-
`){if(i-o>n)return!0;if(o=i+1,r-o<=n)return!1}return!0}c(
|
|
13
|
+
`&&I!==" "&&(h=p)}if(p>=f)if(h)u.push(h),f=h+l,h=void 0;else if(t===Wn){for(;m===" "||m===" ";)m=$,$=s[p+=1],y=!0;const I=p>T+1?p-2:w-1;if(d[I])return s;u.push(I),d[I]=!0,f=I+l,h=void 0}else y=!0}m=$}if(y&&a&&a(),u.length===0)return s;o&&o();let E=s.slice(0,u[0]);for(let $=0;$<u.length;++$){const I=u[$],N=u[$+1]||s.length;I===0?E=`
|
|
14
|
+
${e}${s.slice(0,N)}`:(t===Wn&&d[I]&&(E+=`${s[I]}\\`),E+=`
|
|
15
|
+
${e}${s.slice(I+1,N)}`)}return E}c(Jn,"foldFlowLines");function No(s,e,t){let n=e,r=e+1,i=s[r];for(;i===" "||i===" ";)if(e<r+t)i=s[++e];else{do i=s[++e];while(i&&i!==`
|
|
16
|
+
`);n=e,r=e+1,i=s[r]}return n}c(No,"consumeMoreIndentedLines");const Hn=c((s,e)=>({indentAtStart:e?s.indent.length:s.indentAtStart,lineWidth:s.options.lineWidth,minContentWidth:s.options.minContentWidth}),"getFoldOptions"),Vn=c(s=>/^(%|---|\.\.\.)/m.test(s),"containsDocumentMarker");function ku(s,e,t){if(!e||e<0)return!1;const n=e-t,r=s.length;if(r<=n)return!1;for(let i=0,o=0;i<r;++i)if(s[i]===`
|
|
17
|
+
`){if(i-o>n)return!0;if(o=i+1,r-o<=n)return!1}return!0}c(ku,"lineLengthOverLimit");function Yt(s,e){const t=JSON.stringify(s);if(e.options.doubleQuotedAsJSON)return t;const{implicitKey:n}=e,r=e.options.doubleQuotedMinMultiLineLength,i=e.indent||(Vn(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 d=t.substr(l+2,4);switch(d){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:d.substr(0,2)==="00"?o+="\\x"+d.substr(2):o+=t.substr(l,6)}l+=5,a=l+1}break;case"n":if(n||t[l+2]==='"'||t.length<r)l+=1;else{for(o+=t.slice(a,l)+`
|
|
18
18
|
|
|
19
19
|
`;t[l+2]==="\\"&&t[l+3]==="n"&&t[l+4]!=='"';)o+=`
|
|
20
20
|
`,l+=2;o+=i,t[l+2]===" "&&(o+="\\"),l+=1,a=l+1}break;default:l+=1}return o=a?o+t.slice(a):t,n?o:Jn(o,i,Wn,Hn(e,!1))}c(Yt,"doubleQuotedString");function mr(s,e){if(e.options.singleQuote===!1||e.implicitKey&&s.includes(`
|
|
21
21
|
`)||/[ \t]\n|\n[ \t]/.test(s))return Yt(s,e);const t=e.indent||(Vn(s)?" ":""),n="'"+s.replace(/'/g,"''").replace(/\n+/g,`$&
|
|
22
|
-
${t}`)+"'";return e.implicitKey?n:Jn(n,t,
|
|
22
|
+
${t}`)+"'";return e.implicitKey?n:Jn(n,t,xo,Hn(e,!1))}c(mr,"singleQuotedString");function At(s,e){const{singleQuote:t}=e.options;let n;if(t===!1)n=Yt;else{const r=s.includes('"'),i=s.includes("'");r&&!i?n=mr:i&&!r?n=Yt:n=t?mr:Yt}return n(s,e)}c(At,"quotedString");let gr;try{gr=new RegExp(`(^|(?<!
|
|
23
23
|
))
|
|
24
24
|
+(?!
|
|
25
|
-
|$)`,"g")}catch{gr=/\n+(?!\n|$)/g}function zn({comment:s,type:e,value:t},n,r,i){const{blockQuote:o,commentString:a,lineWidth:l}=n.options;if(!o||/\n[\t ]+$/.test(t)||/^\s*$/.test(t))return At(t,n);const u=n.indent||(n.forceBlockIndent||Vn(t)?" ":""),d=o==="literal"?!0:o==="folded"||e===M.BLOCK_FOLDED?!1:e===M.BLOCK_LITERAL?!0:!
|
|
25
|
+
|$)`,"g")}catch{gr=/\n+(?!\n|$)/g}function zn({comment:s,type:e,value:t},n,r,i){const{blockQuote:o,commentString:a,lineWidth:l}=n.options;if(!o||/\n[\t ]+$/.test(t)||/^\s*$/.test(t))return At(t,n);const u=n.indent||(n.forceBlockIndent||Vn(t)?" ":""),d=o==="literal"?!0:o==="folded"||e===M.BLOCK_FOLDED?!1:e===M.BLOCK_LITERAL?!0:!ku(t,l,u.length);if(!t)return d?`|
|
|
26
26
|
`:`>
|
|
27
|
-
`;let f,h;for(h=t.length;h>0;--h){const
|
|
28
|
-
`&&
|
|
27
|
+
`;let f,h;for(h=t.length;h>0;--h){const N=t[h-1];if(N!==`
|
|
28
|
+
`&&N!==" "&&N!==" ")break}let m=t.substring(h);const y=m.indexOf(`
|
|
29
29
|
`);y===-1?f="-":t===m||y!==m.length-1?(f="+",i&&i()):f="",m&&(t=t.slice(0,-m.length),m[m.length-1]===`
|
|
30
|
-
`&&(m=m.slice(0,-1)),m=m.replace(gr,`$&${u}`));let p=!1,w,T=-1;for(w=0;w<t.length;++w){const
|
|
31
|
-
`)T=w;else break}let E=t.substring(0,T<w?T+1:w);E&&(t=t.substring(E.length),E=E.replace(/\n+/g,`$&${u}`));let I=(p?u?"2":"1":"")+f;if(s&&(I+=" "+a(s.replace(/ ?[\r\n]+/g," ")),r&&r()),!d){const
|
|
32
|
-
$&`).replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,"$1$2").replace(/\n+/g,`$&${u}`);let R=!1;const
|
|
30
|
+
`&&(m=m.slice(0,-1)),m=m.replace(gr,`$&${u}`));let p=!1,w,T=-1;for(w=0;w<t.length;++w){const N=t[w];if(N===" ")p=!0;else if(N===`
|
|
31
|
+
`)T=w;else break}let E=t.substring(0,T<w?T+1:w);E&&(t=t.substring(E.length),E=E.replace(/\n+/g,`$&${u}`));let I=(p?u?"2":"1":"")+f;if(s&&(I+=" "+a(s.replace(/ ?[\r\n]+/g," ")),r&&r()),!d){const N=t.replace(/\n+/g,`
|
|
32
|
+
$&`).replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,"$1$2").replace(/\n+/g,`$&${u}`);let R=!1;const F=Hn(n,!0);o!=="folded"&&e!==M.BLOCK_FOLDED&&(F.onOverflow=()=>{R=!0});const O=Jn(`${E}${N}${m}`,u,pr,F);if(!R)return`>${I}
|
|
33
33
|
${u}${O}`}return t=t.replace(/\n+/g,`$&${u}`),`|${I}
|
|
34
|
-
${u}${E}${t}${m}`}c(zn,"blockString");function
|
|
34
|
+
${u}${E}${t}${m}`}c(zn,"blockString");function Tu(s,e,t,n){const{type:r,value:i}=s,{actualString:o,implicitKey:a,indent:l,indentStep:u,inFlow:d}=e;if(a&&i.includes(`
|
|
35
35
|
`)||d&&/[[\]{},]/.test(i))return At(i,e);if(/^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(i))return a||d||!i.includes(`
|
|
36
36
|
`)?At(i,e):zn(s,e,t,n);if(!a&&!d&&r!==M.PLAIN&&i.includes(`
|
|
37
37
|
`))return zn(s,e,t,n);if(Vn(i)){if(l==="")return e.forceBlockIndent=!0,zn(s,e,t,n);if(a&&l===u)return At(i,e)}const f=i.replace(/\n+/g,`$&
|
|
38
|
-
${l}`);if(o){const h=c(p=>p.default&&p.tag!=="tag:yaml.org,2002:str"&&p.test?.test(f),"test"),{compat:m,tags:y}=e.doc.schema;if(y.some(h)||m?.some(h))return At(i,e)}return a?f:Jn(f,l,
|
|
39
|
-
${e.indent}${a}`:a}c(Ot,"stringify$2");function
|
|
40
|
-
${a}:`):(w=`${w}:`,h&&(w+=ot(w,t.indent,u(h))));let T,E,$;X(e)?(T=!!e.spaceBefore,E=e.commentBefore,$=e.comment):(T=!1,E=null,$=null,e&&typeof e=="object"&&(e=o.createNode(e))),t.implicitKey=!1,!m&&!h&&V(e)&&(t.indentAtStart=w.length+1),p=!1,!d&&l.length>=2&&!t.inFlow&&!m&&Tt(e)&&!e.flow&&!e.tag&&!e.anchor&&(t.indent=t.indent.substring(2));let I=!1;const
|
|
41
|
-
`:"",E){const
|
|
42
|
-
${Re(
|
|
38
|
+
${l}`);if(o){const h=c(p=>p.default&&p.tag!=="tag:yaml.org,2002:str"&&p.test?.test(f),"test"),{compat:m,tags:y}=e.doc.schema;if(y.some(h)||m?.some(h))return At(i,e)}return a?f:Jn(f,l,xo,Hn(e,!1))}c(Tu,"plainString");function Xt(s,e,t,n){const{implicitKey:r,inFlow:i}=e,o=typeof s.value=="string"?s:Object.assign({},s,{value:String(s.value)});let{type:a}=s;a!==M.QUOTE_DOUBLE&&/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(o.value)&&(a=M.QUOTE_DOUBLE);const l=c(d=>{switch(d){case M.BLOCK_FOLDED:case M.BLOCK_LITERAL:return r||i?At(o.value,e):zn(o,e,t,n);case M.QUOTE_DOUBLE:return Yt(o.value,e);case M.QUOTE_SINGLE:return mr(o.value,e);case M.PLAIN:return Tu(o,e,t,n);default:return null}},"_stringify");let u=l(a);if(u===null){const{defaultKeyType:d,defaultStringType:f}=e.options,h=r&&d||f;if(u=l(h),u===null)throw new Error(`Unsupported default string type ${h}`)}return u}c(Xt,"stringifyString");function Po(s,e){const t=Object.assign({blockQuote:!0,commentString:vu,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(Po,"createStringifyContext");function Eu(s,e){if(e.tag){const r=s.filter(i=>i.tag===e.tag);if(r.length>0)return r.find(i=>i.format===e.format)??r[0]}let t,n;if(V(e)){n=e.value;let r=s.filter(i=>i.identify?.(n));if(r.length>1){const i=r.filter(o=>o.test);i.length>0&&(r=i)}t=r.find(i=>i.format===e.format)??r.find(i=>!i.format)}else n=e,t=s.find(r=>r.nodeClass&&n instanceof r.nodeClass);if(!t){const r=n?.constructor?.name??(n===null?"null":typeof n);throw new Error(`Tag not resolved for ${r} value`)}return t}c(Eu,"getTagObject");function _u(s,e,{anchors:t,doc:n}){if(!n.directives)return"";const r=[],i=(V(s)||Y(s))&&s.anchor;i&&_o(i)&&(t.add(i),r.push(`&${i}`));const o=s.tag??(e.default?null:e.tag);return o&&r.push(n.directives.tagString(o)),r.join(" ")}c(_u,"stringifyProps");function Ot(s,e,t,n){if(z(s))return s.toString(e,t,n);if(Ue(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 r;const i=X(s)?s:e.doc.createNode(s,{onTagObj:c(l=>r=l,"onTagObj")});r??(r=Eu(e.doc.schema.tags,i));const o=_u(i,r,e);o.length>0&&(e.indentAtStart=(e.indentAtStart??0)+o.length+1);const a=typeof r.stringify=="function"?r.stringify(i,e,t,n):V(i)?Xt(i,e,t,n):i.toString(e,t,n);return o?V(i)||a[0]==="{"||a[0]==="["?`${o} ${a}`:`${o}
|
|
39
|
+
${e.indent}${a}`:a}c(Ot,"stringify$2");function Iu({key:s,value:e},t,n,r){const{allNullValues:i,doc:o,indent:a,indentStep:l,options:{commentString:u,indentSeq:d,simpleKeys:f}}=t;let h=X(s)&&s.comment||null;if(f){if(h)throw new Error("With simple keys, key nodes cannot have comments");if(Y(s)||!X(s)&&typeof s=="object"){const F="With simple keys, collection cannot be used as a key value";throw new Error(F)}}let m=!f&&(!s||h&&e==null&&!t.inFlow||Y(s)||(V(s)?s.type===M.BLOCK_FOLDED||s.type===M.BLOCK_LITERAL:typeof s=="object"));t=Object.assign({},t,{allNullValues:!1,implicitKey:!m&&(f||!i),indent:a+l});let y=!1,p=!1,w=Ot(s,t,()=>y=!0,()=>p=!0);if(!m&&!t.inFlow&&w.length>1024){if(f)throw new Error("With simple keys, single line scalar must not span more than 1024 characters");m=!0}if(t.inFlow){if(i||e==null)return y&&n&&n(),w===""?"?":m?`? ${w}`:w}else if(i&&!f||e==null&&m)return w=`? ${w}`,h&&!y?w+=ot(w,t.indent,u(h)):p&&r&&r(),w;y&&(h=null),m?(h&&(w+=ot(w,t.indent,u(h))),w=`? ${w}
|
|
40
|
+
${a}:`):(w=`${w}:`,h&&(w+=ot(w,t.indent,u(h))));let T,E,$;X(e)?(T=!!e.spaceBefore,E=e.commentBefore,$=e.comment):(T=!1,E=null,$=null,e&&typeof e=="object"&&(e=o.createNode(e))),t.implicitKey=!1,!m&&!h&&V(e)&&(t.indentAtStart=w.length+1),p=!1,!d&&l.length>=2&&!t.inFlow&&!m&&Tt(e)&&!e.flow&&!e.tag&&!e.anchor&&(t.indent=t.indent.substring(2));let I=!1;const N=Ot(e,t,()=>I=!0,()=>p=!0);let R=" ";if(h||T||E){if(R=T?`
|
|
41
|
+
`:"",E){const F=u(E);R+=`
|
|
42
|
+
${Re(F,t.indent)}`}N===""&&!t.inFlow?R===`
|
|
43
43
|
`&&(R=`
|
|
44
44
|
|
|
45
45
|
`):R+=`
|
|
46
|
-
${t.indent}`}else if(!m&&Y(e)){const
|
|
47
|
-
`),te=O!==-1,
|
|
48
|
-
${t.indent}`)}}else(
|
|
49
|
-
`)&&(R="");return w+=R+
|
|
46
|
+
${t.indent}`}else if(!m&&Y(e)){const F=N[0],O=N.indexOf(`
|
|
47
|
+
`),te=O!==-1,qe=t.inFlow??e.flow??e.items.length===0;if(te||!qe){let ht=!1;if(te&&(F==="&"||F==="!")){let ne=N.indexOf(" ");F==="&"&&ne!==-1&&ne<O&&N[ne+1]==="!"&&(ne=N.indexOf(" ",ne+1)),(ne===-1||O<ne)&&(ht=!0)}ht||(R=`
|
|
48
|
+
${t.indent}`)}}else(N===""||N[0]===`
|
|
49
|
+
`)&&(R="");return w+=R+N,t.inFlow?I&&n&&n():$&&!I?w+=ot(w,t.indent,u($)):p&&r&&r(),w}c(Iu,"stringifyPair");function Ro(s,e){(s==="debug"||s==="warn")&&console.warn(e)}c(Ro,"warn");const Gn="<<",Me={identify:c(s=>s===Gn||typeof s=="symbol"&&s.description===Gn,"identify"),default:"key",tag:"tag:yaml.org,2002:merge",test:/^<<$/,resolve:c(()=>Object.assign(new M(Symbol(Gn)),{addToJSMap:Mo}),"resolve"),stringify:c(()=>Gn,"stringify")},Au=c((s,e)=>(Me.identify(e)||V(e)&&(!e.type||e.type===M.PLAIN)&&Me.identify(e.value))&&s?.doc.schema.tags.some(t=>t.tag===Me.tag&&t.default),"isMergeKey");function Mo(s,e,t){if(t=s&&Ue(t)?t.resolve(s.doc):t,Tt(t))for(const n of t.items)yr(s,e,n);else if(Array.isArray(t))for(const n of t)yr(s,e,n);else yr(s,e,t)}c(Mo,"addMergeToJSMap");function yr(s,e,t){const n=s&&Ue(t)?t.resolve(s.doc):t;if(!kt(n))throw new Error("Merge sources must be maps or map aliases");const r=n.toJSON(null,s,Map);for(const[i,o]of r)e instanceof Map?e.has(i)||e.set(i,o):e instanceof Set?e.add(i):Object.prototype.hasOwnProperty.call(e,i)||Object.defineProperty(e,i,{value:o,writable:!0,enumerable:!0,configurable:!0});return e}c(yr,"mergeValue");function Lo(s,e,{key:t,value:n}){if(X(t)&&t.addToJSMap)t.addToJSMap(s,e,n);else if(Au(s,t))Mo(s,e,n);else{const r=ge(t,"",s);if(e instanceof Map)e.set(r,ge(n,r,s));else if(e instanceof Set)e.add(r);else{const i=Ou(t,r,s),o=ge(n,i,s);i in e?Object.defineProperty(e,i,{value:o,writable:!0,enumerable:!0,configurable:!0}):e[i]=o}}return e}c(Lo,"addPairToJSMap");function Ou(s,e,t){if(e===null)return"";if(typeof e!="object")return String(e);if(X(s)&&t?.doc){const n=Po(t.doc,{});n.anchors=new Set;for(const i of t.anchors.keys())n.anchors.add(i.anchor);n.inFlow=!0,n.inStringifyKey=!0;const r=s.toString(n);if(!t.mapKeyWarned){let i=JSON.stringify(r);i.length>40&&(i=i.substring(0,36)+'..."'),Ro(t.doc.options.logLevel,`Keys with collection values will be stringified due to JS Object restrictions: ${i}. Set mapAsMap: true to use object keys.`),t.mapKeyWarned=!0}return r}return JSON.stringify(e)}c(Ou,"stringifyKey");function wr(s,e,t){const n=zt(s,void 0,t),r=zt(e,void 0,t);return new re(n,r)}c(wr,"createPair");class re{static{c(this,"Pair")}constructor(e,t=null){Object.defineProperty(this,me,{value:So}),this.key=e,this.value=t}clone(e){let{key:t,value:n}=this;return X(t)&&(t=t.clone(e)),X(n)&&(n=n.clone(e)),new re(t,n)}toJSON(e,t){const n=t?.mapAsMap?new Map:{};return Lo(t,n,this)}toString(e,t,n){return e?.doc?Iu(this,e,t,n):JSON.stringify(this)}}function Do(s,e,t){return(e.inFlow??s.flow?xu:$u)(s,e,t)}c(Do,"stringifyCollection");function $u({comment:s,items:e},t,{blockItemPrefix:n,flowChars:r,itemIndent:i,onChompKeep:o,onComment:a}){const{indent:l,options:{commentString:u}}=t,d=Object.assign({},t,{indent:i,type:null});let f=!1;const h=[];for(let y=0;y<e.length;++y){const p=e[y];let w=null;if(X(p))!f&&p.spaceBefore&&h.push(""),Yn(t,h,p.commentBefore,f),p.comment&&(w=p.comment);else if(z(p)){const E=X(p.key)?p.key:null;E&&(!f&&E.spaceBefore&&h.push(""),Yn(t,h,E.commentBefore,f))}f=!1;let T=Ot(p,d,()=>w=null,()=>f=!0);w&&(T+=ot(T,i,u(w))),f&&w&&(f=!1),h.push(n+T)}let m;if(h.length===0)m=r.start+r.end;else{m=h[0];for(let y=1;y<h.length;++y){const p=h[y];m+=p?`
|
|
50
50
|
${l}${p}`:`
|
|
51
51
|
`}}return s?(m+=`
|
|
52
|
-
`+Re(u(s),l),a&&a()):f&&o&&o(),m}c(
|
|
52
|
+
`+Re(u(s),l),a&&a()):f&&o&&o(),m}c($u,"stringifyBlockCollection");function xu({items:s},e,{flowChars:t,itemIndent:n}){const{indent:r,indentStep:i,flowCollectionPadding:o,options:{commentString:a}}=e;n+=i;const l=Object.assign({},e,{indent:n,inFlow:!0,type:null});let u=!1,d=0;const f=[];for(let y=0;y<s.length;++y){const p=s[y];let w=null;if(X(p))p.spaceBefore&&f.push(""),Yn(e,f,p.commentBefore,!1),p.comment&&(w=p.comment);else if(z(p)){const E=X(p.key)?p.key:null;E&&(E.spaceBefore&&f.push(""),Yn(e,f,E.commentBefore,!1),E.comment&&(u=!0));const $=X(p.value)?p.value:null;$?($.comment&&(w=$.comment),$.commentBefore&&(u=!0)):p.value==null&&E?.comment&&(w=E.comment)}w&&(u=!0);let T=Ot(p,l,()=>w=null);y<s.length-1&&(T+=","),w&&(T+=ot(T,n,a(w))),!u&&(f.length>d||T.includes(`
|
|
53
53
|
`))&&(u=!0),f.push(T),d=f.length}const{start:h,end:m}=t;if(f.length===0)return h+m;if(!u){const y=f.reduce((p,w)=>p+w.length+2,2);u=e.options.lineWidth>0&&y>e.options.lineWidth}if(u){let y=h;for(const p of f)y+=p?`
|
|
54
54
|
${i}${r}${p}`:`
|
|
55
55
|
`;return`${y}
|
|
56
|
-
${r}${m}`}else return`${h}${o}${f.join(" ")}${o}${m}`}c(
|
|
57
|
-
`:" ")}return Xt({comment:s,type:e,value:a},n,r,i)}};function
|
|
56
|
+
${r}${m}`}else return`${h}${o}${f.join(" ")}${o}${m}`}c(xu,"stringifyFlowCollection");function Yn({indent:s,options:{commentString:e}},t,n,r){if(n&&r&&(n=n.replace(/^\n+/,"")),n){const i=Re(e(n),s);t.push(i.trimStart())}}c(Yn,"addCommentBefore");function at(s,e){const t=V(e)?e.value:e;for(const n of s)if(z(n)&&(n.key===e||n.key===t||V(n.key)&&n.key.value===t))return n}c(at,"findPair");class ue extends $o{static{c(this,"YAMLMap")}static get tagName(){return"tag:yaml.org,2002:map"}constructor(e){super(Ke,e),this.items=[]}static from(e,t,n){const{keepUndefined:r,replacer:i}=n,o=new this(e),a=c((l,u)=>{if(typeof i=="function")u=i.call(t,l,u);else if(Array.isArray(i)&&!i.includes(l))return;(u!==void 0||r)&&o.items.push(wr(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;z(e)?n=e:!e||typeof e!="object"||!("key"in e)?n=new re(e,e?.value):n=new re(e.key,e.value);const r=at(this.items,n.key),i=this.schema?.sortMapEntries;if(r){if(!t)throw new Error(`Key ${n.key} already set`);V(r.value)&&Oo(n.value)?r.value.value=n.value:r.value=n.value}else if(i){const o=this.items.findIndex(a=>i(n,a)<0);o===-1?this.items.push(n):this.items.splice(o,0,n)}else this.items.push(n)}delete(e){const t=at(this.items,e);return t?this.items.splice(this.items.indexOf(t),1).length>0:!1}get(e,t){const r=at(this.items,e)?.value;return(!t&&V(r)?r.value:r)??void 0}has(e){return!!at(this.items,e)}set(e,t){this.add(new re(e,t),!0)}toJSON(e,t,n){const r=n?new n:t?.mapAsMap?new Map:{};t?.onCreate&&t.onCreate(r);for(const i of this.items)Lo(t,r,i);return r}toString(e,t,n){if(!e)return JSON.stringify(this);for(const r of this.items)if(!z(r))throw new Error(`Map items must all be pairs; found ${JSON.stringify(r)} instead`);return!e.allNullValues&&this.hasAllNullValues(!1)&&(e=Object.assign({},e,{allNullValues:!0})),Do(this,e,{blockItemPrefix:"",flowChars:{start:"{",end:"}"},itemIndent:e.indent||"",onChompKeep:n,onComment:t})}}const $t={collection:"map",default:!0,nodeClass:ue,tag:"tag:yaml.org,2002:map",resolve(s,e){return kt(s)||e("Expected a mapping for this tag"),s},createNode:c((s,e,t)=>ue.from(s,e,t),"createNode")};class We extends $o{static{c(this,"YAMLSeq")}static get tagName(){return"tag:yaml.org,2002:seq"}constructor(e){super(vt,e),this.items=[]}add(e){this.items.push(e)}delete(e){const t=Xn(e);return typeof t!="number"?!1:this.items.splice(t,1).length>0}get(e,t){const n=Xn(e);if(typeof n!="number")return;const r=this.items[n];return!t&&V(r)?r.value:r}has(e){const t=Xn(e);return typeof t=="number"&&t<this.items.length}set(e,t){const n=Xn(e);if(typeof n!="number")throw new Error(`Expected a valid index, not ${e}.`);const r=this.items[n];V(r)&&Oo(t)?r.value=t:this.items[n]=t}toJSON(e,t){const n=[];t?.onCreate&&t.onCreate(n);let r=0;for(const i of this.items)n.push(ge(i,String(r++),t));return n}toString(e,t,n){return e?Do(this,e,{blockItemPrefix:"- ",flowChars:{start:"[",end:"]"},itemIndent:(e.indent||"")+" ",onChompKeep:n,onComment:t}):JSON.stringify(this)}static from(e,t,n){const{replacer:r}=n,i=new this(e);if(t&&Symbol.iterator in Object(t)){let o=0;for(let a of t){if(typeof r=="function"){const l=t instanceof Set?a:String(o++);a=r.call(t,l,a)}i.items.push(zt(a,void 0,n))}}return i}}function Xn(s){let e=V(s)?s.value:s;return e&&typeof e=="string"&&(e=Number(e)),typeof e=="number"&&Number.isInteger(e)&&e>=0?e:null}c(Xn,"asItemIndex");const xt={collection:"seq",default:!0,nodeClass:We,tag:"tag:yaml.org,2002:seq",resolve(s,e){return Tt(s)||e("Expected a sequence for this tag"),s},createNode:c((s,e,t)=>We.from(s,e,t),"createNode")},Zn={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),Xt(s,e,t,n)}},Qn={identify:c(s=>s==null,"identify"),createNode:c(()=>new M(null),"createNode"),default:!0,tag:"tag:yaml.org,2002:null",test:/^(?:~|[Nn]ull|NULL)?$/,resolve:c(()=>new M(null),"resolve"),stringify:c(({source:s},e)=>typeof s=="string"&&Qn.test.test(s)?s:e.options.nullStr,"stringify")},br={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 M(s[0]==="t"||s[0]==="T"),"resolve"),stringify({source:s,value:e},t){if(s&&br.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 Ce({format:s,minFractionDigits:e,tag:t,value:n}){if(typeof n=="bigint")return String(n);const r=typeof n=="number"?n:Number(n);if(!isFinite(r))return isNaN(r)?".nan":r<0?"-.inf":".inf";let i=JSON.stringify(n);if(!s&&e&&(!t||t==="tag:yaml.org,2002:float")&&/^\d/.test(i)){let o=i.indexOf(".");o<0&&(o=i.length,i+=".");let a=e-(i.length-o-1);for(;a-- >0;)i+="0"}return i}c(Ce,"stringifyNumber");const jo={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:Ce},Fo={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():Ce(s)}},Bo={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 M(parseFloat(s)),t=s.indexOf(".");return t!==-1&&s[s.length-1]==="0"&&(e.minFractionDigits=s.length-t-1),e},stringify:Ce},es=c(s=>typeof s=="bigint"||Number.isInteger(s),"intIdentify$2"),Sr=c((s,e,t,{intAsBigInt:n})=>n?BigInt(s):parseInt(s.substring(e),t),"intResolve$1");function qo(s,e,t){const{value:n}=s;return es(n)&&n>=0?t+n.toString(e):Ce(s)}c(qo,"intStringify$1");const Ko={identify:c(s=>es(s)&&s>=0,"identify"),default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^0o[0-7]+$/,resolve:c((s,e,t)=>Sr(s,2,8,t),"resolve"),stringify:c(s=>qo(s,8,"0o"),"stringify")},Uo={identify:es,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9]+$/,resolve:c((s,e,t)=>Sr(s,0,10,t),"resolve"),stringify:Ce},Wo={identify:c(s=>es(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)=>Sr(s,2,16,t),"resolve"),stringify:c(s=>qo(s,16,"0x"),"stringify")},Nu=[$t,xt,Zn,Qn,br,Ko,Uo,Wo,jo,Fo,Bo];function Jo(s){return typeof s=="bigint"||Number.isInteger(s)}c(Jo,"intIdentify$1");const ts=c(({value:s})=>JSON.stringify(s),"stringifyJSON"),Pu=[{identify:c(s=>typeof s=="string","identify"),default:!0,tag:"tag:yaml.org,2002:str",resolve:c(s=>s,"resolve"),stringify:ts},{identify:c(s=>s==null,"identify"),createNode:c(()=>new M(null),"createNode"),default:!0,tag:"tag:yaml.org,2002:null",test:/^null$/,resolve:c(()=>null,"resolve"),stringify:ts},{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:ts},{identify:Jo,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})=>Jo(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:ts}],Ru={default:!0,tag:"",test:/^/,resolve(s,e){return e(`Unresolved plain scalar ${JSON.stringify(s)}`),s}},Mu=[$t,xt].concat(Pu,Ru),Cr={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 r=0;r<t.length;++r)n[r]=t.charCodeAt(r);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,r,i){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=M.BLOCK_LITERAL),e!==M.QUOTE_DOUBLE){const l=Math.max(n.options.lineWidth-n.indent.length,n.options.minContentWidth),u=Math.ceil(a.length/l),d=new Array(u);for(let f=0,h=0;f<u;++f,h+=l)d[f]=a.substr(h,l);a=d.join(e===M.BLOCK_LITERAL?`
|
|
57
|
+
`:" ")}return Xt({comment:s,type:e,value:a},n,r,i)}};function Ho(s,e){if(Tt(s))for(let t=0;t<s.items.length;++t){let n=s.items[t];if(!z(n)){if(kt(n)){n.items.length>1&&e("Each pair must have its own sequence indicator");const r=n.items[0]||new re(new M(null));if(n.commentBefore&&(r.key.commentBefore=r.key.commentBefore?`${n.commentBefore}
|
|
58
58
|
${r.key.commentBefore}`:n.commentBefore),n.comment){const i=r.value??r.key;i.comment=i.comment?`${n.comment}
|
|
59
|
-
${i.comment}`:n.comment}n=r}s.items[t]=z(n)?n:new re(n)}}else e("Expected a sequence for this tag");return s}c(Wo,"resolvePairs");function Jo(s,e,t){const{replacer:n}=t,r=new We(s);r.tag="tag:yaml.org,2002:pairs";let i=0;if(e&&Symbol.iterator in Object(e))for(let o of e){typeof n=="function"&&(o=n.call(e,String(i++),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;r.items.push(wr(a,l,t))}return r}c(Jo,"createPairs");const vr={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:Wo,createNode:Jo};class Ut extends We{static{c(this,"YAMLOMap")}constructor(){super(),this.add=ue.prototype.add.bind(this),this.delete=ue.prototype.delete.bind(this),this.get=ue.prototype.get.bind(this),this.has=ue.prototype.has.bind(this),this.set=ue.prototype.set.bind(this),this.tag=Ut.tag}toJSON(e,t){if(!t)return super.toJSON(e);const n=new Map;t?.onCreate&&t.onCreate(n);for(const r of this.items){let i,o;if(z(r)?(i=ge(r.key,"",t),o=ge(r.value,i,t)):i=ge(r,"",t),n.has(i))throw new Error("Ordered maps must not include duplicate keys");n.set(i,o)}return n}static from(e,t,n){const r=Jo(e,t,n),i=new this;return i.items=r.items,i}}Ut.tag="tag:yaml.org,2002:omap";const kr={collection:"seq",identify:c(s=>s instanceof Map,"identify"),nodeClass:Ut,default:!1,tag:"tag:yaml.org,2002:omap",resolve(s,e){const t=Wo(s,e),n=[];for(const{key:r}of t.items)V(r)&&(n.includes(r.value)?e(`Ordered maps must not include duplicate keys: ${r.value}`):n.push(r.value));return Object.assign(new Ut,t)},createNode:c((s,e,t)=>Ut.from(s,e,t),"createNode")};function Ho({value:s,source:e},t){return e&&(s?Vo:zo).test.test(e)?e:s?t.options.trueStr:t.options.falseStr}c(Ho,"boolStringify");const Vo={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 M(!0),"resolve"),stringify:Ho},zo={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 M(!1),"resolve"),stringify:Ho},Ru={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:Ce},Mu={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():Ce(s)}},Lu={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 M(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:Ce},Zt=c(s=>typeof s=="bigint"||Number.isInteger(s),"intIdentify");function ns(s,e,t,{intAsBigInt:n}){const r=s[0];if((r==="-"||r==="+")&&(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 r==="-"?BigInt(-1)*o:o}const i=parseInt(s,t);return r==="-"?-1*i:i}c(ns,"intResolve");function Tr(s,e,t){const{value:n}=s;if(Zt(n)){const r=n.toString(e);return n<0?"-"+t+r.substr(1):t+r}return Ce(s)}c(Tr,"intStringify");const Du={identify:Zt,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:c((s,e,t)=>ns(s,2,2,t),"resolve"),stringify:c(s=>Tr(s,2,"0b"),"stringify")},ju={identify:Zt,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:c((s,e,t)=>ns(s,1,8,t),"resolve"),stringify:c(s=>Tr(s,8,"0"),"stringify")},Fu={identify:Zt,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:c((s,e,t)=>ns(s,0,10,t),"resolve"),stringify:Ce},qu={identify:Zt,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:c((s,e,t)=>ns(s,2,16,t),"resolve"),stringify:c(s=>Tr(s,16,"0x"),"stringify")};class Wt extends ue{static{c(this,"YAMLSet")}constructor(e){super(e),this.tag=Wt.tag}add(e){let t;z(e)?t=e:e&&typeof e=="object"&&"key"in e&&"value"in e&&e.value===null?t=new re(e.key,null):t=new re(e,null),at(this.items,t.key)||this.items.push(t)}get(e,t){const n=at(this.items,e);return!t&&z(n)?V(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=at(this.items,e);n&&!t?this.items.splice(this.items.indexOf(n),1):!n&&t&&this.items.push(new re(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:r}=n,i=new this(e);if(t&&Symbol.iterator in Object(t))for(let o of t)typeof r=="function"&&(o=r.call(t,o,o)),i.items.push(wr(o,null,n));return i}}Wt.tag="tag:yaml.org,2002:set";const Er={collection:"map",identify:c(s=>s instanceof Set,"identify"),nodeClass:Wt,default:!1,tag:"tag:yaml.org,2002:set",createNode:c((s,e,t)=>Wt.from(s,e,t),"createNode"),resolve(s,e){if(kt(s)){if(s.hasAllNullValues(!0))return Object.assign(new Wt,s);e("Set items must all have null values")}else e("Expected a mapping for this tag");return s}};function _r(s,e){const t=s[0],n=t==="-"||t==="+"?s.substring(1):s,r=c(o=>e?BigInt(o):Number(o),"num"),i=n.replace(/_/g,"").split(":").reduce((o,a)=>o*r(60)+r(a),r(0));return t==="-"?r(-1)*i:i}c(_r,"parseSexagesimal");function Go(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 Ce(s);let n="";e<0&&(n="-",e*=t(-1));const r=t(60),i=[e%r];return e<60?i.unshift(0):(e=(e-i[0])/r,i.unshift(e%r),e>=60&&(e=(e-i[0])/r,i.unshift(e))),n+i.map(o=>String(o).padStart(2,"0")).join(":").replace(/000000\d*$/,"")}c(Go,"stringifySexagesimal");const Yo={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})=>_r(s,t),"resolve"),stringify:Go},Xo={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=>_r(s,!1),"resolve"),stringify:Go},ss={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(ss.test);if(!e)throw new Error("!!timestamp expects a date, starting with yyyy-mm-dd");const[,t,n,r,i,o,a]=e.map(Number),l=e[7]?Number((e[7]+"00").substr(1,3)):0;let u=Date.UTC(t,n-1,r,i||0,o||0,a||0,l);const d=e[8];if(d&&d!=="Z"){let f=_r(d,!1);Math.abs(f)<30&&(f*=60),u-=6e4*f}return new Date(u)},stringify:c(({value:s})=>s?.toISOString().replace(/(T00:00:00)?\.000Z$/,"")??"","stringify")},Zo=[$t,Nt,Zn,Qn,Vo,zo,Du,ju,Fu,qu,Ru,Mu,Lu,Cr,Me,kr,vr,Er,Yo,Xo,ss],Qo=new Map([["core",$u],["failsafe",[$t,Nt,Zn]],["json",Pu],["yaml11",Zo],["yaml-1.1",Zo]]),ea={binary:Cr,bool:br,float:jo,floatExp:Do,floatNaN:Lo,floatTime:Xo,int:Bo,intHex:Ko,intOct:qo,intTime:Yo,map:$t,merge:Me,null:Qn,omap:kr,pairs:vr,seq:Nt,set:Er,timestamp:ss},Bu={"tag:yaml.org,2002:binary":Cr,"tag:yaml.org,2002:merge":Me,"tag:yaml.org,2002:omap":kr,"tag:yaml.org,2002:pairs":vr,"tag:yaml.org,2002:set":Er,"tag:yaml.org,2002:timestamp":ss};function Ir(s,e,t){const n=Qo.get(e);if(n&&!s)return t&&!n.includes(Me)?n.concat(Me):n.slice();let r=n;if(!r)if(Array.isArray(s))r=[];else{const i=Array.from(Qo.keys()).filter(o=>o!=="yaml11").map(o=>JSON.stringify(o)).join(", ");throw new Error(`Unknown schema "${e}"; use one of ${i} or define customTags array`)}if(Array.isArray(s))for(const i of s)r=r.concat(i);else typeof s=="function"&&(r=s(r.slice()));return t&&(r=r.concat(Me)),r.reduce((i,o)=>{const a=typeof o=="string"?ea[o]:o;if(!a){const l=JSON.stringify(o),u=Object.keys(ea).map(d=>JSON.stringify(d)).join(", ");throw new Error(`Unknown custom tag ${l}; use one of ${u}`)}return i.includes(a)||i.push(a),i},[])}c(Ir,"getTags");const Ku=c((s,e)=>s.key<e.key?-1:s.key>e.key?1:0,"sortMapEntriesByKey");class Ds{static{c(this,"Schema")}constructor({compat:e,customTags:t,merge:n,resolveKnownTags:r,schema:i,sortMapEntries:o,toStringDefaults:a}){this.compat=Array.isArray(e)?Ir(e,"compat"):e?Ir(null,e):null,this.name=typeof i=="string"&&i||"core",this.knownTags=r?Bu:{},this.tags=Ir(t,this.name,n),this.toStringOptions=a??null,Object.defineProperty(this,Ke,{value:$t}),Object.defineProperty(this,Ae,{value:Zn}),Object.defineProperty(this,vt,{value:Nt}),this.sortMapEntries=typeof o=="function"?o:o===!0?Ku:null}clone(){const e=Object.create(Ds.prototype,Object.getOwnPropertyDescriptors(this));return e.tags=this.tags.slice(),e}}function Uu(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 r=No(s,e),{commentString:i}=r.options;if(s.commentBefore){t.length!==1&&t.unshift("");const l=i(s.commentBefore);t.unshift(Re(l,""))}let o=!1,a=null;if(s.contents){if(X(s.contents)){if(s.contents.spaceBefore&&n&&t.push(""),s.contents.commentBefore){const d=i(s.contents.commentBefore);t.push(Re(d,""))}r.forceBlockIndent=!!s.comment,a=s.contents.comment}const l=a?void 0:()=>o=!0;let u=Ot(s.contents,r,()=>a=null,l);a&&(u+=ot(u,"",i(a))),(u[0]==="|"||u[0]===">")&&t[t.length-1]==="---"?t[t.length-1]=`--- ${u}`:t.push(u)}else t.push(Ot(s.contents,r));if(s.directives?.docEnd)if(s.comment){const l=i(s.comment);l.includes(`
|
|
59
|
+
${i.comment}`:n.comment}n=r}s.items[t]=z(n)?n:new re(n)}}else e("Expected a sequence for this tag");return s}c(Ho,"resolvePairs");function Vo(s,e,t){const{replacer:n}=t,r=new We(s);r.tag="tag:yaml.org,2002:pairs";let i=0;if(e&&Symbol.iterator in Object(e))for(let o of e){typeof n=="function"&&(o=n.call(e,String(i++),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;r.items.push(wr(a,l,t))}return r}c(Vo,"createPairs");const vr={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:Ho,createNode:Vo};class Ut extends We{static{c(this,"YAMLOMap")}constructor(){super(),this.add=ue.prototype.add.bind(this),this.delete=ue.prototype.delete.bind(this),this.get=ue.prototype.get.bind(this),this.has=ue.prototype.has.bind(this),this.set=ue.prototype.set.bind(this),this.tag=Ut.tag}toJSON(e,t){if(!t)return super.toJSON(e);const n=new Map;t?.onCreate&&t.onCreate(n);for(const r of this.items){let i,o;if(z(r)?(i=ge(r.key,"",t),o=ge(r.value,i,t)):i=ge(r,"",t),n.has(i))throw new Error("Ordered maps must not include duplicate keys");n.set(i,o)}return n}static from(e,t,n){const r=Vo(e,t,n),i=new this;return i.items=r.items,i}}Ut.tag="tag:yaml.org,2002:omap";const kr={collection:"seq",identify:c(s=>s instanceof Map,"identify"),nodeClass:Ut,default:!1,tag:"tag:yaml.org,2002:omap",resolve(s,e){const t=Ho(s,e),n=[];for(const{key:r}of t.items)V(r)&&(n.includes(r.value)?e(`Ordered maps must not include duplicate keys: ${r.value}`):n.push(r.value));return Object.assign(new Ut,t)},createNode:c((s,e,t)=>Ut.from(s,e,t),"createNode")};function zo({value:s,source:e},t){return e&&(s?Go:Yo).test.test(e)?e:s?t.options.trueStr:t.options.falseStr}c(zo,"boolStringify");const Go={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 M(!0),"resolve"),stringify:zo},Yo={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 M(!1),"resolve"),stringify:zo},Lu={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:Ce},Du={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():Ce(s)}},ju={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 M(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:Ce},Zt=c(s=>typeof s=="bigint"||Number.isInteger(s),"intIdentify");function ns(s,e,t,{intAsBigInt:n}){const r=s[0];if((r==="-"||r==="+")&&(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 r==="-"?BigInt(-1)*o:o}const i=parseInt(s,t);return r==="-"?-1*i:i}c(ns,"intResolve");function Tr(s,e,t){const{value:n}=s;if(Zt(n)){const r=n.toString(e);return n<0?"-"+t+r.substr(1):t+r}return Ce(s)}c(Tr,"intStringify");const Fu={identify:Zt,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:c((s,e,t)=>ns(s,2,2,t),"resolve"),stringify:c(s=>Tr(s,2,"0b"),"stringify")},Bu={identify:Zt,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:c((s,e,t)=>ns(s,1,8,t),"resolve"),stringify:c(s=>Tr(s,8,"0"),"stringify")},qu={identify:Zt,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:c((s,e,t)=>ns(s,0,10,t),"resolve"),stringify:Ce},Ku={identify:Zt,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:c((s,e,t)=>ns(s,2,16,t),"resolve"),stringify:c(s=>Tr(s,16,"0x"),"stringify")};class Wt extends ue{static{c(this,"YAMLSet")}constructor(e){super(e),this.tag=Wt.tag}add(e){let t;z(e)?t=e:e&&typeof e=="object"&&"key"in e&&"value"in e&&e.value===null?t=new re(e.key,null):t=new re(e,null),at(this.items,t.key)||this.items.push(t)}get(e,t){const n=at(this.items,e);return!t&&z(n)?V(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=at(this.items,e);n&&!t?this.items.splice(this.items.indexOf(n),1):!n&&t&&this.items.push(new re(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:r}=n,i=new this(e);if(t&&Symbol.iterator in Object(t))for(let o of t)typeof r=="function"&&(o=r.call(t,o,o)),i.items.push(wr(o,null,n));return i}}Wt.tag="tag:yaml.org,2002:set";const Er={collection:"map",identify:c(s=>s instanceof Set,"identify"),nodeClass:Wt,default:!1,tag:"tag:yaml.org,2002:set",createNode:c((s,e,t)=>Wt.from(s,e,t),"createNode"),resolve(s,e){if(kt(s)){if(s.hasAllNullValues(!0))return Object.assign(new Wt,s);e("Set items must all have null values")}else e("Expected a mapping for this tag");return s}};function _r(s,e){const t=s[0],n=t==="-"||t==="+"?s.substring(1):s,r=c(o=>e?BigInt(o):Number(o),"num"),i=n.replace(/_/g,"").split(":").reduce((o,a)=>o*r(60)+r(a),r(0));return t==="-"?r(-1)*i:i}c(_r,"parseSexagesimal");function Xo(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 Ce(s);let n="";e<0&&(n="-",e*=t(-1));const r=t(60),i=[e%r];return e<60?i.unshift(0):(e=(e-i[0])/r,i.unshift(e%r),e>=60&&(e=(e-i[0])/r,i.unshift(e))),n+i.map(o=>String(o).padStart(2,"0")).join(":").replace(/000000\d*$/,"")}c(Xo,"stringifySexagesimal");const Zo={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})=>_r(s,t),"resolve"),stringify:Xo},Qo={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=>_r(s,!1),"resolve"),stringify:Xo},ss={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(ss.test);if(!e)throw new Error("!!timestamp expects a date, starting with yyyy-mm-dd");const[,t,n,r,i,o,a]=e.map(Number),l=e[7]?Number((e[7]+"00").substr(1,3)):0;let u=Date.UTC(t,n-1,r,i||0,o||0,a||0,l);const d=e[8];if(d&&d!=="Z"){let f=_r(d,!1);Math.abs(f)<30&&(f*=60),u-=6e4*f}return new Date(u)},stringify:c(({value:s})=>s?.toISOString().replace(/(T00:00:00)?\.000Z$/,"")??"","stringify")},ea=[$t,xt,Zn,Qn,Go,Yo,Fu,Bu,qu,Ku,Lu,Du,ju,Cr,Me,kr,vr,Er,Zo,Qo,ss],ta=new Map([["core",Nu],["failsafe",[$t,xt,Zn]],["json",Mu],["yaml11",ea],["yaml-1.1",ea]]),na={binary:Cr,bool:br,float:Bo,floatExp:Fo,floatNaN:jo,floatTime:Qo,int:Uo,intHex:Wo,intOct:Ko,intTime:Zo,map:$t,merge:Me,null:Qn,omap:kr,pairs:vr,seq:xt,set:Er,timestamp:ss},Uu={"tag:yaml.org,2002:binary":Cr,"tag:yaml.org,2002:merge":Me,"tag:yaml.org,2002:omap":kr,"tag:yaml.org,2002:pairs":vr,"tag:yaml.org,2002:set":Er,"tag:yaml.org,2002:timestamp":ss};function Ir(s,e,t){const n=ta.get(e);if(n&&!s)return t&&!n.includes(Me)?n.concat(Me):n.slice();let r=n;if(!r)if(Array.isArray(s))r=[];else{const i=Array.from(ta.keys()).filter(o=>o!=="yaml11").map(o=>JSON.stringify(o)).join(", ");throw new Error(`Unknown schema "${e}"; use one of ${i} or define customTags array`)}if(Array.isArray(s))for(const i of s)r=r.concat(i);else typeof s=="function"&&(r=s(r.slice()));return t&&(r=r.concat(Me)),r.reduce((i,o)=>{const a=typeof o=="string"?na[o]:o;if(!a){const l=JSON.stringify(o),u=Object.keys(na).map(d=>JSON.stringify(d)).join(", ");throw new Error(`Unknown custom tag ${l}; use one of ${u}`)}return i.includes(a)||i.push(a),i},[])}c(Ir,"getTags");const Wu=c((s,e)=>s.key<e.key?-1:s.key>e.key?1:0,"sortMapEntriesByKey");class Ds{static{c(this,"Schema")}constructor({compat:e,customTags:t,merge:n,resolveKnownTags:r,schema:i,sortMapEntries:o,toStringDefaults:a}){this.compat=Array.isArray(e)?Ir(e,"compat"):e?Ir(null,e):null,this.name=typeof i=="string"&&i||"core",this.knownTags=r?Uu:{},this.tags=Ir(t,this.name,n),this.toStringOptions=a??null,Object.defineProperty(this,Ke,{value:$t}),Object.defineProperty(this,Ae,{value:Zn}),Object.defineProperty(this,vt,{value:xt}),this.sortMapEntries=typeof o=="function"?o:o===!0?Wu:null}clone(){const e=Object.create(Ds.prototype,Object.getOwnPropertyDescriptors(this));return e.tags=this.tags.slice(),e}}function Ju(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 r=Po(s,e),{commentString:i}=r.options;if(s.commentBefore){t.length!==1&&t.unshift("");const l=i(s.commentBefore);t.unshift(Re(l,""))}let o=!1,a=null;if(s.contents){if(X(s.contents)){if(s.contents.spaceBefore&&n&&t.push(""),s.contents.commentBefore){const d=i(s.contents.commentBefore);t.push(Re(d,""))}r.forceBlockIndent=!!s.comment,a=s.contents.comment}const l=a?void 0:()=>o=!0;let u=Ot(s.contents,r,()=>a=null,l);a&&(u+=ot(u,"",i(a))),(u[0]==="|"||u[0]===">")&&t[t.length-1]==="---"?t[t.length-1]=`--- ${u}`:t.push(u)}else t.push(Ot(s.contents,r));if(s.directives?.docEnd)if(s.comment){const l=i(s.comment);l.includes(`
|
|
60
60
|
`)?(t.push("..."),t.push(Re(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(Re(i(l),"")))}return t.join(`
|
|
61
61
|
`)+`
|
|
62
|
-
`}c(
|
|
62
|
+
`}c(Ju,"stringifyDocument");class Jt{static{c(this,"Document")}constructor(e,t,n){this.commentBefore=null,this.comment=null,this.errors=[],this.warnings=[],Object.defineProperty(this,me,{value:fr});let r=null;typeof t=="function"||Array.isArray(t)?r=t:n===void 0&&t&&(n=t,t=void 0);const i=Object.assign({intAsBigInt:!1,keepSourceTokens:!1,logLevel:"warn",prettyErrors:!0,strict:!0,stringKeys:!1,uniqueKeys:!0,version:"1.2"},n);this.options=i;let{version:o}=i;n?._directives?(this.directives=n._directives.atDocument(),this.directives.yaml.explicit&&(o=this.directives.yaml.version)):this.directives=new ae({version:o}),this.setSchema(o,n),this.contents=e===void 0?null:this.createNode(e,r,n)}clone(){const e=Object.create(Jt.prototype,{[me]:{value:fr}});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=X(this.contents)?this.contents.clone(e.schema):this.contents,this.range&&(e.range=this.range.slice()),e}add(e){Nt(this.contents)&&this.contents.add(e)}addIn(e,t){Nt(this.contents)&&this.contents.addIn(e,t)}createAlias(e,t){if(!e.anchor){const n=Io(this);e.anchor=!t||n.has(t)?Ao(t||"a",n):t}return new qn(e.anchor)}createNode(e,t,n){let r;if(typeof t=="function")e=t.call({"":e},"",e),r=t;else if(Array.isArray(t)){const w=c(E=>typeof E=="number"||E instanceof String||E instanceof Number,"keyToStr"),T=t.filter(w).map(String);T.length>0&&(t=t.concat(T)),r=t}else n===void 0&&t&&(n=t,t=void 0);const{aliasDuplicateObjects:i,anchorPrefix:o,flow:a,keepUndefined:l,onTagObj:u,tag:d}=n??{},{onAnchor:f,setAnchors:h,sourceObjects:m}=bu(this,o||"a"),y={aliasDuplicateObjects:i??!0,keepUndefined:l??!1,onAnchor:f,onTagObj:u,replacer:r,schema:this.schema,sourceObjects:m},p=zt(e,d,y);return a&&Y(p)&&(p.flow=!0),h(),p}createPair(e,t,n={}){const r=this.createNode(e,null,n),i=this.createNode(t,null,n);return new re(r,i)}delete(e){return Nt(this.contents)?this.contents.delete(e):!1}deleteIn(e){return Gt(e)?this.contents==null?!1:(this.contents=null,!0):Nt(this.contents)?this.contents.deleteIn(e):!1}get(e,t){return Y(this.contents)?this.contents.get(e,t):void 0}getIn(e,t){return Gt(e)?!t&&V(this.contents)?this.contents.value:this.contents:Y(this.contents)?this.contents.getIn(e,t):void 0}has(e){return Y(this.contents)?this.contents.has(e):!1}hasIn(e){return Gt(e)?this.contents!==void 0:Y(this.contents)?this.contents.hasIn(e):!1}set(e,t){this.contents==null?this.contents=Un(this.schema,[e],t):Nt(this.contents)&&this.contents.set(e,t)}setIn(e,t){Gt(e)?this.contents=t:this.contents==null?this.contents=Un(this.schema,Array.from(e),t):Nt(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 ae({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 ae({version:e}),n={resolveKnownTags:!0,schema:"core"};break;case null:this.directives&&delete this.directives,n=null;break;default:{const r=JSON.stringify(e);throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${r}`)}}if(t.schema instanceof Object)this.schema=t.schema;else if(n)this.schema=new Ds(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:r,onAnchor:i,reviver:o}={}){const a={anchors:new Map,doc:this,keep:!e,mapAsMap:n===!0,mapKeyWarned:!1,maxAliasCount:typeof r=="number"?r:100},l=ge(this.contents,t??"",a);if(typeof i=="function")for(const{count:u,res:d}of a.anchors.values())i(d,u);return typeof o=="function"?It(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 Ju(this,e)}}function Nt(s){if(Y(s))return!0;throw new Error("Expected a YAML collection as document contents")}c(Nt,"assertCollection");class Ar extends Error{static{c(this,"YAMLError")}constructor(e,t,n,r){super(),this.name=e,this.code=n,this.message=r,this.pos=t}}class ct extends Ar{static{c(this,"YAMLParseError")}constructor(e,t,n){super("YAMLParseError",e,t,n)}}class sa extends Ar{static{c(this,"YAMLWarning")}constructor(e,t,n){super("YAMLWarning",e,t,n)}}const rs=c((s,e)=>t=>{if(t.pos[0]===-1)return;t.linePos=t.pos.map(a=>e.linePos(a));const{line:n,col:r}=t.linePos[0];t.message+=` at line ${n}, column ${r}`;let i=r-1,o=s.substring(e.lineStarts[n-1],e.lineStarts[n]).replace(/[\n\r]+$/,"");if(i>=60&&o.length>80){const a=Math.min(i-39,o.length-79);o="\u2026"+o.substring(a),i-=a-1}if(o.length>80&&(o=o.substring(0,79)+"\u2026"),n>1&&/^ *$/.test(o.substring(0,i))){let a=s.substring(e.lineStarts[n-2],e.lineStarts[n-1]);a.length>80&&(a=a.substring(0,79)+`\u2026
|
|
63
63
|
`),o=a+o}if(/[^ ]/.test(o)){let a=1;const l=t.linePos[1];l&&l.line===n&&l.col>r&&(a=Math.max(1,Math.min(l.col-r,80-i)));const u=" ".repeat(i)+"^".repeat(a);t.message+=`:
|
|
64
64
|
|
|
65
65
|
${o}
|
|
66
66
|
${u}
|
|
67
|
-
`}},"prettifyError");function Pt(s,{flow:e,indicator:t,next:n,offset:r,onError:i,parentIndent:o,startOnNewline:a}){let l=!1,u=a,d=a,f="",h="",m=!1,y=!1,p=null,w=null,T=null,E=null,$=null,I=null,
|
|
68
|
-
`))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(Qt(e.key)||Qt(e.value))return!0}return!1;default:return!0}}c(Qt,"containsNewline");function Or(s,e,t){if(e?.type==="flow-collection"){const n=e.end[0];n.indent===s&&(n.source==="]"||n.source==="}")&&Qt(e)&&t(n,"BAD_INDENT","Flow end indicator should be more indented than parent",!0)}}c(Or,"flowIndentCheck");function
|
|
69
|
-
`+p.comment:a.comment=p.comment);continue}(p.newlineAfterProp||Qt(h))&&r(h??f[f.length-1],"MULTILINE_IMPLICIT_KEY","Implicit keys need to be on a single line")}else p.found?.indent!==n.indent&&r(l,"BAD_INDENT",
|
|
70
|
-
`+$.comment:E.comment=$.comment);const I=new re(E);t.options.keepSourceTokens&&(I.srcToken=d),a.items.push(I)}}return u&&u<l&&r(u,"IMPOSSIBLE","Map comment with trailing content"),a.range=[n.offset,l,u??l],a}c(
|
|
71
|
-
`+R.comment:u.comment=R.comment),f=R.end;continue}!o&&t.options.strict&&Qt($)&&r($,"MULTILINE_IMPLICIT_KEY","Implicit keys of flow sequence pairs need to be on a single line")}if(w===0)R.comma&&r(R.comma,"UNEXPECTED_TOKEN",`Unexpected , in ${a}`);else if(R.comma||r(R.start,"MISSING_CHAR",`Missing , between ${a} items`),R.comment){let
|
|
72
|
-
`+
|
|
73
|
-
`+te.comment:O.comment=te.comment);const ht=new re(O,
|
|
74
|
-
`+w.comment:u.comment=w.comment),u.range=[n.offset,p,w.offset]}else u.range=[n.offset,p,p];return u}c(
|
|
67
|
+
`}},"prettifyError");function Pt(s,{flow:e,indicator:t,next:n,offset:r,onError:i,parentIndent:o,startOnNewline:a}){let l=!1,u=a,d=a,f="",h="",m=!1,y=!1,p=null,w=null,T=null,E=null,$=null,I=null,N=null;for(const O of s)switch(y&&(O.type!=="space"&&O.type!=="newline"&&O.type!=="comma"&&i(O.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),y=!1),p&&(u&&O.type!=="comment"&&O.type!=="newline"&&i(p,"TAB_AS_INDENT","Tabs are not allowed as indentation"),p=null),O.type){case"space":!e&&(t!=="doc-start"||n?.type!=="flow-collection")&&O.source.includes(" ")&&(p=O),d=!0;break;case"comment":{d||i(O,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");const te=O.source.substring(1)||" ";f?f+=h+te:f=te,h="",u=!1;break}case"newline":u?f?f+=O.source:(!I||t!=="seq-item-ind")&&(l=!0):h+=O.source,u=!0,m=!0,(w||T)&&(E=O),d=!0;break;case"anchor":w&&i(O,"MULTIPLE_ANCHORS","A node can have at most one anchor"),O.source.endsWith(":")&&i(O.offset+O.source.length-1,"BAD_ALIAS","Anchor ending in : is ambiguous",!0),w=O,N??(N=O.offset),u=!1,d=!1,y=!0;break;case"tag":{T&&i(O,"MULTIPLE_TAGS","A node can have at most one tag"),T=O,N??(N=O.offset),u=!1,d=!1,y=!0;break}case t:(w||T)&&i(O,"BAD_PROP_ORDER",`Anchors and tags must be after the ${O.source} indicator`),I&&i(O,"UNEXPECTED_TOKEN",`Unexpected ${O.source} in ${e??"collection"}`),I=O,u=t==="seq-item-ind"||t==="explicit-key-ind",d=!1;break;case"comma":if(e){$&&i(O,"UNEXPECTED_TOKEN",`Unexpected , in ${e}`),$=O,u=!1,d=!1;break}default:i(O,"UNEXPECTED_TOKEN",`Unexpected ${O.type} token`),u=!1,d=!1}const R=s[s.length-1],F=R?R.offset+R.source.length:r;return y&&n&&n.type!=="space"&&n.type!=="newline"&&n.type!=="comma"&&(n.type!=="scalar"||n.source!=="")&&i(n.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),p&&(u&&p.indent<=o||n?.type==="block-map"||n?.type==="block-seq")&&i(p,"TAB_AS_INDENT","Tabs are not allowed as indentation"),{comma:$,found:I,spaceBefore:l,comment:f,hasNewline:m,anchor:w,tag:T,newlineAfterProp:E,end:F,start:N??F}}c(Pt,"resolveProps");function Qt(s){if(!s)return null;switch(s.type){case"alias":case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":if(s.source.includes(`
|
|
68
|
+
`))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(Qt(e.key)||Qt(e.value))return!0}return!1;default:return!0}}c(Qt,"containsNewline");function Or(s,e,t){if(e?.type==="flow-collection"){const n=e.end[0];n.indent===s&&(n.source==="]"||n.source==="}")&&Qt(e)&&t(n,"BAD_INDENT","Flow end indicator should be more indented than parent",!0)}}c(Or,"flowIndentCheck");function ra(s,e,t){const{uniqueKeys:n}=s.options;if(n===!1)return!1;const r=typeof n=="function"?n:(i,o)=>i===o||V(i)&&V(o)&&i.value===o.value;return e.some(i=>r(i.key,t))}c(ra,"mapIncludes");const ia="All mapping items must start at the same column";function Hu({composeNode:s,composeEmptyNode:e},t,n,r,i){const o=i?.nodeClass??ue,a=new o(t.schema);t.atRoot&&(t.atRoot=!1);let l=n.offset,u=null;for(const d of n.items){const{start:f,key:h,sep:m,value:y}=d,p=Pt(f,{indicator:"explicit-key-ind",next:h??m?.[0],offset:l,onError:r,parentIndent:n.indent,startOnNewline:!0}),w=!p.found;if(w){if(h&&(h.type==="block-seq"?r(l,"BLOCK_AS_IMPLICIT_KEY","A block sequence may not be used as an implicit map key"):"indent"in h&&h.indent!==n.indent&&r(l,"BAD_INDENT",ia)),!p.anchor&&!p.tag&&!m){u=p.end,p.comment&&(a.comment?a.comment+=`
|
|
69
|
+
`+p.comment:a.comment=p.comment);continue}(p.newlineAfterProp||Qt(h))&&r(h??f[f.length-1],"MULTILINE_IMPLICIT_KEY","Implicit keys need to be on a single line")}else p.found?.indent!==n.indent&&r(l,"BAD_INDENT",ia);t.atKey=!0;const T=p.end,E=h?s(t,h,p,r):e(t,T,f,null,p,r);t.schema.compat&&Or(n.indent,h,r),t.atKey=!1,ra(t,a.items,E)&&r(T,"DUPLICATE_KEY","Map keys must be unique");const $=Pt(m??[],{indicator:"map-value-ind",next:y,offset:E.range[2],onError:r,parentIndent:n.indent,startOnNewline:!h||h.type==="block-scalar"});if(l=$.end,$.found){w&&(y?.type==="block-map"&&!$.hasNewline&&r(l,"BLOCK_AS_IMPLICIT_KEY","Nested mappings are not allowed in compact mappings"),t.options.strict&&p.start<$.found.offset-1024&&r(E.range,"KEY_OVER_1024_CHARS","The : indicator must be at most 1024 chars after the start of an implicit block mapping key"));const I=y?s(t,y,$,r):e(t,l,m,null,$,r);t.schema.compat&&Or(n.indent,y,r),l=I.range[2];const N=new re(E,I);t.options.keepSourceTokens&&(N.srcToken=d),a.items.push(N)}else{w&&r(E.range,"MISSING_CHAR","Implicit map keys need to be followed by map values"),$.comment&&(E.comment?E.comment+=`
|
|
70
|
+
`+$.comment:E.comment=$.comment);const I=new re(E);t.options.keepSourceTokens&&(I.srcToken=d),a.items.push(I)}}return u&&u<l&&r(u,"IMPOSSIBLE","Map comment with trailing content"),a.range=[n.offset,l,u??l],a}c(Hu,"resolveBlockMap");function Vu({composeNode:s,composeEmptyNode:e},t,n,r,i){const o=i?.nodeClass??We,a=new o(t.schema);t.atRoot&&(t.atRoot=!1),t.atKey&&(t.atKey=!1);let l=n.offset,u=null;for(const{start:d,value:f}of n.items){const h=Pt(d,{indicator:"seq-item-ind",next:f,offset:l,onError:r,parentIndent:n.indent,startOnNewline:!0});if(!h.found)if(h.anchor||h.tag||f)f&&f.type==="block-seq"?r(h.end,"BAD_INDENT","All sequence items must start at the same column"):r(l,"MISSING_CHAR","Sequence item without - indicator");else{u=h.end,h.comment&&(a.comment=h.comment);continue}const m=f?s(t,f,h,r):e(t,h.end,d,null,h,r);t.schema.compat&&Or(n.indent,f,r),l=m.range[2],a.items.push(m)}return a.range=[n.offset,l,u??l],a}c(Vu,"resolveBlockSeq");function en(s,e,t,n){let r="";if(s){let i=!1,o="";for(const a of s){const{source:l,type:u}=a;switch(u){case"space":i=!0;break;case"comment":{t&&!i&&n(a,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");const d=l.substring(1)||" ";r?r+=o+d:r=d,o="";break}case"newline":r&&(o+=l),i=!0;break;default:n(a,"UNEXPECTED_TOKEN",`Unexpected ${u} at node end`)}e+=l.length}}return{comment:r,offset:e}}c(en,"resolveEnd");const $r="Block collections are not allowed within flow collections",xr=c(s=>s&&(s.type==="block-map"||s.type==="block-seq"),"isBlock");function zu({composeNode:s,composeEmptyNode:e},t,n,r,i){const o=n.start.source==="{",a=o?"flow map":"flow sequence",l=i?.nodeClass??(o?ue:We),u=new l(t.schema);u.flow=!0;const d=t.atRoot;d&&(t.atRoot=!1),t.atKey&&(t.atKey=!1);let f=n.offset+n.start.source.length;for(let w=0;w<n.items.length;++w){const T=n.items[w],{start:E,key:$,sep:I,value:N}=T,R=Pt(E,{flow:a,indicator:"explicit-key-ind",next:$??I?.[0],offset:f,onError:r,parentIndent:n.indent,startOnNewline:!1});if(!R.found){if(!R.anchor&&!R.tag&&!I&&!N){w===0&&R.comma?r(R.comma,"UNEXPECTED_TOKEN",`Unexpected , in ${a}`):w<n.items.length-1&&r(R.start,"UNEXPECTED_TOKEN",`Unexpected empty item in ${a}`),R.comment&&(u.comment?u.comment+=`
|
|
71
|
+
`+R.comment:u.comment=R.comment),f=R.end;continue}!o&&t.options.strict&&Qt($)&&r($,"MULTILINE_IMPLICIT_KEY","Implicit keys of flow sequence pairs need to be on a single line")}if(w===0)R.comma&&r(R.comma,"UNEXPECTED_TOKEN",`Unexpected , in ${a}`);else if(R.comma||r(R.start,"MISSING_CHAR",`Missing , between ${a} items`),R.comment){let F="";e:for(const O of E)switch(O.type){case"comma":case"space":break;case"comment":F=O.source.substring(1);break e;default:break e}if(F){let O=u.items[u.items.length-1];z(O)&&(O=O.value??O.key),O.comment?O.comment+=`
|
|
72
|
+
`+F:O.comment=F,R.comment=R.comment.substring(F.length+1)}}if(!o&&!I&&!R.found){const F=N?s(t,N,R,r):e(t,R.end,I,null,R,r);u.items.push(F),f=F.range[2],xr(N)&&r(F.range,"BLOCK_IN_FLOW",$r)}else{t.atKey=!0;const F=R.end,O=$?s(t,$,R,r):e(t,F,E,null,R,r);xr($)&&r(O.range,"BLOCK_IN_FLOW",$r),t.atKey=!1;const te=Pt(I??[],{flow:a,indicator:"map-value-ind",next:N,offset:O.range[2],onError:r,parentIndent:n.indent,startOnNewline:!1});if(te.found){if(!o&&!R.found&&t.options.strict){if(I)for(const ne of I){if(ne===te.found)break;if(ne.type==="newline"){r(ne,"MULTILINE_IMPLICIT_KEY","Implicit keys of flow sequence pairs need to be on a single line");break}}R.start<te.found.offset-1024&&r(te.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]===":"?r(N,"MISSING_CHAR",`Missing space after : in ${a}`):r(te.start,"MISSING_CHAR",`Missing , or : between ${a} items`));const qe=N?s(t,N,te,r):te.found?e(t,te.end,I,null,te,r):null;qe?xr(N)&&r(qe.range,"BLOCK_IN_FLOW",$r):te.comment&&(O.comment?O.comment+=`
|
|
73
|
+
`+te.comment:O.comment=te.comment);const ht=new re(O,qe);if(t.options.keepSourceTokens&&(ht.srcToken=T),o){const ne=u;ra(t,ne.items,O)&&r(F,"DUPLICATE_KEY","Map keys must be unique"),ne.items.push(ht)}else{const ne=new ue(t.schema);ne.flow=!0,ne.items.push(ht);const Ii=(qe??O).range;ne.range=[O.range[0],Ii[1],Ii[2]],u.items.push(ne)}f=qe?qe.range[2]:te.end}}const h=o?"}":"]",[m,...y]=n.end;let p=f;if(m&&m.source===h)p=m.offset+m.source.length;else{const w=a[0].toUpperCase()+a.substring(1),T=d?`${w} must end with a ${h}`:`${w} in block collection must be sufficiently indented and end with a ${h}`;r(f,d?"MISSING_CHAR":"BAD_INDENT",T),m&&m.source.length!==1&&y.unshift(m)}if(y.length>0){const w=en(y,p,t.options.strict,r);w.comment&&(u.comment?u.comment+=`
|
|
74
|
+
`+w.comment:u.comment=w.comment),u.range=[n.offset,p,w.offset]}else u.range=[n.offset,p,p];return u}c(zu,"resolveFlowCollection");function Nr(s,e,t,n,r,i){const o=t.type==="block-map"?Hu(s,e,t,n,i):t.type==="block-seq"?Vu(s,e,t,n,i):zu(s,e,t,n,i),a=o.constructor;return r==="!"||r===a.tagName?(o.tag=a.tagName,o):(r&&(o.tag=r),o)}c(Nr,"resolveCollection");function Gu(s,e,t,n,r){const i=n.tag,o=i?e.directives.tagName(i.source,h=>r(i,"TAG_RESOLVE_FAILED",h)):null;if(t.type==="block-seq"){const{anchor:h,newlineAfterProp:m}=n,y=h&&i?h.offset>i.offset?h:i:h??i;y&&(!m||m.offset<y.offset)&&r(y,"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(!i||!o||o==="!"||o===ue.tagName&&a==="map"||o===We.tagName&&a==="seq")return Nr(s,e,t,r,o);let l=e.schema.tags.find(h=>h.tag===o&&h.collection===a);if(!l){const h=e.schema.knownTags[o];if(h&&h.collection===a)e.schema.tags.push(Object.assign({},h,{default:!1})),l=h;else return h?r(i,"BAD_COLLECTION_TYPE",`${h.tag} used for ${a} collection, but expects ${h.collection??"scalar"}`,!0):r(i,"TAG_RESOLVE_FAILED",`Unresolved tag: ${o}`,!0),Nr(s,e,t,r,o)}const u=Nr(s,e,t,r,o,l),d=l.resolve?.(u,h=>r(i,"TAG_RESOLVE_FAILED",h),e.options)??u,f=X(d)?d:new M(d);return f.range=u.range,f.tag=o,l?.format&&(f.format=l.format),f}c(Gu,"composeCollection");function oa(s,e,t){const n=e.offset,r=Yu(e,s.options.strict,t);if(!r)return{value:"",type:null,comment:"",range:[n,n,n]};const i=r.mode===">"?M.BLOCK_FOLDED:M.BLOCK_LITERAL,o=e.source?Xu(e.source):[];let a=o.length;for(let p=o.length-1;p>=0;--p){const w=o[p][1];if(w===""||w==="\r")a=p;else break}if(a===0){const p=r.chomp==="+"&&o.length>0?`
|
|
75
75
|
`.repeat(Math.max(1,o.length-1)):"";let w=n+r.length;return e.source&&(w+=e.source.length),{value:p,type:i,comment:r.comment,range:[n,w,w]}}let l=e.indent+r.indent,u=e.offset+r.length,d=0;for(let p=0;p<a;++p){const[w,T]=o[p];if(T===""||T==="\r")r.indent===0&&w.length>l&&(l=w.length);else{w.length<l&&t(u+w.length,"MISSING_CHAR","Block scalars with more-indented leading empty lines must use an explicit indentation indicator"),r.indent===0&&(l=w.length),d=p,l===0&&!s.atRoot&&t(u,"BAD_INDENT","Block scalar values in collections must be indented");break}u+=w.length+T.length+1}for(let p=o.length-1;p>=a;--p)o[p][0].length>l&&(a=p+1);let f="",h="",m=!1;for(let p=0;p<d;++p)f+=o[p][0].slice(l)+`
|
|
76
76
|
`;for(let p=d;p<a;++p){let[w,T]=o[p];u+=w.length+T.length+1;const E=T[T.length-1]==="\r";if(E&&(T=T.slice(0,-1)),T&&w.length<l){const I=`Block scalar lines must not be less indented than their ${r.indent?"explicit indentation indicator":"first line"}`;t(u-T.length-(E?2:1),"BAD_INDENT",I),w=""}i===M.BLOCK_LITERAL?(f+=h+w.slice(l)+T,h=`
|
|
77
77
|
`):w.length>l||T[0]===" "?(h===" "?h=`
|
|
@@ -86,41 +86,41 @@ ${u}
|
|
|
86
86
|
`+o[p][0].slice(l);f[f.length-1]!==`
|
|
87
87
|
`&&(f+=`
|
|
88
88
|
`);break;default:f+=`
|
|
89
|
-
`}const y=n+r.length+e.source.length;return{value:f,type:i,comment:r.comment,range:[n,y,y]}}c(
|
|
89
|
+
`}const y=n+r.length+e.source.length;return{value:f,type:i,comment:r.comment,range:[n,y,y]}}c(oa,"resolveBlockScalar");function Yu({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:r}=e[0],i=r[0];let o=0,a="",l=-1;for(let h=1;h<r.length;++h){const m=r[h];if(!a&&(m==="-"||m==="+"))a=m;else{const y=Number(m);!o&&y?o=y:l===-1&&(l=s+h)}}l!==-1&&n(l,"UNEXPECTED_TOKEN",`Block scalar header includes extra characters: ${r}`);let u=!1,d="",f=r.length;for(let h=1;h<e.length;++h){const m=e[h];switch(m.type){case"space":u=!0;case"newline":f+=m.source.length;break;case"comment":t&&!u&&n(m,"MISSING_CHAR","Comments must be separated from other tokens by white space characters"),f+=m.source.length,d=m.source.substring(1);break;case"error":n(m,"UNEXPECTED_TOKEN",m.message),f+=m.source.length;break;default:{const y=`Unexpected token in block scalar header: ${m.type}`;n(m,"UNEXPECTED_TOKEN",y);const p=m.source;p&&typeof p=="string"&&(f+=p.length)}}}return{mode:i,indent:o,chomp:a,comment:d,length:f}}c(Yu,"parseBlockScalarHeader");function Xu(s){const e=s.split(/\n( *)/),t=e[0],n=t.match(/^( *)/),i=[n?.[1]?[n[1],t.slice(n[1].length)]:["",t]];for(let o=1;o<e.length;o+=2)i.push([e[o],e[o+1]]);return i}c(Xu,"splitLines");function aa(s,e,t){const{offset:n,type:r,source:i,end:o}=s;let a,l;const u=c((h,m,y)=>t(n+h,m,y),"_onError");switch(r){case"scalar":a=M.PLAIN,l=Zu(i,u);break;case"single-quoted-scalar":a=M.QUOTE_SINGLE,l=Qu(i,u);break;case"double-quoted-scalar":a=M.QUOTE_DOUBLE,l=ed(i,u);break;default:return t(s,"UNEXPECTED_TOKEN",`Expected a flow scalar value, but found: ${r}`),{value:"",type:null,comment:"",range:[n,n+i.length,n+i.length]}}const d=n+i.length,f=en(o,d,e,t);return{value:l,type:a,comment:f.comment,range:[n,d,f.offset]}}c(aa,"resolveFlowScalar");function Zu(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}`),ca(s)}c(Zu,"plainValue");function Qu(s,e){return(s[s.length-1]!=="'"||s.length===1)&&e(s.length,"MISSING_CHAR","Missing closing 'quote"),ca(s.slice(1,-1)).replace(/''/g,"'")}c(Qu,"singleQuotedValue");function ca(s){let e,t;try{e=new RegExp(`(.*?)(?<![ ])[ ]*\r?
|
|
90
90
|
`,"sy"),t=new RegExp(`[ ]*(.*?)(?:(?<![ ])[ ]*)?\r?
|
|
91
91
|
`,"sy")}catch{e=/(.*?)[ \t]*\r?\n/sy,t=/[ \t]*(.*?)[ \t]*\r?\n/sy}let n=e.exec(s);if(!n)return s;let r=n[1],i=" ",o=e.lastIndex;for(t.lastIndex=o;n=t.exec(s);)n[1]===""?i===`
|
|
92
92
|
`?r+=i:i=`
|
|
93
|
-
`:(r+=i+n[1],i=" "),o=t.lastIndex;const a=/[ \t]*(.*)/sy;return a.lastIndex=o,n=a.exec(s),r+i+(n?.[1]??"")}c(
|
|
93
|
+
`:(r+=i+n[1],i=" "),o=t.lastIndex;const a=/[ \t]*(.*)/sy;return a.lastIndex=o,n=a.exec(s),r+i+(n?.[1]??"")}c(ca,"foldLines");function ed(s,e){let t="";for(let n=1;n<s.length-1;++n){const r=s[n];if(!(r==="\r"&&s[n+1]===`
|
|
94
94
|
`))if(r===`
|
|
95
|
-
`){const{fold:i,offset:o}=
|
|
95
|
+
`){const{fold:i,offset:o}=td(s,n);t+=i,n=o}else if(r==="\\"){let i=s[++n];const o=nd[i];if(o)t+=o;else if(i===`
|
|
96
96
|
`)for(i=s[n+1];i===" "||i===" ";)i=s[++n+1];else if(i==="\r"&&s[n+1]===`
|
|
97
|
-
`)for(i=s[++n+1];i===" "||i===" ";)i=s[++n+1];else if(i==="x"||i==="u"||i==="U"){const a={x:2,u:4,U:8}[i];t+=
|
|
97
|
+
`)for(i=s[++n+1];i===" "||i===" ";)i=s[++n+1];else if(i==="x"||i==="u"||i==="U"){const a={x:2,u:4,U:8}[i];t+=sd(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(r===" "||r===" "){const i=n;let o=s[n+1];for(;o===" "||o===" ";)o=s[++n+1];o!==`
|
|
98
98
|
`&&!(o==="\r"&&s[n+2]===`
|
|
99
|
-
`)&&(t+=n>i?s.slice(i,n+1):r)}else t+=r}return(s[s.length-1]!=='"'||s.length===1)&&e(s.length,"MISSING_CHAR",'Missing closing "quote'),t}c(
|
|
99
|
+
`)&&(t+=n>i?s.slice(i,n+1):r)}else t+=r}return(s[s.length-1]!=='"'||s.length===1)&&e(s.length,"MISSING_CHAR",'Missing closing "quote'),t}c(ed,"doubleQuotedValue");function td(s,e){let t="",n=s[e+1];for(;(n===" "||n===" "||n===`
|
|
100
100
|
`||n==="\r")&&!(n==="\r"&&s[e+2]!==`
|
|
101
101
|
`);)n===`
|
|
102
102
|
`&&(t+=`
|
|
103
|
-
`),e+=1,n=s[e+1];return t||(t=" "),{fold:t,offset:e}}c(
|
|
104
|
-
`,r:"\r",t:" ",v:"\v",N:"\x85",_:"\xA0",L:"\u2028",P:"\u2029"," ":" ",'"':'"',"/":"/","\\":"\\"," ":" "};function
|
|
103
|
+
`),e+=1,n=s[e+1];return t||(t=" "),{fold:t,offset:e}}c(td,"foldNewline");const nd={0:"\0",a:"\x07",b:"\b",e:"\x1B",f:"\f",n:`
|
|
104
|
+
`,r:"\r",t:" ",v:"\v",N:"\x85",_:"\xA0",L:"\u2028",P:"\u2029"," ":" ",'"':'"',"/":"/","\\":"\\"," ":" "};function sd(s,e,t,n){const r=s.substr(e,t),o=r.length===t&&/^[0-9a-fA-F]+$/.test(r)?parseInt(r,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(sd,"parseCharCode");function la(s,e,t,n){const{value:r,type:i,comment:o,range:a}=e.type==="block-scalar"?oa(s,e,n):aa(e,s.options.strict,n),l=t?s.directives.tagName(t.source,f=>n(t,"TAG_RESOLVE_FAILED",f)):null;let u;s.options.stringKeys&&s.atKey?u=s.schema[Ae]:l?u=rd(s.schema,r,l,t,n):e.type==="scalar"?u=id(s,r,e,n):u=s.schema[Ae];let d;try{const f=u.resolve(r,h=>n(t??e,"TAG_RESOLVE_FAILED",h),s.options);d=V(f)?f:new M(f)}catch(f){const h=f instanceof Error?f.message:String(f);n(t??e,"TAG_RESOLVE_FAILED",h),d=new M(r)}return d.range=a,d.source=r,i&&(d.type=i),l&&(d.tag=l),u.format&&(d.format=u.format),o&&(d.comment=o),d}c(la,"composeScalar");function rd(s,e,t,n,r){if(t==="!")return s[Ae];const i=[];for(const a of s.tags)if(!a.collection&&a.tag===t)if(a.default&&a.test)i.push(a);else return a;for(const a of i)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):(r(n,"TAG_RESOLVE_FAILED",`Unresolved tag: ${t}`,t!=="tag:yaml.org,2002:str"),s[Ae])}c(rd,"findScalarTagByName");function id({atKey:s,directives:e,schema:t},n,r,i){const o=t.tags.find(a=>(a.default===!0||s&&a.default==="key")&&a.test?.test(n))||t[Ae];if(t.compat){const a=t.compat.find(l=>l.default&&l.test?.test(n))??t[Ae];if(o.tag!==a.tag){const l=e.tagString(o.tag),u=e.tagString(a.tag),d=`Value may be parsed as either ${l} or ${u}`;i(r,"TAG_RESOLVE_FAILED",d,!0)}}return o}c(id,"findScalarTagByTest");function od(s,e,t){if(e){t??(t=e.length);for(let n=t-1;n>=0;--n){let r=e[n];switch(r.type){case"space":case"comment":case"newline":s-=r.source.length;continue}for(r=e[++n];r?.type==="space";)s+=r.source.length,r=e[++n];break}}return s}c(od,"emptyScalarPosition");const ad={composeNode:ua,composeEmptyNode:Pr};function ua(s,e,t,n){const r=s.atKey,{spaceBefore:i,comment:o,anchor:a,tag:l}=t;let u,d=!0;switch(e.type){case"alias":u=cd(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=la(s,e,l,n),a&&(u.anchor=a.source.substring(1));break;case"block-map":case"block-seq":case"flow-collection":u=Gu(ad,s,e,t,n),a&&(u.anchor=a.source.substring(1));break;default:{const f=e.type==="error"?e.message:`Unsupported token (type: ${e.type})`;n(e,"UNEXPECTED_TOKEN",f),u=Pr(s,e.offset,void 0,null,t,n),d=!1}}return a&&u.anchor===""&&n(a,"BAD_ALIAS","Anchor cannot be an empty string"),r&&s.options.stringKeys&&(!V(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"),i&&(u.spaceBefore=!0),o&&(e.type==="scalar"&&e.source===""?u.comment=o:u.commentBefore=o),s.options.keepSourceTokens&&d&&(u.srcToken=e),u}c(ua,"composeNode");function Pr(s,e,t,n,{spaceBefore:r,comment:i,anchor:o,tag:a,end:l},u){const d={type:"scalar",offset:od(e,t,n),indent:-1,source:""},f=la(s,d,a,u);return o&&(f.anchor=o.source.substring(1),f.anchor===""&&u(o,"BAD_ALIAS","Anchor cannot be an empty string")),r&&(f.spaceBefore=!0),i&&(f.comment=i,f.range[2]=l),f}c(Pr,"composeEmptyNode");function cd({options:s},{offset:e,source:t,end:n},r){const i=new qn(t.substring(1));i.source===""&&r(e,"BAD_ALIAS","Alias cannot be an empty string"),i.source.endsWith(":")&&r(e+t.length-1,"BAD_ALIAS","Alias ending in : is ambiguous",!0);const o=e+t.length,a=en(n,o,s.strict,r);return i.range=[e,o,a.offset],a.comment&&(i.comment=a.comment),i}c(cd,"composeAlias");function ld(s,e,{offset:t,start:n,value:r,end:i},o){const a=Object.assign({_directives:e},s),l=new Jt(void 0,a),u={atKey:!1,atRoot:!0,directives:l.directives,options:l.options,schema:l.schema},d=Pt(n,{indicator:"doc-start",next:r??i?.[0],offset:t,onError:o,parentIndent:0,startOnNewline:!0});d.found&&(l.directives.docStart=!0,r&&(r.type==="block-map"||r.type==="block-seq")&&!d.hasNewline&&o(d.end,"MISSING_CHAR","Block collection cannot start on same line with directives-end marker")),l.contents=r?ua(u,r,d,o):Pr(u,d.end,n,null,d,o);const f=l.contents.range[2],h=en(i,f,!1,o);return h.comment&&(l.comment=h.comment),l.range=[t,f,h.offset],l}c(ld,"composeDoc");function tn(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(tn,"getErrorPos");function da(s){let e="",t=!1,n=!1;for(let r=0;r<s.length;++r){const i=s[r];switch(i[0]){case"#":e+=(e===""?"":n?`
|
|
105
105
|
|
|
106
106
|
`:`
|
|
107
|
-
`)+(i.substring(1)||" "),t=!0,n=!1;break;case"%":s[r+1]?.[0]!=="#"&&(r+=1),t=!1;break;default:t||(n=!0),t=!1}}return{comment:e,afterEmptyLine:n}}c(
|
|
107
|
+
`)+(i.substring(1)||" "),t=!0,n=!1;break;case"%":s[r+1]?.[0]!=="#"&&(r+=1),t=!1;break;default:t||(n=!0),t=!1}}return{comment:e,afterEmptyLine:n}}c(da,"parsePrelude");class Rr{static{c(this,"Composer")}constructor(e={}){this.doc=null,this.atDirectives=!1,this.prelude=[],this.errors=[],this.warnings=[],this.onError=(t,n,r,i)=>{const o=tn(t);i?this.warnings.push(new sa(o,n,r)):this.errors.push(new ct(o,n,r))},this.directives=new ae({version:e.version||"1.2"}),this.options=e}decorate(e,t){const{comment:n,afterEmptyLine:r}=da(this.prelude);if(n){const i=e.contents;if(t)e.comment=e.comment?`${e.comment}
|
|
108
108
|
${n}`:n;else if(r||e.directives.docStart||!i)e.commentBefore=n;else if(Y(i)&&!i.flow&&i.items.length>0){let o=i.items[0];z(o)&&(o=o.key);const a=o.commentBefore;o.commentBefore=a?`${n}
|
|
109
109
|
${a}`:n}else{const o=i.commentBefore;i.commentBefore=o?`${n}
|
|
110
|
-
${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:
|
|
111
|
-
${t.comment}`:t.comment}this.doc.range[2]=t.offset;break}default:this.errors.push(new ct(tn(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),r=new Jt(void 0,n);this.atDirectives&&this.onError(t,"MISSING_CHAR","Missing directives-end indicator line"),r.range=[0,t,t],this.decorate(r,!1),yield r}}}function
|
|
110
|
+
${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:da(this.prelude).comment,directives:this.directives,errors:this.errors,warnings:this.warnings}}*compose(e,t=!1,n=-1){for(const r of e)yield*this.next(r);yield*this.end(t,n)}*next(e){switch(e.type){case"directive":this.directives.add(e.source,(t,n,r)=>{const i=tn(e);i[0]+=t,this.onError(i,"BAD_DIRECTIVE",n,r)}),this.prelude.push(e.source),this.atDirectives=!0;break;case"document":{const t=ld(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 ct(tn(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 ct(tn(e),"UNEXPECTED_TOKEN",n));break}this.doc.directives.docEnd=!0;const t=en(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}
|
|
111
|
+
${t.comment}`:t.comment}this.doc.range[2]=t.offset;break}default:this.errors.push(new ct(tn(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),r=new Jt(void 0,n);this.atDirectives&&this.onError(t,"MISSING_CHAR","Missing directives-end indicator line"),r.range=[0,t,t],this.decorate(r,!1),yield r}}}function ud(s,e=!0,t){if(s){const n=c((r,i,o)=>{const a=typeof r=="number"?r:Array.isArray(r)?r[0]:r.offset;if(t)t(a,i,o);else throw new ct([a,a+1],i,o)},"_onError");switch(s.type){case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return aa(s,e,n);case"block-scalar":return oa({options:{strict:e}},s,n)}}return null}c(ud,"resolveAsScalar");function dd(s,e){const{implicitKey:t=!1,indent:n,inFlow:r=!1,offset:i=-1,type:o="PLAIN"}=e,a=Xt({type:o,value:s},{implicitKey:t,indent:n>0?" ".repeat(n):"",inFlow:r,options:{blockQuote:!0,lineWidth:-1}}),l=e.end??[{type:"newline",offset:-1,indent:n,source:`
|
|
112
112
|
`}];switch(a[0]){case"|":case">":{const u=a.indexOf(`
|
|
113
113
|
`),d=a.substring(0,u),f=a.substring(u+1)+`
|
|
114
|
-
`,h=[{type:"block-scalar-header",offset:i,indent:n,source:d}];return
|
|
115
|
-
`}),{type:"block-scalar",offset:i,indent:n,props:h,source:f}}case'"':return{type:"double-quoted-scalar",offset:i,indent:n,source:a,end:l};case"'":return{type:"single-quoted-scalar",offset:i,indent:n,source:a,end:l};default:return{type:"scalar",offset:i,indent:n,source:a,end:l}}}c(
|
|
114
|
+
`,h=[{type:"block-scalar-header",offset:i,indent:n,source:d}];return fa(h,l)||h.push({type:"newline",offset:-1,indent:n,source:`
|
|
115
|
+
`}),{type:"block-scalar",offset:i,indent:n,props:h,source:f}}case'"':return{type:"double-quoted-scalar",offset:i,indent:n,source:a,end:l};case"'":return{type:"single-quoted-scalar",offset:i,indent:n,source:a,end:l};default:return{type:"scalar",offset:i,indent:n,source:a,end:l}}}c(dd,"createScalarToken");function fd(s,e,t={}){let{afterKey:n=!1,implicitKey:r=!1,inFlow:i=!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=Xt({type:o,value:e},{implicitKey:r||a===null,indent:a!==null&&a>0?" ".repeat(a):"",inFlow:i,options:{blockQuote:!0,lineWidth:-1}});switch(l[0]){case"|":case">":hd(s,l);break;case'"':Mr(s,l,"double-quoted-scalar");break;case"'":Mr(s,l,"single-quoted-scalar");break;default:Mr(s,l,"scalar")}}c(fd,"setScalarValue");function hd(s,e){const t=e.indexOf(`
|
|
116
116
|
`),n=e.substring(0,t),r=e.substring(t+1)+`
|
|
117
|
-
`;if(s.type==="block-scalar"){const i=s.props[0];if(i.type!=="block-scalar-header")throw new Error("Invalid block scalar header");i.source=n,s.source=r}else{const{offset:i}=s,o="indent"in s?s.indent:-1,a=[{type:"block-scalar-header",offset:i,indent:o,source:n}];
|
|
118
|
-
`});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:r})}}c(
|
|
119
|
-
`};delete s.items,Object.assign(s,{type:t,source:e,end:[r]});break}default:{const n="indent"in s?s.indent:-1,r="end"in s&&Array.isArray(s.end)?s.end.filter(i=>i.type==="space"||i.type==="comment"||i.type==="newline"):[];for(const i of Object.keys(s))i!=="type"&&i!=="offset"&&delete s[i];Object.assign(s,{type:t,indent:n,source:e,end:r})}}}c(Mr,"setFlowScalarValue");const
|
|
117
|
+
`;if(s.type==="block-scalar"){const i=s.props[0];if(i.type!=="block-scalar-header")throw new Error("Invalid block scalar header");i.source=n,s.source=r}else{const{offset:i}=s,o="indent"in s?s.indent:-1,a=[{type:"block-scalar-header",offset:i,indent:o,source:n}];fa(a,"end"in s?s.end:void 0)||a.push({type:"newline",offset:-1,indent:o,source:`
|
|
118
|
+
`});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:r})}}c(hd,"setBlockScalarValue");function fa(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(fa,"addEndtoBlockProps");function Mr(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 r=e.length;s.props[0].type==="block-scalar-header"&&(r-=s.props[0].source.length);for(const i of n)i.offset+=r;delete s.props,Object.assign(s,{type:t,source:e,end:n});break}case"block-map":case"block-seq":{const r={type:"newline",offset:s.offset+e.length,indent:s.indent,source:`
|
|
119
|
+
`};delete s.items,Object.assign(s,{type:t,source:e,end:[r]});break}default:{const n="indent"in s?s.indent:-1,r="end"in s&&Array.isArray(s.end)?s.end.filter(i=>i.type==="space"||i.type==="comment"||i.type==="newline"):[];for(const i of Object.keys(s))i!=="type"&&i!=="offset"&&delete s[i];Object.assign(s,{type:t,indent:n,source:e,end:r})}}}c(Mr,"setFlowScalarValue");const pd=c(s=>"type"in s?is(s):os(s),"stringify$1");function is(s){switch(s.type){case"block-scalar":{let e="";for(const t of s.props)e+=is(t);return e+s.source}case"block-map":case"block-seq":{let e="";for(const t of s.items)e+=os(t);return e}case"flow-collection":{let e=s.start.source;for(const t of s.items)e+=os(t);for(const t of s.end)e+=t.source;return e}case"document":{let e=os(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(is,"stringifyToken");function os({start:s,key:e,sep:t,value:n}){let r="";for(const i of s)r+=i.source;if(e&&(r+=is(e)),t)for(const i of t)r+=i.source;return n&&(r+=is(n)),r}c(os,"stringifyItem");const Lr=Symbol("break visit"),md=Symbol("skip children"),ha=Symbol("remove item");function lt(s,e){"type"in s&&s.type==="document"&&(s={start:s.start,value:s.value}),pa(Object.freeze([]),s,e)}c(lt,"visit"),lt.BREAK=Lr,lt.SKIP=md,lt.REMOVE=ha,lt.itemAtPath=(s,e)=>{let t=s;for(const[n,r]of e){const i=t?.[n];if(i&&"items"in i)t=i.items[r];else return}return t},lt.parentCollection=(s,e)=>{const t=lt.itemAtPath(s,e.slice(0,-1)),n=e[e.length-1][0],r=t?.[n];if(r&&"items"in r)return r;throw new Error("Parent collection not found")};function pa(s,e,t){let n=t(e,s);if(typeof n=="symbol")return n;for(const r of["key","value"]){const i=e[r];if(i&&"items"in i){for(let o=0;o<i.items.length;++o){const a=pa(Object.freeze(s.concat([[r,o]])),i.items[o],t);if(typeof a=="number")o=a-1;else{if(a===Lr)return Lr;a===ha&&(i.items.splice(o,1),o-=1)}}typeof n=="function"&&r==="key"&&(n=n(e,s))}}return typeof n=="function"?n(e,s):n}c(pa,"_visit");const as="\uFEFF",cs="",ls="",nn="",gd=c(s=>!!s&&"items"in s,"isCollection"),yd=c(s=>!!s&&(s.type==="scalar"||s.type==="single-quoted-scalar"||s.type==="double-quoted-scalar"||s.type==="block-scalar"),"isScalar");function wd(s){switch(s){case as:return"<BOM>";case cs:return"<DOC>";case ls:return"<FLOW_END>";case nn:return"<SCALAR>";default:return JSON.stringify(s)}}c(wd,"prettyToken");function ma(s){switch(s){case as:return"byte-order-mark";case cs:return"doc-mode";case ls:return"flow-error-end";case nn:return"scalar";case"---":return"doc-start";case"...":return"doc-end";case"":case`
|
|
120
120
|
`:case`\r
|
|
121
|
-
`: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(
|
|
122
|
-
`:case"\r":case" ":return!0;default:return!1}}c(ve,"isEmpty");const
|
|
123
|
-
\r `),Dr=c(s=>!s||
|
|
121
|
+
`: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(ma,"tokenType");var bd=Object.freeze({__proto__:null,BOM:as,DOCUMENT:cs,FLOW_END:ls,SCALAR:nn,createScalarToken:dd,isCollection:gd,isScalar:yd,prettyToken:wd,resolveAsScalar:ud,setScalarValue:fd,stringify:pd,tokenType:ma,visit:lt});function ve(s){switch(s){case void 0:case" ":case`
|
|
122
|
+
`:case"\r":case" ":return!0;default:return!1}}c(ve,"isEmpty");const ga=new Set("0123456789ABCDEFabcdef"),Sd=new Set("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()"),us=new Set(",[]{}"),Cd=new Set(` ,[]{}
|
|
123
|
+
\r `),Dr=c(s=>!s||Cd.has(s),"isNotAnchorChar");class ya{static{c(this,"Lexer")}constructor(){this.atEnd=!1,this.blockScalarIndent=-1,this.blockScalarKeep=!1,this.buffer="",this.flowKey=!1,this.flowLevel=0,this.indentNext=0,this.indentValue=0,this.lineEndPos=null,this.next=null,this.pos=0}*lex(e,t=!1){if(e){if(typeof e!="string")throw TypeError("source is not a string");this.buffer=this.buffer?this.buffer+e:e,this.lineEndPos=null}this.atEnd=!t;let n=this.next??"stream";for(;n&&(t||this.hasChars(1));)n=yield*this.parseNext(n)}atLineEnd(){let e=this.pos,t=this.buffer[e];for(;t===" "||t===" ";)t=this.buffer[++e];return!t||t==="#"||t===`
|
|
124
124
|
`?!0:t==="\r"?this.buffer[e+1]===`
|
|
125
125
|
`:!1}charAt(e){return this.buffer[this.pos+e]}continueScalar(e){let t=this.buffer[e];if(this.indentNext>0){let n=0;for(;t===" ";)t=this.buffer[++n+e];if(t==="\r"){const r=this.buffer[n+e+1];if(r===`
|
|
126
126
|
`||!r&&!this.atEnd)return e+n+1}return t===`
|
|
@@ -135,43 +135,43 @@ ${t.comment}`:t.comment}this.doc.range[2]=t.offset;break}default:this.errors.pus
|
|
|
135
135
|
`&&i>=this.pos&&i+1+t>a)e=i;else break}while(!0);return yield nn,yield*this.pushToIndex(e+1,!0),yield*this.parseLineStart()}*parsePlainScalar(){const e=this.flowLevel>0;let t=this.pos-1,n=this.pos-1,r;for(;r=this.buffer[++n];)if(r===":"){const i=this.buffer[n+1];if(ve(i)||e&&us.has(i))break;t=n}else if(ve(r)){let i=this.buffer[n+1];if(r==="\r"&&(i===`
|
|
136
136
|
`?(n+=1,r=`
|
|
137
137
|
`,i=this.buffer[n+1]):t=n),i==="#"||e&&us.has(i))break;if(r===`
|
|
138
|
-
`){const o=this.continueScalar(n+1);if(o===-1)break;n=Math.max(n,o-2)}}else{if(e&&us.has(r))break;t=n}return!r&&!this.atEnd?this.setNext("plain-scalar"):(yield nn,yield*this.pushToIndex(t+1,!0),e?"flow":"doc")}*pushCount(e){return e>0?(yield this.buffer.substr(this.pos,e),this.pos+=e,e):0}*pushToIndex(e,t){const n=this.buffer.slice(this.pos,e);return n?(yield n,this.pos+=n.length,n.length):(t&&(yield""),0)}*pushIndicators(){switch(this.charAt(0)){case"!":return(yield*this.pushTag())+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"&":return(yield*this.pushUntil(Dr))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"-":case"?":case":":{const e=this.flowLevel>0,t=this.charAt(1);if(ve(t)||e&&us.has(t))return e?this.flowKey&&(this.flowKey=!1):this.indentNext=this.indentValue+1,(yield*this.pushCount(1))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators())}}return 0}*pushTag(){if(this.charAt(1)==="<"){let e=this.pos+2,t=this.buffer[e];for(;!ve(t)&&t!==">";)t=this.buffer[++e];return yield*this.pushToIndex(t===">"?e+1:e,!1)}else{let e=this.pos+1,t=this.buffer[e];for(;t;)if(
|
|
138
|
+
`){const o=this.continueScalar(n+1);if(o===-1)break;n=Math.max(n,o-2)}}else{if(e&&us.has(r))break;t=n}return!r&&!this.atEnd?this.setNext("plain-scalar"):(yield nn,yield*this.pushToIndex(t+1,!0),e?"flow":"doc")}*pushCount(e){return e>0?(yield this.buffer.substr(this.pos,e),this.pos+=e,e):0}*pushToIndex(e,t){const n=this.buffer.slice(this.pos,e);return n?(yield n,this.pos+=n.length,n.length):(t&&(yield""),0)}*pushIndicators(){switch(this.charAt(0)){case"!":return(yield*this.pushTag())+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"&":return(yield*this.pushUntil(Dr))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"-":case"?":case":":{const e=this.flowLevel>0,t=this.charAt(1);if(ve(t)||e&&us.has(t))return e?this.flowKey&&(this.flowKey=!1):this.indentNext=this.indentValue+1,(yield*this.pushCount(1))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators())}}return 0}*pushTag(){if(this.charAt(1)==="<"){let e=this.pos+2,t=this.buffer[e];for(;!ve(t)&&t!==">";)t=this.buffer[++e];return yield*this.pushToIndex(t===">"?e+1:e,!1)}else{let e=this.pos+1,t=this.buffer[e];for(;t;)if(Sd.has(t))t=this.buffer[++e];else if(t==="%"&&ga.has(this.buffer[e+1])&&ga.has(this.buffer[e+2]))t=this.buffer[e+=3];else break;return yield*this.pushToIndex(e,!1)}}*pushNewline(){const e=this.buffer[this.pos];return e===`
|
|
139
139
|
`?yield*this.pushCount(1):e==="\r"&&this.charAt(1)===`
|
|
140
|
-
`?yield*this.pushCount(2):0}*pushSpaces(e){let t=this.pos-1,n;do n=this.buffer[++t];while(n===" "||e&&n===" ");const r=t-this.pos;return r>0&&(yield this.buffer.substr(this.pos,r),this.pos=t),r}*pushUntil(e){let t=this.pos,n=this.buffer[t];for(;!e(n);)n=this.buffer[++t];return yield*this.pushToIndex(t,!1)}}class
|
|
140
|
+
`?yield*this.pushCount(2):0}*pushSpaces(e){let t=this.pos-1,n;do n=this.buffer[++t];while(n===" "||e&&n===" ");const r=t-this.pos;return r>0&&(yield this.buffer.substr(this.pos,r),this.pos=t),r}*pushUntil(e){let t=this.pos,n=this.buffer[t];for(;!e(n);)n=this.buffer[++t];return yield*this.pushToIndex(t,!1)}}class wa{static{c(this,"LineCounter")}constructor(){this.lineStarts=[],this.addNewLine=e=>this.lineStarts.push(e),this.linePos=e=>{let t=0,n=this.lineStarts.length;for(;t<n;){const i=t+n>>1;this.lineStarts[i]<e?t=i+1:n=i}if(this.lineStarts[t]===e)return{line:t+1,col:1};if(t===0)return{line:0,col:e};const r=this.lineStarts[t-1];return{line:t,col:e-r+1}}}}function Je(s,e){for(let t=0;t<s.length;++t)if(s[t].type===e)return!0;return!1}c(Je,"includesToken");function ba(s){for(let e=0;e<s.length;++e)switch(s[e].type){case"space":case"comment":case"newline":break;default:return e}return-1}c(ba,"findNonEmptyIndex");function Sa(s){switch(s?.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"flow-collection":return!0;default:return!1}}c(Sa,"isFlowToken");function ds(s){switch(s.type){case"document":return s.start;case"block-map":{const e=s.items[s.items.length-1];return e.sep??e.start}case"block-seq":return s.items[s.items.length-1].start;default:return[]}}c(ds,"getPrevProps");function Rt(s){if(s.length===0)return[];let e=s.length;e:for(;--e>=0;)switch(s[e].type){case"doc-start":case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":case"newline":break e}for(;s[++e]?.type==="space";);return s.splice(e,s.length)}c(Rt,"getFirstKeyStartProps");function Ca(s){if(s.start.type==="flow-seq-start")for(const e of s.items)e.sep&&!e.value&&!Je(e.start,"explicit-key-ind")&&!Je(e.sep,"map-value-ind")&&(e.key&&(e.value=e.key),delete e.key,Sa(e.value)?e.value.end?Array.prototype.push.apply(e.value.end,e.sep):e.value.end=e.sep:Array.prototype.push.apply(e.start,e.sep),delete e.sep)}c(Ca,"fixFlowSeqItems");class jr{static{c(this,"Parser")}constructor(e){this.atNewLine=!0,this.atScalar=!1,this.indent=0,this.offset=0,this.onKeyLine=!1,this.stack=[],this.source="",this.type="",this.lexer=new ya,this.onNewLine=e}*parse(e,t=!1){this.onNewLine&&this.offset===0&&this.onNewLine(0);for(const n of this.lexer.lex(e,t))yield*this.next(n);t||(yield*this.end())}*next(e){if(this.source=e,this.atScalar){this.atScalar=!1,yield*this.step(),this.offset+=e.length;return}const t=ma(e);if(t)if(t==="scalar")this.atNewLine=!1,this.atScalar=!0,this.type="scalar";else{switch(this.type=t,yield*this.step(),t){case"newline":this.atNewLine=!0,this.indent=0,this.onNewLine&&this.onNewLine(this.offset+e.length);break;case"space":this.atNewLine&&e[0]===" "&&(this.indent+=e.length);break;case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":this.atNewLine&&(this.indent+=e.length);break;case"doc-mode":case"flow-error-end":return;default:this.atNewLine=!1}this.offset+=e.length}else{const n=`Not a YAML token: ${e}`;yield*this.pop({type:"error",offset:this.offset,message:n,source:e}),this.offset+=e.length}}*end(){for(;this.stack.length>0;)yield*this.pop()}get sourceToken(){return{type:this.type,offset:this.offset,indent:this.indent,source:this.source}}*step(){const e=this.peek(1);if(this.type==="doc-end"&&(!e||e.type!=="doc-end")){for(;this.stack.length>0;)yield*this.pop();this.stack.push({type:"doc-end",offset:this.offset,source:this.source});return}if(!e)return yield*this.stream();switch(e.type){case"document":return yield*this.document(e);case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return yield*this.scalar(e);case"block-scalar":return yield*this.blockScalar(e);case"block-map":return yield*this.blockMap(e);case"block-seq":return yield*this.blockSequence(e);case"flow-collection":return yield*this.flowCollection(e);case"doc-end":return yield*this.documentEnd(e)}yield*this.pop()}peek(e){return this.stack[this.stack.length-e]}*pop(e){const t=e??this.stack.pop();if(!t)yield{type:"error",offset:this.offset,source:"",message:"Tried to pop an empty stack"};else if(this.stack.length===0)yield t;else{const n=this.peek(1);switch(t.type==="block-scalar"?t.indent="indent"in n?n.indent:0:t.type==="flow-collection"&&n.type==="document"&&(t.indent=0),t.type==="flow-collection"&&Ca(t),n.type){case"document":n.value=t;break;case"block-scalar":n.props.push(t);break;case"block-map":{const r=n.items[n.items.length-1];if(r.value){n.items.push({start:[],key:t,sep:[]}),this.onKeyLine=!0;return}else if(r.sep)r.value=t;else{Object.assign(r,{key:t,sep:[]}),this.onKeyLine=!r.explicitKey;return}break}case"block-seq":{const r=n.items[n.items.length-1];r.value?n.items.push({start:[],value:t}):r.value=t;break}case"flow-collection":{const r=n.items[n.items.length-1];!r||r.value?n.items.push({start:[],key:t,sep:[]}):r.sep?r.value=t:Object.assign(r,{key:t,sep:[]});return}default:yield*this.pop(),yield*this.pop(t)}if((n.type==="document"||n.type==="block-map"||n.type==="block-seq")&&(t.type==="block-map"||t.type==="block-seq")){const r=t.items[t.items.length-1];r&&!r.sep&&!r.value&&r.start.length>0&&ba(r.start)===-1&&(t.indent===0||r.start.every(i=>i.type!=="comment"||i.indent<t.indent))&&(n.type==="document"?n.end=r.start:n.items.push({start:r.start}),t.items.splice(-1,1))}}}*stream(){switch(this.type){case"directive-line":yield{type:"directive",offset:this.offset,source:this.source};return;case"byte-order-mark":case"space":case"comment":case"newline":yield this.sourceToken;return;case"doc-mode":case"doc-start":{const e={type:"document",offset:this.offset,start:[]};this.type==="doc-start"&&e.start.push(this.sourceToken),this.stack.push(e);return}}yield{type:"error",offset:this.offset,message:`Unexpected ${this.type} token in YAML stream`,source:this.source}}*document(e){if(e.value)return yield*this.lineEnd(e);switch(this.type){case"doc-start":{ba(e.start)!==-1?(yield*this.pop(),yield*this.step()):e.start.push(this.sourceToken);return}case"anchor":case"tag":case"space":case"comment":case"newline":e.start.push(this.sourceToken);return}const t=this.startBlockValue(e);t?this.stack.push(t):yield{type:"error",offset:this.offset,message:`Unexpected ${this.type} token in YAML document`,source:this.source}}*scalar(e){if(this.type==="map-value-ind"){const t=ds(this.peek(2)),n=Rt(t);let r;e.end?(r=e.end,r.push(this.sourceToken),delete e.end):r=[this.sourceToken];const i={type:"block-map",offset:e.offset,indent:e.indent,items:[{start:n,key:e,sep:r}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=i}else yield*this.lineEnd(e)}*blockScalar(e){switch(this.type){case"space":case"comment":case"newline":e.props.push(this.sourceToken);return;case"scalar":if(e.source=this.source,this.atNewLine=!0,this.indent=0,this.onNewLine){let t=this.source.indexOf(`
|
|
141
141
|
`)+1;for(;t!==0;)this.onNewLine(this.offset+t),t=this.source.indexOf(`
|
|
142
|
-
`,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 r=e.items[e.items.length-2]?.value?.end;if(Array.isArray(r)){Array.prototype.push.apply(r,t.start),r.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,r=n&&(t.sep||t.explicitKey)&&this.type!=="seq-item-ind";let i=[];if(r&&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&&(i=t.sep.splice(o[1]))}switch(this.type){case"anchor":case"tag":r||t.value?(i.push(this.sourceToken),e.items.push({start:i}),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):r||t.value?(i.push(this.sourceToken),e.items.push({start:i,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(Je(t.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:i,key:null,sep:[this.sourceToken]}]});else if(
|
|
142
|
+
`,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 r=e.items[e.items.length-2]?.value?.end;if(Array.isArray(r)){Array.prototype.push.apply(r,t.start),r.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,r=n&&(t.sep||t.explicitKey)&&this.type!=="seq-item-ind";let i=[];if(r&&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&&(i=t.sep.splice(o[1]))}switch(this.type){case"anchor":case"tag":r||t.value?(i.push(this.sourceToken),e.items.push({start:i}),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):r||t.value?(i.push(this.sourceToken),e.items.push({start:i,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(Je(t.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:i,key:null,sep:[this.sourceToken]}]});else if(Sa(t.key)&&!Je(t.sep,"newline")){const o=Rt(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 i.length>0?t.sep=t.sep.concat(i,this.sourceToken):t.sep.push(this.sourceToken);else if(Je(t.start,"newline"))Object.assign(t,{key:null,sep:[this.sourceToken]});else{const o=Rt(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||r?e.items.push({start:i,key:null,sep:[this.sourceToken]}):Je(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);r||t.value?(e.items.push({start:i,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&&!Je(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:i});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 r=e.items[e.items.length-2]?.value?.end;if(Array.isArray(r)){Array.prototype.push.apply(r,t.start),r.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||Je(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 r=this.flowScalar(this.type);!t||t.value?e.items.push({start:[],key:r,sep:[]}):t.sep?this.stack.push(r):Object.assign(t,{key:r,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 r=ds(n),i=Rt(r);Ca(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:i,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(`
|
|
143
143
|
`)+1;for(;t!==0;)this.onNewLine(this.offset+t),t=this.source.indexOf(`
|
|
144
|
-
`,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=ds(e),n=Rt(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=ds(e),n=Rt(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 Sa(s){const e=s.prettyErrors!==!1;return{lineCounter:s.lineCounter||e&&new ga||null,prettyErrors:e}}c(Sa,"parseOptions");function Sd(s,e={}){const{lineCounter:t,prettyErrors:n}=Sa(e),r=new jr(t?.addNewLine),i=new Rr(e),o=Array.from(i.compose(r.parse(s)));if(n&&t)for(const a of o)a.errors.forEach(rs(s,t)),a.warnings.forEach(rs(s,t));return o.length>0?o:Object.assign([],{empty:!0},i.streamInfo())}c(Sd,"parseAllDocuments");function Ca(s,e={}){const{lineCounter:t,prettyErrors:n}=Sa(e),r=new jr(t?.addNewLine),i=new Rr(e);let o=null;for(const a of i.compose(r.parse(s),!0,s.length))if(!o)o=a;else if(o.options.logLevel!=="silent"){o.errors.push(new ct(a.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}return n&&t&&(o.errors.forEach(rs(s,t)),o.warnings.forEach(rs(s,t))),o}c(Ca,"parseDocument");function Cd(s,e,t){let n;typeof e=="function"?n=e:t===void 0&&e&&typeof e=="object"&&(t=e);const r=Ca(s,t);if(!r)return null;if(r.warnings.forEach(i=>xo(r.options.logLevel,i)),r.errors.length>0){if(r.options.logLevel!=="silent")throw r.errors[0];r.errors=[]}return r.toJS(Object.assign({reviver:n},t))}c(Cd,"parse");function vd(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 r=Math.round(t);t=r<1?void 0:r>8?{indent:8}:{indent:r}}if(s===void 0){const{keepUndefined:r}=t??e??{};if(!r)return}return rt(s)&&!n?s.toString(t):new Jt(s,n,t).toString(t)}c(vd,"stringify");var kd=Object.freeze({__proto__:null,Alias:Bn,CST:yd,Composer:Rr,Document:Jt,Lexer:ma,LineCounter:ga,Pair:re,Parser:jr,Scalar:M,Schema:Ds,YAMLError:Ar,YAMLMap:ue,YAMLParseError:ct,YAMLSeq:We,YAMLWarning:ta,isAlias:Ue,isCollection:Y,isDocument:rt,isMap:kt,isNode:X,isPair:z,isScalar:V,isSeq:Tt,parse:Cd,parseAllDocuments:Sd,parseDocument:Ca,stringify:vd,visit:it,visitAsync:qn});class Fr extends Cl{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)}}const de={Updated:"updated",Deleted:"deleted",Stopped:"stopped"},Td={ignored:zl,persistent:!0,ignoreInitial:!0,followSymlinks:!1,depth:20,awaitWriteFinish:{stabilityThreshold:500,pollInterval:100},ignorePermissionErrors:!0,atomic:!0,usePolling:!1,alwaysStat:!1,interval:1e3,binaryInterval:300};class Ed extends Fr{static{c(this,"LocalElementWatcher")}constructor(e){super(),this.options=e,this.membraneDir=pe(this.options.cwd),this.lockTimeoutMs=this.options.lockTimeoutMs??1e3}isWatching=!1;watcher;membraneDir;contentCache={};ignoredPaths=new Set;lockTimeoutMs;async start(){this.isWatching||(A.existsSync(this.membraneDir)||A.mkdirSync(this.membraneDir,{recursive:!0}),this.initializeContentCache(),this.watcher=Sl.watch(this.membraneDir,Td),this.watcher.on("add",e=>this.handleFileSystemEvent(de.Updated,e)).on("change",e=>this.handleFileSystemEvent(de.Updated,e)).on("unlink",e=>this.handleFileSystemEvent(de.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.clearAllLocks(),this.emit(de.Stopped))}getCwd(){return this.options.cwd}async executeWithPathLock(e,t){const n=P.resolve(e);this.ignoredPaths.add(n);try{await t()}finally{setTimeout(()=>{this.ignoredPaths.delete(n)},this.lockTimeoutMs)}}isPathLocked(e){const t=P.resolve(e);if(this.ignoredPaths.has(t))return!0;for(const n of this.ignoredPaths)if(t.startsWith(n+P.sep))return!0;return!1}clearAllLocks(){this.ignoredPaths.clear()}handleFileSystemEvent(e,t){const n=P.relative(this.membraneDir,t);if(this.isPathLocked(t))return;if(e===de.Deleted){this.removeFromCache(n);const a={filePath:t,relativePath:n,data:void 0};b.info(`[local] ${e}: ${a.relativePath}`),this.emit(e,a);return}const r=this.readFileContent(t);if(!this.hasContentChanged(n,r))return;const o=this.processFileEvent(t,r);this.updateCache(n,r),o&&(b.info(`[local] ${e}: ${o.relativePath}`),this.emit(e,o))}readFileContent(e){return A.readFileSync(e,"utf8")}processFileEvent(e,t){const n=P.relative(this.membraneDir,e);let r;try{r=t?kd.parse(t):void 0}catch{r=void 0}return{filePath:e,relativePath:n,data:r}}hasContentChanged(e,t){if(!t)return this.contentCache[e]!==void 0;const n=this.getContentHash(t);return this.contentCache[e]!==n}getContentHash(e){return wl.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(){A.existsSync(this.membraneDir)&&this.scanDirectoryForCache(this.membraneDir)}scanDirectoryForCache(e){const t=A.readdirSync(e,{withFileTypes:!0});for(const n of t){const r=P.join(e,n.name);if(n.isDirectory())this.scanDirectoryForCache(r);else if(n.isFile())try{const i=A.readFileSync(r,"utf8"),o=P.relative(this.membraneDir,r);this.updateCache(o,i)}catch{}}}}var qr=(s=>(s.Updated="updated",s.ConnectorFileUpdated="connector-file-updated",s.Connected="connected",s.Disconnected="disconnected",s.Error="error",s))(qr||{});const _d={debounceMs:2e3,reconnectIntervalMs:5e3,maxReconnectAttempts:1/0,maxBackoffMs:6e4,connectionTimeoutMs:3e5};class Id extends Fr{static{c(this,"RemoteElementWatcher")}constructor(e=_d){super(),this.config=e}eventSource;debounceTimeouts=new Map;reconnectAttempts=0;reconnectTimeout;connectionTimeout;isStarted=!1;isConnected=!1;async start(){this.isStarted||(this.isStarted=!0,await this.connect())}async stop(){this.isStarted&&(this.isStarted=!1,this.isConnected=!1,this.clearReconnectTimeout(),this.clearConnectionTimeout(),this.clearAllDebounceTimeouts(),this.eventSource&&(this.eventSource.close(),this.eventSource=void 0))}async connect(){try{b.debug("[remote-events] Connecting to server"),this.eventSource&&(this.eventSource.close(),this.eventSource=void 0);const e=await F.getClient(process.cwd()),t=await e.getToken();if(!t)throw new Error("No auth token available");const n=`${e.apiUri}/sse/workspace?token=${encodeURIComponent(t)}`;b.debug("[remote-events] Subscribing to workspace events"),this.eventSource=new vl(n),this.setupEventSourceHandlers()}catch(e){b.debug(`[remote-events] Failed to connect: ${e}`),this.emit("error",{error:e}),this.scheduleReconnect()}}setupEventSourceHandlers(){this.eventSource&&(this.eventSource.onopen=()=>{b.debug("[remote-events] Connected to server"),this.reconnectAttempts=0,this.isConnected=!0,this.resetConnectionTimeout(),this.emit("connected",{})},this.eventSource.onmessage=e=>{try{this.resetConnectionTimeout();const t=JSON.parse(e.data);this.handleElementUpdate(t)}catch(t){b.debug(`[remote-events] Failed to parse workspace event: ${t}`)}},this.eventSource.onerror=e=>{b.debug(`[remote-events] Connection error: ${JSON.stringify(e,null,2)}`),this.isConnected=!1,this.clearConnectionTimeout(),this.eventSource&&(this.eventSource.close(),this.eventSource=void 0),this.emit("disconnected",{}),this.isStarted&&this.scheduleReconnect()})}handleElementUpdate(e){if(e.type!==rl.ElementUpdate)return;const{elementId:t,elementType:n,data:r={}}=e;if(!(!t||!n)){if(n===N.Connector){const{filePath:i,eventType:o,newPath:a}=r;return b.debug(`[remote-watcher] Received connector event - elementId: ${t}, filePath: ${i}, eventType: ${o}`),this.scheduleConnectorFileUpdate(t,i,o,a)}return this.scheduleElementUpdate(t,n)}}scheduleElementUpdate(e,t){const n=this.debounceTimeouts.get(e);n&&clearTimeout(n);const r=setTimeout(()=>{this.debounceTimeouts.delete(e),this.emit("updated",{elementId:e,elementType:t})},this.config.debounceMs);this.debounceTimeouts.set(e,r)}scheduleConnectorFileUpdate(e,t,n,r){const i=JSON.stringify({connectorId:e,filePath:t}),o=this.debounceTimeouts.get(i);o&&clearTimeout(o);const a=setTimeout(()=>{this.debounceTimeouts.delete(i),this.emit("connector-file-updated",{connectorId:e,filePath:t,eventType:n,newPath:r})},this.config.debounceMs);this.debounceTimeouts.set(i,a)}scheduleReconnect(){if(!this.isStarted||this.reconnectAttempts>=this.config.maxReconnectAttempts){this.reconnectAttempts>=this.config.maxReconnectAttempts&&(b.error("[remote-events] Max reconnection attempts reached. Connection will not be retried."),this.emit("error",{error:new Error("Max reconnection attempts reached")}));return}this.reconnectTimeout&&clearTimeout(this.reconnectTimeout),this.reconnectAttempts++;const e=this.config.reconnectIntervalMs*Math.pow(2,this.reconnectAttempts-1),t=Math.random()*.3*e,n=Math.min(e+t,this.config.maxBackoffMs);b.debug(`[remote-events] Reconnecting in ${Math.round(n)}ms (attempt ${this.reconnectAttempts})`),this.reconnectTimeout=setTimeout(()=>{this.connect()},n)}clearReconnectTimeout(){this.reconnectTimeout&&(clearTimeout(this.reconnectTimeout),this.reconnectTimeout=void 0)}resetConnectionTimeout(){this.clearConnectionTimeout(),this.connectionTimeout=setTimeout(()=>{this.isConnected&&this.isStarted&&(b.debug("[remote-events] Connection timeout detected, reconnecting..."),this.isConnected=!1,this.eventSource&&(this.eventSource.close(),this.eventSource=void 0),this.scheduleReconnect())},this.config.connectionTimeoutMs)}clearConnectionTimeout(){this.connectionTimeout&&(clearTimeout(this.connectionTimeout),this.connectionTimeout=void 0)}clearAllDebounceTimeouts(){this.debounceTimeouts.forEach(e=>clearTimeout(e)),this.debounceTimeouts.clear()}}class va{static{c(this,"ElementsCache")}elements=new Map;typeIndex=new Map;internalIdIndex=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),e.data?.id&&this.internalIdIndex.set(e.data.id,t)}remove(e){const t=e.id,n=this.elements.delete(t);if(n){const r=this.typeIndex.get(e.type);r&&(r.delete(t),r.size===0&&this.typeIndex.delete(e.type)),e.data?.id&&this.internalIdIndex.delete(e.data.id)}return n}put(e){this.elements.has(e.id)&&this.remove(e),this.add(e)}get(e){return this.elements.get(e)}getByInternalId(e){const t=this.internalIdIndex.get(e);if(t)return this.elements.get(t)}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(),this.internalIdIndex.clear()}getAllIds(){return new Set(this.elements.keys())}}const Mt="connectors",Le="development",Br={};async function ka(){const e=(await F.withClient(o=>o.get("org-workspace-id"))).id,t={};b.info("[connectors] Loading custom connectors"),await F.withClient(o=>o.get(`/connectors?workspaceId=${e}`)),b.info("[connectors] Loading public connectors");const n=He(),i=(U.existsSync(n)?U.readdirSync(n):[]).filter(o=>{if(o.startsWith("."))return!1;const a=K.join(n,o);try{return U.statSync(a).isDirectory()}catch{return!1}});for(const o of i){b.info(`[connectors] Loading connector from: ${o}`);const a=U.readdirSync(K.join(n,o)),l=await Kr(o);if(!l)continue;"baseUri"in l&&delete l.baseUri;let u;if(l.uuid&&(u=await F.withClient(f=>f.get(`/connectors/${l.uuid}`),!1)),u)t[l.id]=u.id,b.info(`[connectors] Matched ${l.name} uuid: ${l.uuid}`),u.isPublic||(u.archivedAt&&(b.info(`[connectors] Restoring archived connector ${l.name}`),await F.withClient(f=>f.post(`connectors/${u.id}/restore`))),b.info(`[connectors] Updating connector ${l.name}`),await F.withClient(f=>f.patch(`connectors/${u.id}`,{...l,workspaceId:e})));else if(!t[l.id]&&!u?.isPublic){let f=!1;try{const h=await Ur({connectorId:l.id});h&&h.isPublic&&(f=!0)}catch{}if(!f){b.info(`[connectors] Creating custom connector ${l.name} (${l.key})`);const h=await F.withClient(m=>m.post("connectors",{...l,workspaceId:e}));t[l.id]=h.id}}const d=a.filter(f=>U.statSync(K.join(n,o,f)).isDirectory());for(const f of d)await $d({connector:l,version:f,connectorId:t[l.id]})}return t}c(ka,"pushConnectors");async function Ta({connectorId:s,connectorVersion:e,allConnectors:t,pulledConnectors:n,pulledConnectorVersions:r}){if(!s||r[s]?.has(e))return;const i=Fi(),o=await Ur({connectorId:s});if(!o.isPublic||t){if(!o?.key){console.error(`[connectors] Connector ${s} has no key. Skipping..`),b.error(`[connectors] Connector ${s} has no key. Skipping..`);return}n.has(s)||(await Nd({basePath:i,connector:o}),n.add(s)),r[s]||(r[s]=new Set),r[s].has(e)||(await xd({connector:o,connectorVersion:e,basePath:i}),r[s].add(e))}}c(Ta,"pullRemoteConnector");function He(){const s=ar();return K.join(s.membraneDirPath,Mt)}c(He,"getConnectorsPath");async function Kr(s){const e=K.join(He(),s,`${s}.yml`);return ur(e,!1)}c(Kr,"readConnector");async function Ad(s,e){return b.info(`[connectors] Zipping ${s} into ${e}`),new Promise((t,n)=>{const r=U.createWriteStream(e),i=Ri("zip",{zlib:{level:9}});r.on("close",()=>{b.success(`[connectors] Successfully created ${e}`),t()}),r.on("end",()=>{b.info("[connectors] Data has been drained")}),i.on("warning",a=>{a.code==="ENOENT"?console.warn(a):n(a)}),i.on("error",a=>{n(a)}),i.pipe(r);const o=U.readdirSync(s);for(const a of o){const l=K.join(s,a),u=U.statSync(l);u.isFile()?i.file(l,{name:a}):u.isDirectory()&&i.directory(l,a)}i.finalize()})}c(Ad,"createZipArchive");async function Od(s,e){return b.info(`[connectors] Unzipping into ${e}`),new Promise((t,n)=>{const r=Li.Parse();r.on("entry",i=>{const o=i.path;if(i.type==="Directory"){const l=K.join(e,o);U.mkdirSync(l,{recursive:!0}),i.autodrain()}else{const l=K.join(e,o),u=K.dirname(l);U.mkdirSync(u,{recursive:!0});const d=U.createWriteStream(l);i.pipe(d),d.on("finish",()=>{})}}),r.on("end",()=>{b.success(`[connectors] Successfully extracted to ${e}`),t()}),r.on("error",i=>{n(i)}),r.write(s),r.end()})}c(Od,"extractZipArchive");async function $d({connector:s,version:e,connectorId:t}){const n=K.join(He(),De(s),Ea(e)),r=K.join(n,"src"),i=K.join(n,"src.zip"),o=U.existsSync(i);if(U.existsSync(r)&&(b.info(`[connectors] Archiving source code for ${s.name} version ${e}`),await Ad(r,i)),!U.existsSync(i)){b.warning(`[connectors] No source code found for ${s.name} version ${e}`);return}try{const a=new Mi;if(a.append("file",U.createReadStream(i),"file.zip"),b.info(`[connectors] Pushing connector version ${e} for ${s.name}`),e==Le)b.info(`[connectors] Uploading connector ${t}`),await F.withClient(l=>l.post(`connectors/${t}/upload`,a,{headers:{...a.getHeaders()}}));else{if(a.append("version",e),a.append("changelog","Imported Version"),(await F.withClient(u=>u.get(`/connectors/${t}/versions`))).find(u=>u.version==e)){b.info(`[connectors] Version ${e} already published`);return}b.info(`[connectors] Publishing version ${e} of connector ${t}`),await F.withClient(u=>u.post(`connectors/${t}/publish-version`,a,{headers:{...a.getHeaders()}}))}b.success(`Successfully pushed connector version ${e} for ${s.name}`)}catch(a){b.error(`Error pushing connector version ${e} for ${s.name}: ${a}`),console.error(`[connectors] Error pushing connector version ${e} for ${s.name}: ${a}`)}finally{!o&&U.existsSync(i)&&(b.info(`[connectors] Cleaning up temporary zip file for ${s.name} version ${e}`),U.unlinkSync(i))}}c($d,"pushConnectorVersion");async function Ur({connectorId:s}){if(s){if(Br[s])return Br[s];try{const e=await F.withClient(t=>t.get(`connectors/${s}`),!1);return Br[s]=e,e}catch(e){return b.error(`[connectors] Failed to get connector ${s}: ${e}`),console.error(`[connectors] Failed to get connector ${s}: ${e}`),null}}}c(Ur,"getConnector");async function Nd({basePath:s,connector:e}){const t=De(e),n=K.join(s,Mt,t);U.mkdirSync(n,{recursive:!0});const r=K.join(n,`${De(e)}.yml`);U.writeFileSync(r,Se.dump(e)),b.info(`[connectors] Pulled connector ${e.name}`)}c(Nd,"pullConnector$1");async function xd({connector:s,connectorVersion:e,basePath:t}){const n=De(s),r=Ea(e),i=K.join(t,"connectors",n,r),o=await F.withClient(l=>l.get(`connectors/${s.id}/download`,{version:e},{responseType:"arraybuffer",headers:{Accept:"application/zip"},timeout:1e6}));U.mkdirSync(i,{recursive:!0});const a=K.join(i,"src.zip");if(U.writeFileSync(a,o),!e){const l=K.join(i,"src");U.mkdirSync(l,{recursive:!0}),await Od(o,l)}b.info(`[connectors] Pulled connector version: ${s.name} (${r})`)}c(xd,"pullConnectorVersion");function De(s){return s.key}c(De,"getConnectorDirName");function Ea(s){return s??Le}c(Ea,"getConnectorVersionDirName");function Pd(s){const e=Fi(),t=De(s);return K.join(e,Mt,t)}c(Pd,"getConnectorDirPath");function Rd(s){return s.match(`${Mt}/[^/]+/${Le}/src/.*`)!==null}c(Rd,"isConnectorSourceFile");async function Md(s){const e=s.match(`${Mt}/([^/]+)/${Le}/src/(.*)`);if(!e)return;const t=e[1],n=e[2],r=await Kr(t);if(!r){b.warning(`[connectors] Connector ${t} not found. Ignoring file change`);return}const i=r.id,o=U.readFileSync(s,"utf-8");await F.withClient(a=>a.put(`connectors/${i}/files/${n}`,o,{headers:{"Content-Type":"text/plain"}})),b.info(`[connectors] Pushed file ${n} for connector ${r.name}`)}c(Md,"putConnectorFile");async function Ld(s){const e=s.match(`${Mt}/([^/]+)/${Le}/src/(.*)`);if(!e)return;const t=e[1],n=e[2],r=await Kr(t);if(!r){b.warning(`[connectors] Connector ${t} not found. Ignoring file change`);return}const i=r.id;await F.withClient(o=>o.delete(`connectors/${i}/files/${n}`)),b.info(`[connectors] Deleted file ${n} for connector ${r.name}`)}c(Ld,"deleteConnectorFile");async function Dd(s,e){try{const t=await F.withClient(o=>o.get(`connectors/${s}`));if(!t){b.warning(`[connectors] Connector ${s} not found`);return}const n=await F.withClient(o=>o.get(`connectors/${s}/files/${e}`)),r=De(t),i=K.join(He(),r,Le,"src",e);U.mkdirSync(K.dirname(i),{recursive:!0}),n!=null?(U.writeFileSync(i,n),b.info(`[connectors] Pulled file ${e} for connector ${t.name}`)):U.existsSync(i)&&(U.unlinkSync(i),b.info(`[connectors] Deleted file ${e} for connector ${t.name}`))}catch(t){b.error(`[connectors] Failed to pull connector file ${e} for connector ${s}: ${t}`),console.error(`[connectors] Failed to pull connector file ${e} for connector ${s}: ${t}`)}}c(Dd,"pullConnectorFile");async function jd(s,e){const t=await F.withClient(i=>i.get(`connectors/${s}`),!1);if(!t){b.warning(`[connectors] Connector ${s} not found`);return}const n=De(t),r=K.join(He(),n,Le,"src",e);U.existsSync(r)&&(U.unlinkSync(r),b.info(`[connectors] Deleted file ${e} for connector ${n}`))}c(jd,"deleteLocalConnectorFile");async function Fd(s,e,t){if(t&&e!==t)try{const n=await F.withClient(l=>l.get(`connectors/${s}`),!1);if(!n){b.warning(`[connectors] Connector ${s} not found`);return}const r=De(n),i=K.join(He(),r,Le,"src"),o=K.join(i,e),a=K.join(i,t);U.existsSync(o)&&(U.mkdirSync(K.dirname(a),{recursive:!0}),U.renameSync(o,a),b.info(`[connectors] Renamed directory from ${e} to ${t} for connector ${r}`))}catch(n){b.error(`[connectors] Failed to rename directory ${e} to ${t} for connector ${s}: ${n}`)}}c(Fd,"renameLocalConnectorDirectory");async function qd(s,e){try{const t=await F.withClient(i=>i.get(`connectors/${s}`),!1);if(!t){b.warning(`[connectors] Connector ${s} not found`);return}const n=De(t),r=K.join(He(),n,Le,"src",e);if(U.existsSync(r)){const i=K.resolve(He());if(!K.resolve(r).startsWith(i))return;U.rmSync(r,{recursive:!0,force:!0}),b.info(`[connectors] Deleted directory ${e} for connector ${n}`)}}catch(t){b.error(`[connectors] Failed to delete directory ${e} for connector ${s}: ${t}`)}}c(qd,"deleteLocalConnectorDirectory");const Q={LogAdded:"logAdded",StateChanged:"stateChanged",StatsChanged:"statsChanged",ConflictsChanged:"conflictsChanged",McpStatusChanged:"mcpStatusChanged",McpServersChanged:"mcpServersChanged",ConfigChanged:"configChanged"};class Bd extends Fr{static{c(this,"WorkspaceNotifications")}constructor(e){super(),this.config=e,b.setNotificationHandler(this)}clientId;heartbeatInterval;isCleaningUp=!1;async connectToRemote(){await this.registerWithRemoteServer(),await this.startHeartbeatLoop()}async setState(e){this.emit(Q.StateChanged,{state:e}),await this.emitRemote({status:e})}setConflicts(e){this.emit(Q.ConflictsChanged,{conflicts:e})}setConfig(e){this.emit(Q.ConfigChanged,{config:e})}setStats(e){this.emit(Q.StatsChanged,{stats:e})}addLog(e){this.emit(Q.LogAdded,{log:e})}setMcpStatus(e){this.emit(Q.McpStatusChanged,{status:e})}async setMcpServers(e){this.emit(Q.McpServersChanged,{servers:e}),await this.emitRemote({mcpServers:e.map(t=>({name:t.agentName,totalRequests:t.totalRequests}))})}async cleanup(){!this.clientId||this.isCleaningUp||(this.isCleaningUp=!0,this.heartbeatInterval&&(clearInterval(this.heartbeatInterval),this.heartbeatInterval=void 0),await this.withErrorHandling(async()=>{await F.withClient(e=>e.delete(`/local-clients/${this.clientId}`))}),this.clientId=void 0)}async registerWithRemoteServer(){if(this.clientId)return;const e=await this.withErrorHandling(async()=>await F.withClient(t=>t.post("/local-clients",{hostname:Pi.hostname(),workingDirectory:process.cwd()})));e?.id?this.clientId=e.id:this.addLog({timestamp:new Date().toISOString(),message:"Failed to register with remote server",type:"error"})}async startHeartbeatLoop(){this.heartbeatInterval=setInterval(async()=>{this.clientId&&await this.sendHeartbeat()},this.config.heartbeatIntervalMs)}async sendHeartbeat(){this.clientId&&await this.withErrorHandling(async()=>{await F.withClient(e=>e.post(`/local-clients/${this.clientId}/keep-alive`,{}))})}async emitRemote(e){this.clientId&&await this.withErrorHandling(async()=>{await F.withClient(t=>t.patch(`/local-clients/${this.clientId}`,e))})}async withErrorHandling(e){try{return await e()}catch(t){const n=t instanceof Error?t.message:String(t);return this.addLog({timestamp:new Date().toISOString(),message:`Failed to connect to remote: ${n}`,type:"error"}),null}}}const Ve=new Bd({heartbeatIntervalMs:15e3}),_a=[N.AppDataSchema,N.AppEventType,N.DataLinkTable,N.DataSource,N.FieldMapping,N.Action,N.Flow,N.Package];class Tn{static{c(this,"ElementSyncService")}localWatcher=void 0;remoteWatcher=void 0;notifier;changes=[];localCache;remoteCache;localRepo;remoteRepo;pulledConnectors=new Set;pulledConnectorVersions={};constructor(){this.notifier=Ve,this.localCache=new va,this.remoteCache=new va,this.localRepo=new hu(this.localCache),this.remoteRepo=new pu(this.remoteCache)}clear(){this.changes=[]}needsForcedSync(){return this.changes.some(e=>e.isConflict)}needsSync(){return this.changes.length>0}async getStats(){const e=this.localCache.getAll(),t={};return e.forEach(n=>{t[n.type]=(t[n.type]||0)+1}),t}async fetchElements(){const e=await this.localRepo.getElements(),t=await this.remoteRepo.getElements();this.localCache.addAll(e),this.remoteCache.addAll(t)}async updateElement(e,t){const n=this.getHandler(t),r=this.getCache(t);try{const i=await n.putElement(e);r.put(i)}catch(i){throw b.error(`Failed to update element ${e.id}: ${i}`),i}}async deleteElement(e,t){const n=this.getHandler(t),r=this.getCache(t);try{await n.deleteElement(e,{elements:n.cache.getAll(),connectorsMapping:n.connectorsMapping}),r.remove(e)}catch(i){throw b.error(`Failed to delete element ${e.id}: ${i}`),i}}async pullConnectors(e=!1){const t=this.remoteCache.getElementsByType(N.Integration).map(n=>n.data);for(const n of t){const r=n.connectorId,i=n.connectorVersion;r&&await Ta({connectorId:r,connectorVersion:i,allConnectors:e,pulledConnectors:this.pulledConnectors,pulledConnectorVersions:this.pulledConnectorVersions})}}async pushConnectors(){const e=await ka();this.remoteRepo.setConnectorsMapping(e)}getHandler(e){return e===ce.INCOMING?this.localRepo:(this.remoteRepo.setSourceCache(this.localCache),this.remoteRepo)}getCache(e){return e===ce.INCOMING?this.localCache:this.remoteCache}async startWatching(){this.localWatcher=new Ed({cwd:process.cwd(),lockTimeoutMs:1e3}),this.localWatcher.on(de.Updated,e=>this.handleLocalEvent(e,de.Updated)),this.localWatcher.on(de.Deleted,e=>this.handleLocalEvent(e,de.Deleted)),await this.localWatcher.start(),b.success("[local] Tracking changes.."),this.remoteWatcher=new Id,this.remoteWatcher.on(qr.Updated,({elementId:e,elementType:t})=>this.handleRemoteElementEvent(e,t)),this.remoteWatcher.on(qr.ConnectorFileUpdated,({connectorId:e,filePath:t,eventType:n,newPath:r})=>this.handleRemoteConnectorFileEvent(e,t,n,r)),await this.remoteWatcher.start(),b.success("[remote] Tracking changes..")}async stopWatching(){this.localWatcher&&(await this.localWatcher.stop(),this.localWatcher=void 0),this.remoteWatcher&&(await this.remoteWatcher.stop(),this.remoteWatcher=void 0)}async handleRemoteElementEvent(e,t){try{const n=await this.remoteRepo.getByInternalId(e,t),r=!!n?.data.archivedAt||!!n?.data.isDeactivated;if(!n||r){const o=n||this.remoteCache.getByInternalId(e);return o?(b.info(`[${this.getDirectionLabel(ce.INCOMING)}] Deleted: ${o.id}`),this.localWatcher?.executeWithPathLock(o.absolutePath,()=>this.deleteElement(o,ce.INCOMING))):void 0}if(b.info(`[${this.getDirectionLabel(ce.INCOMING)}] Updated: ${n.id}`),await this.localWatcher?.executeWithPathLock(n.absolutePath,async()=>this.updateElement(n,ce.INCOMING)),t===N.Integration){const o=n.data.connectorId,a=n.data.connectorVersion,l=await Ur({connectorId:o});if(!l?.key)return;const u=Pd(l);await this.localWatcher?.executeWithPathLock(u,async()=>Ta({connectorId:o,connectorVersion:a,allConnectors:!1,pulledConnectors:this.pulledConnectors,pulledConnectorVersions:this.pulledConnectorVersions}))}}catch(n){b.error(`[sync] Error handling remote event: ${n}`)}}async handleRemoteConnectorFileEvent(e,t,n,r){try{switch(n){case Us.ConnectorFileDeleted:await jd(e,t);break;case Us.ConnectorDirectoryRenamed:await Fd(e,t,r);break;case Us.ConnectorDirectoryDeleted:await qd(e,t);break;default:await Dd(e,t);break}}catch(i){b.error(`[sync] Error handling remote connector file event: ${i}`)}}async handleLocalEvent(e,t){try{if(Rd(e.filePath))switch(t){case de.Updated:await Md(e.filePath);break;case de.Deleted:await Ld(e.filePath);break}else{let n=Z.fromPathAndData(e.filePath,e.data);if(!n){const r=Z.idFromPath(e.filePath);if(!r||(n=this.remoteCache.get(r),!n))return}switch(b.info(`[${this.getDirectionLabel(ce.OUTGOING)}] ${uu.toSentenceCase(t)}: ${n.id}`),t){case de.Updated:await this.updateElement(n,ce.OUTGOING);break;case de.Deleted:await this.deleteElement(n,ce.OUTGOING);break}}}catch(n){b.error(`[sync] Error handling local event: ${n}`)}}detectIncomingChanges(){this.clearChanges();const e=Tn.getChanges(ce.INCOMING,this.remoteCache,this.localCache);return this.updateChanges(e),e}detectOutgoingChanges(){this.clearChanges();const e=Tn.getChanges(ce.OUTGOING,this.localCache,this.remoteCache);return this.updateChanges(e),e}async resolveChanges(){if(!this.needsSync())return;b.info("[resolver] Resolving changes.."),b.info("[resolver] Resolving integration elements");const e=this.changes.filter(r=>r.element.type===N.Integration);await Promise.all(e.map(async r=>this.resolveChange(r))),e.length>0&&(await this.fetchElements(),this.changes=this.changes.length>0&&this.changes[0]?.direction===ce.INCOMING?this.detectIncomingChanges():this.detectOutgoingChanges(),this.changes=this.changes.filter(r=>r.element.type!==N.Integration)),b.info("[resolver] Resolving universal elements");const t=this.changes.filter(r=>!r.element.hasParent());for(const r of _a){const i=t.filter(o=>o.element.type===r);b.info(`[resolver] Resolving ${r} elements`),await Promise.all(i.map(async o=>this.resolveChange(o)))}b.info("[resolver] Resolving integration level elements");const n=this.changes.filter(r=>r.element.hasParent());for(const r of _a){const i=n.filter(o=>o.element.type===r);b.info(`[resolver] Resolving ${r} elements`),await Promise.all(i.map(async o=>this.resolveChange(o)))}b.success("[resolver] Resolved changes")}async resolveChange(e){switch(e.type){case Pe.DELETE:return this.deleteElement(e.element,e.direction);case Pe.CREATE:return this.updateElement(e.element,e.direction);case Pe.UPDATE:return this.updateElement(e.element,e.direction)}}static getChanges(e,t,n){const r=t.getAllIds(),i=n.getAllIds(),o=new Set([...r,...i]),a=[];for(const l of o){const u=t.get(l),d=n.get(l),f=Tn.detectChangeForElement(u,d,e);f&&a.push(f)}return a}updateChanges(e){if(this.changes=e,this.needsForcedSync()){const t=e.filter(n=>n.isConflict);b.warning("[resolver] Conflicts detected"),this.notifier.setConflicts(t)}}clearChanges(){this.changes=[]}getDirectionLabel(e){switch(e){case ce.INCOMING:return"local\u2190remote";case ce.OUTGOING:return"local\u2192remote"}}static detectChangeForElement(e,t,n){return e&&!t?{type:Pe.CREATE,element:e,direction:n,isConflict:!1}:!e&&t?{type:Pe.DELETE,element:t,direction:n,isConflict:!0}:e&&t&&!e.isEqual(t)?{type:Pe.UPDATE,element:e,direction:n,isConflict:!1}:null}}const ze=P.join(kl.tmpdir(),"membrane-mcp-status"),Ia=3e4;class Kd{static{c(this,"McpStatusService")}constructor(e=2e3){this.pollIntervalMs=e}isRunning=!1;pollInterval;async start(){this.isRunning||(this.isRunning=!0,this.pollInterval=setInterval(async()=>await this.checkStatus(),this.pollIntervalMs),await this.checkStatus())}async stop(){this.pollInterval&&(clearInterval(this.pollInterval),this.pollInterval=void 0,this.isRunning=!1)}async checkStatus(){try{const e=process.cwd(),t=fs(void 0,e),n=Aa(e);t&&Ve.setMcpStatus(t),await Ve.setMcpServers(n)}catch{b.error("Failed to check MCP status")}}}function fs(s,e){try{const t=e||process.cwd();if(!s){const r=Aa(t);return r.length===0?null:r[0]}const n=Hr(s,t);if(A.existsSync(n)){const r=A.statSync(n),i=new Date;if(i.getTime()-r.mtime.getTime()>Ia)return sn(s,t),null;const a=A.readFileSync(n,"utf8"),l=JSON.parse(a);if(l.isRunning){const u=new Date(l.lastActivity).getTime();if(i.getTime()-u>Ia)return sn(s,t),null}return l}}catch{s&&e&&sn(s,e)}return null}c(fs,"getMcpStatus");function Aa(s){try{const e=s||process.cwd(),t=Jr(e);if(!A.existsSync(ze))return[];const n=A.readdirSync(ze),r=[];for(const i of n){const o=i.match(new RegExp(`^mcp-${t}-(\\d+)\\.json$`));if(o){const a=parseInt(o[1],10),l=fs(a,e);l&&r.push(l)}}return r.sort((i,o)=>new Date(o.startTime).getTime()-new Date(i.startTime).getTime())}catch{return[]}}c(Aa,"getAllMcpStatusFiles");function Wr(s){try{const t={...fs(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};A.existsSync(ze)||A.mkdirSync(ze,{recursive:!0});const n=Hr(s.processId,s.cwd);A.writeFileSync(n,JSON.stringify(t,null,2))}catch{}}c(Wr,"updateMcpStatus");function sn(s,e){try{const t=e||process.cwd();if(s){const n=Hr(s,t);A.existsSync(n)&&A.unlinkSync(n)}else{const n=Jr(t);if(A.existsSync(ze)){const r=A.readdirSync(ze);for(const i of r)i.match(new RegExp(`^mcp-${n}-\\d+\\.json$`))&&A.unlinkSync(P.join(ze,i))}}}catch{}}c(sn,"clearMcpStatus");function Ud(s,e){const t=fs(s,e);t&&Wr({processId:s,cwd:e,totalRequests:t.totalRequests+1,lastRequestTime:new Date().toISOString(),lastActivity:new Date().toISOString()})}c(Ud,"trackToolExecution");function Jr(s){return bl("md5").update(s).digest("hex").slice(0,8)}c(Jr,"getCwdHash");function Hr(s,e){const t=Jr(e);return P.join(ze,`mcp-${t}-${s}.json`)}c(Hr,"getStatusFilePath");const hs={Agent:"agent",Cli:"cli"},D={NOT_INITIALIZED:"not_initialized",SETTING_UP:"setting_up",INITIALIZED:"initialized",NOT_SYNCED:"not_synced",PULLING:"pulling",PUSHING:"pushing",RESOLVING:"resolving",CONFLICTS:"conflicts",SYNCED:"synced",WATCHING:"watching",ERROR:"error"};class Wd{static{c(this,"MembraneCLIService")}constructor(e,t,n=()=>process.exit(0)){this.mode=e,this.cwd=t,this.onShutdown=n,this.notifier=Ve,this.mcpStatusService=new Kd,this.syncService=new Tn,this.setupProcessCleanup()}initialized=!1;notifier;mcpStatusService;syncService;isShuttingDown=!1;currentConfig=null;get config(){return this.currentConfig}getSyncedElements(){return this.syncService.localCache.getAll()}getSyncedElementsByType(e){return this.syncService.localCache.getElementsByType(e)}async fetchElements(){await this.syncService.fetchElements()}async pullWorkspace(e={}){let t=!1;try{if(b.setVerboseMode(!!e.verbose),e.rps!==void 0&&F.init({maxRequestsPerSecond:e.rps}),await this.notifier.setState(D.PULLING),await this.syncService.fetchElements(),this.syncService.detectIncomingChanges(),this.syncService.needsForcedSync()&&!e.force){await this.notifier.setState(D.CONFLICTS),e.watch||(t=!0);return}await this.syncService.pullConnectors(e.allConnectors),await this.syncWorkspaces(e)}catch(n){t=!0,b.error(`Failed to pull workspace: ${n}`),await this.notifier.setState(D.ERROR),b.saveLogsToFile("error")}finally{if(e.saveLogs&&b.saveLogsToFile(),t)process.exit(1);else return e?.onComplete?.()}}async pushWorkspace(e={}){let t=!1;try{if(b.setVerboseMode(!!e.verbose),e.rps!==void 0&&F.init({maxRequestsPerSecond:e.rps}),await this.notifier.setState(D.PUSHING),await this.syncService.fetchElements(),this.syncService.detectOutgoingChanges(),this.syncService.needsForcedSync()&&!e.force){await this.notifier.setState(D.CONFLICTS),e.watch||(t=!0);return}await this.syncService.pushConnectors(),await this.syncWorkspaces(e)}catch(n){t=!0,b.error(`Failed to push workspace: ${n}`),await this.notifier.setState(D.ERROR),b.saveLogsToFile("error")}finally{if(e.saveLogs&&b.saveLogsToFile(),t)process.exit(1);else return e?.onComplete?.()}}async syncWorkspaces(e={}){try{e.verbose!==void 0&&b.setVerboseMode(!!e.verbose),await this.notifier.setState(D.RESOLVING),this.syncService.needsSync()&&await this.syncService.resolveChanges();const t=await this.syncService.getStats();this.notifier.setStats(t),await this.notifier.setState(D.SYNCED),e.watch&&(await this.notifier.setState(D.WATCHING),await this.syncService.startWatching())}catch(t){b.error(`Failed to sync local and remote workspaces: ${t}`),await this.notifier.setState(D.ERROR),b.saveLogsToFile("error")}}async init({force:e=!1}={}){if(!(this.initialized&&!e)){await this.notifier.setState(D.NOT_INITIALIZED);try{await this.loadConfig(),st.isCacheDefined()?(await this.initServices(),this.initialized=!0,await this.notifier.setState(D.INITIALIZED)):(this.initialized=!1,await this.notifier.setState(D.SETTING_UP))}catch(t){b.error(`Failed to initialize services: ${t}`),await this.notifier.setState(D.ERROR),b.saveLogsToFile("error"),this.onShutdown()}}}async loadConfig(){this.currentConfig=st.loadConfig(this.cwd),this.notifier.setConfig(this.currentConfig)}async updateConfig(e){const t={...this.currentConfig,...e};if(!(JSON.stringify(t)!==JSON.stringify(this.currentConfig)))return;await this.stopServices();const r=st.updateConfig(t);this.currentConfig=r,await this.init({force:!0})}async shutdown(){!this.initialized||this.isShuttingDown||(this.isShuttingDown=!0,this.mode===hs.Agent&&(await this.notifier.cleanup(),await this.mcpStatusService.stop()),this.initialized=!1,this.onShutdown())}async initServices(){this.mode===hs.Agent&&(await this.notifier.connectToRemote(),await this.mcpStatusService.start()),this.syncService.clear()}async stopServices(){this.mode===hs.Agent&&(await this.notifier.cleanup(),await this.mcpStatusService.stop())}setupProcessCleanup(){["SIGINT","SIGTERM","uncaughtException","unhandledRejection"].forEach(t=>process.on(t,()=>this.shutdown())),process.on("beforeExit",t=>{t===0&&this.shutdown()})}}const Oa=Gs(null);function Jd({children:s,membraneCLIService:e}){const{data:t}=xi("/account"),[n,r]=H(D.NOT_INITIALIZED),[i,o]=H([]),[a,l]=H({}),[u,d]=H([]),[f,h]=H(null),y=t?.workspaces?.find(p=>p.workspaceKey===f?.workspaceKey)||null;return pt(()=>{const p=c(({state:I})=>r(I),"handleStateChanged"),w=c(({stats:I})=>l(I),"handleStatsChanged"),T=c(({log:I})=>d(x=>[...x,I]),"handleLogAdded"),E=c(({conflicts:I})=>o(I),"handleConflictsUpdated"),$=c(({config:I})=>h(I),"handleConfigChanged");return e.notifier.on(Q.StateChanged,p),e.notifier.on(Q.StatsChanged,w),e.notifier.on(Q.LogAdded,T),e.notifier.on(Q.ConflictsChanged,E),e.notifier.on(Q.ConfigChanged,$),e.init(),()=>{e.notifier.off(Q.StateChanged,p),e.notifier.off(Q.StatsChanged,w),e.notifier.off(Q.LogAdded,T),e.notifier.off(Q.ConflictsChanged,E),e.notifier.off(Q.ConfigChanged,$)}},[]),g(Oa.Provider,{value:{state:n,stats:a,logs:u,currentWorkspace:y,conflicts:i,config:f,updateConfig:c(p=>e.updateConfig(p),"updateConfig"),resolveConflicts:c(p=>e.syncWorkspaces(p),"resolveConflicts"),pull:c(p=>e.pullWorkspace(p),"pull"),push:c(p=>e.pushWorkspace(p),"push"),exit:c(()=>e.shutdown(),"exit"),fetchElements:c(()=>e.fetchElements(),"fetchElements"),getSyncedElementsByType:c(p=>e.getSyncedElementsByType(p),"getSyncedElementsByType")},children:s})}c(Jd,"MembraneCLIServiceProvider");function ke(){const s=Ys(Oa);if(!s)throw new Error("useMembraneCLIService must be used within MembraneCLIServiceProvider");return s}c(ke,"useMembraneCLIService");const Vr=Gs(null),$a=c(()=>{const s=Ys(Vr);if(!s)throw new Error("useTree must be used within TreeView");return s},"useTree"),Hd=c(s=>et.Children.count(s)>0,"hasChildren");function Vd(s){const e=$a(),{label:t,value:n,isInitiallyExpanded:r}=s,i=fl(),o=Xs(e.registerChildItem(t)).current,a=e.isActiveByRef(o),[l,u]=H(r??!1),d={props:s,ref:o,id:i,active:a,expanded:l,setExpanded:u,label:t,value:n,isInitiallyExpanded:r,isParent:!1},{children:f}=s,h=typeof f=="function"?f(d):f;return{...d,props:{...s,children:h},isParent:Hd(h)}}c(Vd,"useTreeItem");function Lt(s){const e=$a(),t=Vd(s),{expanded:n,isParent:r,props:{children:i},setExpanded:o}=t,{renderValue:a=Gd}=s,l=t.ref;_n(()=>{function h(m){return s.onInput?.(m)?!0:m.active&&m.key.rightArrow&&!n?(o(!0),!0):m.active&&m.key.leftArrow&&n?(o(!1),!0):!1}c(h,"onInput"),l.onInput=h},[l,s.onInput,n,o]),l.firstChild??={parent:l,index:0};let u=l.firstChild;function d(h){const m=u;return m.nextSibling||(m.nextSibling={parent:l,prevSibling:m,index:m.index+1}),u=m.nextSibling,m.label=h,m}c(d,"registerChildItem");function f(){l.lastRenderedChild=u.prevSibling}return c(f,"commitChildren"),_n(()=>{f()}),_(In,{children:[_(C,{marginLeft:e.depth*2,children:[g(C,{width:2,children:r&&g(v,{children:n?"\u25BC":"\u25B6"})}),zd(t),a(t)]}),n&&g(Vr.Provider,{value:{...e,depth:e.depth+1,registerChildItem:d},children:i})]})}c(Lt,"TreeItem");function zd({active:s,label:e}){return g(C,{width:32,children:g(v,{inverse:s,children:e})})}c(zd,"defaultRenderLabel");function Gd(s){return g(v,{})}c(Gd,"defaultRenderValue");const ut=c(({label:s,onPress:e,hotkey:t})=>g(Lt,{label:s,onInput:c(({input:n,key:r,active:i})=>i&&r.return||t&&t in r&&r[t]||n===t?(e(),!0):!1,"onInput"),renderValue:c(()=>g(C,{children:g(v,{children:`${t?` (${t})`:""}`})}),"renderValue")}),"ActionTreeItem"),Na=c(({label:s,value:e,onChange:t,disabled:n=!1,mask:r,...i})=>{const[o,a]=H(e),[l,u]=H(!1);return _n(()=>{l||a(e)},[l,e]),g(Lt,{label:s,value:e,onInput:c(({key:d,active:f})=>n?!1:l?(d.escape&&u(!1),d.return&&(t(o),u(!1)),!0):f&&d.return?(u(!0),a(e),!0):!1,"onInput"),renderValue:c(()=>{const d=o,f=r?r.repeat(d.length):d;return g(C,{children:n||!l?g(v,{dimColor:!0,children:f}):_(In,{children:[g(C,{width:f.length+1,children:g(Di,{...i,focus:l,value:d,onChange:a})}),g(v,{dimColor:!0,children:" \u241B cancel"})]})})},"renderValue")})},"TreeTextField"),Yd=c(s=>g(Na,{...s,mask:"*"}),"SecretField"),ye=c(({children:s,showHelp:e=!1})=>{const t=Xs({parent:void 0,label:"<<ROOT>>",index:0}),[n,r]=H(t.current),i={depth:0,isActiveByRef:c(a=>n===a,"isActiveByRef"),registerChildItem:c(()=>t.current,"registerChildItem"),activeItemRef:n};_n(()=>{r(a=>a.parent?a.parent.lastRenderedChild&&a.index>a.parent.lastRenderedChild.index?a.parent.lastRenderedChild:a:t.current.firstChild??t.current)});function*o(a){a&&(yield a,yield*o(a.firstChild),a.nextSibling&&a!==a.parent?.lastRenderedChild&&(yield*o(a.nextSibling)))}return c(o,"walkTree"),tt((a,l)=>{if(n.onInput?.({input:a,key:l,active:!0}))return;let u,d;for(const f of o(t.current))if(f.label!=null){if(u===n&&(d=f),f&&f.onInput?.({input:a,key:l,active:f===n}))return;u=f}l.upArrow?r(f=>f.prevSibling?.lastRenderedChild??f.prevSibling??f.parent??t.current):l.downArrow?r(f=>d??f):l.pageUp?r(()=>t.current.firstChild??t.current):l.pageDown?r(()=>t.current.lastRenderedChild??t.current):l.tab?console.log({label:n.label,nextSibling:n.nextSibling?.label,prevSibling:n.prevSibling?.label,parent:n.parent?.label,firstChild:n.firstChild?.label,lastRenderedChild:n.lastRenderedChild?.label}):l.leftArrow?r(f=>f.parent??t.current):l.rightArrow&&r(f=>f.lastRenderedChild?f.firstChild:f)}),g(Vr.Provider,{value:i,children:_(C,{flexDirection:"column",children:[g(Lt,{isInitiallyExpanded:!0,label:"rootItem",children:s}),e&&g(C,{marginTop:1,flexDirection:"column",children:g(v,{dimColor:!0,children:"\u2191/\u2193 move \u2022 \u2190 collapse \u2022 \u2192 expand \u2022 Enter/Space select/edit \u2022 Esc exit"})})]})})},"TreeView");ye.Item=Lt,ye.TextField=Na;function dt({label:s,elementType:e,isActionExcluded:t,toggleAction:n,generateCode:r}){const[i,o]=H([]),{fetchElements:a,getSyncedElementsByType:l}=ke();return pt(()=>{c(async()=>{try{await a();const d=l(e);o(d.map(f=>f.data))}catch(d){console.error(String(d))}},"loadElements")()},[e,a,l,o]),g(Lt,{label:s,children:i.map(u=>g(Lt,{label:u.name,children:e===N.Action&&_(In,{children:[t&&n&&g(ut,{label:`Toggle ${t(u)?"":"(excluded)"}`,onPress:c(()=>{n(u)},"onPress")}),r&&g(ut,{label:"Generate code",onPress:c(()=>{r?.(u)},"onPress")})]})},u.id))})}c(dt,"WorkspaceElementsTreeItem");function Xd({onComplete:s}){const{config:e,updateConfig:t,fetchElements:n,getSyncedElementsByType:r}=ke(),[i,o]=H(""),a=e,l=c(h=>{o(h),setTimeout(()=>o(""),2e3)},"setFlash"),u=c(async(h,m)=>{try{await t({[h]:m}),l("\u2705 Configuration updated!")}catch{l("\u274C Error updating configuration")}},"updateField"),d=c(async()=>{try{if(e){const h=st.saveToFile(e);l(h?"\u2705 Configuration saved successfully!":"\u274C Failed to save configuration"),await n();const m=r(N.Action);await rr({out:a?.outputDir??"",target:a?.projectType??"typescript",schemasOnly:!1,membraneInterfaces:{actions:m.filter(y=>!a?.excludedActionKeys?.includes(y.key)).map(y=>y.data)}}),l("\u2705 Code generated successfully!")}}catch{l("\u274C Error saving configuration")}},"handleSaveConfig"),f=c(async()=>{try{const h=st.loadConfig();h?(await t(h),l("\u2705 Configuration reloaded successfully!")):l("\u274C No configuration found to reload")}catch{l("\u274C Error reloading configuration")}},"handleReloadConfig");return _(C,{flexDirection:"column",gap:1,children:[g(v,{bold:!0,color:"cyan",children:"\u2699\uFE0F Membrane Configuration Manager"}),g(C,{paddingX:2,children:_(ye,{showHelp:!0,children:[_(ye.Item,{label:"Configuration",isInitiallyExpanded:!0,children:[_(ye.Item,{label:"Project",children:[g(ye.TextField,{label:"Workspace Key",value:a?.workspaceKey??"",onChange:c(h=>u("workspaceKey",h),"onChange"),disabled:!0}),g(Yd,{label:"Workspace Secret",value:a?.workspaceSecret??"",onChange:c(h=>u("workspaceSecret",h),"onChange"),disabled:!0}),g(ye.TextField,{label:"API URI",value:a?.apiUri??"",onChange:c(h=>u("apiUri",h),"onChange")}),g(ye.TextField,{label:"Test Customer ID",value:a?.testCustomerId??"",onChange:c(h=>u("testCustomerId",h),"onChange")})]}),_(ye.Item,{label:"Code Generation",isInitiallyExpanded:!0,children:[_(ye.Item,{label:"Project Type",isInitiallyExpanded:!0,value:a?.projectType,renderValue:c(({value:h})=>g(v,{children:h==="typescript"?"TypeScript":h==="openapi"?"OpenAPI":"(Not set)"}),"renderValue"),children:[g(ut,{label:"Update to TypeScript",onPress:c(()=>u("projectType","typescript"),"onPress")}),g(ut,{label:"Update to OpenAPI",onPress:c(()=>u("projectType","openapi"),"onPress")})]}),g(ye.TextField,{label:"Project dir",value:a?.outputDir??"",onChange:c(h=>u("outputDir",h),"onChange")})]}),_(ye.Item,{label:"Workspace Elements",children:[g(dt,{label:"Actions",elementType:N.Action,isActionExcluded:c(h=>a?.excludedActionKeys?.includes(h.key)??!1,"isActionExcluded"),toggleAction:c(h=>u("excludedActionKeys",[...a?.excludedActionKeys??[],h.key]),"toggleAction"),generateCode:c(h=>{(async()=>{try{await rr({out:a?.outputDir??"",target:a?.projectType??"typescript",schemasOnly:!1,membraneInterfaces:{actions:[h]}}),l("\u2705 Code generated successfully!")}catch{l("\u274C Error generating code")}})()},"generateCode")}),g(dt,{label:"Flows",elementType:N.Flow}),g(dt,{label:"Data Sources",elementType:N.DataSource}),g(dt,{label:"Field Mappings",elementType:N.FieldMapping}),g(dt,{label:"Packages",elementType:N.Package}),g(dt,{label:"App Data Schemas",elementType:N.AppDataSchema}),g(dt,{label:"App Event Types",elementType:N.AppEventType})]})]}),g(ut,{label:"Save Configuration",onPress:d,hotkey:"s"}),g(ut,{label:"Reload Configuration",onPress:f,hotkey:"r"}),g(ut,{label:"Exit",onPress:c(()=>s?.(),"onPress"),hotkey:"escape"})]})}),i&&g(C,{paddingX:2,children:g(v,{color:i.includes("\u2705")?"green":"red",children:i})})]})}c(Xd,"ConfigManager");const xa=Gs(process.cwd());function Zd({cwd:s,children:e}){return g(xa.Provider,{value:s,children:e})}c(Zd,"CwdProvider");function Qd(){return Ys(xa)}c(Qd,"useCwd");function zr({cwd:s,children:e,membraneCLIService:t}){const n=s||process.cwd();return g(Zd,{cwd:n,children:g(Tl,{value:{fetcher:Hl()},children:g(Jd,{membraneCLIService:t,children:e})})})}c(zr,"Layout");function ef(s,e){s.command("config").alias("install").description("\u26A0\uFE0F EXPERIMENTAL: Manage local membrane configuration with interactive UI").addHelpText("after",["","Examples:"," membrane config # Open interactive config manager",""].join(`
|
|
145
|
-
`)).action(()=>{Zs(et.createElement(zr,{membraneCLIService:e,children:et.createElement(
|
|
146
|
-
`)).action(t=>{t.key&&t.secret?st.saveToFile({workspaceKey:t.key,workspaceSecret:t.secret})?(console.error("\u2705 Configuration saved to membrane.config.yml"),process.exit(0)):(console.error("Error writing configuration file"),process.exit(1)):t.key||t.secret?(console.error("Error: Both --key and --secret must be provided for non-interactive mode"),process.exit(1)):Zs(et.createElement(zr,{membraneCLIService:e,children:et.createElement(
|
|
147
|
-
`)).action(async()=>{try{process.env.FASTMCP_SUPPRESS_WARNINGS="true";const e=$n();e||(console.error("No configuration found. Please set MEMBRANE_WORKSPACE_KEY and MEMBRANE_WORKSPACE_SECRET environment variables, or run `membrane init` first."),process.exit(1)),(!e.workspaceKey||!e.workspaceSecret)&&(console.error("Missing workspace credentials. Please provide them in the configuration file, command line, or environment variables."),process.exit(1));const t=e.apiUri||or,n=await
|
|
144
|
+
`,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=ds(e),n=Rt(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=ds(e),n=Rt(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 va(s){const e=s.prettyErrors!==!1;return{lineCounter:s.lineCounter||e&&new wa||null,prettyErrors:e}}c(va,"parseOptions");function vd(s,e={}){const{lineCounter:t,prettyErrors:n}=va(e),r=new jr(t?.addNewLine),i=new Rr(e),o=Array.from(i.compose(r.parse(s)));if(n&&t)for(const a of o)a.errors.forEach(rs(s,t)),a.warnings.forEach(rs(s,t));return o.length>0?o:Object.assign([],{empty:!0},i.streamInfo())}c(vd,"parseAllDocuments");function ka(s,e={}){const{lineCounter:t,prettyErrors:n}=va(e),r=new jr(t?.addNewLine),i=new Rr(e);let o=null;for(const a of i.compose(r.parse(s),!0,s.length))if(!o)o=a;else if(o.options.logLevel!=="silent"){o.errors.push(new ct(a.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}return n&&t&&(o.errors.forEach(rs(s,t)),o.warnings.forEach(rs(s,t))),o}c(ka,"parseDocument");function kd(s,e,t){let n;typeof e=="function"?n=e:t===void 0&&e&&typeof e=="object"&&(t=e);const r=ka(s,t);if(!r)return null;if(r.warnings.forEach(i=>Ro(r.options.logLevel,i)),r.errors.length>0){if(r.options.logLevel!=="silent")throw r.errors[0];r.errors=[]}return r.toJS(Object.assign({reviver:n},t))}c(kd,"parse");function Td(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 r=Math.round(t);t=r<1?void 0:r>8?{indent:8}:{indent:r}}if(s===void 0){const{keepUndefined:r}=t??e??{};if(!r)return}return rt(s)&&!n?s.toString(t):new Jt(s,n,t).toString(t)}c(Td,"stringify");var Ed=Object.freeze({__proto__:null,Alias:qn,CST:bd,Composer:Rr,Document:Jt,Lexer:ya,LineCounter:wa,Pair:re,Parser:jr,Scalar:M,Schema:Ds,YAMLError:Ar,YAMLMap:ue,YAMLParseError:ct,YAMLSeq:We,YAMLWarning:sa,isAlias:Ue,isCollection:Y,isDocument:rt,isMap:kt,isNode:X,isPair:z,isScalar:V,isSeq:Tt,parse:kd,parseAllDocuments:vd,parseDocument:ka,stringify:Td,visit:it,visitAsync:Bn});class Fr extends kl{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)}}const de={Updated:"updated",Deleted:"deleted",Stopped:"stopped"},_d={ignored:Yl,persistent:!0,ignoreInitial:!0,followSymlinks:!1,depth:20,awaitWriteFinish:{stabilityThreshold:500,pollInterval:100},ignorePermissionErrors:!0,atomic:!0,usePolling:!1,alwaysStat:!1,interval:1e3,binaryInterval:300};class Id extends Fr{static{c(this,"LocalElementWatcher")}constructor(e){super(),this.options=e,this.membraneDir=pe(this.options.cwd),this.lockTimeoutMs=this.options.lockTimeoutMs??1e3}isWatching=!1;watcher;membraneDir;contentCache={};ignoredPaths=new Set;lockTimeoutMs;async start(){this.isWatching||(A.existsSync(this.membraneDir)||A.mkdirSync(this.membraneDir,{recursive:!0}),this.initializeContentCache(),this.watcher=vl.watch(this.membraneDir,_d),this.watcher.on("add",e=>this.handleFileSystemEvent(de.Updated,e)).on("change",e=>this.handleFileSystemEvent(de.Updated,e)).on("unlink",e=>this.handleFileSystemEvent(de.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.clearAllLocks(),this.emit(de.Stopped))}getCwd(){return this.options.cwd}async executeWithPathLock(e,t){const n=P.resolve(e);this.ignoredPaths.add(n);try{await t()}finally{setTimeout(()=>{this.ignoredPaths.delete(n)},this.lockTimeoutMs)}}isPathLocked(e){const t=P.resolve(e);if(this.ignoredPaths.has(t))return!0;for(const n of this.ignoredPaths)if(t.startsWith(n+P.sep))return!0;return!1}clearAllLocks(){this.ignoredPaths.clear()}handleFileSystemEvent(e,t){const n=P.relative(this.membraneDir,t);if(this.isPathLocked(t))return;if(e===de.Deleted){this.removeFromCache(n);const a={filePath:t,relativePath:n,data:void 0};b.info(`[local] ${e}: ${a.relativePath}`),this.emit(e,a);return}const r=this.readFileContent(t);if(!this.hasContentChanged(n,r))return;const o=this.processFileEvent(t,r);this.updateCache(n,r),o&&(b.info(`[local] ${e}: ${o.relativePath}`),this.emit(e,o))}readFileContent(e){return A.readFileSync(e,"utf8")}processFileEvent(e,t){const n=P.relative(this.membraneDir,e);let r;try{r=t?Ed.parse(t):void 0}catch{r=void 0}return{filePath:e,relativePath:n,data:r}}hasContentChanged(e,t){if(!t)return this.contentCache[e]!==void 0;const n=this.getContentHash(t);return this.contentCache[e]!==n}getContentHash(e){return Sl.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(){A.existsSync(this.membraneDir)&&this.scanDirectoryForCache(this.membraneDir)}scanDirectoryForCache(e){const t=A.readdirSync(e,{withFileTypes:!0});for(const n of t){const r=P.join(e,n.name);if(n.isDirectory())this.scanDirectoryForCache(r);else if(n.isFile())try{const i=A.readFileSync(r,"utf8"),o=P.relative(this.membraneDir,r);this.updateCache(o,i)}catch{}}}}var Br=(s=>(s.Updated="updated",s.ConnectorFileUpdated="connector-file-updated",s.Connected="connected",s.Disconnected="disconnected",s.Error="error",s))(Br||{});const Ad={debounceMs:2e3,reconnectIntervalMs:5e3,maxReconnectAttempts:1/0,maxBackoffMs:6e4,connectionTimeoutMs:3e5};class Od extends Fr{static{c(this,"RemoteElementWatcher")}constructor(e=Ad){super(),this.config=e}eventSource;debounceTimeouts=new Map;reconnectAttempts=0;reconnectTimeout;connectionTimeout;isStarted=!1;isConnected=!1;async start(){this.isStarted||(this.isStarted=!0,await this.connect())}async stop(){this.isStarted&&(this.isStarted=!1,this.isConnected=!1,this.clearReconnectTimeout(),this.clearConnectionTimeout(),this.clearAllDebounceTimeouts(),this.eventSource&&(this.eventSource.close(),this.eventSource=void 0))}async connect(){try{b.debug("[remote-events] Connecting to server"),this.eventSource&&(this.eventSource.close(),this.eventSource=void 0);const e=await D.getClient(process.cwd()),t=await e.getToken();if(!t)throw new Error("No auth token available");const n=`${e.apiUri}/sse/workspace?token=${encodeURIComponent(t)}`;b.debug("[remote-events] Subscribing to workspace events"),this.eventSource=new Tl(n),this.setupEventSourceHandlers()}catch(e){b.debug(`[remote-events] Failed to connect: ${e}`),this.emit("error",{error:e}),this.scheduleReconnect()}}setupEventSourceHandlers(){this.eventSource&&(this.eventSource.onopen=()=>{b.debug("[remote-events] Connected to server"),this.reconnectAttempts=0,this.isConnected=!0,this.resetConnectionTimeout(),this.emit("connected",{})},this.eventSource.onmessage=e=>{try{this.resetConnectionTimeout();const t=JSON.parse(e.data);this.handleElementUpdate(t)}catch(t){b.debug(`[remote-events] Failed to parse workspace event: ${t}`)}},this.eventSource.onerror=e=>{b.debug(`[remote-events] Connection error: ${JSON.stringify(e,null,2)}`),this.isConnected=!1,this.clearConnectionTimeout(),this.eventSource&&(this.eventSource.close(),this.eventSource=void 0),this.emit("disconnected",{}),this.isStarted&&this.scheduleReconnect()})}handleElementUpdate(e){if(e.type!==ol.ElementUpdate)return;const{elementId:t,elementType:n,data:r={}}=e;if(!(!t||!n)){if(n===x.Connector){const{filePath:i,eventType:o,newPath:a}=r;return b.debug(`[remote-watcher] Received connector event - elementId: ${t}, filePath: ${i}, eventType: ${o}`),this.scheduleConnectorFileUpdate(t,i,o,a)}return this.scheduleElementUpdate(t,n)}}scheduleElementUpdate(e,t){const n=this.debounceTimeouts.get(e);n&&clearTimeout(n);const r=setTimeout(()=>{this.debounceTimeouts.delete(e),this.emit("updated",{elementId:e,elementType:t})},this.config.debounceMs);this.debounceTimeouts.set(e,r)}scheduleConnectorFileUpdate(e,t,n,r){const i=JSON.stringify({connectorId:e,filePath:t}),o=this.debounceTimeouts.get(i);o&&clearTimeout(o);const a=setTimeout(()=>{this.debounceTimeouts.delete(i),this.emit("connector-file-updated",{connectorId:e,filePath:t,eventType:n,newPath:r})},this.config.debounceMs);this.debounceTimeouts.set(i,a)}scheduleReconnect(){if(!this.isStarted||this.reconnectAttempts>=this.config.maxReconnectAttempts){this.reconnectAttempts>=this.config.maxReconnectAttempts&&(b.error("[remote-events] Max reconnection attempts reached. Connection will not be retried."),this.emit("error",{error:new Error("Max reconnection attempts reached")}));return}this.reconnectTimeout&&clearTimeout(this.reconnectTimeout),this.reconnectAttempts++;const e=this.config.reconnectIntervalMs*Math.pow(2,this.reconnectAttempts-1),t=Math.random()*.3*e,n=Math.min(e+t,this.config.maxBackoffMs);b.debug(`[remote-events] Reconnecting in ${Math.round(n)}ms (attempt ${this.reconnectAttempts})`),this.reconnectTimeout=setTimeout(()=>{this.connect()},n)}clearReconnectTimeout(){this.reconnectTimeout&&(clearTimeout(this.reconnectTimeout),this.reconnectTimeout=void 0)}resetConnectionTimeout(){this.clearConnectionTimeout(),this.connectionTimeout=setTimeout(()=>{this.isConnected&&this.isStarted&&(b.debug("[remote-events] Connection timeout detected, reconnecting..."),this.isConnected=!1,this.eventSource&&(this.eventSource.close(),this.eventSource=void 0),this.scheduleReconnect())},this.config.connectionTimeoutMs)}clearConnectionTimeout(){this.connectionTimeout&&(clearTimeout(this.connectionTimeout),this.connectionTimeout=void 0)}clearAllDebounceTimeouts(){this.debounceTimeouts.forEach(e=>clearTimeout(e)),this.debounceTimeouts.clear()}}class Ta{static{c(this,"ElementsCache")}elements=new Map;typeIndex=new Map;internalIdIndex=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),e.data?.id&&this.internalIdIndex.set(e.data.id,t)}remove(e){const t=e.id,n=this.elements.delete(t);if(n){const r=this.typeIndex.get(e.type);r&&(r.delete(t),r.size===0&&this.typeIndex.delete(e.type)),e.data?.id&&this.internalIdIndex.delete(e.data.id)}return n}put(e){this.elements.has(e.id)&&this.remove(e),this.add(e)}get(e){return this.elements.get(e)}getByInternalId(e){const t=this.internalIdIndex.get(e);if(t)return this.elements.get(t)}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(),this.internalIdIndex.clear()}getAllIds(){return new Set(this.elements.keys())}}const Mt="connectors",Le="development",qr={};async function Ea(){const s=new Set,t=(await D.withClient(a=>a.get("org-workspace-id"))).id,n={};b.info("[connectors] Loading custom connectors"),await D.withClient(a=>a.get(`/connectors?workspaceId=${t}`)),b.info("[connectors] Loading public connectors");const r=He(),o=(U.existsSync(r)?U.readdirSync(r):[]).filter(a=>{if(a.startsWith("."))return!1;const l=K.join(r,a);try{return U.statSync(l).isDirectory()}catch{return!1}});for(const a of o){b.info(`[connectors] Loading connector from: ${a}`);const l=U.readdirSync(K.join(r,a)),u=await Kr(a);if(!u)continue;"baseUri"in u&&delete u.baseUri;let d;if(u.uuid&&(d=await D.withClient(h=>h.get(`/connectors/${u.uuid}`),!1)),d)n[u.id]=d.id,b.info(`[connectors] Matched ${u.name} uuid: ${u.uuid}`),d.isPublic||(d.archivedAt&&(b.info(`[connectors] Restoring archived connector ${u.name}`),await D.withClient(h=>h.post(`connectors/${d.id}/restore`))),b.info(`[connectors] Updating connector ${u.name}`),await D.withClient(h=>h.patch(`connectors/${d.id}`,{...u,workspaceId:t})));else if(!n[u.id]&&!d?.isPublic){let h=!1;try{const m=await Ur({connectorId:u.id});m&&m.isPublic&&(h=!0)}catch{}if(!h){b.info(`[connectors] Creating custom connector ${u.name} (${u.key})`);const m=await D.withClient(y=>y.post("connectors",{...u,workspaceId:t}));n[u.id]=m.id}}const f=l.filter(h=>U.statSync(K.join(r,a,h)).isDirectory());for(const h of f)await Nd({connector:u,version:h,connectorId:n[u.id]}),s.add(u.id)}return{connectorsMapping:n,pushedConnectors:Array.from(s)}}c(Ea,"pushConnectors");async function _a({connectorId:s,connectorVersion:e,allConnectors:t,pulledConnectors:n,pulledConnectorVersions:r}){if(!s||r[s]?.has(e))return;const i=qi(),o=await Ur({connectorId:s});if(!o.isPublic||t){if(!o?.key){console.error(`[connectors] Connector ${s} has no key. Skipping..`),b.error(`[connectors] Connector ${s} has no key. Skipping..`);return}n.has(s)||(await Pd({basePath:i,connector:o}),n.add(s)),r[s]||(r[s]=new Set),r[s].has(e)||(await Rd({connector:o,connectorVersion:e,basePath:i}),r[s].add(e))}}c(_a,"pullRemoteConnector");function He(){const s=ar();return K.join(s.membraneDirPath,Mt)}c(He,"getConnectorsPath");async function Kr(s){const e=K.join(He(),s,`${s}.yml`);return ur(e,!1)}c(Kr,"readConnector");async function $d(s,e){return b.info(`[connectors] Zipping ${s} into ${e}`),new Promise((t,n)=>{const r=U.createWriteStream(e),i=Mi("zip",{zlib:{level:9}});r.on("close",()=>{b.success(`[connectors] Successfully created ${e}`),t()}),r.on("end",()=>{b.info("[connectors] Data has been drained")}),i.on("warning",a=>{a.code==="ENOENT"?console.warn(a):n(a)}),i.on("error",a=>{n(a)}),i.pipe(r);const o=U.readdirSync(s);for(const a of o){const l=K.join(s,a),u=U.statSync(l);u.isFile()?i.file(l,{name:a}):u.isDirectory()&&i.directory(l,a)}i.finalize()})}c($d,"createZipArchive");async function xd(s,e){return b.info(`[connectors] Unzipping into ${e}`),new Promise((t,n)=>{const r=Di.Parse();r.on("entry",i=>{const o=i.path;if(i.type==="Directory"){const l=K.join(e,o);U.mkdirSync(l,{recursive:!0}),i.autodrain()}else{const l=K.join(e,o),u=K.dirname(l);U.mkdirSync(u,{recursive:!0});const d=U.createWriteStream(l);i.pipe(d),d.on("finish",()=>{})}}),r.on("end",()=>{b.success(`[connectors] Successfully extracted to ${e}`),t()}),r.on("error",i=>{n(i)}),r.write(s),r.end()})}c(xd,"extractZipArchive");async function Nd({connector:s,version:e,connectorId:t}){const n=K.join(He(),De(s),Ia(e)),r=K.join(n,"src"),i=K.join(n,"src.zip"),o=U.existsSync(i);if(U.existsSync(r)&&(b.info(`[connectors] Archiving source code for ${s.name} version ${e}`),await $d(r,i)),!U.existsSync(i)){b.warning(`[connectors] No source code found for ${s.name} version ${e}`);return}try{const a=new Li;if(a.append("file",U.createReadStream(i),"file.zip"),b.info(`[connectors] Pushing connector version ${e} for ${s.name}`),e==Le)b.info(`[connectors] Uploading connector ${t}`),await D.withClient(l=>l.post(`connectors/${t}/upload`,a,{headers:{...a.getHeaders()}}));else{if(a.append("version",e),a.append("changelog","Imported Version"),(await D.withClient(u=>u.get(`/connectors/${t}/versions`))).find(u=>u.version==e)){b.info(`[connectors] Version ${e} already published`);return}b.info(`[connectors] Publishing version ${e} of connector ${t}`),await D.withClient(u=>u.post(`connectors/${t}/publish-version`,a,{headers:{...a.getHeaders()}}))}b.success(`Successfully pushed connector version ${e} for ${s.name}`)}catch(a){b.error(`Error pushing connector version ${e} for ${s.name}: ${a}`),console.error(`[connectors] Error pushing connector version ${e} for ${s.name}: ${a}`)}finally{!o&&U.existsSync(i)&&(b.info(`[connectors] Cleaning up temporary zip file for ${s.name} version ${e}`),U.unlinkSync(i))}}c(Nd,"pushConnectorVersion");async function Ur({connectorId:s}){if(s){if(qr[s])return qr[s];try{const e=await D.withClient(t=>t.get(`connectors/${s}`),!1);return qr[s]=e,e}catch(e){return b.error(`[connectors] Failed to get connector ${s}: ${e}`),console.error(`[connectors] Failed to get connector ${s}: ${e}`),null}}}c(Ur,"getConnector");async function Pd({basePath:s,connector:e}){const t=De(e),n=K.join(s,Mt,t);U.mkdirSync(n,{recursive:!0});const r=K.join(n,`${De(e)}.yml`);U.writeFileSync(r,Se.dump(e)),b.info(`[connectors] Pulled connector ${e.name}`)}c(Pd,"pullConnector$1");async function Rd({connector:s,connectorVersion:e,basePath:t}){const n=De(s),r=Ia(e),i=K.join(t,"connectors",n,r),o=await D.withClient(l=>l.get(`connectors/${s.id}/download`,{version:e},{responseType:"arraybuffer",headers:{Accept:"application/zip"},timeout:1e6}));U.mkdirSync(i,{recursive:!0});const a=K.join(i,"src.zip");if(U.writeFileSync(a,o),!e){const l=K.join(i,"src");U.mkdirSync(l,{recursive:!0}),await xd(o,l)}b.info(`[connectors] Pulled connector version: ${s.name} (${r})`)}c(Rd,"pullConnectorVersion");function De(s){return s.key}c(De,"getConnectorDirName");function Ia(s){return s??Le}c(Ia,"getConnectorVersionDirName");function Md(s){const e=qi(),t=De(s);return K.join(e,Mt,t)}c(Md,"getConnectorDirPath");function Ld(s){return s.match(`${Mt}/[^/]+/${Le}/src/.*`)!==null}c(Ld,"isConnectorSourceFile");async function Dd(s){const e=s.match(`${Mt}/([^/]+)/${Le}/src/(.*)`);if(!e)return;const t=e[1],n=e[2],r=await Kr(t);if(!r){b.warning(`[connectors] Connector ${t} not found. Ignoring file change`);return}const i=r.id,o=U.readFileSync(s,"utf-8");await D.withClient(a=>a.put(`connectors/${i}/files/${n}`,o,{headers:{"Content-Type":"text/plain"}})),b.info(`[connectors] Pushed file ${n} for connector ${r.name}`)}c(Dd,"putConnectorFile");async function jd(s){const e=s.match(`${Mt}/([^/]+)/${Le}/src/(.*)`);if(!e)return;const t=e[1],n=e[2],r=await Kr(t);if(!r){b.warning(`[connectors] Connector ${t} not found. Ignoring file change`);return}const i=r.id;await D.withClient(o=>o.delete(`connectors/${i}/files/${n}`)),b.info(`[connectors] Deleted file ${n} for connector ${r.name}`)}c(jd,"deleteConnectorFile");async function Fd(s,e){try{const t=await D.withClient(o=>o.get(`connectors/${s}`));if(!t){b.warning(`[connectors] Connector ${s} not found`);return}const n=await D.withClient(o=>o.get(`connectors/${s}/files/${e}`)),r=De(t),i=K.join(He(),r,Le,"src",e);U.mkdirSync(K.dirname(i),{recursive:!0}),n!=null?(U.writeFileSync(i,n),b.info(`[connectors] Pulled file ${e} for connector ${t.name}`)):U.existsSync(i)&&(U.unlinkSync(i),b.info(`[connectors] Deleted file ${e} for connector ${t.name}`))}catch(t){b.error(`[connectors] Failed to pull connector file ${e} for connector ${s}: ${t}`),console.error(`[connectors] Failed to pull connector file ${e} for connector ${s}: ${t}`)}}c(Fd,"pullConnectorFile");async function Bd(s,e){const t=await D.withClient(i=>i.get(`connectors/${s}`),!1);if(!t){b.warning(`[connectors] Connector ${s} not found`);return}const n=De(t),r=K.join(He(),n,Le,"src",e);U.existsSync(r)&&(U.unlinkSync(r),b.info(`[connectors] Deleted file ${e} for connector ${n}`))}c(Bd,"deleteLocalConnectorFile");async function qd(s,e,t){if(t&&e!==t)try{const n=await D.withClient(l=>l.get(`connectors/${s}`),!1);if(!n){b.warning(`[connectors] Connector ${s} not found`);return}const r=De(n),i=K.join(He(),r,Le,"src"),o=K.join(i,e),a=K.join(i,t);U.existsSync(o)&&(U.mkdirSync(K.dirname(a),{recursive:!0}),U.renameSync(o,a),b.info(`[connectors] Renamed directory from ${e} to ${t} for connector ${r}`))}catch(n){b.error(`[connectors] Failed to rename directory ${e} to ${t} for connector ${s}: ${n}`)}}c(qd,"renameLocalConnectorDirectory");async function Kd(s,e){try{const t=await D.withClient(i=>i.get(`connectors/${s}`),!1);if(!t){b.warning(`[connectors] Connector ${s} not found`);return}const n=De(t),r=K.join(He(),n,Le,"src",e);if(U.existsSync(r)){const i=K.resolve(He());if(!K.resolve(r).startsWith(i))return;U.rmSync(r,{recursive:!0,force:!0}),b.info(`[connectors] Deleted directory ${e} for connector ${n}`)}}catch(t){b.error(`[connectors] Failed to delete directory ${e} for connector ${s}: ${t}`)}}c(Kd,"deleteLocalConnectorDirectory");const Q={LogAdded:"logAdded",StateChanged:"stateChanged",StatsChanged:"statsChanged",ConflictsChanged:"conflictsChanged",McpStatusChanged:"mcpStatusChanged",McpServersChanged:"mcpServersChanged",ConfigChanged:"configChanged"};class Ud extends Fr{static{c(this,"WorkspaceNotifications")}constructor(e){super(),this.config=e,b.setNotificationHandler(this)}clientId;heartbeatInterval;isCleaningUp=!1;async connectToRemote(){await this.registerWithRemoteServer(),await this.startHeartbeatLoop()}async setState(e){this.emit(Q.StateChanged,{state:e}),await this.emitRemote({status:e})}setConflicts(e){this.emit(Q.ConflictsChanged,{conflicts:e})}setConfig(e){this.emit(Q.ConfigChanged,{config:e})}setStats(e){this.emit(Q.StatsChanged,{stats:e})}addLog(e){this.emit(Q.LogAdded,{log:e})}setMcpStatus(e){this.emit(Q.McpStatusChanged,{status:e})}async setMcpServers(e){this.emit(Q.McpServersChanged,{servers:e}),await this.emitRemote({mcpServers:e.map(t=>({name:t.agentName,totalRequests:t.totalRequests}))})}async cleanup(){!this.clientId||this.isCleaningUp||(this.isCleaningUp=!0,this.heartbeatInterval&&(clearInterval(this.heartbeatInterval),this.heartbeatInterval=void 0),await this.withErrorHandling(async()=>{await D.withClient(e=>e.delete(`/local-clients/${this.clientId}`))}),this.clientId=void 0)}async registerWithRemoteServer(){if(this.clientId)return;const e=await this.withErrorHandling(async()=>await D.withClient(t=>t.post("/local-clients",{hostname:Ri.hostname(),workingDirectory:process.cwd()})));e?.id?this.clientId=e.id:this.addLog({timestamp:new Date().toISOString(),message:"Failed to register with remote server",type:"error"})}async startHeartbeatLoop(){this.heartbeatInterval=setInterval(async()=>{this.clientId&&await this.sendHeartbeat()},this.config.heartbeatIntervalMs)}async sendHeartbeat(){this.clientId&&await this.withErrorHandling(async()=>{await D.withClient(e=>e.post(`/local-clients/${this.clientId}/keep-alive`,{}))})}async emitRemote(e){this.clientId&&await this.withErrorHandling(async()=>{await D.withClient(t=>t.patch(`/local-clients/${this.clientId}`,e))})}async withErrorHandling(e){try{return await e()}catch(t){const n=t instanceof Error?t.message:String(t);return this.addLog({timestamp:new Date().toISOString(),message:`Failed to connect to remote: ${n}`,type:"error"}),null}}}const Ve=new Ud({heartbeatIntervalMs:15e3}),Aa=[x.AppDataSchema,x.AppEventType,x.DataLinkTable,x.DataSource,x.FieldMapping,x.Action,x.Flow,x.Package];class Tn{static{c(this,"ElementSyncService")}localWatcher=void 0;remoteWatcher=void 0;notifier;changes=[];localCache;remoteCache;localRepo;remoteRepo;pulledConnectors=new Set;pulledConnectorVersions={};constructor(){this.notifier=Ve,this.localCache=new Ta,this.remoteCache=new Ta,this.localRepo=new mu(this.localCache),this.remoteRepo=new gu(this.remoteCache)}clear(){this.changes=[]}needsForcedSync(){return this.changes.some(e=>e.isConflict)}needsSync(){return this.changes.length>0}async getStats(){const e=this.localCache.getAll(),t={};return e.forEach(n=>{t[n.type]=(t[n.type]||0)+1}),t}async fetchElements(){const e=await this.localRepo.getElements(),t=await this.remoteRepo.getElements();this.localCache.addAll(e),this.remoteCache.addAll(t)}async updateElement(e,t){const n=this.getHandler(t),r=this.getCache(t);try{const i=await n.putElement(e);r.put(i)}catch(i){throw b.error(`Failed to update element ${e.id}: ${i}`),i}}async deleteElement(e,t){const n=this.getHandler(t),r=this.getCache(t);try{await n.deleteElement(e,{elements:n.cache.getAll(),connectorsMapping:n.connectorsMapping}),r.remove(e)}catch(i){throw b.error(`Failed to delete element ${e.id}: ${i}`),i}}async pullConnectors(e=!1){const t=this.remoteCache.getElementsByType(x.Integration).map(n=>n.data);for(const n of t){const r=n.connectorId,i=n.connectorVersion;r&&await _a({connectorId:r,connectorVersion:i,allConnectors:e,pulledConnectors:this.pulledConnectors,pulledConnectorVersions:this.pulledConnectorVersions})}}async pushConnectors(){const{connectorsMapping:e}=await Ea();this.remoteRepo.setConnectorsMapping(e)}getHandler(e){return e===ce.INCOMING?this.localRepo:(this.remoteRepo.setSourceCache(this.localCache),this.remoteRepo)}getCache(e){return e===ce.INCOMING?this.localCache:this.remoteCache}async startWatching(){this.localWatcher=new Id({cwd:process.cwd(),lockTimeoutMs:1e3}),this.localWatcher.on(de.Updated,e=>this.handleLocalEvent(e,de.Updated)),this.localWatcher.on(de.Deleted,e=>this.handleLocalEvent(e,de.Deleted)),await this.localWatcher.start(),b.success("[local] Tracking changes.."),this.remoteWatcher=new Od,this.remoteWatcher.on(Br.Updated,({elementId:e,elementType:t})=>this.handleRemoteElementEvent(e,t)),this.remoteWatcher.on(Br.ConnectorFileUpdated,({connectorId:e,filePath:t,eventType:n,newPath:r})=>this.handleRemoteConnectorFileEvent(e,t,n,r)),await this.remoteWatcher.start(),b.success("[remote] Tracking changes..")}async stopWatching(){this.localWatcher&&(await this.localWatcher.stop(),this.localWatcher=void 0),this.remoteWatcher&&(await this.remoteWatcher.stop(),this.remoteWatcher=void 0)}async handleRemoteElementEvent(e,t){try{const n=await this.remoteRepo.getByInternalId(e,t),r=!!n?.data.archivedAt||!!n?.data.isDeactivated;if(!n||r){const o=n||this.remoteCache.getByInternalId(e);return o?(b.info(`[${this.getDirectionLabel(ce.INCOMING)}] Deleted: ${o.id}`),this.localWatcher?.executeWithPathLock(o.absolutePath,()=>this.deleteElement(o,ce.INCOMING))):void 0}if(b.info(`[${this.getDirectionLabel(ce.INCOMING)}] Updated: ${n.id}`),await this.localWatcher?.executeWithPathLock(n.absolutePath,async()=>this.updateElement(n,ce.INCOMING)),t===x.Integration){const o=n.data.connectorId,a=n.data.connectorVersion,l=await Ur({connectorId:o});if(!l?.key)return;const u=Md(l);await this.localWatcher?.executeWithPathLock(u,async()=>_a({connectorId:o,connectorVersion:a,allConnectors:!1,pulledConnectors:this.pulledConnectors,pulledConnectorVersions:this.pulledConnectorVersions}))}}catch(n){b.error(`[sync] Error handling remote event: ${n}`)}}async handleRemoteConnectorFileEvent(e,t,n,r){try{switch(n){case Us.ConnectorFileDeleted:await Bd(e,t);break;case Us.ConnectorDirectoryRenamed:await qd(e,t,r);break;case Us.ConnectorDirectoryDeleted:await Kd(e,t);break;default:await Fd(e,t);break}}catch(i){b.error(`[sync] Error handling remote connector file event: ${i}`)}}async handleLocalEvent(e,t){try{if(Ld(e.filePath))switch(t){case de.Updated:await Dd(e.filePath);break;case de.Deleted:await jd(e.filePath);break}else{let n=Z.fromPathAndData(e.filePath,e.data);if(!n){const r=Z.idFromPath(e.filePath);if(!r||(n=this.remoteCache.get(r),!n))return}switch(b.info(`[${this.getDirectionLabel(ce.OUTGOING)}] ${fu.toSentenceCase(t)}: ${n.id}`),t){case de.Updated:await this.updateElement(n,ce.OUTGOING);break;case de.Deleted:await this.deleteElement(n,ce.OUTGOING);break}}}catch(n){b.error(`[sync] Error handling local event: ${n}`)}}detectIncomingChanges(){this.clearChanges();const e=Tn.getChanges(ce.INCOMING,this.remoteCache,this.localCache);return this.updateChanges(e),e}detectOutgoingChanges(){this.clearChanges();const e=Tn.getChanges(ce.OUTGOING,this.localCache,this.remoteCache);return this.updateChanges(e),e}async resolveChanges(){if(!this.needsSync())return;b.info("[resolver] Resolving changes.."),b.info("[resolver] Resolving integration elements");const e=this.changes.filter(r=>r.element.type===x.Integration);await Promise.all(e.map(async r=>this.resolveChange(r))),e.length>0&&(await this.fetchElements(),this.changes=this.changes.length>0&&this.changes[0]?.direction===ce.INCOMING?this.detectIncomingChanges():this.detectOutgoingChanges(),this.changes=this.changes.filter(r=>r.element.type!==x.Integration)),b.info("[resolver] Resolving universal elements");const t=this.changes.filter(r=>!r.element.hasParent());for(const r of Aa){const i=t.filter(o=>o.element.type===r);b.info(`[resolver] Resolving ${r} elements`),await Promise.all(i.map(async o=>this.resolveChange(o)))}b.info("[resolver] Resolving integration level elements");const n=this.changes.filter(r=>r.element.hasParent());for(const r of Aa){const i=n.filter(o=>o.element.type===r);b.info(`[resolver] Resolving ${r} elements`),await Promise.all(i.map(async o=>this.resolveChange(o)))}b.success("[resolver] Resolved changes")}async resolveChange(e){switch(e.type){case Pe.DELETE:return this.deleteElement(e.element,e.direction);case Pe.CREATE:return this.updateElement(e.element,e.direction);case Pe.UPDATE:return this.updateElement(e.element,e.direction)}}static getChanges(e,t,n){const r=t.getAllIds(),i=n.getAllIds(),o=new Set([...r,...i]),a=[];for(const l of o){const u=t.get(l),d=n.get(l),f=Tn.detectChangeForElement(u,d,e);f&&a.push(f)}return a}updateChanges(e){if(this.changes=e,this.needsForcedSync()){const t=e.filter(n=>n.isConflict);b.warning("[resolver] Conflicts detected"),this.notifier.setConflicts(t)}}clearChanges(){this.changes=[]}getDirectionLabel(e){switch(e){case ce.INCOMING:return"local\u2190remote";case ce.OUTGOING:return"local\u2192remote"}}static detectChangeForElement(e,t,n){return e&&!t?{type:Pe.CREATE,element:e,direction:n,isConflict:!1}:!e&&t?{type:Pe.DELETE,element:t,direction:n,isConflict:!0}:e&&t&&!e.isEqual(t)?{type:Pe.UPDATE,element:e,direction:n,isConflict:!1}:null}}const ze=P.join(El.tmpdir(),"membrane-mcp-status"),Oa=3e4;class Wd{static{c(this,"McpStatusService")}constructor(e=2e3){this.pollIntervalMs=e}isRunning=!1;pollInterval;async start(){this.isRunning||(this.isRunning=!0,this.pollInterval=setInterval(async()=>await this.checkStatus(),this.pollIntervalMs),await this.checkStatus())}async stop(){this.pollInterval&&(clearInterval(this.pollInterval),this.pollInterval=void 0,this.isRunning=!1)}async checkStatus(){try{const e=process.cwd(),t=fs(void 0,e),n=$a(e);t&&Ve.setMcpStatus(t),await Ve.setMcpServers(n)}catch{b.error("Failed to check MCP status")}}}function fs(s,e){try{const t=e||process.cwd();if(!s){const r=$a(t);return r.length===0?null:r[0]}const n=Hr(s,t);if(A.existsSync(n)){const r=A.statSync(n),i=new Date;if(i.getTime()-r.mtime.getTime()>Oa)return sn(s,t),null;const a=A.readFileSync(n,"utf8"),l=JSON.parse(a);if(l.isRunning){const u=new Date(l.lastActivity).getTime();if(i.getTime()-u>Oa)return sn(s,t),null}return l}}catch{s&&e&&sn(s,e)}return null}c(fs,"getMcpStatus");function $a(s){try{const e=s||process.cwd(),t=Jr(e);if(!A.existsSync(ze))return[];const n=A.readdirSync(ze),r=[];for(const i of n){const o=i.match(new RegExp(`^mcp-${t}-(\\d+)\\.json$`));if(o){const a=parseInt(o[1],10),l=fs(a,e);l&&r.push(l)}}return r.sort((i,o)=>new Date(o.startTime).getTime()-new Date(i.startTime).getTime())}catch{return[]}}c($a,"getAllMcpStatusFiles");function Wr(s){try{const t={...fs(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};A.existsSync(ze)||A.mkdirSync(ze,{recursive:!0});const n=Hr(s.processId,s.cwd);A.writeFileSync(n,JSON.stringify(t,null,2))}catch{}}c(Wr,"updateMcpStatus");function sn(s,e){try{const t=e||process.cwd();if(s){const n=Hr(s,t);A.existsSync(n)&&A.unlinkSync(n)}else{const n=Jr(t);if(A.existsSync(ze)){const r=A.readdirSync(ze);for(const i of r)i.match(new RegExp(`^mcp-${n}-\\d+\\.json$`))&&A.unlinkSync(P.join(ze,i))}}}catch{}}c(sn,"clearMcpStatus");function Jd(s,e){const t=fs(s,e);t&&Wr({processId:s,cwd:e,totalRequests:t.totalRequests+1,lastRequestTime:new Date().toISOString(),lastActivity:new Date().toISOString()})}c(Jd,"trackToolExecution");function Jr(s){return Cl("md5").update(s).digest("hex").slice(0,8)}c(Jr,"getCwdHash");function Hr(s,e){const t=Jr(e);return P.join(ze,`mcp-${t}-${s}.json`)}c(Hr,"getStatusFilePath");const hs={Agent:"agent",Cli:"cli"},j={NOT_INITIALIZED:"not_initialized",SETTING_UP:"setting_up",INITIALIZED:"initialized",NOT_SYNCED:"not_synced",PULLING:"pulling",PUSHING:"pushing",RESOLVING:"resolving",CONFLICTS:"conflicts",SYNCED:"synced",WATCHING:"watching",ERROR:"error"};class Hd{static{c(this,"MembraneCLIService")}constructor(e,t,n=()=>process.exit(0)){this.mode=e,this.cwd=t,this.onShutdown=n,this.notifier=Ve,this.mcpStatusService=new Wd,this.syncService=new Tn,this.setupProcessCleanup()}initialized=!1;notifier;mcpStatusService;syncService;isShuttingDown=!1;currentConfig=null;get config(){return this.currentConfig}getSyncedElements(){return this.syncService.localCache.getAll()}getSyncedElementsByType(e){return this.syncService.localCache.getElementsByType(e)}async fetchElements(){await this.syncService.fetchElements()}async pullWorkspace(e={}){let t=!1;try{if(b.setVerboseMode(!!e.verbose),e.rps!==void 0&&D.init({maxRequestsPerSecond:e.rps}),await this.notifier.setState(j.PULLING),await this.syncService.fetchElements(),this.syncService.detectIncomingChanges(),this.syncService.needsForcedSync()&&!e.force){await this.notifier.setState(j.CONFLICTS),e.watch||(t=!0);return}await this.syncService.pullConnectors(e.allConnectors),await this.syncWorkspaces(e)}catch(n){t=!0,b.error(`Failed to pull workspace: ${n}`),await this.notifier.setState(j.ERROR),b.saveLogsToFile("error")}finally{if(e.saveLogs&&b.saveLogsToFile(),t)process.exit(1);else return e?.onComplete?.()}}async pushWorkspace(e={}){let t=!1;try{if(b.setVerboseMode(!!e.verbose),e.rps!==void 0&&D.init({maxRequestsPerSecond:e.rps}),await this.notifier.setState(j.PUSHING),await this.syncService.fetchElements(),this.syncService.detectOutgoingChanges(),this.syncService.needsForcedSync()&&!e.force){await this.notifier.setState(j.CONFLICTS),e.watch||(t=!0);return}await this.syncService.pushConnectors(),await this.syncWorkspaces(e)}catch(n){t=!0,b.error(`Failed to push workspace: ${n}`),await this.notifier.setState(j.ERROR),b.saveLogsToFile("error")}finally{if(e.saveLogs&&b.saveLogsToFile(),t)process.exit(1);else return e?.onComplete?.()}}async syncWorkspaces(e={}){try{e.verbose!==void 0&&b.setVerboseMode(!!e.verbose),await this.notifier.setState(j.RESOLVING),this.syncService.needsSync()&&await this.syncService.resolveChanges();const t=await this.syncService.getStats();this.notifier.setStats(t),await this.notifier.setState(j.SYNCED),e.watch&&(await this.notifier.setState(j.WATCHING),await this.syncService.startWatching())}catch(t){b.error(`Failed to sync local and remote workspaces: ${t}`),await this.notifier.setState(j.ERROR),b.saveLogsToFile("error")}}async init({force:e=!1}={}){if(!(this.initialized&&!e)){await this.notifier.setState(j.NOT_INITIALIZED);try{await this.loadConfig(),st.isCacheDefined()?(await this.initServices(),this.initialized=!0,await this.notifier.setState(j.INITIALIZED)):(this.initialized=!1,await this.notifier.setState(j.SETTING_UP))}catch(t){b.error(`Failed to initialize services: ${t}`),await this.notifier.setState(j.ERROR),b.saveLogsToFile("error"),this.onShutdown()}}}async loadConfig(){this.currentConfig=st.loadConfig(this.cwd),this.notifier.setConfig(this.currentConfig)}async updateConfig(e){const t={...this.currentConfig,...e};if(!(JSON.stringify(t)!==JSON.stringify(this.currentConfig)))return;await this.stopServices();const r=st.updateConfig(t);this.currentConfig=r,await this.init({force:!0})}async shutdown(){!this.initialized||this.isShuttingDown||(this.isShuttingDown=!0,this.mode===hs.Agent&&(await this.notifier.cleanup(),await this.mcpStatusService.stop()),this.initialized=!1,this.onShutdown())}async initServices(){this.mode===hs.Agent&&(await this.notifier.connectToRemote(),await this.mcpStatusService.start()),this.syncService.clear()}async stopServices(){this.mode===hs.Agent&&(await this.notifier.cleanup(),await this.mcpStatusService.stop())}setupProcessCleanup(){["SIGINT","SIGTERM","uncaughtException","unhandledRejection"].forEach(t=>process.on(t,()=>this.shutdown())),process.on("beforeExit",t=>{t===0&&this.shutdown()})}}const xa=Gs(null);function Vd({children:s,membraneCLIService:e}){const{data:t}=Pi("/account"),[n,r]=H(j.NOT_INITIALIZED),[i,o]=H([]),[a,l]=H({}),[u,d]=H([]),[f,h]=H(null),y=t?.workspaces?.find(p=>p.workspaceKey===f?.workspaceKey)||null;return pt(()=>{const p=c(({state:I})=>r(I),"handleStateChanged"),w=c(({stats:I})=>l(I),"handleStatsChanged"),T=c(({log:I})=>d(N=>[...N,I]),"handleLogAdded"),E=c(({conflicts:I})=>o(I),"handleConflictsUpdated"),$=c(({config:I})=>h(I),"handleConfigChanged");return e.notifier.on(Q.StateChanged,p),e.notifier.on(Q.StatsChanged,w),e.notifier.on(Q.LogAdded,T),e.notifier.on(Q.ConflictsChanged,E),e.notifier.on(Q.ConfigChanged,$),e.init(),()=>{e.notifier.off(Q.StateChanged,p),e.notifier.off(Q.StatsChanged,w),e.notifier.off(Q.LogAdded,T),e.notifier.off(Q.ConflictsChanged,E),e.notifier.off(Q.ConfigChanged,$)}},[]),g(xa.Provider,{value:{state:n,stats:a,logs:u,currentWorkspace:y,conflicts:i,config:f,updateConfig:c(p=>e.updateConfig(p),"updateConfig"),resolveConflicts:c(p=>e.syncWorkspaces(p),"resolveConflicts"),pull:c(p=>e.pullWorkspace(p),"pull"),push:c(p=>e.pushWorkspace(p),"push"),exit:c(()=>e.shutdown(),"exit"),fetchElements:c(()=>e.fetchElements(),"fetchElements"),getSyncedElementsByType:c(p=>e.getSyncedElementsByType(p),"getSyncedElementsByType")},children:s})}c(Vd,"MembraneCLIServiceProvider");function ke(){const s=Ys(xa);if(!s)throw new Error("useMembraneCLIService must be used within MembraneCLIServiceProvider");return s}c(ke,"useMembraneCLIService");const Vr=Gs(null),Na=c(()=>{const s=Ys(Vr);if(!s)throw new Error("useTree must be used within TreeView");return s},"useTree"),zd=c(s=>et.Children.count(s)>0,"hasChildren");function Gd(s){const e=Na(),{label:t,value:n,isInitiallyExpanded:r}=s,i=pl(),o=Xs(e.registerChildItem(t)).current,a=e.isActiveByRef(o),[l,u]=H(r??!1),d={props:s,ref:o,id:i,active:a,expanded:l,setExpanded:u,label:t,value:n,isInitiallyExpanded:r,isParent:!1},{children:f}=s,h=typeof f=="function"?f(d):f;return{...d,props:{...s,children:h},isParent:zd(h)}}c(Gd,"useTreeItem");function Lt(s){const e=Na(),t=Gd(s),{expanded:n,isParent:r,props:{children:i},setExpanded:o}=t,{renderValue:a=Xd}=s,l=t.ref;_n(()=>{function h(m){return s.onInput?.(m)?!0:m.active&&m.key.rightArrow&&!n?(o(!0),!0):m.active&&m.key.leftArrow&&n?(o(!1),!0):!1}c(h,"onInput"),l.onInput=h},[l,s.onInput,n,o]),l.firstChild??={parent:l,index:0};let u=l.firstChild;function d(h){const m=u;return m.nextSibling||(m.nextSibling={parent:l,prevSibling:m,index:m.index+1}),u=m.nextSibling,m.label=h,m}c(d,"registerChildItem");function f(){l.lastRenderedChild=u.prevSibling}return c(f,"commitChildren"),_n(()=>{f()}),_(In,{children:[_(C,{marginLeft:e.depth*2,children:[g(C,{width:2,children:r&&g(v,{children:n?"\u25BC":"\u25B6"})}),Yd(t),a(t)]}),n&&g(Vr.Provider,{value:{...e,depth:e.depth+1,registerChildItem:d},children:i})]})}c(Lt,"TreeItem");function Yd({active:s,label:e}){return g(C,{width:32,children:g(v,{inverse:s,children:e})})}c(Yd,"defaultRenderLabel");function Xd(s){return g(v,{})}c(Xd,"defaultRenderValue");const ut=c(({label:s,onPress:e,hotkey:t})=>g(Lt,{label:s,onInput:c(({input:n,key:r,active:i})=>i&&r.return||t&&t in r&&r[t]||n===t?(e(),!0):!1,"onInput"),renderValue:c(()=>g(C,{children:g(v,{children:`${t?` (${t})`:""}`})}),"renderValue")}),"ActionTreeItem"),Pa=c(({label:s,value:e,onChange:t,disabled:n=!1,mask:r,...i})=>{const[o,a]=H(e),[l,u]=H(!1);return _n(()=>{l||a(e)},[l,e]),g(Lt,{label:s,value:e,onInput:c(({key:d,active:f})=>n?!1:l?(d.escape&&u(!1),d.return&&(t(o),u(!1)),!0):f&&d.return?(u(!0),a(e),!0):!1,"onInput"),renderValue:c(()=>{const d=o,f=r?r.repeat(d.length):d;return g(C,{children:n||!l?g(v,{dimColor:!0,children:f}):_(In,{children:[g(C,{width:f.length+1,children:g(ji,{...i,focus:l,value:d,onChange:a})}),g(v,{dimColor:!0,children:" \u241B cancel"})]})})},"renderValue")})},"TreeTextField"),Zd=c(s=>g(Pa,{...s,mask:"*"}),"SecretField"),ye=c(({children:s,showHelp:e=!1})=>{const t=Xs({parent:void 0,label:"<<ROOT>>",index:0}),[n,r]=H(t.current),i={depth:0,isActiveByRef:c(a=>n===a,"isActiveByRef"),registerChildItem:c(()=>t.current,"registerChildItem"),activeItemRef:n};_n(()=>{r(a=>a.parent?a.parent.lastRenderedChild&&a.index>a.parent.lastRenderedChild.index?a.parent.lastRenderedChild:a:t.current.firstChild??t.current)});function*o(a){a&&(yield a,yield*o(a.firstChild),a.nextSibling&&a!==a.parent?.lastRenderedChild&&(yield*o(a.nextSibling)))}return c(o,"walkTree"),tt((a,l)=>{if(n.onInput?.({input:a,key:l,active:!0}))return;let u,d;for(const f of o(t.current))if(f.label!=null){if(u===n&&(d=f),f&&f.onInput?.({input:a,key:l,active:f===n}))return;u=f}l.upArrow?r(f=>f.prevSibling?.lastRenderedChild??f.prevSibling??f.parent??t.current):l.downArrow?r(f=>d??f):l.pageUp?r(()=>t.current.firstChild??t.current):l.pageDown?r(()=>t.current.lastRenderedChild??t.current):l.tab?console.log({label:n.label,nextSibling:n.nextSibling?.label,prevSibling:n.prevSibling?.label,parent:n.parent?.label,firstChild:n.firstChild?.label,lastRenderedChild:n.lastRenderedChild?.label}):l.leftArrow?r(f=>f.parent??t.current):l.rightArrow&&r(f=>f.lastRenderedChild?f.firstChild:f)}),g(Vr.Provider,{value:i,children:_(C,{flexDirection:"column",children:[g(Lt,{isInitiallyExpanded:!0,label:"rootItem",children:s}),e&&g(C,{marginTop:1,flexDirection:"column",children:g(v,{dimColor:!0,children:"\u2191/\u2193 move \u2022 \u2190 collapse \u2022 \u2192 expand \u2022 Enter/Space select/edit \u2022 Esc exit"})})]})})},"TreeView");ye.Item=Lt,ye.TextField=Pa;function dt({label:s,elementType:e,isActionExcluded:t,toggleAction:n,generateCode:r}){const[i,o]=H([]),{fetchElements:a,getSyncedElementsByType:l}=ke();return pt(()=>{c(async()=>{try{await a();const d=l(e);o(d.map(f=>f.data))}catch(d){console.error(String(d))}},"loadElements")()},[e,a,l,o]),g(Lt,{label:s,children:i.map(u=>g(Lt,{label:u.name,children:e===x.Action&&_(In,{children:[t&&n&&g(ut,{label:`Toggle ${t(u)?"":"(excluded)"}`,onPress:c(()=>{n(u)},"onPress")}),r&&g(ut,{label:"Generate code",onPress:c(()=>{r?.(u)},"onPress")})]})},u.id))})}c(dt,"WorkspaceElementsTreeItem");function Qd({onComplete:s}){const{config:e,updateConfig:t,fetchElements:n,getSyncedElementsByType:r}=ke(),[i,o]=H(""),a=e,l=c(h=>{o(h),setTimeout(()=>o(""),2e3)},"setFlash"),u=c(async(h,m)=>{try{await t({[h]:m}),l("\u2705 Configuration updated!")}catch{l("\u274C Error updating configuration")}},"updateField"),d=c(async()=>{try{if(e){const h=st.saveToFile(e);l(h?"\u2705 Configuration saved successfully!":"\u274C Failed to save configuration"),await n();const m=r(x.Action);await rr({out:a?.outputDir??"",target:a?.projectType??"typescript",schemasOnly:!1,membraneInterfaces:{actions:m.filter(y=>!a?.excludedActionKeys?.includes(y.key)).map(y=>y.data)}}),l("\u2705 Code generated successfully!")}}catch{l("\u274C Error saving configuration")}},"handleSaveConfig"),f=c(async()=>{try{const h=st.loadConfig();h?(await t(h),l("\u2705 Configuration reloaded successfully!")):l("\u274C No configuration found to reload")}catch{l("\u274C Error reloading configuration")}},"handleReloadConfig");return _(C,{flexDirection:"column",gap:1,children:[g(v,{bold:!0,color:"cyan",children:"\u2699\uFE0F Membrane Configuration Manager"}),g(C,{paddingX:2,children:_(ye,{showHelp:!0,children:[_(ye.Item,{label:"Configuration",isInitiallyExpanded:!0,children:[_(ye.Item,{label:"Project",children:[g(ye.TextField,{label:"Workspace Key",value:a?.workspaceKey??"",onChange:c(h=>u("workspaceKey",h),"onChange"),disabled:!0}),g(Zd,{label:"Workspace Secret",value:a?.workspaceSecret??"",onChange:c(h=>u("workspaceSecret",h),"onChange"),disabled:!0}),g(ye.TextField,{label:"API URI",value:a?.apiUri??"",onChange:c(h=>u("apiUri",h),"onChange")}),g(ye.TextField,{label:"Test Customer ID",value:a?.testCustomerId??"",onChange:c(h=>u("testCustomerId",h),"onChange")})]}),_(ye.Item,{label:"Code Generation",isInitiallyExpanded:!0,children:[_(ye.Item,{label:"Project Type",isInitiallyExpanded:!0,value:a?.projectType,renderValue:c(({value:h})=>g(v,{children:h==="typescript"?"TypeScript":h==="openapi"?"OpenAPI":"(Not set)"}),"renderValue"),children:[g(ut,{label:"Update to TypeScript",onPress:c(()=>u("projectType","typescript"),"onPress")}),g(ut,{label:"Update to OpenAPI",onPress:c(()=>u("projectType","openapi"),"onPress")})]}),g(ye.TextField,{label:"Project dir",value:a?.outputDir??"",onChange:c(h=>u("outputDir",h),"onChange")})]}),_(ye.Item,{label:"Workspace Elements",children:[g(dt,{label:"Actions",elementType:x.Action,isActionExcluded:c(h=>a?.excludedActionKeys?.includes(h.key)??!1,"isActionExcluded"),toggleAction:c(h=>u("excludedActionKeys",[...a?.excludedActionKeys??[],h.key]),"toggleAction"),generateCode:c(h=>{(async()=>{try{await rr({out:a?.outputDir??"",target:a?.projectType??"typescript",schemasOnly:!1,membraneInterfaces:{actions:[h]}}),l("\u2705 Code generated successfully!")}catch{l("\u274C Error generating code")}})()},"generateCode")}),g(dt,{label:"Flows",elementType:x.Flow}),g(dt,{label:"Data Sources",elementType:x.DataSource}),g(dt,{label:"Field Mappings",elementType:x.FieldMapping}),g(dt,{label:"Packages",elementType:x.Package}),g(dt,{label:"App Data Schemas",elementType:x.AppDataSchema}),g(dt,{label:"App Event Types",elementType:x.AppEventType})]})]}),g(ut,{label:"Save Configuration",onPress:d,hotkey:"s"}),g(ut,{label:"Reload Configuration",onPress:f,hotkey:"r"}),g(ut,{label:"Exit",onPress:c(()=>s?.(),"onPress"),hotkey:"escape"})]})}),i&&g(C,{paddingX:2,children:g(v,{color:i.includes("\u2705")?"green":"red",children:i})})]})}c(Qd,"ConfigManager");const Ra=Gs(process.cwd());function ef({cwd:s,children:e}){return g(Ra.Provider,{value:s,children:e})}c(ef,"CwdProvider");function tf(){return Ys(Ra)}c(tf,"useCwd");function zr({cwd:s,children:e,membraneCLIService:t}){const n=s||process.cwd();return g(ef,{cwd:n,children:g(_l,{value:{fetcher:zl()},children:g(Vd,{membraneCLIService:t,children:e})})})}c(zr,"Layout");function nf(s,e){s.command("config").alias("install").description("\u26A0\uFE0F EXPERIMENTAL: Manage local membrane configuration with interactive UI").addHelpText("after",["","Examples:"," membrane config # Open interactive config manager",""].join(`
|
|
145
|
+
`)).action(()=>{Zs(et.createElement(zr,{membraneCLIService:e,children:et.createElement(Qd,{onComplete:c(()=>process.exit(0),"onComplete")})}))})}c(nf,"setupConfigCommand");function sf({currentPat:s,onSubmit:e}){const[t,n]=H(""),[r,i]=H(!1),[o,a]=H(null);return _(C,{flexDirection:"column",borderStyle:"round",borderTop:!0,width:70,paddingX:1,children:[g(C,{marginTop:-1,marginBottom:1,children:g(v,{bold:!0,children:"\u{1F511} Enter your Personal Access Token"})}),g(v,{children:"Please provide your Personal Access Token. You can find it here:"}),g(C,{marginTop:1,marginBottom:1,children:g(v,{color:"yellow",children:"https://console.integration.app/w/0/manage-account/api-token"})}),s&&g(v,{dimColor:!0,children:"Press Enter to keep your current token or type a new one."}),g(ji,{mask:"*",placeholder:`${s?"******":"Enter your token here..."}`,value:t,onChange:n,onSubmit:c(async u=>{a(null),i(!0);try{await e(u),n("")}catch{a("Invalid token. Please try again.")}finally{i(!1)}},"handleSubmit")}),r&&g(C,{marginTop:1,children:_(v,{children:[g(An,{type:"dots"})," Validating token..."]})}),o&&g(v,{color:"red",children:o})]})}c(sf,"PersonalAccessTokenInput");function Ma({onExit:s,showEscOption:e=!0}){const[t,n]=H(""),{data:r,error:i,isLoading:o}=Pi("/account"),{updateConfig:a}=ke(),l=r?.workspaces,u=o;if(tt((p,w)=>{w.escape&&s?.()}),u)return _(C,{children:[g(An,{}),g(v,{children:" Fetching workspaces..."})]});if(i)return _(C,{flexDirection:"column",children:[_(v,{color:"red",children:["Error: ",i.message]}),g(C,{marginTop:1,children:g(v,{color:"grey",children:"Press ESC to go back"})})]});const d=l?.filter(p=>p.name.toLowerCase().includes(t.toLowerCase()))??[],f=d.map(p=>({label:p.name,value:p.id})),h=f.length,m=l?.length??0;async function y(p){const w=d.find($=>$.id===p);if(!w)return;const{key:T,secret:E}=w;!T||!E||(await a({workspaceKey:T,workspaceSecret:E}),s?.())}return c(y,"handleSelect"),_(C,{flexDirection:"column",borderStyle:"round",borderTop:!0,width:70,paddingX:1,children:[g(C,{marginTop:-1,children:g(v,{bold:!0,children:"\u{1F4C1} Select your workspace"})}),_(C,{marginTop:1,children:[g(v,{children:"Search: "}),g(Il,{placeholder:"Enter a search query...",onChange:n})]}),m>5&&_(v,{children:["Showing ",h," of ",m," workspaces."]}),g(C,{marginTop:1,children:g(Al,{options:f,onChange:c(p=>{p&&y(p)},"onChange")})}),e&&g(C,{marginTop:1,children:g(v,{color:"grey",children:"Press ESC to go back"})})]})}c(Ma,"SelectWorkspace");var rn=(s=>(s[s.Authenticate=0]="Authenticate",s[s.ConnectWorkspace=1]="ConnectWorkspace",s))(rn||{});const rf={0:"Authenticate in Membrane",1:"Connect a Membrane Workspace"},Gr=[rn.Authenticate,rn.ConnectWorkspace];function La({onComplete:s}){const{config:e}=ke(),[t,n]=H(!1),[r,i]=H(0),o=!!(e?.workspaceKey&&e?.workspaceSecret),a=Ui(),l=Gr[r],u=r+1,d=Gr.length,f=Gr.map((y,p)=>{let w="pending";return p<r?w="done":p===r&&(w="current"),{id:y,label:rf[y],status:w}});async function h(y){const p=a&&y===""?a:y,w=new Wi;try{await w.request("/account",{headers:{Authorization:`Bearer ${p}`}}),Vl(p),i(T=>T+1)}catch(T){console.error(T)}}c(h,"handlePatSubmit");function m(){n(!0),s&&s()}return c(m,"handleWorkspaceSelected"),tt((y,p)=>{o&&p.escape&&s&&s()}),t?g(C,{children:g(v,{children:"\u2705 Setup complete. You are ready to go!"})}):_(C,{flexDirection:"column",alignSelf:"flex-start",gap:1,children:[_(C,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:70,children:[g(C,{marginTop:-1,marginBottom:1,children:_(v,{bold:!0,children:["\u{1F6E0}\uFE0F Setup \u2014"," ",_(v,{color:"cyan",children:["Step ",u," of ",d]}),o&&g(v,{color:"grey",children:" [esc: go back]"})]})}),g(C,{flexDirection:"column",paddingLeft:2,children:f.map(y=>g(of,{status:y.status,label:y.label},y.id))})]}),l===rn.Authenticate&&g(sf,{currentPat:a,onSubmit:h}),l===rn.ConnectWorkspace&&g(Ma,{onExit:m,showEscOption:!1})]})}c(La,"Setup");function of({status:s,label:e}){return _(C,{children:[_(C,{width:2,children:[s==="current"&&g(An,{type:"dots"}),s==="done"&&g(v,{children:"\u2705"})]}),g(v,{dimColor:s!=="current",children:e})]})}c(of,"StepDisplay");function af(s,e){s.command("init").description("Run interactive setup for Membrane project").option("--key <key>","Workspace key for non-interactive setup").option("--secret <secret>","Workspace secret for non-interactive setup").addHelpText("after",["","Examples:"," membrane init # Run interactive setup"," membrane init --key KEY --secret SEC # Non-interactive setup with key and secret",""].join(`
|
|
146
|
+
`)).action(t=>{t.key&&t.secret?st.saveToFile({workspaceKey:t.key,workspaceSecret:t.secret})?(console.error("\u2705 Configuration saved to membrane.config.yml"),process.exit(0)):(console.error("Error writing configuration file"),process.exit(1)):t.key||t.secret?(console.error("Error: Both --key and --secret must be provided for non-interactive mode"),process.exit(1)):Zs(et.createElement(zr,{membraneCLIService:e,children:et.createElement(La,{onComplete:c(()=>process.exit(0),"onComplete")})}))})}c(af,"setupInitCommand");async function Da(s,e,t){const n={iss:s,exp:Math.floor(Date.now()/1e3)+600,isAdmin:!0};return t&&(n.id=t),Qs.sign(n,e)}c(Da,"generateMcpAccessToken");async function cf(s,e){return(await Ht.get(`${s}/docs-json`,{headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json"}})).data}c(cf,"fetchOpenApiSchema");function Ge(s,e=!0,t,n=new Set){if(!s)return e?J.string():J.string().optional();if(Object.keys(s).length===0)return e?J.any():J.any().optional();if(s.$ref){const i=s.$ref.replace("#/components/schemas/","");if(n.has(i))return J.any();if(n.add(i),t?.schemas?.[i]){const o=t.schemas[i];return Ge(o,e,t,n)}return J.any()}let r;if(s.type==="object"||s.properties){const i={};if(s.properties)for(const[o,a]of Object.entries(s.properties)){const l=s.required?.includes(o)??!1;i[o]=Ge(a,l,t,n)}if(Object.keys(i).length>0){if(r=J.object(i),s.additionalProperties)if(typeof s.additionalProperties=="object"){const o=Ge(s.additionalProperties,!1,t,n);r=r.catchall(o)}else s.additionalProperties===!0&&(r=r.passthrough())}else if(s.additionalProperties&&typeof s.additionalProperties=="object"){const o=Ge(s.additionalProperties,!1,t,n);r=J.record(J.string(),o)}else r=J.record(J.string(),J.any())}else if(s.type==="array"){const i=s.items?Ge(s.items,!0,t,n):J.any();r=J.array(i)}else if(s.anyOf)r=J.any();else{switch(s.type){case"integer":r=J.coerce.number().int();break;case"number":r=J.coerce.number();break;case"boolean":r=J.coerce.boolean();break;case"string":default:r=J.string();break}s.format==="uuid"?r=J.string().uuid():s.format==="email"?r=J.string().email():s.format==="date"?r=J.string().regex(/^\d{4}-\d{2}-\d{2}$/):s.format==="date-time"&&(r=J.string().datetime()),s.enum&&(r=J.enum(s.enum)),(s.type==="integer"||s.type==="number")&&(s.minimum!==void 0&&(r=r.min(s.minimum)),s.maximum!==void 0&&(r=r.max(s.maximum))),s.type==="string"&&(s.minLength!==void 0&&(r=r.min(s.minLength)),s.maxLength!==void 0&&(r=r.max(s.maxLength)))}return e?r:r.optional()}c(Ge,"convertOpenApiSchemaToZod");function ja(s){const e=s.match(/\{([^}]+)\}/g);return e?e.map(t=>t.slice(1,-1)):[]}c(ja,"extractPathParameters");function lf(s,e,t,n,r,i,o,a){const l=s.operationId||`${t}_${e.replace(/[^a-zA-Z0-9]/g,"_")}`,u=s.description||s.summary||`${t.toUpperCase()} ${e}`,d={},f={},h={};if(s.parameters){for(const y of s.parameters)if(y.in==="path")f[y.name]=Ge(y.schema,!0,o).describe(y.description||`Path parameter: ${y.name}`);else if(y.in==="query"){const p=y.required===!0;h[y.name]=Ge(y.schema,p,o).describe(y.description||`Query parameter: ${y.name}`)}}if(Object.keys(f).length>0&&(d.params=J.object(f).describe("Path parameters")),Object.keys(h).length>0&&(d.query=J.object(h).describe("Query parameters")),s.requestBody&&s.requestBody.content){const y=s.requestBody.required===!0;if(s.requestBody.content["application/json"]){const p=s.requestBody.content["application/json"].schema;p?d.body=Ge(p,y,o).describe("Request body (JSON)"):d.body=J.any().describe("Request body (JSON)")}else s.requestBody.content["application/octet-stream"]||s.requestBody.content["text/plain"]?d.body=y?J.string().describe("Request body (binary/text)"):J.string().optional().describe("Request body (binary/text)"):d.body=J.any().describe("Request body")}const m=Object.keys(d).length>0?J.object(d):J.object({});return{name:l,description:u,parameters:m,async execute(y){try{const p=ja(e);if(p.length>0){if(!y.params)throw new Error(`Missing required path parameters: ${p.join(", ")}`);const R=p.filter(F=>!(F in y.params));if(R.length>0)throw new Error(`Missing required path parameters: ${R.join(", ")}`)}let w=`${n}${e}`;if(y.params)for(const[R,F]of Object.entries(y.params)){const O=`{${R}}`;w.includes(O)&&(w=w.replace(O,String(F)))}const T=ja(w);if(T.length>0)throw new Error(`Unresolved path parameters: ${T.join(", ")}`);const E=new URLSearchParams;if(y.query)for(const[R,F]of Object.entries(y.query))F!=null&&E.append(R,String(F));E.toString()&&(w+=`?${E.toString()}`);const $=await Da(r,i,a),I={method:t.toUpperCase(),headers:{Authorization:`Bearer ${$}`}};y.body&&t.toLowerCase()!=="get"&&(s.requestBody?.content?.["application/json"]?(I.headers["Content-Type"]="application/json",I.data=y.body):s.requestBody?.content?.["application/octet-stream"]?(I.headers["Content-Type"]="application/octet-stream",I.data=y.body):s.requestBody?.content?.["text/plain"]?(I.headers["Content-Type"]="text/plain",I.data=y.body):(I.headers["Content-Type"]="application/json",I.data=y.body));const N=await Ht.request({url:w,...I});return{content:[{type:"text",text:N.data===""?"":JSON.stringify(N.data,null,2)}]}}catch(p){return Ht.isAxiosError(p)?{content:[{type:"text",text:`Error: ${p.response?.data?`HTTP ${p.response.status}: ${p.response.statusText} - ${JSON.stringify(p.response.data)}`:`HTTP ${p.response?.status||"unknown"}: ${p.message}`}`}],isError:!0}:p instanceof Error?{content:[{type:"text",text:`Error: API call failed: ${p.message}`}],isError:!0}:{content:[{type:"text",text:"Error: API call failed with unknown error"}],isError:!0}}}}}c(lf,"createApiTool");function uf(s,e,t,n,r){const i=[];if(!s.paths)return i;const o=s.components||{};for(const[a,l]of Object.entries(s.paths))if(typeof l=="object"&&l!==null){for(const[u,d]of Object.entries(l))if(["get","post","put","delete","patch"].includes(u)&&d&&typeof d=="object"){const f=lf(d,a,u,e,t,n,o,r);i.push(f)}}return i}c(uf,"convertOpenApiToTools");function df(s){s.command("mcp").description("Launch MCP server with OpenAPI endpoints as tools (API URI is read from environment variables or membrane.config.yml)").addHelpText("after",["","Examples:"," membrane mcp # Launch MCP server using API URI from env vars or membrane.config.yml",""].join(`
|
|
147
|
+
`)).action(async()=>{try{process.env.FASTMCP_SUPPRESS_WARNINGS="true";const e=$n();e||(console.error("No configuration found. Please set MEMBRANE_WORKSPACE_KEY and MEMBRANE_WORKSPACE_SECRET environment variables, or run `membrane init` first."),process.exit(1)),(!e.workspaceKey||!e.workspaceSecret)&&(console.error("Missing workspace credentials. Please provide them in the configuration file, command line, or environment variables."),process.exit(1));const t=e.apiUri||or,n=await Da(e.workspaceKey,e.workspaceSecret,e.testCustomerId),r=await cf(t,n),i=uf(r,t,e.workspaceKey,e.workspaceSecret,e.testCustomerId),o=new $l({name:"Membrane API",instructions:`This MCP server lets you interact with Membrane to configure, run, and troubleshoot integrations.
|
|
148
148
|
Use it for anything related to Membrane or integrations.
|
|
149
|
-
`,version:"1.0.0"});for(const u of i){const d=u.execute;u.execute=async f=>(
|
|
149
|
+
`,version:"1.0.0"});for(const u of i){const d=u.execute;u.execute=async f=>(Jd(process.pid,process.cwd()),d(f)),o.addTool(u)}Wr({isRunning:!0,startTime:new Date().toISOString(),toolsCount:i.length,lastActivity:new Date().toISOString(),processId:process.pid,cwd:process.cwd(),agentName:process.env.AGENT_NAME||"Unnamed Agent"});const a=setInterval(()=>{Wr({processId:process.pid,cwd:process.cwd(),lastActivity:new Date().toISOString()})},5e3),l=c(async()=>{clearInterval(a),sn(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",()=>{sn(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(df,"setupMcpCommand");const ff={info:"\u{1F4DD}",success:"\u2728",warning:"\u26A0\uFE0F",error:"\u274C",debug:"\u{1F50D}"},hf={info:k.white,success:k.green,warning:k.yellow,error:k.red,debug:k.gray};class B{static{c(this,"Logger")}static formatMessage(e,t,n={icon:!1}){const r=n.timestamp?`${k.gray(new Date().toISOString())} `:"",i=n.prefix?`${k.gray(n.prefix)} `:"",o=n.suffix?` ${k.gray(n.suffix)}`:"",a=ff[t],l=hf[t];return`${r}${n.icon?a:""} ${i}${l(e)}${o}`}static info(e,t){let n=k.white;if(t?.color&&(n=k[t.color.toLowerCase()]||k.white),t?.timestamp){const r=new Date().toLocaleTimeString();console.debug(`${k.gray(`[${r}]`)} ${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?`
|
|
150
150
|
${k.red(t.error)}`:""):console.debug(k.gray(e),t?.error?`
|
|
151
|
-
${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]),r=e.map(i=>{const o={};return n.forEach(a=>{o[a]=i[a]}),o});console.table(r,n)}static divider(){}}function
|
|
152
|
-
`)).action(async()=>{try{
|
|
153
|
-
`)}`),new Error(`Background job ${n} failed: ${m}`)}b.debug(`[background-job] Polling job ${n} (status: ${h.status})`)}}c(Yr,"pollBackgroundJob");function
|
|
154
|
-
`)).action(async e=>{try{const
|
|
155
|
-
`)).action(async(e,t)=>{try{await Pf(e,t)}catch(n){Ff(n),process.exit(1)}})}c(xf,"setupPushCommand");async function Pf(s,e){const t=s.length>0,n=await Ba(),r=Wa(),i=Rf(n,r),o=await qa(i,t?s:void 0),a=await Va(o,{dryRun:!0,partial:t});a[xe.DELETE].size>0&&!e.force&&(await jf(a,o),q.error("Use --force to delete remote elements"),process.exit(1)),await ka(),await Va(o,{partial:t}),Df(i),process.exit(0)}c(Pf,"pushWorkspace");function Rf(s,e){const t=Mf(s),n=Lf(t,e),r={};for(const[i,o]of Object.entries(t)){const a=i,l=Ne[a]?.parentFieldKey||"parentId";r[a]=(o||[]).map(u=>{const d={...u};if(d.integrationId&&!d.integrationUuid&&(d.integrationUuid=n.get(d.integrationId.toString())||d.integrationId,delete d.integrationId),d.connectorId){if(!d.connectorUuid){const f=n.get(d.connectorId.toString());f&&(d.connectorUuid=f)}delete d.connectorId}if(d[l]){const f=d[l].toString();d.parentUuid=n.get(f)||f}return a===N.Package&&d.elements&&(d.elements=d.elements.map(f=>{if(f.id&&!f.uuid){const h=n.get(f.id.toString());if(h)return{uuid:h,type:f.type}}return f})),delete d.id,d})}return r}c(Rf,"resolveLegacyIdReferences");function Mf(s){const e={};for(const[t,n]of Object.entries(s))e[t]=(n||[]).map(r=>r.uuid?r:{...r,uuid:Nf()});return e}c(Mf,"generateMissingUuids");function Lf(s,e){const t=new Map;for(const n of Object.values(s))for(const r of n||[])r.id&&r.uuid&&t.set(r.id.toString(),r.uuid);for(const[n,r]of Object.entries(e))r.id&&t.set(r.id.toString(),n);return t}c(Lf,"buildIdToUuidLookup");function Df(s,e=[]){const t=Object.values(s).reduce((n,r)=>n+(r?.length??0),0)+e.length;q.info(`\u25CF Pushed workspace elements \xB7 ${t}`);for(const n of Object.keys(s)){const r=s[n];q.info(`\u2514\u2500\u2500 ${n}s \xB7 ${r?.length??0}`)}e.length>0&&q.info(`\u2514\u2500\u2500 connectors \xB7 ${e.length}`)}c(Df,"showStats");async function jf(s,e){const t=s[xe.DELETE].size;q.info(`\u2299 Push: conflicts detected \xB7 ${t}`),await Zr(e,(n,r)=>{Qe(n)&&s[xe.DELETE].has(r.uuid)&&q.info(`\u2514\u2500\u2500 ./membrane/${n} (deleted locally)`)})}c(jf,"showConflicts");async function Ff(s){q.error("\u25A0 Error"),q.error(`\u2514\u2500\u2500 ${s.message}`),q.error(` ${s.stack}`)}c(Ff,"showError");const ei=[{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=P.join(process.cwd(),".mcp.json"),e={mcpServers:{membrane:{command:"membrane",args:["mcp"],env:{AGENT_NAME:"Claude Code"}}}};let t={};if(A.existsSync(s))try{t=JSON.parse(A.readFileSync(s,"utf8"))}catch{t={}}const n={...t,mcpServers:{...t.mcpServers,...e.mcpServers}};return A.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=P.join(process.cwd(),".cursor"),e=P.join(s,"mcp.json");A.existsSync(s)||A.mkdirSync(s);const t={mcpServers:{membrane:{command:"membrane",args:["mcp"],env:{AGENT_NAME:"Cursor"}}}};let n={};if(A.existsSync(e))try{n=JSON.parse(A.readFileSync(e,"utf8"))}catch{n={}}const r={...n,mcpServers:{...n.mcpServers,...t.mcpServers}};return A.writeFileSync(e,JSON.stringify(r,null,2)),`MCP server configuration added to ${e}`},"addConfig")}];function qf({onExit:s,onComplete:e}){const[t,n]=H(0),[r,i]=H(!1),[o,a]=H(null),[l,u]=H(""),[d,f]=H("");tt((y,p)=>{if(l||d){(p.escape||y==="q"||p.return)&&e();return}if(r)p.return||y===" "?h(o):p.escape&&(i(!1),a(null));else if(p.escape)s();else if(p.upArrow||y==="k")n(Math.max(0,t-1));else if(p.downArrow||y==="j")n(Math.min(ei.length-1,t+1));else if(p.return||y===" "){const w=ei[t];a(w),i(!0)}});const h=c(y=>{try{const p=y.addConfig();u(p)}catch(p){f(`Failed to write configuration: ${p.message||p}`)}},"addMcpConfiguration"),m=Math.min(80,process.stdout.columns||80);return l?_(C,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:m,children:[g(C,{marginTop:-1,marginBottom:1,children:_(v,{bold:!0,children:["\u{1F517} Connect Agent \u2014 ",g(v,{color:"green",children:"Success"})]})}),_(C,{flexDirection:"column",paddingLeft:2,children:[g(v,{color:"green",children:l}),g(C,{marginTop:1,children:g(v,{color:"grey",children:"The agent will now be able to use Membrane's integration capabilities."})})]}),g(C,{marginTop:1,paddingLeft:2,children:g(v,{color:"white",children:"[esc/q/enter: exit]"})})]}):d?_(C,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:m,children:[g(C,{marginTop:-1,marginBottom:1,children:_(v,{bold:!0,children:["\u{1F517} Connect Agent \u2014 ",g(v,{color:"red",children:"Error"})]})}),g(C,{flexDirection:"column",paddingLeft:2,children:g(v,{color:"red",children:d})}),g(C,{marginTop:1,children:g(v,{color:"grey",children:"[esc/q/enter: exit]"})})]}):r&&o?_(C,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:m,children:[g(C,{marginTop:-1,marginBottom:1,children:_(v,{bold:!0,children:["\u{1F517} Connect Agent \u2014 ",g(v,{color:"cyan",children:"Confirmation"})]})}),_(C,{flexDirection:"column",paddingLeft:2,children:[_(v,{children:["Connect ",g(v,{bold:!0,children:o.name})," to Membrane via MCP?"]}),g(C,{marginTop:1,children:g(v,{color:"grey",children:"This will add an MCP server configuration that allows the agent to use Membrane's integration capabilities."})}),g(C,{marginTop:1,children:g(v,{color:"yellow",bold:!0,children:o.actionDescription})}),g(C,{marginTop:2,marginBottom:1,children:_(v,{children:[g(v,{color:"white",bold:!0,children:"[Enter] Confirm"})," ",g(v,{color:"gray",children:"[Esc] Cancel"})]})})]})]}):_(C,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:m,children:[g(C,{marginTop:-1,marginBottom:1,children:_(v,{bold:!0,children:["\u{1F517} Connect Agent \u2014 ",g(v,{color:"cyan",children:"Select Agent"})]})}),_(C,{flexDirection:"column",paddingLeft:2,children:[g(v,{color:"grey",children:"Choose an agent to connect to Membrane via MCP:"}),g(C,{marginTop:1,children:g(v,{color:"grey",children:"This will add an MCP server configuration that allows the agent to use Membrane's integration capabilities."})}),g(C,{marginTop:1,flexDirection:"column",children:ei.map((y,p)=>_(C,{children:[_(v,{color:t===p?"cyan":"white",children:[t===p?"\u25B6 ":" ",y.name]}),_(v,{color:"grey",children:[" \u2014 ",y.description]})]},y.id))})]}),g(C,{marginTop:1,children:g(v,{color:"grey",children:"[\u2191\u2193: select] [enter: choose] [esc: exit]"})})]})}c(qf,"AddMcpServerScreen");function Bf(){const[s,e]=H(null),[t,n]=H([]),[r,i]=H(null);return pt(()=>{const o=c(({status:l})=>{e(l),i(null)},"handleMcpStatusChanged"),a=c(({servers:l})=>{n(l),i(null)},"handleMcpServersChanged");return Ve.on(Q.McpStatusChanged,o),Ve.on(Q.McpServersChanged,a),()=>{Ve.off(Q.McpStatusChanged,o),Ve.off(Q.McpServersChanged,a)}},[]),{mcpStatus:s,allMcpServers:t,error:r,isRunning:s?.isRunning||!1,toolsCount:s?.toolsCount||0,totalRequests:s?.totalRequests||0,lastActivity:s?.lastActivity,processId:s?.processId,serverCount:t.length}}c(Bf,"useMcpStatus");function Kf(){const{error:s,serverCount:e,allMcpServers:t}=Bf(),n=Math.min(100,process.stdout.columns||100);return _(C,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:n,children:[g(C,{marginTop:-1,marginBottom:0,flexDirection:"column",children:_(v,{bold:!0,children:["\u{1F916} Connected AI Agents:"," ",s?g(v,{color:"red",children:"error reading status"}):e===0?g(v,{color:"yellow",children:"none"}):g(v,{color:"green",children:e})]})}),!s&&e===0&&g(C,{marginTop:1,children:_(v,{color:"grey",children:["Connect your AI agents to Membrane.",g(pl,{}),"It will give them tools and context to build integrations."]})}),t.length>0&&g(C,{flexDirection:"column",paddingLeft:2,marginTop:1,children:t.map((r,i)=>g(C,{children:_(v,{color:"grey",children:["#",i+1," ",r.agentName,": ",r.totalRequests," calls"]})},r.processId))}),g(C,{marginTop:1,children:g(v,{color:"grey",children:"[a: connect an agent]"})})]})}c(Kf,"Agent");const Ga=c(s=>{switch(s){case"error":return"red";case"success":return"green";case"warning":return"yellow";default:return}},"getLogColor");function Ya(s,e){return e<3?s.slice(0,Math.max(0,e)):s.length<=e?s:`${s.slice(0,e-3)}...`}c(Ya,"truncateText");function Uf({children:s}){const{state:e,logs:t}=ke();return!e||e===D.NOT_INITIALIZED?_(C,{gap:1,flexDirection:"row",children:[g(Il,{type:"dots"}),g(v,{children:"Initializing..."})]}):e===D.SETTING_UP?g(C,{gap:1,flexDirection:"row",children:g(v,{children:"No workspace selected. Please run `membrane init` to select a workspace."})}):e===D.ERROR?g(C,{flexDirection:"column",children:t.slice().map((n,r)=>g(v,{color:Ga(n.type),children:n.message},n.timestamp+r))}):s}c(Uf,"EnsureInitialized");function Wf(){const{stats:s}=ke(),e=Object.entries(s).filter(([t,n])=>n>0);return e.length===0?null:_(C,{flexDirection:"column",children:[g(C,{children:g(C,{width:12,children:g(v,{color:"grey",children:"Elements:"})})}),g(C,{flexDirection:"column",marginLeft:1,children:e.map(([t,n])=>_(C,{children:[g(C,{width:20,children:_(v,{children:[t,":"]})}),g(v,{color:"green",children:n})]},t))})]})}c(Wf,"ElementStats");const ti=5,Jf=6;function Hf(){const{logs:s}=ke(),[e,t]=H(0),n=Math.min(100,process.stdout.columns||100),r=ti,i=Math.max(0,s.length-r-e),o=s.length-e,a=s.slice(i,o),l=n-Jf,u=e<s.length-r,d=e>0;return tt((f,h)=>{if(s.length!==0)if(h.upArrow){const m=Math.max(0,s.length-r);t(y=>Math.min(m,y+1))}else h.downArrow?t(m=>Math.max(0,m-1)):(f==="G"||f==="g")&&t(0)}),_(C,{flexDirection:"column",paddingTop:1,children:[_(v,{color:"grey",children:["Recent Activity (",i+1,"-",o," of ",s.length,"):",s.length>ti&&g(v,{color:"grey",children:" [arrows: scroll] [g: end]"})]}),a.map((f,h)=>g(C,{marginLeft:1,children:g(v,{color:Ga(f.type),children:Ya(f.message,l)})},f.timestamp+h)),s.length>ti&&_(C,{marginLeft:1,flexDirection:"row",children:[u&&g(v,{color:"grey",children:"\u2191 "}),d&&g(v,{color:"grey",children:"\u2193 "})]})]})}c(Hf,"Logs");const ms=[{value:"sync",label:"Continue (overwrite/delete)",key:""},{value:"exit",label:"Cancel",key:""}];function Vf(){const{state:s,resolveConflicts:e,exit:t}=ke(),[n,r]=H(0),[i,o]=H(!1),[a,l]=H(!1);return tt((u,d)=>{if(!i){if(d.ctrl&&u.toLowerCase()==="r"){l(!a);return}d.upArrow?r(f=>f>0?f-1:ms.length-1):d.downArrow?r(f=>f<ms.length-1?f+1:0):u.toLowerCase()==="y"?r(0):u.toLowerCase()==="n"?r(1):(d.return||u===" ")&&(o(!0),ms[n].value==="sync"?e({watch:!0}):t())}}),pt(()=>{s!==D.CONFLICTS&&i&&o(!1)},[s,i]),_(C,{flexDirection:"column",paddingTop:1,children:[g(C,{children:g(C,{flexDirection:"row",gap:2,children:g(v,{bold:!0,color:"white",children:"Conflicts with remote"})})}),g(C,{children:g(v,{color:"grey",children:"The remote workspace has changes that aren't in your local workspace:"})}),g(C,{marginTop:1,marginLeft:2,children:g(Gf,{isExpanded:a})}),_(C,{marginTop:2,flexDirection:"row",gap:1,children:[g(v,{color:"white",bold:!0,children:"What would you like to do?"}),g(v,{color:"grey",children:"[up/down, enter]"})]}),g(C,{children:i?_(C,{flexDirection:"row",gap:1,children:[g(An,{type:"dots"}),g(v,{color:"blue",bold:!0,children:"Syncing with remote..."})]}):g(C,{flexDirection:"column",children:ms.map((u,d)=>g(C,{flexDirection:"column",children:_(C,{flexDirection:"row",gap:1,children:[g(v,{color:n===d?"cyan":"grey",children:n===d?"\u25B6":" "}),g(v,{color:n===d?"cyan":"grey",bold:n===d,children:u.label})]})},u.value))})})]})}c(Vf,"ResolveChangesUI");const zf={[Pe.UPDATE]:{incoming:{label:"Elements updated in remote",description:"(to be overwritten from remote)"},outgoing:{label:"Elements updated locally",description:"(to be pushed to remote)"}},[Pe.DELETE]:{incoming:{label:"Elements not existing in remote",description:"(to be deleted locally)"},outgoing:{label:"Elements deleted locally",description:"(to be deleted from remote)"}},[Pe.CREATE]:{incoming:{label:"Elements created in remote",description:"(to be created locally)"},outgoing:{label:"Elements created locally",description:"(to be created in remote)"}}};function Gf({isExpanded:s,showControls:e=!0}){const{conflicts:t}=ke(),n=5,r=hl(()=>{const i={};return t.forEach(o=>{const a=`${o.type}-${o.direction}`;i[a]||(i[a]=[]),i[a].push(o)}),i},[t]);return g(C,{flexDirection:"column",children:Object.entries(r).map(([i,o])=>{if(o.length===0)return null;const[a,l]=i.split("-"),u=zf[a][l];return _(C,{flexDirection:"column",children:[_(C,{flexDirection:"row",gap:1,children:[_(v,{color:"yellow",children:[u.label," (",o.length,")"]}),g(v,{color:"white",children:u.description})]}),(s?o:o.slice(0,n)).map(d=>g(C,{marginLeft:2,children:_(v,{color:"grey",children:["\u2022 ",d.element.id," (",d.element.relativePath,")"]})},d.element.id)),!s&&o.length>n&&g(C,{marginLeft:2,children:_(v,{color:"cyan",children:["... and ",o.length-n," more",e?" (press Ctrl+R to show all)":""]})}),s&&o.length>n&&e&&g(C,{marginLeft:2,children:g(v,{color:"cyan",children:"(press Ctrl+R to collapse)"})})]},i)})})}c(Gf,"Conflicts");function Yf(){const{config:s,state:e,logs:t,currentWorkspace:n,pull:r}=ke(),i=n?.name,o=i?Ya(i,30):s?.workspaceKey,a=Math.min(100,process.stdout.columns||100);return pt(()=>{r({watch:!0})},[]),_(C,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:a,children:[g(C,{marginTop:-1,marginBottom:1,children:_(C,{flexDirection:"row",gap:1,children:[g(v,{bold:!0,children:"\u{1F504} Workspace"}),_(v,{color:Zf(e),children:[" [",Xf(e),"] "]})]})}),_(C,{children:[g(C,{width:12,children:g(v,{color:"grey",children:"Local:"})}),g(v,{color:"grey",children:process.cwd()})]}),_(C,{children:[g(C,{width:12,children:g(v,{color:"grey",children:"Remote:"})}),s?.workspaceKey?_(v,{color:"grey",children:[o," [o: open in console] [w: change]"]}):_(v,{children:[g(v,{color:"yellow",children:"not selected"})," [w: select]"]})]}),e===D.CONFLICTS?g(Vf,{}):_(In,{children:[g(C,{paddingTop:1,children:g(Wf,{})}),t.length>0&&g(Hf,{})]})]})}c(Yf,"Workspace");function Xf(s){switch(s){case D.PULLING:return"pulling";case D.PUSHING:return"pushing";case D.CONFLICTS:return"conflicts";case D.SYNCED:return"synced";case D.ERROR:return"error";case D.WATCHING:return"tracking changes";case D.RESOLVING:return"resolving";case D.NOT_SYNCED:return"not synced";case D.INITIALIZED:return"initialized";case D.SETTING_UP:return"setup required";default:return"unknown"}}c(Xf,"getStatusDisplay");function Zf(s){switch(s){case D.PULLING:return"yellow";case D.PUSHING:return"yellow";case D.CONFLICTS:return"red";case D.SYNCED:return"green";case D.ERROR:return"red";case D.WATCHING:return"green";case D.RESOLVING:return"yellow";case D.NOT_SYNCED:return"grey";case D.SETTING_UP:return"yellow";default:return"grey"}}c(Zf,"getStatusColor");const Qf="https://console.integration.app/w";function eh(){const s=Qd(),e=Xs(!0),{exit:t,state:n}=ke(),[r,i]=H(null),o=r??(n===D.SETTING_UP?"setup":"main");tt(l=>{o==="main"&&(l==="w"&&i("workspace-selection"),l==="a"&&i("add-mcp-server"),l==="o"&&n===D.INITIALIZED&&a(),l==="s"&&i("setup"))});async function a(){try{const l=await Hi(s),u=`${Qf}/${l}`,d=process.platform==="darwin"?"open":process.platform==="win32"?"start":"xdg-open";$l(`${d} "${u}"`)}catch(l){console.error("Failed to open workspace:",l),t()}}return c(a,"handleOpenWorkspace"),pt(()=>(e.current=!0,()=>{e.current=!1}),[]),o==="workspace-selection"?g(Pa,{onExit:c(()=>i(null),"onExit")}):o==="add-mcp-server"?g(qf,{onExit:c(()=>i(null),"onExit"),onComplete:c(()=>i(null),"onComplete")}):o==="setup"?g(Ra,{onComplete:c(()=>i(null),"onComplete")},Date.now()):g(Uf,{children:_(C,{flexDirection:"column",children:[g(C,{flexGrow:1,children:g(Kf,{})}),g(Yf,{}),g(C,{paddingLeft:2,children:g(v,{color:"grey",children:"[s: (re-)setup]"})})]})})}c(eh,"Main");const th=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 Real-time agent mode is experimental and subject to changes. \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(`
|
|
156
|
-
`),"createExperimentalWarning$1");function
|
|
157
|
-
`)).action(async t=>{if(t.watch||(console.error("Error: The sync command requires the --watch flag"),console.error("Usage: membrane sync --watch"),process.exit(1)),t.rps!==void 0){const n=t.rps;!isNaN(n)&&n>0&&n<=1e3?
|
|
151
|
+
${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]),r=e.map(i=>{const o={};return n.forEach(a=>{o[a]=i[a]}),o});console.table(r,n)}static divider(){}}function pf(s){s.command("open").description("Open the workspace in the browser").addHelpText("after",["","Examples:"," membrane open # Open workspace in browser",""].join(`
|
|
152
|
+
`)).action(async()=>{try{B.header("Opening Workspace in Browser"),B.info("Loading configuration...");const e=$n();if(!e)throw new Error("No configuration found. Please set MEMBRANE_WORKSPACE_KEY and MEMBRANE_WORKSPACE_SECRET environment variables, or run `membrane init` first.");if(!e.workspaceKey||!e.workspaceSecret)throw new Error("Missing workspace credentials");B.info("Retrieving workspace ID...");const t=await zi(process.cwd()),n=`${e.consoleUri||Jl}/w/${t}`;B.info(`Opening ${n}...`);const{default:r}=await import("open");await r(n),B.success("Browser opened successfully")}catch(e){e instanceof Error&&(B.error(e.message),process.exit(1)),B.error("An unknown error occurred"),process.exit(1)}})}c(pf,"setupOpenCommand");async function Yr(s,e,t={}){const{jobId:n,accessKey:r}=await e(),i=`${n}:${r}`;b.debug(`[background-job] Started job ${n}`);const o=Date.now(),{pollIntervalMs:a=1e3,timeoutMs:l=3e5,maxRetries:u=3}=t;let d=0;for(;;){if(Date.now()-o>l)throw new Error(`Background job ${n} timed out after ${l}ms`);await new Promise(m=>setTimeout(m,a));let h;try{h=await s.get(`background-jobs/${i}`),d=0}catch(m){if(m instanceof al&&d<u){d++,b.debug(`[background-job] Job ${n} not found, retrying (${d}/${u})`);continue}throw m}if(h.status==="completed"){if(b.debug(`[background-job] Completed job ${n}`),!h.result)throw new Error(`Background job ${n} completed but returned no result`);return h.result}if(h.status==="failed"){const m=h.failedReason||"Unknown error";throw b.error(`[background-job] Failed job ${n}: ${m}`),h.stacktrace&&b.error(`Stacktrace: ${h.stacktrace.join(`
|
|
153
|
+
`)}`),new Error(`Background job ${n} failed: ${m}`)}b.debug(`[background-job] Polling job ${n} (status: ${h.status})`)}}c(Yr,"pollBackgroundJob");function mf(s,e){Xr(P.dirname(s)),A.writeFileSync(s,e)}c(mf,"writeFile");function gf(s){A.existsSync(s)&&A.rmSync(s)}c(gf,"deleteFile");function Fa(s){A.existsSync(s)&&A.rmSync(s,{recursive:!0,force:!0})}c(Fa,"deleteDir");function yf(s,e=!0){if(A.existsSync(s))try{const t=A.readFileSync(s,"utf8");return Se.load(t)||void 0}catch(t){if(!e)return;if(t instanceof Error){const n=P.relative(process.cwd(),s);throw new Error(`Failed to parse YAML file "${n}": ${t.message}`)}throw t}}c(yf,"readYaml");function Ba(s,e,t){try{Xr(P.dirname(s));const n=Se.dump(e,t);A.writeFileSync(s,n,"utf8")}catch(n){if(n instanceof Error){const r=P.relative(process.cwd(),s);throw new Error(`Failed to write YAML file "${r}": ${n.message}`)}throw n}return e}c(Ba,"writeYaml");function Xr(s){A.existsSync(s)||A.mkdirSync(s,{recursive:!0})}c(Xr,"ensureDirExists");function qa(s,e=!0){if(!A.existsSync(s)||!A.statSync(s).isDirectory())return;let t=A.readdirSync(s);t.length>0&&(t.forEach(n=>qa(P.join(s,n),!1)),t=A.readdirSync(s)),t.length===0&&!e&&A.rmdirSync(s)}c(qa,"cleanupEmptyFolders");function wf(s){const e=s.split(/[\\/]/).join("/");return e.endsWith("/")?e+"**":e}c(wf,"normalizePattern");async function Ka(s,e=[]){return new Promise(async(t,n)=>{const r=e.map(wf),i=Mi("zip",{zlib:{level:9}}),o=[];i.on("data",l=>o.push(l)),i.on("end",()=>t(Buffer.concat(o))),i.on("error",l=>n(l));const a=new Map;for(const l of s[x.Integration]||[])a.set(l.uuid,l.key);for(const[l,u]of Object.entries(s))for(const d of u){const f=d.key,h=a.get(d.integrationUuid),m=cl(l,f,h);if(r.length>0&&!r.some(p=>xl(m,p)))continue;const y=Se.dump(d);i.append(y,{name:m})}i.finalize()})}c(Ka,"createMembraneZip");async function Zr(s,e){const t=await Bi.loadAsync(s),n=[];for(const[r,i]of Object.entries(t.files)){if(i.dir)continue;const o=Qe(r);if(!o)continue;const a=await i.async("string"),l=Se.load(a);if(!l)continue;const u=await e(r,l,o);u!==void 0&&n.push(u)}return n}c(Zr,"iterateZipItems");async function bf(s){const e=await Bi.loadAsync(s),t={};for(const[n,r]of Object.entries(e.files)){if(r.dir)continue;const i=Qe(n);if(!i)continue;const o=await r.async("string"),a=Se.load(o);t[i.type]||(t[i.type]=[]),t[i.type].push(a)}return t}c(bf,"readMembraneZip");async function Ua(s=process.cwd()){const e=await Wa(pe(s)),t={};for(const{data:n,type:r}of e)t[r]||(t[r]=[]),t[r].push(n);return t}c(Ua,"readMembraneDir");async function Wa(s){const e=Ja(s),t=[];for(const n of e){if(n.isDirectory())continue;const r=Qe(n.path);if(!r)continue;const i=await n.readContent(),o=Se.load(i),a=P.join(s,n.path);t.push({filePath:a,data:o,type:r.type})}return t}c(Wa,"iterateMembraneFiles");function Ja(s,e){const t=[];if(e||(e=s),!A.existsSync(e)||e.startsWith(P.join(s,"connectors")))return t;const n=A.readdirSync(e,{withFileTypes:!0});for(const r of n){const i=P.join(e,r.name),o=P.relative(s,i);r.isDirectory()?t.push(...Ja(s,i)):r.isFile()&&Qe(o)&&t.push({path:o,isDirectory:c(()=>!1,"isDirectory"),readContent:c(async()=>A.readFileSync(i,"utf8"),"readContent")})}return t}c(Ja,"getMembraneFiles");function Ha(){const s={},e=P.join(pe(process.cwd()),"connectors");if(!A.existsSync(e))return s;const t=A.readdirSync(e);for(const n of t){const r=P.join(e,n);if(!A.statSync(r).isDirectory())continue;const i=P.join(r,`${n}.yml`),o=yf(i,!1);if(!o?.uuid)continue;const a=new Set,l=A.readdirSync(r);for(const u of l){if(u.endsWith(".yml"))continue;const d=P.join(r,u);A.statSync(d).isDirectory()&&a.add(u=="development"?"":u)}s[o.uuid]={key:n,id:o.id,versions:Array.from(a)}}return s}c(Ha,"readConnectorsDir");function ps(s,e){const t=P.join(pe(process.cwd()),"connectors",s);return e==""||e===Oi?P.join(t,"development"):e?P.join(t,e):t}c(ps,"getConnectorPath");const Va=300,za=6e4;async function Sf(){const s=await D.withClient(async t=>Yr(t,()=>t.get("export"),{pollIntervalMs:Va,timeoutMs:za}));if(!s)throw new Error("Failed to export workspace");const e=await Ht.get(s.downloadUrl,{responseType:"arraybuffer"});return Buffer.from(e.data)}c(Sf,"downloadWorkspaceExport");async function Ga(s,e={}){const t=new Li;t.append("file",s,{filename:"membrane.zip",contentType:"application/zip"});const n=await D.withClient(async i=>{const o=`import?dryRun=${e.dryRun??!1}&partial=${e.partial??!1}`,{jobId:a,accessKey:l}=await i.post(o,t,{headers:t.getHeaders()});return Yr(i,()=>Promise.resolve({jobId:a,accessKey:l}),{pollIntervalMs:1e3,timeoutMs:3e5})});if(!n)throw new Error("Failed to import workspace");const r={};for(const[i,o]of Object.entries(n))r[i]=new Set(o||[]);return r}c(Ga,"importWorkspace");async function Cf(s,e){const t=await D.withClient(async r=>Yr(r,()=>r.get(`connectors/${s}/export`,{version:e}),{pollIntervalMs:Va,timeoutMs:za}));if(!t)throw new Error("Failed to export connector version");const n=await Ht.get(t.downloadUrl,{responseType:"arraybuffer"});return Buffer.from(n.data)}c(Cf,"exportConnector");const Qr=5;function vf(s){s.command("pull").description("Pull workspace data from specified workspace").option("--force","Overwrite conflicts with remote data",!1).addHelpText("after",["","Examples:"," membrane pull # Pull from default workspace"," membrane pull --force # Overwrite conflicts with remote data",""].join(`
|
|
154
|
+
`)).action(async e=>{const t=Fi({text:"Pulling workspace",color:"white"}).start();try{const n=await kf(e,t);t.stop(),_f(n.workspaceExport,n.connectors)}catch(n){t.stop(),Af(n),process.exit(1)}})}c(vf,"setupPullCommand");async function kf(s,e){const t=await Ua(),n=await Ka(t),r=await Sf(),i=await bf(r),{comparison:o}=ll(t,i);o[Ne.DELETE].size>0&&!s.force&&(await If(o,n),B.error("Use --force to delete local elements"),process.exit(1));const l=await Wa(pe(process.cwd()));for(const{filePath:d,data:f}of l)o[Ne.DELETE].has(f.uuid)&&gf(d);return qa(pe(process.cwd())),await Zr(r,(d,f)=>{if(Qe(d)&&(o[Ne.CREATE].has(f.uuid)||o[Ne.UPDATE].has(f.uuid))){const m=K.join(pe(process.cwd()),d);Ba(m,f)}}),{connectors:await Tf(i[x.Integration],e),workspaceExport:i}}c(kf,"pullWorkspace");async function Tf(s,e){e.text="Pulling connectors";const t=new Map,{id:n}=await D.withClient(l=>l.get("org-workspace-id")),{items:r=[]}=await D.withClient(l=>l.get(`/connectors?workspaceId=${n}`));for(const l of r){const u=l.uuid??l.id;!l.isPublic&&u&&t.set(u,new Set([""]))}for(const l of s??[]){const{connectorUuid:u,connectorVersion:d}=l;u&&(t.has(u)||t.set(u,new Set),t.get(u).add(d??""))}const i=Ha();for(const[l,{key:u,versions:d}]of Object.entries(i)){if(!t.has(l)){const h=ps(u);Fa(h);continue}const f=t.get(l);for(const h of d)if(!f.has(h)){const m=ps(u,h);Fa(m)}}const o=Array.from(t.entries()),a=o.length;for(let l=0;l<a;l+=Qr){const u=o.slice(l,l+Qr),d=Math.min(l+Qr,a);e.text=`Pulling connectors \xB7 ${d} out of ${a}`,await Promise.all(u.map(([f,h])=>Ef(f,Array.from(h))))}return Array.from(t.keys())}c(Tf,"pullConnectors");async function Ef(s,e){const t=await D.withClient(i=>i.get(`connectors/${s}`),!1);if(!t||!t.key)return;const n=ps(t.key),r=K.join(n,`${t.key}.yml`);Ba(r,t);for(const i of e){const o=await Cf(s,i),a=ps(t.key,i);if(mf(K.join(a,"src.zip"),o),!i||i===Oi){const l=K.join(a,"src");Xr(l),await(await Di.Open.buffer(o)).extract({path:l})}}}c(Ef,"pullConnector");function _f(s,e=[]){const t=Object.values(s).reduce((n,r)=>n+(r?.length??0),0)+e.length;B.info(`\u25CF Pulled workspace elements \xB7 ${t}`);for(const n of Object.keys(s).sort()){const r=s[n];B.info(`\u2514\u2500\u2500 ${n}s \xB7 ${r?.length??0}`)}e.length>0&&B.info(`\u2514\u2500\u2500 connectors \xB7 ${e.length}`)}c(_f,"showStats$1");async function If(s,e){const t=s[Ne.DELETE].size;B.info(`\u2299 Pull: conflicts detected \xB7 ${t}`),await Zr(e,(n,r)=>{Qe(n)&&s[Ne.DELETE].has(r.uuid)&&B.info(`\u2514\u2500\u2500 ./membrane/${n} (deleted in remote)`)})}c(If,"showConflicts$1");async function Af(s){B.error("\u25A0 Error"),B.error(`\u2514\u2500\u2500 ${s.message}`),B.error(` ${s.stack}`)}c(Af,"showError$1");const se=[];for(let s=0;s<256;++s)se.push((s+256).toString(16).slice(1));function Of(s,e=0){return(se[s[e+0]]+se[s[e+1]]+se[s[e+2]]+se[s[e+3]]+"-"+se[s[e+4]]+se[s[e+5]]+"-"+se[s[e+6]]+se[s[e+7]]+"-"+se[s[e+8]]+se[s[e+9]]+"-"+se[s[e+10]]+se[s[e+11]]+se[s[e+12]]+se[s[e+13]]+se[s[e+14]]+se[s[e+15]]).toLowerCase()}c(Of,"unsafeStringify");let ei;const $f=new Uint8Array(16);function xf(){if(!ei){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");ei=crypto.getRandomValues.bind(crypto)}return ei($f)}c(xf,"rng");const Nf=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto);var Ya={randomUUID:Nf};function Pf(s,e,t){if(Ya.randomUUID&&!s)return Ya.randomUUID();s=s||{};const n=s.random??s.rng?.()??xf();if(n.length<16)throw new Error("Random bytes length must be >= 16");return n[6]=n[6]&15|64,n[8]=n[8]&63|128,Of(n)}c(Pf,"v4");function Rf(s){s.command("push").description("Push workspace data to specified workspace").argument("[files...]","Files, directories, or glob patterns to push").option("--force","Overwrite conflicts with local data",!1).addHelpText("after",["","Examples:"," membrane push # Push all workspace elements"," membrane push data-sources/ # Push all data-sources"," membrane push actions/my-action/spec.yaml # Push specific action"," membrane push flows/*-test/spec.yaml # Push flows matching pattern"," membrane push --force # Overwrite conflicts with local data",""].join(`
|
|
155
|
+
`)).action(async(e,t)=>{const n=Fi({text:"Pushing workspace",color:"white"}).start();try{await Mf(e,t,n)}catch(r){n.stop(),qf(r),process.exit(1)}})}c(Rf,"setupPushCommand");async function Mf(s,e,t){const n=s.length>0,r=await Ua(),i=Ha(),o=Lf(r,i),a=await Ka(o,n?s:void 0);t.text="Comparing workspace";const l=await Ga(a,{dryRun:!0,partial:n});l[Ne.DELETE].size>0&&!e.force&&(t.stop(),await Bf(l,a),B.error("Use --force to delete remote elements"),process.exit(1)),t.text="Pushing connectors";const{pushedConnectors:d=[]}=await Ea();t.text="Pushing workspace",await Ga(a,{partial:n}),t.stop(),Ff(o,d),process.exit(0)}c(Mf,"pushWorkspace");function Lf(s,e){const t=Df(s),n=jf(t,e),r={};for(const[i,o]of Object.entries(t)){const a=i,l=xe[a]?.parentFieldKey||"parentId";r[a]=(o||[]).map(u=>{const d={...u};if(d.integrationId&&!d.integrationUuid&&(d.integrationUuid=n.get(d.integrationId.toString())||d.integrationId,delete d.integrationId),d.connectorId){if(!d.connectorUuid){const f=n.get(d.connectorId.toString());f&&(d.connectorUuid=f)}delete d.connectorId}if(d[l]){const f=d[l].toString();d.parentUuid=n.get(f)||f}return a===x.Package&&d.elements&&(d.elements=d.elements.map(f=>{if(f.id&&!f.uuid){const h=n.get(f.id.toString());if(h)return{uuid:h,type:f.type}}return f})),delete d.id,d})}return r}c(Lf,"resolveLegacyIdReferences");function Df(s){const e={};for(const[t,n]of Object.entries(s))e[t]=(n||[]).map(r=>r.uuid?r:{...r,uuid:Pf()});return e}c(Df,"generateMissingUuids");function jf(s,e){const t=new Map;for(const n of Object.values(s))for(const r of n||[])r.id&&r.uuid&&t.set(r.id.toString(),r.uuid);for(const[n,r]of Object.entries(e))r.id&&t.set(r.id.toString(),n);return t}c(jf,"buildIdToUuidLookup");function Ff(s,e=[]){const t=Object.values(s).reduce((n,r)=>n+(r?.length??0),0)+e.length;B.info(`\u25CF Pushed workspace elements \xB7 ${t}`);for(const n of Object.keys(s).sort()){const r=s[n];B.info(`\u2514\u2500\u2500 ${n}s \xB7 ${r?.length??0}`)}e.length>0&&B.info(`\u2514\u2500\u2500 connectors \xB7 ${e.length}`)}c(Ff,"showStats");async function Bf(s,e){const t=s[Ne.DELETE].size;B.info(`\u2299 Push: conflicts detected \xB7 ${t}`),await Zr(e,(n,r)=>{Qe(n)&&s[Ne.DELETE].has(r.uuid)&&B.info(`\u2514\u2500\u2500 ./membrane/${n} (deleted locally)`)})}c(Bf,"showConflicts");async function qf(s){B.error("\u25A0 Error"),B.error(`\u2514\u2500\u2500 ${s.message}`),B.error(` ${s.stack}`)}c(qf,"showError");const ti=[{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=P.join(process.cwd(),".mcp.json"),e={mcpServers:{membrane:{command:"membrane",args:["mcp"],env:{AGENT_NAME:"Claude Code"}}}};let t={};if(A.existsSync(s))try{t=JSON.parse(A.readFileSync(s,"utf8"))}catch{t={}}const n={...t,mcpServers:{...t.mcpServers,...e.mcpServers}};return A.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=P.join(process.cwd(),".cursor"),e=P.join(s,"mcp.json");A.existsSync(s)||A.mkdirSync(s);const t={mcpServers:{membrane:{command:"membrane",args:["mcp"],env:{AGENT_NAME:"Cursor"}}}};let n={};if(A.existsSync(e))try{n=JSON.parse(A.readFileSync(e,"utf8"))}catch{n={}}const r={...n,mcpServers:{...n.mcpServers,...t.mcpServers}};return A.writeFileSync(e,JSON.stringify(r,null,2)),`MCP server configuration added to ${e}`},"addConfig")}];function Kf({onExit:s,onComplete:e}){const[t,n]=H(0),[r,i]=H(!1),[o,a]=H(null),[l,u]=H(""),[d,f]=H("");tt((y,p)=>{if(l||d){(p.escape||y==="q"||p.return)&&e();return}if(r)p.return||y===" "?h(o):p.escape&&(i(!1),a(null));else if(p.escape)s();else if(p.upArrow||y==="k")n(Math.max(0,t-1));else if(p.downArrow||y==="j")n(Math.min(ti.length-1,t+1));else if(p.return||y===" "){const w=ti[t];a(w),i(!0)}});const h=c(y=>{try{const p=y.addConfig();u(p)}catch(p){f(`Failed to write configuration: ${p.message||p}`)}},"addMcpConfiguration"),m=Math.min(80,process.stdout.columns||80);return l?_(C,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:m,children:[g(C,{marginTop:-1,marginBottom:1,children:_(v,{bold:!0,children:["\u{1F517} Connect Agent \u2014 ",g(v,{color:"green",children:"Success"})]})}),_(C,{flexDirection:"column",paddingLeft:2,children:[g(v,{color:"green",children:l}),g(C,{marginTop:1,children:g(v,{color:"grey",children:"The agent will now be able to use Membrane's integration capabilities."})})]}),g(C,{marginTop:1,paddingLeft:2,children:g(v,{color:"white",children:"[esc/q/enter: exit]"})})]}):d?_(C,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:m,children:[g(C,{marginTop:-1,marginBottom:1,children:_(v,{bold:!0,children:["\u{1F517} Connect Agent \u2014 ",g(v,{color:"red",children:"Error"})]})}),g(C,{flexDirection:"column",paddingLeft:2,children:g(v,{color:"red",children:d})}),g(C,{marginTop:1,children:g(v,{color:"grey",children:"[esc/q/enter: exit]"})})]}):r&&o?_(C,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:m,children:[g(C,{marginTop:-1,marginBottom:1,children:_(v,{bold:!0,children:["\u{1F517} Connect Agent \u2014 ",g(v,{color:"cyan",children:"Confirmation"})]})}),_(C,{flexDirection:"column",paddingLeft:2,children:[_(v,{children:["Connect ",g(v,{bold:!0,children:o.name})," to Membrane via MCP?"]}),g(C,{marginTop:1,children:g(v,{color:"grey",children:"This will add an MCP server configuration that allows the agent to use Membrane's integration capabilities."})}),g(C,{marginTop:1,children:g(v,{color:"yellow",bold:!0,children:o.actionDescription})}),g(C,{marginTop:2,marginBottom:1,children:_(v,{children:[g(v,{color:"white",bold:!0,children:"[Enter] Confirm"})," ",g(v,{color:"gray",children:"[Esc] Cancel"})]})})]})]}):_(C,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:m,children:[g(C,{marginTop:-1,marginBottom:1,children:_(v,{bold:!0,children:["\u{1F517} Connect Agent \u2014 ",g(v,{color:"cyan",children:"Select Agent"})]})}),_(C,{flexDirection:"column",paddingLeft:2,children:[g(v,{color:"grey",children:"Choose an agent to connect to Membrane via MCP:"}),g(C,{marginTop:1,children:g(v,{color:"grey",children:"This will add an MCP server configuration that allows the agent to use Membrane's integration capabilities."})}),g(C,{marginTop:1,flexDirection:"column",children:ti.map((y,p)=>_(C,{children:[_(v,{color:t===p?"cyan":"white",children:[t===p?"\u25B6 ":" ",y.name]}),_(v,{color:"grey",children:[" \u2014 ",y.description]})]},y.id))})]}),g(C,{marginTop:1,children:g(v,{color:"grey",children:"[\u2191\u2193: select] [enter: choose] [esc: exit]"})})]})}c(Kf,"AddMcpServerScreen");function Uf(){const[s,e]=H(null),[t,n]=H([]),[r,i]=H(null);return pt(()=>{const o=c(({status:l})=>{e(l),i(null)},"handleMcpStatusChanged"),a=c(({servers:l})=>{n(l),i(null)},"handleMcpServersChanged");return Ve.on(Q.McpStatusChanged,o),Ve.on(Q.McpServersChanged,a),()=>{Ve.off(Q.McpStatusChanged,o),Ve.off(Q.McpServersChanged,a)}},[]),{mcpStatus:s,allMcpServers:t,error:r,isRunning:s?.isRunning||!1,toolsCount:s?.toolsCount||0,totalRequests:s?.totalRequests||0,lastActivity:s?.lastActivity,processId:s?.processId,serverCount:t.length}}c(Uf,"useMcpStatus");function Wf(){const{error:s,serverCount:e,allMcpServers:t}=Uf(),n=Math.min(100,process.stdout.columns||100);return _(C,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:n,children:[g(C,{marginTop:-1,marginBottom:0,flexDirection:"column",children:_(v,{bold:!0,children:["\u{1F916} Connected AI Agents:"," ",s?g(v,{color:"red",children:"error reading status"}):e===0?g(v,{color:"yellow",children:"none"}):g(v,{color:"green",children:e})]})}),!s&&e===0&&g(C,{marginTop:1,children:_(v,{color:"grey",children:["Connect your AI agents to Membrane.",g(gl,{}),"It will give them tools and context to build integrations."]})}),t.length>0&&g(C,{flexDirection:"column",paddingLeft:2,marginTop:1,children:t.map((r,i)=>g(C,{children:_(v,{color:"grey",children:["#",i+1," ",r.agentName,": ",r.totalRequests," calls"]})},r.processId))}),g(C,{marginTop:1,children:g(v,{color:"grey",children:"[a: connect an agent]"})})]})}c(Wf,"Agent");const Xa=c(s=>{switch(s){case"error":return"red";case"success":return"green";case"warning":return"yellow";default:return}},"getLogColor");function Za(s,e){return e<3?s.slice(0,Math.max(0,e)):s.length<=e?s:`${s.slice(0,e-3)}...`}c(Za,"truncateText");function Jf({children:s}){const{state:e,logs:t}=ke();return!e||e===j.NOT_INITIALIZED?_(C,{gap:1,flexDirection:"row",children:[g(Ol,{type:"dots"}),g(v,{children:"Initializing..."})]}):e===j.SETTING_UP?g(C,{gap:1,flexDirection:"row",children:g(v,{children:"No workspace selected. Please run `membrane init` to select a workspace."})}):e===j.ERROR?g(C,{flexDirection:"column",children:t.slice().map((n,r)=>g(v,{color:Xa(n.type),children:n.message},n.timestamp+r))}):s}c(Jf,"EnsureInitialized");function Hf(){const{stats:s}=ke(),e=Object.entries(s).filter(([t,n])=>n>0);return e.length===0?null:_(C,{flexDirection:"column",children:[g(C,{children:g(C,{width:12,children:g(v,{color:"grey",children:"Elements:"})})}),g(C,{flexDirection:"column",marginLeft:1,children:e.map(([t,n])=>_(C,{children:[g(C,{width:20,children:_(v,{children:[t,":"]})}),g(v,{color:"green",children:n})]},t))})]})}c(Hf,"ElementStats");const ni=5,Vf=6;function zf(){const{logs:s}=ke(),[e,t]=H(0),n=Math.min(100,process.stdout.columns||100),r=ni,i=Math.max(0,s.length-r-e),o=s.length-e,a=s.slice(i,o),l=n-Vf,u=e<s.length-r,d=e>0;return tt((f,h)=>{if(s.length!==0)if(h.upArrow){const m=Math.max(0,s.length-r);t(y=>Math.min(m,y+1))}else h.downArrow?t(m=>Math.max(0,m-1)):(f==="G"||f==="g")&&t(0)}),_(C,{flexDirection:"column",paddingTop:1,children:[_(v,{color:"grey",children:["Recent Activity (",i+1,"-",o," of ",s.length,"):",s.length>ni&&g(v,{color:"grey",children:" [arrows: scroll] [g: end]"})]}),a.map((f,h)=>g(C,{marginLeft:1,children:g(v,{color:Xa(f.type),children:Za(f.message,l)})},f.timestamp+h)),s.length>ni&&_(C,{marginLeft:1,flexDirection:"row",children:[u&&g(v,{color:"grey",children:"\u2191 "}),d&&g(v,{color:"grey",children:"\u2193 "})]})]})}c(zf,"Logs");const ms=[{value:"sync",label:"Continue (overwrite/delete)",key:""},{value:"exit",label:"Cancel",key:""}];function Gf(){const{state:s,resolveConflicts:e,exit:t}=ke(),[n,r]=H(0),[i,o]=H(!1),[a,l]=H(!1);return tt((u,d)=>{if(!i){if(d.ctrl&&u.toLowerCase()==="r"){l(!a);return}d.upArrow?r(f=>f>0?f-1:ms.length-1):d.downArrow?r(f=>f<ms.length-1?f+1:0):u.toLowerCase()==="y"?r(0):u.toLowerCase()==="n"?r(1):(d.return||u===" ")&&(o(!0),ms[n].value==="sync"?e({watch:!0}):t())}}),pt(()=>{s!==j.CONFLICTS&&i&&o(!1)},[s,i]),_(C,{flexDirection:"column",paddingTop:1,children:[g(C,{children:g(C,{flexDirection:"row",gap:2,children:g(v,{bold:!0,color:"white",children:"Conflicts with remote"})})}),g(C,{children:g(v,{color:"grey",children:"The remote workspace has changes that aren't in your local workspace:"})}),g(C,{marginTop:1,marginLeft:2,children:g(Xf,{isExpanded:a})}),_(C,{marginTop:2,flexDirection:"row",gap:1,children:[g(v,{color:"white",bold:!0,children:"What would you like to do?"}),g(v,{color:"grey",children:"[up/down, enter]"})]}),g(C,{children:i?_(C,{flexDirection:"row",gap:1,children:[g(An,{type:"dots"}),g(v,{color:"blue",bold:!0,children:"Syncing with remote..."})]}):g(C,{flexDirection:"column",children:ms.map((u,d)=>g(C,{flexDirection:"column",children:_(C,{flexDirection:"row",gap:1,children:[g(v,{color:n===d?"cyan":"grey",children:n===d?"\u25B6":" "}),g(v,{color:n===d?"cyan":"grey",bold:n===d,children:u.label})]})},u.value))})})]})}c(Gf,"ResolveChangesUI");const Yf={[Pe.UPDATE]:{incoming:{label:"Elements updated in remote",description:"(to be overwritten from remote)"},outgoing:{label:"Elements updated locally",description:"(to be pushed to remote)"}},[Pe.DELETE]:{incoming:{label:"Elements not existing in remote",description:"(to be deleted locally)"},outgoing:{label:"Elements deleted locally",description:"(to be deleted from remote)"}},[Pe.CREATE]:{incoming:{label:"Elements created in remote",description:"(to be created locally)"},outgoing:{label:"Elements created locally",description:"(to be created in remote)"}}};function Xf({isExpanded:s,showControls:e=!0}){const{conflicts:t}=ke(),n=5,r=ml(()=>{const i={};return t.forEach(o=>{const a=`${o.type}-${o.direction}`;i[a]||(i[a]=[]),i[a].push(o)}),i},[t]);return g(C,{flexDirection:"column",children:Object.entries(r).map(([i,o])=>{if(o.length===0)return null;const[a,l]=i.split("-"),u=Yf[a][l];return _(C,{flexDirection:"column",children:[_(C,{flexDirection:"row",gap:1,children:[_(v,{color:"yellow",children:[u.label," (",o.length,")"]}),g(v,{color:"white",children:u.description})]}),(s?o:o.slice(0,n)).map(d=>g(C,{marginLeft:2,children:_(v,{color:"grey",children:["\u2022 ",d.element.id," (",d.element.relativePath,")"]})},d.element.id)),!s&&o.length>n&&g(C,{marginLeft:2,children:_(v,{color:"cyan",children:["... and ",o.length-n," more",e?" (press Ctrl+R to show all)":""]})}),s&&o.length>n&&e&&g(C,{marginLeft:2,children:g(v,{color:"cyan",children:"(press Ctrl+R to collapse)"})})]},i)})})}c(Xf,"Conflicts");function Zf(){const{config:s,state:e,logs:t,currentWorkspace:n,pull:r}=ke(),i=n?.name,o=i?Za(i,30):s?.workspaceKey,a=Math.min(100,process.stdout.columns||100);return pt(()=>{r({watch:!0})},[]),_(C,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:a,children:[g(C,{marginTop:-1,marginBottom:1,children:_(C,{flexDirection:"row",gap:1,children:[g(v,{bold:!0,children:"\u{1F504} Workspace"}),_(v,{color:eh(e),children:[" [",Qf(e),"] "]})]})}),_(C,{children:[g(C,{width:12,children:g(v,{color:"grey",children:"Local:"})}),g(v,{color:"grey",children:process.cwd()})]}),_(C,{children:[g(C,{width:12,children:g(v,{color:"grey",children:"Remote:"})}),s?.workspaceKey?_(v,{color:"grey",children:[o," [o: open in console] [w: change]"]}):_(v,{children:[g(v,{color:"yellow",children:"not selected"})," [w: select]"]})]}),e===j.CONFLICTS?g(Gf,{}):_(In,{children:[g(C,{paddingTop:1,children:g(Hf,{})}),t.length>0&&g(zf,{})]})]})}c(Zf,"Workspace");function Qf(s){switch(s){case j.PULLING:return"pulling";case j.PUSHING:return"pushing";case j.CONFLICTS:return"conflicts";case j.SYNCED:return"synced";case j.ERROR:return"error";case j.WATCHING:return"tracking changes";case j.RESOLVING:return"resolving";case j.NOT_SYNCED:return"not synced";case j.INITIALIZED:return"initialized";case j.SETTING_UP:return"setup required";default:return"unknown"}}c(Qf,"getStatusDisplay");function eh(s){switch(s){case j.PULLING:return"yellow";case j.PUSHING:return"yellow";case j.CONFLICTS:return"red";case j.SYNCED:return"green";case j.ERROR:return"red";case j.WATCHING:return"green";case j.RESOLVING:return"yellow";case j.NOT_SYNCED:return"grey";case j.SETTING_UP:return"yellow";default:return"grey"}}c(eh,"getStatusColor");const th="https://console.integration.app/w";function nh(){const s=tf(),e=Xs(!0),{exit:t,state:n}=ke(),[r,i]=H(null),o=r??(n===j.SETTING_UP?"setup":"main");tt(l=>{o==="main"&&(l==="w"&&i("workspace-selection"),l==="a"&&i("add-mcp-server"),l==="o"&&n===j.INITIALIZED&&a(),l==="s"&&i("setup"))});async function a(){try{const l=await zi(s),u=`${th}/${l}`,d=process.platform==="darwin"?"open":process.platform==="win32"?"start":"xdg-open";Nl(`${d} "${u}"`)}catch(l){console.error("Failed to open workspace:",l),t()}}return c(a,"handleOpenWorkspace"),pt(()=>(e.current=!0,()=>{e.current=!1}),[]),o==="workspace-selection"?g(Ma,{onExit:c(()=>i(null),"onExit")}):o==="add-mcp-server"?g(Kf,{onExit:c(()=>i(null),"onExit"),onComplete:c(()=>i(null),"onComplete")}):o==="setup"?g(La,{onComplete:c(()=>i(null),"onComplete")},Date.now()):g(Jf,{children:_(C,{flexDirection:"column",children:[g(C,{flexGrow:1,children:g(Wf,{})}),g(Zf,{}),g(C,{paddingLeft:2,children:g(v,{color:"grey",children:"[s: (re-)setup]"})})]})})}c(nh,"Main");const sh=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 Real-time agent mode is experimental and subject to changes. \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(`
|
|
156
|
+
`),"createExperimentalWarning$1");function rh(s,e){s.command("sync").description("\u26A0\uFE0F EXPERIMENTAL: Sync workspace data in real-time - This feature is experimental and subject to changes. Use in production environments is not recommended.").option("--watch","Watch for changes and sync automatically",!1).option("--rps <number>","Maximum requests per second (default: 80)",t=>parseInt(t,10)).addHelpText("after",["","Examples:"," membrane sync --watch # Start real-time sync with watch mode"," membrane sync --watch --rps 5 # Limit to 5 requests per second",""].join(`
|
|
157
|
+
`)).action(async t=>{if(t.watch||(console.error("Error: The sync command requires the --watch flag"),console.error("Usage: membrane sync --watch"),process.exit(1)),t.rps!==void 0){const n=t.rps;!isNaN(n)&&n>0&&n<=1e3?D.init({maxRequestsPerSecond:n}):(b.error(`Invalid RPS value: ${n}. Must be between 1 and 1000.`),process.exit(1))}console.warn(sh()),Zs(et.createElement(zr,{cwd:process.cwd(),membraneCLIService:e,children:et.createElement(nh)}))})}c(rh,"setupSyncCommand");class ih{static{c(this,"BaseRunner")}constructor(e={}){if(this.options=e,this.fsPaths=ar(),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}function L(s,e,t,n,r){if(typeof e=="function"?s!==e||!0:!e.has(s))throw new TypeError("Cannot write private member to an object whose class did not declare it");return e.set(s,t),t}c(L,"__classPrivateFieldSet");function S(s,e,t,n){if(t==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof e=="function"?s!==e||!n:!e.has(s))throw new TypeError("Cannot read private member from an object whose class did not declare it");return t==="m"?n:t==="a"?n.call(s):n?n.value:e.get(s)}c(S,"__classPrivateFieldGet");let Qa=c(function(){const{crypto:s}=globalThis;if(s?.randomUUID)return Qa=s.randomUUID.bind(s),s.randomUUID();const e=new Uint8Array(1),t=s?()=>s.getRandomValues(e)[0]:()=>Math.random()*255&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,n=>(+n^t()&15>>+n/4).toString(16))},"uuid4");function on(s){return typeof s=="object"&&s!==null&&("name"in s&&s.name==="AbortError"||"message"in s&&String(s.message).includes("FetchRequestCanceledException"))}c(on,"isAbortError");const si=c(s=>{if(s instanceof Error)return s;if(typeof s=="object"&&s!==null){try{if(Object.prototype.toString.call(s)==="[object Error]"){const e=new Error(s.message,s.cause?{cause:s.cause}:{});return s.stack&&(e.stack=s.stack),s.cause&&!e.cause&&(e.cause=s.cause),s.name&&(e.name=s.name),e}}catch{}try{return new Error(JSON.stringify(s))}catch{}}return new Error(s)},"castToError");class q extends Error{static{c(this,"AnthropicError")}}class ie extends q{static{c(this,"APIError")}constructor(e,t,n,r){super(`${ie.makeMessage(e,t,n)}`),this.status=e,this.headers=r,this.requestID=r?.get("request-id"),this.error=t}static makeMessage(e,t,n){const r=t?.message?typeof t.message=="string"?t.message:JSON.stringify(t.message):t?JSON.stringify(t):n;return e&&r?`${e} ${r}`:e?`${e} status code (no body)`:r||"(no status code or body)"}static generate(e,t,n,r){if(!e||!r)return new gs({message:n,cause:si(t)});const i=t;return e===400?new tc(e,i,n,r):e===401?new nc(e,i,n,r):e===403?new sc(e,i,n,r):e===404?new rc(e,i,n,r):e===409?new ic(e,i,n,r):e===422?new oc(e,i,n,r):e===429?new ac(e,i,n,r):e>=500?new cc(e,i,n,r):new ie(e,i,n,r)}}class Te extends ie{static{c(this,"APIUserAbortError")}constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}}class gs extends ie{static{c(this,"APIConnectionError")}constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),t&&(this.cause=t)}}class ec extends gs{static{c(this,"APIConnectionTimeoutError")}constructor({message:e}={}){super({message:e??"Request timed out."})}}class tc extends ie{static{c(this,"BadRequestError")}}class nc extends ie{static{c(this,"AuthenticationError")}}class sc extends ie{static{c(this,"PermissionDeniedError")}}class rc extends ie{static{c(this,"NotFoundError")}}class ic extends ie{static{c(this,"ConflictError")}}class oc extends ie{static{c(this,"UnprocessableEntityError")}}class ac extends ie{static{c(this,"RateLimitError")}}class cc extends ie{static{c(this,"InternalServerError")}}const oh=/^[a-z][a-z0-9+.-]*:/i,ah=c(s=>oh.test(s),"isAbsoluteURL");let ri=c(s=>(ri=Array.isArray,ri(s)),"isArray"),lc=ri;function uc(s){return typeof s!="object"?{}:s??{}}c(uc,"maybeObj");function ch(s){if(!s)return!0;for(const e in s)return!1;return!0}c(ch,"isEmptyObj");function lh(s,e){return Object.prototype.hasOwnProperty.call(s,e)}c(lh,"hasOwn");const uh=c((s,e)=>{if(typeof e!="number"||!Number.isInteger(e))throw new q(`${s} must be an integer`);if(e<0)throw new q(`${s} must be a positive integer`);return e},"validatePositiveInteger"),dc=c(s=>{try{return JSON.parse(s)}catch{return}},"safeJSON"),dh=c(s=>new Promise(e=>setTimeout(e,s)),"sleep"),Dt="0.62.0",fh=c(()=>typeof window<"u"&&typeof window.document<"u"&&typeof navigator<"u","isRunningInBrowser");function hh(){return typeof Deno<"u"&&Deno.build!=null?"deno":typeof EdgeRuntime<"u"?"edge":Object.prototype.toString.call(typeof globalThis.process<"u"?globalThis.process:0)==="[object process]"?"node":"unknown"}c(hh,"getDetectedPlatform");const ph=c(()=>{const s=hh();if(s==="deno")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":Dt,"X-Stainless-OS":hc(Deno.build.os),"X-Stainless-Arch":fc(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":typeof Deno.version=="string"?Deno.version:Deno.version?.deno??"unknown"};if(typeof EdgeRuntime<"u")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":Dt,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if(s==="node")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":Dt,"X-Stainless-OS":hc(globalThis.process.platform??"unknown"),"X-Stainless-Arch":fc(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};const e=mh();return e?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":Dt,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${e.browser}`,"X-Stainless-Runtime-Version":e.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":Dt,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}},"getPlatformProperties");function mh(){if(typeof navigator>"u"||!navigator)return null;const s=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(const{key:e,pattern:t}of s){const n=t.exec(navigator.userAgent);if(n){const r=n[1]||0,i=n[2]||0,o=n[3]||0;return{browser:e,version:`${r}.${i}.${o}`}}}return null}c(mh,"getBrowserInfo");const fc=c(s=>s==="x32"?"x32":s==="x86_64"||s==="x64"?"x64":s==="arm"?"arm":s==="aarch64"||s==="arm64"?"arm64":s?`other:${s}`:"unknown","normalizeArch"),hc=c(s=>(s=s.toLowerCase(),s.includes("ios")?"iOS":s==="android"?"Android":s==="darwin"?"MacOS":s==="win32"?"Windows":s==="freebsd"?"FreeBSD":s==="openbsd"?"OpenBSD":s==="linux"?"Linux":s?`Other:${s}`:"Unknown"),"normalizePlatform");let pc;const gh=c(()=>pc??(pc=ph()),"getPlatformHeaders");function yh(){if(typeof fetch<"u")return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new Anthropic({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}c(yh,"getDefaultFetch");function mc(...s){const e=globalThis.ReadableStream;if(typeof e>"u")throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new e(...s)}c(mc,"makeReadableStream");function gc(s){let e=Symbol.asyncIterator in s?s[Symbol.asyncIterator]():s[Symbol.iterator]();return mc({start(){},async pull(t){const{done:n,value:r}=await e.next();n?t.close():t.enqueue(r)},async cancel(){await e.return?.()}})}c(gc,"ReadableStreamFrom");function ii(s){if(s[Symbol.asyncIterator])return s;const e=s.getReader();return{async next(){try{const t=await e.read();return t?.done&&e.releaseLock(),t}catch(t){throw e.releaseLock(),t}},async return(){const t=e.cancel();return e.releaseLock(),await t,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}c(ii,"ReadableStreamToAsyncIterable");async function wh(s){if(s===null||typeof s!="object")return;if(s[Symbol.asyncIterator]){await s[Symbol.asyncIterator]().return?.();return}const e=s.getReader(),t=e.cancel();e.releaseLock(),await t}c(wh,"CancelReadableStream");const bh=c(({headers:s,body:e})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(e)}),"FallbackEncoder");function Sh(s){let e=0;for(const r of s)e+=r.length;const t=new Uint8Array(e);let n=0;for(const r of s)t.set(r,n),n+=r.length;return t}c(Sh,"concatBytes");let yc;function oi(s){let e;return(yc??(e=new globalThis.TextEncoder,yc=e.encode.bind(e)))(s)}c(oi,"encodeUTF8");let wc;function bc(s){let e;return(wc??(e=new globalThis.TextDecoder,wc=e.decode.bind(e)))(s)}c(bc,"decodeUTF8");var fe,he;class an{static{c(this,"LineDecoder")}constructor(){fe.set(this,void 0),he.set(this,void 0),L(this,fe,new Uint8Array),L(this,he,null)}decode(e){if(e==null)return[];const t=e instanceof ArrayBuffer?new Uint8Array(e):typeof e=="string"?oi(e):e;L(this,fe,Sh([S(this,fe,"f"),t]));const n=[];let r;for(;(r=Ch(S(this,fe,"f"),S(this,he,"f")))!=null;){if(r.carriage&&S(this,he,"f")==null){L(this,he,r.index);continue}if(S(this,he,"f")!=null&&(r.index!==S(this,he,"f")+1||r.carriage)){n.push(bc(S(this,fe,"f").subarray(0,S(this,he,"f")-1))),L(this,fe,S(this,fe,"f").subarray(S(this,he,"f"))),L(this,he,null);continue}const i=S(this,he,"f")!==null?r.preceding-1:r.preceding,o=bc(S(this,fe,"f").subarray(0,i));n.push(o),L(this,fe,S(this,fe,"f").subarray(r.index)),L(this,he,null)}return n}flush(){return S(this,fe,"f").length?this.decode(`
|
|
158
158
|
`):[]}}fe=new WeakMap,he=new WeakMap,an.NEWLINE_CHARS=new Set([`
|
|
159
|
-
`,"\r"]),an.NEWLINE_REGEXP=/\r\n|[\n\r]/g;function
|
|
160
|
-
`);n.enqueue(o)}catch(r){n.error(r)}},async cancel(){await t.return?.()}})}}async function*
|
|
161
|
-
`),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],i}if(this.chunks.push(e),e.startsWith(":"))return null;let[t,n,r]=
|
|
159
|
+
`,"\r"]),an.NEWLINE_REGEXP=/\r\n|[\n\r]/g;function Ch(s,e){for(let r=e??0;r<s.length;r++){if(s[r]===10)return{preceding:r,index:r+1,carriage:!1};if(s[r]===13)return{preceding:r,index:r+1,carriage:!0}}return null}c(Ch,"findNewlineIndex");function vh(s){for(let n=0;n<s.length-1;n++){if(s[n]===10&&s[n+1]===10||s[n]===13&&s[n+1]===13)return n+2;if(s[n]===13&&s[n+1]===10&&n+3<s.length&&s[n+2]===13&&s[n+3]===10)return n+4}return-1}c(vh,"findDoubleNewlineIndex");const ys={off:0,error:200,warn:300,info:400,debug:500},Sc=c((s,e,t)=>{if(s){if(lh(ys,s))return s;oe(t).warn(`${e} was set to ${JSON.stringify(s)}, expected one of ${JSON.stringify(Object.keys(ys))}`)}},"parseLogLevel");function cn(){}c(cn,"noop");function ws(s,e,t){return!e||ys[s]>ys[t]?cn:e[s].bind(e)}c(ws,"makeLogFn");const kh={error:cn,warn:cn,info:cn,debug:cn};let Cc=new WeakMap;function oe(s){const e=s.logger,t=s.logLevel??"off";if(!e)return kh;const n=Cc.get(e);if(n&&n[0]===t)return n[1];const r={error:ws("error",e,t),warn:ws("warn",e,t),info:ws("info",e,t),debug:ws("debug",e,t)};return Cc.set(e,[t,r]),r}c(oe,"loggerFor");const ft=c(s=>(s.options&&(s.options={...s.options},delete s.options.headers),s.headers&&(s.headers=Object.fromEntries((s.headers instanceof Headers?[...s.headers]:Object.entries(s.headers)).map(([e,t])=>[e,e.toLowerCase()==="x-api-key"||e.toLowerCase()==="authorization"||e.toLowerCase()==="cookie"||e.toLowerCase()==="set-cookie"?"***":t]))),"retryOfRequestLogID"in s&&(s.retryOfRequestLogID&&(s.retryOf=s.retryOfRequestLogID),delete s.retryOfRequestLogID),s),"formatRequestDetails");var ln;class $e{static{c(this,"Stream")}constructor(e,t,n){this.iterator=e,ln.set(this,void 0),this.controller=t,L(this,ln,n)}static fromSSEResponse(e,t,n){let r=!1;const i=n?oe(n):console;async function*o(){if(r)throw new q("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");r=!0;let a=!1;try{for await(const l of Th(e,t)){if(l.event==="completion")try{yield JSON.parse(l.data)}catch(u){throw i.error("Could not parse message into JSON:",l.data),i.error("From chunk:",l.raw),u}if(l.event==="message_start"||l.event==="message_delta"||l.event==="message_stop"||l.event==="content_block_start"||l.event==="content_block_delta"||l.event==="content_block_stop")try{yield JSON.parse(l.data)}catch(u){throw i.error("Could not parse message into JSON:",l.data),i.error("From chunk:",l.raw),u}if(l.event!=="ping"&&l.event==="error")throw new ie(void 0,dc(l.data)??l.data,void 0,e.headers)}a=!0}catch(l){if(on(l))return;throw l}finally{a||t.abort()}}return c(o,"iterator"),new $e(o,t,n)}static fromReadableStream(e,t,n){let r=!1;async function*i(){const a=new an,l=ii(e);for await(const u of l)for(const d of a.decode(u))yield d;for(const u of a.flush())yield u}c(i,"iterLines");async function*o(){if(r)throw new q("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");r=!0;let a=!1;try{for await(const l of i())a||l&&(yield JSON.parse(l));a=!0}catch(l){if(on(l))return;throw l}finally{a||t.abort()}}return c(o,"iterator"),new $e(o,t,n)}[(ln=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){const e=[],t=[],n=this.iterator(),r=c(i=>({next:c(()=>{if(i.length===0){const o=n.next();e.push(o),t.push(o)}return i.shift()},"next")}),"teeIterator");return[new $e(()=>r(e),this.controller,S(this,ln,"f")),new $e(()=>r(t),this.controller,S(this,ln,"f"))]}toReadableStream(){const e=this;let t;return mc({async start(){t=e[Symbol.asyncIterator]()},async pull(n){try{const{value:r,done:i}=await t.next();if(i)return n.close();const o=oi(JSON.stringify(r)+`
|
|
160
|
+
`);n.enqueue(o)}catch(r){n.error(r)}},async cancel(){await t.return?.()}})}}async function*Th(s,e){if(!s.body)throw e.abort(),typeof globalThis.navigator<"u"&&globalThis.navigator.product==="ReactNative"?new q("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api"):new q("Attempted to iterate over a response with no body");const t=new _h,n=new an,r=ii(s.body);for await(const i of Eh(r))for(const o of n.decode(i)){const a=t.decode(o);a&&(yield a)}for(const i of n.flush()){const o=t.decode(i);o&&(yield o)}}c(Th,"_iterSSEMessages");async function*Eh(s){let e=new Uint8Array;for await(const t of s){if(t==null)continue;const n=t instanceof ArrayBuffer?new Uint8Array(t):typeof t=="string"?oi(t):t;let r=new Uint8Array(e.length+n.length);r.set(e),r.set(n,e.length),e=r;let i;for(;(i=vh(e))!==-1;)yield e.slice(0,i),e=e.slice(i)}e.length>0&&(yield e)}c(Eh,"iterSSEChunks");class _h{static{c(this,"SSEDecoder")}constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith("\r")&&(e=e.substring(0,e.length-1)),!e){if(!this.event&&!this.data.length)return null;const i={event:this.event,data:this.data.join(`
|
|
161
|
+
`),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],i}if(this.chunks.push(e),e.startsWith(":"))return null;let[t,n,r]=Ih(e,":");return r.startsWith(" ")&&(r=r.substring(1)),t==="event"?this.event=r:t==="data"&&this.data.push(r),null}}function Ih(s,e){const t=s.indexOf(e);return t!==-1?[s.substring(0,t),e,s.substring(t+e.length)]:[s,"",""]}c(Ih,"partition");async function vc(s,e){const{response:t,requestLogID:n,retryOfRequestLogID:r,startTime:i}=e,o=await(async()=>{if(e.options.stream)return oe(s).debug("response",t.status,t.url,t.headers,t.body),e.options.__streamClass?e.options.__streamClass.fromSSEResponse(t,e.controller):$e.fromSSEResponse(t,e.controller);if(t.status===204)return null;if(e.options.__binaryResponse)return t;const l=t.headers.get("content-type")?.split(";")[0]?.trim();if(l?.includes("application/json")||l?.endsWith("+json")){const f=await t.json();return kc(f,t)}return await t.text()})();return oe(s).debug(`[${n}] response parsed`,ft({retryOfRequestLogID:r,url:t.url,status:t.status,body:o,durationMs:Date.now()-i})),o}c(vc,"defaultParseResponse");function kc(s,e){return!s||typeof s!="object"||Array.isArray(s)?s:Object.defineProperty(s,"_request_id",{value:e.headers.get("request-id"),enumerable:!1})}c(kc,"addRequestID");var un;class js extends Promise{static{c(this,"APIPromise")}constructor(e,t,n=vc){super(r=>{r(null)}),this.responsePromise=t,this.parseResponse=n,un.set(this,void 0),L(this,un,e)}_thenUnwrap(e){return new js(S(this,un,"f"),this.responsePromise,async(t,n)=>kc(e(await this.parseResponse(t,n),n),n.response))}asResponse(){return this.responsePromise.then(e=>e.response)}async withResponse(){const[e,t]=await Promise.all([this.parse(),this.asResponse()]);return{data:e,response:t,request_id:t.headers.get("request-id")}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then(e=>this.parseResponse(S(this,un,"f"),e))),this.parsedPromise}then(e,t){return this.parse().then(e,t)}catch(e){return this.parse().catch(e)}finally(e){return this.parse().finally(e)}}un=new WeakMap;var bs;class Ah{static{c(this,"AbstractPage")}constructor(e,t,n,r){bs.set(this,void 0),L(this,bs,e),this.options=r,this.response=t,this.body=n}hasNextPage(){return this.getPaginatedItems().length?this.nextPageRequestOptions()!=null:!1}async getNextPage(){const e=this.nextPageRequestOptions();if(!e)throw new q("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await S(this,bs,"f").requestAPIList(this.constructor,e)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(bs=new WeakMap,Symbol.asyncIterator)](){for await(const e of this.iterPages())for(const t of e.getPaginatedItems())yield t}}class Oh extends js{static{c(this,"PagePromise")}constructor(e,t,n){super(e,t,async(r,i)=>new n(r,i.response,await vc(r,i),i.options))}async*[Symbol.asyncIterator](){const e=await this;for await(const t of e)yield t}}class dn extends Ah{static{c(this,"Page")}constructor(e,t,n,r){super(e,t,n,r),this.data=n.data||[],this.has_more=n.has_more||!1,this.first_id=n.first_id||null,this.last_id=n.last_id||null}getPaginatedItems(){return this.data??[]}hasNextPage(){return this.has_more===!1?!1:super.hasNextPage()}nextPageRequestOptions(){if(this.options.query?.before_id){const t=this.first_id;return t?{...this.options,query:{...uc(this.options.query),before_id:t}}:null}const e=this.last_id;return e?{...this.options,query:{...uc(this.options.query),after_id:e}}:null}}const Tc=c(()=>{if(typeof File>"u"){const{process:s}=globalThis,e=typeof s?.versions?.node=="string"&&parseInt(s.versions.node.split("."))<20;throw new Error("`File` is not defined as a global, which is required for file uploads."+(e?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}},"checkFileSupport");function jt(s,e,t){return Tc(),new File(s,e??"unknown_file",t)}c(jt,"makeFile");function Ss(s){return(typeof s=="object"&&s!==null&&("name"in s&&s.name&&String(s.name)||"url"in s&&s.url&&String(s.url)||"filename"in s&&s.filename&&String(s.filename)||"path"in s&&s.path&&String(s.path))||"").split(/[\\/]/).pop()||void 0}c(Ss,"getName");const Ec=c(s=>s!=null&&typeof s=="object"&&typeof s[Symbol.asyncIterator]=="function","isAsyncIterable"),$h=c(async(s,e)=>({...s,body:await Nh(s.body,e)}),"multipartFormRequestOptions"),_c=new WeakMap;function xh(s){const e=typeof s=="function"?s:s.fetch,t=_c.get(e);if(t)return t;const n=(async()=>{try{const r="Response"in e?e.Response:(await e("data:,")).constructor,i=new FormData;return i.toString()!==await new r(i).text()}catch{return!0}})();return _c.set(e,n),n}c(xh,"supportsFormData");const Nh=c(async(s,e)=>{if(!await xh(e))throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class.");const t=new FormData;return await Promise.all(Object.entries(s||{}).map(([n,r])=>ai(t,n,r))),t},"createForm"),Ph=c(s=>s instanceof Blob&&"name"in s,"isNamedBlob"),ai=c(async(s,e,t)=>{if(t!==void 0){if(t==null)throw new TypeError(`Received null for "${e}"; to pass null in FormData, you must use the string 'null'`);if(typeof t=="string"||typeof t=="number"||typeof t=="boolean")s.append(e,String(t));else if(t instanceof Response){let n={};const r=t.headers.get("Content-Type");r&&(n={type:r}),s.append(e,jt([await t.blob()],Ss(t),n))}else if(Ec(t))s.append(e,jt([await new Response(gc(t)).blob()],Ss(t)));else if(Ph(t))s.append(e,jt([t],Ss(t),{type:t.type}));else if(Array.isArray(t))await Promise.all(t.map(n=>ai(s,e+"[]",n)));else if(typeof t=="object")await Promise.all(Object.entries(t).map(([n,r])=>ai(s,`${e}[${n}]`,r)));else throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${t} instead`)}},"addFormValue"),Ic=c(s=>s!=null&&typeof s=="object"&&typeof s.size=="number"&&typeof s.type=="string"&&typeof s.text=="function"&&typeof s.slice=="function"&&typeof s.arrayBuffer=="function","isBlobLike"),Rh=c(s=>s!=null&&typeof s=="object"&&typeof s.name=="string"&&typeof s.lastModified=="number"&&Ic(s),"isFileLike"),Mh=c(s=>s!=null&&typeof s=="object"&&typeof s.url=="string"&&typeof s.blob=="function","isResponseLike");async function Lh(s,e,t){if(Tc(),s=await s,e||(e=Ss(s)),Rh(s))return s instanceof File&&e==null&&t==null?s:jt([await s.arrayBuffer()],e??s.name,{type:s.type,lastModified:s.lastModified,...t});if(Mh(s)){const r=await s.blob();return e||(e=new URL(s.url).pathname.split(/[\\/]/).pop()),jt(await ci(r),e,t)}const n=await ci(s);if(!t?.type){const r=n.find(i=>typeof i=="object"&&"type"in i&&i.type);typeof r=="string"&&(t={...t,type:r})}return jt(n,e,t)}c(Lh,"toFile");async function ci(s){let e=[];if(typeof s=="string"||ArrayBuffer.isView(s)||s instanceof ArrayBuffer)e.push(s);else if(Ic(s))e.push(s instanceof Blob?s:await s.arrayBuffer());else if(Ec(s))for await(const t of s)e.push(...await ci(t));else{const t=s?.constructor?.name;throw new Error(`Unexpected data type: ${typeof s}${t?`; constructor: ${t}`:""}${Dh(s)}`)}return e}c(ci,"getBytes");function Dh(s){return typeof s!="object"||s===null?"":`; props: [${Object.getOwnPropertyNames(s).map(t=>`"${t}"`).join(", ")}]`}c(Dh,"propsForError");class je{static{c(this,"APIResource")}constructor(e){this._client=e}}const Ac=Symbol.for("brand.privateNullableHeaders");function*jh(s){if(!s)return;if(Ac in s){const{values:n,nulls:r}=s;yield*n.entries();for(const i of r)yield[i,null];return}let e=!1,t;s instanceof Headers?t=s.entries():lc(s)?t=s:(e=!0,t=Object.entries(s??{}));for(let n of t){const r=n[0];if(typeof r!="string")throw new TypeError("expected header name to be a string");const i=lc(n[1])?n[1]:[n[1]];let o=!1;for(const a of i)a!==void 0&&(e&&!o&&(o=!0,yield[r,null]),yield[r,a])}}c(jh,"iterateHeaders");const G=c(s=>{const e=new Headers,t=new Set;for(const n of s){const r=new Set;for(const[i,o]of jh(n)){const a=i.toLowerCase();r.has(a)||(e.delete(i),r.add(a)),o===null?(e.delete(i),t.add(a)):(e.append(i,o),t.delete(a))}}return{[Ac]:!0,values:e,nulls:t}},"buildHeaders");function Oc(s){return s.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}c(Oc,"encodeURIPath");const $c=Object.freeze(Object.create(null)),Fh=c((s=Oc)=>c(function(t,...n){if(t.length===1)return t[0];let r=!1;const i=[],o=t.reduce((d,f,h)=>{/[?#]/.test(f)&&(r=!0);const m=n[h];let y=(r?encodeURIComponent:s)(""+m);return h!==n.length&&(m==null||typeof m=="object"&&m.toString===Object.getPrototypeOf(Object.getPrototypeOf(m.hasOwnProperty??$c)??$c)?.toString)&&(y=m+"",i.push({start:d.length+f.length,length:y.length,error:`Value of type ${Object.prototype.toString.call(m).slice(8,-1)} is not a valid path parameter`})),d+f+(h===n.length?"":y)},""),a=o.split(/[?#]/,1)[0],l=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi;let u;for(;(u=l.exec(a))!==null;)i.push({start:u.index,length:u[0].length,error:`Value "${u[0]}" can't be safely passed as a path parameter`});if(i.sort((d,f)=>d.start-f.start),i.length>0){let d=0;const f=i.reduce((h,m)=>{const y=" ".repeat(m.start-d),p="^".repeat(m.length);return d=m.start+m.length,h+y+p},"");throw new q(`Path parameters result in path with invalid segments:
|
|
162
162
|
${i.map(h=>h.error).join(`
|
|
163
163
|
`)}
|
|
164
164
|
${o}
|
|
165
|
-
${f}`)}return o},"path2"),"createPathTagFunction"),Ee=Dh(Ic);class Oc extends je{static{c(this,"Files")}list(e={},t){const{betas:n,...r}=e??{};return this._client.getAPIList("/v1/files",dn,{query:r,...t,headers:G([{"anthropic-beta":[...n??[],"files-api-2025-04-14"].toString()},t?.headers])})}delete(e,t={},n){const{betas:r}=t??{};return this._client.delete(Ee`/v1/files/${e}`,{...n,headers:G([{"anthropic-beta":[...r??[],"files-api-2025-04-14"].toString()},n?.headers])})}download(e,t={},n){const{betas:r}=t??{};return this._client.get(Ee`/v1/files/${e}/content`,{...n,headers:G([{"anthropic-beta":[...r??[],"files-api-2025-04-14"].toString(),Accept:"application/binary"},n?.headers]),__binaryResponse:!0})}retrieveMetadata(e,t={},n){const{betas:r}=t??{};return this._client.get(Ee`/v1/files/${e}`,{...n,headers:G([{"anthropic-beta":[...r??[],"files-api-2025-04-14"].toString()},n?.headers])})}upload(e,t){const{betas:n,...r}=e;return this._client.post("/v1/files",Ah({body:r,...t,headers:G([{"anthropic-beta":[...n??[],"files-api-2025-04-14"].toString()},t?.headers])},this._client))}}let $c=class extends je{static{c(this,"Models")}retrieve(e,t={},n){const{betas:r}=t??{};return this._client.get(Ee`/v1/models/${e}?beta=true`,{...n,headers:G([{...r?.toString()!=null?{"anthropic-beta":r?.toString()}:void 0},n?.headers])})}list(e={},t){const{betas:n,...r}=e??{};return this._client.getAPIList("/v1/models?beta=true",dn,{query:r,...t,headers:G([{...n?.toString()!=null?{"anthropic-beta":n?.toString()}:void 0},t?.headers])})}};class Fs{static{c(this,"JSONLDecoder")}constructor(e,t){this.iterator=e,this.controller=t}async*decoder(){const e=new an;for await(const t of this.iterator)for(const n of e.decode(t))yield JSON.parse(n);for(const t of e.flush())yield JSON.parse(t)}[Symbol.asyncIterator](){return this.decoder()}static fromResponse(e,t){if(!e.body)throw t.abort(),typeof globalThis.navigator<"u"&&globalThis.navigator.product==="ReactNative"?new B("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api"):new B("Attempted to iterate over a response with no body");return new Fs(ri(e.body),t)}}let Nc=class extends je{static{c(this,"Batches")}create(e,t){const{betas:n,...r}=e;return this._client.post("/v1/messages/batches?beta=true",{body:r,...t,headers:G([{"anthropic-beta":[...n??[],"message-batches-2024-09-24"].toString()},t?.headers])})}retrieve(e,t={},n){const{betas:r}=t??{};return this._client.get(Ee`/v1/messages/batches/${e}?beta=true`,{...n,headers:G([{"anthropic-beta":[...r??[],"message-batches-2024-09-24"].toString()},n?.headers])})}list(e={},t){const{betas:n,...r}=e??{};return this._client.getAPIList("/v1/messages/batches?beta=true",dn,{query:r,...t,headers:G([{"anthropic-beta":[...n??[],"message-batches-2024-09-24"].toString()},t?.headers])})}delete(e,t={},n){const{betas:r}=t??{};return this._client.delete(Ee`/v1/messages/batches/${e}?beta=true`,{...n,headers:G([{"anthropic-beta":[...r??[],"message-batches-2024-09-24"].toString()},n?.headers])})}cancel(e,t={},n){const{betas:r}=t??{};return this._client.post(Ee`/v1/messages/batches/${e}/cancel?beta=true`,{...n,headers:G([{"anthropic-beta":[...r??[],"message-batches-2024-09-24"].toString()},n?.headers])})}async results(e,t={},n){const r=await this.retrieve(e);if(!r.results_url)throw new B(`No batch \`results_url\`; Has it finished processing? ${r.processing_status} - ${r.id}`);const{betas:i}=t??{};return this._client.get(r.results_url,{...n,headers:G([{"anthropic-beta":[...i??[],"message-batches-2024-09-24"].toString(),Accept:"application/binary"},n?.headers]),stream:!0,__binaryResponse:!0})._thenUnwrap((o,a)=>Fs.fromResponse(a.response,a.controller))}};const jh=c(s=>{let e=0,t=[];for(;e<s.length;){let n=s[e];if(n==="\\"){e++;continue}if(n==="{"){t.push({type:"brace",value:"{"}),e++;continue}if(n==="}"){t.push({type:"brace",value:"}"}),e++;continue}if(n==="["){t.push({type:"paren",value:"["}),e++;continue}if(n==="]"){t.push({type:"paren",value:"]"}),e++;continue}if(n===":"){t.push({type:"separator",value:":"}),e++;continue}if(n===","){t.push({type:"delimiter",value:","}),e++;continue}if(n==='"'){let a="",l=!1;for(n=s[++e];n!=='"';){if(e===s.length){l=!0;break}if(n==="\\"){if(e++,e===s.length){l=!0;break}a+=n+s[e],n=s[++e]}else a+=n,n=s[++e]}n=s[++e],l||t.push({type:"string",value:a});continue}if(n&&/\s/.test(n)){e++;continue}let i=/[0-9]/;if(n&&i.test(n)||n==="-"||n==="."){let a="";for(n==="-"&&(a+=n,n=s[++e]);n&&i.test(n)||n===".";)a+=n,n=s[++e];t.push({type:"number",value:a});continue}let o=/[a-z]/i;if(n&&o.test(n)){let a="";for(;n&&o.test(n)&&e!==s.length;)a+=n,n=s[++e];if(a=="true"||a=="false"||a==="null")t.push({type:"name",value:a});else{e++;continue}continue}e++}return t},"tokenize"),Ft=c(s=>{if(s.length===0)return s;let e=s[s.length-1];switch(e.type){case"separator":return s=s.slice(0,s.length-1),Ft(s);case"number":let t=e.value[e.value.length-1];if(t==="."||t==="-")return s=s.slice(0,s.length-1),Ft(s);case"string":let n=s[s.length-2];if(n?.type==="delimiter")return s=s.slice(0,s.length-1),Ft(s);if(n?.type==="brace"&&n.value==="{")return s=s.slice(0,s.length-1),Ft(s);break;case"delimiter":return s=s.slice(0,s.length-1),Ft(s)}return s},"strip"),Fh=c(s=>{let e=[];return s.map(t=>{t.type==="brace"&&(t.value==="{"?e.push("}"):e.splice(e.lastIndexOf("}"),1)),t.type==="paren"&&(t.value==="["?e.push("]"):e.splice(e.lastIndexOf("]"),1))}),e.length>0&&e.reverse().map(t=>{t==="}"?s.push({type:"brace",value:"}"}):t==="]"&&s.push({type:"paren",value:"]"})}),s},"unstrip"),qh=c(s=>{let e="";return s.map(t=>{switch(t.type){case"string":e+='"'+t.value+'"';break;default:e+=t.value;break}}),e},"generate"),xc=c(s=>JSON.parse(qh(Fh(Ft(jh(s))))),"partialParse");var we,Ye,fn,Cs,hn,pn,vs,mn,Fe,gn,ks,Ts,qt,Es,_s,ci,Pc,Is,li,ui,di,Rc;const Mc="__json_buf";function Lc(s){return s.type==="tool_use"||s.type==="server_tool_use"||s.type==="mcp_tool_use"}c(Lc,"tracksToolInput$1");class qs{static{c(this,"BetaMessageStream")}constructor(){we.add(this),this.messages=[],this.receivedMessages=[],Ye.set(this,void 0),this.controller=new AbortController,fn.set(this,void 0),Cs.set(this,()=>{}),hn.set(this,()=>{}),pn.set(this,void 0),vs.set(this,()=>{}),mn.set(this,()=>{}),Fe.set(this,{}),gn.set(this,!1),ks.set(this,!1),Ts.set(this,!1),qt.set(this,!1),Es.set(this,void 0),_s.set(this,void 0),Is.set(this,e=>{if(L(this,ks,!0),on(e)&&(e=new Te),e instanceof Te)return L(this,Ts,!0),this._emit("abort",e);if(e instanceof B)return this._emit("error",e);if(e instanceof Error){const t=new B(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new B(String(e)))}),L(this,fn,new Promise((e,t)=>{L(this,Cs,e,"f"),L(this,hn,t,"f")})),L(this,pn,new Promise((e,t)=>{L(this,vs,e,"f"),L(this,mn,t,"f")})),S(this,fn,"f").catch(()=>{}),S(this,pn,"f").catch(()=>{})}get response(){return S(this,Es,"f")}get request_id(){return S(this,_s,"f")}async withResponse(){const e=await S(this,fn,"f");if(!e)throw new Error("Could not resolve a `Response` object");return{data:this,response:e,request_id:e.headers.get("request-id")}}static fromReadableStream(e){const t=new qs;return t._run(()=>t._fromReadableStream(e)),t}static createMessage(e,t,n){const r=new qs;for(const i of t.messages)r._addMessageParam(i);return r._run(()=>r._createMessage(e,{...t,stream:!0},{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}})),r}_run(e){e().then(()=>{this._emitFinal(),this._emit("end")},S(this,Is,"f"))}_addMessageParam(e){this.messages.push(e)}_addMessage(e,t=!0){this.receivedMessages.push(e),t&&this._emit("message",e)}async _createMessage(e,t,n){const r=n?.signal;let i;r&&(r.aborted&&this.controller.abort(),i=this.controller.abort.bind(this.controller),r.addEventListener("abort",i));try{S(this,we,"m",li).call(this);const{response:o,data:a}=await e.create({...t,stream:!0},{...n,signal:this.controller.signal}).withResponse();this._connected(o);for await(const l of a)S(this,we,"m",ui).call(this,l);if(a.controller.signal?.aborted)throw new Te;S(this,we,"m",di).call(this)}finally{r&&i&&r.removeEventListener("abort",i)}}_connected(e){this.ended||(L(this,Es,e),L(this,_s,e?.headers.get("request-id")),S(this,Cs,"f").call(this,e),this._emit("connect"))}get ended(){return S(this,gn,"f")}get errored(){return S(this,ks,"f")}get aborted(){return S(this,Ts,"f")}abort(){this.controller.abort()}on(e,t){return(S(this,Fe,"f")[e]||(S(this,Fe,"f")[e]=[])).push({listener:t}),this}off(e,t){const n=S(this,Fe,"f")[e];if(!n)return this;const r=n.findIndex(i=>i.listener===t);return r>=0&&n.splice(r,1),this}once(e,t){return(S(this,Fe,"f")[e]||(S(this,Fe,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise((t,n)=>{L(this,qt,!0),e!=="error"&&this.once("error",n),this.once(e,t)})}async done(){L(this,qt,!0),await S(this,pn,"f")}get currentMessage(){return S(this,Ye,"f")}async finalMessage(){return await this.done(),S(this,we,"m",ci).call(this)}async finalText(){return await this.done(),S(this,we,"m",Pc).call(this)}_emit(e,...t){if(S(this,gn,"f"))return;e==="end"&&(L(this,gn,!0),S(this,vs,"f").call(this));const n=S(this,Fe,"f")[e];if(n&&(S(this,Fe,"f")[e]=n.filter(r=>!r.once),n.forEach(({listener:r})=>r(...t))),e==="abort"){const r=t[0];!S(this,qt,"f")&&!n?.length&&Promise.reject(r),S(this,hn,"f").call(this,r),S(this,mn,"f").call(this,r),this._emit("end");return}if(e==="error"){const r=t[0];!S(this,qt,"f")&&!n?.length&&Promise.reject(r),S(this,hn,"f").call(this,r),S(this,mn,"f").call(this,r),this._emit("end")}}_emitFinal(){this.receivedMessages.at(-1)&&this._emit("finalMessage",S(this,we,"m",ci).call(this))}async _fromReadableStream(e,t){const n=t?.signal;let r;n&&(n.aborted&&this.controller.abort(),r=this.controller.abort.bind(this.controller),n.addEventListener("abort",r));try{S(this,we,"m",li).call(this),this._connected(null);const i=$e.fromReadableStream(e,this.controller);for await(const o of i)S(this,we,"m",ui).call(this,o);if(i.controller.signal?.aborted)throw new Te;S(this,we,"m",di).call(this)}finally{n&&r&&n.removeEventListener("abort",r)}}[(Ye=new WeakMap,fn=new WeakMap,Cs=new WeakMap,hn=new WeakMap,pn=new WeakMap,vs=new WeakMap,mn=new WeakMap,Fe=new WeakMap,gn=new WeakMap,ks=new WeakMap,Ts=new WeakMap,qt=new WeakMap,Es=new WeakMap,_s=new WeakMap,Is=new WeakMap,we=new WeakSet,ci=c(function(){if(this.receivedMessages.length===0)throw new B("stream ended without producing a Message with role=assistant");return this.receivedMessages.at(-1)},"_BetaMessageStream_getFinalMessage2"),Pc=c(function(){if(this.receivedMessages.length===0)throw new B("stream ended without producing a Message with role=assistant");const t=this.receivedMessages.at(-1).content.filter(n=>n.type==="text").map(n=>n.text);if(t.length===0)throw new B("stream ended without producing a content block with type=text");return t.join(" ")},"_BetaMessageStream_getFinalText2"),li=c(function(){this.ended||L(this,Ye,void 0)},"_BetaMessageStream_beginRequest2"),ui=c(function(t){if(this.ended)return;const n=S(this,we,"m",Rc).call(this,t);switch(this._emit("streamEvent",t,n),t.type){case"content_block_delta":{const r=n.content.at(-1);switch(t.delta.type){case"text_delta":{r.type==="text"&&this._emit("text",t.delta.text,r.text||"");break}case"citations_delta":{r.type==="text"&&this._emit("citation",t.delta.citation,r.citations??[]);break}case"input_json_delta":{Lc(r)&&r.input&&this._emit("inputJson",t.delta.partial_json,r.input);break}case"thinking_delta":{r.type==="thinking"&&this._emit("thinking",t.delta.thinking,r.thinking);break}case"signature_delta":{r.type==="thinking"&&this._emit("signature",r.signature);break}default:t.delta}break}case"message_stop":{this._addMessageParam(n),this._addMessage(n,!0);break}case"content_block_stop":{this._emit("contentBlock",n.content.at(-1));break}case"message_start":{L(this,Ye,n);break}}},"_BetaMessageStream_addStreamEvent2"),di=c(function(){if(this.ended)throw new B("stream has ended, this shouldn't happen");const t=S(this,Ye,"f");if(!t)throw new B("request ended without sending any chunks");return L(this,Ye,void 0),t},"_BetaMessageStream_endRequest2"),Rc=c(function(t){let n=S(this,Ye,"f");if(t.type==="message_start"){if(n)throw new B(`Unexpected event order, got ${t.type} before receiving "message_stop"`);return t.message}if(!n)throw new B(`Unexpected event order, got ${t.type} before "message_start"`);switch(t.type){case"message_stop":return n;case"message_delta":return n.container=t.delta.container,n.stop_reason=t.delta.stop_reason,n.stop_sequence=t.delta.stop_sequence,n.usage.output_tokens=t.usage.output_tokens,t.usage.input_tokens!=null&&(n.usage.input_tokens=t.usage.input_tokens),t.usage.cache_creation_input_tokens!=null&&(n.usage.cache_creation_input_tokens=t.usage.cache_creation_input_tokens),t.usage.cache_read_input_tokens!=null&&(n.usage.cache_read_input_tokens=t.usage.cache_read_input_tokens),t.usage.server_tool_use!=null&&(n.usage.server_tool_use=t.usage.server_tool_use),n;case"content_block_start":return n.content.push(t.content_block),n;case"content_block_delta":{const r=n.content.at(t.index);switch(t.delta.type){case"text_delta":{r?.type==="text"&&(n.content[t.index]={...r,text:(r.text||"")+t.delta.text});break}case"citations_delta":{r?.type==="text"&&(n.content[t.index]={...r,citations:[...r.citations??[],t.delta.citation]});break}case"input_json_delta":{if(r&&Lc(r)){let i=r[Mc]||"";i+=t.delta.partial_json;const o={...r};if(Object.defineProperty(o,Mc,{value:i,enumerable:!1,writable:!0}),i)try{o.input=xc(i)}catch(a){const l=new B(`Unable to parse tool parameter JSON from model. Please retry your request or adjust your prompt. Error: ${a}. JSON: ${i}`);S(this,Is,"f").call(this,l)}n.content[t.index]=o}break}case"thinking_delta":{r?.type==="thinking"&&(n.content[t.index]={...r,thinking:r.thinking+t.delta.thinking});break}case"signature_delta":{r?.type==="thinking"&&(n.content[t.index]={...r,signature:t.delta.signature});break}default:t.delta}return n}case"content_block_stop":return n}},"_BetaMessageStream_accumulateMessage2"),Symbol.asyncIterator)](){const e=[],t=[];let n=!1;return this.on("streamEvent",r=>{const i=t.shift();i?i.resolve(r):e.push(r)}),this.on("end",()=>{n=!0;for(const r of t)r.resolve(void 0);t.length=0}),this.on("abort",r=>{n=!0;for(const i of t)i.reject(r);t.length=0}),this.on("error",r=>{n=!0;for(const i of t)i.reject(r);t.length=0}),{next:c(async()=>e.length?{value:e.shift(),done:!1}:n?{value:void 0,done:!0}:new Promise((i,o)=>t.push({resolve:i,reject:o})).then(i=>i?{value:i,done:!1}:{value:void 0,done:!0}),"next"),return:c(async()=>(this.abort(),{value:void 0,done:!0}),"return")}}toReadableStream(){return new $e(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function Zp(s){}c(Zp,"checkNever$1");const Dc={"claude-opus-4-20250514":8192,"claude-opus-4-0":8192,"claude-4-opus-20250514":8192,"anthropic.claude-opus-4-20250514-v1:0":8192,"claude-opus-4@20250514":8192,"claude-opus-4-1-20250805":8192,"anthropic.claude-opus-4-1-20250805-v1:0":8192,"claude-opus-4-1@20250805":8192},jc={"claude-1.3":"November 6th, 2024","claude-1.3-100k":"November 6th, 2024","claude-instant-1.1":"November 6th, 2024","claude-instant-1.1-100k":"November 6th, 2024","claude-instant-1.2":"November 6th, 2024","claude-3-sonnet-20240229":"July 21st, 2025","claude-3-opus-20240229":"January 5th, 2026","claude-2.1":"July 21st, 2025","claude-2.0":"July 21st, 2025","claude-3-5-sonnet-20241022":"October 22, 2025","claude-3-5-sonnet-20240620":"October 22, 2025"};let fi=class extends je{static{c(this,"Messages")}constructor(){super(...arguments),this.batches=new Nc(this._client)}create(e,t){const{betas:n,...r}=e;r.model in jc&&console.warn(`The model '${r.model}' is deprecated and will reach end-of-life on ${jc[r.model]}
|
|
166
|
-
Please migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`);let i=this._client._options.timeout;if(!r.stream&&i==null){const o=Dc[r.model]??void 0;i=this._client.calculateNonstreamingTimeout(r.max_tokens,o)}return this._client.post("/v1/messages?beta=true",{body:r,timeout:i??6e5,...t,headers:G([{...n?.toString()!=null?{"anthropic-beta":n?.toString()}:void 0},t?.headers]),stream:e.stream??!1})}stream(e,t){return qs.createMessage(this,e,t)}countTokens(e,t){const{betas:n,...r}=e;return this._client.post("/v1/messages/count_tokens?beta=true",{body:r,...t,headers:G([{"anthropic-beta":[...n??[],"token-counting-2024-11-01"].toString()},t?.headers])})}};fi.Batches=Nc;class yn extends je{static{c(this,"Beta")}constructor(){super(...arguments),this.models=new $c(this._client),this.messages=new fi(this._client),this.files=new Oc(this._client)}}yn.Models=$c,yn.Messages=fi,yn.Files=Oc;class Fc extends je{static{c(this,"Completions")}create(e,t){const{betas:n,...r}=e;return this._client.post("/v1/complete",{body:r,timeout:this._client._options.timeout??6e5,...t,headers:G([{...n?.toString()!=null?{"anthropic-beta":n?.toString()}:void 0},t?.headers]),stream:e.stream??!1})}}var be,Xe,wn,As,bn,Sn,Os,Cn,qe,vn,$s,Ns,Bt,xs,Ps,hi,qc,pi,mi,gi,yi,Bc;const Kc="__json_buf";function Uc(s){return s.type==="tool_use"||s.type==="server_tool_use"}c(Uc,"tracksToolInput");class Bs{static{c(this,"MessageStream")}constructor(){be.add(this),this.messages=[],this.receivedMessages=[],Xe.set(this,void 0),this.controller=new AbortController,wn.set(this,void 0),As.set(this,()=>{}),bn.set(this,()=>{}),Sn.set(this,void 0),Os.set(this,()=>{}),Cn.set(this,()=>{}),qe.set(this,{}),vn.set(this,!1),$s.set(this,!1),Ns.set(this,!1),Bt.set(this,!1),xs.set(this,void 0),Ps.set(this,void 0),pi.set(this,e=>{if(L(this,$s,!0),on(e)&&(e=new Te),e instanceof Te)return L(this,Ns,!0),this._emit("abort",e);if(e instanceof B)return this._emit("error",e);if(e instanceof Error){const t=new B(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new B(String(e)))}),L(this,wn,new Promise((e,t)=>{L(this,As,e,"f"),L(this,bn,t,"f")})),L(this,Sn,new Promise((e,t)=>{L(this,Os,e,"f"),L(this,Cn,t,"f")})),S(this,wn,"f").catch(()=>{}),S(this,Sn,"f").catch(()=>{})}get response(){return S(this,xs,"f")}get request_id(){return S(this,Ps,"f")}async withResponse(){const e=await S(this,wn,"f");if(!e)throw new Error("Could not resolve a `Response` object");return{data:this,response:e,request_id:e.headers.get("request-id")}}static fromReadableStream(e){const t=new Bs;return t._run(()=>t._fromReadableStream(e)),t}static createMessage(e,t,n){const r=new Bs;for(const i of t.messages)r._addMessageParam(i);return r._run(()=>r._createMessage(e,{...t,stream:!0},{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}})),r}_run(e){e().then(()=>{this._emitFinal(),this._emit("end")},S(this,pi,"f"))}_addMessageParam(e){this.messages.push(e)}_addMessage(e,t=!0){this.receivedMessages.push(e),t&&this._emit("message",e)}async _createMessage(e,t,n){const r=n?.signal;let i;r&&(r.aborted&&this.controller.abort(),i=this.controller.abort.bind(this.controller),r.addEventListener("abort",i));try{S(this,be,"m",mi).call(this);const{response:o,data:a}=await e.create({...t,stream:!0},{...n,signal:this.controller.signal}).withResponse();this._connected(o);for await(const l of a)S(this,be,"m",gi).call(this,l);if(a.controller.signal?.aborted)throw new Te;S(this,be,"m",yi).call(this)}finally{r&&i&&r.removeEventListener("abort",i)}}_connected(e){this.ended||(L(this,xs,e),L(this,Ps,e?.headers.get("request-id")),S(this,As,"f").call(this,e),this._emit("connect"))}get ended(){return S(this,vn,"f")}get errored(){return S(this,$s,"f")}get aborted(){return S(this,Ns,"f")}abort(){this.controller.abort()}on(e,t){return(S(this,qe,"f")[e]||(S(this,qe,"f")[e]=[])).push({listener:t}),this}off(e,t){const n=S(this,qe,"f")[e];if(!n)return this;const r=n.findIndex(i=>i.listener===t);return r>=0&&n.splice(r,1),this}once(e,t){return(S(this,qe,"f")[e]||(S(this,qe,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise((t,n)=>{L(this,Bt,!0),e!=="error"&&this.once("error",n),this.once(e,t)})}async done(){L(this,Bt,!0),await S(this,Sn,"f")}get currentMessage(){return S(this,Xe,"f")}async finalMessage(){return await this.done(),S(this,be,"m",hi).call(this)}async finalText(){return await this.done(),S(this,be,"m",qc).call(this)}_emit(e,...t){if(S(this,vn,"f"))return;e==="end"&&(L(this,vn,!0),S(this,Os,"f").call(this));const n=S(this,qe,"f")[e];if(n&&(S(this,qe,"f")[e]=n.filter(r=>!r.once),n.forEach(({listener:r})=>r(...t))),e==="abort"){const r=t[0];!S(this,Bt,"f")&&!n?.length&&Promise.reject(r),S(this,bn,"f").call(this,r),S(this,Cn,"f").call(this,r),this._emit("end");return}if(e==="error"){const r=t[0];!S(this,Bt,"f")&&!n?.length&&Promise.reject(r),S(this,bn,"f").call(this,r),S(this,Cn,"f").call(this,r),this._emit("end")}}_emitFinal(){this.receivedMessages.at(-1)&&this._emit("finalMessage",S(this,be,"m",hi).call(this))}async _fromReadableStream(e,t){const n=t?.signal;let r;n&&(n.aborted&&this.controller.abort(),r=this.controller.abort.bind(this.controller),n.addEventListener("abort",r));try{S(this,be,"m",mi).call(this),this._connected(null);const i=$e.fromReadableStream(e,this.controller);for await(const o of i)S(this,be,"m",gi).call(this,o);if(i.controller.signal?.aborted)throw new Te;S(this,be,"m",yi).call(this)}finally{n&&r&&n.removeEventListener("abort",r)}}[(Xe=new WeakMap,wn=new WeakMap,As=new WeakMap,bn=new WeakMap,Sn=new WeakMap,Os=new WeakMap,Cn=new WeakMap,qe=new WeakMap,vn=new WeakMap,$s=new WeakMap,Ns=new WeakMap,Bt=new WeakMap,xs=new WeakMap,Ps=new WeakMap,pi=new WeakMap,be=new WeakSet,hi=c(function(){if(this.receivedMessages.length===0)throw new B("stream ended without producing a Message with role=assistant");return this.receivedMessages.at(-1)},"_MessageStream_getFinalMessage2"),qc=c(function(){if(this.receivedMessages.length===0)throw new B("stream ended without producing a Message with role=assistant");const t=this.receivedMessages.at(-1).content.filter(n=>n.type==="text").map(n=>n.text);if(t.length===0)throw new B("stream ended without producing a content block with type=text");return t.join(" ")},"_MessageStream_getFinalText2"),mi=c(function(){this.ended||L(this,Xe,void 0)},"_MessageStream_beginRequest2"),gi=c(function(t){if(this.ended)return;const n=S(this,be,"m",Bc).call(this,t);switch(this._emit("streamEvent",t,n),t.type){case"content_block_delta":{const r=n.content.at(-1);switch(t.delta.type){case"text_delta":{r.type==="text"&&this._emit("text",t.delta.text,r.text||"");break}case"citations_delta":{r.type==="text"&&this._emit("citation",t.delta.citation,r.citations??[]);break}case"input_json_delta":{Uc(r)&&r.input&&this._emit("inputJson",t.delta.partial_json,r.input);break}case"thinking_delta":{r.type==="thinking"&&this._emit("thinking",t.delta.thinking,r.thinking);break}case"signature_delta":{r.type==="thinking"&&this._emit("signature",r.signature);break}default:t.delta}break}case"message_stop":{this._addMessageParam(n),this._addMessage(n,!0);break}case"content_block_stop":{this._emit("contentBlock",n.content.at(-1));break}case"message_start":{L(this,Xe,n);break}}},"_MessageStream_addStreamEvent2"),yi=c(function(){if(this.ended)throw new B("stream has ended, this shouldn't happen");const t=S(this,Xe,"f");if(!t)throw new B("request ended without sending any chunks");return L(this,Xe,void 0),t},"_MessageStream_endRequest2"),Bc=c(function(t){let n=S(this,Xe,"f");if(t.type==="message_start"){if(n)throw new B(`Unexpected event order, got ${t.type} before receiving "message_stop"`);return t.message}if(!n)throw new B(`Unexpected event order, got ${t.type} before "message_start"`);switch(t.type){case"message_stop":return n;case"message_delta":return n.stop_reason=t.delta.stop_reason,n.stop_sequence=t.delta.stop_sequence,n.usage.output_tokens=t.usage.output_tokens,t.usage.input_tokens!=null&&(n.usage.input_tokens=t.usage.input_tokens),t.usage.cache_creation_input_tokens!=null&&(n.usage.cache_creation_input_tokens=t.usage.cache_creation_input_tokens),t.usage.cache_read_input_tokens!=null&&(n.usage.cache_read_input_tokens=t.usage.cache_read_input_tokens),t.usage.server_tool_use!=null&&(n.usage.server_tool_use=t.usage.server_tool_use),n;case"content_block_start":return n.content.push({...t.content_block}),n;case"content_block_delta":{const r=n.content.at(t.index);switch(t.delta.type){case"text_delta":{r?.type==="text"&&(n.content[t.index]={...r,text:(r.text||"")+t.delta.text});break}case"citations_delta":{r?.type==="text"&&(n.content[t.index]={...r,citations:[...r.citations??[],t.delta.citation]});break}case"input_json_delta":{if(r&&Uc(r)){let i=r[Kc]||"";i+=t.delta.partial_json;const o={...r};Object.defineProperty(o,Kc,{value:i,enumerable:!1,writable:!0}),i&&(o.input=xc(i)),n.content[t.index]=o}break}case"thinking_delta":{r?.type==="thinking"&&(n.content[t.index]={...r,thinking:r.thinking+t.delta.thinking});break}case"signature_delta":{r?.type==="thinking"&&(n.content[t.index]={...r,signature:t.delta.signature});break}default:t.delta}return n}case"content_block_stop":return n}},"_MessageStream_accumulateMessage2"),Symbol.asyncIterator)](){const e=[],t=[];let n=!1;return this.on("streamEvent",r=>{const i=t.shift();i?i.resolve(r):e.push(r)}),this.on("end",()=>{n=!0;for(const r of t)r.resolve(void 0);t.length=0}),this.on("abort",r=>{n=!0;for(const i of t)i.reject(r);t.length=0}),this.on("error",r=>{n=!0;for(const i of t)i.reject(r);t.length=0}),{next:c(async()=>e.length?{value:e.shift(),done:!1}:n?{value:void 0,done:!0}:new Promise((i,o)=>t.push({resolve:i,reject:o})).then(i=>i?{value:i,done:!1}:{value:void 0,done:!0}),"next"),return:c(async()=>(this.abort(),{value:void 0,done:!0}),"return")}}toReadableStream(){return new $e(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function em(s){}c(em,"checkNever");class Wc extends je{static{c(this,"Batches")}create(e,t){return this._client.post("/v1/messages/batches",{body:e,...t})}retrieve(e,t){return this._client.get(Ee`/v1/messages/batches/${e}`,t)}list(e={},t){return this._client.getAPIList("/v1/messages/batches",dn,{query:e,...t})}delete(e,t){return this._client.delete(Ee`/v1/messages/batches/${e}`,t)}cancel(e,t){return this._client.post(Ee`/v1/messages/batches/${e}/cancel`,t)}async results(e,t){const n=await this.retrieve(e);if(!n.results_url)throw new B(`No batch \`results_url\`; Has it finished processing? ${n.processing_status} - ${n.id}`);return this._client.get(n.results_url,{...t,headers:G([{Accept:"application/binary"},t?.headers]),stream:!0,__binaryResponse:!0})._thenUnwrap((r,i)=>Fs.fromResponse(i.response,i.controller))}}class wi extends je{static{c(this,"Messages")}constructor(){super(...arguments),this.batches=new Wc(this._client)}create(e,t){e.model in Jc&&console.warn(`The model '${e.model}' is deprecated and will reach end-of-life on ${Jc[e.model]}
|
|
167
|
-
Please migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`);let n=this._client._options.timeout;if(!e.stream&&n==null){const r=
|
|
165
|
+
${f}`)}return o},"path2"),"createPathTagFunction"),Ee=Fh(Oc);class xc extends je{static{c(this,"Files")}list(e={},t){const{betas:n,...r}=e??{};return this._client.getAPIList("/v1/files",dn,{query:r,...t,headers:G([{"anthropic-beta":[...n??[],"files-api-2025-04-14"].toString()},t?.headers])})}delete(e,t={},n){const{betas:r}=t??{};return this._client.delete(Ee`/v1/files/${e}`,{...n,headers:G([{"anthropic-beta":[...r??[],"files-api-2025-04-14"].toString()},n?.headers])})}download(e,t={},n){const{betas:r}=t??{};return this._client.get(Ee`/v1/files/${e}/content`,{...n,headers:G([{"anthropic-beta":[...r??[],"files-api-2025-04-14"].toString(),Accept:"application/binary"},n?.headers]),__binaryResponse:!0})}retrieveMetadata(e,t={},n){const{betas:r}=t??{};return this._client.get(Ee`/v1/files/${e}`,{...n,headers:G([{"anthropic-beta":[...r??[],"files-api-2025-04-14"].toString()},n?.headers])})}upload(e,t){const{betas:n,...r}=e;return this._client.post("/v1/files",$h({body:r,...t,headers:G([{"anthropic-beta":[...n??[],"files-api-2025-04-14"].toString()},t?.headers])},this._client))}}let Nc=class extends je{static{c(this,"Models")}retrieve(e,t={},n){const{betas:r}=t??{};return this._client.get(Ee`/v1/models/${e}?beta=true`,{...n,headers:G([{...r?.toString()!=null?{"anthropic-beta":r?.toString()}:void 0},n?.headers])})}list(e={},t){const{betas:n,...r}=e??{};return this._client.getAPIList("/v1/models?beta=true",dn,{query:r,...t,headers:G([{...n?.toString()!=null?{"anthropic-beta":n?.toString()}:void 0},t?.headers])})}};class Fs{static{c(this,"JSONLDecoder")}constructor(e,t){this.iterator=e,this.controller=t}async*decoder(){const e=new an;for await(const t of this.iterator)for(const n of e.decode(t))yield JSON.parse(n);for(const t of e.flush())yield JSON.parse(t)}[Symbol.asyncIterator](){return this.decoder()}static fromResponse(e,t){if(!e.body)throw t.abort(),typeof globalThis.navigator<"u"&&globalThis.navigator.product==="ReactNative"?new q("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api"):new q("Attempted to iterate over a response with no body");return new Fs(ii(e.body),t)}}let Pc=class extends je{static{c(this,"Batches")}create(e,t){const{betas:n,...r}=e;return this._client.post("/v1/messages/batches?beta=true",{body:r,...t,headers:G([{"anthropic-beta":[...n??[],"message-batches-2024-09-24"].toString()},t?.headers])})}retrieve(e,t={},n){const{betas:r}=t??{};return this._client.get(Ee`/v1/messages/batches/${e}?beta=true`,{...n,headers:G([{"anthropic-beta":[...r??[],"message-batches-2024-09-24"].toString()},n?.headers])})}list(e={},t){const{betas:n,...r}=e??{};return this._client.getAPIList("/v1/messages/batches?beta=true",dn,{query:r,...t,headers:G([{"anthropic-beta":[...n??[],"message-batches-2024-09-24"].toString()},t?.headers])})}delete(e,t={},n){const{betas:r}=t??{};return this._client.delete(Ee`/v1/messages/batches/${e}?beta=true`,{...n,headers:G([{"anthropic-beta":[...r??[],"message-batches-2024-09-24"].toString()},n?.headers])})}cancel(e,t={},n){const{betas:r}=t??{};return this._client.post(Ee`/v1/messages/batches/${e}/cancel?beta=true`,{...n,headers:G([{"anthropic-beta":[...r??[],"message-batches-2024-09-24"].toString()},n?.headers])})}async results(e,t={},n){const r=await this.retrieve(e);if(!r.results_url)throw new q(`No batch \`results_url\`; Has it finished processing? ${r.processing_status} - ${r.id}`);const{betas:i}=t??{};return this._client.get(r.results_url,{...n,headers:G([{"anthropic-beta":[...i??[],"message-batches-2024-09-24"].toString(),Accept:"application/binary"},n?.headers]),stream:!0,__binaryResponse:!0})._thenUnwrap((o,a)=>Fs.fromResponse(a.response,a.controller))}};const Bh=c(s=>{let e=0,t=[];for(;e<s.length;){let n=s[e];if(n==="\\"){e++;continue}if(n==="{"){t.push({type:"brace",value:"{"}),e++;continue}if(n==="}"){t.push({type:"brace",value:"}"}),e++;continue}if(n==="["){t.push({type:"paren",value:"["}),e++;continue}if(n==="]"){t.push({type:"paren",value:"]"}),e++;continue}if(n===":"){t.push({type:"separator",value:":"}),e++;continue}if(n===","){t.push({type:"delimiter",value:","}),e++;continue}if(n==='"'){let a="",l=!1;for(n=s[++e];n!=='"';){if(e===s.length){l=!0;break}if(n==="\\"){if(e++,e===s.length){l=!0;break}a+=n+s[e],n=s[++e]}else a+=n,n=s[++e]}n=s[++e],l||t.push({type:"string",value:a});continue}if(n&&/\s/.test(n)){e++;continue}let i=/[0-9]/;if(n&&i.test(n)||n==="-"||n==="."){let a="";for(n==="-"&&(a+=n,n=s[++e]);n&&i.test(n)||n===".";)a+=n,n=s[++e];t.push({type:"number",value:a});continue}let o=/[a-z]/i;if(n&&o.test(n)){let a="";for(;n&&o.test(n)&&e!==s.length;)a+=n,n=s[++e];if(a=="true"||a=="false"||a==="null")t.push({type:"name",value:a});else{e++;continue}continue}e++}return t},"tokenize"),Ft=c(s=>{if(s.length===0)return s;let e=s[s.length-1];switch(e.type){case"separator":return s=s.slice(0,s.length-1),Ft(s);case"number":let t=e.value[e.value.length-1];if(t==="."||t==="-")return s=s.slice(0,s.length-1),Ft(s);case"string":let n=s[s.length-2];if(n?.type==="delimiter")return s=s.slice(0,s.length-1),Ft(s);if(n?.type==="brace"&&n.value==="{")return s=s.slice(0,s.length-1),Ft(s);break;case"delimiter":return s=s.slice(0,s.length-1),Ft(s)}return s},"strip"),qh=c(s=>{let e=[];return s.map(t=>{t.type==="brace"&&(t.value==="{"?e.push("}"):e.splice(e.lastIndexOf("}"),1)),t.type==="paren"&&(t.value==="["?e.push("]"):e.splice(e.lastIndexOf("]"),1))}),e.length>0&&e.reverse().map(t=>{t==="}"?s.push({type:"brace",value:"}"}):t==="]"&&s.push({type:"paren",value:"]"})}),s},"unstrip"),Kh=c(s=>{let e="";return s.map(t=>{switch(t.type){case"string":e+='"'+t.value+'"';break;default:e+=t.value;break}}),e},"generate"),Rc=c(s=>JSON.parse(Kh(qh(Ft(Bh(s))))),"partialParse");var we,Ye,fn,Cs,hn,pn,vs,mn,Fe,gn,ks,Ts,Bt,Es,_s,li,Mc,Is,ui,di,fi,Lc;const Dc="__json_buf";function jc(s){return s.type==="tool_use"||s.type==="server_tool_use"||s.type==="mcp_tool_use"}c(jc,"tracksToolInput$1");class Bs{static{c(this,"BetaMessageStream")}constructor(){we.add(this),this.messages=[],this.receivedMessages=[],Ye.set(this,void 0),this.controller=new AbortController,fn.set(this,void 0),Cs.set(this,()=>{}),hn.set(this,()=>{}),pn.set(this,void 0),vs.set(this,()=>{}),mn.set(this,()=>{}),Fe.set(this,{}),gn.set(this,!1),ks.set(this,!1),Ts.set(this,!1),Bt.set(this,!1),Es.set(this,void 0),_s.set(this,void 0),Is.set(this,e=>{if(L(this,ks,!0),on(e)&&(e=new Te),e instanceof Te)return L(this,Ts,!0),this._emit("abort",e);if(e instanceof q)return this._emit("error",e);if(e instanceof Error){const t=new q(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new q(String(e)))}),L(this,fn,new Promise((e,t)=>{L(this,Cs,e,"f"),L(this,hn,t,"f")})),L(this,pn,new Promise((e,t)=>{L(this,vs,e,"f"),L(this,mn,t,"f")})),S(this,fn,"f").catch(()=>{}),S(this,pn,"f").catch(()=>{})}get response(){return S(this,Es,"f")}get request_id(){return S(this,_s,"f")}async withResponse(){const e=await S(this,fn,"f");if(!e)throw new Error("Could not resolve a `Response` object");return{data:this,response:e,request_id:e.headers.get("request-id")}}static fromReadableStream(e){const t=new Bs;return t._run(()=>t._fromReadableStream(e)),t}static createMessage(e,t,n){const r=new Bs;for(const i of t.messages)r._addMessageParam(i);return r._run(()=>r._createMessage(e,{...t,stream:!0},{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}})),r}_run(e){e().then(()=>{this._emitFinal(),this._emit("end")},S(this,Is,"f"))}_addMessageParam(e){this.messages.push(e)}_addMessage(e,t=!0){this.receivedMessages.push(e),t&&this._emit("message",e)}async _createMessage(e,t,n){const r=n?.signal;let i;r&&(r.aborted&&this.controller.abort(),i=this.controller.abort.bind(this.controller),r.addEventListener("abort",i));try{S(this,we,"m",ui).call(this);const{response:o,data:a}=await e.create({...t,stream:!0},{...n,signal:this.controller.signal}).withResponse();this._connected(o);for await(const l of a)S(this,we,"m",di).call(this,l);if(a.controller.signal?.aborted)throw new Te;S(this,we,"m",fi).call(this)}finally{r&&i&&r.removeEventListener("abort",i)}}_connected(e){this.ended||(L(this,Es,e),L(this,_s,e?.headers.get("request-id")),S(this,Cs,"f").call(this,e),this._emit("connect"))}get ended(){return S(this,gn,"f")}get errored(){return S(this,ks,"f")}get aborted(){return S(this,Ts,"f")}abort(){this.controller.abort()}on(e,t){return(S(this,Fe,"f")[e]||(S(this,Fe,"f")[e]=[])).push({listener:t}),this}off(e,t){const n=S(this,Fe,"f")[e];if(!n)return this;const r=n.findIndex(i=>i.listener===t);return r>=0&&n.splice(r,1),this}once(e,t){return(S(this,Fe,"f")[e]||(S(this,Fe,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise((t,n)=>{L(this,Bt,!0),e!=="error"&&this.once("error",n),this.once(e,t)})}async done(){L(this,Bt,!0),await S(this,pn,"f")}get currentMessage(){return S(this,Ye,"f")}async finalMessage(){return await this.done(),S(this,we,"m",li).call(this)}async finalText(){return await this.done(),S(this,we,"m",Mc).call(this)}_emit(e,...t){if(S(this,gn,"f"))return;e==="end"&&(L(this,gn,!0),S(this,vs,"f").call(this));const n=S(this,Fe,"f")[e];if(n&&(S(this,Fe,"f")[e]=n.filter(r=>!r.once),n.forEach(({listener:r})=>r(...t))),e==="abort"){const r=t[0];!S(this,Bt,"f")&&!n?.length&&Promise.reject(r),S(this,hn,"f").call(this,r),S(this,mn,"f").call(this,r),this._emit("end");return}if(e==="error"){const r=t[0];!S(this,Bt,"f")&&!n?.length&&Promise.reject(r),S(this,hn,"f").call(this,r),S(this,mn,"f").call(this,r),this._emit("end")}}_emitFinal(){this.receivedMessages.at(-1)&&this._emit("finalMessage",S(this,we,"m",li).call(this))}async _fromReadableStream(e,t){const n=t?.signal;let r;n&&(n.aborted&&this.controller.abort(),r=this.controller.abort.bind(this.controller),n.addEventListener("abort",r));try{S(this,we,"m",ui).call(this),this._connected(null);const i=$e.fromReadableStream(e,this.controller);for await(const o of i)S(this,we,"m",di).call(this,o);if(i.controller.signal?.aborted)throw new Te;S(this,we,"m",fi).call(this)}finally{n&&r&&n.removeEventListener("abort",r)}}[(Ye=new WeakMap,fn=new WeakMap,Cs=new WeakMap,hn=new WeakMap,pn=new WeakMap,vs=new WeakMap,mn=new WeakMap,Fe=new WeakMap,gn=new WeakMap,ks=new WeakMap,Ts=new WeakMap,Bt=new WeakMap,Es=new WeakMap,_s=new WeakMap,Is=new WeakMap,we=new WeakSet,li=c(function(){if(this.receivedMessages.length===0)throw new q("stream ended without producing a Message with role=assistant");return this.receivedMessages.at(-1)},"_BetaMessageStream_getFinalMessage2"),Mc=c(function(){if(this.receivedMessages.length===0)throw new q("stream ended without producing a Message with role=assistant");const t=this.receivedMessages.at(-1).content.filter(n=>n.type==="text").map(n=>n.text);if(t.length===0)throw new q("stream ended without producing a content block with type=text");return t.join(" ")},"_BetaMessageStream_getFinalText2"),ui=c(function(){this.ended||L(this,Ye,void 0)},"_BetaMessageStream_beginRequest2"),di=c(function(t){if(this.ended)return;const n=S(this,we,"m",Lc).call(this,t);switch(this._emit("streamEvent",t,n),t.type){case"content_block_delta":{const r=n.content.at(-1);switch(t.delta.type){case"text_delta":{r.type==="text"&&this._emit("text",t.delta.text,r.text||"");break}case"citations_delta":{r.type==="text"&&this._emit("citation",t.delta.citation,r.citations??[]);break}case"input_json_delta":{jc(r)&&r.input&&this._emit("inputJson",t.delta.partial_json,r.input);break}case"thinking_delta":{r.type==="thinking"&&this._emit("thinking",t.delta.thinking,r.thinking);break}case"signature_delta":{r.type==="thinking"&&this._emit("signature",r.signature);break}default:t.delta}break}case"message_stop":{this._addMessageParam(n),this._addMessage(n,!0);break}case"content_block_stop":{this._emit("contentBlock",n.content.at(-1));break}case"message_start":{L(this,Ye,n);break}}},"_BetaMessageStream_addStreamEvent2"),fi=c(function(){if(this.ended)throw new q("stream has ended, this shouldn't happen");const t=S(this,Ye,"f");if(!t)throw new q("request ended without sending any chunks");return L(this,Ye,void 0),t},"_BetaMessageStream_endRequest2"),Lc=c(function(t){let n=S(this,Ye,"f");if(t.type==="message_start"){if(n)throw new q(`Unexpected event order, got ${t.type} before receiving "message_stop"`);return t.message}if(!n)throw new q(`Unexpected event order, got ${t.type} before "message_start"`);switch(t.type){case"message_stop":return n;case"message_delta":return n.container=t.delta.container,n.stop_reason=t.delta.stop_reason,n.stop_sequence=t.delta.stop_sequence,n.usage.output_tokens=t.usage.output_tokens,t.usage.input_tokens!=null&&(n.usage.input_tokens=t.usage.input_tokens),t.usage.cache_creation_input_tokens!=null&&(n.usage.cache_creation_input_tokens=t.usage.cache_creation_input_tokens),t.usage.cache_read_input_tokens!=null&&(n.usage.cache_read_input_tokens=t.usage.cache_read_input_tokens),t.usage.server_tool_use!=null&&(n.usage.server_tool_use=t.usage.server_tool_use),n;case"content_block_start":return n.content.push(t.content_block),n;case"content_block_delta":{const r=n.content.at(t.index);switch(t.delta.type){case"text_delta":{r?.type==="text"&&(n.content[t.index]={...r,text:(r.text||"")+t.delta.text});break}case"citations_delta":{r?.type==="text"&&(n.content[t.index]={...r,citations:[...r.citations??[],t.delta.citation]});break}case"input_json_delta":{if(r&&jc(r)){let i=r[Dc]||"";i+=t.delta.partial_json;const o={...r};if(Object.defineProperty(o,Dc,{value:i,enumerable:!1,writable:!0}),i)try{o.input=Rc(i)}catch(a){const l=new q(`Unable to parse tool parameter JSON from model. Please retry your request or adjust your prompt. Error: ${a}. JSON: ${i}`);S(this,Is,"f").call(this,l)}n.content[t.index]=o}break}case"thinking_delta":{r?.type==="thinking"&&(n.content[t.index]={...r,thinking:r.thinking+t.delta.thinking});break}case"signature_delta":{r?.type==="thinking"&&(n.content[t.index]={...r,signature:t.delta.signature});break}default:t.delta}return n}case"content_block_stop":return n}},"_BetaMessageStream_accumulateMessage2"),Symbol.asyncIterator)](){const e=[],t=[];let n=!1;return this.on("streamEvent",r=>{const i=t.shift();i?i.resolve(r):e.push(r)}),this.on("end",()=>{n=!0;for(const r of t)r.resolve(void 0);t.length=0}),this.on("abort",r=>{n=!0;for(const i of t)i.reject(r);t.length=0}),this.on("error",r=>{n=!0;for(const i of t)i.reject(r);t.length=0}),{next:c(async()=>e.length?{value:e.shift(),done:!1}:n?{value:void 0,done:!0}:new Promise((i,o)=>t.push({resolve:i,reject:o})).then(i=>i?{value:i,done:!1}:{value:void 0,done:!0}),"next"),return:c(async()=>(this.abort(),{value:void 0,done:!0}),"return")}}toReadableStream(){return new $e(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function tm(s){}c(tm,"checkNever$1");const Fc={"claude-opus-4-20250514":8192,"claude-opus-4-0":8192,"claude-4-opus-20250514":8192,"anthropic.claude-opus-4-20250514-v1:0":8192,"claude-opus-4@20250514":8192,"claude-opus-4-1-20250805":8192,"anthropic.claude-opus-4-1-20250805-v1:0":8192,"claude-opus-4-1@20250805":8192},Bc={"claude-1.3":"November 6th, 2024","claude-1.3-100k":"November 6th, 2024","claude-instant-1.1":"November 6th, 2024","claude-instant-1.1-100k":"November 6th, 2024","claude-instant-1.2":"November 6th, 2024","claude-3-sonnet-20240229":"July 21st, 2025","claude-3-opus-20240229":"January 5th, 2026","claude-2.1":"July 21st, 2025","claude-2.0":"July 21st, 2025","claude-3-5-sonnet-20241022":"October 22, 2025","claude-3-5-sonnet-20240620":"October 22, 2025"};let hi=class extends je{static{c(this,"Messages")}constructor(){super(...arguments),this.batches=new Pc(this._client)}create(e,t){const{betas:n,...r}=e;r.model in Bc&&console.warn(`The model '${r.model}' is deprecated and will reach end-of-life on ${Bc[r.model]}
|
|
166
|
+
Please migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`);let i=this._client._options.timeout;if(!r.stream&&i==null){const o=Fc[r.model]??void 0;i=this._client.calculateNonstreamingTimeout(r.max_tokens,o)}return this._client.post("/v1/messages?beta=true",{body:r,timeout:i??6e5,...t,headers:G([{...n?.toString()!=null?{"anthropic-beta":n?.toString()}:void 0},t?.headers]),stream:e.stream??!1})}stream(e,t){return Bs.createMessage(this,e,t)}countTokens(e,t){const{betas:n,...r}=e;return this._client.post("/v1/messages/count_tokens?beta=true",{body:r,...t,headers:G([{"anthropic-beta":[...n??[],"token-counting-2024-11-01"].toString()},t?.headers])})}};hi.Batches=Pc;class yn extends je{static{c(this,"Beta")}constructor(){super(...arguments),this.models=new Nc(this._client),this.messages=new hi(this._client),this.files=new xc(this._client)}}yn.Models=Nc,yn.Messages=hi,yn.Files=xc;class qc extends je{static{c(this,"Completions")}create(e,t){const{betas:n,...r}=e;return this._client.post("/v1/complete",{body:r,timeout:this._client._options.timeout??6e5,...t,headers:G([{...n?.toString()!=null?{"anthropic-beta":n?.toString()}:void 0},t?.headers]),stream:e.stream??!1})}}var be,Xe,wn,As,bn,Sn,Os,Cn,Be,vn,$s,xs,qt,Ns,Ps,pi,Kc,mi,gi,yi,wi,Uc;const Wc="__json_buf";function Jc(s){return s.type==="tool_use"||s.type==="server_tool_use"}c(Jc,"tracksToolInput");class qs{static{c(this,"MessageStream")}constructor(){be.add(this),this.messages=[],this.receivedMessages=[],Xe.set(this,void 0),this.controller=new AbortController,wn.set(this,void 0),As.set(this,()=>{}),bn.set(this,()=>{}),Sn.set(this,void 0),Os.set(this,()=>{}),Cn.set(this,()=>{}),Be.set(this,{}),vn.set(this,!1),$s.set(this,!1),xs.set(this,!1),qt.set(this,!1),Ns.set(this,void 0),Ps.set(this,void 0),mi.set(this,e=>{if(L(this,$s,!0),on(e)&&(e=new Te),e instanceof Te)return L(this,xs,!0),this._emit("abort",e);if(e instanceof q)return this._emit("error",e);if(e instanceof Error){const t=new q(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new q(String(e)))}),L(this,wn,new Promise((e,t)=>{L(this,As,e,"f"),L(this,bn,t,"f")})),L(this,Sn,new Promise((e,t)=>{L(this,Os,e,"f"),L(this,Cn,t,"f")})),S(this,wn,"f").catch(()=>{}),S(this,Sn,"f").catch(()=>{})}get response(){return S(this,Ns,"f")}get request_id(){return S(this,Ps,"f")}async withResponse(){const e=await S(this,wn,"f");if(!e)throw new Error("Could not resolve a `Response` object");return{data:this,response:e,request_id:e.headers.get("request-id")}}static fromReadableStream(e){const t=new qs;return t._run(()=>t._fromReadableStream(e)),t}static createMessage(e,t,n){const r=new qs;for(const i of t.messages)r._addMessageParam(i);return r._run(()=>r._createMessage(e,{...t,stream:!0},{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}})),r}_run(e){e().then(()=>{this._emitFinal(),this._emit("end")},S(this,mi,"f"))}_addMessageParam(e){this.messages.push(e)}_addMessage(e,t=!0){this.receivedMessages.push(e),t&&this._emit("message",e)}async _createMessage(e,t,n){const r=n?.signal;let i;r&&(r.aborted&&this.controller.abort(),i=this.controller.abort.bind(this.controller),r.addEventListener("abort",i));try{S(this,be,"m",gi).call(this);const{response:o,data:a}=await e.create({...t,stream:!0},{...n,signal:this.controller.signal}).withResponse();this._connected(o);for await(const l of a)S(this,be,"m",yi).call(this,l);if(a.controller.signal?.aborted)throw new Te;S(this,be,"m",wi).call(this)}finally{r&&i&&r.removeEventListener("abort",i)}}_connected(e){this.ended||(L(this,Ns,e),L(this,Ps,e?.headers.get("request-id")),S(this,As,"f").call(this,e),this._emit("connect"))}get ended(){return S(this,vn,"f")}get errored(){return S(this,$s,"f")}get aborted(){return S(this,xs,"f")}abort(){this.controller.abort()}on(e,t){return(S(this,Be,"f")[e]||(S(this,Be,"f")[e]=[])).push({listener:t}),this}off(e,t){const n=S(this,Be,"f")[e];if(!n)return this;const r=n.findIndex(i=>i.listener===t);return r>=0&&n.splice(r,1),this}once(e,t){return(S(this,Be,"f")[e]||(S(this,Be,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise((t,n)=>{L(this,qt,!0),e!=="error"&&this.once("error",n),this.once(e,t)})}async done(){L(this,qt,!0),await S(this,Sn,"f")}get currentMessage(){return S(this,Xe,"f")}async finalMessage(){return await this.done(),S(this,be,"m",pi).call(this)}async finalText(){return await this.done(),S(this,be,"m",Kc).call(this)}_emit(e,...t){if(S(this,vn,"f"))return;e==="end"&&(L(this,vn,!0),S(this,Os,"f").call(this));const n=S(this,Be,"f")[e];if(n&&(S(this,Be,"f")[e]=n.filter(r=>!r.once),n.forEach(({listener:r})=>r(...t))),e==="abort"){const r=t[0];!S(this,qt,"f")&&!n?.length&&Promise.reject(r),S(this,bn,"f").call(this,r),S(this,Cn,"f").call(this,r),this._emit("end");return}if(e==="error"){const r=t[0];!S(this,qt,"f")&&!n?.length&&Promise.reject(r),S(this,bn,"f").call(this,r),S(this,Cn,"f").call(this,r),this._emit("end")}}_emitFinal(){this.receivedMessages.at(-1)&&this._emit("finalMessage",S(this,be,"m",pi).call(this))}async _fromReadableStream(e,t){const n=t?.signal;let r;n&&(n.aborted&&this.controller.abort(),r=this.controller.abort.bind(this.controller),n.addEventListener("abort",r));try{S(this,be,"m",gi).call(this),this._connected(null);const i=$e.fromReadableStream(e,this.controller);for await(const o of i)S(this,be,"m",yi).call(this,o);if(i.controller.signal?.aborted)throw new Te;S(this,be,"m",wi).call(this)}finally{n&&r&&n.removeEventListener("abort",r)}}[(Xe=new WeakMap,wn=new WeakMap,As=new WeakMap,bn=new WeakMap,Sn=new WeakMap,Os=new WeakMap,Cn=new WeakMap,Be=new WeakMap,vn=new WeakMap,$s=new WeakMap,xs=new WeakMap,qt=new WeakMap,Ns=new WeakMap,Ps=new WeakMap,mi=new WeakMap,be=new WeakSet,pi=c(function(){if(this.receivedMessages.length===0)throw new q("stream ended without producing a Message with role=assistant");return this.receivedMessages.at(-1)},"_MessageStream_getFinalMessage2"),Kc=c(function(){if(this.receivedMessages.length===0)throw new q("stream ended without producing a Message with role=assistant");const t=this.receivedMessages.at(-1).content.filter(n=>n.type==="text").map(n=>n.text);if(t.length===0)throw new q("stream ended without producing a content block with type=text");return t.join(" ")},"_MessageStream_getFinalText2"),gi=c(function(){this.ended||L(this,Xe,void 0)},"_MessageStream_beginRequest2"),yi=c(function(t){if(this.ended)return;const n=S(this,be,"m",Uc).call(this,t);switch(this._emit("streamEvent",t,n),t.type){case"content_block_delta":{const r=n.content.at(-1);switch(t.delta.type){case"text_delta":{r.type==="text"&&this._emit("text",t.delta.text,r.text||"");break}case"citations_delta":{r.type==="text"&&this._emit("citation",t.delta.citation,r.citations??[]);break}case"input_json_delta":{Jc(r)&&r.input&&this._emit("inputJson",t.delta.partial_json,r.input);break}case"thinking_delta":{r.type==="thinking"&&this._emit("thinking",t.delta.thinking,r.thinking);break}case"signature_delta":{r.type==="thinking"&&this._emit("signature",r.signature);break}default:t.delta}break}case"message_stop":{this._addMessageParam(n),this._addMessage(n,!0);break}case"content_block_stop":{this._emit("contentBlock",n.content.at(-1));break}case"message_start":{L(this,Xe,n);break}}},"_MessageStream_addStreamEvent2"),wi=c(function(){if(this.ended)throw new q("stream has ended, this shouldn't happen");const t=S(this,Xe,"f");if(!t)throw new q("request ended without sending any chunks");return L(this,Xe,void 0),t},"_MessageStream_endRequest2"),Uc=c(function(t){let n=S(this,Xe,"f");if(t.type==="message_start"){if(n)throw new q(`Unexpected event order, got ${t.type} before receiving "message_stop"`);return t.message}if(!n)throw new q(`Unexpected event order, got ${t.type} before "message_start"`);switch(t.type){case"message_stop":return n;case"message_delta":return n.stop_reason=t.delta.stop_reason,n.stop_sequence=t.delta.stop_sequence,n.usage.output_tokens=t.usage.output_tokens,t.usage.input_tokens!=null&&(n.usage.input_tokens=t.usage.input_tokens),t.usage.cache_creation_input_tokens!=null&&(n.usage.cache_creation_input_tokens=t.usage.cache_creation_input_tokens),t.usage.cache_read_input_tokens!=null&&(n.usage.cache_read_input_tokens=t.usage.cache_read_input_tokens),t.usage.server_tool_use!=null&&(n.usage.server_tool_use=t.usage.server_tool_use),n;case"content_block_start":return n.content.push({...t.content_block}),n;case"content_block_delta":{const r=n.content.at(t.index);switch(t.delta.type){case"text_delta":{r?.type==="text"&&(n.content[t.index]={...r,text:(r.text||"")+t.delta.text});break}case"citations_delta":{r?.type==="text"&&(n.content[t.index]={...r,citations:[...r.citations??[],t.delta.citation]});break}case"input_json_delta":{if(r&&Jc(r)){let i=r[Wc]||"";i+=t.delta.partial_json;const o={...r};Object.defineProperty(o,Wc,{value:i,enumerable:!1,writable:!0}),i&&(o.input=Rc(i)),n.content[t.index]=o}break}case"thinking_delta":{r?.type==="thinking"&&(n.content[t.index]={...r,thinking:r.thinking+t.delta.thinking});break}case"signature_delta":{r?.type==="thinking"&&(n.content[t.index]={...r,signature:t.delta.signature});break}default:t.delta}return n}case"content_block_stop":return n}},"_MessageStream_accumulateMessage2"),Symbol.asyncIterator)](){const e=[],t=[];let n=!1;return this.on("streamEvent",r=>{const i=t.shift();i?i.resolve(r):e.push(r)}),this.on("end",()=>{n=!0;for(const r of t)r.resolve(void 0);t.length=0}),this.on("abort",r=>{n=!0;for(const i of t)i.reject(r);t.length=0}),this.on("error",r=>{n=!0;for(const i of t)i.reject(r);t.length=0}),{next:c(async()=>e.length?{value:e.shift(),done:!1}:n?{value:void 0,done:!0}:new Promise((i,o)=>t.push({resolve:i,reject:o})).then(i=>i?{value:i,done:!1}:{value:void 0,done:!0}),"next"),return:c(async()=>(this.abort(),{value:void 0,done:!0}),"return")}}toReadableStream(){return new $e(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function sm(s){}c(sm,"checkNever");class Hc extends je{static{c(this,"Batches")}create(e,t){return this._client.post("/v1/messages/batches",{body:e,...t})}retrieve(e,t){return this._client.get(Ee`/v1/messages/batches/${e}`,t)}list(e={},t){return this._client.getAPIList("/v1/messages/batches",dn,{query:e,...t})}delete(e,t){return this._client.delete(Ee`/v1/messages/batches/${e}`,t)}cancel(e,t){return this._client.post(Ee`/v1/messages/batches/${e}/cancel`,t)}async results(e,t){const n=await this.retrieve(e);if(!n.results_url)throw new q(`No batch \`results_url\`; Has it finished processing? ${n.processing_status} - ${n.id}`);return this._client.get(n.results_url,{...t,headers:G([{Accept:"application/binary"},t?.headers]),stream:!0,__binaryResponse:!0})._thenUnwrap((r,i)=>Fs.fromResponse(i.response,i.controller))}}class bi extends je{static{c(this,"Messages")}constructor(){super(...arguments),this.batches=new Hc(this._client)}create(e,t){e.model in Vc&&console.warn(`The model '${e.model}' is deprecated and will reach end-of-life on ${Vc[e.model]}
|
|
167
|
+
Please migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`);let n=this._client._options.timeout;if(!e.stream&&n==null){const r=Fc[e.model]??void 0;n=this._client.calculateNonstreamingTimeout(e.max_tokens,r)}return this._client.post("/v1/messages",{body:e,timeout:n??6e5,...t,stream:e.stream??!1})}stream(e,t){return qs.createMessage(this,e,t)}countTokens(e,t){return this._client.post("/v1/messages/count_tokens",{body:e,...t})}}const Vc={"claude-1.3":"November 6th, 2024","claude-1.3-100k":"November 6th, 2024","claude-instant-1.1":"November 6th, 2024","claude-instant-1.1-100k":"November 6th, 2024","claude-instant-1.2":"November 6th, 2024","claude-3-sonnet-20240229":"July 21st, 2025","claude-3-opus-20240229":"January 5th, 2026","claude-2.1":"July 21st, 2025","claude-2.0":"July 21st, 2025","claude-3-5-sonnet-20241022":"October 22, 2025","claude-3-5-sonnet-20240620":"October 22, 2025"};bi.Batches=Hc;class zc extends je{static{c(this,"Models")}retrieve(e,t={},n){const{betas:r}=t??{};return this._client.get(Ee`/v1/models/${e}`,{...n,headers:G([{...r?.toString()!=null?{"anthropic-beta":r?.toString()}:void 0},n?.headers])})}list(e={},t){const{betas:n,...r}=e??{};return this._client.getAPIList("/v1/models",dn,{query:r,...t,headers:G([{...n?.toString()!=null?{"anthropic-beta":n?.toString()}:void 0},t?.headers])})}}const Rs=c(s=>{if(typeof globalThis.process<"u")return globalThis.process.env?.[s]?.trim()??void 0;if(typeof globalThis.Deno<"u")return globalThis.Deno.env?.get?.(s)?.trim()},"readEnv");var Si,Ci,Ms,Gc;const Uh="\\n\\nHuman:",Wh="\\n\\nAssistant:";class ee{static{c(this,"BaseAnthropic")}constructor({baseURL:e=Rs("ANTHROPIC_BASE_URL"),apiKey:t=Rs("ANTHROPIC_API_KEY")??null,authToken:n=Rs("ANTHROPIC_AUTH_TOKEN")??null,...r}={}){Si.add(this),Ms.set(this,void 0);const i={apiKey:t,authToken:n,...r,baseURL:e||"https://api.anthropic.com"};if(!i.dangerouslyAllowBrowser&&fh())throw new q(`It looks like you're running in a browser-like environment.
|
|
168
168
|
|
|
169
169
|
This is disabled by default, as it risks exposing your secret API credentials to attackers.
|
|
170
170
|
If you understand the risks and have appropriate mitigations in place,
|
|
171
171
|
you can set the \`dangerouslyAllowBrowser\` option to \`true\`, e.g.,
|
|
172
172
|
|
|
173
173
|
new Anthropic({ apiKey, dangerouslyAllowBrowser: true });
|
|
174
|
-
`);this.baseURL=i.baseURL,this.timeout=i.timeout??Si.DEFAULT_TIMEOUT,this.logger=i.logger??console;const o="warn";this.logLevel=o,this.logLevel=wc(i.logLevel,"ClientOptions.logLevel",this)??wc(Rs("ANTHROPIC_LOG"),"process.env['ANTHROPIC_LOG']",this)??o,this.fetchOptions=i.fetchOptions,this.maxRetries=i.maxRetries??2,this.fetch=i.fetch??mh(),L(this,Ms,yh),this._options=i,this.apiKey=t,this.authToken=n}withOptions(e){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,authToken:this.authToken,...e})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t}){if(!(this.apiKey&&e.get("x-api-key"))&&!t.has("x-api-key")&&!(this.authToken&&e.get("authorization"))&&!t.has("authorization"))throw new Error('Could not resolve authentication method. Expected either apiKey or authToken to be set. Or for one of the "X-Api-Key" or "Authorization" headers to be explicitly omitted')}async authHeaders(e){return G([await this.apiKeyAuth(e),await this.bearerAuth(e)])}async apiKeyAuth(e){if(this.apiKey!=null)return G([{"X-Api-Key":this.apiKey}])}async bearerAuth(e){if(this.authToken!=null)return G([{Authorization:`Bearer ${this.authToken}`}])}stringifyQuery(e){return Object.entries(e).filter(([t,n])=>typeof n<"u").map(([t,n])=>{if(typeof n=="string"||typeof n=="number"||typeof n=="boolean")return`${encodeURIComponent(t)}=${encodeURIComponent(n)}`;if(n===null)return`${encodeURIComponent(t)}=`;throw new B(`Cannot stringify type ${typeof n}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`)}).join("&")}getUserAgent(){return`${this.constructor.name}/JS ${Dt}`}defaultIdempotencyKey(){return`stainless-node-retry-${Xa()}`}makeStatusError(e,t,n,r){return ie.generate(e,t,n,r)}buildURL(e,t,n){const r=!S(this,bi,"m",Vc).call(this)&&n||this.baseURL,i=ih(e)?new URL(e):new URL(r+(r.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),o=this.defaultQuery();return oh(o)||(t={...o,...t}),typeof t=="object"&&t&&!Array.isArray(t)&&(i.search=this.stringifyQuery(t)),i.toString()}_calculateNonstreamingTimeout(e){if(3600*e/128e3>600)throw new B("Streaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-typescript#streaming-responses for more details");return 600*1e3}async prepareOptions(e){}async prepareRequest(e,{url:t,options:n}){}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,n){return this.request(Promise.resolve(n).then(r=>({method:e,path:t,...r})))}request(e,t=null){return new js(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,n){const r=await e,i=r.maxRetries??this.maxRetries;t==null&&(t=i),await this.prepareOptions(r);const{req:o,url:a,timeout:l}=await this.buildRequest(r,{retryCount:i-t});await this.prepareRequest(o,{url:a,options:r});const u="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),d=n===void 0?"":`, retryOf: ${n}`,f=Date.now();if(oe(this).debug(`[${u}] sending request`,ft({retryOfRequestLogID:n,method:r.method,url:a,options:r,headers:o.headers})),r.signal?.aborted)throw new Te;const h=new AbortController,m=await this.fetchWithTimeout(a,o,l,h).catch(ni),y=Date.now();if(m instanceof globalThis.Error){const T=`retrying, ${t} attempts remaining`;if(r.signal?.aborted)throw new Te;const E=on(m)||/timed? ?out/i.test(String(m)+("cause"in m?String(m.cause):""));if(t)return oe(this).info(`[${u}] connection ${E?"timed out":"failed"} - ${T}`),oe(this).debug(`[${u}] connection ${E?"timed out":"failed"} (${T})`,ft({retryOfRequestLogID:n,url:a,durationMs:y-f,message:m.message})),this.retryRequest(r,t,n??u);throw oe(this).info(`[${u}] connection ${E?"timed out":"failed"} - error; no more retries left`),oe(this).debug(`[${u}] connection ${E?"timed out":"failed"} (error; no more retries left)`,ft({retryOfRequestLogID:n,url:a,durationMs:y-f,message:m.message})),E?new Za:new gs({cause:m})}const p=[...m.headers.entries()].filter(([T])=>T==="request-id").map(([T,E])=>", "+T+": "+JSON.stringify(E)).join(""),w=`[${u}${d}${p}] ${o.method} ${a} ${m.ok?"succeeded":"failed"} with status ${m.status} in ${y-f}ms`;if(!m.ok){const T=await this.shouldRetry(m);if(t&&T){const j=`retrying, ${t} attempts remaining`;return await gh(m.body),oe(this).info(`${w} - ${j}`),oe(this).debug(`[${u}] response error (${j})`,ft({retryOfRequestLogID:n,url:m.url,status:m.status,headers:m.headers,durationMs:y-f})),this.retryRequest(r,t,n??u,m.headers)}const E=T?"error; no more retries left":"error; not retryable";oe(this).info(`${w} - ${E}`);const $=await m.text().catch(j=>ni(j).message),I=lc($),x=I?void 0:$;throw oe(this).debug(`[${u}] response error (${E})`,ft({retryOfRequestLogID:n,url:m.url,status:m.status,headers:m.headers,message:x,durationMs:Date.now()-f})),this.makeStatusError(m.status,I,x,m.headers)}return oe(this).info(w),oe(this).debug(`[${u}] response start`,ft({retryOfRequestLogID:n,url:m.url,status:m.status,headers:m.headers,durationMs:y-f})),{response:m,options:r,controller:h,requestLogID:u,retryOfRequestLogID:n,startTime:f}}getAPIList(e,t,n){return this.requestAPIList(t,{method:"get",path:e,...n})}requestAPIList(e,t){const n=this.makeRequest(t,null,void 0);return new Ih(this,n,e)}async fetchWithTimeout(e,t,n,r){const{signal:i,method:o,...a}=t||{};i&&i.addEventListener("abort",()=>r.abort());const l=setTimeout(()=>r.abort(),n),u=globalThis.ReadableStream&&a.body instanceof globalThis.ReadableStream||typeof a.body=="object"&&a.body!==null&&Symbol.asyncIterator in a.body,d={signal:r.signal,...u?{duplex:"half"}:{},method:"GET",...a};o&&(d.method=o.toUpperCase());try{return await this.fetch.call(void 0,e,d)}finally{clearTimeout(l)}}async shouldRetry(e){const t=e.headers.get("x-should-retry");return t==="true"?!0:t==="false"?!1:e.status===408||e.status===409||e.status===429||e.status>=500}async retryRequest(e,t,n,r){let i;const o=r?.get("retry-after-ms");if(o){const l=parseFloat(o);Number.isNaN(l)||(i=l)}const a=r?.get("retry-after");if(a&&!i){const l=parseFloat(a);Number.isNaN(l)?i=Date.parse(a)-Date.now():i=l*1e3}if(!(i&&0<=i&&i<60*1e3)){const l=e.maxRetries??this.maxRetries;i=this.calculateDefaultRetryTimeoutMillis(t,l)}return await lh(i),this.makeRequest(e,t-1,n)}calculateDefaultRetryTimeoutMillis(e,t){const i=t-e,o=Math.min(.5*Math.pow(2,i),8),a=1-Math.random()*.25;return o*a*1e3}calculateNonstreamingTimeout(e,t){if(36e5*e/128e3>6e5||t!=null&&e>t)throw new B("Streaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-typescript#long-requests for more details");return 6e5}async buildRequest(e,{retryCount:t=0}={}){const n={...e},{method:r,path:i,query:o,defaultBaseURL:a}=n,l=this.buildURL(i,o,a);"timeout"in n&&ch("timeout",n.timeout),n.timeout=n.timeout??this.timeout;const{bodyHeaders:u,body:d}=this.buildBody({options:n}),f=await this.buildHeaders({options:e,method:r,bodyHeaders:u,retryCount:t});return{req:{method:r,headers:f,...n.signal&&{signal:n.signal},...globalThis.ReadableStream&&d instanceof globalThis.ReadableStream&&{duplex:"half"},...d&&{body:d},...this.fetchOptions??{},...n.fetchOptions??{}},url:l,timeout:n.timeout}}async buildHeaders({options:e,method:t,bodyHeaders:n,retryCount:r}){let i={};this.idempotencyHeader&&t!=="get"&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),i[this.idempotencyHeader]=e.idempotencyKey);const o=G([i,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(r),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...ph(),...this._options.dangerouslyAllowBrowser?{"anthropic-dangerous-direct-browser-access":"true"}:void 0,"anthropic-version":"2023-06-01"},await this.authHeaders(e),this._options.defaultHeaders,n,e.headers]);return this.validateHeaders(o),o.values}buildBody({options:{body:e,headers:t}}){if(!e)return{bodyHeaders:void 0,body:void 0};const n=G([t]);return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof DataView||typeof e=="string"&&n.values.has("content-type")||globalThis.Blob&&e instanceof globalThis.Blob||e instanceof FormData||e instanceof URLSearchParams||globalThis.ReadableStream&&e instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:e}:typeof e=="object"&&(Symbol.asyncIterator in e||Symbol.iterator in e&&"next"in e&&typeof e.next=="function")?{bodyHeaders:void 0,body:pc(e)}:S(this,Ms,"f").call(this,{body:e,headers:n})}}Si=ee,Ms=new WeakMap,bi=new WeakSet,Vc=c(function(){return this.baseURL!=="https://api.anthropic.com"},"_BaseAnthropic_baseURLOverridden2"),ee.Anthropic=Si,ee.HUMAN_PROMPT=Bh,ee.AI_PROMPT=Kh,ee.DEFAULT_TIMEOUT=6e5,ee.AnthropicError=B,ee.APIError=ie,ee.APIConnectionError=gs,ee.APIConnectionTimeoutError=Za,ee.APIUserAbortError=Te,ee.NotFoundError=nc,ee.ConflictError=sc,ee.RateLimitError=ic,ee.BadRequestError=Qa,ee.AuthenticationError=ec,ee.InternalServerError=oc,ee.PermissionDeniedError=tc,ee.UnprocessableEntityError=rc,ee.toFile=Rh;class kn extends ee{static{c(this,"Anthropic")}constructor(){super(...arguments),this.completions=new Fc(this),this.messages=new wi(this),this.models=new Hc(this),this.beta=new yn(this)}}kn.Completions=Fc,kn.Messages=wi,kn.Models=Hc,kn.Beta=yn;const Uh="claude-sonnet-4-20250514";class Ei{static{c(this,"TestEnvironment")}client;connectionId;testsDir;testBasePath;options;llm;state={};constructor({connectionId:e,testsDir:t,testBasePath:n,client:r,options:i,llm:o}){this.client=r,this.connectionId=e,this.testsDir=t,this.testBasePath=n,this.llm=o,this.options=i}static async create({connectionId:e,testBasePath:t,options:n}){const r=$n();if(!r)throw new Error("No configuration found. Please set MEMBRANE_WORKSPACE_KEY and MEMBRANE_WORKSPACE_SECRET environment variables, or run `membrane init` first.");if(!r.workspaceKey||!r.workspaceSecret)throw new Error("Missing workspace credentials");if(!r.anthropicApiKey)throw new Error("Anthropic API key not configured. Run `membrane init` to set up testing.");const i=new Ii({token:await this.createMembraneToken(r),apiUri:r.apiUri}),o=new kn({apiKey:r.anthropicApiKey}),a={complete:c(async({prompt:l,maxTokens:u})=>{const d=await o.messages.create({model:Uh,max_tokens:u,messages:[{role:"user",content:l}]});return d.content[0].type==="text"?d.content[0].text:""},"complete")};return new Ei({client:i,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(),er(t,n.getResult());this.writeResults(t)}async readYaml(e){const t=K.join(this.testsDir,this.testBasePath,this.connectionId,e);return ur(t)}async writeYaml(e,t){const n=K.join(this.testsDir,this.testBasePath,this.connectionId,e);U.mkdirSync(K.dirname(n),{recursive:!0}),U.writeFileSync(n,Se.dump(t,{noRefs:!0}))}writeResults(e){const t=K.join(this.testsDir,this.testBasePath,this.connectionId);U.mkdirSync(t,{recursive:!0});const n=K.join(t,"test-results.yaml");U.writeFileSync(n,Se.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},r={issuer:e.workspaceKey,expiresIn:7200,algorithm:"HS512"};return Qs.sign(n,e.workspaceSecret,r)}}xl.interpolate=/{{([\s\S]+?)}}/g;function Ci(s,e){if(typeof s=="string"){const t=Nl(s),n={state:e,random:{number:c(()=>Vt.number.int(),"number"),alphaNumeric:c(i=>Vt.string.alphanumeric(i),"alphaNumeric")},faker:{company:{name:c(()=>Vt.company.name(),"name"),catchPhrase:c(()=>Vt.company.catchPhrase(),"catchPhrase")},internet:{email:c(()=>Vt.internet.email(),"email")}},entries:e["journal-entries"],orders:e["purchase-orders"]||e["sales-orders"],bills:e["vendor-bills"]},r=t(n);return s.includes("{{")&&s.includes("}}")&&(console.debug(`[TEMPLATE] Input: ${s}`),console.debug(`[TEMPLATE] Output: ${r}`)),r}return Array.isArray(s)?s.map(t=>Ci(t,e)):typeof s=="object"&&s!==null?Object.fromEntries(Object.entries(s).map(([t,n])=>[t,Ci(n,e)])):s}c(Ci,"processNode");function Wh(s,e){return Ci(s,e)}c(Wh,"handleTemplate");class Jh{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,r={},i={},o;for(;!t;)try{i=await e.readTestCase(),i||(i=await e.generateConfig(),await this.environment.writeYaml(e.getTestCasePath(),i),console.debug(`${k.bold.yellow("[initialized]")} ${k.yellow(e.path)}`)),o=Wh(i,this.environment.state),await e.run(o),console.debug(`${k.bold.green("[success]")} ${k.yellow(e.path)}`),t=!0,r=e.getResult(),Ws(this.result,e.path,r)}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}`)}}Ws(this.result,e.path,{error:_e(l)}),t=!0,r={error:_e(l)}}const a={...o,result:r};await this.environment.writeYaml(e.getTestCasePath(),a)}async runTestSuite(e){await e.run(),er(this.result,e.getResult())}}class Ze{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,this.resultsLocator=""}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 r=await e();r?(this.logMsg(`\u2705 ${t}`),this.assertions.push({message:t,result:r})):(this.logMsg(`\u274C ${t}`),this.assertions.push({message:t,result:!1,details:n}))}catch(r){this.assertions.push({message:t,result:!1,details:_e(r)}),this.logMsg(`\u274C ${t}: ${r.message}`)}}logMsg(e){console.debug(`${" ".repeat(this.level*2)}${e}`)}getTestCasePath(){return`${this.path}.test.yml`}}function vi(s,e){const t={};for(const n in e){if(!(n in s)){t[n]=e[n];continue}const r=s[n],i=e[n];if(r&&i&&typeof r=="object"&&typeof i=="object"){if(Array.isArray(r)&&Array.isArray(i)){const o=i.filter(a=>!r.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)||!ki(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(r)&&!Array.isArray(i)){const o=vi(r,i);o!==null&&(t[n]=o)}else t[n]=i;continue}ki(r,i)||(t[n]=i)}return Object.keys(t).length===0?null:t}c(vi,"getNotMatchingSubFields");function ki(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(ki,"softCompare");class Hh extends Ze{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=Js(this.dataCollection);if(this.dataCollection.findById){const i=await this.environment.client.connection(this.environment.connectionId).dataCollection(this.dataCollectionKey).findById({id:t.id});await this.assert(()=>!!i.record,"Record is returned from findById"),i.record&&(this.environment.state[this.dataCollectionKey]={createdRecordId:t.id,createdRecord:i.record.fields});const o=Oi(n),a=En(e.input.fields,o,{skipUnknownFields:!0}),l=En(i.record.fields,o),u=vi(l,a);await this.assert(()=>!u,"Returned fields match created fields",{difference:u,sentFields:a,receivedFields:l})}const r=cl(n??{});if(r.length>0){const i={};r.forEach(a=>{const l=ll(e.input.fields,a);typeof l<"u"&&Ws(i,a,l)});const o=await this.environment.client.connection(this.environment.connectionId).dataCollection(this.dataCollectionKey).create({fields:i});await this.assert(()=>!!o.id,"Record can be created with schema-defined required fields only")}}async generateConfig(){const e=Js(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=_e(t),r=Js(this.dataCollection),i=await this.getExampleRecordsForSchema(r),o=`I'm trying to create a data record in a data collection with the following fields schema:
|
|
174
|
+
`);this.baseURL=i.baseURL,this.timeout=i.timeout??Ci.DEFAULT_TIMEOUT,this.logger=i.logger??console;const o="warn";this.logLevel=o,this.logLevel=Sc(i.logLevel,"ClientOptions.logLevel",this)??Sc(Rs("ANTHROPIC_LOG"),"process.env['ANTHROPIC_LOG']",this)??o,this.fetchOptions=i.fetchOptions,this.maxRetries=i.maxRetries??2,this.fetch=i.fetch??yh(),L(this,Ms,bh),this._options=i,this.apiKey=t,this.authToken=n}withOptions(e){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,authToken:this.authToken,...e})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t}){if(!(this.apiKey&&e.get("x-api-key"))&&!t.has("x-api-key")&&!(this.authToken&&e.get("authorization"))&&!t.has("authorization"))throw new Error('Could not resolve authentication method. Expected either apiKey or authToken to be set. Or for one of the "X-Api-Key" or "Authorization" headers to be explicitly omitted')}async authHeaders(e){return G([await this.apiKeyAuth(e),await this.bearerAuth(e)])}async apiKeyAuth(e){if(this.apiKey!=null)return G([{"X-Api-Key":this.apiKey}])}async bearerAuth(e){if(this.authToken!=null)return G([{Authorization:`Bearer ${this.authToken}`}])}stringifyQuery(e){return Object.entries(e).filter(([t,n])=>typeof n<"u").map(([t,n])=>{if(typeof n=="string"||typeof n=="number"||typeof n=="boolean")return`${encodeURIComponent(t)}=${encodeURIComponent(n)}`;if(n===null)return`${encodeURIComponent(t)}=`;throw new q(`Cannot stringify type ${typeof n}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`)}).join("&")}getUserAgent(){return`${this.constructor.name}/JS ${Dt}`}defaultIdempotencyKey(){return`stainless-node-retry-${Qa()}`}makeStatusError(e,t,n,r){return ie.generate(e,t,n,r)}buildURL(e,t,n){const r=!S(this,Si,"m",Gc).call(this)&&n||this.baseURL,i=ah(e)?new URL(e):new URL(r+(r.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),o=this.defaultQuery();return ch(o)||(t={...o,...t}),typeof t=="object"&&t&&!Array.isArray(t)&&(i.search=this.stringifyQuery(t)),i.toString()}_calculateNonstreamingTimeout(e){if(3600*e/128e3>600)throw new q("Streaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-typescript#streaming-responses for more details");return 600*1e3}async prepareOptions(e){}async prepareRequest(e,{url:t,options:n}){}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,n){return this.request(Promise.resolve(n).then(r=>({method:e,path:t,...r})))}request(e,t=null){return new js(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,n){const r=await e,i=r.maxRetries??this.maxRetries;t==null&&(t=i),await this.prepareOptions(r);const{req:o,url:a,timeout:l}=await this.buildRequest(r,{retryCount:i-t});await this.prepareRequest(o,{url:a,options:r});const u="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),d=n===void 0?"":`, retryOf: ${n}`,f=Date.now();if(oe(this).debug(`[${u}] sending request`,ft({retryOfRequestLogID:n,method:r.method,url:a,options:r,headers:o.headers})),r.signal?.aborted)throw new Te;const h=new AbortController,m=await this.fetchWithTimeout(a,o,l,h).catch(si),y=Date.now();if(m instanceof globalThis.Error){const T=`retrying, ${t} attempts remaining`;if(r.signal?.aborted)throw new Te;const E=on(m)||/timed? ?out/i.test(String(m)+("cause"in m?String(m.cause):""));if(t)return oe(this).info(`[${u}] connection ${E?"timed out":"failed"} - ${T}`),oe(this).debug(`[${u}] connection ${E?"timed out":"failed"} (${T})`,ft({retryOfRequestLogID:n,url:a,durationMs:y-f,message:m.message})),this.retryRequest(r,t,n??u);throw oe(this).info(`[${u}] connection ${E?"timed out":"failed"} - error; no more retries left`),oe(this).debug(`[${u}] connection ${E?"timed out":"failed"} (error; no more retries left)`,ft({retryOfRequestLogID:n,url:a,durationMs:y-f,message:m.message})),E?new ec:new gs({cause:m})}const p=[...m.headers.entries()].filter(([T])=>T==="request-id").map(([T,E])=>", "+T+": "+JSON.stringify(E)).join(""),w=`[${u}${d}${p}] ${o.method} ${a} ${m.ok?"succeeded":"failed"} with status ${m.status} in ${y-f}ms`;if(!m.ok){const T=await this.shouldRetry(m);if(t&&T){const F=`retrying, ${t} attempts remaining`;return await wh(m.body),oe(this).info(`${w} - ${F}`),oe(this).debug(`[${u}] response error (${F})`,ft({retryOfRequestLogID:n,url:m.url,status:m.status,headers:m.headers,durationMs:y-f})),this.retryRequest(r,t,n??u,m.headers)}const E=T?"error; no more retries left":"error; not retryable";oe(this).info(`${w} - ${E}`);const $=await m.text().catch(F=>si(F).message),I=dc($),N=I?void 0:$;throw oe(this).debug(`[${u}] response error (${E})`,ft({retryOfRequestLogID:n,url:m.url,status:m.status,headers:m.headers,message:N,durationMs:Date.now()-f})),this.makeStatusError(m.status,I,N,m.headers)}return oe(this).info(w),oe(this).debug(`[${u}] response start`,ft({retryOfRequestLogID:n,url:m.url,status:m.status,headers:m.headers,durationMs:y-f})),{response:m,options:r,controller:h,requestLogID:u,retryOfRequestLogID:n,startTime:f}}getAPIList(e,t,n){return this.requestAPIList(t,{method:"get",path:e,...n})}requestAPIList(e,t){const n=this.makeRequest(t,null,void 0);return new Oh(this,n,e)}async fetchWithTimeout(e,t,n,r){const{signal:i,method:o,...a}=t||{};i&&i.addEventListener("abort",()=>r.abort());const l=setTimeout(()=>r.abort(),n),u=globalThis.ReadableStream&&a.body instanceof globalThis.ReadableStream||typeof a.body=="object"&&a.body!==null&&Symbol.asyncIterator in a.body,d={signal:r.signal,...u?{duplex:"half"}:{},method:"GET",...a};o&&(d.method=o.toUpperCase());try{return await this.fetch.call(void 0,e,d)}finally{clearTimeout(l)}}async shouldRetry(e){const t=e.headers.get("x-should-retry");return t==="true"?!0:t==="false"?!1:e.status===408||e.status===409||e.status===429||e.status>=500}async retryRequest(e,t,n,r){let i;const o=r?.get("retry-after-ms");if(o){const l=parseFloat(o);Number.isNaN(l)||(i=l)}const a=r?.get("retry-after");if(a&&!i){const l=parseFloat(a);Number.isNaN(l)?i=Date.parse(a)-Date.now():i=l*1e3}if(!(i&&0<=i&&i<60*1e3)){const l=e.maxRetries??this.maxRetries;i=this.calculateDefaultRetryTimeoutMillis(t,l)}return await dh(i),this.makeRequest(e,t-1,n)}calculateDefaultRetryTimeoutMillis(e,t){const i=t-e,o=Math.min(.5*Math.pow(2,i),8),a=1-Math.random()*.25;return o*a*1e3}calculateNonstreamingTimeout(e,t){if(36e5*e/128e3>6e5||t!=null&&e>t)throw new q("Streaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-typescript#long-requests for more details");return 6e5}async buildRequest(e,{retryCount:t=0}={}){const n={...e},{method:r,path:i,query:o,defaultBaseURL:a}=n,l=this.buildURL(i,o,a);"timeout"in n&&uh("timeout",n.timeout),n.timeout=n.timeout??this.timeout;const{bodyHeaders:u,body:d}=this.buildBody({options:n}),f=await this.buildHeaders({options:e,method:r,bodyHeaders:u,retryCount:t});return{req:{method:r,headers:f,...n.signal&&{signal:n.signal},...globalThis.ReadableStream&&d instanceof globalThis.ReadableStream&&{duplex:"half"},...d&&{body:d},...this.fetchOptions??{},...n.fetchOptions??{}},url:l,timeout:n.timeout}}async buildHeaders({options:e,method:t,bodyHeaders:n,retryCount:r}){let i={};this.idempotencyHeader&&t!=="get"&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),i[this.idempotencyHeader]=e.idempotencyKey);const o=G([i,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(r),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...gh(),...this._options.dangerouslyAllowBrowser?{"anthropic-dangerous-direct-browser-access":"true"}:void 0,"anthropic-version":"2023-06-01"},await this.authHeaders(e),this._options.defaultHeaders,n,e.headers]);return this.validateHeaders(o),o.values}buildBody({options:{body:e,headers:t}}){if(!e)return{bodyHeaders:void 0,body:void 0};const n=G([t]);return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof DataView||typeof e=="string"&&n.values.has("content-type")||globalThis.Blob&&e instanceof globalThis.Blob||e instanceof FormData||e instanceof URLSearchParams||globalThis.ReadableStream&&e instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:e}:typeof e=="object"&&(Symbol.asyncIterator in e||Symbol.iterator in e&&"next"in e&&typeof e.next=="function")?{bodyHeaders:void 0,body:gc(e)}:S(this,Ms,"f").call(this,{body:e,headers:n})}}Ci=ee,Ms=new WeakMap,Si=new WeakSet,Gc=c(function(){return this.baseURL!=="https://api.anthropic.com"},"_BaseAnthropic_baseURLOverridden2"),ee.Anthropic=Ci,ee.HUMAN_PROMPT=Uh,ee.AI_PROMPT=Wh,ee.DEFAULT_TIMEOUT=6e5,ee.AnthropicError=q,ee.APIError=ie,ee.APIConnectionError=gs,ee.APIConnectionTimeoutError=ec,ee.APIUserAbortError=Te,ee.NotFoundError=rc,ee.ConflictError=ic,ee.RateLimitError=ac,ee.BadRequestError=tc,ee.AuthenticationError=nc,ee.InternalServerError=cc,ee.PermissionDeniedError=sc,ee.UnprocessableEntityError=oc,ee.toFile=Lh;class kn extends ee{static{c(this,"Anthropic")}constructor(){super(...arguments),this.completions=new qc(this),this.messages=new bi(this),this.models=new zc(this),this.beta=new yn(this)}}kn.Completions=qc,kn.Messages=bi,kn.Models=zc,kn.Beta=yn;const Jh="claude-sonnet-4-20250514";class _i{static{c(this,"TestEnvironment")}client;connectionId;testsDir;testBasePath;options;llm;state={};constructor({connectionId:e,testsDir:t,testBasePath:n,client:r,options:i,llm:o}){this.client=r,this.connectionId=e,this.testsDir=t,this.testBasePath=n,this.llm=o,this.options=i}static async create({connectionId:e,testBasePath:t,options:n}){const r=$n();if(!r)throw new Error("No configuration found. Please set MEMBRANE_WORKSPACE_KEY and MEMBRANE_WORKSPACE_SECRET environment variables, or run `membrane init` first.");if(!r.workspaceKey||!r.workspaceSecret)throw new Error("Missing workspace credentials");if(!r.anthropicApiKey)throw new Error("Anthropic API key not configured. Run `membrane init` to set up testing.");const i=new Ai({token:await this.createMembraneToken(r),apiUri:r.apiUri}),o=new kn({apiKey:r.anthropicApiKey}),a={complete:c(async({prompt:l,maxTokens:u})=>{const d=await o.messages.create({model:Jh,max_tokens:u,messages:[{role:"user",content:l}]});return d.content[0].type==="text"?d.content[0].text:""},"complete")};return new _i({client:i,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(),er(t,n.getResult());this.writeResults(t)}async readYaml(e){const t=K.join(this.testsDir,this.testBasePath,this.connectionId,e);return ur(t)}async writeYaml(e,t){const n=K.join(this.testsDir,this.testBasePath,this.connectionId,e);U.mkdirSync(K.dirname(n),{recursive:!0}),U.writeFileSync(n,Se.dump(t,{noRefs:!0}))}writeResults(e){const t=K.join(this.testsDir,this.testBasePath,this.connectionId);U.mkdirSync(t,{recursive:!0});const n=K.join(t,"test-results.yaml");U.writeFileSync(n,Se.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},r={issuer:e.workspaceKey,expiresIn:7200,algorithm:"HS512"};return Qs.sign(n,e.workspaceSecret,r)}}Rl.interpolate=/{{([\s\S]+?)}}/g;function vi(s,e){if(typeof s=="string"){const t=Pl(s),n={state:e,random:{number:c(()=>Vt.number.int(),"number"),alphaNumeric:c(i=>Vt.string.alphanumeric(i),"alphaNumeric")},faker:{company:{name:c(()=>Vt.company.name(),"name"),catchPhrase:c(()=>Vt.company.catchPhrase(),"catchPhrase")},internet:{email:c(()=>Vt.internet.email(),"email")}},entries:e["journal-entries"],orders:e["purchase-orders"]||e["sales-orders"],bills:e["vendor-bills"]},r=t(n);return s.includes("{{")&&s.includes("}}")&&(console.debug(`[TEMPLATE] Input: ${s}`),console.debug(`[TEMPLATE] Output: ${r}`)),r}return Array.isArray(s)?s.map(t=>vi(t,e)):typeof s=="object"&&s!==null?Object.fromEntries(Object.entries(s).map(([t,n])=>[t,vi(n,e)])):s}c(vi,"processNode");function Hh(s,e){return vi(s,e)}c(Hh,"handleTemplate");class Vh{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,r={},i={},o;for(;!t;)try{i=await e.readTestCase(),i||(i=await e.generateConfig(),await this.environment.writeYaml(e.getTestCasePath(),i),console.debug(`${k.bold.yellow("[initialized]")} ${k.yellow(e.path)}`)),o=Hh(i,this.environment.state),await e.run(o),console.debug(`${k.bold.green("[success]")} ${k.yellow(e.path)}`),t=!0,r=e.getResult(),Ws(this.result,e.path,r)}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}`)}}Ws(this.result,e.path,{error:_e(l)}),t=!0,r={error:_e(l)}}const a={...o,result:r};await this.environment.writeYaml(e.getTestCasePath(),a)}async runTestSuite(e){await e.run(),er(this.result,e.getResult())}}class Ze{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,this.resultsLocator=""}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 r=await e();r?(this.logMsg(`\u2705 ${t}`),this.assertions.push({message:t,result:r})):(this.logMsg(`\u274C ${t}`),this.assertions.push({message:t,result:!1,details:n}))}catch(r){this.assertions.push({message:t,result:!1,details:_e(r)}),this.logMsg(`\u274C ${t}: ${r.message}`)}}logMsg(e){console.debug(`${" ".repeat(this.level*2)}${e}`)}getTestCasePath(){return`${this.path}.test.yml`}}function ki(s,e){const t={};for(const n in e){if(!(n in s)){t[n]=e[n];continue}const r=s[n],i=e[n];if(r&&i&&typeof r=="object"&&typeof i=="object"){if(Array.isArray(r)&&Array.isArray(i)){const o=i.filter(a=>!r.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)||!Ti(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(r)&&!Array.isArray(i)){const o=ki(r,i);o!==null&&(t[n]=o)}else t[n]=i;continue}Ti(r,i)||(t[n]=i)}return Object.keys(t).length===0?null:t}c(ki,"getNotMatchingSubFields");function Ti(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(Ti,"softCompare");class zh extends Ze{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=Js(this.dataCollection);if(this.dataCollection.findById){const i=await this.environment.client.connection(this.environment.connectionId).dataCollection(this.dataCollectionKey).findById({id:t.id});await this.assert(()=>!!i.record,"Record is returned from findById"),i.record&&(this.environment.state[this.dataCollectionKey]={createdRecordId:t.id,createdRecord:i.record.fields});const o=$i(n),a=En(e.input.fields,o,{skipUnknownFields:!0}),l=En(i.record.fields,o),u=ki(l,a);await this.assert(()=>!u,"Returned fields match created fields",{difference:u,sentFields:a,receivedFields:l})}const r=ul(n??{});if(r.length>0){const i={};r.forEach(a=>{const l=dl(e.input.fields,a);typeof l<"u"&&Ws(i,a,l)});const o=await this.environment.client.connection(this.environment.connectionId).dataCollection(this.dataCollectionKey).create({fields:i});await this.assert(()=>!!o.id,"Record can be created with schema-defined required fields only")}}async generateConfig(){const e=Js(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=_e(t),r=Js(this.dataCollection),i=await this.getExampleRecordsForSchema(r),o=`I'm trying to create a data record in a data collection with the following fields schema:
|
|
175
175
|
|
|
176
176
|
${JSON.stringify(r,null,2)}
|
|
177
177
|
|
|
@@ -211,7 +211,7 @@ ${JSON.stringify(r,null,2)}`).join(`
|
|
|
211
211
|
|
|
212
212
|
`)}.
|
|
213
213
|
|
|
214
|
-
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
|
|
214
|
+
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 xi(e,r=>{if(r.referenceCollection){const i=r.referenceCollection.key,o=r.referenceCollection.parameters,a=`${i}:${JSON.stringify(o||{})}`;t.has(a)||(t.add(a),n.push({key:i,parameters:o}))}return r}),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 r of t){const i=Ni(r);n[i]=await this.fetchExampleRecords(r)}return n}}class Gh extends Ze{static{c(this,"DataCollectionDeleteTester")}dataCollectionKey;dataCollection;constructor({environment:e,dataCollectionKey:t,dataCollection:n}){super({environment:e,path:`data/${t}/delete`}),this.dataCollectionKey=t,this.dataCollection=n}async run(e){const t=this.environment.state[this.dataCollectionKey]?.createdRecordId||e?.input?.id;if(!t)throw new Error(`No ID found in state or config for ${this.dataCollectionKey} delete`);try{await this.environment.client.connection(this.environment.connectionId).dataCollection(this.dataCollectionKey).delete({id:t})}catch(n){throw n}if(this.dataCollection.findById)try{await this.environment.client.connection(this.environment.connectionId).dataCollection(this.dataCollectionKey).findById({id:t})}catch(n){if(n?.data?.data?.response?.status===404){await this.assert(()=>!0,"Record is not found after deletion");return}throw n}else await this.assert(()=>!0,"No findById capability, skipping verification")}async generateConfig(){let e=this.environment.state[this.dataCollectionKey]?.createdRecordId;if(!e){if(!this.dataCollection.list)throw new Error(`Can't find a record to test delete operation for ${this.dataCollectionKey}. List operation is not implemented for this data collection`);const t=await this.environment.client.connection(this.environment.connectionId).dataCollection(this.dataCollectionKey).list({});if(!t?.records?.length)throw new Error(`No records found to test delete for ${this.dataCollectionKey}`);e=t.records[0].id}return{input:{id:e}}}async fixTestCase({config:e,error:t}){const n=_e(t),r=`I'm trying to delete a record from a data collection.
|
|
215
215
|
|
|
216
216
|
I tried to delete a record with this ID:
|
|
217
217
|
|
|
@@ -231,7 +231,7 @@ Format your response as a JSON object with two fields:
|
|
|
231
231
|
"id": "fixed id"
|
|
232
232
|
}.
|
|
233
233
|
|
|
234
|
-
Only return the JSON object, no other text or wrapping (like \`\`\`json or \`\`\`).`,i=await this.environment.llm.complete({prompt:r,maxTokens:1e3}),o=JSON.parse(i.trim());return console.warn(k.bold.yellow("[auto-fix]"),`${this.path}:`,o.explanation),{input:{id:o.id}}}}class
|
|
234
|
+
Only return the JSON object, no other text or wrapping (like \`\`\`json or \`\`\`).`,i=await this.environment.llm.complete({prompt:r,maxTokens:1e3}),o=JSON.parse(i.trim());return console.warn(k.bold.yellow("[auto-fix]"),`${this.path}:`,o.explanation),{input:{id:o.id}}}}class Yh extends Ze{static{c(this,"DataCollectionFindByIdTester")}dataCollectionKey;dataCollection;constructor({environment:e,dataCollectionKey:t,dataCollection:n}){super({environment:e,path:`data/${t}/find-by-id`}),this.dataCollectionKey=t,this.dataCollection=n}async run(e){const t=this.environment.state[this.dataCollectionKey]?.createdRecordId||e?.input?.id;if(!t)throw new Error(`No ID found in state or config for ${this.dataCollectionKey} find-by-id`);const n=await this.environment.client.connection(this.environment.connectionId).dataCollection(this.dataCollectionKey).findById({id:t});await this.assert(()=>!!n.record,"Record is returned from findById"),await this.assert(()=>n.record.id===t,"Returned record ID matches requested ID")}async generateConfig(){let e=this.environment.state[this.dataCollectionKey]?.createdRecordId;if(!e){if(!this.dataCollection.list)throw new Error(`Can't find a record to test findById operation for ${this.dataCollectionKey}. List operation is not implemented for this data collection`);const t=await this.environment.client.connection(this.environment.connectionId).dataCollection(this.dataCollectionKey).list({});if(!t?.records?.length)throw new Error(`No records found to test findById for ${this.dataCollectionKey}`);e=t.records[0].id}return{input:{id:e}}}async fixTestCase({config:e,error:t}){const n=_e(t),r=`I'm trying to find a record by ID in a data collection.
|
|
235
235
|
|
|
236
236
|
I tried to find a record with this ID:
|
|
237
237
|
|
|
@@ -251,7 +251,7 @@ Format your response as a JSON object with two fields:
|
|
|
251
251
|
"id": "fixed id"
|
|
252
252
|
}.
|
|
253
253
|
|
|
254
|
-
Only return the JSON object, no other text or wrapping (like \`\`\`json or \`\`\`).`,i=await this.environment.llm.complete({prompt:r,maxTokens:1e3}),o=JSON.parse(i.trim());return console.warn(k.bold.yellow("[auto-fix]"),`${this.path}:`,o.explanation),{input:{id:o.id}}}}class
|
|
254
|
+
Only return the JSON object, no other text or wrapping (like \`\`\`json or \`\`\`).`,i=await this.environment.llm.complete({prompt:r,maxTokens:1e3}),o=JSON.parse(i.trim());return console.warn(k.bold.yellow("[auto-fix]"),`${this.path}:`,o.explanation),{input:{id:o.id}}}}class Xh extends Ze{static{c(this,"DataCollectionListTester")}dataCollectionKey;constructor({environment:e,dataCollectionKey:t}){super({environment:e,path:`data/${t}/list`}),this.dataCollectionKey=t}async run(e){const t=await this.environment.client.connection(this.environment.connectionId).dataCollection(this.dataCollectionKey).list(e.input);if(await this.assert(()=>Array.isArray(t.records),"Response has records field as array"),e.input.sort){const{field:n,direction:r}=e.input.sort,i=t.records;if(i.length>1)for(let o=1;o<i.length;o++){const a=i[o-1].fields?.[n],l=i[o].fields?.[n];a==null||l==null||(r==="asc"?await this.assert(()=>a<=l,`Records are sorted by ${n} in ascending order`):await this.assert(()=>a>=l,`Records are sorted by ${n} in descending order`))}}}async generateConfig(){return{input:{}}}async fixTestCase({config:e,error:t}){const n=_e(t),r=`I'm trying to list records from a data collection.
|
|
255
255
|
|
|
256
256
|
I tried to list records with these parameters:
|
|
257
257
|
|
|
@@ -271,7 +271,7 @@ Format your response as a JSON object with two fields:
|
|
|
271
271
|
"input": { ... fixed parameters ... }
|
|
272
272
|
}.
|
|
273
273
|
|
|
274
|
-
Only return the JSON object, no other text or wrapping (like \`\`\`json or \`\`\`).`,i=await this.environment.llm.complete({prompt:r,maxTokens:1e3}),o=JSON.parse(i.trim());return console.warn(k.bold.yellow("[auto-fix]"),`${this.path}:`,o.explanation),{input:o.input}}}class
|
|
274
|
+
Only return the JSON object, no other text or wrapping (like \`\`\`json or \`\`\`).`,i=await this.environment.llm.complete({prompt:r,maxTokens:1e3}),o=JSON.parse(i.trim());return console.warn(k.bold.yellow("[auto-fix]"),`${this.path}:`,o.explanation),{input:o.input}}}class Zh extends Ze{static{c(this,"DataCollectionMatchTester")}dataCollectionKey;dataCollection;constructor({environment:e,dataCollectionKey:t,dataCollection:n}){super({environment:e,path:`data/${t}/match`}),this.dataCollectionKey=t,this.dataCollection=n}async run(e){const t=await this.environment.client.connection(this.environment.connectionId).dataCollection(this.dataCollectionKey).match(e.input);await this.assert(()=>!!t.record,"Response contains a record");const n=t.record,i=(await this.environment.client.connection(this.environment.connectionId).dataCollection(this.dataCollectionKey).findById({id:n.id})).record;for(const[o,a]of Object.entries(e.input.query)){const l=i.fields?.[o];await this.assert(()=>Ti(l,a),`Record field ${o} matches input value - expected ${JSON.stringify(a)} got ${JSON.stringify(l)}`)}}async generateConfig(){if(!this.dataCollection.list)throw new Error(`Can't find a record to test match operation for ${this.dataCollectionKey}. List operation is not implemented for this data collection`);const e=await this.environment.client.connection(this.environment.connectionId).dataCollection(this.dataCollectionKey).list({});if(!e?.records?.length)throw new Error("No records found to test match");const t=e.records[0];if(!t?.fields)throw new Error("First record has no fields to match against");const n={},r=t.fields||{},i=Object.entries(r).filter(([o,a])=>o!=="links"&&a!=null&&a!=="").slice(0,1);if(i.length===0)throw new Error("No usable fields found in record for matching");for(const[o,a]of i)n[o]=a;return{input:{query:n}}}async fixTestCase({config:e,error:t}){const n=_e(t),r=`I'm trying to match a record in a data collection.
|
|
275
275
|
|
|
276
276
|
I tried to match a record with this query:
|
|
277
277
|
|
|
@@ -291,7 +291,7 @@ Format your response as a JSON object with two fields:
|
|
|
291
291
|
"query": { ... fixed query ... }
|
|
292
292
|
}.
|
|
293
293
|
|
|
294
|
-
Only return the JSON object, no other text or wrapping (like \`\`\`json or \`\`\`).`,i=await this.environment.llm.complete({prompt:r,maxTokens:1e3}),o=JSON.parse(i.trim());return console.warn(k.bold.yellow("[auto-fix]"),`${this.path}:`,o.explanation),{input:{query:o.query}}}}class
|
|
294
|
+
Only return the JSON object, no other text or wrapping (like \`\`\`json or \`\`\`).`,i=await this.environment.llm.complete({prompt:r,maxTokens:1e3}),o=JSON.parse(i.trim());return console.warn(k.bold.yellow("[auto-fix]"),`${this.path}:`,o.explanation),{input:{query:o.query}}}}class Qh extends Ze{static{c(this,"DataCollectionSearchTester")}dataCollectionKey;dataCollection;constructor({environment:e,dataCollectionKey:t,dataCollection:n}){super({environment:e,path:`data/${t}/search`}),this.dataCollectionKey=t,this.dataCollection=n}async run(e){const t=await this.environment.client.connection(this.environment.connectionId).dataCollection(this.dataCollectionKey).search(e.input);await this.assert(()=>Array.isArray(t.records),"Response has records field as array");const n=t.records.some(r=>r.id===e.expectedRecordId);n||console.debug(k.yellow(`Search query "${e.input.query}" did not return expected record`)),await this.assert(()=>n,"Search returns expected record")}async generateConfig(){if(!this.dataCollection.list)throw new Error(`Can't find a record to test search operation for ${this.dataCollectionKey}. List operation is not implemented for this data collection`);const e=await this.environment.client.connection(this.environment.connectionId).dataCollection(this.dataCollectionKey).list({});if(!e.records.length)throw new Error("No records found to test search");const t=e.records[0],n=await this.getSearchQueryWithLLM(t.fields||{});if(!n)throw new Error("Unable to generate search query. LLM could not identify a suitable field value from the record to use as the search query.");return{input:{query:n},expectedRecordId:t.id}}async getSearchQueryWithLLM(e){const t=`You are given the fields of a record from a data collection. Identify the BEST single field value that a user is MOST likely to type when searching for this record (e.g. name, title, email, external id). Ignore null, empty strings, technical IDs, HTML, and timestamps unless they are obviously human-searchable. Make sure the field value is as unique as possible for this record. RETURN ONLY the field value as a plain string. No additional text, no JSON, no quotes.
|
|
295
295
|
|
|
296
296
|
Record fields:
|
|
297
297
|
${JSON.stringify(e,null,2)}
|
|
@@ -316,7 +316,7 @@ Format your response as a JSON object with two fields:
|
|
|
316
316
|
"input": { ... fixed parameters ... }
|
|
317
317
|
}.
|
|
318
318
|
|
|
319
|
-
Only return the JSON object, no other text or wrapping (like \`\`\`json or \`\`\`).`,i=await this.environment.llm.complete({prompt:r,maxTokens:1e3}),o=JSON.parse(i.trim());return console.warn(k.bold.yellow("[auto-fix]"),`${this.path}:`,o.explanation),{input:o.input,expectedRecordId:e.expectedRecordId}}}class
|
|
319
|
+
Only return the JSON object, no other text or wrapping (like \`\`\`json or \`\`\`).`,i=await this.environment.llm.complete({prompt:r,maxTokens:1e3}),o=JSON.parse(i.trim());return console.warn(k.bold.yellow("[auto-fix]"),`${this.path}:`,o.explanation),{input:o.input,expectedRecordId:e.expectedRecordId}}}class ep extends Ze{static{c(this,"DataCollectionSpecTester")}dataCollection;constructor({environment:e,dataCollectionKey:t,dataCollection:n}){super({environment:e,path:`data/${t}/spec`}),this.dataCollection=n}async run(){const e=Object.keys(this.dataCollection.fieldsSchema||{}).length;await this.assert(()=>e>0,"Fields schema has field definitions")}}class tp extends Ze{static{c(this,"DataCollectionUpdateTester")}dataCollectionKey;dataCollection;constructor({environment:e,dataCollectionKey:t,dataCollection:n}){super({environment:e,path:`data/${t}/update`}),this.dataCollectionKey=t,this.dataCollection=n}async run(e){const t=this.environment.state[this.dataCollectionKey]?.createdRecordId||e?.input?.id;if(!t)throw new Error(`No ID found in state or config for ${this.dataCollectionKey} update`);const n=await this.environment.client.connection(this.environment.connectionId).dataCollection(this.dataCollectionKey).update({...e.input,id:t});if(await this.assert(()=>!!n.id,"Returned ID of updated record"),this.environment.state[this.dataCollectionKey]||(this.environment.state[this.dataCollectionKey]={}),this.environment.state[this.dataCollectionKey].createdRecordId=n.id,this.dataCollection.findById){const r=await this.environment.client.connection(this.environment.connectionId).dataCollection(this.dataCollectionKey).findById({id:n.id});await this.assert(()=>!!r.record,"Record is returned from findById");const i=Hs(this.dataCollection),o=$i(i),a=En(e.input.fields,o,{skipUnknownFields:!0}),l=En(r.record.fields,o),u=ki(l,a);await this.assert(()=>!u,"Returned fields match updated fields",{difference:u,sentFields:a,receivedFields:l})}}async generateConfig(){let e=this.environment.state[this.dataCollectionKey]?.createdRecordId;if(!e){if(!this.dataCollection.list)throw new Error(`Can't find a record to test update operation for ${this.dataCollectionKey}. List operation is not implemented for this data collection`);const r=await this.environment.client.connection(this.environment.connectionId).dataCollection(this.dataCollectionKey).list({});if(!r?.records?.length)throw new Error(`No records found to test update for ${this.dataCollectionKey}`);e=r.records[0].id}const t=Hs(this.dataCollection);if(!t?.properties)throw new Error("No fields schema found for data collection");const n=await this.generateFieldsWithLLM(t);return{input:{id:e,fields:n}}}async fixTestCase({config:e,error:t}){const n=_e(t),r=Hs(this.dataCollection),i=await this.getExampleRecordsForSchema(r),o=`I'm trying to update a data record in a data collection with the following fields schema:
|
|
320
320
|
|
|
321
321
|
${JSON.stringify(r,null,2)}
|
|
322
322
|
|
|
@@ -356,9 +356,9 @@ ${JSON.stringify(r,null,2)}`).join(`
|
|
|
356
356
|
|
|
357
357
|
`)}.
|
|
358
358
|
|
|
359
|
-
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
|
|
360
|
-
`),"createExperimentalWarning");function
|
|
361
|
-
`)).action(async(t,n)=>{try{console.warn(Ls()),t||(
|
|
362
|
-
${k.bold.cyan("Membrane Agent CLI")} ${k.gray(`v${
|
|
359
|
+
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 xi(e,r=>{if(r.referenceCollection){const i=r.referenceCollection.key,o=r.referenceCollection.parameters,a=`${i}:${JSON.stringify(o||{})}`;t.has(a)||(t.add(a),n.push({key:i,parameters:o}))}return r}),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 r of t){const i=Ni(r);n[i]=await this.fetchExampleRecords(r)}return n}}const Ei={spec:{testerClass:ep},create:{testerClass:zh,operationKey:"create"},"find-by-id":{testerClass:Yh,operationKey:"findById"},list:{testerClass:Xh,operationKey:"list"},match:{testerClass:Zh,operationKey:"match"},search:{testerClass:Qh,operationKey:"search"},update:{testerClass:tp,operationKey:"update"},delete:{testerClass:Gh,operationKey:"delete"}};class np extends Vh{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);B.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=Ei[e];if(!n)throw new Error(`Unknown test method "${e}". Available: ${this.getAvailableTestMethods(t).join(", ")}`);const r="operationKey"in n?n.operationKey:void 0;if(!this.isOperationAvailable(t,r))throw new Error(`${r} operation not available for data collection "${this.dataCollectionKey}"`);return this.instantiateTester(n,t)}createAllAvailableTesters(e){return Object.entries(Ei).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(Ei).filter(([,t])=>{const n="operationKey"in t?t.operationKey:void 0;return this.isOperationAvailable(e,n)}).map(([t])=>t)}displayTestSummary(e){B.info(`\u{1F4CA} ${e} test${e===1?"":"s"} executed`)}}class sp extends ih{static{c(this,"TestRunner")}constructor(e){super(e)}async initialize(){B.debug("Initializing test runner",{prefix:"TestRunner"})}async run(){try{const{testPath:e,path:t,fix:n}=this.options,r=e.split("/");r.length<2&&(B.error("Invalid test path. Expected format: <type>/<name>[/additional/path][/method]"),process.exit(1));const[i,o,...a]=r;i!=="connectors"&&(B.error(`Test type "${i}" is not yet fully implemented. Currently only "connectors" is fully supported.`),B.error("Supported test types: connectors"),process.exit(1));const l=o,u=i,d=[...a,...t?t.split("/"):[]].join("/"),f=await _i.create({connectionId:l,testBasePath:u,options:{fix:n}}),m=await f.client.get(`connections/${l}/data`),y=[],p=d?d.split("/"):[];if(p.length===0||p[0]==="data"){p[0]==="data"&&p.shift();let T,E;p.length>=1&&(E=p[0],p.length>=2&&p[1].trim()!==""&&(T=p[1]));for(const $ of m){if(E&&E!==$.key)continue;const I=new np({environment:f,dataCollectionKey:$.key,testMethod:T});y.push(I)}}y.length===0&&(B.error(`No test suites found for path: ${e}${d?"/"+d:""}`),process.exit(1));const w={};for(const T of y){await T.run();const E=T.getResult();B.debug(`Suite ${T.constructor.name} result:`,{prefix:"TestRunner"}),er(w,E)}console.debug("[TestRunner] All results collected:",Object.keys(w)),f.writeResults(w)}catch(e){throw console.error("Error in TestRunner.run():",e),e}}}const Ls=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(`
|
|
360
|
+
`),"createExperimentalWarning");function rp(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",Ls()).action(async()=>{console.warn(Ls()),B.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"),"",Ls()].join(`
|
|
361
|
+
`)).action(async(t,n)=>{try{console.warn(Ls()),t||(B.error("Test path is required"),process.exit(1)),B.header(`Testing: ${t}`);const r=new sp({testPath:t,path:n.path,fix:n.fix});await r.initialize(),await r.run(),B.success("Tests completed")}catch(r){r instanceof Error&&(B.error(r.message),process.exit(1)),B.error("An unknown error occurred"),process.exit(1)}})}c(rp,"setupTestCommand");const ip=c(()=>{try{const s=nl(import.meta.url),e=tl(s),t=Ks(e,"..","package.json");return JSON.parse(el(t,"utf-8")).version}catch{return"1.0.0"}},"getPackageVersion"),Yc=ip();function op(){process.on("SIGINT",()=>process.exit(130));const s=new sl().name("membrane").description("Command-line interface for Membrane Agent").version(Yc,"-v, --version","Output the version number").option("--verbose","Enable verbose logging (shows debug messages)");s.configureHelp({sortSubcommands:!0,subcommandTerm:c(n=>k.cyan(n.name()),"subcommandTerm"),commandUsage:c(n=>n.name()==="membrane"?`${k.cyan(n.name())} ${k.gray("[options]")} ${k.cyan("[command]")}`:n.usage(),"commandUsage"),optionTerm:c(n=>{const r=n.flags;return`${k.gray("\u25B8")} ${k.cyan(r)}`},"optionTerm"),subcommandDescription:c(n=>k.gray(n.description()),"subcommandDescription"),optionDescription:c(n=>k.gray(n.description),"optionDescription"),commandDescription:c(n=>k.gray(n.description()),"commandDescription")}),s.addHelpText("beforeAll",`
|
|
362
|
+
${k.bold.cyan("Membrane Agent CLI")} ${k.gray(`v${Yc}`)}
|
|
363
363
|
|
|
364
|
-
`);const e=new
|
|
364
|
+
`);const e=new Hd(hs.Cli,process.cwd());vf(s),Rf(s),pf(s),rp(s),df(s),rh(s,e),af(s,e),ql(s,e),nf(s,e),process.argv.length===2&&(s.outputHelp(),process.exit(0)),s.parse(),s.opts().verbose&&b.setVerboseMode(!0)}c(op,"runCLI"),op();
|