@alinex/datastore
Version:
Read, work and write data structures from and to differents locations and formats.
41 lines • 1.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.format = exports.parse = void 0;
const path_1 = require("path");
const debug_1 = require("debug");
const vm = require("vm");
const serialize = require("serialize-to-js");
const beautify = require("js-beautify");
const debug = debug_1.default('datastore:format:js');
const parse = function (parsedUri, buffer) {
if (!parsedUri.pathname)
return Promise.reject(`No pathname given in ${parsedUri.href}`);
const pathname = parsedUri.hash || path_1.basename(parsedUri.pathname);
debug(`parsing ${pathname}`);
const content = buffer.toString().replace(/(module.exports\s*=\s*|export\s+default\s+)/, '');
try {
return Promise.resolve(vm.runInNewContext(`x=${content}`));
}
catch (err) {
err.data = buffer.toString();
return Promise.reject(err);
}
;
};
exports.parse = parse;
const format = function (parsedUri, data, options) {
if (!parsedUri.pathname)
return Promise.reject(`No pathname given in ${parsedUri.href}`);
const pathname = parsedUri.hash || path_1.basename(parsedUri.pathname);
debug(`formatting for ${pathname}`);
let content = serialize(data);
const module = ['.mjs', '.ts'].includes(path_1.extname(pathname).toLowerCase())
? 'export default '
: options && options.module
? 'module.exports = '
: '';
content = module + content;
return Promise.resolve(Buffer.from(beautify(content, { indent_size: 2 })));
};
exports.format = format;
//# sourceMappingURL=js.js.map