mddd-cli 4.1.0 → 4.1.2

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/bin/cli.js CHANGED
@@ -17,7 +17,7 @@ const program = new Command();
17
17
  program
18
18
  .name('md')
19
19
  .description('Manager for co-located specifications for Mermaid Diagram Driven Development (MDDD)')
20
- .version('4.1.0');
20
+ .version('4.1.2');
21
21
 
22
22
  // ==========================================
23
23
  // COMMAND: md init
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mddd-cli",
3
- "version": "4.1.0",
3
+ "version": "4.1.2",
4
4
  "description": "Official CLI for modular, co-located, and versioned Mermaid Diagram Driven Development (MDDD).",
5
5
  "type": "module",
6
6
  "exports": "./bin/cli.js",
@@ -16,18 +16,26 @@ function extractMermaidBlocks(text) {
16
16
  }
17
17
 
18
18
  /**
19
- * Limpa comentários do topo do diagrama que quebram o parser do Mermaid
19
+ * Normaliza quebras de linha, remove TODOS os tipos de espaços Unicode fantasmas
20
+ * e elimina comentários/linhas vazias do topo antes do tipo de diagrama.
20
21
  * @param {string} code
21
22
  * @returns {string}
22
23
  */
23
24
  function cleanDiagramCode(code) {
24
- // Remove linhas que começam com %% no topo do arquivo antes da declaração do tipo
25
- const lines = code.split('\n');
25
+ // 1. Unifica todas as quebras de linha possíveis (\r\n ou \r isolado) para \n
26
+ const uniformLines = code.replace(/\r\n|\r/g, '\n');
27
+
28
+ // 2. Divide em linhas para processar o topo do arquivo
29
+ const lines = uniformLines.split('\n');
26
30
  const cleanedLines = [];
27
31
  let foundTypeDeclaration = false;
28
32
 
29
33
  for (const line of lines) {
30
- const trimmed = line.trim();
34
+ // Substitui todos os tipos conhecidos de espaços em branco Unicode invisíveis por espaços comuns
35
+ // (\u00A0 é o NBSP, \u2000-\u200A são variantes de espaçamento tipográfico)
36
+ let normalizedLine = line.replace(/[\u00A0\u2000-\u200A\u202F\u205F\u3000]/g, ' ');
37
+
38
+ const trimmed = normalizedLine.trim();
31
39
 
32
40
  // Ignora linhas vazias ou comentários iniciais até achar a declaração do diagrama
33
41
  if (!foundTypeDeclaration && (trimmed === '' || trimmed.startsWith('%%'))) {
@@ -35,7 +43,9 @@ function cleanDiagramCode(code) {
35
43
  }
36
44
 
37
45
  foundTypeDeclaration = true;
38
- cleanedLines.push(line);
46
+
47
+ // Mantém a linha com os espaços normais restaurados (importante para a indentação dos blocos do Mermaid)
48
+ cleanedLines.push(normalizedLine);
39
49
  }
40
50
 
41
51
  return cleanedLines.join('\n').trim();
@@ -61,12 +71,18 @@ export async function validateMermaidSyntax(input) {
61
71
  }
62
72
 
63
73
  try {
74
+ const cleanedDiagrams = [];
75
+
64
76
  for (const diagramCode of diagramsToValidate) {
65
- // Aplica a limpeza antes de mandar para o parser em memória
66
77
  const readyCode = cleanDiagramCode(diagramCode);
67
- await parse(readyCode);
78
+ await parse(readyCode); // Se tiver espaço fantasma aqui, o parser agora aceita!
79
+ cleanedDiagrams.push(readyCode);
68
80
  }
69
- return { valid: true };
81
+
82
+ return {
83
+ valid: true,
84
+ diagrams: cleanedDiagrams
85
+ };
70
86
  } catch (error) {
71
87
  return {
72
88
  valid: false,