@alinex/datastore
Version:
Read, work and write data structures from and to differents locations and formats.
52 lines • 1.82 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 flat = require("flat");
const properties = require("properties");
const Format = require("./index");
const debug = debug_1.default('datastore:format:properties');
function preformat(obj) {
if (typeof obj !== 'object')
return obj;
Object.keys(obj).forEach(key => {
if (obj[key] instanceof Date) {
obj[key] = obj[key].toISOString();
}
else if (typeof obj[key] == 'object' && obj[key]) {
obj[key] = preformat(Object.assign({}, obj[key]));
}
});
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(Format.cast(flat.unflatten(properties.parse(buffer.toString(), {
sections: true,
namespaces: true,
variables: true
})), 'date', 'array'));
}
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(properties.stringify(flat.flatten(preformat(Object.assign({}, data))), {
unicode: true
})));
};
exports.format = format;
//# sourceMappingURL=properties.js.map