mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-09-20 07:49:43 +02:00
Make sure sequence diagram render with antlr parser
This commit is contained in:
@@ -1,15 +1,60 @@
|
|||||||
// @ts-ignore: JISON doesn't support types
|
// @ts-ignore: JISON doesn't support types
|
||||||
import jisonParser from './sequenceDiagram.jison';
|
import jisonParser from './sequenceDiagram.jison';
|
||||||
|
|
||||||
// Import the ANTLR parser wrapper (safe stub for now)
|
// Import the ANTLR parser wrapper
|
||||||
import antlrParser from './antlr/antlr-parser.js';
|
import antlrParser from './antlr/antlr-parser.js';
|
||||||
|
|
||||||
// Configuration flag to switch between parsers (same convention as flowcharts)
|
// Browser-safe environment variable access (same as flowchart parser)
|
||||||
const USE_ANTLR_PARSER = process.env.USE_ANTLR_PARSER === 'true';
|
const getEnvVar = (name: string): string | undefined => {
|
||||||
|
try {
|
||||||
|
if (typeof process !== 'undefined' && process.env) {
|
||||||
|
return process.env[name];
|
||||||
|
}
|
||||||
|
} catch (_e) {
|
||||||
|
// process is not defined in browser, continue to browser checks
|
||||||
|
}
|
||||||
|
|
||||||
const newParser: any = Object.assign({}, USE_ANTLR_PARSER ? antlrParser : jisonParser);
|
// In browser, check for global variables or default values
|
||||||
|
if (typeof window !== 'undefined' && (window as any).MERMAID_CONFIG) {
|
||||||
|
return (window as any).MERMAID_CONFIG[name];
|
||||||
|
}
|
||||||
|
// Default to ANTLR parser in browser if no config is found
|
||||||
|
if (typeof window !== 'undefined' && name === 'USE_ANTLR_PARSER') {
|
||||||
|
return 'true';
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
|
};
|
||||||
|
|
||||||
newParser.parse = (src: string): unknown => {
|
const USE_ANTLR_PARSER = getEnvVar('USE_ANTLR_PARSER') === 'true';
|
||||||
|
|
||||||
|
// Force logging to window for debugging
|
||||||
|
if (typeof window !== 'undefined') {
|
||||||
|
(window as any).MERMAID_PARSER_DEBUG = {
|
||||||
|
USE_ANTLR_PARSER,
|
||||||
|
env_value: getEnvVar('USE_ANTLR_PARSER'),
|
||||||
|
selected_parser: USE_ANTLR_PARSER ? 'ANTLR' : 'Jison',
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
|
console.log('🔧 SequenceParser: USE_ANTLR_PARSER =', USE_ANTLR_PARSER);
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
|
console.log('🔧 SequenceParser: env USE_ANTLR_PARSER =', getEnvVar('USE_ANTLR_PARSER'));
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
|
console.log('🔧 SequenceParser: Selected parser:', USE_ANTLR_PARSER ? 'ANTLR' : 'Jison');
|
||||||
|
|
||||||
|
// Create the appropriate parser instance (same pattern as flowchart)
|
||||||
|
let parserInstance;
|
||||||
|
if (USE_ANTLR_PARSER) {
|
||||||
|
parserInstance = antlrParser;
|
||||||
|
} else {
|
||||||
|
parserInstance = jisonParser;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a wrapper that provides the expected interface (same pattern as flowchart)
|
||||||
|
const newParser = {
|
||||||
|
parser: parserInstance,
|
||||||
|
parse: (src: string): unknown => {
|
||||||
// Normalize whitespace like flow does to keep parity with Jison behavior
|
// Normalize whitespace like flow does to keep parity with Jison behavior
|
||||||
const newSrc = src.replace(/}\s*\n/g, '}\n');
|
const newSrc = src.replace(/}\s*\n/g, '}\n');
|
||||||
|
|
||||||
@@ -18,6 +63,7 @@ newParser.parse = (src: string): unknown => {
|
|||||||
} else {
|
} else {
|
||||||
return jisonParser.parse(newSrc);
|
return jisonParser.parse(newSrc);
|
||||||
}
|
}
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export default newParser;
|
export default newParser;
|
||||||
|
Reference in New Issue
Block a user