Skip to content
This repository was archived by the owner on Oct 21, 2025. It is now read-only.

Commit 3d311b0

Browse files
committed
fix name extraction with linebreak after
1 parent 9eb47d3 commit 3d311b0

3 files changed

Lines changed: 33 additions & 49 deletions

File tree

src/features/constraintMenu/ConstraintMenu.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,13 +131,13 @@ export class ConstraintMenu extends AbstractUIExtension implements Switchable {
131131
return;
132132
}
133133

134-
this.constraintRegistry.setConstraints(this.editor.getValue());
135-
136134
const model = this.editor?.getModel();
137135
if (!model) {
138136
return;
139137
}
140138

139+
this.constraintRegistry.setConstraints(model.getLinesContent());
140+
141141
const content = model.getLinesContent();
142142
const marker: monaco.editor.IMarkerData[] = [];
143143
const emptyContent = content.length == 0 || (content.length == 1 && content[0] === "");
Lines changed: 31 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import { injectable } from "inversify";
2-
import { generateRandomSprottyId } from "../../utils";
32

43
export interface Constraint {
5-
id: string;
64
name: string;
75
constraint: string;
86
}
@@ -12,46 +10,18 @@ export class ConstraintRegistry {
1210
private constraints: Constraint[] = [];
1311
private updateCallbacks: (() => void)[] = [];
1412

15-
public setConstraints(constraints: string): void {
16-
this.constraints = ConstraintRegistry.splitToConstraintTexts(constraints).map((t) =>
17-
this.constraintFromText(t.text),
18-
);
19-
//this.constraintListChanged();
13+
public setConstraints(constraints: string[]): void {
14+
this.constraints = this.splitIntoConstraintTexts(constraints).map((c) => this.mapToConstraint(c));
2015
}
2116

2217
public setConstraintsFromArray(constraints: Constraint[]): void {
2318
this.constraints = constraints.map((c) => ({
24-
id: c.id || generateRandomSprottyId(),
2519
name: c.name,
2620
constraint: c.constraint,
2721
}));
2822
this.constraintListChanged();
2923
}
3024

31-
private constraintFromText(text: string): Constraint {
32-
const parts = text.split(" ");
33-
if (parts.length < 2) {
34-
return {
35-
id: generateRandomSprottyId(),
36-
name: "",
37-
constraint: "",
38-
};
39-
}
40-
const name = parts[1].endsWith(":") ? parts[1].slice(0, -1) : parts[1];
41-
if (parts.length < 3) {
42-
return {
43-
id: generateRandomSprottyId(),
44-
name: name,
45-
constraint: "",
46-
};
47-
}
48-
return {
49-
id: generateRandomSprottyId(),
50-
name: name,
51-
constraint: parts.slice(2).join(" "),
52-
};
53-
}
54-
5525
public clearConstraints(): void {
5626
this.constraints = [];
5727
this.constraintListChanged();
@@ -73,26 +43,41 @@ export class ConstraintRegistry {
7343
return this.constraints;
7444
}
7545

76-
public static splitToConstraintTexts(text: string): { text: string; line: number }[] {
77-
if (text === "") {
78-
return [];
79-
}
80-
const lines = text.split(/\r?\n/gm);
46+
private splitIntoConstraintTexts(text: string[]): string[] {
47+
const constraints: string[] = [];
8148
let currentConstraint = "";
82-
const constraints: { text: string; line: number }[] = [];
83-
let lastStart = 0;
84-
for (let i = 0; i < lines.length; i++) {
85-
const line = lines[i].trim();
86-
if (line.startsWith("-")) {
87-
if (currentConstraint) {
88-
constraints.push({ text: currentConstraint, line: lastStart });
49+
for (const line of text) {
50+
if (line.startsWith("- ")) {
51+
if (currentConstraint !== "") {
52+
constraints.push(currentConstraint);
8953
}
90-
lastStart = i;
9154
currentConstraint = line;
9255
} else {
9356
currentConstraint += `\n${line}`;
9457
}
9558
}
96-
return currentConstraint ? [...constraints, { text: currentConstraint, line: lastStart }] : constraints;
59+
if (currentConstraint !== "") {
60+
constraints.push(currentConstraint);
61+
}
62+
return constraints;
63+
}
64+
65+
private mapToConstraint(constraint: string): Constraint {
66+
// the brackets ensure its a capturing split
67+
const parts = constraint.split(/(\s+)/);
68+
// if less than 3 parts are present no name or constraint can be extracted (e.g. "- " -> ["-", " "])
69+
if (parts.length < 3) {
70+
return { name: "", constraint: "" };
71+
}
72+
let name = parts[2];
73+
if (name.endsWith(":")) {
74+
name = name.slice(0, -1);
75+
}
76+
let constraintText = "";
77+
// the first 4 parts are "- ", whitespace, `${name}:`, whitespace --> Thus the constraint starts at index 4
78+
for (let i = 4; i < parts.length; i++) {
79+
constraintText += parts[i];
80+
}
81+
return { name, constraint: constraintText };
9782
}
9883
}

src/features/serialize/defaultDiagram.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -614,7 +614,6 @@
614614
],
615615
"constraints": [
616616
{
617-
"id": "j4nz39",
618617
"name": "Test",
619618
"constraint": "data Sensitivity.Personal neverFlows vertex Location.nonEU"
620619
}

0 commit comments

Comments
 (0)