Fix TODO Qs

This commit is contained in:
Sidharth Vinod 2022-09-01 18:40:28 +05:30
parent 9b319a55f6
commit 8c85c10212
No known key found for this signature in database
GPG Key ID: FB5CCD378D3907CD
5 changed files with 8 additions and 13 deletions

View File

@ -73,7 +73,7 @@ export const detectType = function (text: string, config?: MermaidConfig): strin
} }
} }
return 'flowchart'; throw new Error(`No diagram type detected for text: ${text}`);
}; };
export const addDetector = (key: string, detector: DiagramDetector) => { export const addDetector = (key: string, detector: DiagramDetector) => {

View File

@ -12,8 +12,7 @@ describe('DiagramAPI', () => {
it('should handle diagram registrations', () => { it('should handle diagram registrations', () => {
expect(() => getDiagram('loki')).toThrow(); expect(() => getDiagram('loki')).toThrow();
// TODO Q: Shouldn't this be throwing an error? expect(() => detectType('loki diagram')).toThrow();
expect(detectType('loki diagram')).toBe('flowchart');
registerDiagram( registerDiagram(
'loki', 'loki',
{ {

View File

@ -24,7 +24,6 @@ export const removeScript = (txt: string): string => {
}; };
const sanitizeMore = (text: string, config: MermaidConfig) => { const sanitizeMore = (text: string, config: MermaidConfig) => {
// TODO Q: Should this check really be here? Feels like we should be sanitizing it regardless.
if (config.flowchart?.htmlLabels !== false) { if (config.flowchart?.htmlLabels !== false) {
const level = config.securityLevel; const level = config.securityLevel;
if (level === 'antiscript' || level === 'strict') { if (level === 'antiscript' || level === 'strict') {
@ -54,7 +53,7 @@ export const sanitizeTextOrArray = (
config: MermaidConfig config: MermaidConfig
): string | string[] => { ): string | string[] => {
if (typeof a === 'string') return sanitizeText(a, config); if (typeof a === 'string') return sanitizeText(a, config);
// TODO Q: Do we need flat? // TODO: Refactor to avoid flat.
return a.flat().map((x: string) => sanitizeText(x, config)); return a.flat().map((x: string) => sanitizeText(x, config));
}; };
@ -108,7 +107,6 @@ const breakToPlaceholder = (s: string): string => {
*/ */
const getUrl = (useAbsolute: boolean): string => { const getUrl = (useAbsolute: boolean): string => {
let url = ''; let url = '';
// TODO Q: If useAbsolute if false, empty string is returned. Bug?
if (useAbsolute) { if (useAbsolute) {
url = url =
window.location.protocol + window.location.protocol +
@ -116,7 +114,6 @@ const getUrl = (useAbsolute: boolean): string => {
window.location.host + window.location.host +
window.location.pathname + window.location.pathname +
window.location.search; window.location.search;
// TODO Q: Why is this necessary?
url = url.replaceAll(/\(/g, '\\('); url = url.replaceAll(/\(/g, '\\(');
url = url.replaceAll(/\)/g, '\\)'); url = url.replaceAll(/\)/g, '\\)');
} }
@ -130,9 +127,8 @@ const getUrl = (useAbsolute: boolean): string => {
* @param {string | boolean} val String or boolean to convert * @param {string | boolean} val String or boolean to convert
* @returns {boolean} The result from the input * @returns {boolean} The result from the input
*/ */
// TODO Q: Should we make this check more specific? 'False', '0', 'null' all will evaluate to true. export const evaluate = (val?: string | boolean): boolean =>
export const evaluate = (val: string | boolean): boolean => val === false || ['false', 'null', '0'].includes(String(val).trim().toLowerCase()) ? false : true;
val === 'false' || val === false ? false : true;
/** /**
* Makes generics in typescript syntax * Makes generics in typescript syntax

View File

@ -34,6 +34,7 @@ import theme from './themes';
import utils, { directiveSanitizer } from './utils'; import utils, { directiveSanitizer } from './utils';
import DOMPurify from 'dompurify'; import DOMPurify from 'dompurify';
import { MermaidConfig } from './config.type'; import { MermaidConfig } from './config.type';
import { evaluate } from './diagrams/common/common';
let hasLoadedDiagrams = false; let hasLoadedDiagrams = false;
@ -308,8 +309,7 @@ const render = function (
let svgCode = root.select('#d' + id).node().innerHTML; let svgCode = root.select('#d' + id).node().innerHTML;
log.debug('cnf.arrowMarkerAbsolute', cnf.arrowMarkerAbsolute); log.debug('cnf.arrowMarkerAbsolute', cnf.arrowMarkerAbsolute);
// TODO Q: Needs verification. if (!evaluate(cnf.arrowMarkerAbsolute) && cnf.securityLevel !== 'sandbox') {
if (!cnf.arrowMarkerAbsolute && cnf.securityLevel !== 'sandbox') {
svgCode = svgCode.replace(/marker-end="url\(.*?#/g, 'marker-end="url(#', 'g'); svgCode = svgCode.replace(/marker-end="url\(.*?#/g, 'marker-end="url(#', 'g');
} }

View File

@ -13,7 +13,7 @@ import c4 from './diagrams/c4/styles';
import { FlowChartStyleOptions } from './diagrams/flowchart/styles'; import { FlowChartStyleOptions } from './diagrams/flowchart/styles';
import { log } from './logger'; import { log } from './logger';
// TODO Q: Shouldn't registerDiagram be injecting data here? // TODO @knut: Inject from registerDiagram.
const themes = { const themes = {
flowchart, flowchart,
'flowchart-v2': flowchart, 'flowchart-v2': flowchart,