Advertisement
Namokonov

Untitled

Sep 7th, 2021
1,213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function doPost(e) {
  2.   const args = getget(JSON.parse(e.postData.contents)));
  3. ...
  4.  
  5. }
  6.  
  7. const varsDict = {
  8.   chatType: "$..message.from.chat.type",
  9.   callback_query_id: "$..callback_query.id",
  10.   callback_query_from_id: "$..callback_query.from.id"
  11. }
  12.  
  13.  
  14. function getget(e) {
  15.   let t = {}
  16.   for (x in varsDict) {
  17.     let value = jsonPath(e, varsDict[x])[0];
  18.     value ? t[x] = value : delete t[x];
  19.   }
  20.   return t;
  21. }
  22.  
  23. function jsonPath(obj, expr, arg) {
  24.   var P = {
  25.     resultType: arg && arg.resultType || "VALUE",
  26.     result: [],
  27.     normalize: function (expr) {
  28.       var subx = [];
  29.       return expr.replace(/[\['](\??\(.*?\))[\]']/g, function ($0, $1) { return "[#" + (subx.push($1) - 1) + "]"; })
  30.         .replace(/'?\.'?|\['?/g, ";")
  31.         .replace(/;;;|;;/g, ";..;")
  32.         .replace(/;$|'?\]|'$/g, "")
  33.         .replace(/#([0-9]+)/g, function ($0, $1) { return subx[$1]; });
  34.     },
  35.     asPath: function (path) {
  36.       var x = path.split(";"), p = "$";
  37.       for (var i = 1, n = x.length; i < n; i++)
  38.         p += /^[0-9*]+$/.test(x[i]) ? ("[" + x[i] + "]") : ("['" + x[i] + "']");
  39.       return p;
  40.     },
  41.     store: function (p, v) {
  42.       if (p) P.result[P.result.length] = P.resultType == "PATH" ? P.asPath(p) : v;
  43.       return !!p;
  44.     },
  45.     trace: function (expr, val, path) {
  46.       if (expr) {
  47.         var x = expr.split(";"), loc = x.shift();
  48.         x = x.join(";");
  49.         if (val && val.hasOwnProperty(loc))
  50.           P.trace(x, val[loc], path + ";" + loc);
  51.         else if (loc === "*")
  52.           P.walk(loc, x, val, path, function (m, l, x, v, p) { P.trace(m + ";" + x, v, p); });
  53.         else if (loc === "..") {
  54.           P.trace(x, val, path);
  55.           P.walk(loc, x, val, path, function (m, l, x, v, p) { typeof v[m] === "object" && P.trace("..;" + x, v[m], p + ";" + m); });
  56.         }
  57.         else if (/,/.test(loc)) { // [name1,name2,...]
  58.           for (var s = loc.split(/'?,'?/), i = 0, n = s.length; i < n; i++)
  59.             P.trace(s[i] + ";" + x, val, path);
  60.         }
  61.         else if (/^\(.*?\)$/.test(loc)) // [(expr)]
  62.           P.trace(P.eval(loc, val, path.substr(path.lastIndexOf(";") + 1)) + ";" + x, val, path);
  63.         else if (/^\?\(.*?\)$/.test(loc)) // [?(expr)]
  64.           P.walk(loc, x, val, path, function (m, l, x, v, p) { if (P.eval(l.replace(/^\?\((.*?)\)$/, "$1"), v[m], m)) P.trace(m + ";" + x, v, p); });
  65.         else if (/^(-?[0-9]*):(-?[0-9]*):?([0-9]*)$/.test(loc)) // [start:end:step]  phyton slice syntax
  66.           P.slice(loc, x, val, path);
  67.       }
  68.       else
  69.         P.store(path, val);
  70.     },
  71.     walk: function (loc, expr, val, path, f) {
  72.       if (val instanceof Array) {
  73.         for (var i = 0, n = val.length; i < n; i++)
  74.           if (i in val)
  75.             f(i, loc, expr, val, path);
  76.       }
  77.       else if (typeof val === "object") {
  78.         for (var m in val)
  79.           if (val.hasOwnProperty(m))
  80.             f(m, loc, expr, val, path);
  81.       }
  82.     },
  83.     slice: function (loc, expr, val, path) {
  84.       if (val instanceof Array) {
  85.         var len = val.length, start = 0, end = len, step = 1;
  86.         loc.replace(/^(-?[0-9]*):(-?[0-9]*):?(-?[0-9]*)$/g, function ($0, $1, $2, $3) { start = parseInt($1 || start); end = parseInt($2 || end); step = parseInt($3 || step); });
  87.         start = (start < 0) ? Math.max(0, start + len) : Math.min(len, start);
  88.         end = (end < 0) ? Math.max(0, end + len) : Math.min(len, end);
  89.         for (var i = start; i < end; i += step)
  90.           P.trace(i + ";" + expr, val, path);
  91.       }
  92.     },
  93.     eval: function (x, _v, _vname) {
  94.       try { return $ && _v && eval(x.replace(/@/g, "_v")); }
  95.       catch (e) { throw new SyntaxError("jsonPath: " + e.message + ": " + x.replace(/@/g, "_v").replace(/\^/g, "_a")); }
  96.     }
  97.   };
  98.  
  99.   var $ = obj;
  100.   if (expr && obj && (P.resultType == "VALUE" || P.resultType == "PATH")) {
  101.     P.trace(P.normalize(expr).replace(/^\$;/, ""), obj, "$");
  102.     return P.result.length ? P.result : false;
  103.   }
  104. }
  105.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement