@jsonhero/path
Version:
An easy way to query and filter JSON objects
73 lines (72 loc) • 2.78 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SimpleKeyPathComponent = void 0;
var query_result_1 = require("./query-result");
var SimpleKeyPathComponent = /** @class */ (function () {
function SimpleKeyPathComponent(keyName) {
this.isArray = false;
this.keyName = keyName;
var keyAsInteger = parseInt(this.keyName, 10);
if (isNaN(keyAsInteger)) {
return;
}
var isInteger = Number.isInteger(keyAsInteger);
if (!isInteger) {
return;
}
if (keyAsInteger < 0) {
return;
}
this.isArray = true;
}
SimpleKeyPathComponent.fromString = function (string) {
var keyName = string;
SimpleKeyPathComponent.unescapeExpressions.forEach(function (unescapePair) {
keyName = keyName.replace(unescapePair.search, unescapePair.replacement);
});
return new SimpleKeyPathComponent(keyName);
};
SimpleKeyPathComponent.prototype.toString = function () {
var escapedString = this.keyName;
SimpleKeyPathComponent.escapeExpressions.forEach(function (escapePair) {
escapedString = escapedString.replace(escapePair.search, escapePair.replacement);
});
return escapedString;
};
SimpleKeyPathComponent.prototype.jsonPointer = function () {
var escapedString = this.keyName;
//replace ~ with ~0
escapedString = escapedString.replace(/(\~)/g, '~0');
//replace / with ~1
escapedString = escapedString.replace(/(\/)/g, '~1');
return escapedString;
};
SimpleKeyPathComponent.prototype.query = function (results) {
var newResults = [];
for (var i = 0; i < results.length; i++) {
var result = results[i];
var object = result.object;
if (typeof object !== 'object') {
continue;
}
var newObject = object[this.keyName];
if (newObject === null) {
continue;
}
var newResult = new query_result_1.default(result.depth, result.path.child(this.keyName), newObject);
newResults.push(newResult);
}
return newResults;
};
SimpleKeyPathComponent.escapeExpressions = [
{ search: new RegExp(/(\\)/g), replacement: '\\' },
{ search: new RegExp(/(\.)/g), replacement: '\\.' },
];
SimpleKeyPathComponent.unescapeExpressions = [
{ search: new RegExp(/(\\\.)/g), replacement: '.' },
{ search: new RegExp(/(\\\\)/g), replacement: '\\' },
{ search: '~1', replacement: '/' },
];
return SimpleKeyPathComponent;
}());
exports.SimpleKeyPathComponent = SimpleKeyPathComponent;