Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2,727 changes: 2,727 additions & 0 deletions asimov/cli/js/package-lock.json

Large diffs are not rendered by default.

17 changes: 17 additions & 0 deletions asimov/cli/js/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"name": "asimov-report-js",
"version": "1.0.0",
"private": true,
"description": "Bundled Mermaid + ELK for asimov HTML reports (air-gapped)",
"scripts": {
"build": "webpack"
},
"dependencies": {
"@mermaid-js/layout-elk": "^0.1.0",
"mermaid": "^11.0.0"
},
"devDependencies": {
"webpack": "^5.0.0",
"webpack-cli": "^5.0.0"
}
}
19 changes: 19 additions & 0 deletions asimov/cli/js/src/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import mermaid from 'mermaid';
import elkLayouts from '@mermaid-js/layout-elk';

mermaid.registerLayoutLoaders(elkLayouts);

mermaid.initialize({
startOnLoad: false, // we call mermaid.render() manually after page load
securityLevel: 'loose', // required for click handlers in diagram definitions
Comment on lines +7 to +8
Copy link

Copilot AI Mar 4, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mermaid is initialized with securityLevel: 'loose', which relaxes sanitization and increases the impact of any untrusted content included in diagram definitions (e.g., analysis names or pipeline names). If any of that content can come from outside trusted sources, consider stricter settings and/or sanitizing labels before they reach Mermaid.

Suggested change
startOnLoad: false, // we call mermaid.render() manually after page load
securityLevel: 'loose', // required for click handlers in diagram definitions
startOnLoad: false, // we call mermaid.render() manually after page load
securityLevel: 'antiscript', // allows click handlers while blocking script execution

Copilot uses AI. Check for mistakes.
flowchart: {
defaultRenderer: 'elk',
},
theme: 'base',
themeVariables: {
primaryTextColor: '#24292e',
lineColor: '#586069',
},
});

window.mermaid = mermaid;
16 changes: 16 additions & 0 deletions asimov/cli/js/webpack.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
const path = require('path');
const webpack = require('webpack');

module.exports = {
mode: 'production',
entry: './src/index.js',
output: {
path: path.resolve(__dirname, '../static'),
filename: 'mermaid-elk.bundle.js',
},
plugins: [
// Force everything (including Mermaid's dynamic imports) into a single
// file so reports work from any path without managing multiple chunk URLs.
new webpack.optimize.LimitChunkCountPlugin({ maxChunks: 1 }),
],
};
Loading
Loading