@cristianormazabal/triton-core 0.1.17 → 0.1.19
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/diagrams/mermaid/architecture/gridPlacer.d.ts +36 -0
- package/dist/diagrams/mermaid/architecture/gridPlacer.d.ts.map +1 -0
- package/dist/diagrams/mermaid/architecture/gridPlacer.js +153 -0
- package/dist/diagrams/mermaid/architecture/gridPlacer.js.map +1 -0
- package/dist/diagrams/{triton → mermaid}/architecture/index.d.ts +1 -1
- package/dist/diagrams/mermaid/architecture/index.d.ts.map +1 -0
- package/dist/diagrams/{triton → mermaid}/architecture/index.js +2 -2
- package/dist/diagrams/mermaid/architecture/index.js.map +1 -0
- package/dist/diagrams/mermaid/architecture/ir.d.ts +55 -0
- package/dist/diagrams/mermaid/architecture/ir.d.ts.map +1 -0
- package/dist/diagrams/mermaid/architecture/ir.js.map +1 -0
- package/dist/diagrams/mermaid/architecture/layout.d.ts +27 -0
- package/dist/diagrams/mermaid/architecture/layout.d.ts.map +1 -0
- package/dist/diagrams/mermaid/architecture/layout.js +352 -0
- package/dist/diagrams/mermaid/architecture/layout.js.map +1 -0
- package/dist/diagrams/triton/ds/hashmap/hashmap.d.ts +9 -9
- package/dist/diagrams/triton/ds/hashmap/hashmap.d.ts.map +1 -1
- package/dist/diagrams/triton/ds/hashmap/hashmap.js +126 -28
- package/dist/diagrams/triton/ds/hashmap/hashmap.js.map +1 -1
- package/dist/frontend/index.js +1 -1
- package/dist/frontend/index.js.map +1 -1
- package/dist/index.js +933 -170
- package/dist/index.js.map +4 -4
- package/package.json +1 -1
- package/dist/diagrams/triton/architecture/index.d.ts.map +0 -1
- package/dist/diagrams/triton/architecture/index.js.map +0 -1
- package/dist/diagrams/triton/architecture/ir.d.ts +0 -29
- package/dist/diagrams/triton/architecture/ir.d.ts.map +0 -1
- package/dist/diagrams/triton/architecture/ir.js.map +0 -1
- package/dist/diagrams/triton/architecture/layout.d.ts +0 -11
- package/dist/diagrams/triton/architecture/layout.d.ts.map +0 -1
- package/dist/diagrams/triton/architecture/layout.js +0 -124
- package/dist/diagrams/triton/architecture/layout.js.map +0 -1
- /package/dist/diagrams/{triton → mermaid}/architecture/ir.js +0 -0
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file diagrams/architecture/layout.ts — Cloud architecture diagram.
|
|
3
|
+
*
|
|
4
|
+
* Phase C implementation — replaces Sugiyama layered layout with a
|
|
5
|
+
* direction-constrained BFS grid placer that honours L/R/T/B side semantics.
|
|
6
|
+
* All other rendering features from Phase B remain unchanged.
|
|
7
|
+
*
|
|
8
|
+
* Features:
|
|
9
|
+
* 1. Directional grid placement — BFS from directional edge constraints
|
|
10
|
+
* 2. Junctions — small 4-way split nodes; edges enter/leave on any side.
|
|
11
|
+
* 3. Arrowheads — driven by arrowLeft / arrowRight; axis-aligned markers.
|
|
12
|
+
* 4. {group} edges — port sits on the enclosing group boundary, not the service box.
|
|
13
|
+
* 5. Align — row/column constraints applied as post-grid position nudges.
|
|
14
|
+
* 6. Nested groups — parent groups visually contain child groups.
|
|
15
|
+
* 7. Iconify icons — prefix:name tokens resolved through LayoutOptions.icons;
|
|
16
|
+
* unresolvable tokens fall back to the built-in glyph.
|
|
17
|
+
*
|
|
18
|
+
* Deviations / limitations (disclosed):
|
|
19
|
+
* - Align constraints are applied as a post-BFS median-snap. Edge directions
|
|
20
|
+
* take precedence; align is a fixup for disconnected nodes or user overrides.
|
|
21
|
+
* - Iconify resolution requires the host to supply LayoutOptions.icons.
|
|
22
|
+
*/
|
|
23
|
+
import { pen } from '../../../scene/build.js';
|
|
24
|
+
import { applyOverlays } from '../../../overlay/apply.js';
|
|
25
|
+
import { categoricalHue } from '../../../palette/categorical.js';
|
|
26
|
+
import { directionalGridPlacer } from './gridPlacer.js';
|
|
27
|
+
import { orthogonalRouter } from '../../../routing/router.js';
|
|
28
|
+
import { rhu, rhuInt } from '../../../util/round.js';
|
|
29
|
+
import { parseIconRef, resolveIcon } from '../../../icons/resolver.js';
|
|
30
|
+
// ─── Marker IDs ──────────────────────────────────────────────────────────────
|
|
31
|
+
const ARROW_END_ID = 'arch-arrow-end'; // → points in path direction
|
|
32
|
+
const ARROW_START_ID = 'arch-arrow-start'; // ← points against path direction
|
|
33
|
+
// ─── Geometry helpers ─────────────────────────────────────────────────────────
|
|
34
|
+
function port(r, side) {
|
|
35
|
+
switch (side.toUpperCase()) {
|
|
36
|
+
case 'L': return { x: r.x, y: r.y + r.height / 2 };
|
|
37
|
+
case 'R': return { x: r.x + r.width, y: r.y + r.height / 2 };
|
|
38
|
+
case 'T': return { x: r.x + r.width / 2, y: r.y };
|
|
39
|
+
default: return { x: r.x + r.width / 2, y: r.y + r.height };
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function sideToDir(side) {
|
|
43
|
+
switch (side.toUpperCase()) {
|
|
44
|
+
case 'L': return 'W';
|
|
45
|
+
case 'R': return 'E';
|
|
46
|
+
case 'T': return 'N';
|
|
47
|
+
default: return 'S';
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// ─── Group sort (parent before child for back-to-front rendering) ─────────────
|
|
51
|
+
function groupsByDepth(groups) {
|
|
52
|
+
const result = [];
|
|
53
|
+
const added = new Set();
|
|
54
|
+
function add(g) {
|
|
55
|
+
if (added.has(g.id))
|
|
56
|
+
return;
|
|
57
|
+
if (g.parent) {
|
|
58
|
+
const par = groups.find(pg => pg.id === g.parent);
|
|
59
|
+
if (par)
|
|
60
|
+
add(par);
|
|
61
|
+
}
|
|
62
|
+
result.push(g);
|
|
63
|
+
added.add(g.id);
|
|
64
|
+
}
|
|
65
|
+
for (const g of groups)
|
|
66
|
+
add(g);
|
|
67
|
+
return result;
|
|
68
|
+
}
|
|
69
|
+
// ─── Layout entry point ───────────────────────────────────────────────────────
|
|
70
|
+
export function layoutArchitecture(ir, theme, options) {
|
|
71
|
+
const { palette, typography, spacing } = theme;
|
|
72
|
+
const p = pen(theme);
|
|
73
|
+
const margin = spacing.diagramMargin;
|
|
74
|
+
const font = typography.baseFontSize;
|
|
75
|
+
const iconPacks = options?.icons;
|
|
76
|
+
// ── Sizes ─────────────────────────────────────────────────────────────────
|
|
77
|
+
const svcW = 130, svcH = 56;
|
|
78
|
+
const jctW = 16, jctH = 16; // junctions are small crosshair nodes
|
|
79
|
+
// ── Node sizes (services vs junctions) ───────────────────────────────────
|
|
80
|
+
const nodeSizes = new Map();
|
|
81
|
+
for (const s of ir.services)
|
|
82
|
+
nodeSizes.set(s.id, { width: svcW, height: svcH });
|
|
83
|
+
for (const j of ir.junctions)
|
|
84
|
+
nodeSizes.set(j.id, { width: jctW, height: jctH });
|
|
85
|
+
// ── Directional grid placement ────────────────────────────────────────────
|
|
86
|
+
const colGap = 90, rowGap = 44;
|
|
87
|
+
const gridCells = directionalGridPlacer([...ir.services, ...ir.junctions], ir.edges);
|
|
88
|
+
// Convert grid cells → pixel coords; mutable for align post-processing.
|
|
89
|
+
const positions = new Map();
|
|
90
|
+
for (const [id, cell] of gridCells) {
|
|
91
|
+
positions.set(id, {
|
|
92
|
+
x: cell.col * (svcW + colGap) + margin,
|
|
93
|
+
y: cell.row * (svcH + rowGap) + margin,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
// ── Apply align constraints (approximated as median-snap) ─────────────────
|
|
97
|
+
for (const align of ir.aligns) {
|
|
98
|
+
const coords = align.members
|
|
99
|
+
.map(id => positions.get(id))
|
|
100
|
+
.filter((pos) => !!pos);
|
|
101
|
+
if (coords.length < 2)
|
|
102
|
+
continue;
|
|
103
|
+
if (align.axis === 'row') {
|
|
104
|
+
// Pin all members to the median y of the group.
|
|
105
|
+
const ys = coords.map(c => c.y).sort((a, b) => a - b);
|
|
106
|
+
const medY = ys[Math.floor(ys.length / 2)];
|
|
107
|
+
for (const id of align.members) {
|
|
108
|
+
const pos = positions.get(id);
|
|
109
|
+
if (pos)
|
|
110
|
+
pos.y = medY;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
// column — pin to median x.
|
|
115
|
+
const xs = coords.map(c => c.x).sort((a, b) => a - b);
|
|
116
|
+
const medX = xs[Math.floor(xs.length / 2)];
|
|
117
|
+
for (const id of align.members) {
|
|
118
|
+
const pos = positions.get(id);
|
|
119
|
+
if (pos)
|
|
120
|
+
pos.x = medX;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// ── rectOf: adjusted position + node size + yOffset ─────────────────────
|
|
125
|
+
const titleH = ir.metadata.title ? typography.titleFontSize + 14 : 0;
|
|
126
|
+
const yOff = titleH;
|
|
127
|
+
const rectOf = (id) => {
|
|
128
|
+
const pos = positions.get(id);
|
|
129
|
+
const sz = nodeSizes.get(id);
|
|
130
|
+
if (!pos || !sz)
|
|
131
|
+
return undefined;
|
|
132
|
+
return { x: pos.x, y: pos.y + yOff, width: sz.width, height: sz.height };
|
|
133
|
+
};
|
|
134
|
+
// ── Compute group rects (memoised, recursive for nested groups) ───────────
|
|
135
|
+
const groupRectCache = new Map();
|
|
136
|
+
const computeGroupRect = (gId) => {
|
|
137
|
+
if (groupRectCache.has(gId))
|
|
138
|
+
return groupRectCache.get(gId);
|
|
139
|
+
const pad = 20;
|
|
140
|
+
const memberRects = [
|
|
141
|
+
...ir.services.filter(s => s.group === gId).map(s => rectOf(s.id)).filter((r) => !!r),
|
|
142
|
+
...ir.junctions.filter(j => j.group === gId).map(j => rectOf(j.id)).filter((r) => !!r),
|
|
143
|
+
...ir.groups.filter(g => g.parent === gId).map(g => computeGroupRect(g.id)).filter((r) => !!r),
|
|
144
|
+
];
|
|
145
|
+
if (memberRects.length === 0)
|
|
146
|
+
return undefined;
|
|
147
|
+
const minX = Math.min(...memberRects.map(r => r.x)) - pad;
|
|
148
|
+
const minY = Math.min(...memberRects.map(r => r.y)) - pad - 14;
|
|
149
|
+
const maxX = Math.max(...memberRects.map(r => r.x + r.width)) + pad;
|
|
150
|
+
const maxY = Math.max(...memberRects.map(r => r.y + r.height)) + pad;
|
|
151
|
+
const rect = { x: minX, y: minY, width: maxX - minX, height: maxY - minY };
|
|
152
|
+
groupRectCache.set(gId, rect);
|
|
153
|
+
return rect;
|
|
154
|
+
};
|
|
155
|
+
// Prime the cache for all groups.
|
|
156
|
+
for (const g of ir.groups)
|
|
157
|
+
computeGroupRect(g.id);
|
|
158
|
+
// ── Build element list ────────────────────────────────────────────────────
|
|
159
|
+
const elements = [];
|
|
160
|
+
// Title
|
|
161
|
+
if (ir.metadata.title) {
|
|
162
|
+
elements.push(p.text(String(ir.metadata.title), margin, margin + typography.titleFontSize, typography.titleFontSize, palette.text, { weight: 'bold' }));
|
|
163
|
+
}
|
|
164
|
+
// ── Group boxes (outermost first so children render on top) ──────────────
|
|
165
|
+
const orderedGroups = groupsByDepth(ir.groups);
|
|
166
|
+
orderedGroups.forEach((g, gi) => {
|
|
167
|
+
const r = computeGroupRect(g.id);
|
|
168
|
+
if (!r)
|
|
169
|
+
return;
|
|
170
|
+
const hue = categoricalHue(gi);
|
|
171
|
+
elements.push(p.rect({ x: rhu(r.x), y: rhu(r.y), width: rhu(r.width), height: rhu(r.height) }, hue + '14', hue, 1.4, { rx: 10 }));
|
|
172
|
+
elements.push(p.text(g.label, rhu(r.x + 12), rhu(r.y + 16), typography.smallFontSize, hue, { weight: 'bold' }));
|
|
173
|
+
});
|
|
174
|
+
// ── Flat box list for orthogonalRouter obstacle detection ────────────────
|
|
175
|
+
const allBoxes = [];
|
|
176
|
+
for (const [id, pos] of positions) {
|
|
177
|
+
const sz = nodeSizes.get(id);
|
|
178
|
+
if (sz)
|
|
179
|
+
allBoxes.push({ id, x: pos.x, y: pos.y, width: sz.width, height: sz.height });
|
|
180
|
+
}
|
|
181
|
+
for (const e of ir.edges) {
|
|
182
|
+
// Resolve from-port — use group boundary when fromGroup=true.
|
|
183
|
+
let fromRect = rectOf(e.from);
|
|
184
|
+
if (!fromRect)
|
|
185
|
+
continue;
|
|
186
|
+
if (e.fromGroup) {
|
|
187
|
+
const svc = ir.services.find(s => s.id === e.from);
|
|
188
|
+
if (svc?.group) {
|
|
189
|
+
const gr = computeGroupRect(svc.group);
|
|
190
|
+
if (gr)
|
|
191
|
+
fromRect = gr;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// Resolve to-port — use group boundary when toGroup=true.
|
|
195
|
+
let toRect = rectOf(e.to);
|
|
196
|
+
if (!toRect)
|
|
197
|
+
continue;
|
|
198
|
+
if (e.toGroup) {
|
|
199
|
+
const svc = ir.services.find(s => s.id === e.to);
|
|
200
|
+
if (svc?.group) {
|
|
201
|
+
const gr = computeGroupRect(svc.group);
|
|
202
|
+
if (gr)
|
|
203
|
+
toRect = gr;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
const pa = port(fromRect, e.fromSide);
|
|
207
|
+
const pb = port(toRect, e.toSide);
|
|
208
|
+
const fromDir = sideToDir(e.fromSide);
|
|
209
|
+
const toDir = sideToDir(e.toSide);
|
|
210
|
+
const obstacles = allBoxes
|
|
211
|
+
.filter(bx => bx.id !== e.from && bx.id !== e.to)
|
|
212
|
+
.map(bx => ({ x: bx.x, y: bx.y + yOff, width: bx.width, height: bx.height }));
|
|
213
|
+
const route = orthogonalRouter.route({
|
|
214
|
+
from: pa, to: pb, style: 'orthogonal',
|
|
215
|
+
obstacles, padding: 10,
|
|
216
|
+
fromDir, toDir,
|
|
217
|
+
});
|
|
218
|
+
// Drive arrowhead markers from arrowLeft / arrowRight.
|
|
219
|
+
const pathOpts = {};
|
|
220
|
+
if (e.arrowRight)
|
|
221
|
+
pathOpts.markerEnd = ARROW_END_ID;
|
|
222
|
+
if (e.arrowLeft)
|
|
223
|
+
pathOpts.markerStart = ARROW_START_ID;
|
|
224
|
+
elements.push(p.path(route.path, palette.primary, 1.6, pathOpts));
|
|
225
|
+
}
|
|
226
|
+
// ── Service nodes ─────────────────────────────────────────────────────────
|
|
227
|
+
const warnedIcons = new Set();
|
|
228
|
+
ir.services.forEach((s, i) => {
|
|
229
|
+
const r = rectOf(s.id);
|
|
230
|
+
if (!r)
|
|
231
|
+
return;
|
|
232
|
+
const hue = categoricalHue(i);
|
|
233
|
+
elements.push(p.rect({ x: rhu(r.x), y: rhu(r.y), width: rhu(r.width), height: rhu(r.height) }, palette.surface, palette.border, 1.4, { rx: 8 }));
|
|
234
|
+
elements.push(p.rect({ x: rhu(r.x), y: rhu(r.y), width: rhu(r.width), height: 8 }, hue, hue, 0, { rx: 4 }));
|
|
235
|
+
// Icon: try iconify resolution first, fall back to built-in glyph.
|
|
236
|
+
const iconElems = resolveIconElems(p, s.icon, r.x + r.width / 2, r.y + 24, hue, palette, iconPacks, warnedIcons);
|
|
237
|
+
elements.push(...iconElems);
|
|
238
|
+
elements.push(p.text(s.label, rhuInt(r.x + r.width / 2), rhu(r.y + r.height - 9), font, palette.text, { weight: 'bold', anchor: 'middle' }));
|
|
239
|
+
});
|
|
240
|
+
// ── Junction nodes (4-way crosshair dot) ─────────────────────────────────
|
|
241
|
+
ir.junctions.forEach(j => {
|
|
242
|
+
const r = rectOf(j.id);
|
|
243
|
+
if (!r)
|
|
244
|
+
return;
|
|
245
|
+
const cx = rhu(r.x + r.width / 2);
|
|
246
|
+
const cy = rhu(r.y + r.height / 2);
|
|
247
|
+
const R = 4; // outer crosshair half-length
|
|
248
|
+
// Central filled circle
|
|
249
|
+
elements.push(p.circle({ x: cx, y: cy }, R, palette.primary, palette.primary, 0));
|
|
250
|
+
// Four short lines extending to the sides (visual affordance for 4-way)
|
|
251
|
+
elements.push(p.path(`M ${rhu(cx - R)} ${cy} L ${rhu(cx + R)} ${cy} M ${cx} ${rhu(cy - R)} L ${cx} ${rhu(cy + R)}`, palette.primary, 1.6));
|
|
252
|
+
});
|
|
253
|
+
// ── Compute canvas bounds ─────────────────────────────────────────────────
|
|
254
|
+
const allNodeRects = [
|
|
255
|
+
...ir.services.map(s => rectOf(s.id)).filter((r) => !!r),
|
|
256
|
+
...ir.junctions.map(j => rectOf(j.id)).filter((r) => !!r),
|
|
257
|
+
];
|
|
258
|
+
// Also include group rects so nested group labels aren't clipped.
|
|
259
|
+
const allGroupRects = [...groupRectCache.values()];
|
|
260
|
+
const allRects = [...allNodeRects, ...allGroupRects];
|
|
261
|
+
if (allRects.length === 0) {
|
|
262
|
+
// Empty diagram — minimal canvas.
|
|
263
|
+
const scene = applyOverlays({ viewBox: { x: 0, y: 0, width: 200, height: 100 }, background: palette.background, elements, defs: [] }, ir.overlays, theme);
|
|
264
|
+
return { scene, anchors: {} };
|
|
265
|
+
}
|
|
266
|
+
const totalW = rhuInt(Math.max(...allRects.map(r => r.x + r.width)) + margin + 26);
|
|
267
|
+
const totalH = rhuInt(Math.max(...allRects.map(r => r.y + r.height)) + margin + 26);
|
|
268
|
+
// Expand viewBox upward/leftward to accommodate group boxes that extend above/left of origin.
|
|
269
|
+
const vbX = rhuInt(Math.min(0, ...allRects.map(r => r.x)) - margin);
|
|
270
|
+
const vbY = rhuInt(Math.min(0, ...allRects.map(r => r.y)) - margin);
|
|
271
|
+
const defs = [
|
|
272
|
+
`<marker id="${ARROW_END_ID}" markerWidth="10" markerHeight="8" refX="9" refY="4" orient="auto">` +
|
|
273
|
+
`<polygon points="0 0, 10 4, 0 8" fill="${palette.primary}" /></marker>`,
|
|
274
|
+
`<marker id="${ARROW_START_ID}" markerWidth="10" markerHeight="8" refX="1" refY="4" orient="auto-start-reverse">` +
|
|
275
|
+
`<polygon points="0 0, 10 4, 0 8" fill="${palette.primary}" /></marker>`,
|
|
276
|
+
];
|
|
277
|
+
const scene = applyOverlays({
|
|
278
|
+
viewBox: { x: vbX, y: vbY, width: totalW - vbX, height: totalH - vbY },
|
|
279
|
+
background: palette.background,
|
|
280
|
+
elements,
|
|
281
|
+
defs,
|
|
282
|
+
}, ir.overlays, theme);
|
|
283
|
+
return { scene, anchors: {} };
|
|
284
|
+
}
|
|
285
|
+
// ─── Icon resolution (Feature 6) ──────────────────────────────────────────────
|
|
286
|
+
/**
|
|
287
|
+
* Attempt to resolve an icon token as a prefixed iconify reference (prefix:name).
|
|
288
|
+
* Falls back to the built-in line-art glyph when:
|
|
289
|
+
* - the token has no colon (it's a simple glyph hint like "server"),
|
|
290
|
+
* - no icon pack map was provided,
|
|
291
|
+
* - parseIconRef or resolveIcon fails.
|
|
292
|
+
* Emits console.warn once per unresolvable prefixed token.
|
|
293
|
+
*/
|
|
294
|
+
function resolveIconElems(p, icon, cx, cy, hue, palette, iconPacks, warnedIcons) {
|
|
295
|
+
// Only attempt iconify resolution when there is a colon separator.
|
|
296
|
+
if (icon.includes(':') && iconPacks) {
|
|
297
|
+
const ref = parseIconRef(icon);
|
|
298
|
+
if (ref.ok) {
|
|
299
|
+
const resolved = resolveIcon(ref.value, iconPacks);
|
|
300
|
+
if (resolved.ok) {
|
|
301
|
+
// Center the icon in a 24×24 box at (cx, cy).
|
|
302
|
+
const size = 24;
|
|
303
|
+
return [p.icon(resolved.value, rhu(cx - size / 2), rhu(cy - size / 2), size, { color: hue })];
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
// Resolution failed — warn once.
|
|
307
|
+
if (!warnedIcons.has(icon)) {
|
|
308
|
+
warnedIcons.add(icon);
|
|
309
|
+
console.warn(`[architecture] icon "${icon}" could not be resolved — falling back to glyph.`);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
else if (icon.includes(':') && !iconPacks) {
|
|
313
|
+
// Prefixed token but no packs loaded — warn once.
|
|
314
|
+
if (!warnedIcons.has(icon)) {
|
|
315
|
+
warnedIcons.add(icon);
|
|
316
|
+
console.warn(`[architecture] icon "${icon}" is an iconify token but no icon packs were loaded.`);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
// Built-in line-art glyph fallback.
|
|
320
|
+
return iconGlyph(p, icon, cx, cy, hue, palette);
|
|
321
|
+
}
|
|
322
|
+
// ─── Built-in line-art glyphs ─────────────────────────────────────────────────
|
|
323
|
+
/** A small line glyph for a service icon name (server/database/cloud/internet/disk). */
|
|
324
|
+
function iconGlyph(p, icon, cx, cy, hue, palette) {
|
|
325
|
+
const name = icon.toLowerCase();
|
|
326
|
+
const out = [];
|
|
327
|
+
const stroke = hue;
|
|
328
|
+
if (name.includes('server') || name.includes('compute')) {
|
|
329
|
+
for (let i = 0; i < 3; i++)
|
|
330
|
+
out.push(p.rect({ x: rhu(cx - 10), y: rhu(cy - 9 + i * 7), width: 20, height: 5 }, palette.surface, stroke, 1.3, { rx: 1 }));
|
|
331
|
+
}
|
|
332
|
+
else if (name.includes('database') || name.includes('db') || name.includes('datastore') || name.includes('storage') || name.includes('disk')) {
|
|
333
|
+
out.push(p.rect({ x: rhu(cx - 9), y: rhu(cy - 9), width: 18, height: 18 }, palette.surface, stroke, 1.3, { rx: 5 }));
|
|
334
|
+
out.push(p.path(`M ${rhu(cx - 9)} ${rhu(cy - 3)} Q ${rhu(cx)} ${rhu(cy + 1)}, ${rhu(cx + 9)} ${rhu(cy - 3)}`, stroke, 1.3));
|
|
335
|
+
}
|
|
336
|
+
else if (name.includes('cloud')) {
|
|
337
|
+
out.push(p.circle({ x: rhu(cx - 6), y: rhu(cy + 2) }, 6, palette.surface, stroke, 1.3));
|
|
338
|
+
out.push(p.circle({ x: rhu(cx + 6), y: rhu(cy + 2) }, 6, palette.surface, stroke, 1.3));
|
|
339
|
+
out.push(p.circle({ x: rhu(cx), y: rhu(cy - 3) }, 7, palette.surface, stroke, 1.3));
|
|
340
|
+
out.push(p.rect({ x: rhu(cx - 10), y: rhu(cy + 2), width: 20, height: 6 }, palette.surface, palette.surface, 0));
|
|
341
|
+
}
|
|
342
|
+
else if (name.includes('internet') || name.includes('globe') || name.includes('web') || name.includes('client')) {
|
|
343
|
+
out.push(p.circle({ x: rhu(cx), y: rhu(cy) }, 9, palette.surface, stroke, 1.3));
|
|
344
|
+
out.push(p.path(`M ${rhu(cx)} ${rhu(cy - 9)} L ${rhu(cx)} ${rhu(cy + 9)} M ${rhu(cx - 9)} ${rhu(cy)} L ${rhu(cx + 9)} ${rhu(cy)}`, stroke, 1));
|
|
345
|
+
out.push(p.path(`M ${rhu(cx - 9)} ${rhu(cy)} Q ${rhu(cx)} ${rhu(cy - 11)}, ${rhu(cx + 9)} ${rhu(cy)} Q ${rhu(cx)} ${rhu(cy + 11)}, ${rhu(cx - 9)} ${rhu(cy)}`, stroke, 1));
|
|
346
|
+
}
|
|
347
|
+
else {
|
|
348
|
+
out.push(p.rect({ x: rhu(cx - 9), y: rhu(cy - 9), width: 18, height: 18 }, palette.surface, stroke, 1.3, { rx: 4 }));
|
|
349
|
+
}
|
|
350
|
+
return out;
|
|
351
|
+
}
|
|
352
|
+
//# sourceMappingURL=layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../../../../../src/diagrams/mermaid/architecture/layout.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file diagrams/ds/hashmap/hashmap.ts — Hash map with separate chaining.
|
|
3
3
|
*
|
|
4
|
-
* A vertical strip of buckets
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* A vertical strip of buckets. Each non-empty bucket points right to a chain
|
|
5
|
+
* of key→value entries (a singly linked list), reusing the slot/pointer
|
|
6
|
+
* kernel idiom from the linked-list struct. Buckets can be numbered or labeled
|
|
7
|
+
* with arbitrary strings, and empty buckets show their configured label.
|
|
8
8
|
*
|
|
9
9
|
* Value-driven mini-syntax:
|
|
10
10
|
* hashmap
|
|
11
11
|
* title users
|
|
12
|
-
* buckets
|
|
13
|
-
* bucket
|
|
14
|
-
* bucket
|
|
15
|
-
* bucket 4: dave->4
|
|
12
|
+
* buckets name, email, phone
|
|
13
|
+
* bucket name: alice->1, bob->2 // two chained entries
|
|
14
|
+
* bucket phone: carol->3
|
|
16
15
|
*
|
|
17
16
|
* Entry separators: `,` between entries; `->`, `=>`, `:` or `=` between
|
|
18
17
|
* key and value.
|
|
@@ -23,12 +22,13 @@ export interface HashEntry {
|
|
|
23
22
|
value: string;
|
|
24
23
|
}
|
|
25
24
|
export interface HashChain {
|
|
26
|
-
index: number;
|
|
25
|
+
index: number | string;
|
|
27
26
|
entries: HashEntry[];
|
|
28
27
|
}
|
|
29
28
|
export interface HashmapDoc {
|
|
30
29
|
title?: string;
|
|
31
30
|
buckets: number;
|
|
31
|
+
bucketLabels: string[];
|
|
32
32
|
chains: HashChain[];
|
|
33
33
|
}
|
|
34
34
|
export declare function layoutHashmap(doc: HashmapDoc, theme: ResolvedTheme): LayoutResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hashmap.d.ts","sourceRoot":"","sources":["../../../../../../../src/diagrams/triton/ds/hashmap/hashmap.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"hashmap.d.ts","sourceRoot":"","sources":["../../../../../../../src/diagrams/triton/ds/hashmap/hashmap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EACV,aAAa,EAAE,aAAa,EAAE,YAAY,EAC3C,MAAM,gCAAgC,CAAC;AAMxC,MAAM,WAAW,SAAS;IAAG,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;CAAE;AAC1D,MAAM,WAAW,SAAS;IAAG,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,OAAO,EAAE,SAAS,EAAE,CAAC;CAAE;AAE5E,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAqID,wBAAgB,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,GAAG,YAAY,CAkEjF;AAED,eAAO,MAAM,OAAO,EAAE,aAAa,CAAC,UAAU,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAUtG,CAAC"}
|