UNPKG

@alinex/datastore

Version:

Read, work and write data structures from and to differents locations and formats.

87 lines 2.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.format = exports.parse = exports.formats = void 0; const path_1 = require("path"); const debug_1 = require("debug"); const core_1 = require("@alinex/core"); const debug = debug_1.default('datastore:format'); exports.formats = [ 'bson', 'coffee', 'cson', 'csv', 'html', 'ini', 'js', 'json', 'msgpack', 'properties', 'text', 'binary', 'toml', 'xlsx', 'xls', 'xml', 'yaml' ]; const alias = { htm: 'html', javascript: 'js', mjs: 'mjs', ts: 'js', log: 'text', txt: 'text', yml: 'yaml' }; function detect(pathname) { if (!path_1.extname(pathname)) return null; let ext = path_1.extname(pathname) .replace(/^\./, '') .toLowerCase(); if (alias[ext]) ext = alias[ext]; if (exports.formats.indexOf(ext) !== -1) return ext; return detect(path_1.basename(pathname, path_1.extname(pathname))); } const handler = function (parsedUri, options) { let ext = null; if (options && options.format) { ext = options.format; if (ext) { if (alias[ext]) ext = alias[ext]; if (exports.formats.indexOf(ext) == -1) ext = null; } } else if (parsedUri.hash) { ext = detect(parsedUri.hash.substr(1)); } else { if (!parsedUri.pathname) return Promise.reject(`Missing path in ${parsedUri.href}`); ext = detect(parsedUri.pathname); } if (!ext) { return Promise.reject(new core_1.ExitError(`Could not detect formatter based on file extension of ${parsedUri.pathname}, specify in options.`, 'Possible formats are: ' + exports.formats.join(', '))); } return Promise.resolve().then(() => require(`./${ext}`)); }; exports.parse = async function (parsedUri, buffer, options) { if (debug.enabled) { return handler(parsedUri, options).then(mod => mod.parse(parsedUri, buffer, options).then(data => { debug('got data:', data); return data; })); } return handler(parsedUri, options).then(mod => mod.parse(parsedUri, buffer, options)); }; exports.format = async function (parsedUri, data, options) { if (!parsedUri.pathname) throw new Error('No pathname given in URI'); return handler(parsedUri, options).then(mod => mod.format(parsedUri, data, options)); }; exports.default = { parse: exports.parse, format: exports.format }; //# sourceMappingURL=index.js.map