@luutuankiet/gsd-reader 0.1.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 (55) hide show
  1. package/README.md +77 -0
  2. package/cli.cjs +215 -0
  3. package/dist/assets/_baseUniq-CIPUpMAZ.js +1 -0
  4. package/dist/assets/arc-Br99N0VK.js +1 -0
  5. package/dist/assets/architectureDiagram-VXUJARFQ-CnDgLlps.js +36 -0
  6. package/dist/assets/blockDiagram-VD42YOAC-DfC57oz9.js +122 -0
  7. package/dist/assets/c4Diagram-YG6GDRKO-CMOSglVb.js +10 -0
  8. package/dist/assets/channel-CQKYTGLH.js +1 -0
  9. package/dist/assets/chunk-4BX2VUAB-D6LBiRlQ.js +1 -0
  10. package/dist/assets/chunk-55IACEB6-BO539cu3.js +1 -0
  11. package/dist/assets/chunk-B4BG7PRW-D5sUsnig.js +165 -0
  12. package/dist/assets/chunk-DI55MBZ5-Bk_ryD3i.js +220 -0
  13. package/dist/assets/chunk-FMBD7UC4-Ra4v9gkm.js +15 -0
  14. package/dist/assets/chunk-QN33PNHL-t3oGvgwA.js +1 -0
  15. package/dist/assets/chunk-QZHKN3VN-auqEfnzi.js +1 -0
  16. package/dist/assets/chunk-TZMSLE5B-BJEML2bc.js +1 -0
  17. package/dist/assets/classDiagram-2ON5EDUG-iPflhCki.js +1 -0
  18. package/dist/assets/classDiagram-v2-WZHVMYZB-iPflhCki.js +1 -0
  19. package/dist/assets/clone-CBLy9m5M.js +1 -0
  20. package/dist/assets/cose-bilkent-S5V4N54A-Dnh7MK-o.js +1 -0
  21. package/dist/assets/cytoscape.esm-BQaXIfA_.js +331 -0
  22. package/dist/assets/dagre-6UL2VRFP-yqolbkxb.js +4 -0
  23. package/dist/assets/defaultLocale-DX6XiGOO.js +1 -0
  24. package/dist/assets/diagram-PSM6KHXK-DNlswJeO.js +24 -0
  25. package/dist/assets/diagram-QEK2KX5R-DIhPPMly.js +43 -0
  26. package/dist/assets/diagram-S2PKOQOG-BpsQU6g-.js +24 -0
  27. package/dist/assets/erDiagram-Q2GNP2WA-ekvtRHZe.js +60 -0
  28. package/dist/assets/flowDiagram-NV44I4VS-BZVzZirk.js +162 -0
  29. package/dist/assets/ganttDiagram-JELNMOA3-ZL-Lvri5.js +267 -0
  30. package/dist/assets/gitGraphDiagram-NY62KEGX-CWINqymz.js +65 -0
  31. package/dist/assets/graph-BwuUgdUo.js +1 -0
  32. package/dist/assets/index-DBfOfu2r.js +584 -0
  33. package/dist/assets/infoDiagram-WHAUD3N6-DEWOExRO.js +2 -0
  34. package/dist/assets/init-Gi6I4Gst.js +1 -0
  35. package/dist/assets/journeyDiagram-XKPGCS4Q-DKXUBm8W.js +139 -0
  36. package/dist/assets/kanban-definition-3W4ZIXB7-BWGprGSC.js +89 -0
  37. package/dist/assets/katex-CBSAILhF.js +261 -0
  38. package/dist/assets/layout-CvO1_uww.js +1 -0
  39. package/dist/assets/linear-CEwiQp1W.js +1 -0
  40. package/dist/assets/mermaid.core-Bwyq-ixB.js +256 -0
  41. package/dist/assets/min-DoNrXYhX.js +1 -0
  42. package/dist/assets/mindmap-definition-VGOIOE7T-CM8WjOQr.js +68 -0
  43. package/dist/assets/ordinal-Cboi1Yqb.js +1 -0
  44. package/dist/assets/pieDiagram-ADFJNKIX-C8s15H7H.js +30 -0
  45. package/dist/assets/quadrantDiagram-AYHSOK5B-D0g5wxCs.js +7 -0
  46. package/dist/assets/requirementDiagram-UZGBJVZJ-BZrk_Yop.js +64 -0
  47. package/dist/assets/sankeyDiagram-TZEHDZUN-DDmydxiD.js +10 -0
  48. package/dist/assets/sequenceDiagram-WL72ISMW-BFNOA8XU.js +145 -0
  49. package/dist/assets/stateDiagram-FKZM4ZOC-BWdtvbgT.js +1 -0
  50. package/dist/assets/stateDiagram-v2-4FDKWEC3-XQx3VZwI.js +1 -0
  51. package/dist/assets/timeline-definition-IT6M3QCI-D0HUIjfN.js +61 -0
  52. package/dist/assets/treemap-KMMF4GRG-B_Gv7V-c.js +128 -0
  53. package/dist/assets/xychartDiagram-PRI3JC2R-B8ImiHYg.js +7 -0
  54. package/dist/index.html +589 -0
  55. package/package.json +48 -0
