ts-neo4j-parser
Version:
Typescript Neo4j parser to JSON
112 lines • 7.64 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.JsonParser = void 0;
const IntegerUtils_1 = require("../transformation/IntegerUtils");
/**
* JsonParser For Neo4j
*
* @export
* @class JsonParser
*/
class JsonParser {
/**
* Parse the neo4j query result
*
* @static
* @param {QueryResult} neo4jResult
* @return {*} {*}
* @memberof JsonParser
*/
static parse(neo4jResult) {
try {
return JsonParser.parseNeo4jResponse(neo4jResult);
}
catch (error) {
throw new Error(`Parse error: ${error.message}`);
}
}
static *keyValues(obj) {
for (const key of Object.keys(obj)) {
yield [key, obj[key]];
}
}
static *enumerate(array) {
let index = 0;
for (const element of array) {
yield [index, element];
index++;
}
}
static hasProperties(obj) {
return obj.properties && obj.identity && typeof obj.identity.low === 'number';
}
/**
* Parse individual record
*
* @static
* @param {*} record
* @return {*} {*}
* @memberof JsonParser
*/
static parseRecord(record) {
// If undefined or value
if (!record || typeof record !== 'object') {
return record;
}
else if (Object.keys(record).length === 2 && typeof record.low === 'number' && typeof record.high === 'number') {
// If it's a number
if ((record.high === 0 && record.low >= 0) || (record.high === -1 && record.low < 0)) {
return record.low;
}
else {
return IntegerUtils_1.IntegerUtils.to64BitsIntegerString(record.high, record.low);
}
}
else if (typeof record['0'] !== 'undefined') {
// If it's an array
const result = [];
let index = 0;
let current = record['0'];
while (typeof current !== 'undefined') {
result.push(JsonParser.parseRecord(current));
index++;
current = record[String(index)];
}
return result;
}
else {
// It's an object by this point
const properties = JsonParser.hasProperties(record) ? record.properties : record;
if (!record.identity && Object.keys(properties).length === 0) {
return [];
}
const result = {};
if (record.identity) {
result.id = JsonParser.parseRecord(record.identity);
}
for (let [key, value] of JsonParser.keyValues(properties)) {
value = JsonParser.parseRecord(value);
result[key] = value;
}
return result;
}
}
static parseNeo4jResponse(response) {
const result = [];
for (const record of response.records) {
if (record.length === 1) {
result.push(JsonParser.parseRecord(record._fields[0]));
}
else {
const parsedRecord = {};
for (const [index, key] of JsonParser.enumerate(record.keys)) {
parsedRecord[key] = JsonParser.parseRecord(record._fields[index]);
}
result.push(parsedRecord);
}
}
return result;
}
}
exports.JsonParser = JsonParser;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSnNvblBhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXJzZXIvSnNvblBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpRUFBOEQ7QUFHOUQ7Ozs7O0dBS0c7QUFDSCxNQUFhLFVBQVU7SUFDckI7Ozs7Ozs7T0FPRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBd0I7UUFDMUMsSUFBSTtZQUNGLE9BQU8sVUFBVSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ25EO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztTQUNsRDtJQUNILENBQUM7SUFFTyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBTztRQUMvQixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDbEMsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBZSxDQUFDLENBQUMsQ0FBQztTQUNuQztJQUNILENBQUM7SUFFTyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBWTtRQUNwQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxLQUFLLE1BQU0sT0FBTyxJQUFJLEtBQUssRUFBRTtZQUMzQixNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZCLEtBQUssRUFBRSxDQUFDO1NBQ1Q7SUFDSCxDQUFDO0lBRU8sTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFRO1FBQ25DLE9BQU8sR0FBRyxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUMsUUFBUSxJQUFJLE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDO0lBQ2hGLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksTUFBTSxDQUFDLFdBQVcsQ0FBQyxN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