local-diff-reviewer 3.0.11 → 4.0.0

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.
Files changed (72) hide show
  1. package/dist/cli/start.js +149 -5
  2. package/dist/web/assets/{arc-DXHF8Xjh.js → arc-BR56UJ2q.js} +1 -1
  3. package/dist/web/assets/{architectureDiagram-3BPJPVTR-ULJhFTbi.js → architectureDiagram-3BPJPVTR-QSNoOmcD.js} +1 -1
  4. package/dist/web/assets/{blockDiagram-GPEHLZMM-DIADQ_Db.js → blockDiagram-GPEHLZMM-DIZH0QR3.js} +1 -1
  5. package/dist/web/assets/{c4Diagram-AAUBKEIU-BFpuzqsc.js → c4Diagram-AAUBKEIU-CPDSbt6E.js} +1 -1
  6. package/dist/web/assets/channel-B1I9H9NN.js +1 -0
  7. package/dist/web/assets/{chunk-2J33WTMH-9OzFjec-.js → chunk-2J33WTMH-DfV1Wxzg.js} +1 -1
  8. package/dist/web/assets/{chunk-3OPIFGDE-EFvQ3NBs.js → chunk-3OPIFGDE-B7UZbk4f.js} +1 -1
  9. package/dist/web/assets/{chunk-4BX2VUAB-ONJ_mt24.js → chunk-4BX2VUAB-urkKkocB.js} +1 -1
  10. package/dist/web/assets/{chunk-55IACEB6-QqFfqssu.js → chunk-55IACEB6-C8ylU6mt.js} +1 -1
  11. package/dist/web/assets/{chunk-5ZQYHXKU-D6msllU9.js → chunk-5ZQYHXKU-Cy7POa4x.js} +1 -1
  12. package/dist/web/assets/{chunk-727SXJPM-CFg4EWdY.js → chunk-727SXJPM-C8E8Y71j.js} +1 -1
  13. package/dist/web/assets/{chunk-AQP2D5EJ-BeXyF8IX.js → chunk-AQP2D5EJ-D9rMJpjr.js} +1 -1
  14. package/dist/web/assets/{chunk-BSJP7CBP-NyyDjQ87.js → chunk-BSJP7CBP-DPOxgIuA.js} +1 -1
  15. package/dist/web/assets/{chunk-CSCIHK7Q-BF0nJmAe.js → chunk-CSCIHK7Q-NalEqjEe.js} +1 -1
  16. package/dist/web/assets/{chunk-FMBD7UC4-CV7dwoCt.js → chunk-FMBD7UC4-CqHu0Ddy.js} +1 -1
  17. package/dist/web/assets/{chunk-KSCS5N6A-7RBrnQLn.js → chunk-KSCS5N6A-4DOHUm1X.js} +1 -1
  18. package/dist/web/assets/{chunk-L5ZTLDWV-BZglmESS.js → chunk-L5ZTLDWV-C2ELgJzw.js} +1 -1
  19. package/dist/web/assets/{chunk-LZXEDZCA-DxIwWmhs.js → chunk-LZXEDZCA-BB0BR9oJ.js} +2 -2
  20. package/dist/web/assets/{chunk-ND2GUHAM-A2GWzy8a.js → chunk-ND2GUHAM-Xhn_2Cqz.js} +1 -1
  21. package/dist/web/assets/{chunk-NZK2D7GU-BYPCWtIt.js → chunk-NZK2D7GU-zYi1cs9Z.js} +1 -1
  22. package/dist/web/assets/{chunk-O5CBEL6O-BuXZ1xgZ.js → chunk-O5CBEL6O-BODJA_dy.js} +1 -1
  23. package/dist/web/assets/chunk-QZHKN3VN-ByJ-AwbE.js +1 -0
  24. package/dist/web/assets/chunk-WU5MYG2G-D1aTMOQw.js +1 -0
  25. package/dist/web/assets/{chunk-XPW4576I-CrjhlLuT.js → chunk-XPW4576I-D8_9GoWv.js} +1 -1
  26. package/dist/web/assets/classDiagram-4FO5ZUOK-DqiTlcHU.js +1 -0
  27. package/dist/web/assets/classDiagram-v2-Q7XG4LA2-BCTUlGPz.js +1 -0
  28. package/dist/web/assets/{cose-bilkent-S5V4N54A-DFjrK-O7.js → cose-bilkent-S5V4N54A-BsloOG1M.js} +1 -1
  29. package/dist/web/assets/{dagre-BM42HDAG-AlQN943T.js → dagre-BM42HDAG-C2KIEcH-.js} +1 -1
  30. package/dist/web/assets/{diagram-2AECGRRQ-B-yTojQn.js → diagram-2AECGRRQ-BUwRJ9KM.js} +1 -1
  31. package/dist/web/assets/{diagram-5GNKFQAL-DM06sjaj.js → diagram-5GNKFQAL-BZPhOzmo.js} +1 -1
  32. package/dist/web/assets/{diagram-KO2AKTUF-288OtixI.js → diagram-KO2AKTUF-CAUK4gKm.js} +1 -1
  33. package/dist/web/assets/{diagram-LMA3HP47-DFMXU6YQ.js → diagram-LMA3HP47-C_r9DVs_.js} +1 -1
  34. package/dist/web/assets/{diagram-OG6HWLK6-B9fW2BsX.js → diagram-OG6HWLK6-31p4uFXJ.js} +1 -1
  35. package/dist/web/assets/{dist-BvZI7zIw.js → dist-Ck1Zve1a.js} +1 -1
  36. package/dist/web/assets/{erDiagram-TEJ5UH35-GFhwFMWA.js → erDiagram-TEJ5UH35-C8EeJM7j.js} +1 -1
  37. package/dist/web/assets/{flowDiagram-I6XJVG4X-X0GzsqXd.js → flowDiagram-I6XJVG4X-BQqB8kKF.js} +1 -1
  38. package/dist/web/assets/{ganttDiagram-6RSMTGT7-D9krnzcL.js → ganttDiagram-6RSMTGT7-4NPFmdaW.js} +1 -1
  39. package/dist/web/assets/{gitGraphDiagram-PVQCEYII-CHFX9mpW.js → gitGraphDiagram-PVQCEYII-CDmvFqiZ.js} +1 -1
  40. package/dist/web/assets/{index-VrNoEeV7.js → index-B_58iLIC.js} +20 -20
  41. package/dist/web/assets/index-Bp6Az-HB.css +1 -0
  42. package/dist/web/assets/{infoDiagram-5YYISTIA-Cjr_2IwG.js → infoDiagram-5YYISTIA-B7bI0yw0.js} +1 -1
  43. package/dist/web/assets/{ishikawaDiagram-YF4QCWOH-_pI9bUMX.js → ishikawaDiagram-YF4QCWOH-D5xBBsAU.js} +1 -1
  44. package/dist/web/assets/{journeyDiagram-JHISSGLW-Wm-uvXkm.js → journeyDiagram-JHISSGLW-Bx7sCi9m.js} +1 -1
  45. package/dist/web/assets/{kanban-definition-UN3LZRKU-im0ALNi3.js → kanban-definition-UN3LZRKU-BZMYOpbE.js} +1 -1
  46. package/dist/web/assets/{line-Ca3yhFyP.js → line-D_c4pLL_.js} +1 -1
  47. package/dist/web/assets/{linear-BrB6R3UM.js → linear-jch8k3gY.js} +1 -1
  48. package/dist/web/assets/{mermaid-parser.core-Q_p_x88P.js → mermaid-parser.core-meE2GJWa.js} +1 -1
  49. package/dist/web/assets/{mermaid.core-CcZkq1Ys.js → mermaid.core-CED8hy6R.js} +3 -3
  50. package/dist/web/assets/{mindmap-definition-RKZ34NQL-BYQ_7shU.js → mindmap-definition-RKZ34NQL-Dq5CdJkT.js} +1 -1
  51. package/dist/web/assets/{pieDiagram-4H26LBE5-CSrEqk1e.js → pieDiagram-4H26LBE5-tlCDWqfO.js} +1 -1
  52. package/dist/web/assets/{quadrantDiagram-W4KKPZXB-DvAYvPCK.js → quadrantDiagram-W4KKPZXB-DxqMe-7l.js} +1 -1
  53. package/dist/web/assets/{requirementDiagram-4Y6WPE33-xsUUetfN.js → requirementDiagram-4Y6WPE33-Cit2aJnc.js} +1 -1
  54. package/dist/web/assets/{sankeyDiagram-5OEKKPKP-FpP4Fral.js → sankeyDiagram-5OEKKPKP-DxOco6qW.js} +1 -1
  55. package/dist/web/assets/{sequenceDiagram-3UESZ5HK-DIhE7jBb.js → sequenceDiagram-3UESZ5HK-FxR-x1T2.js} +1 -1
  56. package/dist/web/assets/{src-BjU1Qb5i.js → src-R6QfzeRb.js} +1 -1
  57. package/dist/web/assets/{stateDiagram-AJRCARHV-DzHUB4mR.js → stateDiagram-AJRCARHV-D_w-AmGN.js} +1 -1
  58. package/dist/web/assets/stateDiagram-v2-BHNVJYJU-CEnMp_RU.js +1 -0
  59. package/dist/web/assets/{timeline-definition-PNZ67QCA-CuNxP27U.js → timeline-definition-PNZ67QCA--m6p5F06.js} +1 -1
  60. package/dist/web/assets/{vennDiagram-CIIHVFJN-DrMSOIzz.js → vennDiagram-CIIHVFJN-BvTLOSov.js} +1 -1
  61. package/dist/web/assets/{wardleyDiagram-YWT4CUSO-D9LY-mKZ.js → wardleyDiagram-YWT4CUSO-suMirVgL.js} +1 -1
  62. package/dist/web/assets/{xychartDiagram-2RQKCTM6-CQAaO6Ia.js → xychartDiagram-2RQKCTM6-BDTgsmAY.js} +1 -1
  63. package/dist/web/index.html +2 -2
  64. package/docs/images/diff-review-ui.jpg +0 -0
  65. package/package.json +1 -1
  66. package/dist/web/assets/channel-B4GK5WC3.js +0 -1
  67. package/dist/web/assets/chunk-QZHKN3VN-C4R4Iq0n.js +0 -1
  68. package/dist/web/assets/chunk-WU5MYG2G-uDn33PFD.js +0 -1
  69. package/dist/web/assets/classDiagram-4FO5ZUOK-B-ab5Qcl.js +0 -1
  70. package/dist/web/assets/classDiagram-v2-Q7XG4LA2-mOcBwqwQ.js +0 -1
  71. package/dist/web/assets/index-Ci6CsMGU.css +0 -1
  72. package/dist/web/assets/stateDiagram-v2-BHNVJYJU-FTSfnTDs.js +0 -1
package/dist/cli/start.js CHANGED
@@ -850,9 +850,108 @@ function getThreadLocation(thread) {
850
850
  return `${thread.filePath}:${thread.anchor.lineNumber}`;
851
851
  }
852
852
 
853
+ // src/server/file-watcher-service.ts
854
+ import { watch } from "node:fs";
855
+ var FileWatcherService = class {
856
+ constructor(repoRoot) {
857
+ this.repoRoot = repoRoot;
858
+ this.startWatching();
859
+ }
860
+ repoRoot;
861
+ clients = /* @__PURE__ */ new Set();
862
+ watchers = [];
863
+ pendingChanges = false;
864
+ debounceTimer = null;
865
+ closed = false;
866
+ /**
867
+ * 注册一个 SSE 客户端,并立即同步当前是否存在待刷新的文件变化。
868
+ */
869
+ subscribe(res) {
870
+ this.clients.add(res);
871
+ this.send(res, {
872
+ type: "connected",
873
+ hasPendingChanges: this.pendingChanges
874
+ });
875
+ res.on("close", () => {
876
+ this.clients.delete(res);
877
+ });
878
+ }
879
+ /**
880
+ * 在 review 快照已经重算后清空待刷新状态,并通知前端恢复为最新快照。
881
+ */
882
+ clearPendingChanges() {
883
+ if (!this.pendingChanges) return;
884
+ this.pendingChanges = false;
885
+ this.broadcast({ type: "synced", hasPendingChanges: false });
886
+ }
887
+ /**
888
+ * 释放底层文件监听资源,避免 runtime 退出后留下悬挂 watcher。
889
+ */
890
+ dispose() {
891
+ this.closed = true;
892
+ if (this.debounceTimer) {
893
+ clearTimeout(this.debounceTimer);
894
+ this.debounceTimer = null;
895
+ }
896
+ this.watchers.splice(0).forEach((watcher) => watcher.close());
897
+ this.clients.forEach((client) => client.end());
898
+ this.clients.clear();
899
+ }
900
+ /**
901
+ * 优先使用递归监听整个仓库;若运行环境不支持,则退化为监听仓库根和 `.git`。
902
+ */
903
+ startWatching() {
904
+ if (this.tryWatch(this.repoRoot, { recursive: true })) {
905
+ return;
906
+ }
907
+ this.tryWatch(this.repoRoot);
908
+ this.tryWatch(`${this.repoRoot}/.git`);
909
+ }
910
+ /**
911
+ * 把短时间内的多次磁盘事件合并成一次“可刷新”通知,避免前端按钮频繁闪动。
912
+ */
913
+ handleChange() {
914
+ if (this.closed) return;
915
+ this.pendingChanges = true;
916
+ if (this.debounceTimer) {
917
+ clearTimeout(this.debounceTimer);
918
+ }
919
+ this.debounceTimer = setTimeout(() => {
920
+ this.debounceTimer = null;
921
+ this.broadcast({
922
+ type: "change",
923
+ hasPendingChanges: true,
924
+ changedAt: (/* @__PURE__ */ new Date()).toISOString()
925
+ });
926
+ }, 180);
927
+ }
928
+ tryWatch(path, options) {
929
+ try {
930
+ const watcher = watch(path, options ?? {}, () => {
931
+ this.handleChange();
932
+ });
933
+ this.watchers.push(watcher);
934
+ return true;
935
+ } catch {
936
+ return false;
937
+ }
938
+ }
939
+ broadcast(event) {
940
+ this.clients.forEach((client) => {
941
+ this.send(client, event);
942
+ });
943
+ }
944
+ send(res, event) {
945
+ res.write(`data: ${JSON.stringify(event)}
946
+
947
+ `);
948
+ }
949
+ };
950
+
853
951
  // src/server/index.ts
854
952
  async function startServer(state, port = 4966) {
855
953
  let markdownPreviews = await buildMarkdownPreviewCache(state);
954
+ const fileWatcher = new FileWatcherService(state.session.repoRoot);
856
955
  const app = express();
857
956
  app.use(express.json({ limit: "2mb" }));
858
957
  app.get("/api/session", (_req, res) => {
@@ -885,13 +984,34 @@ async function startServer(state, port = 4966) {
885
984
  webDist: state.webDist
886
985
  };
887
986
  markdownPreviews = await buildMarkdownPreviewCache(nextReviewState);
888
- state.session = nextReviewState.session;
889
- state.diffFiles = nextReviewState.diffFiles;
987
+ applyReviewState(state, nextReviewState);
988
+ fileWatcher.clearPendingChanges();
890
989
  res.json({ session: state.session, files: state.diffFiles });
891
990
  } catch (error) {
892
991
  next(error);
893
992
  }
894
993
  });
994
+ app.get("/api/watch", (_req, res) => {
995
+ res.writeHead(200, {
996
+ "Content-Type": "text/event-stream",
997
+ "Cache-Control": "no-cache, no-transform",
998
+ Connection: "keep-alive"
999
+ });
1000
+ res.write(": connected\n\n");
1001
+ fileWatcher.subscribe(res);
1002
+ });
1003
+ app.post("/api/refresh", async (_req, res, next) => {
1004
+ try {
1005
+ const nextReviewState = await rebuildReviewState(state);
1006
+ markdownPreviews = await buildMarkdownPreviewCache(nextReviewState);
1007
+ applyReviewState(state, nextReviewState);
1008
+ fileWatcher.clearPendingChanges();
1009
+ const comments = await readComments(state.session.repoRoot);
1010
+ res.json({ session: state.session, files: state.diffFiles, threads: comments.threads });
1011
+ } catch (error) {
1012
+ next(error);
1013
+ }
1014
+ });
895
1015
  app.get("/api/markdown-preview", async (req, res, next) => {
896
1016
  try {
897
1017
  const filePath = String(req.query.path ?? "");
@@ -1168,7 +1288,7 @@ async function startServer(state, port = 4966) {
1168
1288
  app.use((error, _req, res, _next) => {
1169
1289
  res.status(500).json({ error: error.message });
1170
1290
  });
1171
- return listen(app, port);
1291
+ return listen(app, port, fileWatcher);
1172
1292
  }
1173
1293
  async function buildMarkdownPreviewCache(state) {
1174
1294
  const previews = /* @__PURE__ */ new Map();
@@ -1187,12 +1307,36 @@ async function buildMarkdownPreviewCache(state) {
1187
1307
  );
1188
1308
  return previews;
1189
1309
  }
1190
- function listen(app, port) {
1310
+ function applyReviewState(currentState, nextState) {
1311
+ currentState.session = nextState.session;
1312
+ currentState.diffFiles = nextState.diffFiles;
1313
+ }
1314
+ async function rebuildReviewState(state) {
1315
+ const diff = await getDiff(state.session.mode, state.session.repoRoot);
1316
+ const diffFiles = parseUnifiedDiff(diff);
1317
+ const session = {
1318
+ id: crypto.randomUUID(),
1319
+ repoName: state.session.repoName,
1320
+ repoRoot: state.session.repoRoot,
1321
+ mode: state.session.mode,
1322
+ diffHash: diffHash(diff),
1323
+ createdAt: (/* @__PURE__ */ new Date()).toISOString()
1324
+ };
1325
+ return {
1326
+ session,
1327
+ diffFiles,
1328
+ webDist: state.webDist
1329
+ };
1330
+ }
1331
+ function listen(app, port, fileWatcher) {
1191
1332
  return new Promise((resolve3, reject) => {
1192
1333
  const server = createServer(app);
1334
+ server.once("close", () => {
1335
+ fileWatcher.dispose();
1336
+ });
1193
1337
  server.once("error", (error) => {
1194
1338
  if (error.code === "EADDRINUSE" && port !== 0) {
1195
- listen(app, 0).then(resolve3, reject);
1339
+ listen(app, 0, fileWatcher).then(resolve3, reject);
1196
1340
  return;
1197
1341
  }
1198
1342
  reject(error);
@@ -1 +1 @@
1
- import{n as e,t}from"./path-BJQEcSo7.js";import{a as n,c as r,d as i,f as a,i as o,l as s,m as c,n as l,o as u,p as d,r as f,u as p}from"./dist-BvZI7zIw.js";function m(e){return e.innerRadius}function h(e){return e.outerRadius}function g(e){return e.startAngle}function _(e){return e.endAngle}function v(e){return e&&e.padAngle}function y(e,t,n,r,i,a,o,s){var c=n-e,l=r-t,u=o-i,d=s-a,f=d*c-u*l;if(!(f*f<1e-12))return f=(u*(t-a)-d*(e-i))/f,[e+f*c,t+f*l]}function b(e,t,n,r,i,a,o){var c=e-n,l=t-r,u=(o?a:-a)/d(c*c+l*l),f=u*l,p=-u*c,m=e+f,h=t+p,g=n+f,_=r+p,v=(m+g)/2,y=(h+_)/2,b=g-m,x=_-h,S=b*b+x*x,C=i-a,w=m*_-g*h,T=(x<0?-1:1)*d(s(0,C*C*S-w*w)),E=(w*x-b*T)/S,D=(-w*b-x*T)/S,O=(w*x+b*T)/S,k=(-w*b+x*T)/S,A=E-v,j=D-y,M=O-v,N=k-y;return A*A+j*j>M*M+N*N&&(E=O,D=k),{cx:E,cy:D,x01:-f,y01:-p,x11:E*(i/C-1),y11:D*(i/C-1)}}function x(){var s=m,x=h,S=e(0),C=null,w=g,T=_,E=v,D=null,O=t(k);function k(){var e,t,m=+s.apply(this,arguments),h=+x.apply(this,arguments),g=w.apply(this,arguments)-r,_=T.apply(this,arguments)-r,v=l(_-g),k=_>g;if(D||=e=O(),h<m&&(t=h,h=m,m=t),!(h>1e-12))D.moveTo(0,0);else if(v>c-1e-12)D.moveTo(h*u(g),h*a(g)),D.arc(0,0,h,g,_,!k),m>1e-12&&(D.moveTo(m*u(_),m*a(_)),D.arc(0,0,m,_,g,k));else{var A=g,j=_,M=g,N=_,P=v,F=v,I=E.apply(this,arguments)/2,L=I>1e-12&&(C?+C.apply(this,arguments):d(m*m+h*h)),R=p(l(h-m)/2,+S.apply(this,arguments)),z=R,B=R,V,H;if(L>1e-12){var U=o(L/m*a(I)),W=o(L/h*a(I));(P-=U*2)>1e-12?(U*=k?1:-1,M+=U,N-=U):(P=0,M=N=(g+_)/2),(F-=W*2)>1e-12?(W*=k?1:-1,A+=W,j-=W):(F=0,A=j=(g+_)/2)}var G=h*u(A),K=h*a(A),q=m*u(N),J=m*a(N);if(R>1e-12){var Y=h*u(j),X=h*a(j),Z=m*u(M),Q=m*a(M),$;if(v<i)if($=y(G,K,Z,Q,Y,X,q,J)){var ee=G-$[0],te=K-$[1],ne=Y-$[0],re=X-$[1],ie=1/a(f((ee*ne+te*re)/(d(ee*ee+te*te)*d(ne*ne+re*re)))/2),ae=d($[0]*$[0]+$[1]*$[1]);z=p(R,(m-ae)/(ie-1)),B=p(R,(h-ae)/(ie+1))}else z=B=0}F>1e-12?B>1e-12?(V=b(Z,Q,G,K,h,B,k),H=b(Y,X,q,J,h,B,k),D.moveTo(V.cx+V.x01,V.cy+V.y01),B<R?D.arc(V.cx,V.cy,B,n(V.y01,V.x01),n(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,B,n(V.y01,V.x01),n(V.y11,V.x11),!k),D.arc(0,0,h,n(V.cy+V.y11,V.cx+V.x11),n(H.cy+H.y11,H.cx+H.x11),!k),D.arc(H.cx,H.cy,B,n(H.y11,H.x11),n(H.y01,H.x01),!k))):(D.moveTo(G,K),D.arc(0,0,h,A,j,!k)):D.moveTo(G,K),!(m>1e-12)||!(P>1e-12)?D.lineTo(q,J):z>1e-12?(V=b(q,J,Y,X,m,-z,k),H=b(G,K,Z,Q,m,-z,k),D.lineTo(V.cx+V.x01,V.cy+V.y01),z<R?D.arc(V.cx,V.cy,z,n(V.y01,V.x01),n(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,z,n(V.y01,V.x01),n(V.y11,V.x11),!k),D.arc(0,0,m,n(V.cy+V.y11,V.cx+V.x11),n(H.cy+H.y11,H.cx+H.x11),k),D.arc(H.cx,H.cy,z,n(H.y11,H.x11),n(H.y01,H.x01),!k))):D.arc(0,0,m,N,M,k)}if(D.closePath(),e)return D=null,e+``||null}return k.centroid=function(){var e=(+s.apply(this,arguments)+ +x.apply(this,arguments))/2,t=(+w.apply(this,arguments)+ +T.apply(this,arguments))/2-i/2;return[u(t)*e,a(t)*e]},k.innerRadius=function(t){return arguments.length?(s=typeof t==`function`?t:e(+t),k):s},k.outerRadius=function(t){return arguments.length?(x=typeof t==`function`?t:e(+t),k):x},k.cornerRadius=function(t){return arguments.length?(S=typeof t==`function`?t:e(+t),k):S},k.padRadius=function(t){return arguments.length?(C=t==null?null:typeof t==`function`?t:e(+t),k):C},k.startAngle=function(t){return arguments.length?(w=typeof t==`function`?t:e(+t),k):w},k.endAngle=function(t){return arguments.length?(T=typeof t==`function`?t:e(+t),k):T},k.padAngle=function(t){return arguments.length?(E=typeof t==`function`?t:e(+t),k):E},k.context=function(e){return arguments.length?(D=e??null,k):D},k}export{x as t};
1
+ import{n as e,t}from"./path-BJQEcSo7.js";import{a as n,c as r,d as i,f as a,i as o,l as s,m as c,n as l,o as u,p as d,r as f,u as p}from"./dist-Ck1Zve1a.js";function m(e){return e.innerRadius}function h(e){return e.outerRadius}function g(e){return e.startAngle}function _(e){return e.endAngle}function v(e){return e&&e.padAngle}function y(e,t,n,r,i,a,o,s){var c=n-e,l=r-t,u=o-i,d=s-a,f=d*c-u*l;if(!(f*f<1e-12))return f=(u*(t-a)-d*(e-i))/f,[e+f*c,t+f*l]}function b(e,t,n,r,i,a,o){var c=e-n,l=t-r,u=(o?a:-a)/d(c*c+l*l),f=u*l,p=-u*c,m=e+f,h=t+p,g=n+f,_=r+p,v=(m+g)/2,y=(h+_)/2,b=g-m,x=_-h,S=b*b+x*x,C=i-a,w=m*_-g*h,T=(x<0?-1:1)*d(s(0,C*C*S-w*w)),E=(w*x-b*T)/S,D=(-w*b-x*T)/S,O=(w*x+b*T)/S,k=(-w*b+x*T)/S,A=E-v,j=D-y,M=O-v,N=k-y;return A*A+j*j>M*M+N*N&&(E=O,D=k),{cx:E,cy:D,x01:-f,y01:-p,x11:E*(i/C-1),y11:D*(i/C-1)}}function x(){var s=m,x=h,S=e(0),C=null,w=g,T=_,E=v,D=null,O=t(k);function k(){var e,t,m=+s.apply(this,arguments),h=+x.apply(this,arguments),g=w.apply(this,arguments)-r,_=T.apply(this,arguments)-r,v=l(_-g),k=_>g;if(D||=e=O(),h<m&&(t=h,h=m,m=t),!(h>1e-12))D.moveTo(0,0);else if(v>c-1e-12)D.moveTo(h*u(g),h*a(g)),D.arc(0,0,h,g,_,!k),m>1e-12&&(D.moveTo(m*u(_),m*a(_)),D.arc(0,0,m,_,g,k));else{var A=g,j=_,M=g,N=_,P=v,F=v,I=E.apply(this,arguments)/2,L=I>1e-12&&(C?+C.apply(this,arguments):d(m*m+h*h)),R=p(l(h-m)/2,+S.apply(this,arguments)),z=R,B=R,V,H;if(L>1e-12){var U=o(L/m*a(I)),W=o(L/h*a(I));(P-=U*2)>1e-12?(U*=k?1:-1,M+=U,N-=U):(P=0,M=N=(g+_)/2),(F-=W*2)>1e-12?(W*=k?1:-1,A+=W,j-=W):(F=0,A=j=(g+_)/2)}var G=h*u(A),K=h*a(A),q=m*u(N),J=m*a(N);if(R>1e-12){var Y=h*u(j),X=h*a(j),Z=m*u(M),Q=m*a(M),$;if(v<i)if($=y(G,K,Z,Q,Y,X,q,J)){var ee=G-$[0],te=K-$[1],ne=Y-$[0],re=X-$[1],ie=1/a(f((ee*ne+te*re)/(d(ee*ee+te*te)*d(ne*ne+re*re)))/2),ae=d($[0]*$[0]+$[1]*$[1]);z=p(R,(m-ae)/(ie-1)),B=p(R,(h-ae)/(ie+1))}else z=B=0}F>1e-12?B>1e-12?(V=b(Z,Q,G,K,h,B,k),H=b(Y,X,q,J,h,B,k),D.moveTo(V.cx+V.x01,V.cy+V.y01),B<R?D.arc(V.cx,V.cy,B,n(V.y01,V.x01),n(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,B,n(V.y01,V.x01),n(V.y11,V.x11),!k),D.arc(0,0,h,n(V.cy+V.y11,V.cx+V.x11),n(H.cy+H.y11,H.cx+H.x11),!k),D.arc(H.cx,H.cy,B,n(H.y11,H.x11),n(H.y01,H.x01),!k))):(D.moveTo(G,K),D.arc(0,0,h,A,j,!k)):D.moveTo(G,K),!(m>1e-12)||!(P>1e-12)?D.lineTo(q,J):z>1e-12?(V=b(q,J,Y,X,m,-z,k),H=b(G,K,Z,Q,m,-z,k),D.lineTo(V.cx+V.x01,V.cy+V.y01),z<R?D.arc(V.cx,V.cy,z,n(V.y01,V.x01),n(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,z,n(V.y01,V.x01),n(V.y11,V.x11),!k),D.arc(0,0,m,n(V.cy+V.y11,V.cx+V.x11),n(H.cy+H.y11,H.cx+H.x11),k),D.arc(H.cx,H.cy,z,n(H.y11,H.x11),n(H.y01,H.x01),!k))):D.arc(0,0,m,N,M,k)}if(D.closePath(),e)return D=null,e+``||null}return k.centroid=function(){var e=(+s.apply(this,arguments)+ +x.apply(this,arguments))/2,t=(+w.apply(this,arguments)+ +T.apply(this,arguments))/2-i/2;return[u(t)*e,a(t)*e]},k.innerRadius=function(t){return arguments.length?(s=typeof t==`function`?t:e(+t),k):s},k.outerRadius=function(t){return arguments.length?(x=typeof t==`function`?t:e(+t),k):x},k.cornerRadius=function(t){return arguments.length?(S=typeof t==`function`?t:e(+t),k):S},k.padRadius=function(t){return arguments.length?(C=t==null?null:typeof t==`function`?t:e(+t),k):C},k.startAngle=function(t){return arguments.length?(w=typeof t==`function`?t:e(+t),k):w},k.endAngle=function(t){return arguments.length?(T=typeof t==`function`?t:e(+t),k):T},k.padAngle=function(t){return arguments.length?(E=typeof t==`function`?t:e(+t),k):E},k.context=function(e){return arguments.length?(D=e??null,k):D},k}export{x as t};