@resin/pinejs
Version:
Pine.js is a sophisticated rules-driven API engine that enables you to define rules in a structured subset of English. Those rules are used in order for Pine.js to generate a database schema and the associated [OData](http://www.odata.org/) API. This make
49 lines • 1.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.cachedCompile = void 0;
const _ = require("lodash");
const cacheFile = process.env.PINEJS_CACHE_FILE || '.pinejs-cache.json';
let cache = null;
let fs;
try {
fs = require('fs');
}
catch (e) {
}
const SAVE_DEBOUNCE_TIME = 5000;
const saveCache = _.debounce(() => {
if (fs != null) {
fs.writeFile(cacheFile, JSON.stringify(cache), 'utf8', (err) => {
if (err) {
console.warn('Error saving pinejs cache:', err);
}
});
}
}, SAVE_DEBOUNCE_TIME);
const clearCache = _.debounce(() => {
cache = null;
}, SAVE_DEBOUNCE_TIME * 2);
exports.cachedCompile = (name, version, src, fn) => {
if (cache == null) {
if (fs != null) {
try {
cache = JSON.parse(fs.readFileSync(cacheFile, 'utf8'));
}
catch (e) {
}
}
if (cache == null) {
cache = {};
}
}
const key = [name, version, JSON.stringify(src)];
let result = _.get(cache, key);
if (result == null) {
result = fn();
_.set(cache, key, result);
saveCache();
}
clearCache();
return _.cloneDeep(result);
};
//# sourceMappingURL=cached-compile.js.map