build(diagram-render): empty excalidraw's public Firebase config literal in the bundle; declare BUILD_INFO.json's test lane

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
This commit is contained in:
garrytanandcapy-ai[bot] committed 2026-10-26 09:12:12 +00:00
1 parent 126ceba95b
commit 8f2b3873cd
4 files changed
+20 -5

No files matched your search

+1
View File
@@ -5,6 +5,7 @@
"dependencies": {
".github/workflows/**": ["test/pregate-selection.test.ts", "test/free-tests-workflow-wiring.test.ts"],
"scripts/gen-ship-goldens.ts": ["test/host-config.test.ts"],
"lib/diagram-render/dist/BUILD_INFO.json": ["test/diagram-render-drift.test.ts"],
"bun.lock": [],
".gitignore": [],
".gitattributes": [],
+3 -3
View File
@@ -1,8 +1,8 @@
{
"name": "gstack-diagram-render",
"sha256": "4d1c10a04c4af259ec3715a8441d1fbb73ba3fcf808e138d797772af0c4abd1f",
"srcSha256": "07238fae312bc0444f62b0a0a3404a8a38c45cef505aa1528c60a0ded17cbe06",
"bytes": 7885342,
"sha256": "c2d37f9f924baae2a146bc109bf9b4c308d89f49e08b1c35793edc310b579444",
"srcSha256": "0c2c0f262cad7e32aa8afa430024bb7ff1e026e3eb7a182ba9c4744a4d825d64",
"bytes": 7884979,
"bunVersion": "1.4.2",
"deps": {
"@excalidraw/excalidraw": "0.18.1",
+1 -1
View File
@@ -3600,7 +3600,7 @@ Expecting `+wA.join(", ")+", got '"+(this.terminals_[_]||_)+"'";else JA="Parse e
`),fontSize:Math.max(...M.map((U)=>U.fontSize)),color:M.find((U)=>U.color)?.color,verticalAlign:"top"}}R.filter((M)=>{if(L.length>0)return M.section!=="header";return!(Q.label&&R.length===1)}).forEach((M)=>{let U=V6((Q?.x||0)+4,M.y,M.text,{width:M.width,height:M.height,fontSize:M.fontSize,color:M.color,id:fa(),groupId:s,metadata:{classId:o}});u.push(U)})}),{nodes:r,lines:i,text:u}},qWt=(A,e,t,r)=>{let i=Array.from(t.querySelectorAll('.edgePaths path[data-edge="true"]:not([id^="edgeNote"]):not([id*="-cyclic-special-"])'));if(A.length===0)return{arrows:[],text:[]};let u=[],a=[],n=0;return A.forEach((o)=>{let{id1:s,id2:l,relation:g}=o,C=e.find((v)=>v.id===s),B=e.find((v)=>v.id===l);if(!C)throw Error(`parseRelations: Cannot find node with id ${s}`);if(!B)throw Error(`parseRelations: Cannot find node with id ${l}`);let E=UWt(g.lineType),d=cge(g.type1),I=cge(g.type2),h;if(s===l){let v=OWt(s,t);if(!v.length)throw Error(`parseRelations: Cannot find rendered SVG edge for relation ${s} -> ${l}`);h=Qge(v,{strokeStyle:E,startArrowhead:d,endArrowhead:I,label:o.title?{text:o.title}:void 0,start:{type:"rectangle",id:C.id},end:{type:"rectangle",id:B.id}})}else{let v=i[n];if(!v)throw Error(`parseRelations: Cannot find rendered SVG edge for relation ${s} -> ${l}`);n+=1,h=KWt(v,{strokeStyle:E,startArrowhead:d,endArrowhead:I,label:o.title?{text:o.title}:void 0,start:{type:"rectangle",id:C.id},end:{type:"rectangle",id:B.id}})}u.push(h);let{relationTitle1:Q,relationTitle2:p}=o,m=s===l,f=20,D=15,w=15,b,F;if(Q&&Q!=="none"){if(m){let S=Ege(h,"start");if(S)b=S.x,F=S.y}else switch(r){case"TB":if(b=h.startX-f,h.endX<h.startX)b-=w;F=h.startY+D;break;case"BT":if(b=h.startX+f,h.endX>h.startX)b+=w;F=h.startY-D;break;case"LR":if(b=h.startX+f,F=h.startY+D,h.endY>h.startY)F+=w;break;case"RL":if(b=h.startX-f,F=h.startY-D,h.startY>h.endY)F-=w;break;default:b=h.startX-f,F=h.startY+D}b??=h.startX-f,F??=h.startY+D;let v=V6(b,F,Q,{fontSize:16});a.push(v)}if(p&&p!=="none"){if(m){let S=Ege(h,"end");if(S)b=S.x,F=S.y}else switch(r){case"TB":if(b=h.endX+f,h.endX<h.startX)b+=w;F=h.endY-D;break;case"BT":if(b=h.endX-f,h.endX>h.startX)b-=w;F=h.endY+D;break;case"LR":if(b=h.endX-f,F=h.endY-D,h.endY>h.startY)F-=w;break;case"RL":if(b=h.endX+f,F=h.endY+D,h.startY>h.endY)F+=w;break;default:b=h.endX+f,F=h.endY-D}b??=h.endX+f,F??=h.endY+D;let v=V6(b,F,p,{fontSize:16});a.push(v)}}),{arrows:u,text:a}},zWt=(A,e,t)=>{let r=[],i=[];return A.forEach((u,a)=>{let{id:n,text:o,class:s}=u,l=e.querySelector(`#${n}`);if(!l)throw Error(`Node with id ${n} not found!`);let{transformX:g,transformY:C}=jC(l),B=l.firstChild,E=XC(B,"rectangle",{id:n,subtype:"note",label:{text:o}});if(Object.assign(E,{x:E.x+g,y:E.y+C}),r.push(E),s){let d=t.find((D)=>D.id===s);if(!d)throw Error(`class node with id ${s} not found!`);let I=e.querySelector(`path[id="edgeNote${a+1}"][data-edge="true"]`);if(I){i.push(JWt(I,{strokeStyle:"dotted",startArrowhead:null,endArrowhead:null,start:{id:E.id,type:"rectangle"},end:{id:d.id,type:"rectangle"}}));return}let h=E.x+(E.width||0)/2,Q=E.y+(E.height||0),p=h,m=d.y,f=K7(h,Q,p,m,{strokeStyle:"dotted",startArrowhead:null,endArrowhead:null,start:{id:E.id,type:"rectangle"},end:{id:d.id,type:"rectangle"}});i.push(f)}}),{notes:r,connectors:i}},pge=(A,e)=>{let t=A.db,r=t.getDirection?.()||"TB",i=[],u=[],a=[],n=[],o=t.getNamespaces?.()||[],s=t.getClasses?.()||{},l=s instanceof Map?Object.fromEntries(s):s;if(l&&Object.keys(l).length){let h=typeof t.lookUpDomId==="function"?t.lookUpDomId.bind(t):void 0,Q=WWt(l,e,h);i.push(Q.nodes),u.push(...Q.lines),a.push(...Q.text),n.push(...Q.nodes)}let g=t.getRelations?.()||[],{arrows:C,text:B}=qWt(g,n,e,r),E=t.getNotes?.()||[],{notes:d,connectors:I}=zWt(E,e,n);return i.push(d),C.push(...I),a.push(...B),{type:"class",nodes:i,lines:u,arrows:C,text:a,namespaces:o}};var fge=P(()=>{nd();wP();bP={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3,LOLLIPOP:4},lge={LINE:0,DOTTED_LINE:1},Cge=new Set(["triangle_outline","diamond","diamond_outline"])});var mge=18,ZWt=(A)=>{let e={};if(!A)return e;return A.forEach((t)=>{W0(t).forEach(({property:r,value:i})=>{if(r&&i)e[r]=qr(i)})}),e},VWt=(A)=>{if(A===null||A===void 0||A==="")return;let e=typeof A==="number"?A:parseFloat(qr(A));if(!Number.isFinite(e)||e<=0)return;return e},xEA=(A,e)=>{let t=0,r=0,i=A;while(i&&i!==e){let{transformX:u,transformY:a}=jC(i);t+=u,r+=a,i=i.parentElement}return{tx:t,ty:r}},jWt=(A)=>{let e=Array.from(A.querySelectorAll("tspan")),t=e.length?e.map((r)=>r.textContent?.trim()).filter(Boolean).join(`
`):A.textContent?.trim()||"";return go(t)},XWt=(A)=>{let e=A.querySelector("text, foreignObject, div, span, p")||A,t=parseFloat(getComputedStyle(e).fontSize||"");if(!Number.isFinite(t)||t<=0)t=Math.max(12,A.getBBox().height*0.75);return t},$Wt=(A,e,t)=>{let r=jWt(A);if(!r)return null;let i=A.getBBox(),{tx:u,ty:a}=xEA(A,e);return{className:A.getAttribute("class")||"",text:r,x:i.x+u,y:i.y+a,width:i.width,height:i.height,fontSize:XWt(A),color:Z6(A,t)}},Aqt=(A,e,t,r,i,u,a)=>{let{tx:n,ty:o}=xEA(A,e),s=0,l=0,g=0,C=0;if(A.tagName.toLowerCase()==="line")s=Number(A.getAttribute("x1"))+n,l=Number(A.getAttribute("y1"))+o,g=Number(A.getAttribute("x2"))+n,C=Number(A.getAttribute("y2"))+o;else{let E=H7(A);if(!E)return null;s=E.startX+n,l=E.startY+o,g=E.endX+n,C=E.endY+o}let B={type:"line",id:fa(),groupId:t,startX:s,startY:l,endX:g,endY:C,metadata:{entityId:r}};if(i&&q0(i)&&i!=="none")B.strokeColor=i;if(u!==void 0)B.strokeWidth=u;if(a)B.strokeStyle=a;return B},Dge=(A)=>{switch(A?.toLowerCase()){case"one":return"cardinality_one";case"many":return"cardinality_many";case"only_one":return"cardinality_exactly_one";case"one_or_more":return"cardinality_one_or_many";case"zero_or_one":return"cardinality_zero_or_one";case"zero_or_more":return"cardinality_zero_or_many";default:return null}},eqt=(A)=>{switch(A){case"dotted":return"dotted";case"dashed":return"dashed";default:return"solid"}},tqt=(A,e)=>{let t=e.querySelector(`path[id="${A.id}"][data-edge="true"]`);if(t)return[t];if(A.start!==A.end)return[];return[`${A.start}-cyclic-special-1`,`${A.start}-cyclic-special-mid`,`${A.start}-cyclic-special-2`].map((i)=>e.querySelector(`path[id="${i}"][data-edge="true"]`)).filter((i)=>i!==null)},rqt=(A)=>{let e=[];return A.forEach((t)=>{fP(t).forEach((r)=>{let i=e[e.length-1];if(i&&i.x===r.x&&i.y===r.y)return;e.push(r)})}),e},iqt=(A,e)=>{let t=e.querySelector(`[id="${A.id}"]`);if(!t)throw Error(`ER entity ${A.id} not found in rendered SVG`);let r=A.attributes.length?fa():void 0,i=t.getBBox(),{tx:u,ty:a}=xEA(t,e),n=ZWt([...A.cssStyles||[],...A.cssCompiledStyles||[]]),o=qr(n.fill||""),s=qr(n.stroke||""),l=VWt(n["stroke-width"]),g=qr(n["stroke-dasharray"]||""),C=Array.from(t.querySelectorAll("g.label")).map((p)=>$Wt(p,e,n.color)).filter((p)=>p!==null),B=C.find((p)=>p.className.includes("name"))||C[0],E=C.filter((p)=>p!==B),d=B?.text||go(A.alias||A.label||""),I={type:"rectangle",id:A.id,groupId:r,x:i.x+u,y:i.y+a,width:i.width,height:i.height,label:{text:d,fontSize:A.attributes.length?mge:B?.fontSize||16,color:B?.color,textAlign:"center",verticalAlign:A.attributes.length?"top":"middle"},metadata:{entityId:A.id,entityLabel:A.label,entityAlias:A.alias}};if(q0(o)&&o!=="none")I.bgColor=o;if(q0(s)&&s!=="none")I.strokeColor=s;if(l&&Number.isFinite(l)&&l>0)I.strokeWidth=l;if(g&&g!=="none")I.strokeStyle="dashed";let h=Array.from(t.querySelectorAll(".divider path, path.divider, line.divider")).map((p)=>Aqt(p,e,r,A.id,I.strokeColor,I.strokeWidth,I.strokeStyle)).filter((p)=>p!==null),Q=E.map((p)=>V6(p.x,p.y,p.text,{id:fa(),groupId:r,width:p.width,height:p.height,fontSize:mge,color:p.color,metadata:{entityId:A.id}}));return{container:I,lines:h,text:Q}},uqt=(A,e)=>{let t=tqt(A,e);if(!t.length)throw Error(`ER relationship ${A.id} not found in rendered SVG`);let r=rqt(t);if(r.length<2)throw Error(`ER relationship ${A.id} is missing usable path points`);let i=r[0],u=r[r.length-1],a=t[0],n=qr(a.getAttribute("stroke")||getComputedStyle(a).stroke||""),o=Number(a.getAttribute("stroke-width")||getComputedStyle(a).strokeWidth||1),s=K7(i.x,i.y,u.x,u.y,{id:A.id,label:A.label?{text:go(A.label),fontSize:16,textAlign:"center"}:void 0,strokeStyle:eqt(A.pattern),startArrowhead:Dge(A.arrowTypeStart),endArrowhead:Dge(A.arrowTypeEnd),start:{type:"rectangle",id:A.start},end:{type:"rectangle",id:A.end},points:r.map((l)=>[l.x-i.x,l.y-i.y])});if(q0(n)&&n!=="none")s.strokeColor=n;if(Number.isFinite(o)&&o>0)s.strokeWidth=o;return s},yge=(A,e)=>{let t=A.getData(),{nodes:r,edges:i}=t,u=[],a=[],n=[];r.forEach((s)=>{let l=iqt(s,e);u.push(l.container),a.push(...l.lines),n.push(...l.text)});let o=i.map((s)=>uqt(s,e));return{type:"erd",nodes:[u],lines:a,arrows:o,text:n}};var wge=P(()=>{nd();wP()});var Um=(A)=>{let e=qr(A||"");if(!e)return!1;if(e==="none"||e==="transparent"||e==="rgba(0, 0, 0, 0)"||e==="rgba(0,0,0,0)")return!1;return q0(e)},vge=(A,e,t)=>{switch(e){case mi.FILL:case mi.STROKE:if(Um(t))A[e]=qr(t);break;case mi.STROKE_WIDTH:case mi.STROKE_DASHARRAY:if(qr(t))A[e]=qr(t);break}},kge=(A,e,t)=>{if(e===Ko.COLOR&&Um(t))A[Ko.COLOR]=qr(t)},aqt=(A,e,t)=>{if(!A)return;W0(A).forEach(({property:r,value:i})=>{vge(e,r,i),kge(t,r,i)})},nqt=(A,e)=>{if(!A)return;W0(A).forEach(({property:t,value:r})=>{if(t===mi.FILL&&Um(r)){e[Ko.COLOR]=qr(r);return}kge(e,t,r)})},oqt=(A)=>{let e=new Set;return A.filter(Boolean).forEach((t)=>{W0(t||"").forEach(({property:r})=>{e.add(r)})}),e},sqt=(A,e,t)=>{if(!A)return;[[mi.FILL,A.getAttribute("fill")],[mi.STROKE,A.getAttribute("stroke")],[mi.STROKE_WIDTH,A.getAttrLine truncated
`);return dqt(e).join(`
`)},hqt=(A)=>{if(!A.description)return[];return(Array.isArray(A.description)?A.description:[A.description]).map((t)=>go(t)).filter((t)=>t.length>0)},Qqt=(A)=>{let e=new Set,t=(i)=>{if(i)e.add(i);return i},r=(i)=>{let u=i.find((a)=>!e.has(a));return t(u||null)};return(i)=>{let u=[`[id='${i.domId}']`,`[id='${i.id}']`,`[data-id='${i.id}']`];for(let a of u){let n=A.querySelector(a);if(n)return t(n)}switch(i.shape){case"divider":return r(Array.from(A.querySelectorAll("g.statediagram-cluster-alt")));case"stateStart":return r(Array.from(A.querySelectorAll("g.node.default")).filter((a)=>a.querySelector("circle.state-start")));case"stateEnd":return r(Array.from(A.querySelectorAll("g.node.default")).filter((a)=>!a.querySelector("circle.state-start")));default:return null}}},pqt=(A,e)=>{switch(e){case"roundedWithTitle":return A.querySelector("rect.outer")||A.querySelector("rect")||A;case"divider":return A.querySelector("rect.divider")||A.querySelector("rect")||A;case"rectWithTitle":return A.querySelector("rect.outer")||A.querySelector("rect")||A;case"stateStart":return SEA(Array.from(A.querySelectorAll("circle, ellipse, path")),"largest")||A;case"stateEnd":return SEA(Array.from(A.querySelectorAll("circle, ellipse, path")),"largest")||A;case"choice":case"fork":case"join":case"note":case"rect":default:return A.querySelector("rect, path, circle, ellipse, polygon")||A}},fqt=(A,e,t)=>{let r=t(A);if(!r)throw Error(`State node element not found for "${A.id}"`);let i=pqt(r,A.shape),u={},a={},n=[A.labelStyle,...A.cssCompiledStyles||[],...A.cssStyles||[]],o=oqt(n);n.filter(Boolean).forEach((l)=>{aqt(l,u,a)}),sqt(i,u,o),lqt(r,a,o);let s=gqt(i,e);return{id:A.id,shape:A.shape,text:Iqt(A),description:hqt(A),x:s.x,y:s.y,width:s.width,height:s.height,parentId:A.parentId,position:A.position,containerStyle:u,labelStyle:a,dividerLine:A.shape==="rectWithTitle"?cqt(r,e):void 0,endInnerColor:A.shape==="stateEnd"?Eqt(r,o):void 0,isRenderable:A.shape!=="noteGroup"}},mqt=(A,e)=>{let t=e.querySelector(`[id='${A.id}']`);if(!t)return null;let{tx:r,ty:i}=LEA(t,e),u=mP(t,{x:r,y:i},"MCL");if(u.reflectionPoints.length<2)return null;let a={},n=(s,l)=>{switch(s){case mi.STROKE:if(Um(l))a.strokeColor=qr(l);break;case mi.STROKE_WIDTH:{let g=parseFloat(qr(l));if(Number.isFinite(g)&&g>0)a.strokeWidth=g;break}case mi.STROKE_DASHARRAY:if(qr(l))a.strokeStyle="dashed";break}};[A.style].filter(Boolean).forEach((s)=>{W0(s||"").forEach(({property:l,value:g})=>{n(l,g)})});let o=A.arrowhead==="none"||A.classes?.includes("note-edge");return{id:A.id,start:A.start,end:A.end,text:go(A.label||""),...u,strokeColor:a.strokeColor,strokeWidth:a.strokeWidth,strokeStyle:o?"dashed":a.strokeStyle,isNoteEdge:o}},Fge=(A,e)=>{let{nodes:t,edges:r}=A.getData(),i=Qqt(e);return{type:"state",nodes:t.map((u)=>fqt(u,e,i)),edges:r.map((u)=>mqt(u,e)).filter((u)=>u!==null)}};var xge=P(()=>{G7()});var Sge,Lge=(A)=>{let e=Sge.then(A,A);return Sge=e.then(()=>{return},()=>{return}),e};var Rge=P(()=>{Sge=Promise.resolve()});var Nge=null,Dqt=0,yqt=(A)=>JSON.stringify(A),Gge=(A)=>{let e=A.querySelector("svg");if(!e)throw Error("SVG element not found");let t=e.getBoundingClientRect(),{width:r,height:i}=t;e.setAttribute("width",`${r}`),e.setAttribute("height",`${i}`);let u="image/svg+xml",a=unescape(encodeURIComponent(e.outerHTML)),o=`data:image/svg+xml;base64,${btoa(a)}`;return{type:"graphImage",mimeType:u,dataURL:o,width:r,height:i}},Uge=async(A,e=N7)=>Lge(async()=>{let t=e.themeVariables?.fontSize??N7.themeVariables.fontSize,r={...N7,...e,fontSize:t,themeVariables:{...N7.themeVariables,...e.themeVariables,fontSize:t}},i=yqt(r);if(i!==Nge)xm.initialize(r),Nge=i;let u=await xm.mermaidAPI.getDiagramFromText(zle(A)),a=`mermaid-to-excalidraw-${Dqt++}`,n=document.createElement("div");n.setAttribute("style","opacity: 0; position: fixed; z-index: -1; left: -99999px; top: -99999px;");let o=`${a}-container`;n.id=o,document.getElementById(o)?.remove(),document.body.appendChild(n);try{let{svg:s}=await xm.render(a,A,n);n.innerHTML=s;let l;try{switch(u.type){case"flowchart-v2":case"graph":{l=tge(u.db,n);break}case"sequence":{l=oge(u,n);break}case"class":case"classDiagram":{l=pge(u,n);break}case"er":{l=yge(u.db,n);break}case"state":case"stateDiagram":{l=Fge(u.db,n);break}default:l=Gge(n)}}catch(g){console.error("Error processing Mermaid diagram:",g),l=Gge(n)}return l}finally{n.remove()}});var Mge=P(()=>{hEA();Sm();rge();sge();fge();wge();xge();Rge()});var Tge={};yt(Tge,{parseMermaidToExcalidraw:()=>vP});var vP=async(A,e)=>{let t=e||{},r=parseInt(t.themeVariables?.fontSize??"")||y1,i=await Uge(A,{...t,themeVariables:{...t.themeVariables}});return Zle(i,{fontSize:r})};var kP=P(()=>{Sm();Vle();Mge()});var Qr;var j6=P(()=>{Qr={VITE_APP_BACKEND_V2_GET_URL:"https://json.excalidraw.com/api/v2/",VITE_APP_BACKEND_V2_POST_URL:"https://json.excalidraw.com/api/v2/post/",VITE_APP_LIBRARY_URL:"https://libraries.excalidraw.com",VITE_APP_LIBRARY_BACKEND:"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/librLine truncated
`)},hqt=(A)=>{if(!A.description)return[];return(Array.isArray(A.description)?A.description:[A.description]).map((t)=>go(t)).filter((t)=>t.length>0)},Qqt=(A)=>{let e=new Set,t=(i)=>{if(i)e.add(i);return i},r=(i)=>{let u=i.find((a)=>!e.has(a));return t(u||null)};return(i)=>{let u=[`[id='${i.domId}']`,`[id='${i.id}']`,`[data-id='${i.id}']`];for(let a of u){let n=A.querySelector(a);if(n)return t(n)}switch(i.shape){case"divider":return r(Array.from(A.querySelectorAll("g.statediagram-cluster-alt")));case"stateStart":return r(Array.from(A.querySelectorAll("g.node.default")).filter((a)=>a.querySelector("circle.state-start")));case"stateEnd":return r(Array.from(A.querySelectorAll("g.node.default")).filter((a)=>!a.querySelector("circle.state-start")));default:return null}}},pqt=(A,e)=>{switch(e){case"roundedWithTitle":return A.querySelector("rect.outer")||A.querySelector("rect")||A;case"divider":return A.querySelector("rect.divider")||A.querySelector("rect")||A;case"rectWithTitle":return A.querySelector("rect.outer")||A.querySelector("rect")||A;case"stateStart":return SEA(Array.from(A.querySelectorAll("circle, ellipse, path")),"largest")||A;case"stateEnd":return SEA(Array.from(A.querySelectorAll("circle, ellipse, path")),"largest")||A;case"choice":case"fork":case"join":case"note":case"rect":default:return A.querySelector("rect, path, circle, ellipse, polygon")||A}},fqt=(A,e,t)=>{let r=t(A);if(!r)throw Error(`State node element not found for "${A.id}"`);let i=pqt(r,A.shape),u={},a={},n=[A.labelStyle,...A.cssCompiledStyles||[],...A.cssStyles||[]],o=oqt(n);n.filter(Boolean).forEach((l)=>{aqt(l,u,a)}),sqt(i,u,o),lqt(r,a,o);let s=gqt(i,e);return{id:A.id,shape:A.shape,text:Iqt(A),description:hqt(A),x:s.x,y:s.y,width:s.width,height:s.height,parentId:A.parentId,position:A.position,containerStyle:u,labelStyle:a,dividerLine:A.shape==="rectWithTitle"?cqt(r,e):void 0,endInnerColor:A.shape==="stateEnd"?Eqt(r,o):void 0,isRenderable:A.shape!=="noteGroup"}},mqt=(A,e)=>{let t=e.querySelector(`[id='${A.id}']`);if(!t)return null;let{tx:r,ty:i}=LEA(t,e),u=mP(t,{x:r,y:i},"MCL");if(u.reflectionPoints.length<2)return null;let a={},n=(s,l)=>{switch(s){case mi.STROKE:if(Um(l))a.strokeColor=qr(l);break;case mi.STROKE_WIDTH:{let g=parseFloat(qr(l));if(Number.isFinite(g)&&g>0)a.strokeWidth=g;break}case mi.STROKE_DASHARRAY:if(qr(l))a.strokeStyle="dashed";break}};[A.style].filter(Boolean).forEach((s)=>{W0(s||"").forEach(({property:l,value:g})=>{n(l,g)})});let o=A.arrowhead==="none"||A.classes?.includes("note-edge");return{id:A.id,start:A.start,end:A.end,text:go(A.label||""),...u,strokeColor:a.strokeColor,strokeWidth:a.strokeWidth,strokeStyle:o?"dashed":a.strokeStyle,isNoteEdge:o}},Fge=(A,e)=>{let{nodes:t,edges:r}=A.getData(),i=Qqt(e);return{type:"state",nodes:t.map((u)=>fqt(u,e,i)),edges:r.map((u)=>mqt(u,e)).filter((u)=>u!==null)}};var xge=P(()=>{G7()});var Sge,Lge=(A)=>{let e=Sge.then(A,A);return Sge=e.then(()=>{return},()=>{return}),e};var Rge=P(()=>{Sge=Promise.resolve()});var Nge=null,Dqt=0,yqt=(A)=>JSON.stringify(A),Gge=(A)=>{let e=A.querySelector("svg");if(!e)throw Error("SVG element not found");let t=e.getBoundingClientRect(),{width:r,height:i}=t;e.setAttribute("width",`${r}`),e.setAttribute("height",`${i}`);let u="image/svg+xml",a=unescape(encodeURIComponent(e.outerHTML)),o=`data:image/svg+xml;base64,${btoa(a)}`;return{type:"graphImage",mimeType:u,dataURL:o,width:r,height:i}},Uge=async(A,e=N7)=>Lge(async()=>{let t=e.themeVariables?.fontSize??N7.themeVariables.fontSize,r={...N7,...e,fontSize:t,themeVariables:{...N7.themeVariables,...e.themeVariables,fontSize:t}},i=yqt(r);if(i!==Nge)xm.initialize(r),Nge=i;let u=await xm.mermaidAPI.getDiagramFromText(zle(A)),a=`mermaid-to-excalidraw-${Dqt++}`,n=document.createElement("div");n.setAttribute("style","opacity: 0; position: fixed; z-index: -1; left: -99999px; top: -99999px;");let o=`${a}-container`;n.id=o,document.getElementById(o)?.remove(),document.body.appendChild(n);try{let{svg:s}=await xm.render(a,A,n);n.innerHTML=s;let l;try{switch(u.type){case"flowchart-v2":case"graph":{l=tge(u.db,n);break}case"sequence":{l=oge(u,n);break}case"class":case"classDiagram":{l=pge(u,n);break}case"er":{l=yge(u.db,n);break}case"state":case"stateDiagram":{l=Fge(u.db,n);break}default:l=Gge(n)}}catch(g){console.error("Error processing Mermaid diagram:",g),l=Gge(n)}return l}finally{n.remove()}});var Mge=P(()=>{hEA();Sm();rge();sge();fge();wge();xge();Rge()});var Tge={};yt(Tge,{parseMermaidToExcalidraw:()=>vP});var vP=async(A,e)=>{let t=e||{},r=parseInt(t.themeVariables?.fontSize??"")||y1,i=await Uge(A,{...t,themeVariables:{...t.themeVariables}});return Zle(i,{fontSize:r})};var kP=P(()=>{Sm();Vle();Mge()});var Qr;var j6=P(()=>{Qr={VITE_APP_BACKEND_V2_GET_URL:"https://json.excalidraw.com/api/v2/",VITE_APP_BACKEND_V2_POST_URL:"https://json.excalidraw.com/api/v2/post/",VITE_APP_LIBRARY_URL:"https://libraries.excalidraw.com",VITE_APP_LIBRARY_BACKEND:"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/librLine truncated
/WvuKSOJxiw6AR/ZcE3eFQWM/mbFdhQgyK8eHGkKQifKzH1xUZjCxyXcxW6ZO02t
kPOPxhz+nxUrIoWCD/V4NGmUA1lxwHuO21HN1gzKrN3xHg5EGjyouR9vibT9VDGF
gq6+4Ic/kJX+AD2MM7Yre2+FsOdysrmuW2Fu3ahuC1uQE7pOe1j0k7auNP0y1q53
+15 -1
View File
@@ -42,8 +42,22 @@ if (!result.success) {
}
const js = await result.outputs[0].text();
// @excalidraw/excalidraw's npm bundle carries excalidraw.com's public Firebase
// client config (an `AIza…` key) in an env literal nothing in the package
// reads. The offline page never opens a collab session, and a key-shaped
// literal in a committed file fails the pre-gate secret scan on every rebuild,
// so the literal is emptied. Exactly one match is expected: a bump that changes
// the shape must fail here rather than put the key back silently.
const FIREBASE_CONFIG = /VITE_APP_FIREBASE_CONFIG:'\{[^']*\}'/g;
const firebaseHits = js.match(FIREBASE_CONFIG)?.length ?? 0;
if (firebaseHits !== 1) {
console.error(`expected exactly one VITE_APP_FIREBASE_CONFIG literal in the excalidraw bundle, found ${firebaseHits}; update the strip rule in scripts/build.ts`);
process.exit(1);
}
const strippedJs = js.replace(FIREBASE_CONFIG, "VITE_APP_FIREBASE_CONFIG:'{}'");
// Escape inline-script terminators (see header note).
const inlineJs = js.replaceAll("</scri", "<\\/scri");
const inlineJs = strippedJs.replaceAll("</scri", "<\\/scri");
const head = `<!doctype html>
<html>