mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-09-18 14:59:53 +02:00
review fixes
This commit is contained in:
@@ -3,9 +3,8 @@ import { log } from './logger.js';
|
||||
import { getDiagram, registerDiagram } from './diagram-api/diagramAPI.js';
|
||||
import { detectType, getDiagramLoader } from './diagram-api/detectType.js';
|
||||
import { UnknownDiagramError } from './errors.js';
|
||||
import type { DetailedError } from './utils.js';
|
||||
import { encodeEntities, type DetailedError } from './utils.js';
|
||||
import type { DiagramDefinition, DiagramMetadata } from './diagram-api/types.js';
|
||||
import { encodeEntities } from './mermaidAPI.js';
|
||||
|
||||
export type ParseErrorFunction = (err: string | DetailedError | unknown, hash?: any) => void;
|
||||
|
||||
|
@@ -19,14 +19,6 @@ export interface InjectUtils {
|
||||
_parseDirective: any;
|
||||
}
|
||||
|
||||
export type Message = {
|
||||
type: number;
|
||||
to: string;
|
||||
from: string;
|
||||
message: string;
|
||||
wrap: boolean;
|
||||
};
|
||||
|
||||
/**
|
||||
* Generic Diagram DB that may apply to any diagram type.
|
||||
*/
|
||||
@@ -45,7 +37,6 @@ export interface DiagramDB {
|
||||
|
||||
setDisplayMode?: (title: string) => void;
|
||||
bindFunctions?: (element: Element) => void;
|
||||
getMessages?: () => Message[];
|
||||
}
|
||||
|
||||
// This is what is returned from getClasses(...) methods.
|
||||
|
@@ -74,13 +74,13 @@ Expecting 'TXT', got 'NEWLINE'"
|
||||
const diagram = await getDiagramFromText(`sequenceDiagram
|
||||
A->>B: I #9829; you!
|
||||
B->>A: I #9829; you #infin; times more!`);
|
||||
//@ts-ignore
|
||||
const messages = diagram.db?.getMessages?.();
|
||||
if (!messages) {
|
||||
throw new Error('Messages not found!');
|
||||
}
|
||||
const result = ['I fl°°9829¶ß you!', 'I fl°°9829¶ß you fl°infin¶ß times more!'];
|
||||
messages.forEach((message, index: number) => {
|
||||
expect(message.message).toBe(result[index]);
|
||||
});
|
||||
|
||||
expect(messages[0].message).toBe('I fl°°9829¶ß you!');
|
||||
expect(messages[1].message).toBe('I fl°°9829¶ß you fl°infin¶ß times more!');
|
||||
});
|
||||
});
|
||||
|
@@ -38,8 +38,6 @@ import type { MermaidConfig } from './config.type.js';
|
||||
|
||||
import mermaidAPI, { removeExistingElements } from './mermaidAPI.js';
|
||||
import {
|
||||
encodeEntities,
|
||||
decodeEntities,
|
||||
createCssStyles,
|
||||
createUserStyles,
|
||||
appendDivSvgG,
|
||||
@@ -68,6 +66,7 @@ vi.mock('stylis', () => {
|
||||
};
|
||||
});
|
||||
import { compile, serialize } from 'stylis';
|
||||
import { decodeEntities, encodeEntities } from './utils.js';
|
||||
|
||||
/**
|
||||
* @see https://vitest.dev/guide/mocking.html Mock part of a module
|
||||
|
@@ -30,6 +30,7 @@ import isEmpty from 'lodash-es/isEmpty.js';
|
||||
import { setA11yDiagramInfo, addSVGa11yTitleDescription } from './accessibility.js';
|
||||
import type { DiagramStyleClassDef } from './diagram-api/types.js';
|
||||
import { preprocessDiagram } from './preprocess.js';
|
||||
import { decodeEntities } from './utils.js';
|
||||
|
||||
const MAX_TEXTLENGTH = 50_000;
|
||||
const MAX_TEXTLENGTH_EXCEEDED_MSG =
|
||||
@@ -110,43 +111,6 @@ async function parse(text: string, parseOptions?: ParseOptions): Promise<boolean
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param text - text to be encoded
|
||||
* @returns
|
||||
*/
|
||||
export const encodeEntities = function (text: string): string {
|
||||
let txt = text;
|
||||
|
||||
txt = txt.replace(/style.*:\S*#.*;/g, function (s): string {
|
||||
return s.substring(0, s.length - 1);
|
||||
});
|
||||
txt = txt.replace(/classDef.*:\S*#.*;/g, function (s): string {
|
||||
return s.substring(0, s.length - 1);
|
||||
});
|
||||
|
||||
txt = txt.replace(/#\w+;/g, function (s) {
|
||||
const innerTxt = s.substring(1, s.length - 1);
|
||||
|
||||
const isInt = /^\+?\d+$/.test(innerTxt);
|
||||
if (isInt) {
|
||||
return 'fl°°' + innerTxt + '¶ß';
|
||||
} else {
|
||||
return 'fl°' + innerTxt + '¶ß';
|
||||
}
|
||||
});
|
||||
|
||||
return txt;
|
||||
};
|
||||
|
||||
/**
|
||||
*
|
||||
* @param text - text to be decoded
|
||||
* @returns
|
||||
*/
|
||||
export const decodeEntities = function (text: string): string {
|
||||
return text.replace(/fl°°/g, '&#').replace(/fl°/g, '&').replace(/¶ß/g, ';');
|
||||
};
|
||||
|
||||
// append !important; to each cssClass followed by a final !important, all enclosed in { }
|
||||
//
|
||||
/**
|
||||
|
@@ -888,3 +888,40 @@ export default {
|
||||
parseFontSize,
|
||||
InitIDGenerator,
|
||||
};
|
||||
|
||||
/**
|
||||
* @param text - text to be encoded
|
||||
* @returns
|
||||
*/
|
||||
export const encodeEntities = function (text: string): string {
|
||||
let txt = text;
|
||||
|
||||
txt = txt.replace(/style.*:\S*#.*;/g, function (s): string {
|
||||
return s.substring(0, s.length - 1);
|
||||
});
|
||||
txt = txt.replace(/classDef.*:\S*#.*;/g, function (s): string {
|
||||
return s.substring(0, s.length - 1);
|
||||
});
|
||||
|
||||
txt = txt.replace(/#\w+;/g, function (s) {
|
||||
const innerTxt = s.substring(1, s.length - 1);
|
||||
|
||||
const isInt = /^\+?\d+$/.test(innerTxt);
|
||||
if (isInt) {
|
||||
return 'fl°°' + innerTxt + '¶ß';
|
||||
} else {
|
||||
return 'fl°' + innerTxt + '¶ß';
|
||||
}
|
||||
});
|
||||
|
||||
return txt;
|
||||
};
|
||||
|
||||
/**
|
||||
*
|
||||
* @param text - text to be decoded
|
||||
* @returns
|
||||
*/
|
||||
export const decodeEntities = function (text: string): string {
|
||||
return text.replace(/fl°°/g, '&#').replace(/fl°/g, '&').replace(/¶ß/g, ';');
|
||||
};
|
||||
|
Reference in New Issue
Block a user