UNPKG

@getsolara/solara.canvas

Version:

Optional canvas and image manipulation functionality for @getsolara/solara.js

64 lines (59 loc) 2.86 kB
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 };