@ianwalter/peregrin
Version:
Toolkit for converting API Blueprint files to JSON and consuming that JSON
45 lines (41 loc) • 4.67 kB
JavaScript
module.exports = (function () {
function Blueprint(json) {
this.json = json;
}
Blueprint.prototype.find = function find (filter, prop) {
var json = prop ? this.json[prop] : this.json;
if (Number.isInteger(filter)) {
json = json[filter];
} else if (typeof filter === 'string') {
json = json.find(function (o) { return Object.values(o).includes(filter); });
} else if (typeof filter === 'function') {
var values = Array.isArray(json) ? json : Object.values(json);
json = values.find(filter);
}
return new Blueprint(json);
};
Blueprint.prototype.group = function group (filter) {
return this.find(filter);
};
Blueprint.prototype.resource = function resource (filter) {
return this.find(filter, 'resources');
};
Blueprint.prototype.action = function action (filter) {
return this.find(filter, 'actions');
};
Blueprint.prototype.example = function example (filter) {
return this.find(filter, 'examples');
};
Blueprint.prototype.request = function request (filter) {
return this.find(filter, 'requests');
};
Blueprint.prototype.response = function response (filter) {
return this.find(filter, 'responses');
};
Blueprint.prototype.body = function body () {
return JSON.parse(this.json.body);
};
return Blueprint;
}());
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzKG9yaWdpbmFsKSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFBLENBQU8sT0FBUCxDQUFBLENBQUEsQ0FBaUIsTUFBTSxVQUFVO0lBQy9CLFlBQWEsTUFBTTtRQUNqQixJQUFBLENBQUssSUFBTCxDQUFBLENBQUEsQ0FBWTtJQUNoQjtJQUVFLEtBQU0sTUFBUSxFQUFBLE1BQU07UUFFbEIsR0FBQSxDQUFJLE9BQU8sSUFBQSxHQUFPLElBQUEsQ0FBSyxJQUFMLENBQVUsUUFBUSxJQUFBLENBQUs7UUFHekMsSUFBSSxNQUFBLENBQU8sU0FBUCxDQUFpQixTQUFTO1lBQzVCLElBQUEsQ0FBQSxDQUFBLENBQU8sSUFBQSxDQUFLO1FBQ2xCLE9BQVcsSUFBSSxNQUFBLENBQU8sTUFBUCxDQUFBLEdBQUEsQ0FBa0IsVUFBVTtZQUNyQyxJQUFBLENBQUEsQ0FBQSxDQUFPLElBQUEsQ0FBSyxJQUFMLENBQVUsQ0FBQSxJQUFLLE1BQUEsQ0FBTyxNQUFQLENBQWMsRUFBZCxDQUFpQixRQUFqQixDQUEwQjtRQUN0RCxPQUFXLElBQUksTUFBQSxDQUFPLE1BQVAsQ0FBQSxHQUFBLENBQWtCLFlBQVk7WUFDdkMsR0FBQSxDQUFJLFNBQVMsS0FBQSxDQUFNLE9BQU4sQ0FBYyxLQUFkLEdBQXNCLE9BQU8sTUFBQSxDQUFPLE1BQVAsQ0FBYztZQUN4RCxJQUFBLENBQUEsQ0FBQSxDQUFPLE1BQUEsQ0FBTyxJQUFQLENBQVk7UUFDekI7UUFHSSxPQUFPLElBQUksU0FBSixDQUFjO0lBQ3pCO0lBRUUsTUFBTyxRQUFRO1FBQ2IsT0FBTyxJQUFBLENBQUssSUFBTCxDQUFVO0lBQ3JCO0lBRUUsU0FBVSxRQUFRO1FBQ2hCLE9BQU8sSUFBQSxDQUFLLElBQUwsQ0FBVSxRQUFRO0lBQzdCO0lBRUUsT0FBUSxRQUFRO1FBQ2QsT0FBTyxJQUFBLENBQUssSUFBTCxDQUFVLFFBQVE7SUFDN0I7SUFFRSxRQUFTLFFBQVE7UUFDZixPQUFPLElBQUEsQ0FBSyxJQUFMLENBQVUsUUFBUTtJQUM3QjtJQUVFLFFBQVMsUUFBUTtRQUNmLE9BQU8sSUFBQSxDQUFLLElBQUwsQ0FBVSxRQUFRO0lBQzdCO0lBRUUsU0FBVSxRQUFRO1FBQ2hCLE9BQU8sSUFBQSxDQUFLLElBQUwsQ0FBVSxRQUFRO0lBQzdCO0lBRUUsT0FBUTtRQUNOLE9BQU8sSUFBQSxDQUFLLEtBQUwsQ0FBVyxJQUFBLENBQUssSUFBTCxDQUFVO0lBQ2hDO0FBQ0E7QUFsREEiLCJmaWxlIjoiaW5kZXguanMob3JpZ2luYWwpIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBCbHVlcHJpbnQge1xuICBjb25zdHJ1Y3RvciAoanNvbikge1xuICAgIHRoaXMuanNvbiA9IGpzb25cbiAgfVxuXG4gIGZpbmQgKGZpbHRlciwgcHJvcCkge1xuICAgIC8vIEdldCBuYW1lc3BhY2VkIG9yIGN1cnJlbnQgSlNPTiBzY2hlbWEuXG4gICAgbGV0IGpzb24gPSBwcm9wID8gdGhpcy5qc29uW3Byb3BdIDogdGhpcy5qc29uXG5cbiAgICAvLyBGaWx0ZXIgdGhlIEpTT04gc2NoZW1hIHVzaW5nIHRoZSBmaWx0ZXIgcGFyYW1ldGVyLlxuICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGZpbHRlcikpIHtcbiAgICAgIGpzb24gPSBqc29uW2ZpbHRlcl1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBmaWx0ZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICBqc29uID0ganNvbi5maW5kKG8gPT4gT2JqZWN0LnZhbHVlcyhvKS5pbmNsdWRlcyhmaWx0ZXIpKVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpbHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbGV0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkoanNvbikgPyBqc29uIDogT2JqZWN0LnZhbHVlcyhqc29uKVxuICAgICAganNvbiA9IHZhbHVlcy5maW5kKGZpbHRlcilcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gdGhpcyBpbnN0YW5jZSBzbyB1c2VyIGNhbiBjaGFpbiBjYWxscy5cbiAgICByZXR1cm4gbmV3IEJsdWVwcmludChqc29uKVxuICB9XG5cbiAgZ3JvdXAgKGZpbHRlcikge1xuICAgIHJldHVybiB0aGlzLmZpbmQoZmlsdGVyKVxuICB9XG5cbiAgcmVzb3VyY2UgKGZpbHRlcikge1xuICAgIHJldHVybiB0aGlzLmZpbmQoZmlsdGVyLCAncmVzb3VyY2VzJylcbiAgfVxuXG4gIGFjdGlvbiAoZmlsdGVyKSB7XG4gICAgcmV0dXJuIHRoaXMuZmluZChmaWx0ZXIsICdhY3Rpb25zJylcbiAgfVxuXG4gIGV4YW1wbGUgKGZpbHRlcikge1xuICAgIHJldHVybiB0aGlzLmZpbmQoZmlsdGVyLCAnZXhhbXBsZXMnKVxuICB9XG5cbiAgcmVxdWVzdCAoZmlsdGVyKSB7XG4gICAgcmV0dXJuIHRoaXMuZmluZChmaWx0ZXIsICdyZXF1ZXN0cycpXG4gIH1cblxuICByZXNwb25zZSAoZmlsdGVyKSB7XG4gICAgcmV0dXJuIHRoaXMuZmluZChmaWx0ZXIsICdyZXNwb25zZXMnKVxuICB9XG5cbiAgYm9keSAoKSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UodGhpcy5qc29uLmJvZHkpXG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=peregrin.m.js.map