@getsolara/solara.canvas
Version:
Optional canvas and image manipulation functionality for @getsolara/solara.js
64 lines (59 loc) • 2.86 kB
JavaScript
const path = require('path');
const fs = require('fs');
function loadCanvasPackageFiles(dirPath, fileSuffix = '.js', recursive = false) {
const results = [];
if (!fs.existsSync(dirPath)) return results;
try {
const items = fs.readdirSync(dirPath, { withFileTypes: true });
for (const item of items) {
const fullPath = path.join(dirPath, item.name);
if (item.isDirectory() && recursive) {
results.push(...loadCanvasPackageFiles(fullPath, fileSuffix, recursive));
} else if (item.isFile() && item.name.endsWith(fileSuffix)) {
results.push(fullPath);
}
}
} catch (error) {
console.error(`Solara.canvas FileUtils: Error reading dir ${dirPath}:`, error);
}
return results;
}
function initializeCanvasFeatures(client, canvasConfig, verboseLogging) {
if (!client || typeof client.addFunction !== 'function') {
console.error("Solara.canvas: Invalid SolaraClient instance provided for initialization.");
return false;
}
if (verboseLogging) {
console.log("Solara.canvas: Initializing canvas features via @getsolara/solara.canvas...");
}
const funcDir = path.join(__dirname, 'functions');
let canvasFuncLoadedCount = 0;
if (fs.existsSync(funcDir)) {
const functionFiles = loadCanvasPackageFiles(funcDir, '.js');
for (const filePath of functionFiles) {
try {
const funcData = require(filePath);
funcData._filePath = filePath;
if (client.addFunction(funcData)) {
canvasFuncLoadedCount++;
}
} catch (funcLoadError) {
if (funcLoadError.code === 'MODULE_NOT_FOUND') {
const missingModule = funcLoadError.message.split("'")[1] || "unknown module";
console.warn(`Solara.canvas: Skipping function ${path.basename(filePath)} from @getsolara/solara.canvas due to its own missing internal dependency: '${missingModule}'. This might indicate an issue with the @getsolara/solara.canvas package itself or the function file.`);
} else {
console.error(`Solara.canvas: Error loading function file ${path.basename(filePath)} from @getsolara/solara.canvas:`, funcLoadError);
}
}
}
if (verboseLogging) {
console.log(`Solara.canvas: Loaded ${canvasFuncLoadedCount} canvas-specific functions into the client.`);
}
} else if (verboseLogging) {
console.warn("Solara.canvas: 'functions' directory not found in @getsolara/solara.canvas package. No canvas functions loaded.");
}
return true;
}
module.exports = {
initializeCanvasFeatures
};