124 lines
3.4 KiB
JavaScript
124 lines
3.4 KiB
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
class AssetLoader {
|
|
constructor() {
|
|
this.relPath = './'
|
|
this.baseDir = path.resolve(__dirname, this.relPath);
|
|
this.cache = new Map(); // Cache loaded JSON files for better performance
|
|
}
|
|
|
|
/**
|
|
* Load a specific curve by type
|
|
* @param {string} curveType - The curve identifier (e.g., 'hidrostal-H05K-S03R')
|
|
* @returns {Object|null} The curve data object or null if not found
|
|
*/
|
|
loadCurve(curveType) {
|
|
return this.loadAsset('curves', curveType);
|
|
}
|
|
|
|
/**
|
|
* Load any asset from a specific dataset folder
|
|
* @param {string} datasetType - The dataset folder name (e.g., 'curves', 'assetData')
|
|
* @param {string} assetId - The specific asset identifier
|
|
* @returns {Object|null} The asset data object or null if not found
|
|
*/
|
|
loadAsset(datasetType, assetId) {
|
|
//const cacheKey = `${datasetType}/${assetId}`;
|
|
const cacheKey = `${assetId}`;
|
|
|
|
|
|
// Check cache first
|
|
if (this.cache.has(cacheKey)) {
|
|
return this.cache.get(cacheKey);
|
|
}
|
|
|
|
try {
|
|
const filePath = path.join(this.baseDir, `${assetId}.json`);
|
|
|
|
// Check if file exists
|
|
if (!fs.existsSync(filePath)) {
|
|
console.warn(`Asset not found: ${filePath}`);
|
|
return null;
|
|
}
|
|
|
|
// Load and parse JSON
|
|
const rawData = fs.readFileSync(filePath, 'utf8');
|
|
const assetData = JSON.parse(rawData);
|
|
|
|
// Cache the result
|
|
this.cache.set(cacheKey, assetData);
|
|
|
|
return assetData;
|
|
} catch (error) {
|
|
console.error(`Error loading asset ${cacheKey}:`, error.message);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get all available assets in a dataset
|
|
* @param {string} datasetType - The dataset folder name
|
|
* @returns {string[]} Array of available asset IDs
|
|
*/
|
|
getAvailableAssets(datasetType) {
|
|
try {
|
|
const datasetPath = path.join(this.baseDir, datasetType);
|
|
|
|
if (!fs.existsSync(datasetPath)) {
|
|
return [];
|
|
}
|
|
|
|
return fs.readdirSync(datasetPath)
|
|
.filter(file => file.endsWith('.json'))
|
|
.map(file => file.replace('.json', ''));
|
|
} catch (error) {
|
|
console.error(`Error reading dataset ${datasetType}:`, error.message);
|
|
return [];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Clear the cache (useful for development/testing)
|
|
*/
|
|
clearCache() {
|
|
this.cache.clear();
|
|
}
|
|
}
|
|
|
|
// Create and export a singleton instance
|
|
const assetLoader = new AssetLoader();
|
|
|
|
module.exports = {
|
|
AssetLoader,
|
|
assetLoader,
|
|
// Convenience methods for backward compatibility
|
|
loadCurve: (curveType) => assetLoader.loadCurve(curveType),
|
|
loadAsset: (datasetType, assetId) => assetLoader.loadAsset(datasetType, assetId),
|
|
getAvailableAssets: (datasetType) => assetLoader.getAvailableAssets(datasetType)
|
|
};
|
|
|
|
/*
|
|
// Example usage in your scripts
|
|
const loader = new AssetLoader();
|
|
|
|
// Load a specific curve
|
|
const curve = loader.loadCurve('hidrostal-H05K-S03R');
|
|
if (curve) {
|
|
console.log('Curve loaded:', curve);
|
|
} else {
|
|
console.log('Curve not found');
|
|
}
|
|
/*
|
|
// Load any asset from any dataset
|
|
const someAsset = loadAsset('assetData', 'some-asset-id');
|
|
|
|
// Get list of available curves
|
|
const availableCurves = getAvailableAssets('curves');
|
|
console.log('Available curves:', availableCurves);
|
|
|
|
// Using the class directly for more control
|
|
const { AssetLoader } = require('./index.js');
|
|
const customLoader = new AssetLoader();
|
|
const data = customLoader.loadCurve('hidrostal-H05K-S03R');
|
|
*/ |