next
Version:
The React Framework
6 lines • 1.65 kB
JavaScript
;exports.__esModule=true;exports.default=handleCache;var _crypto=require("crypto");var _tracer=require("../../../../tracer");var _transform=_interopRequireDefault(require("./transform"));var _cacache=_interopRequireDefault(require("next/dist/compiled/cacache"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}async function read(cacheDirectory,etag){const cachedResult=await(0,_tracer.traceAsyncFn)(_tracer.tracer.startSpan('read-cache-file'),async()=>await _cacache.default.get(cacheDirectory,etag));return JSON.parse(cachedResult.data);}function write(cacheDirectory,etag,data){return _cacache.default.put(cacheDirectory,etag,JSON.stringify(data));}const etag=function(source,identifier,options){const hash=(0,_crypto.createHash)('md4');const contents=JSON.stringify({source,options,identifier});hash.update(contents);return hash.digest('hex');};async function handleCache(params){const span=_tracer.tracer.startSpan('handle-cache');return(0,_tracer.traceAsyncFn)(span,async()=>{const{source,options={},cacheIdentifier,cacheDirectory}=params;const file=etag(source,cacheIdentifier);try{// No errors mean that the file was previously cached
// we just need to return it
const res=await read(cacheDirectory,file);span.setAttribute('cache',res?'HIT':'MISS');return res;}catch(err){}// Otherwise just transform the file
// return it to the user asap and write it in cache
const result=await(0,_tracer.traceAsyncFn)(_tracer.tracer.startSpan('transform'),async()=>{return(0,_transform.default)(source,options);});await write(cacheDirectory,file,result);return result;});}
//# sourceMappingURL=cache.js.map