presta
Version:
Hyper minimal framework for the modern web.
7 lines (4 loc) • 19.6 kB
JavaScript
var T=Object.create;var a=Object.defineProperty,M=Object.defineProperties,F=Object.getOwnPropertyDescriptor,j=Object.getOwnPropertyDescriptors,S=Object.getOwnPropertyNames,C=Object.getOwnPropertySymbols,N=Object.getPrototypeOf,B=Object.prototype.hasOwnProperty,V=Object.prototype.propertyIsEnumerable;var v=(t,e,o)=>e in t?a(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o,i=(t,e)=>{for(var o in e||(e={}))B.call(e,o)&&v(t,o,e[o]);if(C)for(var o of C(e))V.call(e,o)&&v(t,o,e[o]);return t},P=(t,e)=>M(t,j(e)),E=t=>a(t,"__esModule",{value:!0});var k=(t,e)=>{E(t);for(var o in e)a(t,o,{get:e[o],enumerable:!0})},L=(t,e,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of S(e))!B.call(t,r)&&r!=="default"&&a(t,r,{get:()=>e[r],enumerable:!(o=F(e,r))||o.enumerable});return t},l=t=>L(E(a(t!=null?T(N(t)):{},"default",t&&t.__esModule&&"default"in t?{get:()=>t.default,enumerable:!0}:{value:t,enumerable:!0})),t);k(exports,{Env:()=>c,createPlugin:()=>w,logger:()=>X,parsePathParameters:()=>g,wrapHandler:()=>D});var b={};k(b,{Levels:()=>s,colors:()=>p.default,debug:()=>q,error:()=>y,getLogs:()=>_,info:()=>z,logger:()=>u,newline:()=>W,raw:()=>U,warn:()=>A});var p=l(require("kleur"));var c={PRODUCTION:"production",DEVELOPMENT:"development"};var s;(function(n){n.Debug="debug",n.Info="info",n.Warn="warn",n.Err="error"})(s||(s={}));var x=[],G={[s.Debug]:"magenta",[s.Info]:"blue",[s.Warn]:"yellow",[s.Err]:"red"};function _(){if(!process.env.TESTING)throw new Error("Internal method was called outside test mode");return x}function u(t){if(process.env.TESTING)x.push(t);else{let e=process.env.PRESTA_DEBUG,o=process.env.PRESTA_ENV===c.PRODUCTION?"prod":"dev";if(!e&&t.level===s.Debug)return;console.log([p.default.gray(o),p.default[G[t.level||"info"]](t.label),t.message,t.duration?p.default.gray("+"+t.duration):"",t.error?`
${t.error.stack||t.error}
`:""].filter(Boolean).join(" "))}}function q(t){u(i({level:s.Debug},t))}function z(t){u(i({level:s.Info},t))}function A(t){u(i({level:s.Warn},t))}function y(t){u(i({level:s.Err},t))}function U(...t){process.env.TESTING?x.push(t):console.log(...t)}function W(){process.env.TESTING||console.log("")}var K=l(require("fs")),Q=l(require("path")),J=l(require("get-port"));var H;(function(r){r.PostBuild="post-build",r.BuildFile="build-file",r.BrowserRefresh="browser-refresh"})(H||(H={}));function w(t){return t}var I=l(require("regexparam"));function g(t,e){let[o]=t.split("?"),r=(0,I.default)(e),n=0,f={},m=r.pattern.exec(o)||[];for(;n<r.keys.length;)f[r.keys[n]]=m[++n];return f}function $(t){return typeof t=="object"?JSON.stringify(t):t}function O(t){let{isBase64Encoded:e=!1,statusCode:o=200,headers:r={},multiValueHeaders:n={},body:f="",html:m=void 0,json:h=void 0,xml:R=void 0}=typeof t=="string"?{body:t}:t,d="text/html; charset=utf-8";return h?d="application/json; charset=utf-8":R&&(d="application/xml; charset=utf-8"),{isBase64Encoded:e,statusCode:o,headers:i({"Content-Type":d},r),multiValueHeaders:n,body:$(f||m||h||R||"")}}function D(t){return async(e,o)=>(e=P(i({},e),{pathParameters:g(e.path,t.route)}),O(await t.handler(e,o)))}var X=b;0&&(module.exports={Env,createPlugin,logger,parsePathParameters,wrapHandler});
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbGliL2luZGV4LnRzIiwgIi4uL2xpYi9sb2cudHMiLCAiLi4vbGliL2NvbnN0YW50cy50cyIsICIuLi9saWIvY29uZmlnLnRzIiwgIi4uL2xpYi9jcmVhdGVFbWl0dGVyLnRzIiwgIi4uL2xpYi9wbHVnaW5zLnRzIiwgIi4uL2xpYi9nZXRSb3V0ZVBhcmFtcy50cyIsICIuLi9saWIvbm9ybWFsaXplUmVzcG9uc2UudHMiLCAiLi4vbGliL3dyYXBIYW5kbGVyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKlxuICogQW55IHVzZWQgZXhwb3J0cyBvZiB0aGUgY29yZSBsaWJyYXJ5IG5lZWQgdG8gYmUgaW4gdGhpcyBmaWxlXG4gKi9cblxuaW1wb3J0ICogYXMgbG9nIGZyb20gJy4vbG9nJ1xuZXhwb3J0IGNvbnN0IGxvZ2dlciA9IGxvZ1xuXG5leHBvcnQgeyBFbnYgfSBmcm9tICcuL2NvbnN0YW50cydcbmV4cG9ydCAqIGZyb20gJy4vbGFtYmRhJ1xuZXhwb3J0IHsgQ29uZmlnLCBPcHRpb25zIH0gZnJvbSAnLi9jb25maWcnXG5leHBvcnQgeyBIb29rUG9zdEJ1aWxkUGF5bG9hZCwgSG9va0J1aWxkRmlsZVBheWxvYWQgfSBmcm9tICcuL2NyZWF0ZUVtaXR0ZXInXG5leHBvcnQgeyBjcmVhdGVQbHVnaW4sIFBsdWdpbkluaXQsIFBsdWdpbiwgUGx1Z2luSW50ZXJmYWNlIH0gZnJvbSAnLi9wbHVnaW5zJ1xuZXhwb3J0IHsgZ2V0Um91dGVQYXJhbXMgYXMgcGFyc2VQYXRoUGFyYW1ldGVycyB9IGZyb20gJy4vZ2V0Um91dGVQYXJhbXMnXG5cbi8qXG4gKiBmb3IgdXNlIGluIHByb2QgZnVuY3Rpb25zXG4gKi9cbmV4cG9ydCB7IHdyYXBIYW5kbGVyIH0gZnJvbSAnLi93cmFwSGFuZGxlcidcbiIsICJpbXBvcnQgYywgeyBLbGV1ciB9IGZyb20gJ2tsZXVyJ1xuXG5pbXBvcnQgeyBFbnYgfSBmcm9tICcuL2NvbnN0YW50cydcblxuZXhwb3J0IGVudW0gTGV2ZWxzIHtcbiAgRGVidWcgPSAnZGVidWcnLFxuICBJbmZvID0gJ2luZm8nLFxuICBXYXJuID0gJ3dhcm4nLFxuICBFcnIgPSAnZXJyb3InLFxufVxuXG5leHBvcnQgdHlwZSBNZXNzYWdlID0ge1xuICBsZXZlbD86IExldmVsc1xuICBsYWJlbDogc3RyaW5nIHwgbnVtYmVyXG4gIG1lc3NhZ2U/OiBzdHJpbmdcbiAgZHVyYXRpb24/OiBzdHJpbmcgfCBudW1iZXJcbiAgZXJyb3I/OiBFcnJvclxufVxuXG5sZXQgbG9nczogYW55W10gPSBbXVxuXG5jb25zdCBjb2xvcnMgPSB7XG4gIFtMZXZlbHMuRGVidWddOiAnbWFnZW50YScsXG4gIFtMZXZlbHMuSW5mb106ICdibHVlJyxcbiAgW0xldmVscy5XYXJuXTogJ3llbGxvdycsXG4gIFtMZXZlbHMuRXJyXTogJ3JlZCcsXG59XG5cbmV4cG9ydCB7IGMgYXMgY29sb3JzIH1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExvZ3MoKSB7XG4gIGlmICghcHJvY2Vzcy5lbnYuVEVTVElORykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW50ZXJuYWwgbWV0aG9kIHdhcyBjYWxsZWQgb3V0c2lkZSB0ZXN0IG1vZGUnKVxuICB9XG5cbiAgcmV0dXJuIGxvZ3Ncbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvZ2dlcihtZXNzYWdlOiBNZXNzYWdlKSB7XG4gIGlmIChwcm9jZXNzLmVudi5URVNUSU5HKSB7XG4gICAgbG9ncy5wdXNoKG1lc3NhZ2UpXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZGVidWcgPSBwcm9jZXNzLmVudi5QUkVTVEFfREVCVUdcbiAgICBjb25zdCBjb250ZXh0ID0gcHJvY2Vzcy5lbnYuUFJFU1RBX0VOViA9PT0gRW52LlBST0RVQ1RJT04gPyAncHJvZCcgOiAnZGV2J1xuXG4gICAgaWYgKCFkZWJ1ZyAmJiBtZXNzYWdlLmxldmVsID09PSBMZXZlbHMuRGVidWcpIHJldHVyblxuXG4gICAgY29uc29sZS5sb2coXG4gICAgICBbXG4gICAgICAgIGMuZ3JheShjb250ZXh0KSxcbiAgICAgICAgY1tjb2xvcnNbbWVzc2FnZS5sZXZlbCB8fCAnaW5mbyddIGFzIGtleW9mIEtsZXVyXShtZXNzYWdlLmxhYmVsKSxcbiAgICAgICAgbWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICBtZXNzYWdlLmR1cmF0aW9uID8gYy5ncmF5KCcrJyArIG1lc3NhZ2UuZHVyYXRpb24pIDogJycsXG4gICAgICAgIG1lc3NhZ2UuZXJyb3IgPyBgXFxuXFxuJHttZXNzYWdlLmVycm9yLnN0YWNrIHx8IG1lc3NhZ2UuZXJyb3J9XFxuXFxuYCA6ICcnLFxuICAgICAgXVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5qb2luKCcgJylcbiAgICApXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlYnVnKG1lc3NhZ2U6IE1lc3NhZ2UpIHtcbiAgbG9nZ2VyKHsgbGV2ZWw6IExldmVscy5EZWJ1ZywgLi4ubWVzc2FnZSB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5mbyhtZXNzYWdlOiBNZXNzYWdlKSB7XG4gIGxvZ2dlcih7IGxldmVsOiBMZXZlbHMuSW5mbywgLi4ubWVzc2FnZSB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd2FybihtZXNzYWdlOiBNZXNzYWdlKSB7XG4gIGxvZ2dlcih7IGxldmVsOiBMZXZlbHMuV2FybiwgLi4ubWVzc2FnZSB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXJyb3IobWVzc2FnZTogTWVzc2FnZSkge1xuICBsb2dnZXIoeyBsZXZlbDogTGV2ZWxzLkVyciwgLi4ubWVzc2FnZSB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmF3KC4uLmFyZ3M6IGFueVtdKSB7XG4gIGlmIChwcm9jZXNzLmVudi5URVNUSU5HKSB7XG4gICAgbG9ncy5wdXNoKGFyZ3MpXG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2coLi4uYXJncylcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbmV3bGluZSgpIHtcbiAgaWYgKHByb2Nlc3MuZW52LlRFU1RJTkcpIHJldHVyblxuICBjb25zb2xlLmxvZygnJylcbn1cbiIsICJleHBvcnQgY29uc3QgRW52ID0ge1xuICBQUk9EVUNUSU9OOiAncHJvZHVjdGlvbicsXG4gIERFVkVMT1BNRU5UOiAnZGV2ZWxvcG1lbnQnLFxufVxuIiwgImltcG9ydCBmcyBmcm9tICdmcydcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgZ2V0UG9ydCBmcm9tICdnZXQtcG9ydCdcblxuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4vbG9nJ1xuaW1wb3J0IHsgUHJlc3RhQ0xJRGV2T3B0aW9ucywgUHJlc3RhQ0xJQnVpbGRPcHRpb25zIH0gZnJvbSAnLi9jbGknXG5pbXBvcnQgeyBQbHVnaW4gfSBmcm9tICcuL3BsdWdpbnMnXG5cbmV4cG9ydCB0eXBlIE9wdGlvbnMgPSB7XG4gIGZpbGVzOiBzdHJpbmdbXVxuICBvdXRwdXQ6IHN0cmluZ1xuICBhc3NldHM6IHN0cmluZ1xuICBwbHVnaW5zOiBQbHVnaW5bXVxuICBwb3J0OiBudW1iZXJcbn1cblxuZXhwb3J0IHR5cGUgQ29uZmlnID0gT3B0aW9ucyAmIHtcbiAgZW52OiBzdHJpbmdcbiAgc3RhdGljT3V0cHV0RGlyOiBzdHJpbmdcbiAgZnVuY3Rpb25zT3V0cHV0RGlyOiBzdHJpbmdcbiAgZnVuY3Rpb25zTWFuaWZlc3Q6IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgZGVmYXVsdENvbmZpZ0ZpbGVwYXRoID0gJ3ByZXN0YS5jb25maWcuanMnXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdmFpbGFibGVQb3J0KHByZWZlcnJlZDogc3RyaW5nKSB7XG4gIHJldHVybiBnZXRQb3J0KHsgcG9ydDogcGFyc2VJbnQocHJlZmVycmVkLCAxMCkgfSlcbn1cblxuLyoqXG4gKiBGZXRjaCBhIGNvbmZpZyBmaWxlLiBJZiBvbmUgd2FzIHNwZWNpZmllZCBieSB0aGUgdXNlciwgbGV0IHRoZW0ga25vdyBpZlxuICogYW55dGhpbmcgZ29lcyB3cm9uZy4gT3V0c2lkZSB3YXRjaCBtb2RlLCB0aGlzIHNob3VsZCBleGl0KDEpIGlmIHRoZSB1c2VyXG4gKiBwcm92aWRlZCBhIGNvbmZpZyBhbmQgdGhlcmUgd2FzIGFuIGVycm9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWdGaWxlKGZpbGVwYXRoPzogc3RyaW5nLCBzaG91bGRFeGl0OiBib29sZWFuID0gZmFsc2UpIHtcbiAgY29uc3QgZnAgPSBwYXRoLnJlc29sdmUoZmlsZXBhdGggfHwgZGVmYXVsdENvbmZpZ0ZpbGVwYXRoKVxuXG4gIHRyeSB7XG4gICAgZGVsZXRlIHJlcXVpcmUuY2FjaGVbZnBdXG4gICAgcmV0dXJuIHJlcXVpcmUoZnApXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zdCBleGlzdHMgPSBmcy5leGlzdHNTeW5jKGZwKVxuXG4gICAgLy8gY29uZmlnIGZpbGUgZXhpc3RzLCBzaG91bGQgbG9nIGVycm9yLCBvdGhlcndpc2UgaWdub3JlIG1pc3NpbmcgZmlsZVxuICAgIGlmIChleGlzdHMpIHtcbiAgICAgIGxvZ2dlci5lcnJvcih7XG4gICAgICAgIGxhYmVsOiAnZXJyb3InLFxuICAgICAgICBlcnJvcjogZSBhcyBFcnJvcixcbiAgICAgIH0pXG5cbiAgICAgIC8vIHdlJ3JlIG5vdCBpbiB3YXRjaCBtb2RlLCBleGl0IGJ1aWxkXG4gICAgICBpZiAoc2hvdWxkRXhpdCkgcHJvY2Vzcy5leGl0KDEpXG4gICAgfVxuXG4gICAgcmV0dXJuIHt9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZShlbnY6IHN0cmluZywgY2xpOiBQcmVzdGFDTElCdWlsZE9wdGlvbnMgfCBQcmVzdGFDTElEZXZPcHRpb25zLCBmaWxlOiBQYXJ0aWFsPE9wdGlvbnM+KTogQ29uZmlnIHtcbiAgY29uc3QgY29uZmlnID0ge1xuICAgIGVudixcbiAgICBvdXRwdXQ6ICdidWlsZCcsXG4gICAgYXNzZXRzOiAncHVibGljJyxcbiAgICBwbHVnaW5zOiBbXSxcbiAgICBwb3J0OiA0MDAwLFxuICAgIGZpbGVzOiBbXSwgLy8gVE9ETyB3aGVyZSBkbyB3ZSB2YWxpZGF0ZVxuICAgIC4uLmZpbGUsXG4gIH1cblxuICAvLyBvdmVycmlkZSB3aXRoIENMSVxuICBpZiAoY2xpLl8ubGVuZ3RoKSBjb25maWcuZmlsZXMgPSBjbGkuX1xuICBpZiAoY2xpLm91dHB1dCkgY29uZmlnLm91dHB1dCA9IGNsaS5vdXRwdXRcbiAgaWYgKGNsaS5hc3NldHMpIGNvbmZpZy5vdXRwdXQgPSBjbGkuYXNzZXRzXG4gIGlmIChjbGkucG9ydCkgY29uZmlnLnBvcnQgPSBjbGkucG9ydFxuXG4gIC8vIHJlc29sdmUgYWJzb2x1dGUgcGF0aHNcbiAgaWYgKGNvbmZpZy5maWxlcykgY29uZmlnLmZpbGVzID0gKFtdIGFzIHN0cmluZ1tdKS5jb25jYXQoY29uZmlnLmZpbGVzKS5tYXAoKHApID0+IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBwKSlcbiAgaWYgKGNvbmZpZy5vdXRwdXQpIGNvbmZpZy5vdXRwdXQgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgY29uZmlnLm91dHB1dClcbiAgaWYgKGNvbmZpZy5hc3NldHMpIGNvbmZpZy5hc3NldHMgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgY29uZmlnLmFzc2V0cylcblxuICByZXR1cm4ge1xuICAgIC4uLmNvbmZpZyxcbiAgICBzdGF0aWNPdXRwdXREaXI6IHBhdGguam9pbihjb25maWcub3V0cHV0LCAnc3RhdGljJyksXG4gICAgZnVuY3Rpb25zT3V0cHV0RGlyOiBwYXRoLmpvaW4oY29uZmlnLm91dHB1dCwgJ2Z1bmN0aW9ucycpLFxuICAgIGZ1bmN0aW9uc01hbmlmZXN0OiBwYXRoLmpvaW4oY29uZmlnLm91dHB1dCwgJ3JvdXRlcy5qc29uJyksXG4gIH1cbn1cbiIsICJleHBvcnQgZW51bSBFdmVudHMge1xuICBQb3N0QnVpbGQgPSAncG9zdC1idWlsZCcsXG4gIEJ1aWxkRmlsZSA9ICdidWlsZC1maWxlJyxcbiAgQnJvd3NlclJlZnJlc2ggPSAnYnJvd3Nlci1yZWZyZXNoJyxcbn1cblxuZXhwb3J0IHR5cGUgQ2FsbGFibGUgPSAoLi4uYXJnczogYW55W10pID0+IHZvaWRcblxuZXhwb3J0IHR5cGUgSG9va1Bvc3RCdWlsZFBheWxvYWQgPSB7XG4gIG91dHB1dDogc3RyaW5nXG4gIHN0YXRpY091dHB1dDogc3RyaW5nXG4gIGZ1bmN0aW9uc091dHB1dDogc3RyaW5nXG4gIGZ1bmN0aW9uc01hbmlmZXN0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG59XG5cbmV4cG9ydCB0eXBlIEhvb2tCdWlsZEZpbGVQYXlsb2FkID0ge1xuICBmaWxlOiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgRGVzdHJveUhvb2tDYWxsYmFjayA9ICgpID0+IHZvaWRcblxuZXhwb3J0IHR5cGUgSG9va3MgPSB7XG4gIGVtaXRQb3N0QnVpbGQocHJvcHM6IEhvb2tQb3N0QnVpbGRQYXlsb2FkKTogdm9pZFxuICBvblBvc3RCdWlsZChjYjogKHByb3BzOiBIb29rUG9zdEJ1aWxkUGF5bG9hZCkgPT4gdm9pZCk6IERlc3Ryb3lIb29rQ2FsbGJhY2tcbiAgZW1pdEJ1aWxkRmlsZShwcm9wczogSG9va0J1aWxkRmlsZVBheWxvYWQpOiB2b2lkXG4gIG9uQnVpbGRGaWxlKGNiOiAocHJvcHM6IEhvb2tCdWlsZEZpbGVQYXlsb2FkKSA9PiB2b2lkKTogRGVzdHJveUhvb2tDYWxsYmFja1xuICBlbWl0QnJvd3NlclJlZnJlc2goKTogdm9pZFxuICBvbkJyb3dzZXJSZWZyZXNoKGNiOiAoKSA9PiB2b2lkKTogRGVzdHJveUhvb2tDYWxsYmFja1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRW1pdHRlcigpIHtcbiAgbGV0IGV2ZW50czogeyBbZXZlbnQ6IHN0cmluZ106IENhbGxhYmxlW10gfSA9IHt9XG5cbiAgZnVuY3Rpb24gZW1pdChldjogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgIGV2ZW50c1tldl0gPyBldmVudHNbZXZdLm1hcCgoZm46IENhbGxhYmxlKSA9PiBmbiguLi5hcmdzKSkgOiBbXVxuICB9XG5cbiAgZnVuY3Rpb24gb24oZXY6IHN0cmluZywgZm46ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCkge1xuICAgIGV2ZW50c1tldl0gPSBldmVudHNbZXZdID8gZXZlbnRzW2V2XS5jb25jYXQoZm4pIDogW2ZuXVxuICAgIHJldHVybiAoKSA9PiBldmVudHNbZXZdLnNwbGljZShldmVudHNbZXZdLmluZGV4T2YoZm4pLCAxKVxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgZXZlbnRzID0ge31cbiAgfVxuXG4gIGZ1bmN0aW9uIGxpc3RlbmVycyhldjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGV2ZW50c1tldl0gfHwgW11cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZW1pdCxcbiAgICBvbixcbiAgICBjbGVhcixcbiAgICBsaXN0ZW5lcnMsXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUhvb2tzKGVtaXR0ZXI6IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUVtaXR0ZXI+KTogSG9va3Mge1xuICByZXR1cm4ge1xuICAgIGVtaXRQb3N0QnVpbGQocHJvcHMpIHtcbiAgICAgIGVtaXR0ZXIuZW1pdCgncG9zdEJ1aWxkJywgcHJvcHMpXG4gICAgfSxcbiAgICBvblBvc3RCdWlsZChjYikge1xuICAgICAgcmV0dXJuIGVtaXR0ZXIub24oJ3Bvc3RCdWlsZCcsIGNiKVxuICAgIH0sXG4gICAgZW1pdEJ1aWxkRmlsZShwcm9wcykge1xuICAgICAgZW1pdHRlci5lbWl0KCdidWlsZEZpbGUnLCBwcm9wcylcbiAgICB9LFxuICAgIG9uQnVpbGRGaWxlKGNiKSB7XG4gICAgICByZXR1cm4gZW1pdHRlci5vbignYnVpbGRGaWxlJywgY2IpXG4gICAgfSxcbiAgICBlbWl0QnJvd3NlclJlZnJlc2goKSB7XG4gICAgICBlbWl0dGVyLmVtaXQoJ2Jyb3dzZXJSZWZyZXNoJylcbiAgICB9LFxuICAgIG9uQnJvd3NlclJlZnJlc2goY2IpIHtcbiAgICAgIHJldHVybiBlbWl0dGVyLm9uKCdicm93c2VyUmVmcmVzaCcsIGNiKVxuICAgIH0sXG4gIH1cbn1cbiIsICJpbXBvcnQgKiBhcyBsb2dnZXIgZnJvbSAnLi9sb2cnXG5pbXBvcnQgeyBIb29rcyB9IGZyb20gJy4vY3JlYXRlRW1pdHRlcidcbmltcG9ydCB7IENvbmZpZyB9IGZyb20gJy4vY29uZmlnJ1xuXG5leHBvcnQgdHlwZSBQbHVnaW5JbnRlcmZhY2UgPSB7XG4gIGNsZWFudXA/KCk6IHZvaWRcbn1cbmV4cG9ydCB0eXBlIFBsdWdpbiA9IChjb25maWc6IENvbmZpZywgaG9va3M6IEhvb2tzKSA9PiBQcm9taXNlPFBsdWdpbkludGVyZmFjZSB8IHZvaWQ+IHwgUGx1Z2luSW50ZXJmYWNlIHwgdm9pZFxuZXhwb3J0IHR5cGUgUGx1Z2luSW5pdCA9ICguLi5wcm9wczogYW55KSA9PiBQbHVnaW5cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBsdWdpbihpbml0OiBQbHVnaW5Jbml0KSB7XG4gIHJldHVybiBpbml0XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0UGx1Z2lucyhwbHVnaW5zOiBQbHVnaW5bXSwgaW5zdGFuY2U6IENvbmZpZywgaG9va3M6IEhvb2tzKSB7XG4gIGNvbnN0IGluc3RhbnRpYXRlZCA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgIHBsdWdpbnNcbiAgICAgIC5tYXAoKHApID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gcChpbnN0YW5jZSwgaG9va3MpXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3Ioe1xuICAgICAgICAgICAgbGFiZWw6ICdlcnJvcicsXG4gICAgICAgICAgICBlcnJvcjogZSBhcyBFcnJvcixcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihCb29sZWFuKSBhcyBQbHVnaW5JbnRlcmZhY2VbXVxuICApXG5cbiAgcmV0dXJuIHtcbiAgICBhc3luYyBjbGVhbnVwKCkge1xuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGluc3RhbnRpYXRlZC5tYXAoKHApID0+IHAgJiYgcC5jbGVhbnVwICYmIHAuY2xlYW51cCgpKSlcbiAgICB9LFxuICB9XG59XG4iLCAiaW1wb3J0IHRvUmVnRXhwIGZyb20gJ3JlZ2V4cGFyYW0nXG5cbmltcG9ydCB7IFBhdGhQYXJhbWV0ZXJzIH0gZnJvbSAnLi9sYW1iZGEnXG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2x1a2VlZC9yZWdleHBhcmFtI3VzYWdlXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um91dGVQYXJhbXModXJsOiBzdHJpbmcsIHJvdXRlOiBzdHJpbmcpOiBQYXRoUGFyYW1ldGVycyB7XG4gIGNvbnN0IFtwYXRoXSA9IHVybC5zcGxpdCgnPycpXG4gIGNvbnN0IHJlc3VsdCA9IHRvUmVnRXhwKHJvdXRlKVxuICBsZXQgaSA9IDBcbiAgbGV0IG91dDogUGF0aFBhcmFtZXRlcnMgPSB7fVxuICBsZXQgbWF0Y2hlcyA9IHJlc3VsdC5wYXR0ZXJuLmV4ZWMocGF0aCkgfHwgW11cblxuICB3aGlsZSAoaSA8IHJlc3VsdC5rZXlzLmxlbmd0aCkge1xuICAgIG91dFtyZXN1bHQua2V5c1tpXV0gPSBtYXRjaGVzWysraV1cbiAgfVxuXG4gIHJldHVybiBvdXRcbn1cbiIsICJpbXBvcnQgeyBSZXNwb25zZSBhcyBMYW1iZGFSZXNwb25zZSB9IGZyb20gJ2xhbWJkYS10eXBlcydcbmltcG9ydCB7IFJlc3BvbnNlIH0gZnJvbSAnLi9sYW1iZGEnXG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShvYmo6IG9iamVjdCB8IHN0cmluZykge1xuICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeShvYmopIDogb2JqXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVSZXNwb25zZShyZXNwb25zZTogUGFydGlhbDxSZXNwb25zZT4gfCBzdHJpbmcpOiBMYW1iZGFSZXNwb25zZSB7XG4gIGNvbnN0IHtcbiAgICBpc0Jhc2U2NEVuY29kZWQgPSBmYWxzZSxcbiAgICBzdGF0dXNDb2RlID0gMjAwLFxuICAgIGhlYWRlcnMgPSB7fSxcbiAgICBtdWx0aVZhbHVlSGVhZGVycyA9IHt9LFxuICAgIGJvZHkgPSAnJyxcbiAgICBodG1sID0gdW5kZWZpbmVkLFxuICAgIGpzb24gPSB1bmRlZmluZWQsXG4gICAgeG1sID0gdW5kZWZpbmVkLFxuICB9ID0gdHlwZW9mIHJlc3BvbnNlID09PSAnc3RyaW5nJ1xuICAgID8ge1xuICAgICAgICBib2R5OiByZXNwb25zZSxcbiAgICAgIH1cbiAgICA6IHJlc3BvbnNlXG5cbiAgbGV0IGNvbnRlbnRUeXBlID0gJ3RleHQvaHRtbDsgY2hhcnNldD11dGYtOCdcblxuICBpZiAoISFqc29uKSB7XG4gICAgY29udGVudFR5cGUgPSAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCdcbiAgfSBlbHNlIGlmICghIXhtbCkge1xuICAgIGNvbnRlbnRUeXBlID0gJ2FwcGxpY2F0aW9uL3htbDsgY2hhcnNldD11dGYtOCdcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaXNCYXNlNjRFbmNvZGVkLFxuICAgIHN0YXR1c0NvZGUsXG4gICAgaGVhZGVyczoge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6IGNvbnRlbnRUeXBlLFxuICAgICAgLi4uaGVhZGVycyxcbiAgICB9LFxuICAgIG11bHRpVmFsdWVIZWFkZXJzLFxuICAgIGJvZHk6IHN0cmluZ2lmeShib2R5IHx8IGh0bWwgfHwganNvbiB8fCB4bWwgfHwgJycpLFxuICB9XG59XG4iLCAiLyoqXG4gKiBUSElTIElTIFBST0QgQ09ERSwgQkUgQ0FSRUZVTCBXSEFUIFlPVSBBREQgVE8gVEhJUyBGSUxFXG4gKlxuICogVE9ETyB0aGlzIHNob3VsZCBiZSBhIHNlcGFyYXRlIGZpbGUgdG8gYXZvaWQgbmVlZGluZyB0byB0cmVlIHNoYWtlXG4gKi9cblxuaW1wb3J0IHsgZ2V0Um91dGVQYXJhbXMgfSBmcm9tICcuL2dldFJvdXRlUGFyYW1zJ1xuaW1wb3J0IHsgbm9ybWFsaXplUmVzcG9uc2UgfSBmcm9tICcuL25vcm1hbGl6ZVJlc3BvbnNlJ1xuaW1wb3J0IHsgRXZlbnQsIENvbnRleHQsIFJlc3BvbnNlLCBIYW5kbGVyIH0gZnJvbSAnLi9sYW1iZGEnXG5cbmV4cG9ydCBmdW5jdGlvbiB3cmFwSGFuZGxlcihmaWxlOiB7XG4gIHJvdXRlOiBzdHJpbmdcbiAgaGFuZGxlcjogSGFuZGxlclxufSk6IChldmVudDogRXZlbnQsIGNvbnRleHQ6IENvbnRleHQpID0+IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgcmV0dXJuIGFzeW5jIChldmVudDogRXZlbnQsIGNvbnRleHQ6IENvbnRleHQpID0+IHtcbiAgICBldmVudCA9IHtcbiAgICAgIC4uLmV2ZW50LFxuICAgICAgcGF0aFBhcmFtZXRlcnM6IGdldFJvdXRlUGFyYW1zKGV2ZW50LnBhdGgsIGZpbGUucm91dGUpLFxuICAgIH0gYXMgRXZlbnRcblxuICAgIHJldHVybiBub3JtYWxpemVSZXNwb25zZShhd2FpdCBmaWxlLmhhbmRsZXIoZXZlbnQgYXMgRXZlbnQsIGNvbnRleHQpKVxuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiczZCQUFBLG1HQ0FBLHlKQUF5QixvQkNBbEIsR0FBTSxHQUFNLENBQ2pCLFdBQVksYUFDWixZQUFhLGVERVIsR0FBSyxHQUFMLFVBQUssRUFBTCxDQUNMLFFBQVEsUUFDUixPQUFPLE9BQ1AsT0FBTyxPQUNQLE1BQU0sVUFKSSxXQWVaLEdBQUksR0FBYyxHQUVaLEVBQVMsRUFDWixFQUFPLE9BQVEsV0FDZixFQUFPLE1BQU8sUUFDZCxFQUFPLE1BQU8sVUFDZCxFQUFPLEtBQU0sT0FLVCxZQUFtQixDQUN4QixHQUFJLENBQUMsUUFBUSxJQUFJLFFBQ2YsS0FBTSxJQUFJLE9BQU0sZ0RBR2xCLE1BQU8sR0FHRixXQUFnQixFQUFrQixDQUN2QyxHQUFJLFFBQVEsSUFBSSxRQUNkLEVBQUssS0FBSyxPQUNMLENBQ0wsR0FBTSxHQUFRLFFBQVEsSUFBSSxhQUNwQixFQUFVLFFBQVEsSUFBSSxhQUFlLEVBQUksV0FBYSxPQUFTLE1BRXJFLEdBQUksQ0FBQyxHQUFTLEVBQVEsUUFBVSxFQUFPLE1BQU8sT0FFOUMsUUFBUSxJQUNOLENBQ0UsVUFBRSxLQUFLLEdBQ1AsVUFBRSxFQUFPLEVBQVEsT0FBUyxTQUF3QixFQUFRLE9BQzFELEVBQVEsUUFDUixFQUFRLFNBQVcsVUFBRSxLQUFLLElBQU0sRUFBUSxVQUFZLEdBQ3BELEVBQVEsTUFBUTtBQUFBO0FBQUEsRUFBTyxFQUFRLE1BQU0sT0FBUyxFQUFRO0FBQUE7QUFBQSxFQUFjLElBRW5FLE9BQU8sU0FDUCxLQUFLLE9BS1AsV0FBZSxFQUFrQixDQUN0QyxFQUFPLEdBQUUsTUFBTyxFQUFPLE9BQVUsSUFHNUIsV0FBYyxFQUFrQixDQUNyQyxFQUFPLEdBQUUsTUFBTyxFQUFPLE1BQVMsSUFHM0IsV0FBYyxFQUFrQixDQUNyQyxFQUFPLEdBQUUsTUFBTyxFQUFPLE1BQVMsSUFHM0IsV0FBZSxFQUFrQixDQUN0QyxFQUFPLEdBQUUsTUFBTyxFQUFPLEtBQVEsSUFHMUIsY0FBZ0IsRUFBYSxDQUNsQyxBQUFJLFFBQVEsSUFBSSxRQUNkLEVBQUssS0FBSyxHQUVWLFFBQVEsSUFBSSxHQUFHLEdBSVosWUFBbUIsQ0FDeEIsQUFBSSxRQUFRLElBQUksU0FDaEIsUUFBUSxJQUFJLElFdkZkLE1BQWUsaUJBQ2YsRUFBaUIsbUJBQ2pCLEVBQW9CLHVCQ0ZiLEdBQUssR0FBTCxVQUFLLEVBQUwsQ0FDTCxZQUFZLGFBQ1osWUFBWSxhQUNaLGlCQUFpQixvQkFIUCxXQ1VMLFdBQXNCLEVBQWtCLENBQzdDLE1BQU8sR0NYVCxNQUFxQix5QkFLZCxXQUF3QixFQUFhLEVBQStCLENBQ3pFLEdBQU0sQ0FBQyxHQUFRLEVBQUksTUFBTSxLQUNuQixFQUFTLGNBQVMsR0FDcEIsRUFBSSxFQUNKLEVBQXNCLEdBQ3RCLEVBQVUsRUFBTyxRQUFRLEtBQUssSUFBUyxHQUUzQyxLQUFPLEVBQUksRUFBTyxLQUFLLFFBQ3JCLEVBQUksRUFBTyxLQUFLLElBQU0sRUFBUSxFQUFFLEdBR2xDLE1BQU8sR0NiVCxXQUFtQixFQUFzQixDQUN2QyxNQUFPLE9BQU8sSUFBUSxTQUFXLEtBQUssVUFBVSxHQUFPLEVBR2xELFdBQTJCLEVBQXNELENBQ3RGLEdBQU0sQ0FDSixrQkFBa0IsR0FDbEIsYUFBYSxJQUNiLFVBQVUsR0FDVixvQkFBb0IsR0FDcEIsT0FBTyxHQUNQLE9BQU8sT0FDUCxPQUFPLE9BQ1AsTUFBTSxRQUNKLE1BQU8sSUFBYSxTQUNwQixDQUNFLEtBQU0sR0FFUixFQUVBLEVBQWMsMkJBRWxCLE1BQU0sR0FDSixFQUFjLGtDQUNILEdBQ1gsR0FBYyxrQ0FHVCxDQUNMLGtCQUNBLGFBQ0EsUUFBUyxHQUNQLGVBQWdCLEdBQ2IsR0FFTCxvQkFDQSxLQUFNLEVBQVUsR0FBUSxHQUFRLEdBQVEsR0FBTyxLQzdCNUMsV0FBcUIsRUFHOEIsQ0FDeEQsTUFBTyxPQUFPLEVBQWMsSUFDMUIsR0FBUSxPQUNILEdBREcsQ0FFTixlQUFnQixFQUFlLEVBQU0sS0FBTSxFQUFLLFNBRzNDLEVBQWtCLEtBQU0sR0FBSyxRQUFRLEVBQWdCLEtSZnpELEdBQU0sR0FBUyIsCiAgIm5hbWVzIjogW10KfQo=