Last active
March 31, 2024 13:54
-
-
Save stu43005/1dd84a8de1d6c4ae33715591d7d928cd to your computer and use it in GitHub Desktop.
Prometheus data parser
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module.exports = // @generated by Peggy 4.0.2. | |
// | |
// https://peggyjs.org/ | |
(function() { | |
"use strict"; | |
function peg$subclass(child, parent) { | |
function C() { this.constructor = child; } | |
C.prototype = parent.prototype; | |
child.prototype = new C(); | |
} | |
function peg$SyntaxError(message, expected, found, location) { | |
var self = Error.call(this, message); | |
// istanbul ignore next Check is a necessary evil to support older environments | |
if (Object.setPrototypeOf) { | |
Object.setPrototypeOf(self, peg$SyntaxError.prototype); | |
} | |
self.expected = expected; | |
self.found = found; | |
self.location = location; | |
self.name = "SyntaxError"; | |
return self; | |
} | |
peg$subclass(peg$SyntaxError, Error); | |
function peg$padEnd(str, targetLength, padString) { | |
padString = padString || " "; | |
if (str.length > targetLength) { return str; } | |
targetLength -= str.length; | |
padString += padString.repeat(targetLength); | |
return str + padString.slice(0, targetLength); | |
} | |
peg$SyntaxError.prototype.format = function(sources) { | |
var str = "Error: " + this.message; | |
if (this.location) { | |
var src = null; | |
var k; | |
for (k = 0; k < sources.length; k++) { | |
if (sources[k].source === this.location.source) { | |
src = sources[k].text.split(/\r\n|\n|\r/g); | |
break; | |
} | |
} | |
var s = this.location.start; | |
var offset_s = (this.location.source && (typeof this.location.source.offset === "function")) | |
? this.location.source.offset(s) | |
: s; | |
var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column; | |
if (src) { | |
var e = this.location.end; | |
var filler = peg$padEnd("", offset_s.line.toString().length, ' '); | |
var line = src[s.line - 1]; | |
var last = s.line === e.line ? e.column : line.length + 1; | |
var hatLen = (last - s.column) || 1; | |
str += "\n --> " + loc + "\n" | |
+ filler + " |\n" | |
+ offset_s.line + " | " + line + "\n" | |
+ filler + " | " + peg$padEnd("", s.column - 1, ' ') | |
+ peg$padEnd("", hatLen, "^"); | |
} else { | |
str += "\n at " + loc; | |
} | |
} | |
return str; | |
}; | |
peg$SyntaxError.buildMessage = function(expected, found) { | |
var DESCRIBE_EXPECTATION_FNS = { | |
literal: function(expectation) { | |
return "\"" + literalEscape(expectation.text) + "\""; | |
}, | |
class: function(expectation) { | |
var escapedParts = expectation.parts.map(function(part) { | |
return Array.isArray(part) | |
? classEscape(part[0]) + "-" + classEscape(part[1]) | |
: classEscape(part); | |
}); | |
return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; | |
}, | |
any: function() { | |
return "any character"; | |
}, | |
end: function() { | |
return "end of input"; | |
}, | |
other: function(expectation) { | |
return expectation.description; | |
} | |
}; | |
function hex(ch) { | |
return ch.charCodeAt(0).toString(16).toUpperCase(); | |
} | |
function literalEscape(s) { | |
return s | |
.replace(/\\/g, "\\\\") | |
.replace(/"/g, "\\\"") | |
.replace(/\0/g, "\\0") | |
.replace(/\t/g, "\\t") | |
.replace(/\n/g, "\\n") | |
.replace(/\r/g, "\\r") | |
.replace(/[\x00-\x0F]/g, function(ch) { return "\\x0" + hex(ch); }) | |
.replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { return "\\x" + hex(ch); }); | |
} | |
function classEscape(s) { | |
return s | |
.replace(/\\/g, "\\\\") | |
.replace(/\]/g, "\\]") | |
.replace(/\^/g, "\\^") | |
.replace(/-/g, "\\-") | |
.replace(/\0/g, "\\0") | |
.replace(/\t/g, "\\t") | |
.replace(/\n/g, "\\n") | |
.replace(/\r/g, "\\r") | |
.replace(/[\x00-\x0F]/g, function(ch) { return "\\x0" + hex(ch); }) | |
.replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { return "\\x" + hex(ch); }); | |
} | |
function describeExpectation(expectation) { | |
return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); | |
} | |
function describeExpected(expected) { | |
var descriptions = expected.map(describeExpectation); | |
var i, j; | |
descriptions.sort(); | |
if (descriptions.length > 0) { | |
for (i = 1, j = 1; i < descriptions.length; i++) { | |
if (descriptions[i - 1] !== descriptions[i]) { | |
descriptions[j] = descriptions[i]; | |
j++; | |
} | |
} | |
descriptions.length = j; | |
} | |
switch (descriptions.length) { | |
case 1: | |
return descriptions[0]; | |
case 2: | |
return descriptions[0] + " or " + descriptions[1]; | |
default: | |
return descriptions.slice(0, -1).join(", ") | |
+ ", or " | |
+ descriptions[descriptions.length - 1]; | |
} | |
} | |
function describeFound(found) { | |
return found ? "\"" + literalEscape(found) + "\"" : "end of input"; | |
} | |
return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; | |
}; | |
function peg$parse(input, options) { | |
options = options !== undefined ? options : {}; | |
var peg$FAILED = {}; | |
var peg$source = options.grammarSource; | |
var peg$startRuleFunctions = { Metrics: peg$parseMetrics }; | |
var peg$startRuleFunction = peg$parseMetrics; | |
var peg$c0 = "\n"; | |
var peg$c1 = "\n\n"; | |
var peg$c2 = "# HELP "; | |
var peg$c3 = " "; | |
var peg$c4 = "# TYPE "; | |
var peg$c5 = "{"; | |
var peg$c6 = ","; | |
var peg$c7 = "}"; | |
var peg$c8 = "=\""; | |
var peg$c9 = "\\"; | |
var peg$c10 = "\""; | |
var peg$c11 = "Nan"; | |
var peg$c12 = "-Inf"; | |
var peg$c13 = "+Inf"; | |
var peg$r0 = /^[^\n]/; | |
var peg$r1 = /^[a-z]/i; | |
var peg$r2 = /^[^\\"]/; | |
var peg$r3 = /^[a-zA-Z_:]/; | |
var peg$r4 = /^[a-zA-Z0-9_:]/; | |
var peg$r5 = /^[a-zA-Z_]/; | |
var peg$r6 = /^[a-zA-Z0-9_]/; | |
var peg$r7 = /^[0-9.]/; | |
var peg$e0 = peg$literalExpectation("\n", false); | |
var peg$e1 = peg$literalExpectation("\n\n", false); | |
var peg$e2 = peg$literalExpectation("# HELP ", false); | |
var peg$e3 = peg$literalExpectation(" ", false); | |
var peg$e4 = peg$classExpectation(["\n"], true, false); | |
var peg$e5 = peg$literalExpectation("# TYPE ", false); | |
var peg$e6 = peg$classExpectation([["a", "z"]], false, true); | |
var peg$e7 = peg$literalExpectation("{", false); | |
var peg$e8 = peg$literalExpectation(",", false); | |
var peg$e9 = peg$literalExpectation("}", false); | |
var peg$e10 = peg$literalExpectation("=\"", false); | |
var peg$e11 = peg$literalExpectation("\\", false); | |
var peg$e12 = peg$anyExpectation(); | |
var peg$e13 = peg$classExpectation(["\\", "\""], true, false); | |
var peg$e14 = peg$literalExpectation("\"", false); | |
var peg$e15 = peg$otherExpectation("metric name"); | |
var peg$e16 = peg$classExpectation([["a", "z"], ["A", "Z"], "_", ":"], false, false); | |
var peg$e17 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"], "_", ":"], false, false); | |
var peg$e18 = peg$otherExpectation("label name"); | |
var peg$e19 = peg$classExpectation([["a", "z"], ["A", "Z"], "_"], false, false); | |
var peg$e20 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"], "_"], false, false); | |
var peg$e21 = peg$otherExpectation("number"); | |
var peg$e22 = peg$classExpectation([["0", "9"], "."], false, false); | |
var peg$e23 = peg$literalExpectation("Nan", false); | |
var peg$e24 = peg$literalExpectation("-Inf", false); | |
var peg$e25 = peg$literalExpectation("+Inf", false); | |
var peg$f0 = function(help, type, values) { return { help, type, values }; }; | |
var peg$f1 = function(name, help) { return { name, help }; }; | |
var peg$f2 = function(name, type) { return { name, type }; }; | |
var peg$f3 = function(name, labels, value) { return { name, labels, value }; }; | |
var peg$f4 = function() { return []; }; | |
var peg$f5 = function(name, value) { return { name, value }; }; | |
var peg$f6 = function(digits) { return parseFloat(digits); }; | |
var peg$f7 = function() { return NaN; }; | |
var peg$f8 = function() { return -Infinity; }; | |
var peg$f9 = function() { return +Infinity; }; | |
var peg$currPos = options.peg$currPos | 0; | |
var peg$savedPos = peg$currPos; | |
var peg$posDetailsCache = [{ line: 1, column: 1 }]; | |
var peg$maxFailPos = peg$currPos; | |
var peg$maxFailExpected = options.peg$maxFailExpected || []; | |
var peg$silentFails = options.peg$silentFails | 0; | |
var peg$result; | |
if (options.startRule) { | |
if (!(options.startRule in peg$startRuleFunctions)) { | |
throw new Error("Can't start parsing from rule \"" + options.startRule + "\"."); | |
} | |
peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; | |
} | |
function text() { | |
return input.substring(peg$savedPos, peg$currPos); | |
} | |
function offset() { | |
return peg$savedPos; | |
} | |
function range() { | |
return { | |
source: peg$source, | |
start: peg$savedPos, | |
end: peg$currPos | |
}; | |
} | |
function location() { | |
return peg$computeLocation(peg$savedPos, peg$currPos); | |
} | |
function expected(description, location) { | |
location = location !== undefined | |
? location | |
: peg$computeLocation(peg$savedPos, peg$currPos); | |
throw peg$buildStructuredError( | |
[peg$otherExpectation(description)], | |
input.substring(peg$savedPos, peg$currPos), | |
location | |
); | |
} | |
function error(message, location) { | |
location = location !== undefined | |
? location | |
: peg$computeLocation(peg$savedPos, peg$currPos); | |
throw peg$buildSimpleError(message, location); | |
} | |
function peg$literalExpectation(text, ignoreCase) { | |
return { type: "literal", text: text, ignoreCase: ignoreCase }; | |
} | |
function peg$classExpectation(parts, inverted, ignoreCase) { | |
return { type: "class", parts: parts, inverted: inverted, ignoreCase: ignoreCase }; | |
} | |
function peg$anyExpectation() { | |
return { type: "any" }; | |
} | |
function peg$endExpectation() { | |
return { type: "end" }; | |
} | |
function peg$otherExpectation(description) { | |
return { type: "other", description: description }; | |
} | |
function peg$computePosDetails(pos) { | |
var details = peg$posDetailsCache[pos]; | |
var p; | |
if (details) { | |
return details; | |
} else { | |
if (pos >= peg$posDetailsCache.length) { | |
p = peg$posDetailsCache.length - 1; | |
} else { | |
p = pos; | |
while (!peg$posDetailsCache[--p]) {} | |
} | |
details = peg$posDetailsCache[p]; | |
details = { | |
line: details.line, | |
column: details.column | |
}; | |
while (p < pos) { | |
if (input.charCodeAt(p) === 10) { | |
details.line++; | |
details.column = 1; | |
} else { | |
details.column++; | |
} | |
p++; | |
} | |
peg$posDetailsCache[pos] = details; | |
return details; | |
} | |
} | |
function peg$computeLocation(startPos, endPos, offset) { | |
var startPosDetails = peg$computePosDetails(startPos); | |
var endPosDetails = peg$computePosDetails(endPos); | |
var res = { | |
source: peg$source, | |
start: { | |
offset: startPos, | |
line: startPosDetails.line, | |
column: startPosDetails.column | |
}, | |
end: { | |
offset: endPos, | |
line: endPosDetails.line, | |
column: endPosDetails.column | |
} | |
}; | |
if (offset && peg$source && (typeof peg$source.offset === "function")) { | |
res.start = peg$source.offset(res.start); | |
res.end = peg$source.offset(res.end); | |
} | |
return res; | |
} | |
function peg$fail(expected) { | |
if (peg$currPos < peg$maxFailPos) { return; } | |
if (peg$currPos > peg$maxFailPos) { | |
peg$maxFailPos = peg$currPos; | |
peg$maxFailExpected = []; | |
} | |
peg$maxFailExpected.push(expected); | |
} | |
function peg$buildSimpleError(message, location) { | |
return new peg$SyntaxError(message, null, null, location); | |
} | |
function peg$buildStructuredError(expected, found, location) { | |
return new peg$SyntaxError( | |
peg$SyntaxError.buildMessage(expected, found), | |
expected, | |
found, | |
location | |
); | |
} | |
function peg$parseMetrics() { | |
var s0, s1, s2, s3, s4; | |
s0 = peg$currPos; | |
s1 = []; | |
if (input.charCodeAt(peg$currPos) === 10) { | |
s2 = peg$c0; | |
peg$currPos++; | |
} else { | |
s2 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e0); } | |
} | |
while (s2 !== peg$FAILED) { | |
s1.push(s2); | |
if (input.charCodeAt(peg$currPos) === 10) { | |
s2 = peg$c0; | |
peg$currPos++; | |
} else { | |
s2 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e0); } | |
} | |
} | |
s2 = []; | |
s3 = peg$parseMetric(); | |
while (s3 !== peg$FAILED) { | |
s2.push(s3); | |
s3 = peg$currPos; | |
if (input.substr(peg$currPos, 2) === peg$c1) { | |
s4 = peg$c1; | |
peg$currPos += 2; | |
} else { | |
s4 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e1); } | |
} | |
if (s4 !== peg$FAILED) { | |
s4 = peg$parseMetric(); | |
if (s4 === peg$FAILED) { | |
peg$currPos = s3; | |
s3 = peg$FAILED; | |
} else { | |
s3 = s4; | |
} | |
} else { | |
s3 = s4; | |
} | |
} | |
s3 = []; | |
if (input.charCodeAt(peg$currPos) === 10) { | |
s4 = peg$c0; | |
peg$currPos++; | |
} else { | |
s4 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e0); } | |
} | |
while (s4 !== peg$FAILED) { | |
s3.push(s4); | |
if (input.charCodeAt(peg$currPos) === 10) { | |
s4 = peg$c0; | |
peg$currPos++; | |
} else { | |
s4 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e0); } | |
} | |
} | |
s0 = s2; | |
return s0; | |
} | |
function peg$parseMetric() { | |
var s0, s1, s2, s3, s4, s5, s6, s7; | |
s0 = peg$currPos; | |
s1 = peg$parseHelp(); | |
if (s1 !== peg$FAILED) { | |
if (input.charCodeAt(peg$currPos) === 10) { | |
s2 = peg$c0; | |
peg$currPos++; | |
} else { | |
s2 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e0); } | |
} | |
if (s2 !== peg$FAILED) { | |
s3 = peg$parseType(); | |
if (s3 !== peg$FAILED) { | |
s4 = []; | |
s5 = peg$currPos; | |
if (input.charCodeAt(peg$currPos) === 10) { | |
s6 = peg$c0; | |
peg$currPos++; | |
} else { | |
s6 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e0); } | |
} | |
if (s6 !== peg$FAILED) { | |
s7 = peg$parseValue(); | |
if (s7 !== peg$FAILED) { | |
s5 = s7; | |
} else { | |
peg$currPos = s5; | |
s5 = peg$FAILED; | |
} | |
} else { | |
peg$currPos = s5; | |
s5 = peg$FAILED; | |
} | |
while (s5 !== peg$FAILED) { | |
s4.push(s5); | |
s5 = peg$currPos; | |
if (input.charCodeAt(peg$currPos) === 10) { | |
s6 = peg$c0; | |
peg$currPos++; | |
} else { | |
s6 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e0); } | |
} | |
if (s6 !== peg$FAILED) { | |
s7 = peg$parseValue(); | |
if (s7 !== peg$FAILED) { | |
s5 = s7; | |
} else { | |
peg$currPos = s5; | |
s5 = peg$FAILED; | |
} | |
} else { | |
peg$currPos = s5; | |
s5 = peg$FAILED; | |
} | |
} | |
peg$savedPos = s0; | |
s0 = peg$f0(s1, s3, s4); | |
} else { | |
peg$currPos = s0; | |
s0 = peg$FAILED; | |
} | |
} else { | |
peg$currPos = s0; | |
s0 = peg$FAILED; | |
} | |
} else { | |
peg$currPos = s0; | |
s0 = peg$FAILED; | |
} | |
return s0; | |
} | |
function peg$parseHelp() { | |
var s0, s1, s2, s3, s4, s5, s6; | |
s0 = peg$currPos; | |
if (input.substr(peg$currPos, 7) === peg$c2) { | |
s1 = peg$c2; | |
peg$currPos += 7; | |
} else { | |
s1 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e2); } | |
} | |
if (s1 !== peg$FAILED) { | |
s2 = peg$parsename(); | |
if (s2 !== peg$FAILED) { | |
if (input.charCodeAt(peg$currPos) === 32) { | |
s3 = peg$c3; | |
peg$currPos++; | |
} else { | |
s3 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e3); } | |
} | |
if (s3 !== peg$FAILED) { | |
s4 = peg$currPos; | |
s5 = []; | |
s6 = input.charAt(peg$currPos); | |
if (peg$r0.test(s6)) { | |
peg$currPos++; | |
} else { | |
s6 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e4); } | |
} | |
while (s6 !== peg$FAILED) { | |
s5.push(s6); | |
s6 = input.charAt(peg$currPos); | |
if (peg$r0.test(s6)) { | |
peg$currPos++; | |
} else { | |
s6 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e4); } | |
} | |
} | |
s4 = input.substring(s4, peg$currPos); | |
peg$savedPos = s0; | |
s0 = peg$f1(s2, s4); | |
} else { | |
peg$currPos = s0; | |
s0 = peg$FAILED; | |
} | |
} else { | |
peg$currPos = s0; | |
s0 = peg$FAILED; | |
} | |
} else { | |
peg$currPos = s0; | |
s0 = peg$FAILED; | |
} | |
return s0; | |
} | |
function peg$parseType() { | |
var s0, s1, s2, s3, s4, s5, s6; | |
s0 = peg$currPos; | |
if (input.substr(peg$currPos, 7) === peg$c4) { | |
s1 = peg$c4; | |
peg$currPos += 7; | |
} else { | |
s1 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e5); } | |
} | |
if (s1 !== peg$FAILED) { | |
s2 = peg$parsename(); | |
if (s2 !== peg$FAILED) { | |
if (input.charCodeAt(peg$currPos) === 32) { | |
s3 = peg$c3; | |
peg$currPos++; | |
} else { | |
s3 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e3); } | |
} | |
if (s3 !== peg$FAILED) { | |
s4 = peg$currPos; | |
s5 = []; | |
s6 = input.charAt(peg$currPos); | |
if (peg$r1.test(s6)) { | |
peg$currPos++; | |
} else { | |
s6 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e6); } | |
} | |
if (s6 !== peg$FAILED) { | |
while (s6 !== peg$FAILED) { | |
s5.push(s6); | |
s6 = input.charAt(peg$currPos); | |
if (peg$r1.test(s6)) { | |
peg$currPos++; | |
} else { | |
s6 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e6); } | |
} | |
} | |
} else { | |
s5 = peg$FAILED; | |
} | |
if (s5 !== peg$FAILED) { | |
s4 = input.substring(s4, peg$currPos); | |
} else { | |
s4 = s5; | |
} | |
if (s4 !== peg$FAILED) { | |
peg$savedPos = s0; | |
s0 = peg$f2(s2, s4); | |
} else { | |
peg$currPos = s0; | |
s0 = peg$FAILED; | |
} | |
} else { | |
peg$currPos = s0; | |
s0 = peg$FAILED; | |
} | |
} else { | |
peg$currPos = s0; | |
s0 = peg$FAILED; | |
} | |
} else { | |
peg$currPos = s0; | |
s0 = peg$FAILED; | |
} | |
return s0; | |
} | |
function peg$parseValue() { | |
var s0, s1, s2, s3, s4; | |
s0 = peg$currPos; | |
s1 = peg$parsename(); | |
if (s1 !== peg$FAILED) { | |
s2 = peg$parseLabels(); | |
if (s2 !== peg$FAILED) { | |
if (input.charCodeAt(peg$currPos) === 32) { | |
s3 = peg$c3; | |
peg$currPos++; | |
} else { | |
s3 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e3); } | |
} | |
if (s3 !== peg$FAILED) { | |
s4 = peg$parseinteger(); | |
if (s4 !== peg$FAILED) { | |
peg$savedPos = s0; | |
s0 = peg$f3(s1, s2, s4); | |
} else { | |
peg$currPos = s0; | |
s0 = peg$FAILED; | |
} | |
} else { | |
peg$currPos = s0; | |
s0 = peg$FAILED; | |
} | |
} else { | |
peg$currPos = s0; | |
s0 = peg$FAILED; | |
} | |
} else { | |
peg$currPos = s0; | |
s0 = peg$FAILED; | |
} | |
return s0; | |
} | |
function peg$parseLabels() { | |
var s0, s1, s2, s3, s4, s5; | |
s0 = peg$currPos; | |
if (input.charCodeAt(peg$currPos) === 123) { | |
s1 = peg$c5; | |
peg$currPos++; | |
} else { | |
s1 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e7); } | |
} | |
if (s1 !== peg$FAILED) { | |
s2 = peg$currPos; | |
s3 = []; | |
s4 = peg$parseLabel(); | |
while (s4 !== peg$FAILED) { | |
s3.push(s4); | |
s4 = peg$currPos; | |
if (input.charCodeAt(peg$currPos) === 44) { | |
s5 = peg$c6; | |
peg$currPos++; | |
} else { | |
s5 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e8); } | |
} | |
if (s5 !== peg$FAILED) { | |
s5 = peg$parseLabel(); | |
if (s5 === peg$FAILED) { | |
peg$currPos = s4; | |
s4 = peg$FAILED; | |
} else { | |
s4 = s5; | |
} | |
} else { | |
s4 = s5; | |
} | |
} | |
if (s3.length < 1) { | |
peg$currPos = s2; | |
s2 = peg$FAILED; | |
} else { | |
s2 = s3; | |
} | |
if (s2 !== peg$FAILED) { | |
if (input.charCodeAt(peg$currPos) === 125) { | |
s3 = peg$c7; | |
peg$currPos++; | |
} else { | |
s3 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e9); } | |
} | |
if (s3 !== peg$FAILED) { | |
s0 = s2; | |
} else { | |
peg$currPos = s0; | |
s0 = peg$FAILED; | |
} | |
} else { | |
peg$currPos = s0; | |
s0 = peg$FAILED; | |
} | |
} else { | |
peg$currPos = s0; | |
s0 = peg$FAILED; | |
} | |
if (s0 === peg$FAILED) { | |
s0 = peg$currPos; | |
s1 = ''; | |
peg$savedPos = s0; | |
s1 = peg$f4(); | |
s0 = s1; | |
} | |
return s0; | |
} | |
function peg$parseLabel() { | |
var s0, s1, s2, s3, s4, s5, s6, s7; | |
s0 = peg$currPos; | |
s1 = peg$parselabelName(); | |
if (s1 !== peg$FAILED) { | |
if (input.substr(peg$currPos, 2) === peg$c8) { | |
s2 = peg$c8; | |
peg$currPos += 2; | |
} else { | |
s2 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e10); } | |
} | |
if (s2 !== peg$FAILED) { | |
s3 = peg$currPos; | |
s4 = []; | |
s5 = peg$currPos; | |
if (input.charCodeAt(peg$currPos) === 92) { | |
s6 = peg$c9; | |
peg$currPos++; | |
} else { | |
s6 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e11); } | |
} | |
if (s6 !== peg$FAILED) { | |
if (input.length > peg$currPos) { | |
s7 = input.charAt(peg$currPos); | |
peg$currPos++; | |
} else { | |
s7 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e12); } | |
} | |
if (s7 !== peg$FAILED) { | |
s6 = [s6, s7]; | |
s5 = s6; | |
} else { | |
peg$currPos = s5; | |
s5 = peg$FAILED; | |
} | |
} else { | |
peg$currPos = s5; | |
s5 = peg$FAILED; | |
} | |
if (s5 === peg$FAILED) { | |
s5 = input.charAt(peg$currPos); | |
if (peg$r2.test(s5)) { | |
peg$currPos++; | |
} else { | |
s5 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e13); } | |
} | |
} | |
while (s5 !== peg$FAILED) { | |
s4.push(s5); | |
s5 = peg$currPos; | |
if (input.charCodeAt(peg$currPos) === 92) { | |
s6 = peg$c9; | |
peg$currPos++; | |
} else { | |
s6 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e11); } | |
} | |
if (s6 !== peg$FAILED) { | |
if (input.length > peg$currPos) { | |
s7 = input.charAt(peg$currPos); | |
peg$currPos++; | |
} else { | |
s7 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e12); } | |
} | |
if (s7 !== peg$FAILED) { | |
s6 = [s6, s7]; | |
s5 = s6; | |
} else { | |
peg$currPos = s5; | |
s5 = peg$FAILED; | |
} | |
} else { | |
peg$currPos = s5; | |
s5 = peg$FAILED; | |
} | |
if (s5 === peg$FAILED) { | |
s5 = input.charAt(peg$currPos); | |
if (peg$r2.test(s5)) { | |
peg$currPos++; | |
} else { | |
s5 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e13); } | |
} | |
} | |
} | |
s3 = input.substring(s3, peg$currPos); | |
if (input.charCodeAt(peg$currPos) === 34) { | |
s4 = peg$c10; | |
peg$currPos++; | |
} else { | |
s4 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e14); } | |
} | |
if (s4 !== peg$FAILED) { | |
peg$savedPos = s0; | |
s0 = peg$f5(s1, s3); | |
} else { | |
peg$currPos = s0; | |
s0 = peg$FAILED; | |
} | |
} else { | |
peg$currPos = s0; | |
s0 = peg$FAILED; | |
} | |
} else { | |
peg$currPos = s0; | |
s0 = peg$FAILED; | |
} | |
return s0; | |
} | |
function peg$parsename() { | |
var s0, s1, s2, s3, s4; | |
peg$silentFails++; | |
s0 = peg$currPos; | |
s1 = peg$currPos; | |
s2 = input.charAt(peg$currPos); | |
if (peg$r3.test(s2)) { | |
peg$currPos++; | |
} else { | |
s2 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e16); } | |
} | |
if (s2 !== peg$FAILED) { | |
s3 = []; | |
s4 = input.charAt(peg$currPos); | |
if (peg$r4.test(s4)) { | |
peg$currPos++; | |
} else { | |
s4 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e17); } | |
} | |
while (s4 !== peg$FAILED) { | |
s3.push(s4); | |
s4 = input.charAt(peg$currPos); | |
if (peg$r4.test(s4)) { | |
peg$currPos++; | |
} else { | |
s4 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e17); } | |
} | |
} | |
s2 = [s2, s3]; | |
s1 = s2; | |
} else { | |
peg$currPos = s1; | |
s1 = peg$FAILED; | |
} | |
if (s1 !== peg$FAILED) { | |
s0 = input.substring(s0, peg$currPos); | |
} else { | |
s0 = s1; | |
} | |
peg$silentFails--; | |
if (s0 === peg$FAILED) { | |
s1 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e15); } | |
} | |
return s0; | |
} | |
function peg$parselabelName() { | |
var s0, s1, s2, s3, s4; | |
peg$silentFails++; | |
s0 = peg$currPos; | |
s1 = peg$currPos; | |
s2 = input.charAt(peg$currPos); | |
if (peg$r5.test(s2)) { | |
peg$currPos++; | |
} else { | |
s2 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e19); } | |
} | |
if (s2 !== peg$FAILED) { | |
s3 = []; | |
s4 = input.charAt(peg$currPos); | |
if (peg$r6.test(s4)) { | |
peg$currPos++; | |
} else { | |
s4 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e20); } | |
} | |
while (s4 !== peg$FAILED) { | |
s3.push(s4); | |
s4 = input.charAt(peg$currPos); | |
if (peg$r6.test(s4)) { | |
peg$currPos++; | |
} else { | |
s4 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e20); } | |
} | |
} | |
s2 = [s2, s3]; | |
s1 = s2; | |
} else { | |
peg$currPos = s1; | |
s1 = peg$FAILED; | |
} | |
if (s1 !== peg$FAILED) { | |
s0 = input.substring(s0, peg$currPos); | |
} else { | |
s0 = s1; | |
} | |
peg$silentFails--; | |
if (s0 === peg$FAILED) { | |
s1 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e18); } | |
} | |
return s0; | |
} | |
function peg$parseinteger() { | |
var s0, s1, s2, s3; | |
peg$silentFails++; | |
s0 = peg$currPos; | |
s1 = peg$currPos; | |
s2 = []; | |
s3 = input.charAt(peg$currPos); | |
if (peg$r7.test(s3)) { | |
peg$currPos++; | |
} else { | |
s3 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e22); } | |
} | |
if (s3 !== peg$FAILED) { | |
while (s3 !== peg$FAILED) { | |
s2.push(s3); | |
s3 = input.charAt(peg$currPos); | |
if (peg$r7.test(s3)) { | |
peg$currPos++; | |
} else { | |
s3 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e22); } | |
} | |
} | |
} else { | |
s2 = peg$FAILED; | |
} | |
if (s2 !== peg$FAILED) { | |
s1 = input.substring(s1, peg$currPos); | |
} else { | |
s1 = s2; | |
} | |
if (s1 !== peg$FAILED) { | |
peg$savedPos = s0; | |
s1 = peg$f6(s1); | |
} | |
s0 = s1; | |
if (s0 === peg$FAILED) { | |
s0 = peg$currPos; | |
if (input.substr(peg$currPos, 3) === peg$c11) { | |
s1 = peg$c11; | |
peg$currPos += 3; | |
} else { | |
s1 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e23); } | |
} | |
if (s1 !== peg$FAILED) { | |
peg$savedPos = s0; | |
s1 = peg$f7(); | |
} | |
s0 = s1; | |
if (s0 === peg$FAILED) { | |
s0 = peg$currPos; | |
if (input.substr(peg$currPos, 4) === peg$c12) { | |
s1 = peg$c12; | |
peg$currPos += 4; | |
} else { | |
s1 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e24); } | |
} | |
if (s1 !== peg$FAILED) { | |
peg$savedPos = s0; | |
s1 = peg$f8(); | |
} | |
s0 = s1; | |
if (s0 === peg$FAILED) { | |
s0 = peg$currPos; | |
if (input.substr(peg$currPos, 4) === peg$c13) { | |
s1 = peg$c13; | |
peg$currPos += 4; | |
} else { | |
s1 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e25); } | |
} | |
if (s1 !== peg$FAILED) { | |
peg$savedPos = s0; | |
s1 = peg$f9(); | |
} | |
s0 = s1; | |
} | |
} | |
} | |
peg$silentFails--; | |
if (s0 === peg$FAILED) { | |
s1 = peg$FAILED; | |
if (peg$silentFails === 0) { peg$fail(peg$e21); } | |
} | |
return s0; | |
} | |
peg$result = peg$startRuleFunction(); | |
if (options.peg$library) { | |
return /** @type {any} */ ({ | |
peg$result, | |
peg$currPos, | |
peg$FAILED, | |
peg$maxFailExpected, | |
peg$maxFailPos | |
}); | |
} | |
if (peg$result !== peg$FAILED && peg$currPos === input.length) { | |
return peg$result; | |
} else { | |
if (peg$result !== peg$FAILED && peg$currPos < input.length) { | |
peg$fail(peg$endExpectation()); | |
} | |
throw peg$buildStructuredError( | |
peg$maxFailExpected, | |
peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, | |
peg$maxFailPos < input.length | |
? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) | |
: peg$computeLocation(peg$maxFailPos, peg$maxFailPos) | |
); | |
} | |
} | |
return { | |
StartRules: ["Metrics"], | |
SyntaxError: peg$SyntaxError, | |
parse: peg$parse | |
}; | |
})() | |
; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Online Version: https://peggyjs.org/online.html | |
Metrics | |
= "\n"* @Metric|.., "\n\n"| "\n"* | |
Metric | |
= help:Help "\n" type:Type values:("\n" @Value)* { return { help, type, values }; } | |
Help | |
= "# HELP " name:name " " help:$([^\n]*) { return { name, help }; } | |
Type | |
= "# TYPE " name:name " " type:$([a-z]i+) { return { name, type }; } | |
Value | |
= name:name labels:Labels " " value:integer { return { name, labels, value }; } | |
Labels | |
= "{" @Label|1.., ","| "}" | |
/ "" { return []; } | |
Label | |
= name:labelName "=\"" value:$(("\\" . / [^\\\"])*) "\"" { return { name, value }; } | |
name "metric name" | |
= $([a-zA-Z_:][a-zA-Z0-9_:]*) | |
labelName "label name" | |
= $([a-zA-Z_][a-zA-Z0-9_]*) | |
integer "number" | |
= digits:$[0-9.]+ { return parseFloat(digits); } | |
/ "Nan" { return NaN; } | |
/ "-Inf" { return -Infinity; } | |
/ "+Inf" { return +Infinity; } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment