@chrome-acp/proxy-server 1.0.11 → 1.0.13
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/cli/app.d.ts.map +1 -1
- package/dist/cli/app.js +4 -1
- package/dist/cli/app.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +73 -13
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
- package/public/assets/{architectureDiagram-VXUJARFQ-XT5vbOhB.js → architectureDiagram-VXUJARFQ-sCkIxoin.js} +2 -2
- package/public/assets/{architectureDiagram-VXUJARFQ-XT5vbOhB.js.map → architectureDiagram-VXUJARFQ-sCkIxoin.js.map} +1 -1
- package/public/assets/{blockDiagram-VD42YOAC-DLFcIcr7.js → blockDiagram-VD42YOAC-iT0EVpEs.js} +2 -2
- package/public/assets/{blockDiagram-VD42YOAC-DLFcIcr7.js.map → blockDiagram-VD42YOAC-iT0EVpEs.js.map} +1 -1
- package/public/assets/{c4Diagram-YG6GDRKO-OYGPPbbp.js → c4Diagram-YG6GDRKO-FJvkcwxD.js} +2 -2
- package/public/assets/{c4Diagram-YG6GDRKO-OYGPPbbp.js.map → c4Diagram-YG6GDRKO-FJvkcwxD.js.map} +1 -1
- package/public/assets/channel-CyLd3bNA.js +2 -0
- package/public/assets/{channel-C-TQis6S.js.map → channel-CyLd3bNA.js.map} +1 -1
- package/public/assets/{chunk-ABZYJK2D-C5l8JSxq.js → chunk-ABZYJK2D-CNhdKuqi.js} +3 -3
- package/public/assets/{chunk-ABZYJK2D-C5l8JSxq.js.map → chunk-ABZYJK2D-CNhdKuqi.js.map} +1 -1
- package/public/assets/{chunk-ATLVNIR6-DJGS9xqy.js → chunk-ATLVNIR6-CbO2X_Tw.js} +2 -2
- package/public/assets/{chunk-ATLVNIR6-DJGS9xqy.js.map → chunk-ATLVNIR6-CbO2X_Tw.js.map} +1 -1
- package/public/assets/{chunk-B4BG7PRW-gDha-duc.js → chunk-B4BG7PRW-BaHtw4gW.js} +2 -2
- package/public/assets/{chunk-B4BG7PRW-gDha-duc.js.map → chunk-B4BG7PRW-BaHtw4gW.js.map} +1 -1
- package/public/assets/{chunk-DI55MBZ5-Cj4kDgD2.js → chunk-DI55MBZ5-2htM0VVO.js} +2 -2
- package/public/assets/{chunk-DI55MBZ5-Cj4kDgD2.js.map → chunk-DI55MBZ5-2htM0VVO.js.map} +1 -1
- package/public/assets/{chunk-EXTU4WIE-DOOS0Mse.js → chunk-EXTU4WIE-C_bM8CPH.js} +2 -2
- package/public/assets/{chunk-EXTU4WIE-DOOS0Mse.js.map → chunk-EXTU4WIE-C_bM8CPH.js.map} +1 -1
- package/public/assets/{chunk-JA3XYJ7Z-CJB6qwwg.js → chunk-JA3XYJ7Z-CGuln6zv.js} +2 -2
- package/public/assets/{chunk-JA3XYJ7Z-CJB6qwwg.js.map → chunk-JA3XYJ7Z-CGuln6zv.js.map} +1 -1
- package/public/assets/{chunk-JZLCHNYA-Bude0Tz9.js → chunk-JZLCHNYA-B8Ldycwo.js} +2 -2
- package/public/assets/{chunk-JZLCHNYA-Bude0Tz9.js.map → chunk-JZLCHNYA-B8Ldycwo.js.map} +1 -1
- package/public/assets/{chunk-N4CR4FBY-DGM8cqEA.js → chunk-N4CR4FBY-DAPshrUE.js} +3 -3
- package/public/assets/{chunk-N4CR4FBY-DGM8cqEA.js.map → chunk-N4CR4FBY-DAPshrUE.js.map} +1 -1
- package/public/assets/{chunk-QN33PNHL-gpj_VYvm.js → chunk-QN33PNHL-BG2wK195.js} +2 -2
- package/public/assets/{chunk-QN33PNHL-gpj_VYvm.js.map → chunk-QN33PNHL-BG2wK195.js.map} +1 -1
- package/public/assets/{chunk-QXUST7PY-C6ghehBu.js → chunk-QXUST7PY-BOQY0Xfy.js} +2 -2
- package/public/assets/{chunk-QXUST7PY-C6ghehBu.js.map → chunk-QXUST7PY-BOQY0Xfy.js.map} +1 -1
- package/public/assets/{chunk-S3R3BYOJ-CT_-fuX8.js → chunk-S3R3BYOJ-lQHMbpG7.js} +2 -2
- package/public/assets/{chunk-S3R3BYOJ-CT_-fuX8.js.map → chunk-S3R3BYOJ-lQHMbpG7.js.map} +1 -1
- package/public/assets/{chunk-TZMSLE5B-BDUbzQ8i.js → chunk-TZMSLE5B-Ddu4HD6D.js} +2 -2
- package/public/assets/{chunk-TZMSLE5B-BDUbzQ8i.js.map → chunk-TZMSLE5B-Ddu4HD6D.js.map} +1 -1
- package/public/assets/classDiagram-2ON5EDUG-DXiWlO2N.js +2 -0
- package/public/assets/{classDiagram-2ON5EDUG-BsYidIMb.js.map → classDiagram-2ON5EDUG-DXiWlO2N.js.map} +1 -1
- package/public/assets/classDiagram-v2-WZHVMYZB-CfVsna1C.js +2 -0
- package/public/assets/{classDiagram-v2-WZHVMYZB-7SoDg2VR.js.map → classDiagram-v2-WZHVMYZB-CfVsna1C.js.map} +1 -1
- package/public/assets/clone-BkO8YVlC.js +2 -0
- package/public/assets/{clone-CbWnVDR5.js.map → clone-BkO8YVlC.js.map} +1 -1
- package/public/assets/{code-block-IT6T5CEO-CfsMtPBR.js → code-block-IT6T5CEO-RwvK23k6.js} +2 -2
- package/public/assets/{code-block-IT6T5CEO-CfsMtPBR.js.map → code-block-IT6T5CEO-RwvK23k6.js.map} +1 -1
- package/public/assets/{dagre-6UL2VRFP-B6iR6NZe.js → dagre-6UL2VRFP-C9Ozm0MP.js} +2 -2
- package/public/assets/{dagre-6UL2VRFP-B6iR6NZe.js.map → dagre-6UL2VRFP-C9Ozm0MP.js.map} +1 -1
- package/public/assets/{dagre-EJDXa3E7.js → dagre-Dt0NDwrT.js} +2 -2
- package/public/assets/{dagre-EJDXa3E7.js.map → dagre-Dt0NDwrT.js.map} +1 -1
- package/public/assets/{diagram-PSM6KHXK-zhsJSeuB.js → diagram-PSM6KHXK-B-9CxbnI.js} +2 -2
- package/public/assets/{diagram-PSM6KHXK-zhsJSeuB.js.map → diagram-PSM6KHXK-B-9CxbnI.js.map} +1 -1
- package/public/assets/{diagram-QEK2KX5R-Co66CAEn.js → diagram-QEK2KX5R-WcE69a1G.js} +2 -2
- package/public/assets/{diagram-QEK2KX5R-Co66CAEn.js.map → diagram-QEK2KX5R-WcE69a1G.js.map} +1 -1
- package/public/assets/{diagram-S2PKOQOG-DiMADWLA.js → diagram-S2PKOQOG-qTE7kYb8.js} +2 -2
- package/public/assets/{diagram-S2PKOQOG-DiMADWLA.js.map → diagram-S2PKOQOG-qTE7kYb8.js.map} +1 -1
- package/public/assets/{erDiagram-Q2GNP2WA-DuvxJhfn.js → erDiagram-Q2GNP2WA-CsrooKbE.js} +2 -2
- package/public/assets/{erDiagram-Q2GNP2WA-DuvxJhfn.js.map → erDiagram-Q2GNP2WA-CsrooKbE.js.map} +1 -1
- package/public/assets/{flowDiagram-NV44I4VS-B7bAKMJi.js → flowDiagram-NV44I4VS-BGTyi6l5.js} +2 -2
- package/public/assets/{flowDiagram-NV44I4VS-B7bAKMJi.js.map → flowDiagram-NV44I4VS-BGTyi6l5.js.map} +1 -1
- package/public/assets/{ganttDiagram-JELNMOA3-IQRNHB_J.js → ganttDiagram-JELNMOA3-DN7V6mNH.js} +2 -2
- package/public/assets/{ganttDiagram-JELNMOA3-IQRNHB_J.js.map → ganttDiagram-JELNMOA3-DN7V6mNH.js.map} +1 -1
- package/public/assets/{gitGraphDiagram-NY62KEGX-DRnj3yjR.js → gitGraphDiagram-NY62KEGX-DIySZYvd.js} +2 -2
- package/public/assets/{gitGraphDiagram-NY62KEGX-DRnj3yjR.js.map → gitGraphDiagram-NY62KEGX-DIySZYvd.js.map} +1 -1
- package/public/assets/{graphlib-DdgjkuSE.js → graphlib-DTtyen5g.js} +2 -2
- package/public/assets/{graphlib-DdgjkuSE.js.map → graphlib-DTtyen5g.js.map} +1 -1
- package/public/assets/{infoDiagram-WHAUD3N6-BNobr0SN.js → infoDiagram-WHAUD3N6-Bv-GY92Y.js} +2 -2
- package/public/assets/{infoDiagram-WHAUD3N6-BNobr0SN.js.map → infoDiagram-WHAUD3N6-Bv-GY92Y.js.map} +1 -1
- package/public/assets/{journeyDiagram-XKPGCS4Q-DO0UQpgB.js → journeyDiagram-XKPGCS4Q-DW6RNfq2.js} +2 -2
- package/public/assets/{journeyDiagram-XKPGCS4Q-DO0UQpgB.js.map → journeyDiagram-XKPGCS4Q-DW6RNfq2.js.map} +1 -1
- package/public/assets/{kanban-definition-3W4ZIXB7-Jpay4_QZ.js → kanban-definition-3W4ZIXB7-CWT846-C.js} +2 -2
- package/public/assets/{kanban-definition-3W4ZIXB7-Jpay4_QZ.js.map → kanban-definition-3W4ZIXB7-CWT846-C.js.map} +1 -1
- package/public/assets/katex-DJMyQU16.js +1 -0
- package/public/assets/{line-BHjlwlMB.js → line-B6Rb3qg4.js} +2 -2
- package/public/assets/{line-BHjlwlMB.js.map → line-B6Rb3qg4.js.map} +1 -1
- package/public/assets/{main-PSzBtxbq.js → main-BMydeOxF.js} +68 -68
- package/public/assets/main-BMydeOxF.js.map +1 -0
- package/public/assets/main-CdjS9337.css +2 -0
- package/public/assets/{mermaid-VLURNSYL-BR8F8GU8.js → mermaid-VLURNSYL-ChlNLhSf.js} +1 -1
- package/public/assets/{mermaid.core-DQE-7lmT.js → mermaid.core-RqJdZ0fi.js} +4 -4
- package/public/assets/{mermaid.core-DQE-7lmT.js.map → mermaid.core-RqJdZ0fi.js.map} +1 -1
- package/public/assets/{mindmap-definition-VGOIOE7T-DS5SVw-k.js → mindmap-definition-VGOIOE7T-N5RK9_nf.js} +2 -2
- package/public/assets/{mindmap-definition-VGOIOE7T-DS5SVw-k.js.map → mindmap-definition-VGOIOE7T-N5RK9_nf.js.map} +1 -1
- package/public/assets/{pieDiagram-ADFJNKIX-CFAhlPkw.js → pieDiagram-ADFJNKIX-C3so7eY9.js} +2 -2
- package/public/assets/{pieDiagram-ADFJNKIX-CFAhlPkw.js.map → pieDiagram-ADFJNKIX-C3so7eY9.js.map} +1 -1
- package/public/assets/{quadrantDiagram-AYHSOK5B-CT_2FVkC.js → quadrantDiagram-AYHSOK5B-B9rusor8.js} +2 -2
- package/public/assets/{quadrantDiagram-AYHSOK5B-CT_2FVkC.js.map → quadrantDiagram-AYHSOK5B-B9rusor8.js.map} +1 -1
- package/public/assets/{requirementDiagram-UZGBJVZJ-Bpk1h2q4.js → requirementDiagram-UZGBJVZJ-W_vTa6sR.js} +2 -2
- package/public/assets/{requirementDiagram-UZGBJVZJ-Bpk1h2q4.js.map → requirementDiagram-UZGBJVZJ-W_vTa6sR.js.map} +1 -1
- package/public/assets/{sankeyDiagram-TZEHDZUN-CHlg_2in.js → sankeyDiagram-TZEHDZUN-oekRPPoE.js} +2 -2
- package/public/assets/{sankeyDiagram-TZEHDZUN-CHlg_2in.js.map → sankeyDiagram-TZEHDZUN-oekRPPoE.js.map} +1 -1
- package/public/assets/{sequenceDiagram-WL72ISMW-CaC09QcI.js → sequenceDiagram-WL72ISMW-Cln9cEgi.js} +2 -2
- package/public/assets/{sequenceDiagram-WL72ISMW-CaC09QcI.js.map → sequenceDiagram-WL72ISMW-Cln9cEgi.js.map} +1 -1
- package/public/assets/{stateDiagram-FKZM4ZOC-usQJ_ny0.js → stateDiagram-FKZM4ZOC-DNskec5X.js} +2 -2
- package/public/assets/{stateDiagram-FKZM4ZOC-usQJ_ny0.js.map → stateDiagram-FKZM4ZOC-DNskec5X.js.map} +1 -1
- package/public/assets/stateDiagram-v2-4FDKWEC3-CHFN0nby.js +2 -0
- package/public/assets/{stateDiagram-v2-4FDKWEC3-BX_iMt2G.js.map → stateDiagram-v2-4FDKWEC3-CHFN0nby.js.map} +1 -1
- package/public/assets/{timeline-definition-IT6M3QCI-FpeXVspc.js → timeline-definition-IT6M3QCI-Dc6yDbAi.js} +2 -2
- package/public/assets/{timeline-definition-IT6M3QCI-FpeXVspc.js.map → timeline-definition-IT6M3QCI-Dc6yDbAi.js.map} +1 -1
- package/public/assets/{xychartDiagram-PRI3JC2R-b8ZjczEa.js → xychartDiagram-PRI3JC2R-LVl4w1dh.js} +2 -2
- package/public/assets/{xychartDiagram-PRI3JC2R-b8ZjczEa.js.map → xychartDiagram-PRI3JC2R-LVl4w1dh.js.map} +1 -1
- package/public/index.html +2 -2
- package/public/assets/channel-C-TQis6S.js +0 -2
- package/public/assets/classDiagram-2ON5EDUG-BsYidIMb.js +0 -2
- package/public/assets/classDiagram-v2-WZHVMYZB-7SoDg2VR.js +0 -2
- package/public/assets/clone-CbWnVDR5.js +0 -2
- package/public/assets/katex-D-DHO72r.js +0 -1
- package/public/assets/main-L2l67V_s.css +0 -2
- package/public/assets/main-PSzBtxbq.js.map +0 -1
- package/public/assets/stateDiagram-v2-4FDKWEC3-BX_iMt2G.js +0 -2
package/public/assets/{gitGraphDiagram-NY62KEGX-DRnj3yjR.js → gitGraphDiagram-NY62KEGX-DIySZYvd.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import"./shiki-BE3D5Aiv.js";import"./chunk-FPAJGGOC-C1aXi2xg.js";import"./chunk-O7ZBX7Z2-BeCHiDgv.js";import"./chunk-S6J4BHB3-CjyTXs6v.js";import"./chunk-LBM3YZW2-DZbzQVsb.js";import"./chunk-76Q3JFCE-B14S6aW0.js";import"./chunk-T53DSG4Q-DhrZo8eD.js";import"./chunk-LHMN2FUI-DqEW0ey0.js";import"./chunk-FWNWRKHM-Cgpg7KEB.js";import{g as e,h as t,p as n}from"./src-CK1-XQNk.js";import{B as r,C as i,K as a,U as o,_ as s,a as c,b as l,d as u,s as d,v as f,y as p,z as ee}from"./chunk-ABZYJK2D-C5l8JSxq.js";import{g as m,i as h,m as g}from"./chunk-S3R3BYOJ-CT_-fuX8.js";import"./dist-CINaey7q.js";import{t as _}from"./chunk-4BX2VUAB-D2wsGaeQ.js";import{t as te}from"./mermaid-parser.core-CIsAFS0G.js";import{t as ne}from"./chunk-QZHKN3VN-CpvDzHVU.js";var v={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},re=u.gitGraph,y=t(()=>h({...re,...p().gitGraph}),`getConfig`),b=new ne(()=>{let e=y(),t=e.mainBranchName,n=e.mainBranchOrder;return{mainBranchName:t,commits:new Map,head:null,branchConfig:new Map([[t,{name:t,order:n}]]),branches:new Map([[t,null]]),currBranch:t,direction:`LR`,seq:0,options:{}}});function x(){return g({length:7})}t(x,`getID`);function S(e,t){let n=Object.create(null);return e.reduce((e,r)=>{let i=t(r);return n[i]||(n[i]=!0,e.push(r)),e},[])}t(S,`uniqBy`);var ie=t(function(e){b.records.direction=e},`setDirection`),ae=t(function(t){e.debug(`options str`,t),t=t?.trim(),t||=`{}`;try{b.records.options=JSON.parse(t)}catch(t){e.error(`error while parsing gitGraph options`,t.message)}},`setOptions`),oe=t(function(){return b.records.options},`getOptions`),se=t(function(t){let n=t.msg,r=t.id,i=t.type,a=t.tags;e.info(`commit`,n,r,i,a),e.debug(`Entering commit:`,n,r,i,a);let o=y();r=d.sanitizeText(r,o),n=d.sanitizeText(n,o),a=a?.map(e=>d.sanitizeText(e,o));let s={id:r||b.records.seq+`-`+x(),message:n,seq:b.records.seq++,type:i??v.NORMAL,tags:a??[],parents:b.records.head==null?[]:[b.records.head.id],branch:b.records.currBranch};b.records.head=s,e.info(`main branch`,o.mainBranchName),b.records.commits.has(s.id)&&e.warn(`Commit ID ${s.id} already exists`),b.records.commits.set(s.id,s),b.records.branches.set(b.records.currBranch,s.id),e.debug(`in pushCommit `+s.id)},`commit`),ce=t(function(t){let n=t.name,r=t.order;if(n=d.sanitizeText(n,y()),b.records.branches.has(n))throw Error(`Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout ${n}")`);b.records.branches.set(n,b.records.head==null?null:b.records.head.id),b.records.branchConfig.set(n,{name:n,order:r}),C(n),e.debug(`in createBranch`)},`branch`),le=t(t=>{let n=t.branch,r=t.id,i=t.type,a=t.tags,o=y();n=d.sanitizeText(n,o),r&&=d.sanitizeText(r,o);let s=b.records.branches.get(b.records.currBranch),c=b.records.branches.get(n),l=s?b.records.commits.get(s):void 0,u=c?b.records.commits.get(c):void 0;if(l&&u&&l.branch===n)throw Error(`Cannot merge branch '${n}' into itself.`);if(b.records.currBranch===n){let e=Error(`Incorrect usage of "merge". Cannot merge a branch to itself`);throw e.hash={text:`merge ${n}`,token:`merge ${n}`,expected:[`branch abc`]},e}if(l===void 0||!l){let e=Error(`Incorrect usage of "merge". Current branch (${b.records.currBranch})has no commits`);throw e.hash={text:`merge ${n}`,token:`merge ${n}`,expected:[`commit`]},e}if(!b.records.branches.has(n)){let e=Error(`Incorrect usage of "merge". Branch to be merged (`+n+`) does not exist`);throw e.hash={text:`merge ${n}`,token:`merge ${n}`,expected:[`branch ${n}`]},e}if(u===void 0||!u){let e=Error(`Incorrect usage of "merge". Branch to be merged (`+n+`) has no commits`);throw e.hash={text:`merge ${n}`,token:`merge ${n}`,expected:[`"commit"`]},e}if(l===u){let e=Error(`Incorrect usage of "merge". Both branches have same head`);throw e.hash={text:`merge ${n}`,token:`merge ${n}`,expected:[`branch abc`]},e}if(r&&b.records.commits.has(r)){let e=Error(`Incorrect usage of "merge". Commit with id:`+r+` already exists, use different custom id`);throw e.hash={text:`merge ${n} ${r} ${i} ${a?.join(` `)}`,token:`merge ${n} ${r} ${i} ${a?.join(` `)}`,expected:[`merge ${n} ${r}_UNIQUE ${i} ${a?.join(` `)}`]},e}let f=c||``,p={id:r||`${b.records.seq}-${x()}`,message:`merged branch ${n} into ${b.records.currBranch}`,seq:b.records.seq++,parents:b.records.head==null?[]:[b.records.head.id,f],branch:b.records.currBranch,type:v.MERGE,customType:i,customId:!!r,tags:a??[]};b.records.head=p,b.records.commits.set(p.id,p),b.records.branches.set(b.records.currBranch,p.id),e.debug(b.records.branches),e.debug(`in mergeBranch`)},`merge`),ue=t(function(t){let n=t.id,r=t.targetId,i=t.tags,a=t.parent;e.debug(`Entering cherryPick:`,n,r,i);let o=y();if(n=d.sanitizeText(n,o),r=d.sanitizeText(r,o),i=i?.map(e=>d.sanitizeText(e,o)),a=d.sanitizeText(a,o),!n||!b.records.commits.has(n)){let e=Error(`Incorrect usage of "cherryPick". Source commit id should exist and provided`);throw e.hash={text:`cherryPick ${n} ${r}`,token:`cherryPick ${n} ${r}`,expected:[`cherry-pick abc`]},e}let s=b.records.commits.get(n);if(s===void 0||!s)throw Error(`Incorrect usage of "cherryPick". Source commit id should exist and provided`);if(a&&!(Array.isArray(s.parents)&&s.parents.includes(a)))throw Error(`Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.`);let c=s.branch;if(s.type===v.MERGE&&!a)throw Error(`Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.`);if(!r||!b.records.commits.has(r)){if(c===b.records.currBranch){let e=Error(`Incorrect usage of "cherryPick". Source commit is already on current branch`);throw e.hash={text:`cherryPick ${n} ${r}`,token:`cherryPick ${n} ${r}`,expected:[`cherry-pick abc`]},e}let t=b.records.branches.get(b.records.currBranch);if(t===void 0||!t){let e=Error(`Incorrect usage of "cherry-pick". Current branch (${b.records.currBranch})has no commits`);throw e.hash={text:`cherryPick ${n} ${r}`,token:`cherryPick ${n} ${r}`,expected:[`cherry-pick abc`]},e}let o=b.records.commits.get(t);if(o===void 0||!o){let e=Error(`Incorrect usage of "cherry-pick". Current branch (${b.records.currBranch})has no commits`);throw e.hash={text:`cherryPick ${n} ${r}`,token:`cherryPick ${n} ${r}`,expected:[`cherry-pick abc`]},e}let l={id:b.records.seq+`-`+x(),message:`cherry-picked ${s?.message} into ${b.records.currBranch}`,seq:b.records.seq++,parents:b.records.head==null?[]:[b.records.head.id,s.id],branch:b.records.currBranch,type:v.CHERRY_PICK,tags:i?i.filter(Boolean):[`cherry-pick:${s.id}${s.type===v.MERGE?`|parent:${a}`:``}`]};b.records.head=l,b.records.commits.set(l.id,l),b.records.branches.set(b.records.currBranch,l.id),e.debug(b.records.branches),e.debug(`in cherryPick`)}},`cherryPick`),C=t(function(e){if(e=d.sanitizeText(e,y()),b.records.branches.has(e)){b.records.currBranch=e;let t=b.records.branches.get(b.records.currBranch);t===void 0||!t?b.records.head=null:b.records.head=b.records.commits.get(t)??null}else{let t=Error(`Trying to checkout branch which is not yet created. (Help try using "branch ${e}")`);throw t.hash={text:`checkout ${e}`,token:`checkout ${e}`,expected:[`branch ${e}`]},t}},`checkout`);function w(e,t,n){let r=e.indexOf(t);r===-1?e.push(n):e.splice(r,1,n)}t(w,`upsert`);function T(t){let n=t.reduce((e,t)=>e.seq>t.seq?e:t,t[0]),r=``;t.forEach(function(e){e===n?r+=` *`:r+=` |`});let i=[r,n.id,n.seq];for(let e in b.records.branches)b.records.branches.get(e)===n.id&&i.push(e);if(e.debug(i.join(` `)),n.parents&&n.parents.length==2&&n.parents[0]&&n.parents[1]){let e=b.records.commits.get(n.parents[0]);w(t,n,e),n.parents[1]&&t.push(b.records.commits.get(n.parents[1]))}else if(n.parents.length==0)return;else if(n.parents[0]){let e=b.records.commits.get(n.parents[0]);w(t,n,e)}t=S(t,e=>e.id),T(t)}t(T,`prettyPrintCommitHistory`);var de=t(function(){e.debug(b.records.commits);let t=E()[0];T([t])},`prettyPrint`),fe=t(function(){b.reset(),c()},`clear`),pe=t(function(){return[...b.records.branchConfig.values()].map((e,t)=>e.order!==null&&e.order!==void 0?e:{...e,order:parseFloat(`0.${t}`)}).sort((e,t)=>(e.order??0)-(t.order??0)).map(({name:e})=>({name:e}))},`getBranchesAsObjArray`),me=t(function(){return b.records.branches},`getBranches`),he=t(function(){return b.records.commits},`getCommits`),E=t(function(){let t=[...b.records.commits.values()];return t.forEach(function(t){e.debug(t.id)}),t.sort((e,t)=>e.seq-t.seq),t},`getCommitsArray`),D={commitType:v,getConfig:y,setDirection:ie,setOptions:ae,getOptions:oe,commit:se,branch:ce,merge:le,cherryPick:ue,checkout:C,prettyPrint:de,clear:fe,getBranchesAsObjArray:pe,getBranches:me,getCommits:he,getCommitsArray:E,getCurrentBranch:t(function(){return b.records.currBranch},`getCurrentBranch`),getDirection:t(function(){return b.records.direction},`getDirection`),getHead:t(function(){return b.records.head},`getHead`),setAccTitle:r,getAccTitle:f,getAccDescription:s,setAccDescription:ee,setDiagramTitle:o,getDiagramTitle:i},O=t((e,t)=>{_(e,t),e.dir&&t.setDirection(e.dir);for(let n of e.statements)k(n,t)},`populate`),k=t((n,r)=>{let i={Commit:t(e=>r.commit(A(e)),`Commit`),Branch:t(e=>r.branch(j(e)),`Branch`),Merge:t(e=>r.merge(M(e)),`Merge`),Checkout:t(e=>r.checkout(N(e)),`Checkout`),CherryPicking:t(e=>r.cherryPick(P(e)),`CherryPicking`)}[n.$type];i?i(n):e.error(`Unknown statement type: ${n.$type}`)},`parseStatement`),A=t(e=>({id:e.id,msg:e.message??``,type:e.type===void 0?v.NORMAL:v[e.type],tags:e.tags??void 0}),`parseCommit`),j=t(e=>({name:e.name,order:e.order??0}),`parseBranch`),M=t(e=>({branch:e.branch,id:e.id??``,type:e.type===void 0?void 0:v[e.type],tags:e.tags??void 0}),`parseMerge`),N=t(e=>e.branch,`parseCheckout`),P=t(e=>({id:e.id,targetId:``,tags:e.tags?.length===0?void 0:e.tags,parent:e.parent}),`parseCherryPicking`),F={parse:t(async t=>{let n=await te(`gitGraph`,t);e.debug(n),O(n,D)},`parse`)},I=l()?.gitGraph,L=10,R=40,z=4,B=2,V=8,H=new Map,U=new Map,W=30,G=new Map,K=[],q=0,J=`LR`,ge=t(()=>{H.clear(),U.clear(),G.clear(),q=0,K=[],J=`LR`},`clear`),Y=t(e=>{let t=document.createElementNS(`http://www.w3.org/2000/svg`,`text`);return(typeof e==`string`?e.split(/\\n|\n|<br\s*\/?>/gi):e).forEach(e=>{let n=document.createElementNS(`http://www.w3.org/2000/svg`,`tspan`);n.setAttributeNS(`http://www.w3.org/XML/1998/namespace`,`xml:space`,`preserve`),n.setAttribute(`dy`,`1em`),n.setAttribute(`x`,`0`),n.setAttribute(`class`,`row`),n.textContent=e.trim(),t.appendChild(n)}),t},`drawText`),X=t(e=>{let n,r,i;return J===`BT`?(r=t((e,t)=>e<=t,`comparisonFunc`),i=1/0):(r=t((e,t)=>e>=t,`comparisonFunc`),i=0),e.forEach(e=>{let t=J===`TB`||J==`BT`?U.get(e)?.y:U.get(e)?.x;t!==void 0&&r(t,i)&&(n=e,i=t)}),n},`findClosestParent`),_e=t(e=>{let t=``,n=1/0;return e.forEach(e=>{let r=U.get(e).y;r<=n&&(t=e,n=r)}),t||void 0},`findClosestParentBT`),ve=t((e,t,n)=>{let r=n,i=n,a=[];e.forEach(e=>{let n=t.get(e);if(!n)throw Error(`Commit not found for key ${e}`);n.parents.length?(r=be(n),i=Math.max(r,i)):a.push(n),xe(n,r)}),r=i,a.forEach(e=>{Se(e,r,n)}),e.forEach(e=>{let n=t.get(e);if(n?.parents.length){let e=_e(n.parents);r=U.get(e).y-R,r<=i&&(i=r);let t=H.get(n.branch).pos,a=r-L;U.set(n.id,{x:t,y:a})}})},`setParallelBTPos`),ye=t(e=>{let t=X(e.parents.filter(e=>e!==null));if(!t)throw Error(`Closest parent not found for commit ${e.id}`);let n=U.get(t)?.y;if(n===void 0)throw Error(`Closest parent position not found for commit ${e.id}`);return n},`findClosestParentPos`),be=t(e=>ye(e)+R,`calculateCommitPosition`),xe=t((e,t)=>{let n=H.get(e.branch);if(!n)throw Error(`Branch not found for commit ${e.id}`);let r=n.pos,i=t+L;return U.set(e.id,{x:r,y:i}),{x:r,y:i}},`setCommitPosition`),Se=t((e,t,n)=>{let r=H.get(e.branch);if(!r)throw Error(`Branch not found for commit ${e.id}`);let i=t+n,a=r.pos;U.set(e.id,{x:a,y:i})},`setRootPosition`),Ce=t((e,t,n,r,i,a)=>{if(a===v.HIGHLIGHT)e.append(`rect`).attr(`x`,n.x-10).attr(`y`,n.y-10).attr(`width`,20).attr(`height`,20).attr(`class`,`commit ${t.id} commit-highlight${i%V} ${r}-outer`),e.append(`rect`).attr(`x`,n.x-6).attr(`y`,n.y-6).attr(`width`,12).attr(`height`,12).attr(`class`,`commit ${t.id} commit${i%V} ${r}-inner`);else if(a===v.CHERRY_PICK)e.append(`circle`).attr(`cx`,n.x).attr(`cy`,n.y).attr(`r`,10).attr(`class`,`commit ${t.id} ${r}`),e.append(`circle`).attr(`cx`,n.x-3).attr(`cy`,n.y+2).attr(`r`,2.75).attr(`fill`,`#fff`).attr(`class`,`commit ${t.id} ${r}`),e.append(`circle`).attr(`cx`,n.x+3).attr(`cy`,n.y+2).attr(`r`,2.75).attr(`fill`,`#fff`).attr(`class`,`commit ${t.id} ${r}`),e.append(`line`).attr(`x1`,n.x+3).attr(`y1`,n.y+1).attr(`x2`,n.x).attr(`y2`,n.y-5).attr(`stroke`,`#fff`).attr(`class`,`commit ${t.id} ${r}`),e.append(`line`).attr(`x1`,n.x-3).attr(`y1`,n.y+1).attr(`x2`,n.x).attr(`y2`,n.y-5).attr(`stroke`,`#fff`).attr(`class`,`commit ${t.id} ${r}`);else{let o=e.append(`circle`);if(o.attr(`cx`,n.x),o.attr(`cy`,n.y),o.attr(`r`,t.type===v.MERGE?9:10),o.attr(`class`,`commit ${t.id} commit${i%V}`),a===v.MERGE){let a=e.append(`circle`);a.attr(`cx`,n.x),a.attr(`cy`,n.y),a.attr(`r`,6),a.attr(`class`,`commit ${r} ${t.id} commit${i%V}`)}a===v.REVERSE&&e.append(`path`).attr(`d`,`M ${n.x-5},${n.y-5}L${n.x+5},${n.y+5}M${n.x-5},${n.y+5}L${n.x+5},${n.y-5}`).attr(`class`,`commit ${r} ${t.id} commit${i%V}`)}},`drawCommitBullet`),we=t((e,t,n,r)=>{if(t.type!==v.CHERRY_PICK&&(t.customId&&t.type===v.MERGE||t.type!==v.MERGE)&&I?.showCommitLabel){let i=e.append(`g`),a=i.insert(`rect`).attr(`class`,`commit-label-bkg`),o=i.append(`text`).attr(`x`,r).attr(`y`,n.y+25).attr(`class`,`commit-label`).text(t.id),s=o.node()?.getBBox();if(s&&(a.attr(`x`,n.posWithOffset-s.width/2-B).attr(`y`,n.y+13.5).attr(`width`,s.width+2*B).attr(`height`,s.height+2*B),J===`TB`||J===`BT`?(a.attr(`x`,n.x-(s.width+4*z+5)).attr(`y`,n.y-12),o.attr(`x`,n.x-(s.width+4*z)).attr(`y`,n.y+s.height-12)):o.attr(`x`,n.posWithOffset-s.width/2),I.rotateCommitLabel))if(J===`TB`||J===`BT`)o.attr(`transform`,`rotate(-45, `+n.x+`, `+n.y+`)`),a.attr(`transform`,`rotate(-45, `+n.x+`, `+n.y+`)`);else{let e=-7.5-(s.width+10)/25*9.5,t=10+s.width/25*8.5;i.attr(`transform`,`translate(`+e+`, `+t+`) rotate(-45, `+r+`, `+n.y+`)`)}}},`drawCommitLabel`),Te=t((e,t,n,r)=>{if(t.tags.length>0){let i=0,a=0,o=0,s=[];for(let r of t.tags.reverse()){let t=e.insert(`polygon`),c=e.append(`circle`),l=e.append(`text`).attr(`y`,n.y-16-i).attr(`class`,`tag-label`).text(r),u=l.node()?.getBBox();if(!u)throw Error(`Tag bbox not found`);a=Math.max(a,u.width),o=Math.max(o,u.height),l.attr(`x`,n.posWithOffset-u.width/2),s.push({tag:l,hole:c,rect:t,yOffset:i}),i+=20}for(let{tag:e,hole:t,rect:i,yOffset:c}of s){let s=o/2,l=n.y-19.2-c;if(i.attr(`class`,`tag-label-bkg`).attr(`points`,`
|
|
1
|
+
import"./shiki-BE3D5Aiv.js";import"./chunk-FPAJGGOC-C1aXi2xg.js";import"./chunk-O7ZBX7Z2-BeCHiDgv.js";import"./chunk-S6J4BHB3-CjyTXs6v.js";import"./chunk-LBM3YZW2-DZbzQVsb.js";import"./chunk-76Q3JFCE-B14S6aW0.js";import"./chunk-T53DSG4Q-DhrZo8eD.js";import"./chunk-LHMN2FUI-DqEW0ey0.js";import"./chunk-FWNWRKHM-Cgpg7KEB.js";import{g as e,h as t,p as n}from"./src-CK1-XQNk.js";import{B as r,C as i,K as a,U as o,_ as s,a as c,b as l,d as u,s as d,v as f,y as p,z as ee}from"./chunk-ABZYJK2D-CNhdKuqi.js";import{g as m,i as h,m as g}from"./chunk-S3R3BYOJ-lQHMbpG7.js";import"./dist-CINaey7q.js";import{t as _}from"./chunk-4BX2VUAB-D2wsGaeQ.js";import{t as te}from"./mermaid-parser.core-CIsAFS0G.js";import{t as ne}from"./chunk-QZHKN3VN-CpvDzHVU.js";var v={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},re=u.gitGraph,y=t(()=>h({...re,...p().gitGraph}),`getConfig`),b=new ne(()=>{let e=y(),t=e.mainBranchName,n=e.mainBranchOrder;return{mainBranchName:t,commits:new Map,head:null,branchConfig:new Map([[t,{name:t,order:n}]]),branches:new Map([[t,null]]),currBranch:t,direction:`LR`,seq:0,options:{}}});function x(){return g({length:7})}t(x,`getID`);function S(e,t){let n=Object.create(null);return e.reduce((e,r)=>{let i=t(r);return n[i]||(n[i]=!0,e.push(r)),e},[])}t(S,`uniqBy`);var ie=t(function(e){b.records.direction=e},`setDirection`),ae=t(function(t){e.debug(`options str`,t),t=t?.trim(),t||=`{}`;try{b.records.options=JSON.parse(t)}catch(t){e.error(`error while parsing gitGraph options`,t.message)}},`setOptions`),oe=t(function(){return b.records.options},`getOptions`),se=t(function(t){let n=t.msg,r=t.id,i=t.type,a=t.tags;e.info(`commit`,n,r,i,a),e.debug(`Entering commit:`,n,r,i,a);let o=y();r=d.sanitizeText(r,o),n=d.sanitizeText(n,o),a=a?.map(e=>d.sanitizeText(e,o));let s={id:r||b.records.seq+`-`+x(),message:n,seq:b.records.seq++,type:i??v.NORMAL,tags:a??[],parents:b.records.head==null?[]:[b.records.head.id],branch:b.records.currBranch};b.records.head=s,e.info(`main branch`,o.mainBranchName),b.records.commits.has(s.id)&&e.warn(`Commit ID ${s.id} already exists`),b.records.commits.set(s.id,s),b.records.branches.set(b.records.currBranch,s.id),e.debug(`in pushCommit `+s.id)},`commit`),ce=t(function(t){let n=t.name,r=t.order;if(n=d.sanitizeText(n,y()),b.records.branches.has(n))throw Error(`Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout ${n}")`);b.records.branches.set(n,b.records.head==null?null:b.records.head.id),b.records.branchConfig.set(n,{name:n,order:r}),C(n),e.debug(`in createBranch`)},`branch`),le=t(t=>{let n=t.branch,r=t.id,i=t.type,a=t.tags,o=y();n=d.sanitizeText(n,o),r&&=d.sanitizeText(r,o);let s=b.records.branches.get(b.records.currBranch),c=b.records.branches.get(n),l=s?b.records.commits.get(s):void 0,u=c?b.records.commits.get(c):void 0;if(l&&u&&l.branch===n)throw Error(`Cannot merge branch '${n}' into itself.`);if(b.records.currBranch===n){let e=Error(`Incorrect usage of "merge". Cannot merge a branch to itself`);throw e.hash={text:`merge ${n}`,token:`merge ${n}`,expected:[`branch abc`]},e}if(l===void 0||!l){let e=Error(`Incorrect usage of "merge". Current branch (${b.records.currBranch})has no commits`);throw e.hash={text:`merge ${n}`,token:`merge ${n}`,expected:[`commit`]},e}if(!b.records.branches.has(n)){let e=Error(`Incorrect usage of "merge". Branch to be merged (`+n+`) does not exist`);throw e.hash={text:`merge ${n}`,token:`merge ${n}`,expected:[`branch ${n}`]},e}if(u===void 0||!u){let e=Error(`Incorrect usage of "merge". Branch to be merged (`+n+`) has no commits`);throw e.hash={text:`merge ${n}`,token:`merge ${n}`,expected:[`"commit"`]},e}if(l===u){let e=Error(`Incorrect usage of "merge". Both branches have same head`);throw e.hash={text:`merge ${n}`,token:`merge ${n}`,expected:[`branch abc`]},e}if(r&&b.records.commits.has(r)){let e=Error(`Incorrect usage of "merge". Commit with id:`+r+` already exists, use different custom id`);throw e.hash={text:`merge ${n} ${r} ${i} ${a?.join(` `)}`,token:`merge ${n} ${r} ${i} ${a?.join(` `)}`,expected:[`merge ${n} ${r}_UNIQUE ${i} ${a?.join(` `)}`]},e}let f=c||``,p={id:r||`${b.records.seq}-${x()}`,message:`merged branch ${n} into ${b.records.currBranch}`,seq:b.records.seq++,parents:b.records.head==null?[]:[b.records.head.id,f],branch:b.records.currBranch,type:v.MERGE,customType:i,customId:!!r,tags:a??[]};b.records.head=p,b.records.commits.set(p.id,p),b.records.branches.set(b.records.currBranch,p.id),e.debug(b.records.branches),e.debug(`in mergeBranch`)},`merge`),ue=t(function(t){let n=t.id,r=t.targetId,i=t.tags,a=t.parent;e.debug(`Entering cherryPick:`,n,r,i);let o=y();if(n=d.sanitizeText(n,o),r=d.sanitizeText(r,o),i=i?.map(e=>d.sanitizeText(e,o)),a=d.sanitizeText(a,o),!n||!b.records.commits.has(n)){let e=Error(`Incorrect usage of "cherryPick". Source commit id should exist and provided`);throw e.hash={text:`cherryPick ${n} ${r}`,token:`cherryPick ${n} ${r}`,expected:[`cherry-pick abc`]},e}let s=b.records.commits.get(n);if(s===void 0||!s)throw Error(`Incorrect usage of "cherryPick". Source commit id should exist and provided`);if(a&&!(Array.isArray(s.parents)&&s.parents.includes(a)))throw Error(`Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.`);let c=s.branch;if(s.type===v.MERGE&&!a)throw Error(`Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.`);if(!r||!b.records.commits.has(r)){if(c===b.records.currBranch){let e=Error(`Incorrect usage of "cherryPick". Source commit is already on current branch`);throw e.hash={text:`cherryPick ${n} ${r}`,token:`cherryPick ${n} ${r}`,expected:[`cherry-pick abc`]},e}let t=b.records.branches.get(b.records.currBranch);if(t===void 0||!t){let e=Error(`Incorrect usage of "cherry-pick". Current branch (${b.records.currBranch})has no commits`);throw e.hash={text:`cherryPick ${n} ${r}`,token:`cherryPick ${n} ${r}`,expected:[`cherry-pick abc`]},e}let o=b.records.commits.get(t);if(o===void 0||!o){let e=Error(`Incorrect usage of "cherry-pick". Current branch (${b.records.currBranch})has no commits`);throw e.hash={text:`cherryPick ${n} ${r}`,token:`cherryPick ${n} ${r}`,expected:[`cherry-pick abc`]},e}let l={id:b.records.seq+`-`+x(),message:`cherry-picked ${s?.message} into ${b.records.currBranch}`,seq:b.records.seq++,parents:b.records.head==null?[]:[b.records.head.id,s.id],branch:b.records.currBranch,type:v.CHERRY_PICK,tags:i?i.filter(Boolean):[`cherry-pick:${s.id}${s.type===v.MERGE?`|parent:${a}`:``}`]};b.records.head=l,b.records.commits.set(l.id,l),b.records.branches.set(b.records.currBranch,l.id),e.debug(b.records.branches),e.debug(`in cherryPick`)}},`cherryPick`),C=t(function(e){if(e=d.sanitizeText(e,y()),b.records.branches.has(e)){b.records.currBranch=e;let t=b.records.branches.get(b.records.currBranch);t===void 0||!t?b.records.head=null:b.records.head=b.records.commits.get(t)??null}else{let t=Error(`Trying to checkout branch which is not yet created. (Help try using "branch ${e}")`);throw t.hash={text:`checkout ${e}`,token:`checkout ${e}`,expected:[`branch ${e}`]},t}},`checkout`);function w(e,t,n){let r=e.indexOf(t);r===-1?e.push(n):e.splice(r,1,n)}t(w,`upsert`);function T(t){let n=t.reduce((e,t)=>e.seq>t.seq?e:t,t[0]),r=``;t.forEach(function(e){e===n?r+=` *`:r+=` |`});let i=[r,n.id,n.seq];for(let e in b.records.branches)b.records.branches.get(e)===n.id&&i.push(e);if(e.debug(i.join(` `)),n.parents&&n.parents.length==2&&n.parents[0]&&n.parents[1]){let e=b.records.commits.get(n.parents[0]);w(t,n,e),n.parents[1]&&t.push(b.records.commits.get(n.parents[1]))}else if(n.parents.length==0)return;else if(n.parents[0]){let e=b.records.commits.get(n.parents[0]);w(t,n,e)}t=S(t,e=>e.id),T(t)}t(T,`prettyPrintCommitHistory`);var de=t(function(){e.debug(b.records.commits);let t=E()[0];T([t])},`prettyPrint`),fe=t(function(){b.reset(),c()},`clear`),pe=t(function(){return[...b.records.branchConfig.values()].map((e,t)=>e.order!==null&&e.order!==void 0?e:{...e,order:parseFloat(`0.${t}`)}).sort((e,t)=>(e.order??0)-(t.order??0)).map(({name:e})=>({name:e}))},`getBranchesAsObjArray`),me=t(function(){return b.records.branches},`getBranches`),he=t(function(){return b.records.commits},`getCommits`),E=t(function(){let t=[...b.records.commits.values()];return t.forEach(function(t){e.debug(t.id)}),t.sort((e,t)=>e.seq-t.seq),t},`getCommitsArray`),D={commitType:v,getConfig:y,setDirection:ie,setOptions:ae,getOptions:oe,commit:se,branch:ce,merge:le,cherryPick:ue,checkout:C,prettyPrint:de,clear:fe,getBranchesAsObjArray:pe,getBranches:me,getCommits:he,getCommitsArray:E,getCurrentBranch:t(function(){return b.records.currBranch},`getCurrentBranch`),getDirection:t(function(){return b.records.direction},`getDirection`),getHead:t(function(){return b.records.head},`getHead`),setAccTitle:r,getAccTitle:f,getAccDescription:s,setAccDescription:ee,setDiagramTitle:o,getDiagramTitle:i},O=t((e,t)=>{_(e,t),e.dir&&t.setDirection(e.dir);for(let n of e.statements)k(n,t)},`populate`),k=t((n,r)=>{let i={Commit:t(e=>r.commit(A(e)),`Commit`),Branch:t(e=>r.branch(j(e)),`Branch`),Merge:t(e=>r.merge(M(e)),`Merge`),Checkout:t(e=>r.checkout(N(e)),`Checkout`),CherryPicking:t(e=>r.cherryPick(P(e)),`CherryPicking`)}[n.$type];i?i(n):e.error(`Unknown statement type: ${n.$type}`)},`parseStatement`),A=t(e=>({id:e.id,msg:e.message??``,type:e.type===void 0?v.NORMAL:v[e.type],tags:e.tags??void 0}),`parseCommit`),j=t(e=>({name:e.name,order:e.order??0}),`parseBranch`),M=t(e=>({branch:e.branch,id:e.id??``,type:e.type===void 0?void 0:v[e.type],tags:e.tags??void 0}),`parseMerge`),N=t(e=>e.branch,`parseCheckout`),P=t(e=>({id:e.id,targetId:``,tags:e.tags?.length===0?void 0:e.tags,parent:e.parent}),`parseCherryPicking`),F={parse:t(async t=>{let n=await te(`gitGraph`,t);e.debug(n),O(n,D)},`parse`)},I=l()?.gitGraph,L=10,R=40,z=4,B=2,V=8,H=new Map,U=new Map,W=30,G=new Map,K=[],q=0,J=`LR`,ge=t(()=>{H.clear(),U.clear(),G.clear(),q=0,K=[],J=`LR`},`clear`),Y=t(e=>{let t=document.createElementNS(`http://www.w3.org/2000/svg`,`text`);return(typeof e==`string`?e.split(/\\n|\n|<br\s*\/?>/gi):e).forEach(e=>{let n=document.createElementNS(`http://www.w3.org/2000/svg`,`tspan`);n.setAttributeNS(`http://www.w3.org/XML/1998/namespace`,`xml:space`,`preserve`),n.setAttribute(`dy`,`1em`),n.setAttribute(`x`,`0`),n.setAttribute(`class`,`row`),n.textContent=e.trim(),t.appendChild(n)}),t},`drawText`),X=t(e=>{let n,r,i;return J===`BT`?(r=t((e,t)=>e<=t,`comparisonFunc`),i=1/0):(r=t((e,t)=>e>=t,`comparisonFunc`),i=0),e.forEach(e=>{let t=J===`TB`||J==`BT`?U.get(e)?.y:U.get(e)?.x;t!==void 0&&r(t,i)&&(n=e,i=t)}),n},`findClosestParent`),_e=t(e=>{let t=``,n=1/0;return e.forEach(e=>{let r=U.get(e).y;r<=n&&(t=e,n=r)}),t||void 0},`findClosestParentBT`),ve=t((e,t,n)=>{let r=n,i=n,a=[];e.forEach(e=>{let n=t.get(e);if(!n)throw Error(`Commit not found for key ${e}`);n.parents.length?(r=be(n),i=Math.max(r,i)):a.push(n),xe(n,r)}),r=i,a.forEach(e=>{Se(e,r,n)}),e.forEach(e=>{let n=t.get(e);if(n?.parents.length){let e=_e(n.parents);r=U.get(e).y-R,r<=i&&(i=r);let t=H.get(n.branch).pos,a=r-L;U.set(n.id,{x:t,y:a})}})},`setParallelBTPos`),ye=t(e=>{let t=X(e.parents.filter(e=>e!==null));if(!t)throw Error(`Closest parent not found for commit ${e.id}`);let n=U.get(t)?.y;if(n===void 0)throw Error(`Closest parent position not found for commit ${e.id}`);return n},`findClosestParentPos`),be=t(e=>ye(e)+R,`calculateCommitPosition`),xe=t((e,t)=>{let n=H.get(e.branch);if(!n)throw Error(`Branch not found for commit ${e.id}`);let r=n.pos,i=t+L;return U.set(e.id,{x:r,y:i}),{x:r,y:i}},`setCommitPosition`),Se=t((e,t,n)=>{let r=H.get(e.branch);if(!r)throw Error(`Branch not found for commit ${e.id}`);let i=t+n,a=r.pos;U.set(e.id,{x:a,y:i})},`setRootPosition`),Ce=t((e,t,n,r,i,a)=>{if(a===v.HIGHLIGHT)e.append(`rect`).attr(`x`,n.x-10).attr(`y`,n.y-10).attr(`width`,20).attr(`height`,20).attr(`class`,`commit ${t.id} commit-highlight${i%V} ${r}-outer`),e.append(`rect`).attr(`x`,n.x-6).attr(`y`,n.y-6).attr(`width`,12).attr(`height`,12).attr(`class`,`commit ${t.id} commit${i%V} ${r}-inner`);else if(a===v.CHERRY_PICK)e.append(`circle`).attr(`cx`,n.x).attr(`cy`,n.y).attr(`r`,10).attr(`class`,`commit ${t.id} ${r}`),e.append(`circle`).attr(`cx`,n.x-3).attr(`cy`,n.y+2).attr(`r`,2.75).attr(`fill`,`#fff`).attr(`class`,`commit ${t.id} ${r}`),e.append(`circle`).attr(`cx`,n.x+3).attr(`cy`,n.y+2).attr(`r`,2.75).attr(`fill`,`#fff`).attr(`class`,`commit ${t.id} ${r}`),e.append(`line`).attr(`x1`,n.x+3).attr(`y1`,n.y+1).attr(`x2`,n.x).attr(`y2`,n.y-5).attr(`stroke`,`#fff`).attr(`class`,`commit ${t.id} ${r}`),e.append(`line`).attr(`x1`,n.x-3).attr(`y1`,n.y+1).attr(`x2`,n.x).attr(`y2`,n.y-5).attr(`stroke`,`#fff`).attr(`class`,`commit ${t.id} ${r}`);else{let o=e.append(`circle`);if(o.attr(`cx`,n.x),o.attr(`cy`,n.y),o.attr(`r`,t.type===v.MERGE?9:10),o.attr(`class`,`commit ${t.id} commit${i%V}`),a===v.MERGE){let a=e.append(`circle`);a.attr(`cx`,n.x),a.attr(`cy`,n.y),a.attr(`r`,6),a.attr(`class`,`commit ${r} ${t.id} commit${i%V}`)}a===v.REVERSE&&e.append(`path`).attr(`d`,`M ${n.x-5},${n.y-5}L${n.x+5},${n.y+5}M${n.x-5},${n.y+5}L${n.x+5},${n.y-5}`).attr(`class`,`commit ${r} ${t.id} commit${i%V}`)}},`drawCommitBullet`),we=t((e,t,n,r)=>{if(t.type!==v.CHERRY_PICK&&(t.customId&&t.type===v.MERGE||t.type!==v.MERGE)&&I?.showCommitLabel){let i=e.append(`g`),a=i.insert(`rect`).attr(`class`,`commit-label-bkg`),o=i.append(`text`).attr(`x`,r).attr(`y`,n.y+25).attr(`class`,`commit-label`).text(t.id),s=o.node()?.getBBox();if(s&&(a.attr(`x`,n.posWithOffset-s.width/2-B).attr(`y`,n.y+13.5).attr(`width`,s.width+2*B).attr(`height`,s.height+2*B),J===`TB`||J===`BT`?(a.attr(`x`,n.x-(s.width+4*z+5)).attr(`y`,n.y-12),o.attr(`x`,n.x-(s.width+4*z)).attr(`y`,n.y+s.height-12)):o.attr(`x`,n.posWithOffset-s.width/2),I.rotateCommitLabel))if(J===`TB`||J===`BT`)o.attr(`transform`,`rotate(-45, `+n.x+`, `+n.y+`)`),a.attr(`transform`,`rotate(-45, `+n.x+`, `+n.y+`)`);else{let e=-7.5-(s.width+10)/25*9.5,t=10+s.width/25*8.5;i.attr(`transform`,`translate(`+e+`, `+t+`) rotate(-45, `+r+`, `+n.y+`)`)}}},`drawCommitLabel`),Te=t((e,t,n,r)=>{if(t.tags.length>0){let i=0,a=0,o=0,s=[];for(let r of t.tags.reverse()){let t=e.insert(`polygon`),c=e.append(`circle`),l=e.append(`text`).attr(`y`,n.y-16-i).attr(`class`,`tag-label`).text(r),u=l.node()?.getBBox();if(!u)throw Error(`Tag bbox not found`);a=Math.max(a,u.width),o=Math.max(o,u.height),l.attr(`x`,n.posWithOffset-u.width/2),s.push({tag:l,hole:c,rect:t,yOffset:i}),i+=20}for(let{tag:e,hole:t,rect:i,yOffset:c}of s){let s=o/2,l=n.y-19.2-c;if(i.attr(`class`,`tag-label-bkg`).attr(`points`,`
|
|
2
2
|
${r-a/2-z/2},${l+B}
|
|
3
3
|
${r-a/2-z/2},${l-B}
|
|
4
4
|
${n.posWithOffset-a/2-z},${l-s-B}
|
|
@@ -63,4 +63,4 @@ import"./shiki-BE3D5Aiv.js";import"./chunk-FPAJGGOC-C1aXi2xg.js";import"./chunk-
|
|
|
63
63
|
fill: ${e.textColor};
|
|
64
64
|
}
|
|
65
65
|
`,`getStyles`)};export{Ne as diagram};
|
|
66
|
-
//# sourceMappingURL=gitGraphDiagram-NY62KEGX-
|
|
66
|
+
//# sourceMappingURL=gitGraphDiagram-NY62KEGX-DIySZYvd.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitGraphDiagram-NY62KEGX-DRnj3yjR.js","names":["select"],"sources":["../../../../node_modules/mermaid/dist/chunks/mermaid.core/gitGraphDiagram-NY62KEGX.mjs"],"sourcesContent":["import {\n populateCommonDb\n} from \"./chunk-4BX2VUAB.mjs\";\nimport {\n ImperativeState\n} from \"./chunk-QZHKN3VN.mjs\";\nimport {\n cleanAndMerge,\n random,\n utils_default\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n clear,\n common_default,\n defaultConfig_default,\n getAccDescription,\n getAccTitle,\n getConfig,\n getConfig2,\n getDiagramTitle,\n setAccDescription,\n setAccTitle,\n setDiagramTitle,\n setupGraphViewbox2 as setupGraphViewbox\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/git/gitGraphParser.ts\nimport { parse } from \"@mermaid-js/parser\";\n\n// src/diagrams/git/gitGraphTypes.ts\nvar commitType = {\n NORMAL: 0,\n REVERSE: 1,\n HIGHLIGHT: 2,\n MERGE: 3,\n CHERRY_PICK: 4\n};\n\n// src/diagrams/git/gitGraphAst.ts\nvar DEFAULT_GITGRAPH_CONFIG = defaultConfig_default.gitGraph;\nvar getConfig3 = /* @__PURE__ */ __name(() => {\n const config = cleanAndMerge({\n ...DEFAULT_GITGRAPH_CONFIG,\n ...getConfig().gitGraph\n });\n return config;\n}, \"getConfig\");\nvar state = new ImperativeState(() => {\n const config = getConfig3();\n const mainBranchName = config.mainBranchName;\n const mainBranchOrder = config.mainBranchOrder;\n return {\n mainBranchName,\n commits: /* @__PURE__ */ new Map(),\n head: null,\n branchConfig: /* @__PURE__ */ new Map([[mainBranchName, { name: mainBranchName, order: mainBranchOrder }]]),\n branches: /* @__PURE__ */ new Map([[mainBranchName, null]]),\n currBranch: mainBranchName,\n direction: \"LR\",\n seq: 0,\n options: {}\n };\n});\nfunction getID() {\n return random({ length: 7 });\n}\n__name(getID, \"getID\");\nfunction uniqBy(list, fn) {\n const recordMap = /* @__PURE__ */ Object.create(null);\n return list.reduce((out, item) => {\n const key = fn(item);\n if (!recordMap[key]) {\n recordMap[key] = true;\n out.push(item);\n }\n return out;\n }, []);\n}\n__name(uniqBy, \"uniqBy\");\nvar setDirection = /* @__PURE__ */ __name(function(dir2) {\n state.records.direction = dir2;\n}, \"setDirection\");\nvar setOptions = /* @__PURE__ */ __name(function(rawOptString) {\n log.debug(\"options str\", rawOptString);\n rawOptString = rawOptString?.trim();\n rawOptString = rawOptString || \"{}\";\n try {\n state.records.options = JSON.parse(rawOptString);\n } catch (e) {\n log.error(\"error while parsing gitGraph options\", e.message);\n }\n}, \"setOptions\");\nvar getOptions = /* @__PURE__ */ __name(function() {\n return state.records.options;\n}, \"getOptions\");\nvar commit = /* @__PURE__ */ __name(function(commitDB) {\n let msg = commitDB.msg;\n let id = commitDB.id;\n const type = commitDB.type;\n let tags = commitDB.tags;\n log.info(\"commit\", msg, id, type, tags);\n log.debug(\"Entering commit:\", msg, id, type, tags);\n const config = getConfig3();\n id = common_default.sanitizeText(id, config);\n msg = common_default.sanitizeText(msg, config);\n tags = tags?.map((tag) => common_default.sanitizeText(tag, config));\n const newCommit = {\n id: id ? id : state.records.seq + \"-\" + getID(),\n message: msg,\n seq: state.records.seq++,\n type: type ?? commitType.NORMAL,\n tags: tags ?? [],\n parents: state.records.head == null ? [] : [state.records.head.id],\n branch: state.records.currBranch\n };\n state.records.head = newCommit;\n log.info(\"main branch\", config.mainBranchName);\n if (state.records.commits.has(newCommit.id)) {\n log.warn(`Commit ID ${newCommit.id} already exists`);\n }\n state.records.commits.set(newCommit.id, newCommit);\n state.records.branches.set(state.records.currBranch, newCommit.id);\n log.debug(\"in pushCommit \" + newCommit.id);\n}, \"commit\");\nvar branch = /* @__PURE__ */ __name(function(branchDB) {\n let name = branchDB.name;\n const order = branchDB.order;\n name = common_default.sanitizeText(name, getConfig3());\n if (state.records.branches.has(name)) {\n throw new Error(\n `Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using \"checkout ${name}\")`\n );\n }\n state.records.branches.set(name, state.records.head != null ? state.records.head.id : null);\n state.records.branchConfig.set(name, { name, order });\n checkout(name);\n log.debug(\"in createBranch\");\n}, \"branch\");\nvar merge = /* @__PURE__ */ __name((mergeDB) => {\n let otherBranch = mergeDB.branch;\n let customId = mergeDB.id;\n const overrideType = mergeDB.type;\n const customTags = mergeDB.tags;\n const config = getConfig3();\n otherBranch = common_default.sanitizeText(otherBranch, config);\n if (customId) {\n customId = common_default.sanitizeText(customId, config);\n }\n const currentBranchCheck = state.records.branches.get(state.records.currBranch);\n const otherBranchCheck = state.records.branches.get(otherBranch);\n const currentCommit = currentBranchCheck ? state.records.commits.get(currentBranchCheck) : void 0;\n const otherCommit = otherBranchCheck ? state.records.commits.get(otherBranchCheck) : void 0;\n if (currentCommit && otherCommit && currentCommit.branch === otherBranch) {\n throw new Error(`Cannot merge branch '${otherBranch}' into itself.`);\n }\n if (state.records.currBranch === otherBranch) {\n const error = new Error('Incorrect usage of \"merge\". Cannot merge a branch to itself');\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: [\"branch abc\"]\n };\n throw error;\n }\n if (currentCommit === void 0 || !currentCommit) {\n const error = new Error(\n `Incorrect usage of \"merge\". Current branch (${state.records.currBranch})has no commits`\n );\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: [\"commit\"]\n };\n throw error;\n }\n if (!state.records.branches.has(otherBranch)) {\n const error = new Error(\n 'Incorrect usage of \"merge\". Branch to be merged (' + otherBranch + \") does not exist\"\n );\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: [`branch ${otherBranch}`]\n };\n throw error;\n }\n if (otherCommit === void 0 || !otherCommit) {\n const error = new Error(\n 'Incorrect usage of \"merge\". Branch to be merged (' + otherBranch + \") has no commits\"\n );\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: ['\"commit\"']\n };\n throw error;\n }\n if (currentCommit === otherCommit) {\n const error = new Error('Incorrect usage of \"merge\". Both branches have same head');\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: [\"branch abc\"]\n };\n throw error;\n }\n if (customId && state.records.commits.has(customId)) {\n const error = new Error(\n 'Incorrect usage of \"merge\". Commit with id:' + customId + \" already exists, use different custom id\"\n );\n error.hash = {\n text: `merge ${otherBranch} ${customId} ${overrideType} ${customTags?.join(\" \")}`,\n token: `merge ${otherBranch} ${customId} ${overrideType} ${customTags?.join(\" \")}`,\n expected: [\n `merge ${otherBranch} ${customId}_UNIQUE ${overrideType} ${customTags?.join(\" \")}`\n ]\n };\n throw error;\n }\n const verifiedBranch = otherBranchCheck ? otherBranchCheck : \"\";\n const commit2 = {\n id: customId || `${state.records.seq}-${getID()}`,\n message: `merged branch ${otherBranch} into ${state.records.currBranch}`,\n seq: state.records.seq++,\n parents: state.records.head == null ? [] : [state.records.head.id, verifiedBranch],\n branch: state.records.currBranch,\n type: commitType.MERGE,\n customType: overrideType,\n customId: customId ? true : false,\n tags: customTags ?? []\n };\n state.records.head = commit2;\n state.records.commits.set(commit2.id, commit2);\n state.records.branches.set(state.records.currBranch, commit2.id);\n log.debug(state.records.branches);\n log.debug(\"in mergeBranch\");\n}, \"merge\");\nvar cherryPick = /* @__PURE__ */ __name(function(cherryPickDB) {\n let sourceId = cherryPickDB.id;\n let targetId = cherryPickDB.targetId;\n let tags = cherryPickDB.tags;\n let parentCommitId = cherryPickDB.parent;\n log.debug(\"Entering cherryPick:\", sourceId, targetId, tags);\n const config = getConfig3();\n sourceId = common_default.sanitizeText(sourceId, config);\n targetId = common_default.sanitizeText(targetId, config);\n tags = tags?.map((tag) => common_default.sanitizeText(tag, config));\n parentCommitId = common_default.sanitizeText(parentCommitId, config);\n if (!sourceId || !state.records.commits.has(sourceId)) {\n const error = new Error(\n 'Incorrect usage of \"cherryPick\". Source commit id should exist and provided'\n );\n error.hash = {\n text: `cherryPick ${sourceId} ${targetId}`,\n token: `cherryPick ${sourceId} ${targetId}`,\n expected: [\"cherry-pick abc\"]\n };\n throw error;\n }\n const sourceCommit = state.records.commits.get(sourceId);\n if (sourceCommit === void 0 || !sourceCommit) {\n throw new Error('Incorrect usage of \"cherryPick\". Source commit id should exist and provided');\n }\n if (parentCommitId && !(Array.isArray(sourceCommit.parents) && sourceCommit.parents.includes(parentCommitId))) {\n const error = new Error(\n \"Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.\"\n );\n throw error;\n }\n const sourceCommitBranch = sourceCommit.branch;\n if (sourceCommit.type === commitType.MERGE && !parentCommitId) {\n const error = new Error(\n \"Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.\"\n );\n throw error;\n }\n if (!targetId || !state.records.commits.has(targetId)) {\n if (sourceCommitBranch === state.records.currBranch) {\n const error = new Error(\n 'Incorrect usage of \"cherryPick\". Source commit is already on current branch'\n );\n error.hash = {\n text: `cherryPick ${sourceId} ${targetId}`,\n token: `cherryPick ${sourceId} ${targetId}`,\n expected: [\"cherry-pick abc\"]\n };\n throw error;\n }\n const currentCommitId = state.records.branches.get(state.records.currBranch);\n if (currentCommitId === void 0 || !currentCommitId) {\n const error = new Error(\n `Incorrect usage of \"cherry-pick\". Current branch (${state.records.currBranch})has no commits`\n );\n error.hash = {\n text: `cherryPick ${sourceId} ${targetId}`,\n token: `cherryPick ${sourceId} ${targetId}`,\n expected: [\"cherry-pick abc\"]\n };\n throw error;\n }\n const currentCommit = state.records.commits.get(currentCommitId);\n if (currentCommit === void 0 || !currentCommit) {\n const error = new Error(\n `Incorrect usage of \"cherry-pick\". Current branch (${state.records.currBranch})has no commits`\n );\n error.hash = {\n text: `cherryPick ${sourceId} ${targetId}`,\n token: `cherryPick ${sourceId} ${targetId}`,\n expected: [\"cherry-pick abc\"]\n };\n throw error;\n }\n const commit2 = {\n id: state.records.seq + \"-\" + getID(),\n message: `cherry-picked ${sourceCommit?.message} into ${state.records.currBranch}`,\n seq: state.records.seq++,\n parents: state.records.head == null ? [] : [state.records.head.id, sourceCommit.id],\n branch: state.records.currBranch,\n type: commitType.CHERRY_PICK,\n tags: tags ? tags.filter(Boolean) : [\n `cherry-pick:${sourceCommit.id}${sourceCommit.type === commitType.MERGE ? `|parent:${parentCommitId}` : \"\"}`\n ]\n };\n state.records.head = commit2;\n state.records.commits.set(commit2.id, commit2);\n state.records.branches.set(state.records.currBranch, commit2.id);\n log.debug(state.records.branches);\n log.debug(\"in cherryPick\");\n }\n}, \"cherryPick\");\nvar checkout = /* @__PURE__ */ __name(function(branch2) {\n branch2 = common_default.sanitizeText(branch2, getConfig3());\n if (!state.records.branches.has(branch2)) {\n const error = new Error(\n `Trying to checkout branch which is not yet created. (Help try using \"branch ${branch2}\")`\n );\n error.hash = {\n text: `checkout ${branch2}`,\n token: `checkout ${branch2}`,\n expected: [`branch ${branch2}`]\n };\n throw error;\n } else {\n state.records.currBranch = branch2;\n const id = state.records.branches.get(state.records.currBranch);\n if (id === void 0 || !id) {\n state.records.head = null;\n } else {\n state.records.head = state.records.commits.get(id) ?? null;\n }\n }\n}, \"checkout\");\nfunction upsert(arr, key, newVal) {\n const index = arr.indexOf(key);\n if (index === -1) {\n arr.push(newVal);\n } else {\n arr.splice(index, 1, newVal);\n }\n}\n__name(upsert, \"upsert\");\nfunction prettyPrintCommitHistory(commitArr) {\n const commit2 = commitArr.reduce((out, commit3) => {\n if (out.seq > commit3.seq) {\n return out;\n }\n return commit3;\n }, commitArr[0]);\n let line = \"\";\n commitArr.forEach(function(c) {\n if (c === commit2) {\n line += \"\t*\";\n } else {\n line += \"\t|\";\n }\n });\n const label = [line, commit2.id, commit2.seq];\n for (const branch2 in state.records.branches) {\n if (state.records.branches.get(branch2) === commit2.id) {\n label.push(branch2);\n }\n }\n log.debug(label.join(\" \"));\n if (commit2.parents && commit2.parents.length == 2 && commit2.parents[0] && commit2.parents[1]) {\n const newCommit = state.records.commits.get(commit2.parents[0]);\n upsert(commitArr, commit2, newCommit);\n if (commit2.parents[1]) {\n commitArr.push(state.records.commits.get(commit2.parents[1]));\n }\n } else if (commit2.parents.length == 0) {\n return;\n } else {\n if (commit2.parents[0]) {\n const newCommit = state.records.commits.get(commit2.parents[0]);\n upsert(commitArr, commit2, newCommit);\n }\n }\n commitArr = uniqBy(commitArr, (c) => c.id);\n prettyPrintCommitHistory(commitArr);\n}\n__name(prettyPrintCommitHistory, \"prettyPrintCommitHistory\");\nvar prettyPrint = /* @__PURE__ */ __name(function() {\n log.debug(state.records.commits);\n const node = getCommitsArray()[0];\n prettyPrintCommitHistory([node]);\n}, \"prettyPrint\");\nvar clear2 = /* @__PURE__ */ __name(function() {\n state.reset();\n clear();\n}, \"clear\");\nvar getBranchesAsObjArray = /* @__PURE__ */ __name(function() {\n const branchesArray = [...state.records.branchConfig.values()].map((branchConfig, i) => {\n if (branchConfig.order !== null && branchConfig.order !== void 0) {\n return branchConfig;\n }\n return {\n ...branchConfig,\n order: parseFloat(`0.${i}`)\n };\n }).sort((a, b) => (a.order ?? 0) - (b.order ?? 0)).map(({ name }) => ({ name }));\n return branchesArray;\n}, \"getBranchesAsObjArray\");\nvar getBranches = /* @__PURE__ */ __name(function() {\n return state.records.branches;\n}, \"getBranches\");\nvar getCommits = /* @__PURE__ */ __name(function() {\n return state.records.commits;\n}, \"getCommits\");\nvar getCommitsArray = /* @__PURE__ */ __name(function() {\n const commitArr = [...state.records.commits.values()];\n commitArr.forEach(function(o) {\n log.debug(o.id);\n });\n commitArr.sort((a, b) => a.seq - b.seq);\n return commitArr;\n}, \"getCommitsArray\");\nvar getCurrentBranch = /* @__PURE__ */ __name(function() {\n return state.records.currBranch;\n}, \"getCurrentBranch\");\nvar getDirection = /* @__PURE__ */ __name(function() {\n return state.records.direction;\n}, \"getDirection\");\nvar getHead = /* @__PURE__ */ __name(function() {\n return state.records.head;\n}, \"getHead\");\nvar db = {\n commitType,\n getConfig: getConfig3,\n setDirection,\n setOptions,\n getOptions,\n commit,\n branch,\n merge,\n cherryPick,\n checkout,\n //reset,\n prettyPrint,\n clear: clear2,\n getBranchesAsObjArray,\n getBranches,\n getCommits,\n getCommitsArray,\n getCurrentBranch,\n getDirection,\n getHead,\n setAccTitle,\n getAccTitle,\n getAccDescription,\n setAccDescription,\n setDiagramTitle,\n getDiagramTitle\n};\n\n// src/diagrams/git/gitGraphParser.ts\nvar populate = /* @__PURE__ */ __name((ast, db2) => {\n populateCommonDb(ast, db2);\n if (ast.dir) {\n db2.setDirection(ast.dir);\n }\n for (const statement of ast.statements) {\n parseStatement(statement, db2);\n }\n}, \"populate\");\nvar parseStatement = /* @__PURE__ */ __name((statement, db2) => {\n const parsers = {\n Commit: /* @__PURE__ */ __name((stmt) => db2.commit(parseCommit(stmt)), \"Commit\"),\n Branch: /* @__PURE__ */ __name((stmt) => db2.branch(parseBranch(stmt)), \"Branch\"),\n Merge: /* @__PURE__ */ __name((stmt) => db2.merge(parseMerge(stmt)), \"Merge\"),\n Checkout: /* @__PURE__ */ __name((stmt) => db2.checkout(parseCheckout(stmt)), \"Checkout\"),\n CherryPicking: /* @__PURE__ */ __name((stmt) => db2.cherryPick(parseCherryPicking(stmt)), \"CherryPicking\")\n };\n const parser2 = parsers[statement.$type];\n if (parser2) {\n parser2(statement);\n } else {\n log.error(`Unknown statement type: ${statement.$type}`);\n }\n}, \"parseStatement\");\nvar parseCommit = /* @__PURE__ */ __name((commit2) => {\n const commitDB = {\n id: commit2.id,\n msg: commit2.message ?? \"\",\n type: commit2.type !== void 0 ? commitType[commit2.type] : commitType.NORMAL,\n tags: commit2.tags ?? void 0\n };\n return commitDB;\n}, \"parseCommit\");\nvar parseBranch = /* @__PURE__ */ __name((branch2) => {\n const branchDB = {\n name: branch2.name,\n order: branch2.order ?? 0\n };\n return branchDB;\n}, \"parseBranch\");\nvar parseMerge = /* @__PURE__ */ __name((merge2) => {\n const mergeDB = {\n branch: merge2.branch,\n id: merge2.id ?? \"\",\n type: merge2.type !== void 0 ? commitType[merge2.type] : void 0,\n tags: merge2.tags ?? void 0\n };\n return mergeDB;\n}, \"parseMerge\");\nvar parseCheckout = /* @__PURE__ */ __name((checkout2) => {\n const branch2 = checkout2.branch;\n return branch2;\n}, \"parseCheckout\");\nvar parseCherryPicking = /* @__PURE__ */ __name((cherryPicking) => {\n const cherryPickDB = {\n id: cherryPicking.id,\n targetId: \"\",\n tags: cherryPicking.tags?.length === 0 ? void 0 : cherryPicking.tags,\n parent: cherryPicking.parent\n };\n return cherryPickDB;\n}, \"parseCherryPicking\");\nvar parser = {\n parse: /* @__PURE__ */ __name(async (input) => {\n const ast = await parse(\"gitGraph\", input);\n log.debug(ast);\n populate(ast, db);\n }, \"parse\")\n};\nif (void 0) {\n const { it, expect, describe } = void 0;\n const mockDB = {\n commitType,\n setDirection: vi.fn(),\n commit: vi.fn(),\n branch: vi.fn(),\n merge: vi.fn(),\n cherryPick: vi.fn(),\n checkout: vi.fn()\n };\n describe(\"GitGraph Parser\", () => {\n it(\"should parse a commit statement\", () => {\n const commit2 = {\n $type: \"Commit\",\n id: \"1\",\n message: \"test\",\n tags: [\"tag1\", \"tag2\"],\n type: \"NORMAL\"\n };\n parseStatement(commit2, mockDB);\n expect(mockDB.commit).toHaveBeenCalledWith({\n id: \"1\",\n msg: \"test\",\n tags: [\"tag1\", \"tag2\"],\n type: 0\n });\n });\n it(\"should parse a branch statement\", () => {\n const branch2 = {\n $type: \"Branch\",\n name: \"newBranch\",\n order: 1\n };\n parseStatement(branch2, mockDB);\n expect(mockDB.branch).toHaveBeenCalledWith({ name: \"newBranch\", order: 1 });\n });\n it(\"should parse a checkout statement\", () => {\n const checkout2 = {\n $type: \"Checkout\",\n branch: \"newBranch\"\n };\n parseStatement(checkout2, mockDB);\n expect(mockDB.checkout).toHaveBeenCalledWith(\"newBranch\");\n });\n it(\"should parse a merge statement\", () => {\n const merge2 = {\n $type: \"Merge\",\n branch: \"newBranch\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n type: \"NORMAL\"\n };\n parseStatement(merge2, mockDB);\n expect(mockDB.merge).toHaveBeenCalledWith({\n branch: \"newBranch\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n type: 0\n });\n });\n it(\"should parse a cherry picking statement\", () => {\n const cherryPick2 = {\n $type: \"CherryPicking\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n parent: \"2\"\n };\n parseStatement(cherryPick2, mockDB);\n expect(mockDB.cherryPick).toHaveBeenCalledWith({\n id: \"1\",\n targetId: \"\",\n parent: \"2\",\n tags: [\"tag1\", \"tag2\"]\n });\n });\n it(\"should parse a langium generated gitGraph ast\", () => {\n const dummy = {\n $type: \"GitGraph\",\n statements: []\n };\n const gitGraphAst = {\n $type: \"GitGraph\",\n statements: [\n {\n $container: dummy,\n $type: \"Commit\",\n id: \"1\",\n message: \"test\",\n tags: [\"tag1\", \"tag2\"],\n type: \"NORMAL\"\n },\n {\n $container: dummy,\n $type: \"Branch\",\n name: \"newBranch\",\n order: 1\n },\n {\n $container: dummy,\n $type: \"Merge\",\n branch: \"newBranch\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n type: \"NORMAL\"\n },\n {\n $container: dummy,\n $type: \"Checkout\",\n branch: \"newBranch\"\n },\n {\n $container: dummy,\n $type: \"CherryPicking\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n parent: \"2\"\n }\n ]\n };\n populate(gitGraphAst, mockDB);\n expect(mockDB.commit).toHaveBeenCalledWith({\n id: \"1\",\n msg: \"test\",\n tags: [\"tag1\", \"tag2\"],\n type: 0\n });\n expect(mockDB.branch).toHaveBeenCalledWith({ name: \"newBranch\", order: 1 });\n expect(mockDB.merge).toHaveBeenCalledWith({\n branch: \"newBranch\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n type: 0\n });\n expect(mockDB.checkout).toHaveBeenCalledWith(\"newBranch\");\n });\n });\n}\n\n// src/diagrams/git/gitGraphRenderer.ts\nimport { select } from \"d3\";\nvar DEFAULT_CONFIG = getConfig2();\nvar DEFAULT_GITGRAPH_CONFIG2 = DEFAULT_CONFIG?.gitGraph;\nvar LAYOUT_OFFSET = 10;\nvar COMMIT_STEP = 40;\nvar PX = 4;\nvar PY = 2;\nvar THEME_COLOR_LIMIT = 8;\nvar branchPos = /* @__PURE__ */ new Map();\nvar commitPos = /* @__PURE__ */ new Map();\nvar defaultPos = 30;\nvar allCommitsDict = /* @__PURE__ */ new Map();\nvar lanes = [];\nvar maxPos = 0;\nvar dir = \"LR\";\nvar clear3 = /* @__PURE__ */ __name(() => {\n branchPos.clear();\n commitPos.clear();\n allCommitsDict.clear();\n maxPos = 0;\n lanes = [];\n dir = \"LR\";\n}, \"clear\");\nvar drawText = /* @__PURE__ */ __name((txt) => {\n const svgLabel = document.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n const rows = typeof txt === \"string\" ? txt.split(/\\\\n|\\n|<br\\s*\\/?>/gi) : txt;\n rows.forEach((row) => {\n const tspan = document.createElementNS(\"http://www.w3.org/2000/svg\", \"tspan\");\n tspan.setAttributeNS(\"http://www.w3.org/XML/1998/namespace\", \"xml:space\", \"preserve\");\n tspan.setAttribute(\"dy\", \"1em\");\n tspan.setAttribute(\"x\", \"0\");\n tspan.setAttribute(\"class\", \"row\");\n tspan.textContent = row.trim();\n svgLabel.appendChild(tspan);\n });\n return svgLabel;\n}, \"drawText\");\nvar findClosestParent = /* @__PURE__ */ __name((parents) => {\n let closestParent;\n let comparisonFunc;\n let targetPosition;\n if (dir === \"BT\") {\n comparisonFunc = /* @__PURE__ */ __name((a, b) => a <= b, \"comparisonFunc\");\n targetPosition = Infinity;\n } else {\n comparisonFunc = /* @__PURE__ */ __name((a, b) => a >= b, \"comparisonFunc\");\n targetPosition = 0;\n }\n parents.forEach((parent) => {\n const parentPosition = dir === \"TB\" || dir == \"BT\" ? commitPos.get(parent)?.y : commitPos.get(parent)?.x;\n if (parentPosition !== void 0 && comparisonFunc(parentPosition, targetPosition)) {\n closestParent = parent;\n targetPosition = parentPosition;\n }\n });\n return closestParent;\n}, \"findClosestParent\");\nvar findClosestParentBT = /* @__PURE__ */ __name((parents) => {\n let closestParent = \"\";\n let maxPosition = Infinity;\n parents.forEach((parent) => {\n const parentPosition = commitPos.get(parent).y;\n if (parentPosition <= maxPosition) {\n closestParent = parent;\n maxPosition = parentPosition;\n }\n });\n return closestParent || void 0;\n}, \"findClosestParentBT\");\nvar setParallelBTPos = /* @__PURE__ */ __name((sortedKeys, commits, defaultPos2) => {\n let curPos = defaultPos2;\n let maxPosition = defaultPos2;\n const roots = [];\n sortedKeys.forEach((key) => {\n const commit2 = commits.get(key);\n if (!commit2) {\n throw new Error(`Commit not found for key ${key}`);\n }\n if (commit2.parents.length) {\n curPos = calculateCommitPosition(commit2);\n maxPosition = Math.max(curPos, maxPosition);\n } else {\n roots.push(commit2);\n }\n setCommitPosition(commit2, curPos);\n });\n curPos = maxPosition;\n roots.forEach((commit2) => {\n setRootPosition(commit2, curPos, defaultPos2);\n });\n sortedKeys.forEach((key) => {\n const commit2 = commits.get(key);\n if (commit2?.parents.length) {\n const closestParent = findClosestParentBT(commit2.parents);\n curPos = commitPos.get(closestParent).y - COMMIT_STEP;\n if (curPos <= maxPosition) {\n maxPosition = curPos;\n }\n const x = branchPos.get(commit2.branch).pos;\n const y = curPos - LAYOUT_OFFSET;\n commitPos.set(commit2.id, { x, y });\n }\n });\n}, \"setParallelBTPos\");\nvar findClosestParentPos = /* @__PURE__ */ __name((commit2) => {\n const closestParent = findClosestParent(commit2.parents.filter((p) => p !== null));\n if (!closestParent) {\n throw new Error(`Closest parent not found for commit ${commit2.id}`);\n }\n const closestParentPos = commitPos.get(closestParent)?.y;\n if (closestParentPos === void 0) {\n throw new Error(`Closest parent position not found for commit ${commit2.id}`);\n }\n return closestParentPos;\n}, \"findClosestParentPos\");\nvar calculateCommitPosition = /* @__PURE__ */ __name((commit2) => {\n const closestParentPos = findClosestParentPos(commit2);\n return closestParentPos + COMMIT_STEP;\n}, \"calculateCommitPosition\");\nvar setCommitPosition = /* @__PURE__ */ __name((commit2, curPos) => {\n const branch2 = branchPos.get(commit2.branch);\n if (!branch2) {\n throw new Error(`Branch not found for commit ${commit2.id}`);\n }\n const x = branch2.pos;\n const y = curPos + LAYOUT_OFFSET;\n commitPos.set(commit2.id, { x, y });\n return { x, y };\n}, \"setCommitPosition\");\nvar setRootPosition = /* @__PURE__ */ __name((commit2, curPos, defaultPos2) => {\n const branch2 = branchPos.get(commit2.branch);\n if (!branch2) {\n throw new Error(`Branch not found for commit ${commit2.id}`);\n }\n const y = curPos + defaultPos2;\n const x = branch2.pos;\n commitPos.set(commit2.id, { x, y });\n}, \"setRootPosition\");\nvar drawCommitBullet = /* @__PURE__ */ __name((gBullets, commit2, commitPosition, typeClass, branchIndex, commitSymbolType) => {\n if (commitSymbolType === commitType.HIGHLIGHT) {\n gBullets.append(\"rect\").attr(\"x\", commitPosition.x - 10).attr(\"y\", commitPosition.y - 10).attr(\"width\", 20).attr(\"height\", 20).attr(\n \"class\",\n `commit ${commit2.id} commit-highlight${branchIndex % THEME_COLOR_LIMIT} ${typeClass}-outer`\n );\n gBullets.append(\"rect\").attr(\"x\", commitPosition.x - 6).attr(\"y\", commitPosition.y - 6).attr(\"width\", 12).attr(\"height\", 12).attr(\n \"class\",\n `commit ${commit2.id} commit${branchIndex % THEME_COLOR_LIMIT} ${typeClass}-inner`\n );\n } else if (commitSymbolType === commitType.CHERRY_PICK) {\n gBullets.append(\"circle\").attr(\"cx\", commitPosition.x).attr(\"cy\", commitPosition.y).attr(\"r\", 10).attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n gBullets.append(\"circle\").attr(\"cx\", commitPosition.x - 3).attr(\"cy\", commitPosition.y + 2).attr(\"r\", 2.75).attr(\"fill\", \"#fff\").attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n gBullets.append(\"circle\").attr(\"cx\", commitPosition.x + 3).attr(\"cy\", commitPosition.y + 2).attr(\"r\", 2.75).attr(\"fill\", \"#fff\").attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n gBullets.append(\"line\").attr(\"x1\", commitPosition.x + 3).attr(\"y1\", commitPosition.y + 1).attr(\"x2\", commitPosition.x).attr(\"y2\", commitPosition.y - 5).attr(\"stroke\", \"#fff\").attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n gBullets.append(\"line\").attr(\"x1\", commitPosition.x - 3).attr(\"y1\", commitPosition.y + 1).attr(\"x2\", commitPosition.x).attr(\"y2\", commitPosition.y - 5).attr(\"stroke\", \"#fff\").attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n } else {\n const circle = gBullets.append(\"circle\");\n circle.attr(\"cx\", commitPosition.x);\n circle.attr(\"cy\", commitPosition.y);\n circle.attr(\"r\", commit2.type === commitType.MERGE ? 9 : 10);\n circle.attr(\"class\", `commit ${commit2.id} commit${branchIndex % THEME_COLOR_LIMIT}`);\n if (commitSymbolType === commitType.MERGE) {\n const circle2 = gBullets.append(\"circle\");\n circle2.attr(\"cx\", commitPosition.x);\n circle2.attr(\"cy\", commitPosition.y);\n circle2.attr(\"r\", 6);\n circle2.attr(\n \"class\",\n `commit ${typeClass} ${commit2.id} commit${branchIndex % THEME_COLOR_LIMIT}`\n );\n }\n if (commitSymbolType === commitType.REVERSE) {\n const cross = gBullets.append(\"path\");\n cross.attr(\n \"d\",\n `M ${commitPosition.x - 5},${commitPosition.y - 5}L${commitPosition.x + 5},${commitPosition.y + 5}M${commitPosition.x - 5},${commitPosition.y + 5}L${commitPosition.x + 5},${commitPosition.y - 5}`\n ).attr(\"class\", `commit ${typeClass} ${commit2.id} commit${branchIndex % THEME_COLOR_LIMIT}`);\n }\n }\n}, \"drawCommitBullet\");\nvar drawCommitLabel = /* @__PURE__ */ __name((gLabels, commit2, commitPosition, pos) => {\n if (commit2.type !== commitType.CHERRY_PICK && (commit2.customId && commit2.type === commitType.MERGE || commit2.type !== commitType.MERGE) && DEFAULT_GITGRAPH_CONFIG2?.showCommitLabel) {\n const wrapper = gLabels.append(\"g\");\n const labelBkg = wrapper.insert(\"rect\").attr(\"class\", \"commit-label-bkg\");\n const text = wrapper.append(\"text\").attr(\"x\", pos).attr(\"y\", commitPosition.y + 25).attr(\"class\", \"commit-label\").text(commit2.id);\n const bbox = text.node()?.getBBox();\n if (bbox) {\n labelBkg.attr(\"x\", commitPosition.posWithOffset - bbox.width / 2 - PY).attr(\"y\", commitPosition.y + 13.5).attr(\"width\", bbox.width + 2 * PY).attr(\"height\", bbox.height + 2 * PY);\n if (dir === \"TB\" || dir === \"BT\") {\n labelBkg.attr(\"x\", commitPosition.x - (bbox.width + 4 * PX + 5)).attr(\"y\", commitPosition.y - 12);\n text.attr(\"x\", commitPosition.x - (bbox.width + 4 * PX)).attr(\"y\", commitPosition.y + bbox.height - 12);\n } else {\n text.attr(\"x\", commitPosition.posWithOffset - bbox.width / 2);\n }\n if (DEFAULT_GITGRAPH_CONFIG2.rotateCommitLabel) {\n if (dir === \"TB\" || dir === \"BT\") {\n text.attr(\n \"transform\",\n \"rotate(-45, \" + commitPosition.x + \", \" + commitPosition.y + \")\"\n );\n labelBkg.attr(\n \"transform\",\n \"rotate(-45, \" + commitPosition.x + \", \" + commitPosition.y + \")\"\n );\n } else {\n const r_x = -7.5 - (bbox.width + 10) / 25 * 9.5;\n const r_y = 10 + bbox.width / 25 * 8.5;\n wrapper.attr(\n \"transform\",\n \"translate(\" + r_x + \", \" + r_y + \") rotate(-45, \" + pos + \", \" + commitPosition.y + \")\"\n );\n }\n }\n }\n }\n}, \"drawCommitLabel\");\nvar drawCommitTags = /* @__PURE__ */ __name((gLabels, commit2, commitPosition, pos) => {\n if (commit2.tags.length > 0) {\n let yOffset = 0;\n let maxTagBboxWidth = 0;\n let maxTagBboxHeight = 0;\n const tagElements = [];\n for (const tagValue of commit2.tags.reverse()) {\n const rect = gLabels.insert(\"polygon\");\n const hole = gLabels.append(\"circle\");\n const tag = gLabels.append(\"text\").attr(\"y\", commitPosition.y - 16 - yOffset).attr(\"class\", \"tag-label\").text(tagValue);\n const tagBbox = tag.node()?.getBBox();\n if (!tagBbox) {\n throw new Error(\"Tag bbox not found\");\n }\n maxTagBboxWidth = Math.max(maxTagBboxWidth, tagBbox.width);\n maxTagBboxHeight = Math.max(maxTagBboxHeight, tagBbox.height);\n tag.attr(\"x\", commitPosition.posWithOffset - tagBbox.width / 2);\n tagElements.push({\n tag,\n hole,\n rect,\n yOffset\n });\n yOffset += 20;\n }\n for (const { tag, hole, rect, yOffset: yOffset2 } of tagElements) {\n const h2 = maxTagBboxHeight / 2;\n const ly = commitPosition.y - 19.2 - yOffset2;\n rect.attr(\"class\", \"tag-label-bkg\").attr(\n \"points\",\n `\n ${pos - maxTagBboxWidth / 2 - PX / 2},${ly + PY} \n ${pos - maxTagBboxWidth / 2 - PX / 2},${ly - PY}\n ${commitPosition.posWithOffset - maxTagBboxWidth / 2 - PX},${ly - h2 - PY}\n ${commitPosition.posWithOffset + maxTagBboxWidth / 2 + PX},${ly - h2 - PY}\n ${commitPosition.posWithOffset + maxTagBboxWidth / 2 + PX},${ly + h2 + PY}\n ${commitPosition.posWithOffset - maxTagBboxWidth / 2 - PX},${ly + h2 + PY}`\n );\n hole.attr(\"cy\", ly).attr(\"cx\", pos - maxTagBboxWidth / 2 + PX / 2).attr(\"r\", 1.5).attr(\"class\", \"tag-hole\");\n if (dir === \"TB\" || dir === \"BT\") {\n const yOrigin = pos + yOffset2;\n rect.attr(\"class\", \"tag-label-bkg\").attr(\n \"points\",\n `\n ${commitPosition.x},${yOrigin + 2}\n ${commitPosition.x},${yOrigin - 2}\n ${commitPosition.x + LAYOUT_OFFSET},${yOrigin - h2 - 2}\n ${commitPosition.x + LAYOUT_OFFSET + maxTagBboxWidth + 4},${yOrigin - h2 - 2}\n ${commitPosition.x + LAYOUT_OFFSET + maxTagBboxWidth + 4},${yOrigin + h2 + 2}\n ${commitPosition.x + LAYOUT_OFFSET},${yOrigin + h2 + 2}`\n ).attr(\"transform\", \"translate(12,12) rotate(45, \" + commitPosition.x + \",\" + pos + \")\");\n hole.attr(\"cx\", commitPosition.x + PX / 2).attr(\"cy\", yOrigin).attr(\"transform\", \"translate(12,12) rotate(45, \" + commitPosition.x + \",\" + pos + \")\");\n tag.attr(\"x\", commitPosition.x + 5).attr(\"y\", yOrigin + 3).attr(\"transform\", \"translate(14,14) rotate(45, \" + commitPosition.x + \",\" + pos + \")\");\n }\n }\n }\n}, \"drawCommitTags\");\nvar getCommitClassType = /* @__PURE__ */ __name((commit2) => {\n const commitSymbolType = commit2.customType ?? commit2.type;\n switch (commitSymbolType) {\n case commitType.NORMAL:\n return \"commit-normal\";\n case commitType.REVERSE:\n return \"commit-reverse\";\n case commitType.HIGHLIGHT:\n return \"commit-highlight\";\n case commitType.MERGE:\n return \"commit-merge\";\n case commitType.CHERRY_PICK:\n return \"commit-cherry-pick\";\n default:\n return \"commit-normal\";\n }\n}, \"getCommitClassType\");\nvar calculatePosition = /* @__PURE__ */ __name((commit2, dir2, pos, commitPos2) => {\n const defaultCommitPosition = { x: 0, y: 0 };\n if (commit2.parents.length > 0) {\n const closestParent = findClosestParent(commit2.parents);\n if (closestParent) {\n const parentPosition = commitPos2.get(closestParent) ?? defaultCommitPosition;\n if (dir2 === \"TB\") {\n return parentPosition.y + COMMIT_STEP;\n } else if (dir2 === \"BT\") {\n const currentPosition = commitPos2.get(commit2.id) ?? defaultCommitPosition;\n return currentPosition.y - COMMIT_STEP;\n } else {\n return parentPosition.x + COMMIT_STEP;\n }\n }\n } else {\n if (dir2 === \"TB\") {\n return defaultPos;\n } else if (dir2 === \"BT\") {\n const currentPosition = commitPos2.get(commit2.id) ?? defaultCommitPosition;\n return currentPosition.y - COMMIT_STEP;\n } else {\n return 0;\n }\n }\n return 0;\n}, \"calculatePosition\");\nvar getCommitPosition = /* @__PURE__ */ __name((commit2, pos, isParallelCommits) => {\n const posWithOffset = dir === \"BT\" && isParallelCommits ? pos : pos + LAYOUT_OFFSET;\n const y = dir === \"TB\" || dir === \"BT\" ? posWithOffset : branchPos.get(commit2.branch)?.pos;\n const x = dir === \"TB\" || dir === \"BT\" ? branchPos.get(commit2.branch)?.pos : posWithOffset;\n if (x === void 0 || y === void 0) {\n throw new Error(`Position were undefined for commit ${commit2.id}`);\n }\n return { x, y, posWithOffset };\n}, \"getCommitPosition\");\nvar drawCommits = /* @__PURE__ */ __name((svg, commits, modifyGraph) => {\n if (!DEFAULT_GITGRAPH_CONFIG2) {\n throw new Error(\"GitGraph config not found\");\n }\n const gBullets = svg.append(\"g\").attr(\"class\", \"commit-bullets\");\n const gLabels = svg.append(\"g\").attr(\"class\", \"commit-labels\");\n let pos = dir === \"TB\" || dir === \"BT\" ? defaultPos : 0;\n const keys = [...commits.keys()];\n const isParallelCommits = DEFAULT_GITGRAPH_CONFIG2?.parallelCommits ?? false;\n const sortKeys = /* @__PURE__ */ __name((a, b) => {\n const seqA = commits.get(a)?.seq;\n const seqB = commits.get(b)?.seq;\n return seqA !== void 0 && seqB !== void 0 ? seqA - seqB : 0;\n }, \"sortKeys\");\n let sortedKeys = keys.sort(sortKeys);\n if (dir === \"BT\") {\n if (isParallelCommits) {\n setParallelBTPos(sortedKeys, commits, pos);\n }\n sortedKeys = sortedKeys.reverse();\n }\n sortedKeys.forEach((key) => {\n const commit2 = commits.get(key);\n if (!commit2) {\n throw new Error(`Commit not found for key ${key}`);\n }\n if (isParallelCommits) {\n pos = calculatePosition(commit2, dir, pos, commitPos);\n }\n const commitPosition = getCommitPosition(commit2, pos, isParallelCommits);\n if (modifyGraph) {\n const typeClass = getCommitClassType(commit2);\n const commitSymbolType = commit2.customType ?? commit2.type;\n const branchIndex = branchPos.get(commit2.branch)?.index ?? 0;\n drawCommitBullet(gBullets, commit2, commitPosition, typeClass, branchIndex, commitSymbolType);\n drawCommitLabel(gLabels, commit2, commitPosition, pos);\n drawCommitTags(gLabels, commit2, commitPosition, pos);\n }\n if (dir === \"TB\" || dir === \"BT\") {\n commitPos.set(commit2.id, { x: commitPosition.x, y: commitPosition.posWithOffset });\n } else {\n commitPos.set(commit2.id, { x: commitPosition.posWithOffset, y: commitPosition.y });\n }\n pos = dir === \"BT\" && isParallelCommits ? pos + COMMIT_STEP : pos + COMMIT_STEP + LAYOUT_OFFSET;\n if (pos > maxPos) {\n maxPos = pos;\n }\n });\n}, \"drawCommits\");\nvar shouldRerouteArrow = /* @__PURE__ */ __name((commitA, commitB, p1, p2, allCommits) => {\n const commitBIsFurthest = dir === \"TB\" || dir === \"BT\" ? p1.x < p2.x : p1.y < p2.y;\n const branchToGetCurve = commitBIsFurthest ? commitB.branch : commitA.branch;\n const isOnBranchToGetCurve = /* @__PURE__ */ __name((x) => x.branch === branchToGetCurve, \"isOnBranchToGetCurve\");\n const isBetweenCommits = /* @__PURE__ */ __name((x) => x.seq > commitA.seq && x.seq < commitB.seq, \"isBetweenCommits\");\n return [...allCommits.values()].some((commitX) => {\n return isBetweenCommits(commitX) && isOnBranchToGetCurve(commitX);\n });\n}, \"shouldRerouteArrow\");\nvar findLane = /* @__PURE__ */ __name((y1, y2, depth = 0) => {\n const candidate = y1 + Math.abs(y1 - y2) / 2;\n if (depth > 5) {\n return candidate;\n }\n const ok = lanes.every((lane) => Math.abs(lane - candidate) >= 10);\n if (ok) {\n lanes.push(candidate);\n return candidate;\n }\n const diff = Math.abs(y1 - y2);\n return findLane(y1, y2 - diff / 5, depth + 1);\n}, \"findLane\");\nvar drawArrow = /* @__PURE__ */ __name((svg, commitA, commitB, allCommits) => {\n const p1 = commitPos.get(commitA.id);\n const p2 = commitPos.get(commitB.id);\n if (p1 === void 0 || p2 === void 0) {\n throw new Error(`Commit positions not found for commits ${commitA.id} and ${commitB.id}`);\n }\n const arrowNeedsRerouting = shouldRerouteArrow(commitA, commitB, p1, p2, allCommits);\n let arc = \"\";\n let arc2 = \"\";\n let radius = 0;\n let offset = 0;\n let colorClassNum = branchPos.get(commitB.branch)?.index;\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n colorClassNum = branchPos.get(commitA.branch)?.index;\n }\n let lineDef;\n if (arrowNeedsRerouting) {\n arc = \"A 10 10, 0, 0, 0,\";\n arc2 = \"A 10 10, 0, 0, 1,\";\n radius = 10;\n offset = 10;\n const lineY = p1.y < p2.y ? findLane(p1.y, p2.y) : findLane(p2.y, p1.y);\n const lineX = p1.x < p2.x ? findLane(p1.x, p2.x) : findLane(p2.x, p1.x);\n if (dir === \"TB\") {\n if (p1.x < p2.x) {\n lineDef = `M ${p1.x} ${p1.y} L ${lineX - radius} ${p1.y} ${arc2} ${lineX} ${p1.y + offset} L ${lineX} ${p2.y - radius} ${arc} ${lineX + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n colorClassNum = branchPos.get(commitA.branch)?.index;\n lineDef = `M ${p1.x} ${p1.y} L ${lineX + radius} ${p1.y} ${arc} ${lineX} ${p1.y + offset} L ${lineX} ${p2.y - radius} ${arc2} ${lineX - offset} ${p2.y} L ${p2.x} ${p2.y}`;\n }\n } else if (dir === \"BT\") {\n if (p1.x < p2.x) {\n lineDef = `M ${p1.x} ${p1.y} L ${lineX - radius} ${p1.y} ${arc} ${lineX} ${p1.y - offset} L ${lineX} ${p2.y + radius} ${arc2} ${lineX + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n colorClassNum = branchPos.get(commitA.branch)?.index;\n lineDef = `M ${p1.x} ${p1.y} L ${lineX + radius} ${p1.y} ${arc2} ${lineX} ${p1.y - offset} L ${lineX} ${p2.y + radius} ${arc} ${lineX - offset} ${p2.y} L ${p2.x} ${p2.y}`;\n }\n } else {\n if (p1.y < p2.y) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY - radius} ${arc} ${p1.x + offset} ${lineY} L ${p2.x - radius} ${lineY} ${arc2} ${p2.x} ${lineY + offset} L ${p2.x} ${p2.y}`;\n } else {\n colorClassNum = branchPos.get(commitA.branch)?.index;\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY + radius} ${arc2} ${p1.x + offset} ${lineY} L ${p2.x - radius} ${lineY} ${arc} ${p2.x} ${lineY - offset} L ${p2.x} ${p2.y}`;\n }\n }\n } else {\n arc = \"A 20 20, 0, 0, 0,\";\n arc2 = \"A 20 20, 0, 0, 1,\";\n radius = 20;\n offset = 20;\n if (dir === \"TB\") {\n if (p1.x < p2.x) {\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc2} ${p2.x} ${p1.y + offset} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.x > p2.x) {\n arc = \"A 20 20, 0, 0, 0,\";\n arc2 = \"A 20 20, 0, 0, 1,\";\n radius = 20;\n offset = 20;\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc2} ${p1.x - offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x + radius} ${p1.y} ${arc} ${p2.x} ${p1.y + offset} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.x === p2.x) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x} ${p2.y}`;\n }\n } else if (dir === \"BT\") {\n if (p1.x < p2.x) {\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y + radius} ${arc2} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc} ${p2.x} ${p1.y - offset} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.x > p2.x) {\n arc = \"A 20 20, 0, 0, 0,\";\n arc2 = \"A 20 20, 0, 0, 1,\";\n radius = 20;\n offset = 20;\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y + radius} ${arc} ${p1.x - offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc} ${p2.x} ${p1.y - offset} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.x === p2.x) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x} ${p2.y}`;\n }\n } else {\n if (p1.y < p2.y) {\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc2} ${p2.x} ${p1.y + offset} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.y > p2.y) {\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc} ${p2.x} ${p1.y - offset} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y + radius} ${arc2} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.y === p2.y) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x} ${p2.y}`;\n }\n }\n }\n if (lineDef === void 0) {\n throw new Error(\"Line definition not found\");\n }\n svg.append(\"path\").attr(\"d\", lineDef).attr(\"class\", \"arrow arrow\" + colorClassNum % THEME_COLOR_LIMIT);\n}, \"drawArrow\");\nvar drawArrows = /* @__PURE__ */ __name((svg, commits) => {\n const gArrows = svg.append(\"g\").attr(\"class\", \"commit-arrows\");\n [...commits.keys()].forEach((key) => {\n const commit2 = commits.get(key);\n if (commit2.parents && commit2.parents.length > 0) {\n commit2.parents.forEach((parent) => {\n drawArrow(gArrows, commits.get(parent), commit2, commits);\n });\n }\n });\n}, \"drawArrows\");\nvar drawBranches = /* @__PURE__ */ __name((svg, branches) => {\n const g = svg.append(\"g\");\n branches.forEach((branch2, index) => {\n const adjustIndexForTheme = index % THEME_COLOR_LIMIT;\n const pos = branchPos.get(branch2.name)?.pos;\n if (pos === void 0) {\n throw new Error(`Position not found for branch ${branch2.name}`);\n }\n const line = g.append(\"line\");\n line.attr(\"x1\", 0);\n line.attr(\"y1\", pos);\n line.attr(\"x2\", maxPos);\n line.attr(\"y2\", pos);\n line.attr(\"class\", \"branch branch\" + adjustIndexForTheme);\n if (dir === \"TB\") {\n line.attr(\"y1\", defaultPos);\n line.attr(\"x1\", pos);\n line.attr(\"y2\", maxPos);\n line.attr(\"x2\", pos);\n } else if (dir === \"BT\") {\n line.attr(\"y1\", maxPos);\n line.attr(\"x1\", pos);\n line.attr(\"y2\", defaultPos);\n line.attr(\"x2\", pos);\n }\n lanes.push(pos);\n const name = branch2.name;\n const labelElement = drawText(name);\n const bkg = g.insert(\"rect\");\n const branchLabel = g.insert(\"g\").attr(\"class\", \"branchLabel\");\n const label = branchLabel.insert(\"g\").attr(\"class\", \"label branch-label\" + adjustIndexForTheme);\n label.node().appendChild(labelElement);\n const bbox = labelElement.getBBox();\n bkg.attr(\"class\", \"branchLabelBkg label\" + adjustIndexForTheme).attr(\"rx\", 4).attr(\"ry\", 4).attr(\"x\", -bbox.width - 4 - (DEFAULT_GITGRAPH_CONFIG2?.rotateCommitLabel === true ? 30 : 0)).attr(\"y\", -bbox.height / 2 + 8).attr(\"width\", bbox.width + 18).attr(\"height\", bbox.height + 4);\n label.attr(\n \"transform\",\n \"translate(\" + (-bbox.width - 14 - (DEFAULT_GITGRAPH_CONFIG2?.rotateCommitLabel === true ? 30 : 0)) + \", \" + (pos - bbox.height / 2 - 1) + \")\"\n );\n if (dir === \"TB\") {\n bkg.attr(\"x\", pos - bbox.width / 2 - 10).attr(\"y\", 0);\n label.attr(\"transform\", \"translate(\" + (pos - bbox.width / 2 - 5) + \", 0)\");\n } else if (dir === \"BT\") {\n bkg.attr(\"x\", pos - bbox.width / 2 - 10).attr(\"y\", maxPos);\n label.attr(\"transform\", \"translate(\" + (pos - bbox.width / 2 - 5) + \", \" + maxPos + \")\");\n } else {\n bkg.attr(\"transform\", \"translate(-19, \" + (pos - bbox.height / 2) + \")\");\n }\n });\n}, \"drawBranches\");\nvar setBranchPosition = /* @__PURE__ */ __name(function(name, pos, index, bbox, rotateCommitLabel) {\n branchPos.set(name, { pos, index });\n pos += 50 + (rotateCommitLabel ? 40 : 0) + (dir === \"TB\" || dir === \"BT\" ? bbox.width / 2 : 0);\n return pos;\n}, \"setBranchPosition\");\nvar draw = /* @__PURE__ */ __name(function(txt, id, ver, diagObj) {\n clear3();\n log.debug(\"in gitgraph renderer\", txt + \"\\n\", \"id:\", id, ver);\n if (!DEFAULT_GITGRAPH_CONFIG2) {\n throw new Error(\"GitGraph config not found\");\n }\n const rotateCommitLabel = DEFAULT_GITGRAPH_CONFIG2.rotateCommitLabel ?? false;\n const db2 = diagObj.db;\n allCommitsDict = db2.getCommits();\n const branches = db2.getBranchesAsObjArray();\n dir = db2.getDirection();\n const diagram2 = select(`[id=\"${id}\"]`);\n let pos = 0;\n branches.forEach((branch2, index) => {\n const labelElement = drawText(branch2.name);\n const g = diagram2.append(\"g\");\n const branchLabel = g.insert(\"g\").attr(\"class\", \"branchLabel\");\n const label = branchLabel.insert(\"g\").attr(\"class\", \"label branch-label\");\n label.node()?.appendChild(labelElement);\n const bbox = labelElement.getBBox();\n pos = setBranchPosition(branch2.name, pos, index, bbox, rotateCommitLabel);\n label.remove();\n branchLabel.remove();\n g.remove();\n });\n drawCommits(diagram2, allCommitsDict, false);\n if (DEFAULT_GITGRAPH_CONFIG2.showBranches) {\n drawBranches(diagram2, branches);\n }\n drawArrows(diagram2, allCommitsDict);\n drawCommits(diagram2, allCommitsDict, true);\n utils_default.insertTitle(\n diagram2,\n \"gitTitleText\",\n DEFAULT_GITGRAPH_CONFIG2.titleTopMargin ?? 0,\n db2.getDiagramTitle()\n );\n setupGraphViewbox(\n void 0,\n diagram2,\n DEFAULT_GITGRAPH_CONFIG2.diagramPadding,\n DEFAULT_GITGRAPH_CONFIG2.useMaxWidth\n );\n}, \"draw\");\nvar gitGraphRenderer_default = {\n draw\n};\nif (void 0) {\n const { it, expect, describe } = void 0;\n describe(\"drawText\", () => {\n it(\"should drawText\", () => {\n const svgLabel = drawText(\"main\");\n expect(svgLabel).toBeDefined();\n expect(svgLabel.children[0].innerHTML).toBe(\"main\");\n });\n });\n describe(\"branchPosition\", () => {\n const bbox = {\n x: 0,\n y: 0,\n width: 10,\n height: 10,\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n toJSON: /* @__PURE__ */ __name(() => \"\", \"toJSON\")\n };\n it(\"should setBranchPositions LR with two branches\", () => {\n dir = \"LR\";\n const pos = setBranchPosition(\"main\", 0, 0, bbox, true);\n expect(pos).toBe(90);\n expect(branchPos.get(\"main\")).toEqual({ pos: 0, index: 0 });\n const posNext = setBranchPosition(\"develop\", pos, 1, bbox, true);\n expect(posNext).toBe(180);\n expect(branchPos.get(\"develop\")).toEqual({ pos, index: 1 });\n });\n it(\"should setBranchPositions TB with two branches\", () => {\n dir = \"TB\";\n bbox.width = 34.9921875;\n const pos = setBranchPosition(\"main\", 0, 0, bbox, true);\n expect(pos).toBe(107.49609375);\n expect(branchPos.get(\"main\")).toEqual({ pos: 0, index: 0 });\n bbox.width = 56.421875;\n const posNext = setBranchPosition(\"develop\", pos, 1, bbox, true);\n expect(posNext).toBe(225.70703125);\n expect(branchPos.get(\"develop\")).toEqual({ pos, index: 1 });\n });\n });\n describe(\"commitPosition\", () => {\n const commits = /* @__PURE__ */ new Map([\n [\n \"commitZero\",\n {\n id: \"ZERO\",\n message: \"\",\n seq: 0,\n type: commitType.NORMAL,\n tags: [],\n parents: [],\n branch: \"main\"\n }\n ],\n [\n \"commitA\",\n {\n id: \"A\",\n message: \"\",\n seq: 1,\n type: commitType.NORMAL,\n tags: [],\n parents: [\"ZERO\"],\n branch: \"feature\"\n }\n ],\n [\n \"commitB\",\n {\n id: \"B\",\n message: \"\",\n seq: 2,\n type: commitType.NORMAL,\n tags: [],\n parents: [\"A\"],\n branch: \"feature\"\n }\n ],\n [\n \"commitM\",\n {\n id: \"M\",\n message: \"merged branch feature into main\",\n seq: 3,\n type: commitType.MERGE,\n tags: [],\n parents: [\"ZERO\", \"B\"],\n branch: \"main\",\n customId: true\n }\n ],\n [\n \"commitC\",\n {\n id: \"C\",\n message: \"\",\n seq: 4,\n type: commitType.NORMAL,\n tags: [],\n parents: [\"ZERO\"],\n branch: \"release\"\n }\n ],\n [\n \"commit5_8928ea0\",\n {\n id: \"5-8928ea0\",\n message: \"cherry-picked [object Object] into release\",\n seq: 5,\n type: commitType.CHERRY_PICK,\n tags: [],\n parents: [\"C\", \"M\"],\n branch: \"release\"\n }\n ],\n [\n \"commitD\",\n {\n id: \"D\",\n message: \"\",\n seq: 6,\n type: commitType.NORMAL,\n tags: [],\n parents: [\"5-8928ea0\"],\n branch: \"release\"\n }\n ],\n [\n \"commit7_ed848ba\",\n {\n id: \"7-ed848ba\",\n message: \"cherry-picked [object Object] into release\",\n seq: 7,\n type: commitType.CHERRY_PICK,\n tags: [],\n parents: [\"D\", \"M\"],\n branch: \"release\"\n }\n ]\n ]);\n let pos = 0;\n branchPos.set(\"main\", { pos: 0, index: 0 });\n branchPos.set(\"feature\", { pos: 107.49609375, index: 1 });\n branchPos.set(\"release\", { pos: 224.03515625, index: 2 });\n describe(\"TB\", () => {\n pos = 30;\n dir = \"TB\";\n const expectedCommitPositionTB = /* @__PURE__ */ new Map([\n [\"commitZero\", { x: 0, y: 40, posWithOffset: 40 }],\n [\"commitA\", { x: 107.49609375, y: 90, posWithOffset: 90 }],\n [\"commitB\", { x: 107.49609375, y: 140, posWithOffset: 140 }],\n [\"commitM\", { x: 0, y: 190, posWithOffset: 190 }],\n [\"commitC\", { x: 224.03515625, y: 240, posWithOffset: 240 }],\n [\"commit5_8928ea0\", { x: 224.03515625, y: 290, posWithOffset: 290 }],\n [\"commitD\", { x: 224.03515625, y: 340, posWithOffset: 340 }],\n [\"commit7_ed848ba\", { x: 224.03515625, y: 390, posWithOffset: 390 }]\n ]);\n commits.forEach((commit2, key) => {\n it(`should give the correct position for commit ${key}`, () => {\n const position = getCommitPosition(commit2, pos, false);\n expect(position).toEqual(expectedCommitPositionTB.get(key));\n pos += 50;\n });\n });\n });\n describe(\"LR\", () => {\n let pos2 = 30;\n dir = \"LR\";\n const expectedCommitPositionLR = /* @__PURE__ */ new Map([\n [\"commitZero\", { x: 0, y: 40, posWithOffset: 40 }],\n [\"commitA\", { x: 107.49609375, y: 90, posWithOffset: 90 }],\n [\"commitB\", { x: 107.49609375, y: 140, posWithOffset: 140 }],\n [\"commitM\", { x: 0, y: 190, posWithOffset: 190 }],\n [\"commitC\", { x: 224.03515625, y: 240, posWithOffset: 240 }],\n [\"commit5_8928ea0\", { x: 224.03515625, y: 290, posWithOffset: 290 }],\n [\"commitD\", { x: 224.03515625, y: 340, posWithOffset: 340 }],\n [\"commit7_ed848ba\", { x: 224.03515625, y: 390, posWithOffset: 390 }]\n ]);\n commits.forEach((commit2, key) => {\n it(`should give the correct position for commit ${key}`, () => {\n const position = getCommitPosition(commit2, pos2, false);\n expect(position).toEqual(expectedCommitPositionLR.get(key));\n pos2 += 50;\n });\n });\n });\n describe(\"getCommitClassType\", () => {\n const expectedCommitClassType = /* @__PURE__ */ new Map([\n [\"commitZero\", \"commit-normal\"],\n [\"commitA\", \"commit-normal\"],\n [\"commitB\", \"commit-normal\"],\n [\"commitM\", \"commit-merge\"],\n [\"commitC\", \"commit-normal\"],\n [\"commit5_8928ea0\", \"commit-cherry-pick\"],\n [\"commitD\", \"commit-normal\"],\n [\"commit7_ed848ba\", \"commit-cherry-pick\"]\n ]);\n commits.forEach((commit2, key) => {\n it(`should give the correct class type for commit ${key}`, () => {\n const classType = getCommitClassType(commit2);\n expect(classType).toBe(expectedCommitClassType.get(key));\n });\n });\n });\n });\n describe(\"building BT parallel commit diagram\", () => {\n const commits = /* @__PURE__ */ new Map([\n [\n \"1-abcdefg\",\n {\n id: \"1-abcdefg\",\n message: \"\",\n seq: 0,\n type: 0,\n tags: [],\n parents: [],\n branch: \"main\"\n }\n ],\n [\n \"2-abcdefg\",\n {\n id: \"2-abcdefg\",\n message: \"\",\n seq: 1,\n type: 0,\n tags: [],\n parents: [\"1-abcdefg\"],\n branch: \"main\"\n }\n ],\n [\n \"3-abcdefg\",\n {\n id: \"3-abcdefg\",\n message: \"\",\n seq: 2,\n type: 0,\n tags: [],\n parents: [\"2-abcdefg\"],\n branch: \"develop\"\n }\n ],\n [\n \"4-abcdefg\",\n {\n id: \"4-abcdefg\",\n message: \"\",\n seq: 3,\n type: 0,\n tags: [],\n parents: [\"3-abcdefg\"],\n branch: \"develop\"\n }\n ],\n [\n \"5-abcdefg\",\n {\n id: \"5-abcdefg\",\n message: \"\",\n seq: 4,\n type: 0,\n tags: [],\n parents: [\"2-abcdefg\"],\n branch: \"feature\"\n }\n ],\n [\n \"6-abcdefg\",\n {\n id: \"6-abcdefg\",\n message: \"\",\n seq: 5,\n type: 0,\n tags: [],\n parents: [\"5-abcdefg\"],\n branch: \"feature\"\n }\n ],\n [\n \"7-abcdefg\",\n {\n id: \"7-abcdefg\",\n message: \"\",\n seq: 6,\n type: 0,\n tags: [],\n parents: [\"2-abcdefg\"],\n branch: \"main\"\n }\n ],\n [\n \"8-abcdefg\",\n {\n id: \"8-abcdefg\",\n message: \"\",\n seq: 7,\n type: 0,\n tags: [],\n parents: [\"7-abcdefg\"],\n branch: \"main\"\n }\n ]\n ]);\n const expectedCommitPosition = /* @__PURE__ */ new Map([\n [\"1-abcdefg\", { x: 0, y: 40 }],\n [\"2-abcdefg\", { x: 0, y: 90 }],\n [\"3-abcdefg\", { x: 107.49609375, y: 140 }],\n [\"4-abcdefg\", { x: 107.49609375, y: 190 }],\n [\"5-abcdefg\", { x: 225.70703125, y: 140 }],\n [\"6-abcdefg\", { x: 225.70703125, y: 190 }],\n [\"7-abcdefg\", { x: 0, y: 140 }],\n [\"8-abcdefg\", { x: 0, y: 190 }]\n ]);\n const expectedCommitPositionAfterParallel = /* @__PURE__ */ new Map([\n [\"1-abcdefg\", { x: 0, y: 210 }],\n [\"2-abcdefg\", { x: 0, y: 160 }],\n [\"3-abcdefg\", { x: 107.49609375, y: 110 }],\n [\"4-abcdefg\", { x: 107.49609375, y: 60 }],\n [\"5-abcdefg\", { x: 225.70703125, y: 110 }],\n [\"6-abcdefg\", { x: 225.70703125, y: 60 }],\n [\"7-abcdefg\", { x: 0, y: 110 }],\n [\"8-abcdefg\", { x: 0, y: 60 }]\n ]);\n const expectedCommitCurrentPosition = /* @__PURE__ */ new Map([\n [\"1-abcdefg\", 30],\n [\"2-abcdefg\", 80],\n [\"3-abcdefg\", 130],\n [\"4-abcdefg\", 180],\n [\"5-abcdefg\", 130],\n [\"6-abcdefg\", 180],\n [\"7-abcdefg\", 130],\n [\"8-abcdefg\", 180]\n ]);\n const sortedKeys = [...expectedCommitPosition.keys()];\n it(\"should get the correct commit position and current position\", () => {\n dir = \"BT\";\n let curPos = 30;\n commitPos.clear();\n branchPos.clear();\n branchPos.set(\"main\", { pos: 0, index: 0 });\n branchPos.set(\"develop\", { pos: 107.49609375, index: 1 });\n branchPos.set(\"feature\", { pos: 225.70703125, index: 2 });\n DEFAULT_GITGRAPH_CONFIG2.parallelCommits = true;\n commits.forEach((commit2, key) => {\n if (commit2.parents.length > 0) {\n curPos = calculateCommitPosition(commit2);\n }\n const position = setCommitPosition(commit2, curPos);\n expect(position).toEqual(expectedCommitPosition.get(key));\n expect(curPos).toEqual(expectedCommitCurrentPosition.get(key));\n });\n });\n it(\"should get the correct commit position after parallel commits\", () => {\n commitPos.clear();\n branchPos.clear();\n dir = \"BT\";\n const curPos = 30;\n commitPos.clear();\n branchPos.clear();\n branchPos.set(\"main\", { pos: 0, index: 0 });\n branchPos.set(\"develop\", { pos: 107.49609375, index: 1 });\n branchPos.set(\"feature\", { pos: 225.70703125, index: 2 });\n setParallelBTPos(sortedKeys, commits, curPos);\n sortedKeys.forEach((commit2) => {\n const position = commitPos.get(commit2);\n expect(position).toEqual(expectedCommitPositionAfterParallel.get(commit2));\n });\n });\n });\n DEFAULT_GITGRAPH_CONFIG2.parallelCommits = false;\n it(\"add\", () => {\n commitPos.set(\"parent1\", { x: 1, y: 1 });\n commitPos.set(\"parent2\", { x: 2, y: 2 });\n commitPos.set(\"parent3\", { x: 3, y: 3 });\n dir = \"LR\";\n const parents = [\"parent1\", \"parent2\", \"parent3\"];\n const closestParent = findClosestParent(parents);\n expect(closestParent).toBe(\"parent3\");\n commitPos.clear();\n });\n}\n\n// src/diagrams/git/styles.js\nvar getStyles = /* @__PURE__ */ __name((options) => `\n .commit-id,\n .commit-msg,\n .branch-label {\n fill: lightgrey;\n color: lightgrey;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n ${[0, 1, 2, 3, 4, 5, 6, 7].map(\n (i) => `\n .branch-label${i} { fill: ${options[\"gitBranchLabel\" + i]}; }\n .commit${i} { stroke: ${options[\"git\" + i]}; fill: ${options[\"git\" + i]}; }\n .commit-highlight${i} { stroke: ${options[\"gitInv\" + i]}; fill: ${options[\"gitInv\" + i]}; }\n .label${i} { fill: ${options[\"git\" + i]}; }\n .arrow${i} { stroke: ${options[\"git\" + i]}; }\n `\n).join(\"\\n\")}\n\n .branch {\n stroke-width: 1;\n stroke: ${options.lineColor};\n stroke-dasharray: 2;\n }\n .commit-label { font-size: ${options.commitLabelFontSize}; fill: ${options.commitLabelColor};}\n .commit-label-bkg { font-size: ${options.commitLabelFontSize}; fill: ${options.commitLabelBackground}; opacity: 0.5; }\n .tag-label { font-size: ${options.tagLabelFontSize}; fill: ${options.tagLabelColor};}\n .tag-label-bkg { fill: ${options.tagLabelBackground}; stroke: ${options.tagLabelBorder}; }\n .tag-hole { fill: ${options.textColor}; }\n\n .commit-merge {\n stroke: ${options.primaryColor};\n fill: ${options.primaryColor};\n }\n .commit-reverse {\n stroke: ${options.primaryColor};\n fill: ${options.primaryColor};\n stroke-width: 3;\n }\n .commit-highlight-outer {\n }\n .commit-highlight-inner {\n stroke: ${options.primaryColor};\n fill: ${options.primaryColor};\n }\n\n .arrow { stroke-width: 8; stroke-linecap: round; fill: none}\n .gitTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.textColor};\n }\n`, \"getStyles\");\nvar styles_default = getStyles;\n\n// src/diagrams/git/gitGraphDiagram.ts\nvar diagram = {\n parser,\n db,\n renderer: gitGraphRenderer_default,\n styles: styles_default\n};\nexport {\n diagram\n};\n"],"x_google_ignoreList":[0],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gitGraphDiagram-NY62KEGX-DIySZYvd.js","names":["select"],"sources":["../../../../node_modules/mermaid/dist/chunks/mermaid.core/gitGraphDiagram-NY62KEGX.mjs"],"sourcesContent":["import {\n populateCommonDb\n} from \"./chunk-4BX2VUAB.mjs\";\nimport {\n ImperativeState\n} from \"./chunk-QZHKN3VN.mjs\";\nimport {\n cleanAndMerge,\n random,\n utils_default\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n clear,\n common_default,\n defaultConfig_default,\n getAccDescription,\n getAccTitle,\n getConfig,\n getConfig2,\n getDiagramTitle,\n setAccDescription,\n setAccTitle,\n setDiagramTitle,\n setupGraphViewbox2 as setupGraphViewbox\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/git/gitGraphParser.ts\nimport { parse } from \"@mermaid-js/parser\";\n\n// src/diagrams/git/gitGraphTypes.ts\nvar commitType = {\n NORMAL: 0,\n REVERSE: 1,\n HIGHLIGHT: 2,\n MERGE: 3,\n CHERRY_PICK: 4\n};\n\n// src/diagrams/git/gitGraphAst.ts\nvar DEFAULT_GITGRAPH_CONFIG = defaultConfig_default.gitGraph;\nvar getConfig3 = /* @__PURE__ */ __name(() => {\n const config = cleanAndMerge({\n ...DEFAULT_GITGRAPH_CONFIG,\n ...getConfig().gitGraph\n });\n return config;\n}, \"getConfig\");\nvar state = new ImperativeState(() => {\n const config = getConfig3();\n const mainBranchName = config.mainBranchName;\n const mainBranchOrder = config.mainBranchOrder;\n return {\n mainBranchName,\n commits: /* @__PURE__ */ new Map(),\n head: null,\n branchConfig: /* @__PURE__ */ new Map([[mainBranchName, { name: mainBranchName, order: mainBranchOrder }]]),\n branches: /* @__PURE__ */ new Map([[mainBranchName, null]]),\n currBranch: mainBranchName,\n direction: \"LR\",\n seq: 0,\n options: {}\n };\n});\nfunction getID() {\n return random({ length: 7 });\n}\n__name(getID, \"getID\");\nfunction uniqBy(list, fn) {\n const recordMap = /* @__PURE__ */ Object.create(null);\n return list.reduce((out, item) => {\n const key = fn(item);\n if (!recordMap[key]) {\n recordMap[key] = true;\n out.push(item);\n }\n return out;\n }, []);\n}\n__name(uniqBy, \"uniqBy\");\nvar setDirection = /* @__PURE__ */ __name(function(dir2) {\n state.records.direction = dir2;\n}, \"setDirection\");\nvar setOptions = /* @__PURE__ */ __name(function(rawOptString) {\n log.debug(\"options str\", rawOptString);\n rawOptString = rawOptString?.trim();\n rawOptString = rawOptString || \"{}\";\n try {\n state.records.options = JSON.parse(rawOptString);\n } catch (e) {\n log.error(\"error while parsing gitGraph options\", e.message);\n }\n}, \"setOptions\");\nvar getOptions = /* @__PURE__ */ __name(function() {\n return state.records.options;\n}, \"getOptions\");\nvar commit = /* @__PURE__ */ __name(function(commitDB) {\n let msg = commitDB.msg;\n let id = commitDB.id;\n const type = commitDB.type;\n let tags = commitDB.tags;\n log.info(\"commit\", msg, id, type, tags);\n log.debug(\"Entering commit:\", msg, id, type, tags);\n const config = getConfig3();\n id = common_default.sanitizeText(id, config);\n msg = common_default.sanitizeText(msg, config);\n tags = tags?.map((tag) => common_default.sanitizeText(tag, config));\n const newCommit = {\n id: id ? id : state.records.seq + \"-\" + getID(),\n message: msg,\n seq: state.records.seq++,\n type: type ?? commitType.NORMAL,\n tags: tags ?? [],\n parents: state.records.head == null ? [] : [state.records.head.id],\n branch: state.records.currBranch\n };\n state.records.head = newCommit;\n log.info(\"main branch\", config.mainBranchName);\n if (state.records.commits.has(newCommit.id)) {\n log.warn(`Commit ID ${newCommit.id} already exists`);\n }\n state.records.commits.set(newCommit.id, newCommit);\n state.records.branches.set(state.records.currBranch, newCommit.id);\n log.debug(\"in pushCommit \" + newCommit.id);\n}, \"commit\");\nvar branch = /* @__PURE__ */ __name(function(branchDB) {\n let name = branchDB.name;\n const order = branchDB.order;\n name = common_default.sanitizeText(name, getConfig3());\n if (state.records.branches.has(name)) {\n throw new Error(\n `Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using \"checkout ${name}\")`\n );\n }\n state.records.branches.set(name, state.records.head != null ? state.records.head.id : null);\n state.records.branchConfig.set(name, { name, order });\n checkout(name);\n log.debug(\"in createBranch\");\n}, \"branch\");\nvar merge = /* @__PURE__ */ __name((mergeDB) => {\n let otherBranch = mergeDB.branch;\n let customId = mergeDB.id;\n const overrideType = mergeDB.type;\n const customTags = mergeDB.tags;\n const config = getConfig3();\n otherBranch = common_default.sanitizeText(otherBranch, config);\n if (customId) {\n customId = common_default.sanitizeText(customId, config);\n }\n const currentBranchCheck = state.records.branches.get(state.records.currBranch);\n const otherBranchCheck = state.records.branches.get(otherBranch);\n const currentCommit = currentBranchCheck ? state.records.commits.get(currentBranchCheck) : void 0;\n const otherCommit = otherBranchCheck ? state.records.commits.get(otherBranchCheck) : void 0;\n if (currentCommit && otherCommit && currentCommit.branch === otherBranch) {\n throw new Error(`Cannot merge branch '${otherBranch}' into itself.`);\n }\n if (state.records.currBranch === otherBranch) {\n const error = new Error('Incorrect usage of \"merge\". Cannot merge a branch to itself');\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: [\"branch abc\"]\n };\n throw error;\n }\n if (currentCommit === void 0 || !currentCommit) {\n const error = new Error(\n `Incorrect usage of \"merge\". Current branch (${state.records.currBranch})has no commits`\n );\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: [\"commit\"]\n };\n throw error;\n }\n if (!state.records.branches.has(otherBranch)) {\n const error = new Error(\n 'Incorrect usage of \"merge\". Branch to be merged (' + otherBranch + \") does not exist\"\n );\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: [`branch ${otherBranch}`]\n };\n throw error;\n }\n if (otherCommit === void 0 || !otherCommit) {\n const error = new Error(\n 'Incorrect usage of \"merge\". Branch to be merged (' + otherBranch + \") has no commits\"\n );\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: ['\"commit\"']\n };\n throw error;\n }\n if (currentCommit === otherCommit) {\n const error = new Error('Incorrect usage of \"merge\". Both branches have same head');\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: [\"branch abc\"]\n };\n throw error;\n }\n if (customId && state.records.commits.has(customId)) {\n const error = new Error(\n 'Incorrect usage of \"merge\". Commit with id:' + customId + \" already exists, use different custom id\"\n );\n error.hash = {\n text: `merge ${otherBranch} ${customId} ${overrideType} ${customTags?.join(\" \")}`,\n token: `merge ${otherBranch} ${customId} ${overrideType} ${customTags?.join(\" \")}`,\n expected: [\n `merge ${otherBranch} ${customId}_UNIQUE ${overrideType} ${customTags?.join(\" \")}`\n ]\n };\n throw error;\n }\n const verifiedBranch = otherBranchCheck ? otherBranchCheck : \"\";\n const commit2 = {\n id: customId || `${state.records.seq}-${getID()}`,\n message: `merged branch ${otherBranch} into ${state.records.currBranch}`,\n seq: state.records.seq++,\n parents: state.records.head == null ? [] : [state.records.head.id, verifiedBranch],\n branch: state.records.currBranch,\n type: commitType.MERGE,\n customType: overrideType,\n customId: customId ? true : false,\n tags: customTags ?? []\n };\n state.records.head = commit2;\n state.records.commits.set(commit2.id, commit2);\n state.records.branches.set(state.records.currBranch, commit2.id);\n log.debug(state.records.branches);\n log.debug(\"in mergeBranch\");\n}, \"merge\");\nvar cherryPick = /* @__PURE__ */ __name(function(cherryPickDB) {\n let sourceId = cherryPickDB.id;\n let targetId = cherryPickDB.targetId;\n let tags = cherryPickDB.tags;\n let parentCommitId = cherryPickDB.parent;\n log.debug(\"Entering cherryPick:\", sourceId, targetId, tags);\n const config = getConfig3();\n sourceId = common_default.sanitizeText(sourceId, config);\n targetId = common_default.sanitizeText(targetId, config);\n tags = tags?.map((tag) => common_default.sanitizeText(tag, config));\n parentCommitId = common_default.sanitizeText(parentCommitId, config);\n if (!sourceId || !state.records.commits.has(sourceId)) {\n const error = new Error(\n 'Incorrect usage of \"cherryPick\". Source commit id should exist and provided'\n );\n error.hash = {\n text: `cherryPick ${sourceId} ${targetId}`,\n token: `cherryPick ${sourceId} ${targetId}`,\n expected: [\"cherry-pick abc\"]\n };\n throw error;\n }\n const sourceCommit = state.records.commits.get(sourceId);\n if (sourceCommit === void 0 || !sourceCommit) {\n throw new Error('Incorrect usage of \"cherryPick\". Source commit id should exist and provided');\n }\n if (parentCommitId && !(Array.isArray(sourceCommit.parents) && sourceCommit.parents.includes(parentCommitId))) {\n const error = new Error(\n \"Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.\"\n );\n throw error;\n }\n const sourceCommitBranch = sourceCommit.branch;\n if (sourceCommit.type === commitType.MERGE && !parentCommitId) {\n const error = new Error(\n \"Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.\"\n );\n throw error;\n }\n if (!targetId || !state.records.commits.has(targetId)) {\n if (sourceCommitBranch === state.records.currBranch) {\n const error = new Error(\n 'Incorrect usage of \"cherryPick\". Source commit is already on current branch'\n );\n error.hash = {\n text: `cherryPick ${sourceId} ${targetId}`,\n token: `cherryPick ${sourceId} ${targetId}`,\n expected: [\"cherry-pick abc\"]\n };\n throw error;\n }\n const currentCommitId = state.records.branches.get(state.records.currBranch);\n if (currentCommitId === void 0 || !currentCommitId) {\n const error = new Error(\n `Incorrect usage of \"cherry-pick\". Current branch (${state.records.currBranch})has no commits`\n );\n error.hash = {\n text: `cherryPick ${sourceId} ${targetId}`,\n token: `cherryPick ${sourceId} ${targetId}`,\n expected: [\"cherry-pick abc\"]\n };\n throw error;\n }\n const currentCommit = state.records.commits.get(currentCommitId);\n if (currentCommit === void 0 || !currentCommit) {\n const error = new Error(\n `Incorrect usage of \"cherry-pick\". Current branch (${state.records.currBranch})has no commits`\n );\n error.hash = {\n text: `cherryPick ${sourceId} ${targetId}`,\n token: `cherryPick ${sourceId} ${targetId}`,\n expected: [\"cherry-pick abc\"]\n };\n throw error;\n }\n const commit2 = {\n id: state.records.seq + \"-\" + getID(),\n message: `cherry-picked ${sourceCommit?.message} into ${state.records.currBranch}`,\n seq: state.records.seq++,\n parents: state.records.head == null ? [] : [state.records.head.id, sourceCommit.id],\n branch: state.records.currBranch,\n type: commitType.CHERRY_PICK,\n tags: tags ? tags.filter(Boolean) : [\n `cherry-pick:${sourceCommit.id}${sourceCommit.type === commitType.MERGE ? `|parent:${parentCommitId}` : \"\"}`\n ]\n };\n state.records.head = commit2;\n state.records.commits.set(commit2.id, commit2);\n state.records.branches.set(state.records.currBranch, commit2.id);\n log.debug(state.records.branches);\n log.debug(\"in cherryPick\");\n }\n}, \"cherryPick\");\nvar checkout = /* @__PURE__ */ __name(function(branch2) {\n branch2 = common_default.sanitizeText(branch2, getConfig3());\n if (!state.records.branches.has(branch2)) {\n const error = new Error(\n `Trying to checkout branch which is not yet created. (Help try using \"branch ${branch2}\")`\n );\n error.hash = {\n text: `checkout ${branch2}`,\n token: `checkout ${branch2}`,\n expected: [`branch ${branch2}`]\n };\n throw error;\n } else {\n state.records.currBranch = branch2;\n const id = state.records.branches.get(state.records.currBranch);\n if (id === void 0 || !id) {\n state.records.head = null;\n } else {\n state.records.head = state.records.commits.get(id) ?? null;\n }\n }\n}, \"checkout\");\nfunction upsert(arr, key, newVal) {\n const index = arr.indexOf(key);\n if (index === -1) {\n arr.push(newVal);\n } else {\n arr.splice(index, 1, newVal);\n }\n}\n__name(upsert, \"upsert\");\nfunction prettyPrintCommitHistory(commitArr) {\n const commit2 = commitArr.reduce((out, commit3) => {\n if (out.seq > commit3.seq) {\n return out;\n }\n return commit3;\n }, commitArr[0]);\n let line = \"\";\n commitArr.forEach(function(c) {\n if (c === commit2) {\n line += \"\t*\";\n } else {\n line += \"\t|\";\n }\n });\n const label = [line, commit2.id, commit2.seq];\n for (const branch2 in state.records.branches) {\n if (state.records.branches.get(branch2) === commit2.id) {\n label.push(branch2);\n }\n }\n log.debug(label.join(\" \"));\n if (commit2.parents && commit2.parents.length == 2 && commit2.parents[0] && commit2.parents[1]) {\n const newCommit = state.records.commits.get(commit2.parents[0]);\n upsert(commitArr, commit2, newCommit);\n if (commit2.parents[1]) {\n commitArr.push(state.records.commits.get(commit2.parents[1]));\n }\n } else if (commit2.parents.length == 0) {\n return;\n } else {\n if (commit2.parents[0]) {\n const newCommit = state.records.commits.get(commit2.parents[0]);\n upsert(commitArr, commit2, newCommit);\n }\n }\n commitArr = uniqBy(commitArr, (c) => c.id);\n prettyPrintCommitHistory(commitArr);\n}\n__name(prettyPrintCommitHistory, \"prettyPrintCommitHistory\");\nvar prettyPrint = /* @__PURE__ */ __name(function() {\n log.debug(state.records.commits);\n const node = getCommitsArray()[0];\n prettyPrintCommitHistory([node]);\n}, \"prettyPrint\");\nvar clear2 = /* @__PURE__ */ __name(function() {\n state.reset();\n clear();\n}, \"clear\");\nvar getBranchesAsObjArray = /* @__PURE__ */ __name(function() {\n const branchesArray = [...state.records.branchConfig.values()].map((branchConfig, i) => {\n if (branchConfig.order !== null && branchConfig.order !== void 0) {\n return branchConfig;\n }\n return {\n ...branchConfig,\n order: parseFloat(`0.${i}`)\n };\n }).sort((a, b) => (a.order ?? 0) - (b.order ?? 0)).map(({ name }) => ({ name }));\n return branchesArray;\n}, \"getBranchesAsObjArray\");\nvar getBranches = /* @__PURE__ */ __name(function() {\n return state.records.branches;\n}, \"getBranches\");\nvar getCommits = /* @__PURE__ */ __name(function() {\n return state.records.commits;\n}, \"getCommits\");\nvar getCommitsArray = /* @__PURE__ */ __name(function() {\n const commitArr = [...state.records.commits.values()];\n commitArr.forEach(function(o) {\n log.debug(o.id);\n });\n commitArr.sort((a, b) => a.seq - b.seq);\n return commitArr;\n}, \"getCommitsArray\");\nvar getCurrentBranch = /* @__PURE__ */ __name(function() {\n return state.records.currBranch;\n}, \"getCurrentBranch\");\nvar getDirection = /* @__PURE__ */ __name(function() {\n return state.records.direction;\n}, \"getDirection\");\nvar getHead = /* @__PURE__ */ __name(function() {\n return state.records.head;\n}, \"getHead\");\nvar db = {\n commitType,\n getConfig: getConfig3,\n setDirection,\n setOptions,\n getOptions,\n commit,\n branch,\n merge,\n cherryPick,\n checkout,\n //reset,\n prettyPrint,\n clear: clear2,\n getBranchesAsObjArray,\n getBranches,\n getCommits,\n getCommitsArray,\n getCurrentBranch,\n getDirection,\n getHead,\n setAccTitle,\n getAccTitle,\n getAccDescription,\n setAccDescription,\n setDiagramTitle,\n getDiagramTitle\n};\n\n// src/diagrams/git/gitGraphParser.ts\nvar populate = /* @__PURE__ */ __name((ast, db2) => {\n populateCommonDb(ast, db2);\n if (ast.dir) {\n db2.setDirection(ast.dir);\n }\n for (const statement of ast.statements) {\n parseStatement(statement, db2);\n }\n}, \"populate\");\nvar parseStatement = /* @__PURE__ */ __name((statement, db2) => {\n const parsers = {\n Commit: /* @__PURE__ */ __name((stmt) => db2.commit(parseCommit(stmt)), \"Commit\"),\n Branch: /* @__PURE__ */ __name((stmt) => db2.branch(parseBranch(stmt)), \"Branch\"),\n Merge: /* @__PURE__ */ __name((stmt) => db2.merge(parseMerge(stmt)), \"Merge\"),\n Checkout: /* @__PURE__ */ __name((stmt) => db2.checkout(parseCheckout(stmt)), \"Checkout\"),\n CherryPicking: /* @__PURE__ */ __name((stmt) => db2.cherryPick(parseCherryPicking(stmt)), \"CherryPicking\")\n };\n const parser2 = parsers[statement.$type];\n if (parser2) {\n parser2(statement);\n } else {\n log.error(`Unknown statement type: ${statement.$type}`);\n }\n}, \"parseStatement\");\nvar parseCommit = /* @__PURE__ */ __name((commit2) => {\n const commitDB = {\n id: commit2.id,\n msg: commit2.message ?? \"\",\n type: commit2.type !== void 0 ? commitType[commit2.type] : commitType.NORMAL,\n tags: commit2.tags ?? void 0\n };\n return commitDB;\n}, \"parseCommit\");\nvar parseBranch = /* @__PURE__ */ __name((branch2) => {\n const branchDB = {\n name: branch2.name,\n order: branch2.order ?? 0\n };\n return branchDB;\n}, \"parseBranch\");\nvar parseMerge = /* @__PURE__ */ __name((merge2) => {\n const mergeDB = {\n branch: merge2.branch,\n id: merge2.id ?? \"\",\n type: merge2.type !== void 0 ? commitType[merge2.type] : void 0,\n tags: merge2.tags ?? void 0\n };\n return mergeDB;\n}, \"parseMerge\");\nvar parseCheckout = /* @__PURE__ */ __name((checkout2) => {\n const branch2 = checkout2.branch;\n return branch2;\n}, \"parseCheckout\");\nvar parseCherryPicking = /* @__PURE__ */ __name((cherryPicking) => {\n const cherryPickDB = {\n id: cherryPicking.id,\n targetId: \"\",\n tags: cherryPicking.tags?.length === 0 ? void 0 : cherryPicking.tags,\n parent: cherryPicking.parent\n };\n return cherryPickDB;\n}, \"parseCherryPicking\");\nvar parser = {\n parse: /* @__PURE__ */ __name(async (input) => {\n const ast = await parse(\"gitGraph\", input);\n log.debug(ast);\n populate(ast, db);\n }, \"parse\")\n};\nif (void 0) {\n const { it, expect, describe } = void 0;\n const mockDB = {\n commitType,\n setDirection: vi.fn(),\n commit: vi.fn(),\n branch: vi.fn(),\n merge: vi.fn(),\n cherryPick: vi.fn(),\n checkout: vi.fn()\n };\n describe(\"GitGraph Parser\", () => {\n it(\"should parse a commit statement\", () => {\n const commit2 = {\n $type: \"Commit\",\n id: \"1\",\n message: \"test\",\n tags: [\"tag1\", \"tag2\"],\n type: \"NORMAL\"\n };\n parseStatement(commit2, mockDB);\n expect(mockDB.commit).toHaveBeenCalledWith({\n id: \"1\",\n msg: \"test\",\n tags: [\"tag1\", \"tag2\"],\n type: 0\n });\n });\n it(\"should parse a branch statement\", () => {\n const branch2 = {\n $type: \"Branch\",\n name: \"newBranch\",\n order: 1\n };\n parseStatement(branch2, mockDB);\n expect(mockDB.branch).toHaveBeenCalledWith({ name: \"newBranch\", order: 1 });\n });\n it(\"should parse a checkout statement\", () => {\n const checkout2 = {\n $type: \"Checkout\",\n branch: \"newBranch\"\n };\n parseStatement(checkout2, mockDB);\n expect(mockDB.checkout).toHaveBeenCalledWith(\"newBranch\");\n });\n it(\"should parse a merge statement\", () => {\n const merge2 = {\n $type: \"Merge\",\n branch: \"newBranch\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n type: \"NORMAL\"\n };\n parseStatement(merge2, mockDB);\n expect(mockDB.merge).toHaveBeenCalledWith({\n branch: \"newBranch\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n type: 0\n });\n });\n it(\"should parse a cherry picking statement\", () => {\n const cherryPick2 = {\n $type: \"CherryPicking\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n parent: \"2\"\n };\n parseStatement(cherryPick2, mockDB);\n expect(mockDB.cherryPick).toHaveBeenCalledWith({\n id: \"1\",\n targetId: \"\",\n parent: \"2\",\n tags: [\"tag1\", \"tag2\"]\n });\n });\n it(\"should parse a langium generated gitGraph ast\", () => {\n const dummy = {\n $type: \"GitGraph\",\n statements: []\n };\n const gitGraphAst = {\n $type: \"GitGraph\",\n statements: [\n {\n $container: dummy,\n $type: \"Commit\",\n id: \"1\",\n message: \"test\",\n tags: [\"tag1\", \"tag2\"],\n type: \"NORMAL\"\n },\n {\n $container: dummy,\n $type: \"Branch\",\n name: \"newBranch\",\n order: 1\n },\n {\n $container: dummy,\n $type: \"Merge\",\n branch: \"newBranch\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n type: \"NORMAL\"\n },\n {\n $container: dummy,\n $type: \"Checkout\",\n branch: \"newBranch\"\n },\n {\n $container: dummy,\n $type: \"CherryPicking\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n parent: \"2\"\n }\n ]\n };\n populate(gitGraphAst, mockDB);\n expect(mockDB.commit).toHaveBeenCalledWith({\n id: \"1\",\n msg: \"test\",\n tags: [\"tag1\", \"tag2\"],\n type: 0\n });\n expect(mockDB.branch).toHaveBeenCalledWith({ name: \"newBranch\", order: 1 });\n expect(mockDB.merge).toHaveBeenCalledWith({\n branch: \"newBranch\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n type: 0\n });\n expect(mockDB.checkout).toHaveBeenCalledWith(\"newBranch\");\n });\n });\n}\n\n// src/diagrams/git/gitGraphRenderer.ts\nimport { select } from \"d3\";\nvar DEFAULT_CONFIG = getConfig2();\nvar DEFAULT_GITGRAPH_CONFIG2 = DEFAULT_CONFIG?.gitGraph;\nvar LAYOUT_OFFSET = 10;\nvar COMMIT_STEP = 40;\nvar PX = 4;\nvar PY = 2;\nvar THEME_COLOR_LIMIT = 8;\nvar branchPos = /* @__PURE__ */ new Map();\nvar commitPos = /* @__PURE__ */ new Map();\nvar defaultPos = 30;\nvar allCommitsDict = /* @__PURE__ */ new Map();\nvar lanes = [];\nvar maxPos = 0;\nvar dir = \"LR\";\nvar clear3 = /* @__PURE__ */ __name(() => {\n branchPos.clear();\n commitPos.clear();\n allCommitsDict.clear();\n maxPos = 0;\n lanes = [];\n dir = \"LR\";\n}, \"clear\");\nvar drawText = /* @__PURE__ */ __name((txt) => {\n const svgLabel = document.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n const rows = typeof txt === \"string\" ? txt.split(/\\\\n|\\n|<br\\s*\\/?>/gi) : txt;\n rows.forEach((row) => {\n const tspan = document.createElementNS(\"http://www.w3.org/2000/svg\", \"tspan\");\n tspan.setAttributeNS(\"http://www.w3.org/XML/1998/namespace\", \"xml:space\", \"preserve\");\n tspan.setAttribute(\"dy\", \"1em\");\n tspan.setAttribute(\"x\", \"0\");\n tspan.setAttribute(\"class\", \"row\");\n tspan.textContent = row.trim();\n svgLabel.appendChild(tspan);\n });\n return svgLabel;\n}, \"drawText\");\nvar findClosestParent = /* @__PURE__ */ __name((parents) => {\n let closestParent;\n let comparisonFunc;\n let targetPosition;\n if (dir === \"BT\") {\n comparisonFunc = /* @__PURE__ */ __name((a, b) => a <= b, \"comparisonFunc\");\n targetPosition = Infinity;\n } else {\n comparisonFunc = /* @__PURE__ */ __name((a, b) => a >= b, \"comparisonFunc\");\n targetPosition = 0;\n }\n parents.forEach((parent) => {\n const parentPosition = dir === \"TB\" || dir == \"BT\" ? commitPos.get(parent)?.y : commitPos.get(parent)?.x;\n if (parentPosition !== void 0 && comparisonFunc(parentPosition, targetPosition)) {\n closestParent = parent;\n targetPosition = parentPosition;\n }\n });\n return closestParent;\n}, \"findClosestParent\");\nvar findClosestParentBT = /* @__PURE__ */ __name((parents) => {\n let closestParent = \"\";\n let maxPosition = Infinity;\n parents.forEach((parent) => {\n const parentPosition = commitPos.get(parent).y;\n if (parentPosition <= maxPosition) {\n closestParent = parent;\n maxPosition = parentPosition;\n }\n });\n return closestParent || void 0;\n}, \"findClosestParentBT\");\nvar setParallelBTPos = /* @__PURE__ */ __name((sortedKeys, commits, defaultPos2) => {\n let curPos = defaultPos2;\n let maxPosition = defaultPos2;\n const roots = [];\n sortedKeys.forEach((key) => {\n const commit2 = commits.get(key);\n if (!commit2) {\n throw new Error(`Commit not found for key ${key}`);\n }\n if (commit2.parents.length) {\n curPos = calculateCommitPosition(commit2);\n maxPosition = Math.max(curPos, maxPosition);\n } else {\n roots.push(commit2);\n }\n setCommitPosition(commit2, curPos);\n });\n curPos = maxPosition;\n roots.forEach((commit2) => {\n setRootPosition(commit2, curPos, defaultPos2);\n });\n sortedKeys.forEach((key) => {\n const commit2 = commits.get(key);\n if (commit2?.parents.length) {\n const closestParent = findClosestParentBT(commit2.parents);\n curPos = commitPos.get(closestParent).y - COMMIT_STEP;\n if (curPos <= maxPosition) {\n maxPosition = curPos;\n }\n const x = branchPos.get(commit2.branch).pos;\n const y = curPos - LAYOUT_OFFSET;\n commitPos.set(commit2.id, { x, y });\n }\n });\n}, \"setParallelBTPos\");\nvar findClosestParentPos = /* @__PURE__ */ __name((commit2) => {\n const closestParent = findClosestParent(commit2.parents.filter((p) => p !== null));\n if (!closestParent) {\n throw new Error(`Closest parent not found for commit ${commit2.id}`);\n }\n const closestParentPos = commitPos.get(closestParent)?.y;\n if (closestParentPos === void 0) {\n throw new Error(`Closest parent position not found for commit ${commit2.id}`);\n }\n return closestParentPos;\n}, \"findClosestParentPos\");\nvar calculateCommitPosition = /* @__PURE__ */ __name((commit2) => {\n const closestParentPos = findClosestParentPos(commit2);\n return closestParentPos + COMMIT_STEP;\n}, \"calculateCommitPosition\");\nvar setCommitPosition = /* @__PURE__ */ __name((commit2, curPos) => {\n const branch2 = branchPos.get(commit2.branch);\n if (!branch2) {\n throw new Error(`Branch not found for commit ${commit2.id}`);\n }\n const x = branch2.pos;\n const y = curPos + LAYOUT_OFFSET;\n commitPos.set(commit2.id, { x, y });\n return { x, y };\n}, \"setCommitPosition\");\nvar setRootPosition = /* @__PURE__ */ __name((commit2, curPos, defaultPos2) => {\n const branch2 = branchPos.get(commit2.branch);\n if (!branch2) {\n throw new Error(`Branch not found for commit ${commit2.id}`);\n }\n const y = curPos + defaultPos2;\n const x = branch2.pos;\n commitPos.set(commit2.id, { x, y });\n}, \"setRootPosition\");\nvar drawCommitBullet = /* @__PURE__ */ __name((gBullets, commit2, commitPosition, typeClass, branchIndex, commitSymbolType) => {\n if (commitSymbolType === commitType.HIGHLIGHT) {\n gBullets.append(\"rect\").attr(\"x\", commitPosition.x - 10).attr(\"y\", commitPosition.y - 10).attr(\"width\", 20).attr(\"height\", 20).attr(\n \"class\",\n `commit ${commit2.id} commit-highlight${branchIndex % THEME_COLOR_LIMIT} ${typeClass}-outer`\n );\n gBullets.append(\"rect\").attr(\"x\", commitPosition.x - 6).attr(\"y\", commitPosition.y - 6).attr(\"width\", 12).attr(\"height\", 12).attr(\n \"class\",\n `commit ${commit2.id} commit${branchIndex % THEME_COLOR_LIMIT} ${typeClass}-inner`\n );\n } else if (commitSymbolType === commitType.CHERRY_PICK) {\n gBullets.append(\"circle\").attr(\"cx\", commitPosition.x).attr(\"cy\", commitPosition.y).attr(\"r\", 10).attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n gBullets.append(\"circle\").attr(\"cx\", commitPosition.x - 3).attr(\"cy\", commitPosition.y + 2).attr(\"r\", 2.75).attr(\"fill\", \"#fff\").attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n gBullets.append(\"circle\").attr(\"cx\", commitPosition.x + 3).attr(\"cy\", commitPosition.y + 2).attr(\"r\", 2.75).attr(\"fill\", \"#fff\").attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n gBullets.append(\"line\").attr(\"x1\", commitPosition.x + 3).attr(\"y1\", commitPosition.y + 1).attr(\"x2\", commitPosition.x).attr(\"y2\", commitPosition.y - 5).attr(\"stroke\", \"#fff\").attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n gBullets.append(\"line\").attr(\"x1\", commitPosition.x - 3).attr(\"y1\", commitPosition.y + 1).attr(\"x2\", commitPosition.x).attr(\"y2\", commitPosition.y - 5).attr(\"stroke\", \"#fff\").attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n } else {\n const circle = gBullets.append(\"circle\");\n circle.attr(\"cx\", commitPosition.x);\n circle.attr(\"cy\", commitPosition.y);\n circle.attr(\"r\", commit2.type === commitType.MERGE ? 9 : 10);\n circle.attr(\"class\", `commit ${commit2.id} commit${branchIndex % THEME_COLOR_LIMIT}`);\n if (commitSymbolType === commitType.MERGE) {\n const circle2 = gBullets.append(\"circle\");\n circle2.attr(\"cx\", commitPosition.x);\n circle2.attr(\"cy\", commitPosition.y);\n circle2.attr(\"r\", 6);\n circle2.attr(\n \"class\",\n `commit ${typeClass} ${commit2.id} commit${branchIndex % THEME_COLOR_LIMIT}`\n );\n }\n if (commitSymbolType === commitType.REVERSE) {\n const cross = gBullets.append(\"path\");\n cross.attr(\n \"d\",\n `M ${commitPosition.x - 5},${commitPosition.y - 5}L${commitPosition.x + 5},${commitPosition.y + 5}M${commitPosition.x - 5},${commitPosition.y + 5}L${commitPosition.x + 5},${commitPosition.y - 5}`\n ).attr(\"class\", `commit ${typeClass} ${commit2.id} commit${branchIndex % THEME_COLOR_LIMIT}`);\n }\n }\n}, \"drawCommitBullet\");\nvar drawCommitLabel = /* @__PURE__ */ __name((gLabels, commit2, commitPosition, pos) => {\n if (commit2.type !== commitType.CHERRY_PICK && (commit2.customId && commit2.type === commitType.MERGE || commit2.type !== commitType.MERGE) && DEFAULT_GITGRAPH_CONFIG2?.showCommitLabel) {\n const wrapper = gLabels.append(\"g\");\n const labelBkg = wrapper.insert(\"rect\").attr(\"class\", \"commit-label-bkg\");\n const text = wrapper.append(\"text\").attr(\"x\", pos).attr(\"y\", commitPosition.y + 25).attr(\"class\", \"commit-label\").text(commit2.id);\n const bbox = text.node()?.getBBox();\n if (bbox) {\n labelBkg.attr(\"x\", commitPosition.posWithOffset - bbox.width / 2 - PY).attr(\"y\", commitPosition.y + 13.5).attr(\"width\", bbox.width + 2 * PY).attr(\"height\", bbox.height + 2 * PY);\n if (dir === \"TB\" || dir === \"BT\") {\n labelBkg.attr(\"x\", commitPosition.x - (bbox.width + 4 * PX + 5)).attr(\"y\", commitPosition.y - 12);\n text.attr(\"x\", commitPosition.x - (bbox.width + 4 * PX)).attr(\"y\", commitPosition.y + bbox.height - 12);\n } else {\n text.attr(\"x\", commitPosition.posWithOffset - bbox.width / 2);\n }\n if (DEFAULT_GITGRAPH_CONFIG2.rotateCommitLabel) {\n if (dir === \"TB\" || dir === \"BT\") {\n text.attr(\n \"transform\",\n \"rotate(-45, \" + commitPosition.x + \", \" + commitPosition.y + \")\"\n );\n labelBkg.attr(\n \"transform\",\n \"rotate(-45, \" + commitPosition.x + \", \" + commitPosition.y + \")\"\n );\n } else {\n const r_x = -7.5 - (bbox.width + 10) / 25 * 9.5;\n const r_y = 10 + bbox.width / 25 * 8.5;\n wrapper.attr(\n \"transform\",\n \"translate(\" + r_x + \", \" + r_y + \") rotate(-45, \" + pos + \", \" + commitPosition.y + \")\"\n );\n }\n }\n }\n }\n}, \"drawCommitLabel\");\nvar drawCommitTags = /* @__PURE__ */ __name((gLabels, commit2, commitPosition, pos) => {\n if (commit2.tags.length > 0) {\n let yOffset = 0;\n let maxTagBboxWidth = 0;\n let maxTagBboxHeight = 0;\n const tagElements = [];\n for (const tagValue of commit2.tags.reverse()) {\n const rect = gLabels.insert(\"polygon\");\n const hole = gLabels.append(\"circle\");\n const tag = gLabels.append(\"text\").attr(\"y\", commitPosition.y - 16 - yOffset).attr(\"class\", \"tag-label\").text(tagValue);\n const tagBbox = tag.node()?.getBBox();\n if (!tagBbox) {\n throw new Error(\"Tag bbox not found\");\n }\n maxTagBboxWidth = Math.max(maxTagBboxWidth, tagBbox.width);\n maxTagBboxHeight = Math.max(maxTagBboxHeight, tagBbox.height);\n tag.attr(\"x\", commitPosition.posWithOffset - tagBbox.width / 2);\n tagElements.push({\n tag,\n hole,\n rect,\n yOffset\n });\n yOffset += 20;\n }\n for (const { tag, hole, rect, yOffset: yOffset2 } of tagElements) {\n const h2 = maxTagBboxHeight / 2;\n const ly = commitPosition.y - 19.2 - yOffset2;\n rect.attr(\"class\", \"tag-label-bkg\").attr(\n \"points\",\n `\n ${pos - maxTagBboxWidth / 2 - PX / 2},${ly + PY} \n ${pos - maxTagBboxWidth / 2 - PX / 2},${ly - PY}\n ${commitPosition.posWithOffset - maxTagBboxWidth / 2 - PX},${ly - h2 - PY}\n ${commitPosition.posWithOffset + maxTagBboxWidth / 2 + PX},${ly - h2 - PY}\n ${commitPosition.posWithOffset + maxTagBboxWidth / 2 + PX},${ly + h2 + PY}\n ${commitPosition.posWithOffset - maxTagBboxWidth / 2 - PX},${ly + h2 + PY}`\n );\n hole.attr(\"cy\", ly).attr(\"cx\", pos - maxTagBboxWidth / 2 + PX / 2).attr(\"r\", 1.5).attr(\"class\", \"tag-hole\");\n if (dir === \"TB\" || dir === \"BT\") {\n const yOrigin = pos + yOffset2;\n rect.attr(\"class\", \"tag-label-bkg\").attr(\n \"points\",\n `\n ${commitPosition.x},${yOrigin + 2}\n ${commitPosition.x},${yOrigin - 2}\n ${commitPosition.x + LAYOUT_OFFSET},${yOrigin - h2 - 2}\n ${commitPosition.x + LAYOUT_OFFSET + maxTagBboxWidth + 4},${yOrigin - h2 - 2}\n ${commitPosition.x + LAYOUT_OFFSET + maxTagBboxWidth + 4},${yOrigin + h2 + 2}\n ${commitPosition.x + LAYOUT_OFFSET},${yOrigin + h2 + 2}`\n ).attr(\"transform\", \"translate(12,12) rotate(45, \" + commitPosition.x + \",\" + pos + \")\");\n hole.attr(\"cx\", commitPosition.x + PX / 2).attr(\"cy\", yOrigin).attr(\"transform\", \"translate(12,12) rotate(45, \" + commitPosition.x + \",\" + pos + \")\");\n tag.attr(\"x\", commitPosition.x + 5).attr(\"y\", yOrigin + 3).attr(\"transform\", \"translate(14,14) rotate(45, \" + commitPosition.x + \",\" + pos + \")\");\n }\n }\n }\n}, \"drawCommitTags\");\nvar getCommitClassType = /* @__PURE__ */ __name((commit2) => {\n const commitSymbolType = commit2.customType ?? commit2.type;\n switch (commitSymbolType) {\n case commitType.NORMAL:\n return \"commit-normal\";\n case commitType.REVERSE:\n return \"commit-reverse\";\n case commitType.HIGHLIGHT:\n return \"commit-highlight\";\n case commitType.MERGE:\n return \"commit-merge\";\n case commitType.CHERRY_PICK:\n return \"commit-cherry-pick\";\n default:\n return \"commit-normal\";\n }\n}, \"getCommitClassType\");\nvar calculatePosition = /* @__PURE__ */ __name((commit2, dir2, pos, commitPos2) => {\n const defaultCommitPosition = { x: 0, y: 0 };\n if (commit2.parents.length > 0) {\n const closestParent = findClosestParent(commit2.parents);\n if (closestParent) {\n const parentPosition = commitPos2.get(closestParent) ?? defaultCommitPosition;\n if (dir2 === \"TB\") {\n return parentPosition.y + COMMIT_STEP;\n } else if (dir2 === \"BT\") {\n const currentPosition = commitPos2.get(commit2.id) ?? defaultCommitPosition;\n return currentPosition.y - COMMIT_STEP;\n } else {\n return parentPosition.x + COMMIT_STEP;\n }\n }\n } else {\n if (dir2 === \"TB\") {\n return defaultPos;\n } else if (dir2 === \"BT\") {\n const currentPosition = commitPos2.get(commit2.id) ?? defaultCommitPosition;\n return currentPosition.y - COMMIT_STEP;\n } else {\n return 0;\n }\n }\n return 0;\n}, \"calculatePosition\");\nvar getCommitPosition = /* @__PURE__ */ __name((commit2, pos, isParallelCommits) => {\n const posWithOffset = dir === \"BT\" && isParallelCommits ? pos : pos + LAYOUT_OFFSET;\n const y = dir === \"TB\" || dir === \"BT\" ? posWithOffset : branchPos.get(commit2.branch)?.pos;\n const x = dir === \"TB\" || dir === \"BT\" ? branchPos.get(commit2.branch)?.pos : posWithOffset;\n if (x === void 0 || y === void 0) {\n throw new Error(`Position were undefined for commit ${commit2.id}`);\n }\n return { x, y, posWithOffset };\n}, \"getCommitPosition\");\nvar drawCommits = /* @__PURE__ */ __name((svg, commits, modifyGraph) => {\n if (!DEFAULT_GITGRAPH_CONFIG2) {\n throw new Error(\"GitGraph config not found\");\n }\n const gBullets = svg.append(\"g\").attr(\"class\", \"commit-bullets\");\n const gLabels = svg.append(\"g\").attr(\"class\", \"commit-labels\");\n let pos = dir === \"TB\" || dir === \"BT\" ? defaultPos : 0;\n const keys = [...commits.keys()];\n const isParallelCommits = DEFAULT_GITGRAPH_CONFIG2?.parallelCommits ?? false;\n const sortKeys = /* @__PURE__ */ __name((a, b) => {\n const seqA = commits.get(a)?.seq;\n const seqB = commits.get(b)?.seq;\n return seqA !== void 0 && seqB !== void 0 ? seqA - seqB : 0;\n }, \"sortKeys\");\n let sortedKeys = keys.sort(sortKeys);\n if (dir === \"BT\") {\n if (isParallelCommits) {\n setParallelBTPos(sortedKeys, commits, pos);\n }\n sortedKeys = sortedKeys.reverse();\n }\n sortedKeys.forEach((key) => {\n const commit2 = commits.get(key);\n if (!commit2) {\n throw new Error(`Commit not found for key ${key}`);\n }\n if (isParallelCommits) {\n pos = calculatePosition(commit2, dir, pos, commitPos);\n }\n const commitPosition = getCommitPosition(commit2, pos, isParallelCommits);\n if (modifyGraph) {\n const typeClass = getCommitClassType(commit2);\n const commitSymbolType = commit2.customType ?? commit2.type;\n const branchIndex = branchPos.get(commit2.branch)?.index ?? 0;\n drawCommitBullet(gBullets, commit2, commitPosition, typeClass, branchIndex, commitSymbolType);\n drawCommitLabel(gLabels, commit2, commitPosition, pos);\n drawCommitTags(gLabels, commit2, commitPosition, pos);\n }\n if (dir === \"TB\" || dir === \"BT\") {\n commitPos.set(commit2.id, { x: commitPosition.x, y: commitPosition.posWithOffset });\n } else {\n commitPos.set(commit2.id, { x: commitPosition.posWithOffset, y: commitPosition.y });\n }\n pos = dir === \"BT\" && isParallelCommits ? pos + COMMIT_STEP : pos + COMMIT_STEP + LAYOUT_OFFSET;\n if (pos > maxPos) {\n maxPos = pos;\n }\n });\n}, \"drawCommits\");\nvar shouldRerouteArrow = /* @__PURE__ */ __name((commitA, commitB, p1, p2, allCommits) => {\n const commitBIsFurthest = dir === \"TB\" || dir === \"BT\" ? p1.x < p2.x : p1.y < p2.y;\n const branchToGetCurve = commitBIsFurthest ? commitB.branch : commitA.branch;\n const isOnBranchToGetCurve = /* @__PURE__ */ __name((x) => x.branch === branchToGetCurve, \"isOnBranchToGetCurve\");\n const isBetweenCommits = /* @__PURE__ */ __name((x) => x.seq > commitA.seq && x.seq < commitB.seq, \"isBetweenCommits\");\n return [...allCommits.values()].some((commitX) => {\n return isBetweenCommits(commitX) && isOnBranchToGetCurve(commitX);\n });\n}, \"shouldRerouteArrow\");\nvar findLane = /* @__PURE__ */ __name((y1, y2, depth = 0) => {\n const candidate = y1 + Math.abs(y1 - y2) / 2;\n if (depth > 5) {\n return candidate;\n }\n const ok = lanes.every((lane) => Math.abs(lane - candidate) >= 10);\n if (ok) {\n lanes.push(candidate);\n return candidate;\n }\n const diff = Math.abs(y1 - y2);\n return findLane(y1, y2 - diff / 5, depth + 1);\n}, \"findLane\");\nvar drawArrow = /* @__PURE__ */ __name((svg, commitA, commitB, allCommits) => {\n const p1 = commitPos.get(commitA.id);\n const p2 = commitPos.get(commitB.id);\n if (p1 === void 0 || p2 === void 0) {\n throw new Error(`Commit positions not found for commits ${commitA.id} and ${commitB.id}`);\n }\n const arrowNeedsRerouting = shouldRerouteArrow(commitA, commitB, p1, p2, allCommits);\n let arc = \"\";\n let arc2 = \"\";\n let radius = 0;\n let offset = 0;\n let colorClassNum = branchPos.get(commitB.branch)?.index;\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n colorClassNum = branchPos.get(commitA.branch)?.index;\n }\n let lineDef;\n if (arrowNeedsRerouting) {\n arc = \"A 10 10, 0, 0, 0,\";\n arc2 = \"A 10 10, 0, 0, 1,\";\n radius = 10;\n offset = 10;\n const lineY = p1.y < p2.y ? findLane(p1.y, p2.y) : findLane(p2.y, p1.y);\n const lineX = p1.x < p2.x ? findLane(p1.x, p2.x) : findLane(p2.x, p1.x);\n if (dir === \"TB\") {\n if (p1.x < p2.x) {\n lineDef = `M ${p1.x} ${p1.y} L ${lineX - radius} ${p1.y} ${arc2} ${lineX} ${p1.y + offset} L ${lineX} ${p2.y - radius} ${arc} ${lineX + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n colorClassNum = branchPos.get(commitA.branch)?.index;\n lineDef = `M ${p1.x} ${p1.y} L ${lineX + radius} ${p1.y} ${arc} ${lineX} ${p1.y + offset} L ${lineX} ${p2.y - radius} ${arc2} ${lineX - offset} ${p2.y} L ${p2.x} ${p2.y}`;\n }\n } else if (dir === \"BT\") {\n if (p1.x < p2.x) {\n lineDef = `M ${p1.x} ${p1.y} L ${lineX - radius} ${p1.y} ${arc} ${lineX} ${p1.y - offset} L ${lineX} ${p2.y + radius} ${arc2} ${lineX + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n colorClassNum = branchPos.get(commitA.branch)?.index;\n lineDef = `M ${p1.x} ${p1.y} L ${lineX + radius} ${p1.y} ${arc2} ${lineX} ${p1.y - offset} L ${lineX} ${p2.y + radius} ${arc} ${lineX - offset} ${p2.y} L ${p2.x} ${p2.y}`;\n }\n } else {\n if (p1.y < p2.y) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY - radius} ${arc} ${p1.x + offset} ${lineY} L ${p2.x - radius} ${lineY} ${arc2} ${p2.x} ${lineY + offset} L ${p2.x} ${p2.y}`;\n } else {\n colorClassNum = branchPos.get(commitA.branch)?.index;\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY + radius} ${arc2} ${p1.x + offset} ${lineY} L ${p2.x - radius} ${lineY} ${arc} ${p2.x} ${lineY - offset} L ${p2.x} ${p2.y}`;\n }\n }\n } else {\n arc = \"A 20 20, 0, 0, 0,\";\n arc2 = \"A 20 20, 0, 0, 1,\";\n radius = 20;\n offset = 20;\n if (dir === \"TB\") {\n if (p1.x < p2.x) {\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc2} ${p2.x} ${p1.y + offset} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.x > p2.x) {\n arc = \"A 20 20, 0, 0, 0,\";\n arc2 = \"A 20 20, 0, 0, 1,\";\n radius = 20;\n offset = 20;\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc2} ${p1.x - offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x + radius} ${p1.y} ${arc} ${p2.x} ${p1.y + offset} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.x === p2.x) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x} ${p2.y}`;\n }\n } else if (dir === \"BT\") {\n if (p1.x < p2.x) {\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y + radius} ${arc2} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc} ${p2.x} ${p1.y - offset} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.x > p2.x) {\n arc = \"A 20 20, 0, 0, 0,\";\n arc2 = \"A 20 20, 0, 0, 1,\";\n radius = 20;\n offset = 20;\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y + radius} ${arc} ${p1.x - offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc} ${p2.x} ${p1.y - offset} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.x === p2.x) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x} ${p2.y}`;\n }\n } else {\n if (p1.y < p2.y) {\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc2} ${p2.x} ${p1.y + offset} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.y > p2.y) {\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc} ${p2.x} ${p1.y - offset} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y + radius} ${arc2} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.y === p2.y) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x} ${p2.y}`;\n }\n }\n }\n if (lineDef === void 0) {\n throw new Error(\"Line definition not found\");\n }\n svg.append(\"path\").attr(\"d\", lineDef).attr(\"class\", \"arrow arrow\" + colorClassNum % THEME_COLOR_LIMIT);\n}, \"drawArrow\");\nvar drawArrows = /* @__PURE__ */ __name((svg, commits) => {\n const gArrows = svg.append(\"g\").attr(\"class\", \"commit-arrows\");\n [...commits.keys()].forEach((key) => {\n const commit2 = commits.get(key);\n if (commit2.parents && commit2.parents.length > 0) {\n commit2.parents.forEach((parent) => {\n drawArrow(gArrows, commits.get(parent), commit2, commits);\n });\n }\n });\n}, \"drawArrows\");\nvar drawBranches = /* @__PURE__ */ __name((svg, branches) => {\n const g = svg.append(\"g\");\n branches.forEach((branch2, index) => {\n const adjustIndexForTheme = index % THEME_COLOR_LIMIT;\n const pos = branchPos.get(branch2.name)?.pos;\n if (pos === void 0) {\n throw new Error(`Position not found for branch ${branch2.name}`);\n }\n const line = g.append(\"line\");\n line.attr(\"x1\", 0);\n line.attr(\"y1\", pos);\n line.attr(\"x2\", maxPos);\n line.attr(\"y2\", pos);\n line.attr(\"class\", \"branch branch\" + adjustIndexForTheme);\n if (dir === \"TB\") {\n line.attr(\"y1\", defaultPos);\n line.attr(\"x1\", pos);\n line.attr(\"y2\", maxPos);\n line.attr(\"x2\", pos);\n } else if (dir === \"BT\") {\n line.attr(\"y1\", maxPos);\n line.attr(\"x1\", pos);\n line.attr(\"y2\", defaultPos);\n line.attr(\"x2\", pos);\n }\n lanes.push(pos);\n const name = branch2.name;\n const labelElement = drawText(name);\n const bkg = g.insert(\"rect\");\n const branchLabel = g.insert(\"g\").attr(\"class\", \"branchLabel\");\n const label = branchLabel.insert(\"g\").attr(\"class\", \"label branch-label\" + adjustIndexForTheme);\n label.node().appendChild(labelElement);\n const bbox = labelElement.getBBox();\n bkg.attr(\"class\", \"branchLabelBkg label\" + adjustIndexForTheme).attr(\"rx\", 4).attr(\"ry\", 4).attr(\"x\", -bbox.width - 4 - (DEFAULT_GITGRAPH_CONFIG2?.rotateCommitLabel === true ? 30 : 0)).attr(\"y\", -bbox.height / 2 + 8).attr(\"width\", bbox.width + 18).attr(\"height\", bbox.height + 4);\n label.attr(\n \"transform\",\n \"translate(\" + (-bbox.width - 14 - (DEFAULT_GITGRAPH_CONFIG2?.rotateCommitLabel === true ? 30 : 0)) + \", \" + (pos - bbox.height / 2 - 1) + \")\"\n );\n if (dir === \"TB\") {\n bkg.attr(\"x\", pos - bbox.width / 2 - 10).attr(\"y\", 0);\n label.attr(\"transform\", \"translate(\" + (pos - bbox.width / 2 - 5) + \", 0)\");\n } else if (dir === \"BT\") {\n bkg.attr(\"x\", pos - bbox.width / 2 - 10).attr(\"y\", maxPos);\n label.attr(\"transform\", \"translate(\" + (pos - bbox.width / 2 - 5) + \", \" + maxPos + \")\");\n } else {\n bkg.attr(\"transform\", \"translate(-19, \" + (pos - bbox.height / 2) + \")\");\n }\n });\n}, \"drawBranches\");\nvar setBranchPosition = /* @__PURE__ */ __name(function(name, pos, index, bbox, rotateCommitLabel) {\n branchPos.set(name, { pos, index });\n pos += 50 + (rotateCommitLabel ? 40 : 0) + (dir === \"TB\" || dir === \"BT\" ? bbox.width / 2 : 0);\n return pos;\n}, \"setBranchPosition\");\nvar draw = /* @__PURE__ */ __name(function(txt, id, ver, diagObj) {\n clear3();\n log.debug(\"in gitgraph renderer\", txt + \"\\n\", \"id:\", id, ver);\n if (!DEFAULT_GITGRAPH_CONFIG2) {\n throw new Error(\"GitGraph config not found\");\n }\n const rotateCommitLabel = DEFAULT_GITGRAPH_CONFIG2.rotateCommitLabel ?? false;\n const db2 = diagObj.db;\n allCommitsDict = db2.getCommits();\n const branches = db2.getBranchesAsObjArray();\n dir = db2.getDirection();\n const diagram2 = select(`[id=\"${id}\"]`);\n let pos = 0;\n branches.forEach((branch2, index) => {\n const labelElement = drawText(branch2.name);\n const g = diagram2.append(\"g\");\n const branchLabel = g.insert(\"g\").attr(\"class\", \"branchLabel\");\n const label = branchLabel.insert(\"g\").attr(\"class\", \"label branch-label\");\n label.node()?.appendChild(labelElement);\n const bbox = labelElement.getBBox();\n pos = setBranchPosition(branch2.name, pos, index, bbox, rotateCommitLabel);\n label.remove();\n branchLabel.remove();\n g.remove();\n });\n drawCommits(diagram2, allCommitsDict, false);\n if (DEFAULT_GITGRAPH_CONFIG2.showBranches) {\n drawBranches(diagram2, branches);\n }\n drawArrows(diagram2, allCommitsDict);\n drawCommits(diagram2, allCommitsDict, true);\n utils_default.insertTitle(\n diagram2,\n \"gitTitleText\",\n DEFAULT_GITGRAPH_CONFIG2.titleTopMargin ?? 0,\n db2.getDiagramTitle()\n );\n setupGraphViewbox(\n void 0,\n diagram2,\n DEFAULT_GITGRAPH_CONFIG2.diagramPadding,\n DEFAULT_GITGRAPH_CONFIG2.useMaxWidth\n );\n}, \"draw\");\nvar gitGraphRenderer_default = {\n draw\n};\nif (void 0) {\n const { it, expect, describe } = void 0;\n describe(\"drawText\", () => {\n it(\"should drawText\", () => {\n const svgLabel = drawText(\"main\");\n expect(svgLabel).toBeDefined();\n expect(svgLabel.children[0].innerHTML).toBe(\"main\");\n });\n });\n describe(\"branchPosition\", () => {\n const bbox = {\n x: 0,\n y: 0,\n width: 10,\n height: 10,\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n toJSON: /* @__PURE__ */ __name(() => \"\", \"toJSON\")\n };\n it(\"should setBranchPositions LR with two branches\", () => {\n dir = \"LR\";\n const pos = setBranchPosition(\"main\", 0, 0, bbox, true);\n expect(pos).toBe(90);\n expect(branchPos.get(\"main\")).toEqual({ pos: 0, index: 0 });\n const posNext = setBranchPosition(\"develop\", pos, 1, bbox, true);\n expect(posNext).toBe(180);\n expect(branchPos.get(\"develop\")).toEqual({ pos, index: 1 });\n });\n it(\"should setBranchPositions TB with two branches\", () => {\n dir = \"TB\";\n bbox.width = 34.9921875;\n const pos = setBranchPosition(\"main\", 0, 0, bbox, true);\n expect(pos).toBe(107.49609375);\n expect(branchPos.get(\"main\")).toEqual({ pos: 0, index: 0 });\n bbox.width = 56.421875;\n const posNext = setBranchPosition(\"develop\", pos, 1, bbox, true);\n expect(posNext).toBe(225.70703125);\n expect(branchPos.get(\"develop\")).toEqual({ pos, index: 1 });\n });\n });\n describe(\"commitPosition\", () => {\n const commits = /* @__PURE__ */ new Map([\n [\n \"commitZero\",\n {\n id: \"ZERO\",\n message: \"\",\n seq: 0,\n type: commitType.NORMAL,\n tags: [],\n parents: [],\n branch: \"main\"\n }\n ],\n [\n \"commitA\",\n {\n id: \"A\",\n message: \"\",\n seq: 1,\n type: commitType.NORMAL,\n tags: [],\n parents: [\"ZERO\"],\n branch: \"feature\"\n }\n ],\n [\n \"commitB\",\n {\n id: \"B\",\n message: \"\",\n seq: 2,\n type: commitType.NORMAL,\n tags: [],\n parents: [\"A\"],\n branch: \"feature\"\n }\n ],\n [\n \"commitM\",\n {\n id: \"M\",\n message: \"merged branch feature into main\",\n seq: 3,\n type: commitType.MERGE,\n tags: [],\n parents: [\"ZERO\", \"B\"],\n branch: \"main\",\n customId: true\n }\n ],\n [\n \"commitC\",\n {\n id: \"C\",\n message: \"\",\n seq: 4,\n type: commitType.NORMAL,\n tags: [],\n parents: [\"ZERO\"],\n branch: \"release\"\n }\n ],\n [\n \"commit5_8928ea0\",\n {\n id: \"5-8928ea0\",\n message: \"cherry-picked [object Object] into release\",\n seq: 5,\n type: commitType.CHERRY_PICK,\n tags: [],\n parents: [\"C\", \"M\"],\n branch: \"release\"\n }\n ],\n [\n \"commitD\",\n {\n id: \"D\",\n message: \"\",\n seq: 6,\n type: commitType.NORMAL,\n tags: [],\n parents: [\"5-8928ea0\"],\n branch: \"release\"\n }\n ],\n [\n \"commit7_ed848ba\",\n {\n id: \"7-ed848ba\",\n message: \"cherry-picked [object Object] into release\",\n seq: 7,\n type: commitType.CHERRY_PICK,\n tags: [],\n parents: [\"D\", \"M\"],\n branch: \"release\"\n }\n ]\n ]);\n let pos = 0;\n branchPos.set(\"main\", { pos: 0, index: 0 });\n branchPos.set(\"feature\", { pos: 107.49609375, index: 1 });\n branchPos.set(\"release\", { pos: 224.03515625, index: 2 });\n describe(\"TB\", () => {\n pos = 30;\n dir = \"TB\";\n const expectedCommitPositionTB = /* @__PURE__ */ new Map([\n [\"commitZero\", { x: 0, y: 40, posWithOffset: 40 }],\n [\"commitA\", { x: 107.49609375, y: 90, posWithOffset: 90 }],\n [\"commitB\", { x: 107.49609375, y: 140, posWithOffset: 140 }],\n [\"commitM\", { x: 0, y: 190, posWithOffset: 190 }],\n [\"commitC\", { x: 224.03515625, y: 240, posWithOffset: 240 }],\n [\"commit5_8928ea0\", { x: 224.03515625, y: 290, posWithOffset: 290 }],\n [\"commitD\", { x: 224.03515625, y: 340, posWithOffset: 340 }],\n [\"commit7_ed848ba\", { x: 224.03515625, y: 390, posWithOffset: 390 }]\n ]);\n commits.forEach((commit2, key) => {\n it(`should give the correct position for commit ${key}`, () => {\n const position = getCommitPosition(commit2, pos, false);\n expect(position).toEqual(expectedCommitPositionTB.get(key));\n pos += 50;\n });\n });\n });\n describe(\"LR\", () => {\n let pos2 = 30;\n dir = \"LR\";\n const expectedCommitPositionLR = /* @__PURE__ */ new Map([\n [\"commitZero\", { x: 0, y: 40, posWithOffset: 40 }],\n [\"commitA\", { x: 107.49609375, y: 90, posWithOffset: 90 }],\n [\"commitB\", { x: 107.49609375, y: 140, posWithOffset: 140 }],\n [\"commitM\", { x: 0, y: 190, posWithOffset: 190 }],\n [\"commitC\", { x: 224.03515625, y: 240, posWithOffset: 240 }],\n [\"commit5_8928ea0\", { x: 224.03515625, y: 290, posWithOffset: 290 }],\n [\"commitD\", { x: 224.03515625, y: 340, posWithOffset: 340 }],\n [\"commit7_ed848ba\", { x: 224.03515625, y: 390, posWithOffset: 390 }]\n ]);\n commits.forEach((commit2, key) => {\n it(`should give the correct position for commit ${key}`, () => {\n const position = getCommitPosition(commit2, pos2, false);\n expect(position).toEqual(expectedCommitPositionLR.get(key));\n pos2 += 50;\n });\n });\n });\n describe(\"getCommitClassType\", () => {\n const expectedCommitClassType = /* @__PURE__ */ new Map([\n [\"commitZero\", \"commit-normal\"],\n [\"commitA\", \"commit-normal\"],\n [\"commitB\", \"commit-normal\"],\n [\"commitM\", \"commit-merge\"],\n [\"commitC\", \"commit-normal\"],\n [\"commit5_8928ea0\", \"commit-cherry-pick\"],\n [\"commitD\", \"commit-normal\"],\n [\"commit7_ed848ba\", \"commit-cherry-pick\"]\n ]);\n commits.forEach((commit2, key) => {\n it(`should give the correct class type for commit ${key}`, () => {\n const classType = getCommitClassType(commit2);\n expect(classType).toBe(expectedCommitClassType.get(key));\n });\n });\n });\n });\n describe(\"building BT parallel commit diagram\", () => {\n const commits = /* @__PURE__ */ new Map([\n [\n \"1-abcdefg\",\n {\n id: \"1-abcdefg\",\n message: \"\",\n seq: 0,\n type: 0,\n tags: [],\n parents: [],\n branch: \"main\"\n }\n ],\n [\n \"2-abcdefg\",\n {\n id: \"2-abcdefg\",\n message: \"\",\n seq: 1,\n type: 0,\n tags: [],\n parents: [\"1-abcdefg\"],\n branch: \"main\"\n }\n ],\n [\n \"3-abcdefg\",\n {\n id: \"3-abcdefg\",\n message: \"\",\n seq: 2,\n type: 0,\n tags: [],\n parents: [\"2-abcdefg\"],\n branch: \"develop\"\n }\n ],\n [\n \"4-abcdefg\",\n {\n id: \"4-abcdefg\",\n message: \"\",\n seq: 3,\n type: 0,\n tags: [],\n parents: [\"3-abcdefg\"],\n branch: \"develop\"\n }\n ],\n [\n \"5-abcdefg\",\n {\n id: \"5-abcdefg\",\n message: \"\",\n seq: 4,\n type: 0,\n tags: [],\n parents: [\"2-abcdefg\"],\n branch: \"feature\"\n }\n ],\n [\n \"6-abcdefg\",\n {\n id: \"6-abcdefg\",\n message: \"\",\n seq: 5,\n type: 0,\n tags: [],\n parents: [\"5-abcdefg\"],\n branch: \"feature\"\n }\n ],\n [\n \"7-abcdefg\",\n {\n id: \"7-abcdefg\",\n message: \"\",\n seq: 6,\n type: 0,\n tags: [],\n parents: [\"2-abcdefg\"],\n branch: \"main\"\n }\n ],\n [\n \"8-abcdefg\",\n {\n id: \"8-abcdefg\",\n message: \"\",\n seq: 7,\n type: 0,\n tags: [],\n parents: [\"7-abcdefg\"],\n branch: \"main\"\n }\n ]\n ]);\n const expectedCommitPosition = /* @__PURE__ */ new Map([\n [\"1-abcdefg\", { x: 0, y: 40 }],\n [\"2-abcdefg\", { x: 0, y: 90 }],\n [\"3-abcdefg\", { x: 107.49609375, y: 140 }],\n [\"4-abcdefg\", { x: 107.49609375, y: 190 }],\n [\"5-abcdefg\", { x: 225.70703125, y: 140 }],\n [\"6-abcdefg\", { x: 225.70703125, y: 190 }],\n [\"7-abcdefg\", { x: 0, y: 140 }],\n [\"8-abcdefg\", { x: 0, y: 190 }]\n ]);\n const expectedCommitPositionAfterParallel = /* @__PURE__ */ new Map([\n [\"1-abcdefg\", { x: 0, y: 210 }],\n [\"2-abcdefg\", { x: 0, y: 160 }],\n [\"3-abcdefg\", { x: 107.49609375, y: 110 }],\n [\"4-abcdefg\", { x: 107.49609375, y: 60 }],\n [\"5-abcdefg\", { x: 225.70703125, y: 110 }],\n [\"6-abcdefg\", { x: 225.70703125, y: 60 }],\n [\"7-abcdefg\", { x: 0, y: 110 }],\n [\"8-abcdefg\", { x: 0, y: 60 }]\n ]);\n const expectedCommitCurrentPosition = /* @__PURE__ */ new Map([\n [\"1-abcdefg\", 30],\n [\"2-abcdefg\", 80],\n [\"3-abcdefg\", 130],\n [\"4-abcdefg\", 180],\n [\"5-abcdefg\", 130],\n [\"6-abcdefg\", 180],\n [\"7-abcdefg\", 130],\n [\"8-abcdefg\", 180]\n ]);\n const sortedKeys = [...expectedCommitPosition.keys()];\n it(\"should get the correct commit position and current position\", () => {\n dir = \"BT\";\n let curPos = 30;\n commitPos.clear();\n branchPos.clear();\n branchPos.set(\"main\", { pos: 0, index: 0 });\n branchPos.set(\"develop\", { pos: 107.49609375, index: 1 });\n branchPos.set(\"feature\", { pos: 225.70703125, index: 2 });\n DEFAULT_GITGRAPH_CONFIG2.parallelCommits = true;\n commits.forEach((commit2, key) => {\n if (commit2.parents.length > 0) {\n curPos = calculateCommitPosition(commit2);\n }\n const position = setCommitPosition(commit2, curPos);\n expect(position).toEqual(expectedCommitPosition.get(key));\n expect(curPos).toEqual(expectedCommitCurrentPosition.get(key));\n });\n });\n it(\"should get the correct commit position after parallel commits\", () => {\n commitPos.clear();\n branchPos.clear();\n dir = \"BT\";\n const curPos = 30;\n commitPos.clear();\n branchPos.clear();\n branchPos.set(\"main\", { pos: 0, index: 0 });\n branchPos.set(\"develop\", { pos: 107.49609375, index: 1 });\n branchPos.set(\"feature\", { pos: 225.70703125, index: 2 });\n setParallelBTPos(sortedKeys, commits, curPos);\n sortedKeys.forEach((commit2) => {\n const position = commitPos.get(commit2);\n expect(position).toEqual(expectedCommitPositionAfterParallel.get(commit2));\n });\n });\n });\n DEFAULT_GITGRAPH_CONFIG2.parallelCommits = false;\n it(\"add\", () => {\n commitPos.set(\"parent1\", { x: 1, y: 1 });\n commitPos.set(\"parent2\", { x: 2, y: 2 });\n commitPos.set(\"parent3\", { x: 3, y: 3 });\n dir = \"LR\";\n const parents = [\"parent1\", \"parent2\", \"parent3\"];\n const closestParent = findClosestParent(parents);\n expect(closestParent).toBe(\"parent3\");\n commitPos.clear();\n });\n}\n\n// src/diagrams/git/styles.js\nvar getStyles = /* @__PURE__ */ __name((options) => `\n .commit-id,\n .commit-msg,\n .branch-label {\n fill: lightgrey;\n color: lightgrey;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n ${[0, 1, 2, 3, 4, 5, 6, 7].map(\n (i) => `\n .branch-label${i} { fill: ${options[\"gitBranchLabel\" + i]}; }\n .commit${i} { stroke: ${options[\"git\" + i]}; fill: ${options[\"git\" + i]}; }\n .commit-highlight${i} { stroke: ${options[\"gitInv\" + i]}; fill: ${options[\"gitInv\" + i]}; }\n .label${i} { fill: ${options[\"git\" + i]}; }\n .arrow${i} { stroke: ${options[\"git\" + i]}; }\n `\n).join(\"\\n\")}\n\n .branch {\n stroke-width: 1;\n stroke: ${options.lineColor};\n stroke-dasharray: 2;\n }\n .commit-label { font-size: ${options.commitLabelFontSize}; fill: ${options.commitLabelColor};}\n .commit-label-bkg { font-size: ${options.commitLabelFontSize}; fill: ${options.commitLabelBackground}; opacity: 0.5; }\n .tag-label { font-size: ${options.tagLabelFontSize}; fill: ${options.tagLabelColor};}\n .tag-label-bkg { fill: ${options.tagLabelBackground}; stroke: ${options.tagLabelBorder}; }\n .tag-hole { fill: ${options.textColor}; }\n\n .commit-merge {\n stroke: ${options.primaryColor};\n fill: ${options.primaryColor};\n }\n .commit-reverse {\n stroke: ${options.primaryColor};\n fill: ${options.primaryColor};\n stroke-width: 3;\n }\n .commit-highlight-outer {\n }\n .commit-highlight-inner {\n stroke: ${options.primaryColor};\n fill: ${options.primaryColor};\n }\n\n .arrow { stroke-width: 8; stroke-linecap: round; fill: none}\n .gitTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.textColor};\n }\n`, \"getStyles\");\nvar styles_default = getStyles;\n\n// src/diagrams/git/gitGraphDiagram.ts\nvar diagram = {\n parser,\n db,\n renderer: gitGraphRenderer_default,\n styles: styles_default\n};\nexport {\n diagram\n};\n"],"x_google_ignoreList":[0],"mappings":"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"}
|