Files
30-seconds-of-code/node_modules/cache-manager-fs-hash/lib/json-file-store.js
2019-08-20 15:52:05 +02:00

122 lines
4.0 KiB
JavaScript

"use strict";
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
const _require = require('es6-promisify'),
promisify = _require.promisify;
const fs = require('fs');
exports.write =
/*#__PURE__*/
function () {
var _ref = _asyncToGenerator(function* (path, data) {
const externalBuffers = [];
const dataString = JSON.stringify(data, function replacerFunction(k, value) {
//Buffers searilize to {data: [...], type: "Buffer"}
if (value && value.type === 'Buffer' && value.data && value.data.length >= 1024
/* only save bigger Buffers external, small ones can be inlined */
) {
const buffer = Buffer.from(value.data);
externalBuffers.push({
index: externalBuffers.length,
buffer: buffer
});
return {
type: 'ExternalBuffer',
index: externalBuffers.length - 1,
size: buffer.length
};
} else {
return value;
}
}); //save main json file
yield promisify(fs.writeFile)(path + '.json', dataString, 'utf8'); //save external buffers
yield Promise.all(externalBuffers.map(
/*#__PURE__*/
function () {
var _ref2 = _asyncToGenerator(function* (externalBuffer) {
yield promisify(fs.writeFile)(path + '-' + externalBuffer.index + '.bin', externalBuffer.buffer, 'utf8');
});
return function (_x3) {
return _ref2.apply(this, arguments);
};
}()));
});
return function (_x, _x2) {
return _ref.apply(this, arguments);
};
}();
exports.read =
/*#__PURE__*/
function () {
var _ref3 = _asyncToGenerator(function* (path) {
//read main json file
const dataString = yield promisify(fs.readFile)(path + '.json', 'utf8');
const externalBuffers = [];
const data = JSON.parse(dataString, function bufferReceiver(k, value) {
if (value && value.type === 'Buffer' && value.data) {
return Buffer.from(value.data);
} else if (value && value.type === 'ExternalBuffer' && typeof value.index === 'number' && typeof value.size === 'number') {
//JSON.parse is sync so we need to return a buffer sync, we will fill the buffer later
const buffer = Buffer.alloc(value.size);
externalBuffers.push({
index: +value.index,
buffer: buffer
});
return buffer;
} else {
return value;
}
}); //read external buffers
yield Promise.all(externalBuffers.map(
/*#__PURE__*/
function () {
var _ref4 = _asyncToGenerator(function* (externalBuffer) {
const fd = yield promisify(fs.open)(path + '-' + +externalBuffer.index + '.bin', 'r');
yield promisify(fs.read)(fd, externalBuffer.buffer, 0, externalBuffer.buffer.length, 0);
yield promisify(fs.close)(fd);
});
return function (_x5) {
return _ref4.apply(this, arguments);
};
}()));
return data;
});
return function (_x4) {
return _ref3.apply(this, arguments);
};
}();
exports.delete =
/*#__PURE__*/
function () {
var _ref5 = _asyncToGenerator(function* (path) {
yield promisify(fs.unlink)(path + '.json'); //delete binary files
try {
for (let i = 0; i < Infinity; i++) {
yield promisify(fs.unlink)(path + '-' + i + '.bin');
}
} catch (err) {
if (err.code === 'ENOENT') {// every binary is deleted, we are done
} else {
throw err;
}
}
});
return function (_x6) {
return _ref5.apply(this, arguments);
};
}();