ripplo 0.7.19 → 0.7.21
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/chunk-7UWDMECF.js +2 -0
- package/dist/{chunk-WNUKCEN6.js → chunk-BJVAPI4P.js} +1 -1
- package/dist/chunk-EVYYSTR7.js +46 -0
- package/dist/chunk-IHSHBPJY.js +2 -0
- package/dist/chunk-OX6IWNCA.js +206 -0
- package/dist/chunk-R7CQWEBF.js +167 -0
- package/dist/daemon-2E6MKBO7.js +62 -0
- package/dist/daemon-APJHNVIG.js +2 -0
- package/dist/daemon-tunnel-AG6FGNXC.js +2 -0
- package/dist/gifenc.esm-GMV2LJ5K.js +2 -0
- package/dist/index.js +185 -194
- package/package.json +6 -6
- package/dist/chunk-7R7PWDYF.js +0 -137
- package/dist/chunk-APGFYCJC.js +0 -200
- package/dist/chunk-SB7H6IAS.js +0 -2
- package/dist/chunk-Y5IXMRSB.js +0 -46
- package/dist/daemon-EQZROAKJ.js +0 -2
- package/dist/daemon-EUZ4KVQP.js +0 -61
- package/dist/daemon-tunnel-MOYCRSSC.js +0 -2
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import{A as re,C as de,F as I,H as ce,I as ue,K as pe,L as fe,N as x,O as Re,b as G,ba as k,ca as T,da as ve,e as Q,ea as q,fa as Pe,h as y,ha as _,i as A,ia as xe,ja as he,l as H,la as be,na as Ee,pa as Ce,q as X,qa as Ie,ra as Te,sa as We,t as C,ta as Le,ua as De,v as Z,va as Ae,w as ee,wa as He,ya as Fe}from"./chunk-OX6IWNCA.js";import{H as te,N as ie,P as ae,Q as se,R as F,Z as le,ba as me,c as J,ca as ye,da as ge,ea as ke,fa as we,g as K,ga as Se,h as V,k as Y,n as ne,p as oe}from"./chunk-R7CQWEBF.js";import{b as qe}from"./chunk-BJVAPI4P.js";import{c as B,d as E,e as l,f as D,g as z}from"./chunk-EVYYSTR7.js";import"./chunk-IHSHBPJY.js";import"./chunk-7UWDMECF.js";import en from"path";import{createClient as rn}from"graphql-sse";import nn,{AbortError as on}from"p-retry";import{graphql as M}from"gql.tada";import{graphql as Rr}from"gql.tada";import{print as vr}from"graphql";async function _e({config:e,cwd:n,headed:r,pool:t,runId:o,signal:i,testSlug:a,workClass:s,workflowSlug:d}){let{fingerprint:c,result:u}=await y(n);if(u.isErr())return await I(e,o,`lockfile:${u.error.kind}`),{kind:"dispatch-error",reason:{detail:`lockfile:${u.error.kind}`,type:"generic"}};let m=Sr(u.value,{testSlug:a,workflowSlug:d});if(m==null)return await I(e,o,`no-test:${d}/${a}`),{kind:"dispatch-error",reason:{detail:`no-test:${d}/${a}`,type:"generic"}};let p=await k({headed:r,workClass:s,task:()=>t.execute({headed:r,lockfileFingerprint:c,runId:o,testRef:m},i)});return!p.serverNotified&&p.outcome.kind==="error"&&await I(e,o,p.outcome.detail),p.outcome}function Sr(e,{testSlug:n,workflowSlug:r}){let o=e.workflows.find(i=>Y(i.name)===r)?.tests.find(i=>i.slug===n);return o==null?void 0:ne(o)}var Pr=6e4,xr=Rr(`
|
|
3
|
+
subscription RunRequestedWatch($devSessionId: String!) {
|
|
4
|
+
runRequested(devSessionId: $devSessionId) {
|
|
5
|
+
runId
|
|
6
|
+
testSlug
|
|
7
|
+
workflowId
|
|
8
|
+
workflowSlug
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
`);async function Oe(e){let n=Math.min(1e3*2**e,Pr)+Er();await new Promise(r=>setTimeout(r,n))}function je({claim:e,cwd:n,devSessionId:r,onSubscriptionDead:t,pool:o,sseClient:i,sseHealth:a}){let s=new Set;return i.subscribe({query:vr(xr),variables:{devSessionId:r}},{complete:()=>{},error:d=>{let c=d instanceof Error?d.message:String(d);l.warn("runRequested SSE failed: %s; re-registering session",c),t(c)},next:d=>{hr({claim:e,cwd:n,event:d.data?.runRequested,inFlightRunIds:s,pool:o})}},{connected:()=>{a.onConnected()},connecting:d=>{a.onConnecting(d),d&&l.debug("runRequested SSE reconnecting")}})}function hr({claim:e,cwd:n,event:r,inFlightRunIds:t,pool:o}){if(r==null)return;if(t.has(r.runId)){l.warn({runId:r.runId,workflowSlug:r.workflowSlug},"duplicate runRequested event; skipping dispatch");return}t.add(r.runId),process.stdout.write(`ripplo: run ${r.workflowSlug}
|
|
12
|
+
`),G(n);let i=C(n).match(s=>s,s=>{l.error({failure:s,runId:r.runId},"failed to load env for run dispatch; skipping")});if(i==null){t.delete(r.runId);return}let a=br(e(r.runId),r);a.started(),_e({config:i,cwd:n,headed:a.headed,pool:o,runId:r.runId,signal:a.signal,testSlug:r.testSlug,workClass:a.workClass,workflowSlug:r.workflowSlug}).then(s=>{a.finished(s)}).catch(s=>{l.error({err:s,runId:r.runId,workflowSlug:r.workflowSlug},"run execution failed; daemon continuing"),a.finished({detail:s instanceof Error?s.message:String(s),kind:"error"})}).finally(()=>{t.delete(r.runId)})}function br(e,n){return e==null?(l.debug({runId:n.runId,workflowSlug:n.workflowSlug},"dispatching unclaimed run (externally triggered or replayed)"),{headed:!1,signal:new AbortController().signal,workClass:"p0-ui",finished:()=>{},started:()=>{}}):{headed:e.headed,signal:xe(e.token),workClass:"p1-cli",finished:r=>{e.finished(n.runId,r)},started:()=>{e.started(n.runId)}}}function Er(){return Math.floor(Math.random()*2700)+300}function Ne(){let e=!0,n,r=null,t=()=>{r!=null&&(clearTimeout(r),r=null)};return{markUnhealthy:o=>{e=!1,n=o,t()},onConnected:()=>{t(),r=setTimeout(()=>{e=!0,n=void 0,r=null},1e4)},onConnecting:()=>{t()},snapshot:()=>({detail:n,ok:e})}}import Cr from"fs";import Be from"net";import{err as ze,ok as Ir}from"neverthrow";async function Ge({cwd:e,onConnection:n}){z(e);let r=Re(e),t=await Me({onConnection:n,socketPath:r});return t.isOk()||t.error.kind!=="stale-candidate"?t.map($e(r)).mapErr(Ue(r)):await Tr(r)?ze({kind:"already-running",socketPath:r}):(Qe(r),(await Me({onConnection:n,socketPath:r})).map($e(r)).mapErr(Ue(r)))}function Tr(e){return new Promise(n=>{let r=Be.connect(e);r.once("connect",()=>{r.destroy(),n(!0)}),r.once("error",()=>{n(!1)})})}async function Me(e){let n=await Wr(e);return n.kind==="listening"?Ir(n.server):ze(n.error)}function Wr({onConnection:e,socketPath:n}){return new Promise(r=>{let t=Be.createServer(e);t.once("error",o=>{r({error:o.code==="EADDRINUSE"?{kind:"stale-candidate"}:{kind:"listen-failed",message:o.message},kind:"failed"})}),t.listen(n,()=>{r({kind:"listening",server:t})})})}function $e(e){return n=>({socketPath:e,close:()=>{n.close(),Qe(e)}})}function Qe(e){Cr.rmSync(e,{force:!0})}function Ue(e){return n=>n.kind==="stale-candidate"?{kind:"already-running",socketPath:e}:{kind:"bind-failed",message:n.message}}function O(e){return{priority:e,next:()=>null,onResult:()=>{}}}function Je({config:e,executor:n,explore:r,exploreConcurrency:t,pool:o}){return Lr({appUrl:e.appUrl,cwd:e.cwd,explore:r&&n==="local",exploreConcurrency:t,executeTrail:async(i,a)=>(await o).exploreTrail(i,a)})}function Lr({appUrl:e,cwd:n,executeTrail:r,explore:t,exploreConcurrency:o}){let i={notify:()=>{}},a=t?Dr({appUrl:e,cwd:n,executeTrail:r,notifyWork:()=>{i.notify()}}):pe(),s=Fe({exploreConcurrency:o,exploreEnabled:t,now:Date.now,probe:Ar,setTimer:Hr,sources:[O("p0"),O("p1"),a],execute:({job:c,priority:u,signal:m})=>k({headed:!1,workClass:Fr(u),task:()=>c.run(m)})});q(()=>{s.notifyQueueChange()}),i.notify=()=>{s.notifyQueueChange()};let d=t?ue({onChange:c=>{s.setExplorerHolder(c)}}):null;return{status:()=>({explorer:qr({explore:t,holder:s.explorerHolder()}),exploring:s.explorationActive(),progress:a.status()}),stop:()=>{d?.stop(),s.stop(),q(null),a.stop()}}}function Dr({appUrl:e,cwd:n,executeTrail:r,notifyWork:t}){return fe({cwd:n,executeTrail:r,notifyWork:t,loadLockfile:async()=>{let{fingerprint:o,result:i}=await y(n);return i.match(a=>({fingerprint:o,lockfile:a}),()=>null)},probeApp:async()=>await re(e)==null})}function Ar(){let e=ve();return{headedActive:e.headedActive,interactiveActive:e.active,interactiveQueued:e.queued,poolSize:e.poolSize}}function Hr(e,n){let r=setTimeout(e,n);return()=>{clearTimeout(r)}}function Fr(e){switch(e){case"p0":return"p0-ui";case"p1":return"p1-cli";case"p2":return"p2-cover";case"p3":return"p3-explore"}}function qr({explore:e,holder:n}){return e?n?"holder":"standby":"off"}async function Ke({cwd:e,finding:n}){let r={at:new Date().toISOString(),kind:"resolution",signature:n.signature};await F(x(e),[r]).match(()=>{},t=>{l.warn("explore findings log append failed: %s",t.kind)})}async function Ve({cwd:e,finding:n,outcome:r}){let t=r.kind==="clean"?[...r.rows,{at:new Date().toISOString(),kind:"resolution",signature:n.signature}]:r.rows;t.length!==0&&await F(x(e),t).match(()=>{},o=>{l.warn("explore findings log append failed: %s",o.kind)})}function Ye({config:e,cwd:n,pool:r}){let t={cwd:n,executeTrail:(o,i)=>k({headed:!1,workClass:"p1-cli",task:async()=>(await r).exploreTrail(o,i)}),loadLockfile:async()=>{let o=await y(n);return o.result.match(i=>({fingerprint:o.fingerprint,lockfile:i}),()=>null)},pushResolved:o=>ce(e,o,"resolved").catch(i=>{l.warn({error:i},"explore finding status push failed")})};return(o,i)=>_r(t,{findingId:o,signal:i})}async function _r(e,n){let r=await Or(e.cwd,n.findingId);if("reply"in r)return r.reply;let t=await e.loadLockfile();if(t==null)return{kind:"error",reason:"lockfile-unavailable"};let o=jr(t,r.finding);if("reply"in o)return o.reply;let i=await e.executeTrail(o.assign,n.signal),a=await Mr({cwd:e.cwd,finding:r.finding,outcome:i});return(a.kind==="resolved"||a.kind==="unreachable")&&await e.pushResolved(r.finding.signature),a}async function Or(e,n){return se(x(e)).match(r=>{let o=[...ae(r).findings.entries()].find(([a])=>ie(a)===n);if(o==null)return{reply:{kind:"finding-not-found"}};let[,i]=o;return i.resolvedAt!=null?{reply:{kind:"finding-not-found"}}:{finding:i.latest}},()=>({reply:{kind:"unreplayable",reason:"ledger-unreadable"}}))}function jr(e,n){let r=le(e.lockfile,{sweep:!1}).find(o=>o.name===n.baseState);if(r==null)return{reply:{kind:"unreplayable",reason:"base-state-missing"}};let t=Nr(e.lockfile,n);return t==null?{reply:{kind:"unreplayable",reason:"action-missing"}}:{assign:{baseStateTest:r.test,lensId:n.lensId,lockfileFingerprint:e.fingerprint,lockfileHash:V(e.lockfile),maxLength:t.length,shrinkBudget:0,stepRuns:t}}}function Nr(e,n){let t=oe(e).map(a=>`${a.test}#${String(a.index)}`),i=n.trail.map((a,s)=>{let d=t.indexOf(a),c=n.trailParams[s];return d===-1||c==null?null:{idx:d,params:c}}).flatMap(a=>a==null?[]:[a]);return i.length===n.trail.length?i:null}async function Mr({cwd:e,finding:n,outcome:r}){return r.kind==="aborted"?{kind:"aborted"}:r.kind==="error"?$r({cwd:e,finding:n,reason:r.reason}):(await Ve({cwd:e,finding:n,outcome:r}),r.kind==="clean"?{kind:"resolved"}:r.kind==="flaky"?{kind:"flaky"}:Ur(n,r))}async function $r({cwd:e,finding:n,reason:r}){return r==="empty-trail"?(await Ke({cwd:e,finding:n}),{kind:"unreachable"}):{kind:"error",reason:r??"trail-error"}}function Ur(e,n){let r=n.rows.find(o=>o.kind==="finding"),t=r?.kind==="finding"?r.runId:void 0;return r!=null&&r.signature===e.signature?{kind:"still-failing",runId:t}:{kind:"diverged",runId:t}}import{fork as Br}from"child_process";import Xe from"os";import{CancellationTokenSource as Ze,ResponseError as er}from"vscode-jsonrpc/node";function rr(e,n){return()=>{let r=Br(e,["run-worker"],{cwd:n,stdio:["ignore","inherit","inherit","ipc"]});return{connection:He(r),kill:()=>{r.kill("SIGKILL")},onExit:t=>{r.once("exit",t)}}}}function nr(e){let n={closed:!1,lockfileProvider:e.lockfileProvider,nextId:0,size:e.initialSize,spawn:e.spawn,waiters:[],workers:[]};return{close:async()=>{n.closed=!0,await Promise.all([...n.workers].map(r=>j(r,n)))},execute:(r,t)=>Gr(r,t,n),exploreTrail:(r,t)=>Kr(r,t,n),routeSpan:(r,t)=>{let o=n.workers.find(i=>i.runId===r);o?.worker.connection.sendNotification(De,{runId:r,span:t})},setSize:r=>{Yr(r,n)}}}var zr=1e4,or=-32800;async function Gr(e,n,r){let t=await tr(r);if(t.runId=e.runId,!t.alive)return W(t,r),{outcome:{detail:"worker-exit",kind:"error"},serverNotified:!1};let o=new Ze,i=()=>{o.cancel()};n.aborted&&o.cancel(),n.addEventListener("abort",i,{once:!0});try{let a=await t.worker.connection.sendRequest(Te,e,o.token),s=Ee.safeParse(a);return s.success?s.data:{outcome:{detail:"bad-outcome-frame",kind:"error"},serverNotified:!1}}catch(a){return Jr(a,t)}finally{n.removeEventListener("abort",i),o.dispose(),W(t,r)}}async function tr(e){let n=e.workers.find(r=>r.alive&&r.runId===void 0);if(n!=null)return n.runId="pending",n;if(e.workers.length<e.size){let r=Qr(e);return r.runId="pending",await r.ready,r}return new Promise(r=>{e.waiters.push(t=>{t.runId="pending",r(t)})})}function Qr(e){let n=e.spawn(),r={resolve:()=>{}},t={alive:!0,id:e.nextId,ready:new Promise(o=>{r.resolve=o,n.connection.onNotification(Ie,o)}),runId:void 0,worker:n};return e.nextId+=1,n.connection.onRequest(We,async o=>{let i=be.safeParse(o);return i.success?e.lockfileProvider(i.data.fingerprint):{unavailable:"bad-lockfile-request"}}),n.onExit(()=>{t.alive=!1,e.workers=e.workers.filter(o=>o!==t),n.connection.dispose(),r.resolve()}),e.workers.push(t),t}function W(e,n){if(e.runId=void 0,!e.alive||n.closed)return;if(n.workers.length>n.size){j(e,n);return}let r=n.waiters.shift();r?.(e)}async function j(e,n){if(n.workers=n.workers.filter(o=>o!==e),!e.alive)return;let r=new Promise(o=>{e.worker.onExit(o)});await e.worker.connection.sendNotification(Ae).catch(()=>{});let t=setTimeout(()=>{e.worker.kill()},zr);await r,clearTimeout(t)}function Jr(e,n){return e instanceof er&&e.code===or?{outcome:{detail:"aborted",kind:"error"},serverNotified:!1}:n.alive?{outcome:{detail:e instanceof Error?e.message:String(e),kind:"error"},serverNotified:!1}:{outcome:{detail:"worker-exit",kind:"error"},serverNotified:!1}}async function Kr(e,n,r){let t=await tr(r);if(t.runId="explore",!t.alive)return W(t,r),{kind:"error",rows:[],trail:[]};let o=new Ze,i=()=>{o.cancel()};n.aborted&&o.cancel(),n.addEventListener("abort",i,{once:!0});try{let a=await t.worker.connection.sendRequest(Le,e,o.token),s=Ce.safeParse(a);return s.success?s.data:{kind:"error",rows:[],trail:[]}}catch(a){return Vr(a)}finally{n.removeEventListener("abort",i),o.dispose(),W(t,r)}}function Vr(e){return e instanceof er&&e.code===or?{kind:"aborted",rows:[],trail:[]}:{kind:"error",reason:`transport:${e instanceof Error?e.message.slice(0,120):"unknown"}`,rows:[],trail:[]}}function Yr(e,n){n.size=e,e>Xe.availableParallelism()&&l.warn({cores:Xe.availableParallelism(),size:e},"worker pool size exceeds available cores");let r=n.workers.filter(o=>o.alive&&o.runId===void 0),t=n.workers.length-e;r.slice(0,Math.max(0,t)).forEach(o=>{j(o,n)})}import L from"fs";import{graphql as ir}from"gql.tada";import{print as ar}from"graphql";var Xr=ir(`
|
|
13
|
+
subscription HooksPausedWatch($projectId: String!) {
|
|
14
|
+
hooksPausedRequested(projectId: $projectId) {
|
|
15
|
+
paused
|
|
16
|
+
projectId
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
`),Zr=ir(`
|
|
20
|
+
subscription WatchLocalConcurrencyChanged {
|
|
21
|
+
myMaxLocalConcurrentRunsChanged
|
|
22
|
+
}
|
|
23
|
+
`);function sr({pool:e,sseClient:n}){return n.subscribe({query:ar(Zr)},{complete:()=>{},error:r=>{l.error(r,"localConcurrency subscription error")},next:r=>{let t=r.data?.myMaxLocalConcurrentRunsChanged;t!=null&&(T(t),e.setSize(t))}})}function lr({cwd:e,projectId:n,sseClient:r}){return r.subscribe({query:ar(Xr),variables:{projectId:n}},{complete:()=>{},error:t=>{l.error(t,"hooksPaused subscription error")},next:t=>{let o=t.data?.hooksPausedRequested?.paused;o!=null&&N({cwd:e,paused:o})}})}function N({cwd:e,paused:n}){let r=de(e);if(n&&!L.existsSync(r)){L.writeFileSync(r,"");return}!n&&L.existsSync(r)&&L.unlinkSync(r)}var tn=6e4,dr=500,an=15e3,cr=6e4,sn=3,ln=M(`
|
|
24
|
+
mutation HeartbeatDevSessionWatch($id: String!) {
|
|
25
|
+
heartbeatDevSession(id: $id) {
|
|
26
|
+
__typename
|
|
27
|
+
... on DevSession {
|
|
28
|
+
id
|
|
29
|
+
}
|
|
30
|
+
... on DevSessionEndedError {
|
|
31
|
+
message
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
`),dn=M(`
|
|
36
|
+
query WatchLocalConcurrency {
|
|
37
|
+
currentUser {
|
|
38
|
+
id
|
|
39
|
+
maxLocalConcurrentRuns
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
`),cn=M(`
|
|
43
|
+
mutation EndDevSessionWatch($projectId: String!, $cwd: String!) {
|
|
44
|
+
endDevSession(projectId: $projectId, cwd: $cwd) {
|
|
45
|
+
__typename
|
|
46
|
+
... on DevSession {
|
|
47
|
+
id
|
|
48
|
+
}
|
|
49
|
+
... on NoActiveDevSessionError {
|
|
50
|
+
message
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
`);async function at(e){let{executor:n,explore:r,exploreConcurrency:t}=e;In();let o=hn(process.cwd()),i=o.cwd,a=Sn(i),s=xn(),d=Je({config:o,executor:n,explore:r,exploreConcurrency:t,pool:s.pool}),c={handler:()=>{}},u=vn(),m=Ne(),p=he({config:o,cwd:i,executor:n,explorationStatus:d.status,ready:u.promise,replayFinding:Ye({config:o,cwd:i,pool:s.pool}),onShutdownRequest:()=>{c.handler()},sseHealth:()=>m.snapshot()}),w=await Pn({cwd:i,ipc:p,releasePid:a}),S=await A(i);S.isErr()&&(process.stderr.write(`ripplo: ${H(S.error)}
|
|
55
|
+
`),process.exit(1));let h=S.value,f=await ur(()=>_({config:o,cwd:i,lockfile:h}),{config:o,label:"initial sync"}),b=await Wn(o);N({cwd:i,paused:f.hooksPaused});let g=Pe(i);g!=null&&l.info("watching branch %s in %s",g,i);let R=rn({headers:{Authorization:`Bearer ${o.token}`},retry:Oe,retryAttempts:1/0,url:`${o.ripploServerUrl}/graphql`}),v=wn({cwd:i,initialConcurrency:b});s.provide(v);let pr=await fn({cwd:i,pool:v}),$=gn({claim:p.claim,config:o,cwd:i,initialId:f.devSessionId,pool:v,sseClient:R,sseHealth:m}),fr=lr({cwd:i,projectId:o.projectId,sseClient:R}),mr=sr({pool:v,sseClient:R}),yr=yn({config:o,session:$}),gr=Cn(),U=await un({config:o,devSessionId:f.devSessionId,executor:n});u.resolve(),mn({devSessionId:f.devSessionId,executor:n,tunnel:U});let kr=async()=>{yr(),gr(),d.stop(),w.close(),$.stop(),fr(),mr(),await v.close(),await pn(U),await pr.stop().catch(()=>{}),await Promise.race([E({config:o,document:cn,variables:{cwd:o.cwd,projectId:o.projectId}}).catch(()=>{}),new Promise(wr=>setTimeout(wr,3e3))]),a()},P=()=>{kr().finally(()=>process.exit(0))};c.handler=P,process.on("SIGINT",P),process.on("SIGTERM",P),process.on("SIGHUP",P),process.on("SIGBREAK",P),await new Promise(()=>{})}async function un({config:e,devSessionId:n,executor:r}){if(r==="cloud")return qe({config:e,devSessionId:n})}async function pn(e){e!=null&&await e.stop()}function fn({cwd:e,pool:n}){return te({localDir:en.join(e,".ripplo",".local"),writePortFile:!0,onRrwebBatch:()=>{},onSpan:r=>{let t=r.attributes["ripplo.run"];t!=null&&n.routeSpan(t,r)}})}function mn({devSessionId:e,executor:n,tunnel:r}){process.stdout.write(`${ke({devSessionId:e,executor:n,tunnelHostname:r?.hostname,version:Q()})}
|
|
56
|
+
`)}function yn({config:e,session:n}){let r=async()=>{try{let o=await E({config:e,document:ln,variables:{id:n.getId()}});o.heartbeatDevSession?.__typename==="DevSessionEndedError"&&(l.warn("dev session ended server-side (%s); re-registering",o.heartbeatDevSession.message),await n.reregister())}catch(o){l.warn("heartbeat failed: %s",o instanceof Error?o.message:String(o))}},t=setInterval(()=>{r()},an);return()=>{clearInterval(t)}}function gn({claim:e,config:n,cwd:r,initialId:t,pool:o,sseClient:i,sseHealth:a}){let s=t,d=null,c=0,u=0,m=f=>{h(f)},p=()=>je({claim:e,cwd:r,devSessionId:s,onSubscriptionDead:m,pool:o,sseClient:i,sseHealth:a}),w=p(),S=async f=>{let b=Date.now();c=b-u>cr*2?1:c+1,u=b,c>=sn&&a.markUnhealthy(f),await kn(Math.min(1e3*2**(c-1),cr));let g=await A(r);if(g.isErr()){l.error("re-register: compile failed: %s",H(g.error));return}let R=await ur(()=>_({config:n,cwd:r,lockfile:g.value}),{config:n,label:"re-register sync"});w(),s=R.devSessionId,w=p(),l.info("re-registered dev session as %s",s)},h=f=>(d!=null||(d=S(f).finally(()=>{d=null})),d);return{getId:()=>s,reregister:()=>h("dev session ended server-side"),stop:()=>{w()}}}function kn(e){return new Promise(n=>setTimeout(n,e))}function wn({cwd:e,initialConcurrency:n}){return nr({initialSize:n,spawn:rr(Ln(),e),lockfileProvider:async r=>{let t=await y(e);return t.result.isErr()?{unavailable:`daemon-load-failed:${t.result.error.kind}`}:t.fingerprint!==r?{unavailable:"fingerprint-mismatch"}:{lockfileJson:J(K,t.result.value)}}})}function Sn(e){try{return ee({cwd:e,onCompromised:Rn})}catch(n){throw n instanceof Z&&(process.stderr.write(`${we({cwd:n.cwd,pid:n.pid})}
|
|
57
|
+
`),process.exit(1)),n}}function Rn(){l.error("daemon lock compromised; shutting down"),process.stderr.write(`${Se()}
|
|
58
|
+
`),process.exit(1)}function vn(){let e={handler:()=>{}};return{promise:new Promise(r=>{e.handler=r}),resolve:()=>{e.handler()}}}async function Pn({cwd:e,ipc:n,releasePid:r}){return(await Ge({cwd:e,onConnection:n.handleConnection})).match(o=>o,o=>{process.stderr.write(`${me(o)}
|
|
59
|
+
`),r(),process.exit(1)})}function xn(){let e={provide:()=>{}};return{pool:new Promise(r=>{e.provide=r}),provide:r=>{e.provide(r)}}}function hn(e){return C(e).match(n=>n,n=>{process.stderr.write(`${X(n)}
|
|
60
|
+
`),process.exit(1)})}function ur(e,{config:n,label:r}){let t=n.ripploServerUrl.includes("localhost")||n.ripploServerUrl.includes("127.0.0.1");return nn(async()=>{try{return await e()}catch(o){bn({config:n,error:o});let i=o instanceof Error?o.message:String(o);throw En(i)?o:(l.error("%s failed: %s",r,i),new on(i))}},{factor:2,maxTimeout:t?2e3:1e4,minTimeout:t?100:1e3,retries:1/0,onFailedAttempt:({attemptNumber:o,error:i})=>{l.warn("%s attempt %d failed \u2014 retrying: %s",r,o,i.message)}})}function bn({config:e,error:n}){let r=B(n);r==="UNAUTHENTICATED"&&(process.stderr.write(`ripplo: ${ge()}
|
|
61
|
+
`),process.exit(1)),r==="FORBIDDEN"&&(process.stderr.write(`ripplo: ${ye({projectId:e.projectId,serverUrl:e.ripploServerUrl})}
|
|
62
|
+
`),process.exit(1))}function En(e){return e.includes("status 502")||e.includes("ECONNREFUSED")||e.includes("Failed to connect")||e.includes("fetch failed")}function Cn(){D({maxRuns:dr});let e=setInterval(()=>{D({maxRuns:dr})},tn);return()=>{clearInterval(e)}}function In(){process.on("unhandledRejection",e=>{l.error({err:e},"unhandledRejection in watch; continuing")}),process.on("uncaughtException",e=>{l.error({err:e},"uncaughtException in watch; continuing")})}var Tn=4;async function Wn(e){try{let r=(await E({config:e,document:dn,variables:void 0})).currentUser?.maxLocalConcurrentRuns;if(r!=null)return T(r),r}catch(n){l.warn({err:n},"failed to fetch local concurrency setting; using default")}return Tn}function Ln(){let e=process.argv[1];if(e==null)throw new Error("cli entry unavailable");return e}export{at as runDaemon};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import{aa as a,ba as b,ca as c,da as d,ea as e,fa as f,ga as g,ha as h,ia as i,ja as j,ka as k}from"./chunk-R7CQWEBF.js";import"./chunk-IHSHBPJY.js";import"./chunk-7UWDMECF.js";export{b as renderDaemonBindError,g as renderDaemonLockCompromised,f as renderDaemonLockHeld,e as renderDaemonReady,h as renderDaemonStatus,j as renderDaemonVersionNote,i as renderExplorationProgress,d as renderNotSignedIn,c as renderProjectAccessDenied,a as renderTunnelProvisionFailed,k as wireOutcome};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import"./chunk-7UWDMECF.js";var Z={signature:"GIF",version:"89a",trailer:59,extensionIntroducer:33,applicationExtensionLabel:255,graphicControlExtensionLabel:249,imageSeparator:44,signatureSize:3,versionSize:3,globalColorTableFlagMask:128,colorResolutionMask:112,sortFlagMask:8,globalColorTableSizeMask:7,applicationIdentifierSize:8,applicationAuthCodeSize:3,disposalMethodMask:28,userInputFlagMask:2,transparentColorFlagMask:1,localColorTableFlagMask:128,interlaceFlagMask:64,idSortFlagMask:32,localColorTableSizeMask:7};function K(t=256){let e=0,o=new Uint8Array(t);return{get buffer(){return o.buffer},reset(){e=0},bytesView(){return o.subarray(0,e)},bytes(){return o.slice(0,e)},writeByte(n){r(e+1),o[e]=n,e++},writeBytes(n,a=0,i=n.length){r(e+i);for(let c=0;c<i;c++)o[e++]=n[c+a]},writeBytesView(n,a=0,i=n.byteLength){r(e+i),o.set(n.subarray(a,a+i),e),e+=i}};function r(n){var a=o.length;if(a>=n)return;var i=1024*1024;n=Math.max(n,a*(a<i?2:1.125)>>>0),a!=0&&(n=Math.max(n,256));let c=o;o=new Uint8Array(n),e>0&&o.set(c.subarray(0,e),0)}}var D=12,_=5003,$=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535];function tt(t,e,o,r,n=K(512),a=new Uint8Array(256),i=new Int32Array(_),c=new Int32Array(_)){let w=i.length,u=Math.max(2,r);a.fill(0),c.fill(0),i.fill(-1);let f=0,l=0,h=u+1,B=h,y=!1,b=B,s=(1<<b)-1,A=1<<h-1,C=A+1,x=A+2,g=0,m=o[0],F=0;for(let M=w;M<65536;M*=2)++F;F=8-F,n.writeByte(u),v(A);let p=o.length;for(let M=1;M<p;M++)t:{let U=o[M],z=(U<<D)+m,k=U<<F^m;if(i[k]===z){m=c[k];break t}let R=k===0?1:w-k;for(;i[k]>=0;)if(k-=R,k<0&&(k+=w),i[k]===z){m=c[k];break t}v(m),m=U,x<1<<D?(c[k]=x++,i[k]=z):(i.fill(-1),x=A+2,y=!0,v(A))}return v(m),v(C),n.writeByte(0),n.bytesView();function v(M){for(f&=$[l],l>0?f|=M<<l:f=M,l+=b;l>=8;)a[g++]=f&255,g>=254&&(n.writeByte(g),n.writeBytesView(a,0,g),g=0),f>>=8,l-=8;if((x>s||y)&&(y?(b=B,s=(1<<b)-1,y=!1):(++b,s=b===D?1<<b:(1<<b)-1)),M==C){for(;l>0;)a[g++]=f&255,g>=254&&(n.writeByte(g),n.writeBytesView(a,0,g),g=0),f>>=8,l-=8;g>0&&(n.writeByte(g),n.writeBytesView(a,0,g),g=0)}}}var et=tt;function O(t,e,o){return t<<8&63488|e<<2&992|o>>3}function Q(t,e,o,r){return t>>4|e&240|(o&240)<<4|(r&240)<<8}function X(t,e,o){return t>>4<<8|e&240|o>>4}function V(t,e,o){return t<e?e:t>o?o:t}function q(t){return t*t}function j(t,e,o){var r=0,n=1e100;let a=t[e],i=a.cnt,c=a.ac,w=a.rc,u=a.gc,f=a.bc;for(var l=a.fw;l!=0;l=t[l].fw){let B=t[l],y=B.cnt,b=i*y/(i+y);if(!(b>=n)){var h=0;o&&(h+=b*q(B.ac-c),h>=n)||(h+=b*q(B.rc-w),!(h>=n)&&(h+=b*q(B.gc-u),!(h>=n)&&(h+=b*q(B.bc-f),!(h>=n)&&(n=h,r=l))))}}a.err=n,a.nn=r}function H(){return{ac:0,rc:0,gc:0,bc:0,cnt:0,nn:0,fw:0,bk:0,tm:0,mtm:0,err:0}}function rt(t,e){let o=e==="rgb444"?4096:65536,r=new Array(o),n=t.length;if(e==="rgba4444")for(let a=0;a<n;++a){let i=t[a],c=i>>24&255,w=i>>16&255,u=i>>8&255,f=i&255,l=Q(f,u,w,c),h=l in r?r[l]:r[l]=H();h.rc+=f,h.gc+=u,h.bc+=w,h.ac+=c,h.cnt++}else if(e==="rgb444")for(let a=0;a<n;++a){let i=t[a],c=i>>16&255,w=i>>8&255,u=i&255,f=X(u,w,c),l=f in r?r[f]:r[f]=H();l.rc+=u,l.gc+=w,l.bc+=c,l.cnt++}else for(let a=0;a<n;++a){let i=t[a],c=i>>16&255,w=i>>8&255,u=i&255,f=O(u,w,c),l=f in r?r[f]:r[f]=H();l.rc+=u,l.gc+=w,l.bc+=c,l.cnt++}return r}function bt(t,e,o={}){let{format:r="rgb565",clearAlpha:n=!0,clearAlphaColor:a=0,clearAlphaThreshold:i=0,oneBitAlpha:c=!1}=o;if(!t||!t.buffer)throw new Error("quantize() expected RGBA Uint8Array data");if(!(t instanceof Uint8Array)&&!(t instanceof Uint8ClampedArray))throw new Error("quantize() expected RGBA Uint8Array data");let w=new Uint32Array(t.buffer),u=o.useSqrt!==!1,f=r==="rgba4444",l=rt(w,r),h=l.length,B=h-1,y=new Uint32Array(h+1);for(var b=0,s=0;s<h;++s){let d=l[s];if(d!=null){var A=1/d.cnt;f&&(d.ac*=A),d.rc*=A,d.gc*=A,d.bc*=A,l[b++]=d}}q(e)/b<.022&&(u=!1);for(var s=0;s<b-1;++s)l[s].fw=s+1,l[s+1].bk=s,u&&(l[s].cnt=Math.sqrt(l[s].cnt));u&&(l[s].cnt=Math.sqrt(l[s].cnt));var C,x,g;for(s=0;s<b;++s){j(l,s,!1);var m=l[s].err;for(x=++y[0];x>1&&(g=x>>1,!(l[C=y[g]].err<=m));x=g)y[x]=C;y[x]=s}var F=b-e;for(s=0;s<F;){for(var p;;){var v=y[1];if(p=l[v],p.tm>=p.mtm&&l[p.nn].mtm<=p.tm)break;p.mtm==B?v=y[1]=y[y[0]--]:(j(l,v,!1),p.tm=s);var m=l[v].err;for(x=1;(g=x+x)<=y[0]&&(g<y[0]&&l[y[g]].err>l[y[g+1]].err&&g++,!(m<=l[C=y[g]].err));x=g)y[x]=C;y[x]=v}var M=l[p.nn],U=p.cnt,z=M.cnt,A=1/(U+z);f&&(p.ac=A*(U*p.ac+z*M.ac)),p.rc=A*(U*p.rc+z*M.rc),p.gc=A*(U*p.gc+z*M.gc),p.bc=A*(U*p.bc+z*M.bc),p.cnt+=M.cnt,p.mtm=++s,l[M.bk].fw=M.fw,l[M.fw].bk=M.bk,M.mtm=B}let k=[];var R=0;for(s=0;;++R){let d=V(Math.round(l[s].rc),0,255),P=V(Math.round(l[s].gc),0,255),L=V(Math.round(l[s].bc),0,255),S=255;f&&(S=V(Math.round(l[s].ac),0,255),c&&(S=S<=(typeof c=="number"?c:127)?0:255),n&&S<=i&&(d=P=L=a,S=0));let W=f?[d,P,L,S]:[d,P,L];if(nt(k,W)||k.push(W),(s=l[s].fw)==0)break}return k}function nt(t,e){for(let o=0;o<t.length;o++){let r=t[o],n=r[0]===e[0]&&r[1]===e[1]&&r[2]===e[2],a=r.length>=4&&e.length>=4?r[3]===e[3]:!0;if(n&&a)return!0}return!1}function T(t,e){var o=0,r;for(r=0;r<t.length;r++){let n=t[r]-e[r];o+=n*n}return o}function G(t,e){return e>1?Math.round(t/e)*e:t}function gt(t,{roundRGB:e=5,roundAlpha:o=10,oneBitAlpha:r=null}={}){let n=new Uint32Array(t.buffer);for(let a=0;a<n.length;a++){let i=n[a],c=i>>24&255,w=i>>16&255,u=i>>8&255,f=i&255;c=G(c,o),r&&(c=c<=(typeof r=="number"?r:127)?0:255),f=G(f,e),u=G(u,e),w=G(w,e),n[a]=c<<24|w<<16|u<<8|f<<0}}function pt(t,e,o="rgb565"){if(!t||!t.buffer)throw new Error("quantize() expected RGBA Uint8Array data");if(!(t instanceof Uint8Array)&&!(t instanceof Uint8ClampedArray))throw new Error("quantize() expected RGBA Uint8Array data");if(e.length>256)throw new Error("applyPalette() only works with 256 colors or less");let r=new Uint32Array(t.buffer),n=r.length,a=o==="rgb444"?4096:65536,i=new Uint8Array(n),c=new Array(a),w=o==="rgba4444";if(o==="rgba4444")for(let u=0;u<n;u++){let f=r[u],l=f>>24&255,h=f>>16&255,B=f>>8&255,y=f&255,b=Q(y,B,h,l),s=b in c?c[b]:c[b]=at(y,B,h,l,e);i[u]=s}else{let u=o==="rgb444"?X:O;for(let f=0;f<n;f++){let l=r[f],h=l>>16&255,B=l>>8&255,y=l&255,b=u(y,B,h),s=b in c?c[b]:c[b]=it(y,B,h,e);i[f]=s}}return i}function at(t,e,o,r,n){let a=0,i=1e100;for(let c=0;c<n.length;c++){let w=n[c],u=w[3],f=I(u-r);if(f>i)continue;let l=w[0];if(f+=I(l-t),f>i)continue;let h=w[1];if(f+=I(h-e),f>i)continue;let B=w[2];f+=I(B-o),!(f>i)&&(i=f,a=c)}return a}function it(t,e,o,r){let n=0,a=1e100;for(let i=0;i<r.length;i++){let c=r[i],w=c[0],u=I(w-t);if(u>a)continue;let f=c[1];if(u+=I(f-e),u>a)continue;let l=c[2];u+=I(l-o),!(u>a)&&(a=u,n=i)}return n}function Bt(t,e,o=5){if(!t.length||!e.length)return;let r=t.map(i=>i.slice(0,3)),n=o*o,a=t[0].length;for(let i=0;i<e.length;i++){let c=e[i];c.length<a?c=[c[0],c[1],c[2],255]:c.length>a?c=c.slice(0,3):c=c.slice();let w=ot(r,c.slice(0,3),T),u=w[0],f=w[1];f>0&&f<=n&&(t[u]=c)}}function I(t){return t*t}function lt(t,e,o=T){let r=1/0,n=-1;for(let a=0;a<t.length;a++){let i=t[a],c=o(e,i);c<r&&(r=c,n=a)}return n}function ot(t,e,o=T){let r=1/0,n=-1;for(let a=0;a<t.length;a++){let i=t[a],c=o(e,i);c<r&&(r=c,n=a)}return[n,r]}function At(t,e,o=T){return t[lt(t,e,o)]}function ct(t={}){let{initialCapacity:e=4096,auto:o=!0}=t,r=K(e),n=5003,a=new Uint8Array(256),i=new Int32Array(n),c=new Int32Array(n),w=!1;return{reset(){r.reset(),w=!1},finish(){r.writeByte(Z.trailer)},bytes(){return r.bytes()},bytesView(){return r.bytesView()},get buffer(){return r.buffer},get stream(){return r},writeHeader:u,writeFrame(f,l,h,B={}){let{transparent:y=!1,transparentIndex:b=0,delay:s=0,palette:A=null,repeat:C=0,colorDepth:x=8,dispose:g=-1}=B,m=!1;if(o?w||(m=!0,u(),w=!0):m=!!B.first,l=Math.max(0,Math.floor(l)),h=Math.max(0,Math.floor(h)),m){if(!A)throw new Error("First frame must include a { palette } option");ut(r,l,h,A,x),J(r,A),C>=0&&st(r,C)}let F=Math.round(s/10);ft(r,g,F,y,b);let p=!!A&&!m;wt(r,l,h,p?A:null),p&&J(r,A),ht(r,f,l,h,x,a,i,c)}};function u(){Y(r,"GIF89a")}}function ft(t,e,o,r,n){t.writeByte(33),t.writeByte(249),t.writeByte(4),n<0&&(n=0,r=!1);var a,i;r?(a=1,i=2):(a=0,i=0),e>=0&&(i=e&7),i<<=2,t.writeByte(0|i|0|a),E(t,o),t.writeByte(n||0),t.writeByte(0)}function ut(t,e,o,r,n=8){let a=1,i=0,c=N(r.length)-1,w=a<<7|n-1<<4|i<<3|c;E(t,e),E(t,o),t.writeBytes([w,0,0])}function st(t,e){t.writeByte(33),t.writeByte(255),t.writeByte(11),Y(t,"NETSCAPE2.0"),t.writeByte(3),t.writeByte(1),E(t,e),t.writeByte(0)}function J(t,e){let o=1<<N(e.length);for(let r=0;r<o;r++){let n=[0,0,0];r<e.length&&(n=e[r]),t.writeByte(n[0]),t.writeByte(n[1]),t.writeByte(n[2])}}function wt(t,e,o,r){if(t.writeByte(44),E(t,0),E(t,0),E(t,e),E(t,o),r){let n=0,a=0,i=N(r.length)-1;t.writeByte(128|n|a|0|i)}else t.writeByte(0)}function ht(t,e,o,r,n=8,a,i,c){et(o,r,e,n,t,a,i,c)}function E(t,e){t.writeByte(e&255),t.writeByte(e>>8&255)}function Y(t,e){for(var o=0;o<e.length;o++)t.writeByte(e.charCodeAt(o))}function N(t){return Math.max(Math.ceil(Math.log2(t)),1)}var Mt=ct;export{ct as GIFEncoder,pt as applyPalette,Mt as default,At as nearestColor,lt as nearestColorIndex,ot as nearestColorIndexWithDistance,gt as prequantize,bt as quantize,Bt as snapColorsToPalette};
|