kymostudio 0.1.0 → 0.2.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.
@@ -0,0 +1,228 @@
1
+ /**
2
+ * BPMN 2.0 XML importer — turns a standard `.bpmn` file (Camunda Modeler,
3
+ * bpmn.io, Signavio, …) into a fully-resolved {@link Diagram} that
4
+ * {@link renderSVG} can draw. Geometry comes from the file's Diagram-
5
+ * Interchange section (`BPMNShape`/`dc:Bounds`, `BPMNEdge`/`di:waypoint`),
6
+ * so no layout pass is needed.
7
+ *
8
+ * Equivalent to the Python `from_bpmn.py`; element types map to `bpmn-*`
9
+ * shapes (drawn by `bpmn-shapes.ts`) or, for pools / lanes / expanded
10
+ * sub-processes, to regions.
11
+ */
12
+ import { makeComponent, makeDiagram, makeEdge, makeRegion, } from "./model.js";
13
+ import { iterAll, parseXml } from "./xml.js";
14
+ const MARGIN = 30;
15
+ const EVENT_SHAPE = {
16
+ startEvent: "bpmn-start",
17
+ endEvent: "bpmn-end",
18
+ intermediateCatchEvent: "bpmn-intermediate",
19
+ intermediateThrowEvent: "bpmn-intermediate",
20
+ boundaryEvent: "bpmn-boundary",
21
+ };
22
+ const EVENT_DEF = {
23
+ messageEventDefinition: "message",
24
+ timerEventDefinition: "timer",
25
+ errorEventDefinition: "error",
26
+ signalEventDefinition: "signal",
27
+ terminateEventDefinition: "terminate",
28
+ escalationEventDefinition: "escalation",
29
+ conditionalEventDefinition: "conditional",
30
+ linkEventDefinition: "link",
31
+ compensateEventDefinition: "compensation",
32
+ cancelEventDefinition: "",
33
+ };
34
+ const TASK_MARKER = {
35
+ task: "", userTask: "user", serviceTask: "service", scriptTask: "script",
36
+ sendTask: "send", receiveTask: "receive", manualTask: "manual",
37
+ businessRuleTask: "rule", callActivity: "",
38
+ };
39
+ const GATEWAY_MARKER = {
40
+ exclusiveGateway: "exclusive", parallelGateway: "parallel",
41
+ inclusiveGateway: "inclusive", eventBasedGateway: "event",
42
+ complexGateway: "complex",
43
+ };
44
+ const SUBPROCESS_TAGS = new Set(["subProcess", "transaction", "adHocSubProcess"]);
45
+ const num = (v) => (v ? parseFloat(v) : 0);
46
+ function bounds(el) {
47
+ for (const ch of el.children) {
48
+ if (ch.tag === "Bounds") {
49
+ return [num(ch.attrs.x), num(ch.attrs.y), num(ch.attrs.width), num(ch.attrs.height)];
50
+ }
51
+ }
52
+ return null;
53
+ }
54
+ function labelCenter(el) {
55
+ for (const ch of el.children) {
56
+ if (ch.tag === "BPMNLabel") {
57
+ const b = bounds(ch);
58
+ if (b)
59
+ return [b[0] + b[2] / 2, b[1] + b[3] / 2];
60
+ }
61
+ }
62
+ return null;
63
+ }
64
+ function eventMarker(el) {
65
+ for (const ch of el.children) {
66
+ const m = EVENT_DEF[ch.tag];
67
+ if (m !== undefined)
68
+ return m;
69
+ }
70
+ return "";
71
+ }
72
+ function annotationText(el) {
73
+ for (const ch of el.children)
74
+ if (ch.tag === "text")
75
+ return ch.text.trim();
76
+ return "";
77
+ }
78
+ /** (shape, marker) for a Component, or null when the element is a Region. */
79
+ function classifyNode(tag, el, di) {
80
+ if (tag in EVENT_SHAPE)
81
+ return [EVENT_SHAPE[tag], eventMarker(el)];
82
+ if (tag in TASK_MARKER)
83
+ return ["bpmn-task", TASK_MARKER[tag]];
84
+ if (tag in GATEWAY_MARKER) {
85
+ let marker = GATEWAY_MARKER[tag];
86
+ // exclusive X only when DI opts in (bpmn.io default leaves it plain)
87
+ if (tag === "exclusiveGateway" && di.attrs.isMarkerVisible !== "true")
88
+ marker = "";
89
+ return ["bpmn-gateway", marker];
90
+ }
91
+ if (tag === "dataObjectReference" || tag === "dataInput" || tag === "dataOutput")
92
+ return ["bpmn-data-object", ""];
93
+ if (tag === "dataStoreReference")
94
+ return ["bpmn-data-store", ""];
95
+ if (tag === "textAnnotation")
96
+ return ["bpmn-annotation", ""];
97
+ if (SUBPROCESS_TAGS.has(tag)) {
98
+ const b = bounds(di);
99
+ const exp = di.attrs.isExpanded;
100
+ const expanded = exp === "true" || (exp === undefined && b[2] > 130 && b[3] > 90);
101
+ if (expanded)
102
+ return null; // → Region
103
+ return ["bpmn-subprocess", ""];
104
+ }
105
+ return null;
106
+ }
107
+ function flowKind(tag, el, byId) {
108
+ if (tag === "messageFlow")
109
+ return "message";
110
+ if (tag === "association" || tag === "dataInputAssociation" || tag === "dataOutputAssociation")
111
+ return "association";
112
+ if (tag === "sequenceFlow" && el) {
113
+ const src = byId.get(el.attrs.sourceRef ?? "");
114
+ if (src && src.attrs.default === el.attrs.id)
115
+ return "default";
116
+ const srcIsGateway = src ? src.tag.endsWith("Gateway") : false;
117
+ if (!srcIsGateway && el.children.some((c) => c.tag === "conditionExpression"))
118
+ return "conditional";
119
+ }
120
+ return "sequence";
121
+ }
122
+ /** Parse BPMN 2.0 XML into a resolved Diagram. */
123
+ export function parseBpmn(xmlText) {
124
+ const root = parseXml(xmlText);
125
+ const byId = new Map();
126
+ const diShapes = [];
127
+ const diEdges = [];
128
+ for (const el of iterAll(root)) {
129
+ const id = el.attrs.id;
130
+ if (id && !byId.has(id))
131
+ byId.set(id, el);
132
+ if (el.tag === "BPMNShape")
133
+ diShapes.push(el);
134
+ else if (el.tag === "BPMNEdge")
135
+ diEdges.push(el);
136
+ }
137
+ const components = [];
138
+ const regions = [];
139
+ const edges = [];
140
+ const xs = [];
141
+ const ys = [];
142
+ const track = (x, y, w = 0, h = 0) => { xs.push(x, x + w); ys.push(y, y + h); };
143
+ // ── shapes → components / regions ───────────────────────────────────
144
+ for (const shape of diShapes) {
145
+ const ref = shape.attrs.bpmnElement;
146
+ const el = ref ? byId.get(ref) : undefined;
147
+ const b = bounds(shape);
148
+ if (!el || !b)
149
+ continue;
150
+ const [x, y, w, h] = b;
151
+ track(x, y, w, h);
152
+ const tag = el.tag;
153
+ const name = (el.attrs.name ?? "").trim();
154
+ const bnd = [Math.round(x), Math.round(y), Math.round(w), Math.round(h)];
155
+ if (tag === "participant") {
156
+ regions.push(makeRegion({ id: ref, label: name, bounds: bnd, style: "pool" }));
157
+ continue;
158
+ }
159
+ if (tag === "lane") {
160
+ regions.push(makeRegion({ id: ref, label: name, bounds: bnd, style: "lane" }));
161
+ continue;
162
+ }
163
+ if (tag === "group") {
164
+ regions.push(makeRegion({ id: ref, label: name, bounds: bnd, style: "outer" }));
165
+ continue;
166
+ }
167
+ const cls = classifyNode(tag, el, shape);
168
+ if (cls === null && SUBPROCESS_TAGS.has(tag)) {
169
+ regions.push(makeRegion({ id: ref, label: name, bounds: bnd, style: "inner", labelPosition: "inside" }));
170
+ continue;
171
+ }
172
+ if (cls === null)
173
+ continue;
174
+ const [cshape, marker] = cls;
175
+ components.push(makeComponent({
176
+ id: ref, name: tag === "textAnnotation" ? annotationText(el) : name,
177
+ icon: marker, shape: cshape, accent: "blue",
178
+ pos: [Math.round(x + w / 2), Math.round(y + h / 2)],
179
+ size: [Math.round(w), Math.round(h)],
180
+ }));
181
+ }
182
+ // ── edges → flows ───────────────────────────────────────────────────
183
+ for (const de of diEdges) {
184
+ const ref = de.attrs.bpmnElement;
185
+ const el = ref ? byId.get(ref) : undefined;
186
+ const wps = de.children
187
+ .filter((c) => c.tag === "waypoint")
188
+ .map((wp) => [Math.round(num(wp.attrs.x)), Math.round(num(wp.attrs.y))]);
189
+ if (wps.length < 2)
190
+ continue;
191
+ for (const [px, py] of wps)
192
+ track(px, py);
193
+ const tag = el ? el.tag : "sequenceFlow";
194
+ const lc = labelCenter(de);
195
+ edges.push(makeEdge({
196
+ src: (el?.attrs.sourceRef ?? ""), dst: (el?.attrs.targetRef ?? ""),
197
+ label: (el?.attrs.name ?? "").trim(), points: wps, bpmnFlow: flowKind(tag, el, byId),
198
+ labelPos: lc ? [Math.round(lc[0]), Math.round(lc[1])] : null,
199
+ }));
200
+ }
201
+ // ── normalise into a tidy top-left-anchored canvas ──────────────────
202
+ if (xs.length === 0) {
203
+ xs.push(0);
204
+ ys.push(0);
205
+ }
206
+ const minX = Math.min(...xs), minY = Math.min(...ys);
207
+ const dx = Math.round(MARGIN - minX), dy = Math.round(MARGIN - minY);
208
+ const width = Math.round(Math.max(...xs) - minX + 2 * MARGIN);
209
+ const height = Math.round(Math.max(...ys) - minY + 2 * MARGIN);
210
+ for (const c of components)
211
+ c.pos = [c.pos[0] + dx, c.pos[1] + dy];
212
+ for (const r of regions) {
213
+ const [bx, by, bw, bh] = r.bounds;
214
+ r.bounds = [bx + dx, by + dy, bw, bh];
215
+ }
216
+ for (const e of edges) {
217
+ e.points = (e.points ?? []).map(([px, py]) => [px + dx, py + dy]);
218
+ if (e.labelPos)
219
+ e.labelPos = [e.labelPos[0] + dx, e.labelPos[1] + dy];
220
+ }
221
+ // pools first (drawn underneath), then lanes, then containers
222
+ regions.sort((a, b) => rank(a.style) - rank(b.style));
223
+ return makeDiagram({ width, height, components, regions, edges });
224
+ }
225
+ function rank(style) {
226
+ return style === "pool" ? 0 : style === "lane" ? 1 : 2;
227
+ }
228
+ //# sourceMappingURL=from-bpmn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-bpmn.js","sourceRoot":"","sources":["../src/from-bpmn.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Hand-coded SVG icon library — JS mirror of `packages/python/src/kymo/icons.py`.
3
+ *
4
+ * Each entry in `ICONS` is an SVG fragment centred at (0, 0). The
5
+ * renderer wraps it in a `<g transform="translate(cx, cy)">`. Helper
6
+ * functions (`_cube`, `_box`, `_awsTile`, `_halo`, `_stepBadge`)
7
+ * generate consistent shells around inner glyphs, mirroring the
8
+ * Python originals 1:1.
9
+ *
10
+ * The file-backed icons (icons/<provider>/<name>.png) live in
11
+ * `icons-loader.js`.
12
+ */
13
+ export declare const ICONS: Record<string, string>;
14
+ //# sourceMappingURL=icons-builtin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons-builtin.d.ts","sourceRoot":"","sources":["../src/icons-builtin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAgWH,eAAO,MAAM,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAmCxC,CAAC"}