UNPKG

@alinex/datastore

Version:

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

57 lines 1.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.format = exports.parse = void 0; const path_1 = require("path"); const debug_1 = require("debug"); const moment = require("moment"); const CSON = require("cson-parser"); const debug = debug_1.default('datastore:format:cson'); function cast(obj) { // @ts-ignore const defaultFallback = moment.createFromInputFallback; // @ts-ignore moment.createFromInputFallback = function (config) { config._d = new Date(NaN); }; if (typeof obj !== 'object') return obj; Object.keys(obj).forEach(key => { if (typeof obj[key] == 'string') { // string -> date const d = moment(obj[key]); if (d.isValid()) obj[key] = d.toDate(); } else if (typeof obj[key] == 'object' && obj[key]) { // go deeper cast(obj[key]); } }); // @ts-ignore moment.createFromInputFallback = defaultFallback; return obj; } 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}`); try { return Promise.resolve(cast(CSON.parse(buffer.toString()))); } catch (err) { err.data = buffer.toString(); return Promise.reject(err); } ; }; exports.parse = parse; const format = function (parsedUri, data) { 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}`); return Promise.resolve(Buffer.from(CSON.stringify(data, null, 4))); }; exports.format = format; //# sourceMappingURL=cson.js.map