Skip to content
Open
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
123 changes: 61 additions & 62 deletions export-diagrams.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,51 @@ if (process.argv.length > 3) {
password = process.argv[5];
}

var expectedNumberOfExports = 0;
var actualNumberOfExports = 0;
async function exportDiagram(page, view, exportKeys, stepSuffix = '') {
await page.waitForFunction('structurizr.scripting.isDiagramRendered() === true');

if (format === SVG_FORMAT) {
const diagramFilename = view.key + stepSuffix + '.svg';
const diagramKeyFilename = view.key + stepSuffix + '-key.svg'

var svgForDiagram = await page.evaluate(() => {
return structurizr.scripting.exportCurrentDiagramToSVG({ includeMetadata: true });
});

console.log(" - " + diagramFilename);
fs.writeFile(diagramFilename, svgForDiagram, function (err) {
if (err) throw err;
});

if (exportKeys && view.type !== IMAGE_VIEW_TYPE) {
var svgForKey = await page.evaluate(() => {
return structurizr.scripting.exportCurrentDiagramKeyToSVG();
});

console.log(" - " + diagramKeyFilename);
fs.writeFile(diagramKeyFilename, svgForKey, function (err) {
if (err) throw err;
});
}
} else {
const diagramFilename = view.key + stepSuffix + '.png';
const diagramKeyFilename = view.key + stepSuffix + '-key.png'

await page.evaluate((diagramFilename) => {
structurizr.scripting.exportCurrentDiagramToPNG({ includeMetadata: true, crop: false }, function(png) {
window.savePNG(png, diagramFilename);
})
}, diagramFilename);

if (exportKeys && view.type !== IMAGE_VIEW_TYPE) {
await page.evaluate((diagramKeyFilename) => {
structurizr.scripting.exportCurrentDiagramKeyToPNG(function(png) {
window.savePNG(png, diagramKeyFilename);
})
}, diagramKeyFilename);
}
}
}

(async () => {
const browser = await puppeteer.launch({ignoreHTTPSErrors: IGNORE_HTTPS_ERRORS, headless: HEADLESS});
Expand Down Expand Up @@ -63,13 +106,6 @@ var actualNumberOfExports = 0;
fs.writeFile(filename, content, 'base64', function (err) {
if (err) throw err;
});

actualNumberOfExports++;

if (actualNumberOfExports === expectedNumberOfExports) {
console.log(" - Finished");
browser.close();
}
});
}

Expand All @@ -78,15 +114,6 @@ var actualNumberOfExports = 0;
return structurizr.scripting.getViews();
});

views.forEach(function(view) {
if (view.type === IMAGE_VIEW_TYPE) {
expectedNumberOfExports++; // diagram only
} else {
expectedNumberOfExports++; // diagram
expectedNumberOfExports++; // key
}
});

console.log(" - Starting export");
for (var i = 0; i < views.length; i++) {
const view = views[i];
Expand All @@ -95,56 +122,28 @@ var actualNumberOfExports = 0;
structurizr.scripting.changeView(view.key);
}, view);

await page.waitForFunction('structurizr.scripting.isDiagramRendered() === true');
await exportDiagram(page, view, true, undefined);

if (format === SVG_FORMAT) {
const diagramFilename = view.key + '.svg';
const diagramKeyFilename = view.key + '-key.svg'
var currentViewIsDynamic = await page.evaluate(() => {
return structurizr.diagram.currentViewIsDynamic();
});

var svgForDiagram = await page.evaluate(() => {
return structurizr.scripting.exportCurrentDiagramToSVG({ includeMetadata: true });
if (currentViewIsDynamic) {
await page.evaluate(() => {
structurizr.diagram.stepForwardInAnimation();
});

console.log(" - " + diagramFilename);
fs.writeFile(diagramFilename, svgForDiagram, function (err) {
if (err) throw err;
});
actualNumberOfExports++;

if (view.type !== IMAGE_VIEW_TYPE) {
var svgForKey = await page.evaluate(() => {
return structurizr.scripting.exportCurrentDiagramKeyToSVG();
});

console.log(" - " + diagramKeyFilename);
fs.writeFile(diagramKeyFilename, svgForKey, function (err) {
if (err) throw err;
});
actualNumberOfExports++;
}

if (actualNumberOfExports === expectedNumberOfExports) {
console.log(" - Finished");
browser.close();
}
} else {
const diagramFilename = view.key + '.png';
const diagramKeyFilename = view.key + '-key.png'

page.evaluate((diagramFilename) => {
structurizr.scripting.exportCurrentDiagramToPNG({ includeMetadata: true, crop: false }, function(png) {
window.savePNG(png, diagramFilename);
})
}, diagramFilename);

if (view.type !== IMAGE_VIEW_TYPE) {
page.evaluate((diagramKeyFilename) => {
structurizr.scripting.exportCurrentDiagramKeyToPNG(function(png) {
window.savePNG(png, diagramKeyFilename);
})
}, diagramKeyFilename);
var step = 1;
while (await page.evaluate(() => structurizr.diagram.animationStarted())) {
await exportDiagram(page, view, false, '-step-' + step);
await page.evaluate(() => {
structurizr.diagram.stepForwardInAnimation();
});
step++;
}
}
}

console.log(" - Finished");
browser.close();
})();