UNPKG

@ddegtyarev/aws-tools

Version:

This project contains AWS API integration tools for use in Vertex AI SDK.

83 lines (82 loc) 3.46 kB
// tests/common.ts import * as fs from 'fs'; import * as path from 'path'; import * as vega from 'vega'; // @ts-expect-error: ignore the linter error for vega-lite import import * as vegaLite from 'vega-lite'; export class TestLogger { log(message, ...args) { console.log(message, ...args.map(arg => typeof arg === 'object' ? JSON.stringify(arg, null, 2) : arg)); } error(message, ...args) { console.error(message, ...args.map(arg => typeof arg === 'object' ? JSON.stringify(arg, null, 2) : arg)); } warn(message, ...args) { console.warn(message, ...args.map(arg => typeof arg === 'object' ? JSON.stringify(arg, null, 2) : arg)); } info(message, ...args) { console.info(message, ...args.map(arg => typeof arg === 'object' ? JSON.stringify(arg, null, 2) : arg)); } debug(message, ...args) { if (process.argv.includes('--verbose') || process.env.VERBOSE === 'true') { console.debug(message, ...args.map(arg => typeof arg === 'object' ? JSON.stringify(arg, null, 2) : arg)); } } } export function loadTestConfig() { const credsFile = path.join(__dirname, '..', '.aws-creds.json'); const creds = JSON.parse(fs.readFileSync(credsFile, 'utf-8')); return { credentials: { accessKeyId: creds.Credentials.AccessKeyId, secretAccessKey: creds.Credentials.SecretAccessKey, sessionToken: creds.Credentials.SessionToken, }, region: 'us-east-1', logger: new TestLogger(), }; } /** * Generates PNG and SVG files from a Vega-Lite chart specification * @param chartSpec - The Vega-Lite chart specification * @param filename - Base filename without extension * @param outputDir - Directory to save the files (default: 'tests') */ export async function generateChartFiles(chartSpec, filename, outputDir = 'tests') { try { // Compile Vega-Lite to Vega specification const vegaSpec = vegaLite.compile(chartSpec).spec; // Ensure output directories exist const svgDir = `${outputDir}/svg`; const pngDir = `${outputDir}/png`; if (!fs.existsSync(svgDir)) { fs.mkdirSync(svgDir, { recursive: true }); } if (!fs.existsSync(pngDir)) { fs.mkdirSync(pngDir, { recursive: true }); } // Generate SVG file const view = new vega.View(vega.parse(vegaSpec), { renderer: 'none' }); const svg = await view.toSVG(); fs.writeFileSync(`${svgDir}/${filename}.svg`, svg); console.log(`SVG file created successfully at ${svgDir}/${filename}.svg`); // Generate PNG file using canvas const canvasView = new vega.View(vega.parse(vegaSpec), { renderer: 'none' }); const canvas = await canvasView.toCanvas(); const out = fs.createWriteStream(`${pngDir}/${filename}.png`); const stream = canvas.createPNGStream(); stream.pipe(out); return new Promise((resolve, reject) => { out.on('finish', () => { console.log(`PNG file created successfully at ${pngDir}/${filename}.png`); resolve(); }); out.on('error', reject); }); } catch (error) { console.error('Error generating chart files:', error); console.log('Chart specification:', JSON.stringify(chartSpec, null, 2)); // Don't throw the error, just log it and continue } }