package/README.md ADDED
@@ -0,0 +1,77 @@
1
+ # GSD-Lite Worklog Reader (Vite)
2
+
3
+ Hot-reloading viewer for GSD-Lite WORK.md files. When you edit WORK.md, the browser updates instantly.
4
+
5
+ ## Quick Start
6
+
7
+ ```bash
8
+ cd plugins/reader-vite
9
+
10
+ # Install dependencies (one-time)
11
+ pnpm install
12
+
13
+ # Start dev server (watches ../../gsd-lite/WORK.md by default)
14
+ pnpm dev
15
+
16
+ # Or specify a custom WORK.md path:
17
+ WORKLOG_PATH=../../../other-project/gsd-lite/WORK.md pnpm dev
18
+ ```
19
+
20
+ Then open http://localhost:3000 β€” the page auto-refreshes when WORK.md changes.
21
+
22
+ ## Features
23
+
24
+ - πŸ”₯ **Hot Reload** β€” Browser updates instantly when WORK.md changes (no manual refresh)
25
+ - πŸ“Š **Mermaid Diagrams** β€” Native SVG rendering with error handling
26
+ - 🎨 **Full Markdown** β€” Tables, code blocks, lists, links, strikethrough
27
+ - πŸ“± **Mobile Ready** β€” Responsive layout, touch-friendly navigation
28
+ - ⚑ **Fast** β€” Vite's instant HMR, sub-second rebuilds
29
+
30
+ ## How It Works
31
+
32
+ The Vite plugin (`src/vite-plugin-worklog.ts`) does three things:
33
+
34
+ 1. **Watches** β€” Uses chokidar to monitor the external WORK.md file
35
+ 2. **Serves** β€” Exposes `/_worklog` endpoint that returns the file content
36
+ 3. **Pushes** β€” Sends HMR events to the browser when the file changes
37
+
38
+ ```
39
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
40
+ β”‚ WORK.md │────▢│ vite-plugin-worklog │────▢│ Browser β”‚
41
+ β”‚ (external) β”‚ β”‚ (watch + serve) β”‚ β”‚ (HMR) β”‚
42
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
43
+ β”‚ β”‚ β”‚
44
+ β”‚ chokidar detects β”‚ WebSocket push β”‚ re-fetch
45
+ β”‚ file change β”‚ 'worklog-update' β”‚ & re-render
46
+ β–Ό β–Ό β–Ό
47
+ ```
48
+
49
+ ## Architecture
50
+
51
+ ```
52
+ src/
53
+ β”œβ”€β”€ main.ts # Entry point, HMR setup, Mermaid init
54
+ β”œβ”€β”€ parser.ts # WORK.md β†’ WorklogAST
55
+ β”œβ”€β”€ renderer.ts # WorklogAST β†’ HTML
56
+ β”œβ”€β”€ types.ts # TypeScript interfaces
57
+ └── vite-plugin-worklog.ts # Custom Vite plugin for file watching
58
+ ```
59
+
60
+ ## Configuration
61
+
62
+ | Environment Variable | Default | Description |
63
+ |---------------------|---------|-------------|
64
+ | `WORKLOG_PATH` | `../../gsd-lite/WORK.md` | Path to WORK.md (relative to plugin root) |
65
+
66
+ ## Build (Static Export)
67
+
68
+ ```bash
69
+ # Build static HTML for sharing/mobile (TODO: READER-002e)
70
+ pnpm build
71
+ ```
72
+
73
+ ## Related Logs
74
+
75
+ - **LOG-047** β€” Original Worklog Reader vision
76
+ - **LOG-048** β€” Python POC implementation
77
+ - **LOG-049** β€” Decision to pivot to Node/TypeScript + Vite
package/cli.cjs ADDED
@@ -0,0 +1,215 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * GSD-Lite Worklog Reader CLI
5
+ *
6
+ * A lightweight server for viewing WORK.md files with live reload.
7
+ * Uses chokidar for native file watching and WebSocket for push updates.
8
+ *
9
+ * Usage:
10
+ * npx @gsd-lite/reader [path-to-worklog] [--port=3000]
11
+ *
12
+ * Examples:
13
+ * npx @gsd-lite/reader # Watch ./gsd-lite/WORK.md on :3000
14
+ * npx @gsd-lite/reader ./my-project/WORK.md # Custom path
15
+ * npx @gsd-lite/reader --port=3001 # Custom port
16
+ */
17
+
18
+ const http = require('http');
19
+ const fs = require('fs');
20
+ const path = require('path');
21
+ const { WebSocketServer } = require('ws');
22
+ const chokidar = require('chokidar');
23
+
24
+ // =============================================================================
25
+ // Configuration
26
+ // =============================================================================
27
+
28
+ // Parse command line arguments
29
+ const args = process.argv.slice(2);
30
+
31
+ // Find port from --port=XXXX argument
32
+ const portArg = args.find(a => a.startsWith('--port='));
33
+ const PORT = parseInt(portArg?.split('=')[1] || process.env.PORT || '3000', 10);
34
+
35
+ // First non-flag argument is the worklog path
36
+ const WORKLOG = args.find(a => !a.startsWith('--')) || './gsd-lite/WORK.md';
37
+ const WORKLOG_PATH = path.resolve(WORKLOG);
38
+
39
+ // Static assets directory (bundled with this package)
40
+ const DIST = path.join(__dirname, 'dist');
41
+
42
+ // MIME types for static file serving
43
+ const MIME_TYPES = {
44
+ '.html': 'text/html',
45
+ '.js': 'application/javascript',
46
+ '.css': 'text/css',
47
+ '.json': 'application/json',
48
+ '.png': 'image/png',
49
+ '.jpg': 'image/jpeg',
50
+ '.gif': 'image/gif',
51
+ '.svg': 'image/svg+xml',
52
+ '.ico': 'image/x-icon',
53
+ '.woff': 'font/woff',
54
+ '.woff2': 'font/woff2',
55
+ '.ttf': 'font/ttf',
56
+ };
57
+
58
+ // =============================================================================
59
+ // HTTP Server
60
+ // =============================================================================
61
+
62
+ const server = http.createServer((req, res) => {
63
+ const url = new URL(req.url, `http://${req.headers.host}`);
64
+ const pathname = url.pathname;
65
+
66
+ // API endpoint: serve WORK.md content
67
+ if (pathname === '/_worklog') {
68
+ try {
69
+ const content = fs.readFileSync(WORKLOG_PATH, 'utf-8');
70
+ res.setHeader('Content-Type', 'text/plain; charset=utf-8');
71
+ res.setHeader('Cache-Control', 'no-cache');
72
+ res.end(content);
73
+ } catch (err) {
74
+ res.statusCode = 404;
75
+ res.setHeader('Content-Type', 'text/plain');
76
+ res.end(`WORK.md not found: ${WORKLOG_PATH}\n\nError: ${err.message}`);
77
+ }
78
+ return;
79
+ }
80
+
81
+ // Static file serving from dist/
82
+ let filePath = pathname === '/' ? '/index.html' : pathname;
83
+ const fullPath = path.join(DIST, filePath);
84
+
85
+ // Security: prevent directory traversal
86
+ if (!fullPath.startsWith(DIST)) {
87
+ res.statusCode = 403;
88
+ res.end('Forbidden');
89
+ return;
90
+ }
91
+
92
+ // Check if file exists
93
+ if (!fs.existsSync(fullPath)) {
94
+ // SPA fallback: serve index.html for non-file routes
95
+ const indexPath = path.join(DIST, 'index.html');
96
+ if (fs.existsSync(indexPath)) {
97
+ serveFile(indexPath, '.html', res);
98
+ return;
99
+ }
100
+ res.statusCode = 404;
101
+ res.end('Not found');
102
+ return;
103
+ }
104
+
105
+ // Serve the file
106
+ const ext = path.extname(fullPath).toLowerCase();
107
+ serveFile(fullPath, ext, res);
108
+ });
109
+
110
+ function serveFile(filePath, ext, res) {
111
+ const mimeType = MIME_TYPES[ext] || 'application/octet-stream';
112
+
113
+ try {
114
+ const content = fs.readFileSync(filePath);
115
+ res.setHeader('Content-Type', mimeType);
116
+ res.setHeader('Cache-Control', 'public, max-age=3600');
117
+ res.end(content);
118
+ } catch (err) {
119
+ res.statusCode = 500;
120
+ res.end(`Error reading file: ${err.message}`);
121
+ }
122
+ }
123
+
124
+ // =============================================================================
125
+ // WebSocket Server (Live Reload)
126
+ // =============================================================================
127
+
128
+ const wss = new WebSocketServer({ server });
129
+
130
+ wss.on('connection', (ws) => {
131
+ console.log('[gsd-reader] Client connected');
132
+
133
+ ws.on('close', () => {
134
+ console.log('[gsd-reader] Client disconnected');
135
+ });
136
+ });
137
+
138
+ function broadcastReload() {
139
+ let clientCount = 0;
140
+ wss.clients.forEach((client) => {
141
+ if (client.readyState === 1) { // WebSocket.OPEN
142
+ client.send('reload');
143
+ clientCount++;
144
+ }
145
+ });
146
+ if (clientCount > 0) {
147
+ console.log(`[gsd-reader] Notified ${clientCount} client(s)`);
148
+ }
149
+ }
150
+
151
+ // =============================================================================
152
+ // File Watcher (Chokidar)
153
+ // =============================================================================
154
+
155
+ // Check if worklog exists before starting
156
+ if (!fs.existsSync(WORKLOG_PATH)) {
157
+ console.error(`\n❌ WORK.md not found: ${WORKLOG_PATH}`);
158
+ console.error('\nUsage: npx @gsd-lite/reader [path-to-worklog] [--port=3000]');
159
+ console.error('\nExamples:');
160
+ console.error(' npx @gsd-lite/reader # Watch ./gsd-lite/WORK.md');
161
+ console.error(' npx @gsd-lite/reader ./my-project/WORK.md # Custom path');
162
+ process.exit(1);
163
+ }
164
+
165
+ // Watch the worklog file
166
+ const watcher = chokidar.watch(WORKLOG_PATH, {
167
+ persistent: true,
168
+ ignoreInitial: true,
169
+ awaitWriteFinish: {
170
+ stabilityThreshold: 100,
171
+ pollInterval: 50,
172
+ },
173
+ });
174
+
175
+ watcher.on('change', (filepath) => {
176
+ console.log(`[gsd-reader] ${path.basename(filepath)} changed`);
177
+ broadcastReload();
178
+ });
179
+
180
+ watcher.on('error', (error) => {
181
+ console.error('[gsd-reader] Watcher error:', error.message);
182
+ });
183
+
184
+ // =============================================================================
185
+ // Startup
186
+ // =============================================================================
187
+
188
+ server.listen(PORT, () => {
189
+ console.log('');
190
+ console.log('β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”');
191
+ console.log('β”‚ πŸ“– GSD-Lite Worklog Reader β”‚');
192
+ console.log('β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€');
193
+ console.log(`β”‚ Server: http://localhost:${PORT.toString().padEnd(25)}β”‚`);
194
+ console.log(`β”‚ Watching: ${path.basename(WORKLOG_PATH).padEnd(40)}β”‚`);
195
+ console.log('β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€');
196
+ console.log('β”‚ Press Ctrl+C to stop β”‚');
197
+ console.log('β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜');
198
+ console.log('');
199
+ console.log(`[gsd-reader] Full path: ${WORKLOG_PATH}`);
200
+ });
201
+
202
+ // Graceful shutdown
203
+ process.on('SIGINT', () => {
204
+ console.log('\n[gsd-reader] Shutting down...');
205
+ watcher.close();
206
+ wss.close();
207
+ server.close(() => {
208
+ console.log('[gsd-reader] Goodbye!');
209
+ process.exit(0);
210
+ });
211
+ });
212
+
213
+ process.on('SIGTERM', () => {
214
+ process.emit('SIGINT');
215
+ });
@@ -0,0 +1 @@
1
+ import{aU as L,bq as ln,aE as A,aS as P,aD as z,br as gn,bs as dn,bt as hn,bu as W,bv as pn,bl as An,bw as m,aV as N,a_ as U,b1 as T,bx as _n,aY as on,by as wn,bo as On,aF as V,bm as vn,bz as I}from"./mermaid.core-Bwyq-ixB.js";var Pn="[object Symbol]";function x(n){return typeof n=="symbol"||L(n)&&ln(n)==Pn}function yn(n,r){for(var e=-1,i=n==null?0:n.length,f=Array(i);++e<i;)f[e]=r(n[e],e,n);return f}var B=P?P.prototype:void 0,K=B?B.toString:void 0;function k(n){if(typeof n=="string")return n;if(A(n))return yn(n,k)+"";if(x(n))return K?K.call(n):"";var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function En(){}function bn(n,r){for(var e=-1,i=n==null?0:n.length;++e<i&&r(n[e],e,n)!==!1;);return n}function cn(n,r,e,i){for(var f=n.length,t=e+-1;++t<f;)if(r(n[t],t,n))return t;return-1}function Tn(n){return n!==n}function Rn(n,r,e){for(var i=e-1,f=n.length;++i<f;)if(n[i]===r)return i;return-1}function In(n,r,e){return r===r?Rn(n,r,e):cn(n,Tn,e)}function Sn(n,r){var e=n==null?0:n.length;return!!e&&In(n,r,0)>-1}function M(n){return z(n)?gn(n):dn(n)}var Ln=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,xn=/^\w*$/;function $(n,r){if(A(n))return!1;var e=typeof n;return e=="number"||e=="symbol"||e=="boolean"||n==null||x(n)?!0:xn.test(n)||!Ln.test(n)||r!=null&&n in Object(r)}var Mn=500;function $n(n){var r=hn(n,function(i){return e.size===Mn&&e.clear(),i}),e=r.cache;return r}var Cn=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Dn=/\\(\\)?/g,Fn=$n(function(n){var r=[];return n.charCodeAt(0)===46&&r.push(""),n.replace(Cn,function(e,i,f,t){r.push(f?t.replace(Dn,"$1"):i||e)}),r});function Gn(n){return n==null?"":k(n)}function j(n,r){return A(n)?n:$(n,r)?[n]:Fn(Gn(n))}function R(n){if(typeof n=="string"||x(n))return n;var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function nn(n,r){r=j(r,n);for(var e=0,i=r.length;n!=null&&e<i;)n=n[R(r[e++])];return e&&e==i?n:void 0}function mn(n,r,e){var i=n==null?void 0:nn(n,r);return i===void 0?e:i}function rn(n,r){for(var e=-1,i=r.length,f=n.length;++e<i;)n[f+e]=r[e];return n}var H=P?P.isConcatSpreadable:void 0;function Nn(n){return A(n)||W(n)||!!(H&&n&&n[H])}function Hr(n,r,e,i,f){var t=-1,s=n.length;for(e||(e=Nn),f||(f=[]);++t<s;){var u=n[t];e(u)?rn(f,u):i||(f[f.length]=u)}return f}function Un(n,r,e,i){var f=-1,t=n==null?0:n.length;for(i&&t&&(e=n[++f]);++f<t;)e=r(e,n[f],f,n);return e}function en(n,r){for(var e=-1,i=n==null?0:n.length,f=0,t=[];++e<i;){var s=n[e];r(s,e,n)&&(t[f++]=s)}return t}function Bn(){return[]}var Kn=Object.prototype,Hn=Kn.propertyIsEnumerable,q=Object.getOwnPropertySymbols,qn=q?function(n){return n==null?[]:(n=Object(n),en(q(n),function(r){return Hn.call(n,r)}))}:Bn;function Yn(n,r,e){var i=r(n);return A(n)?i:rn(i,e(n))}function Y(n){return Yn(n,M,qn)}var Zn="__lodash_hash_undefined__";function Xn(n){return this.__data__.set(n,Zn),this}function Jn(n){return this.__data__.has(n)}function y(n){var r=-1,e=n==null?0:n.length;for(this.__data__=new pn;++r<e;)this.add(n[r])}y.prototype.add=y.prototype.push=Xn;y.prototype.has=Jn;function Qn(n,r){for(var e=-1,i=n==null?0:n.length;++e<i;)if(r(n[e],e,n))return!0;return!1}function tn(n,r){return n.has(r)}var zn=1,Wn=2;function fn(n,r,e,i,f,t){var s=e&zn,u=n.length,a=r.length;if(u!=a&&!(s&&a>u))return!1;var h=t.get(n),g=t.get(r);if(h&&g)return h==r&&g==n;var l=-1,d=!0,o=e&Wn?new y:void 0;for(t.set(n,r),t.set(r,n);++l<u;){var p=n[l],_=r[l];if(i)var w=s?i(_,p,l,r,n,t):i(p,_,l,n,r,t);if(w!==void 0){if(w)continue;d=!1;break}if(o){if(!Qn(r,function(O,v){if(!tn(o,v)&&(p===O||f(p,O,e,i,t)))return o.push(v)})){d=!1;break}}else if(!(p===_||f(p,_,e,i,t))){d=!1;break}}return t.delete(n),t.delete(r),d}function Vn(n){var r=-1,e=Array(n.size);return n.forEach(function(i,f){e[++r]=[f,i]}),e}function C(n){var r=-1,e=Array(n.size);return n.forEach(function(i){e[++r]=i}),e}var kn=1,jn=2,nr="[object Boolean]",rr="[object Date]",er="[object Error]",ir="[object Map]",tr="[object Number]",fr="[object RegExp]",sr="[object Set]",ur="[object String]",ar="[object Symbol]",lr="[object ArrayBuffer]",gr="[object DataView]",Z=P?P.prototype:void 0,S=Z?Z.valueOf:void 0;function dr(n,r,e,i,f,t,s){switch(e){case gr:if(n.byteLength!=r.byteLength||n.byteOffset!=r.byteOffset)return!1;n=n.buffer,r=r.buffer;case lr:return!(n.byteLength!=r.byteLength||!t(new m(n),new m(r)));case nr:case rr:case tr:return An(+n,+r);case er:return n.name==r.name&&n.message==r.message;case fr:case ur:return n==r+"";case ir:var u=Vn;case sr:var a=i&kn;if(u||(u=C),n.size!=r.size&&!a)return!1;var h=s.get(n);if(h)return h==r;i|=jn,s.set(n,r);var g=fn(u(n),u(r),i,f,t,s);return s.delete(n),g;case ar:if(S)return S.call(n)==S.call(r)}return!1}var hr=1,pr=Object.prototype,Ar=pr.hasOwnProperty;function _r(n,r,e,i,f,t){var s=e&hr,u=Y(n),a=u.length,h=Y(r),g=h.length;if(a!=g&&!s)return!1;for(var l=a;l--;){var d=u[l];if(!(s?d in r:Ar.call(r,d)))return!1}var o=t.get(n),p=t.get(r);if(o&&p)return o==r&&p==n;var _=!0;t.set(n,r),t.set(r,n);for(var w=s;++l<a;){d=u[l];var O=n[d],v=r[d];if(i)var G=s?i(v,O,d,r,n,t):i(O,v,d,n,r,t);if(!(G===void 0?O===v||f(O,v,e,i,t):G)){_=!1;break}w||(w=d=="constructor")}if(_&&!w){var E=n.constructor,b=r.constructor;E!=b&&"constructor"in n&&"constructor"in r&&!(typeof E=="function"&&E instanceof E&&typeof b=="function"&&b instanceof b)&&(_=!1)}return t.delete(n),t.delete(r),_}var or=1,X="[object Arguments]",J="[object Array]",c="[object Object]",wr=Object.prototype,Q=wr.hasOwnProperty;function Or(n,r,e,i,f,t){var s=A(n),u=A(r),a=s?J:N(n),h=u?J:N(r);a=a==X?c:a,h=h==X?c:h;var g=a==c,l=h==c,d=a==h;if(d&&U(n)){if(!U(r))return!1;s=!0,g=!1}if(d&&!g)return t||(t=new T),s||_n(n)?fn(n,r,e,i,f,t):dr(n,r,a,e,i,f,t);if(!(e&or)){var o=g&&Q.call(n,"__wrapped__"),p=l&&Q.call(r,"__wrapped__");if(o||p){var _=o?n.value():n,w=p?r.value():r;return t||(t=new T),f(_,w,e,i,t)}}return d?(t||(t=new T),_r(n,r,e,i,f,t)):!1}function D(n,r,e,i,f){return n===r?!0:n==null||r==null||!L(n)&&!L(r)?n!==n&&r!==r:Or(n,r,e,i,D,f)}var vr=1,Pr=2;function yr(n,r,e,i){var f=e.length,t=f;if(n==null)return!t;for(n=Object(n);f--;){var s=e[f];if(s[2]?s[1]!==n[s[0]]:!(s[0]in n))return!1}for(;++f<t;){s=e[f];var u=s[0],a=n[u],h=s[1];if(s[2]){if(a===void 0&&!(u in n))return!1}else{var g=new T,l;if(!(l===void 0?D(h,a,vr|Pr,i,g):l))return!1}}return!0}function sn(n){return n===n&&!on(n)}function Er(n){for(var r=M(n),e=r.length;e--;){var i=r[e],f=n[i];r[e]=[i,f,sn(f)]}return r}function un(n,r){return function(e){return e==null?!1:e[n]===r&&(r!==void 0||n in Object(e))}}function br(n){var r=Er(n);return r.length==1&&r[0][2]?un(r[0][0],r[0][1]):function(e){return e===n||yr(e,n,r)}}function cr(n,r){return n!=null&&r in Object(n)}function Tr(n,r,e){r=j(r,n);for(var i=-1,f=r.length,t=!1;++i<f;){var s=R(r[i]);if(!(t=n!=null&&e(n,s)))break;n=n[s]}return t||++i!=f?t:(f=n==null?0:n.length,!!f&&wn(f)&&On(s,f)&&(A(n)||W(n)))}function Rr(n,r){return n!=null&&Tr(n,r,cr)}var Ir=1,Sr=2;function Lr(n,r){return $(n)&&sn(r)?un(R(n),r):function(e){var i=mn(e,n);return i===void 0&&i===r?Rr(e,n):D(r,i,Ir|Sr)}}function xr(n){return function(r){return r==null?void 0:r[n]}}function Mr(n){return function(r){return nn(r,n)}}function $r(n){return $(n)?xr(R(n)):Mr(n)}function an(n){return typeof n=="function"?n:n==null?V:typeof n=="object"?A(n)?Lr(n[0],n[1]):br(n):$r(n)}function Cr(n,r){return n&&vn(n,r,M)}function Dr(n,r){return function(e,i){if(e==null)return e;if(!z(e))return n(e,i);for(var f=e.length,t=-1,s=Object(e);++t<f&&i(s[t],t,s)!==!1;);return e}}var F=Dr(Cr);function Fr(n){return typeof n=="function"?n:V}function qr(n,r){var e=A(n)?bn:F;return e(n,Fr(r))}function Gr(n,r){var e=[];return F(n,function(i,f,t){r(i,f,t)&&e.push(i)}),e}function Yr(n,r){var e=A(n)?en:Gr;return e(n,an(r))}function mr(n,r,e,i,f){return f(n,function(t,s,u){e=i?(i=!1,t):r(e,t,s,u)}),e}function Zr(n,r,e){var i=A(n)?Un:mr,f=arguments.length<3;return i(n,an(r),e,f,F)}var Nr=1/0,Ur=I&&1/C(new I([,-0]))[1]==Nr?function(n){return new I(n)}:En,Br=200;function Xr(n,r,e){var i=-1,f=Sn,t=n.length,s=!0,u=[],a=u;if(t>=Br){var h=r?null:Ur(n);if(h)return C(h);s=!1,f=tn,a=new y}else a=r?[]:u;n:for(;++i<t;){var g=n[i],l=r?r(g):g;if(g=g!==0?g:0,s&&l===l){for(var d=a.length;d--;)if(a[d]===l)continue n;r&&a.push(l),u.push(g)}else f(a,l,e)||(a!==u&&a.push(l),u.push(g))}return u}export{F as a,Hr as b,an as c,yn as d,rn as e,Yn as f,qn as g,bn as h,x as i,Y as j,M as k,Xr as l,Yr as m,qr as n,cn as o,Fr as p,Cr as q,Zr as r,Bn as s,Tr as t,j as u,R as v,nn as w,Rr as x,Gn as y};
@@ -0,0 +1 @@
1
+ import{a0 as ln,a1 as an,a2 as H,a3 as q,a4 as B,a5 as un,a6 as y,a7 as tn,a8 as L,a9 as _,aa as rn,ab as o,ac as on,ad as sn,ae as fn}from"./mermaid.core-Bwyq-ixB.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,C,a){var O=I-l,i=D-h,n=C-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function W(l,h,I,D,v,A,C){var a=l-I,O=h-D,i=(C?A:-A)/L(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,F=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*L(on(0,T*T*R-P*P)),j=(P*g-m*S)/R,z=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=j-F,e=z-t,r=w-F,G=p-t;return x*x+e*e>r*r+G*G&&(j=w,z=p),{cx:j,cy:z,x01:-n,y01:-d,x11:j*(v/T-1),y11:z*(v/T-1)}}function hn(){var l=cn,h=yn,I=B(0),D=null,v=gn,A=dn,C=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,F=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(F>tn-y)a.moveTo(s*H(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*H(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=F,S=F,j=C.apply(this,arguments)/2,z=j>y&&(D?+D.apply(this,arguments):L(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if(z>y){var G=sn(z/u*q(j)),M=sn(z/s*q(j));(P-=G*2)>y?(G*=t?1:-1,R+=G,T-=G):(P=0,R=T=(f+c)/2),(S-=M*2)>y?(M*=t?1:-1,m+=M,g-=M):(S=0,m=g=(f+c)/2)}var J=s*H(m),K=s*q(m),N=u*H(T),Q=u*q(T);if(w>y){var U=s*H(g),V=s*q(g),X=u*H(R),Y=u*q(R),E;if(F<an)if(E=pn(J,K,X,Y,U,V,N,Q)){var Z=J-E[0],$=K-E[1],b=U-E[0],k=V-E[1],nn=1/q(fn((Z*b+$*k)/(L(Z*Z+$*$)*L(b*b+k*k)))/2),en=L(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=W(X,Y,J,K,s,x,t),r=W(U,V,N,Q,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(J,K),a.arc(0,0,s,m,g,!t)):a.moveTo(J,K),!(u>y)||!(P>y)?a.lineTo(N,Q):p>y?(e=W(N,Q,U,V,u,-p,t),r=W(J,K,X,Y,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-an/2;return[H(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:B(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:B(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:B(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:B(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:B(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:B(+n),i):A},i.padAngle=function(n){return arguments.length?(C=typeof n=="function"?n:B(+n),i):C},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};