]> git.r.bdr.sh - rbdr/generador-de-insultos/commitdiff
Update code for 2020
authorBen Beltran <redacted>
Sat, 18 Apr 2020 12:20:53 +0000 (14:20 +0200)
committerBen Beltran <redacted>
Sat, 18 Apr 2020 12:20:53 +0000 (14:20 +0200)
.gitignore
bin/server.js
ext/index.html
lib/Conjugator.js
lib/InsultGenerator.js
package-lock.json
package.json

index 123ae94d052f3fa853fdc228dcabf0c7fb65ce38..bfb1212570d619c6b053389b1019f54d5f39a2be 100644 (file)
@@ -25,3 +25,5 @@ build/Release
 # Dependency directory
 # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git
 node_modules
+
+.DS_Store
index 00c23bbb8dc9325df89fdfd3c601bc9e2cd54257..13ae3813c1f6102675fd1e7818d175279b1b4c99 100755 (executable)
@@ -2,33 +2,27 @@
 
 'use strict';
 
-var fs = require('fs');
-var path = require('path');
+const Fs = require('fs');
+const Path = require('path');
 
-var Hapi = require('hapi');
+const Hapi = require('@hapi/hapi');
 
-var server = new Hapi.Server();
-var InsultGenerator = require('../lib/InsultGenerator');
+const InsultGenerator = require('../lib/InsultGenerator');
 
-var insults = new InsultGenerator({
-  file : path.resolve(__dirname, '../ext/words.tab')
-});
-var replaceRe = /{{insult}}/
-var template;
+const replaceRe = /{{insult}}/
+let template;
 
 
-server.connection({ 
-    host: 'localhost', 
-    port: 9200 
+const server = Hapi.Server({
+  host: 'localhost', 
+  port: 9200 
 });
 
 server.route({
     method: 'GET',
     path:'/', 
-    handler: function (request, reply) {
-      insults.generate().then(function (insult) {
-        reply(template.replace(replaceRe, insult));
-      });
+    async handler(request, reply) {
+      return template.replace(replaceRe, await InsultGenerator.generate());
     }
 });
 
@@ -42,15 +36,14 @@ server.route({
     method: 'GET',
     path:'/raw', 
     handler: function (request, reply) {
-      insults.generate().then(function (insult) {
-        reply(insult);
-      });
+
+      return InsultGenerator.generate();
     }
 });
 
 // Preload stuff, then run
-console.log("Loading template...");
-fs.readFile(path.resolve(__dirname, '../ext/index.html'), {encoding: 'utf8'}, function (err, contents) {
+console.debug('Loading template...');
+Fs.readFile(Path.resolve(__dirname, '../ext/index.html'), {encoding: 'utf8'}, function (err, contents) {
 
   if (err) {
     console.error(err);
@@ -58,14 +51,19 @@ fs.readFile(path.resolve(__dirname, '../ext/index.html'), {encoding: 'utf8'}, fu
   }
 
   template = contents;
-  console.log("Setting up insults...")
-  insults.generate().then(function (insult) {
+  console.log('Setting up insults...')
+  InsultGenerator.generate()
+  .then(function (insult) {
+
     server.start(function() {
-      console.log('Server running at:', server.info.uri);
+
+      console.debug('Server running at:', server.info.uri);
     });
-  }).catch(function (err) {
+  })
+  .catch(function (err) {
+
     console.error(err);
-    console.log("Error running insults... bad augur");
+    console.error('Error running insults... bad augur');
     process.exit(1);
   });
 });
index 768e45e407b3d64b0410804b26421fbef4cbd7b0..2c1ddcf0bc98fb49e514de970ca84876fc013cc6 100644 (file)
     <style>
       * {padding: 0; margin: 0;}
 
+      body {
+        display: flex;
+        align-items: center;
+        height: 100vh;
+        width: 100vw;
+      }
+
       .insult {
         font-size: 72px;
         font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
index 78dd713d723a25e6556c7d372de60cbc1769017b..c4e74f7e6c6ca4094865ea8a83a319a19d39b3f5 100644 (file)
@@ -1,66 +1,54 @@
 'use strict';
 
+const Cheerio = require('cheerio');
+const Fetch = require('node-fetch');
 
-var Promise = require('bluebird');
-var cheerio = require('cheerio');
-require('neon');
-var request = require('request');
-
-
-var Conjugator = Class({}, "Conjugator")({
-  prototype : {
-    _baseUrl: "http://www.spanishdict.com/conjugate/",
-    _selector: "table .ex-tip",
-
-    init : function init(config) {
-      config = config || {};
-
-      Object.keys(config).forEach(function (property) {
-        this[property] = config[property];
-      }, this);
-    },
-
-    conjugate : function conjugate(verb) {
-      return new Promise(function (resolve, reject) {
-        request(this._baseUrl + verb, function (err, res, body) {
-          var $, result, finalVerb ;
-          if (err) {
-            return reject(err);
-          }
-          $ = cheerio.load(body);
-          result = $(this._selector)[10];
-
-          if (!result) {
-            console.log("Verb not found: ", verb);
-            return reject(new Error("Not a valid verb"));
-          }
-
-          finalVerb = this._extractWord(result);
-
-          console.log(verb, finalVerb);
-          resolve(finalVerb);
-        }.bind(this));
-      }.bind(this));
-    },
-
-    _extractWord : function _extractWord(node) {
-      var word = "", components;
-
-      node.children.forEach(function (child) {
-        if (child.type === "text") {
-          word += child.data;
-        } else {
-          word += this._extractWord(child);
-        }
-      }, this);
-
-      word = word.split(",")[0]; // multiple conjugations, take 1
-      components = word.split(" "); // some special cases have two words
-                                    // use the last, why not
-
-      return components[components.length - 1];
-    }
+const internals = {
+  kBaseUrl: 'http://www.spanishdict.com/conjugate/',
+  kSelector: 'table .ex-tip',
+  kThirdPersonPresentPosition: 10,
+
+  extractWord(node) {
+
+    let word = '';
+
+    node.children.forEach(function (child) {
+
+      if (child.type === 'text') {
+        word += child.data;
+      } else {
+        word += internals.extractWord(child);
+      }
+    });
+
+    word = word.split(',')[0]; // multiple conjugations, take 1
+
+    const components = word.split(' '); // some special cases have two words
+                                        // use the last, why not
+
+    return components[components.length - 1];
   }
-});
+};
 
-module.exports = Conjugator;
+module.exports = {
+  async conjugate(verb) {
+
+    console.debug(`Conjugating ${verb}`);
+
+    const response = await Fetch(internals.kBaseUrl + verb);
+    const body = await response.text();
+
+    const $ = Cheerio.load(body);
+    const result = $(internals.kSelector)[internals.kThirdPersonPresentPosition];
+
+    if (!result) {
+      console.error('Verb not found: ', verb);
+      throw new Error('Not a valid verb');
+    }
+
+    const plainTextVerb = internals.extractWord(result);
+    console.debug(verb, plainTextVerb);
+
+    return plainTextVerb;
+  }
+};
index 5c40651a7493921e5dd5c118102d39b8d8ae4903..af9408b8a2c1e6b791ba258ca2880bdc4b59ec92 100644 (file)
 'use strict';
 
+const Fs = require('fs');
+const Path = require('path');
 
-var fs = require('fs');
-
-var Promise = require('bluebird');
-require('neon');
-
-var Conjugator = require('./Conjugator');
-
-var InsultGenerator = Class({}, "InsultGenerator")({
-  prototype : {
-    file : null,
-    verbs: null,
-    nouns: null,
-
-    _maxTries: 10,
-    _loaded: false,
-    _verbRe: /^[0-9]+\-v\s+?lemma\s+?([^ ]+)/,
-    _nounRe: /^[0-9]+\-n\s+?lemma\s+?([^ ]+)/,
-    _conjugator: null,
-
-    init : function init(config) {
-      config = config || {};
-
-      Object.keys(config).forEach(function (property) {
-        this[property] = config[property];
-      }, this);
-
-      this._conjugator = new Conjugator();
-    },
-
-    generate : function generate(config) {
-      var selectedVerb;
-      return this._load()
-          .then(function () {
-            return this._getVerb();
-          }.bind(this)).then(function (verb) {
-            return this._conjugateVerb(verb);
-          }.bind(this)).then(function (conjugatedVerb) {
-            selectedVerb = conjugatedVerb;
-            return this._getNoun();
-          }.bind(this)).then(function (noun) {
-            return this._generateInsult(selectedVerb, noun);
-          }.bind(this));
-    },
-
-    _load : function _load() {
-      return this._loadFile()
-          .then(function () {
-            return this._loadVerbs();
-          }.bind(this)).then(function () {
-            return this._loadNouns();
-          }.bind(this));
-    },
-
-    _loadFile : function _loadFile() {
-      return new Promise(function (resolve, reject) {
-        if (this._loaded) {
-          return resolve();
-        }
+const Conjugator = require('./Conjugator');
 
-        fs.readFile(this.file, {encoding: 'utf8'}, function (err, contents) {
-          if (err) {
-            return reject(err);
-          }
+const internals = {
+  kMaxAttempts: 10,
+  kVowels: ['a', 'e', 'i', 'o', 'u'],
+  kWordFile: Path.resolve(__dirname, '../ext/words.tab'),
+  kWordRe: /^[0-9]+\-(n|v)\s+?lemma\s+?([^ ]+)/,
 
-          this._contents = contents;
-          this._loaded = true;
-          resolve();
-        }.bind(this));
-      }.bind(this));
-    },
-
-    _loadVerbs : function _loadVerbs() {
-      return new Promise(function (resolve, reject) {
-        if (this.verbs) {
-          return resolve();
-        }
+  wordList: null,
 
-        this.verbs = [];
-        this._contents.split('\n').forEach(function (line) {
-          var matches;
-          matches = line.match(this._verbRe);
+  // Gets the list of words, key can be either nouns or verbs
 
-          if (matches) {
-            if (this.verbs.indexOf(matches[1]) === -1) {
-              this.verbs.push(matches[1])
-            }
-          }
-        }, this);
+  async getWordList(key) {
+
+    internals.wordList = internals.wordList || await internals.readWordFile();
+    return internals.wordList[key];
+  },
+
+  // Read the list of words and returns it
+
+  readWordFile() {
 
-        resolve();
-      }.bind(this));
-    },
+    return new Promise(function (resolve, reject) {
 
-    _loadNouns : function _loadNouns() {
-      return new Promise(function (resolve, reject) {
-        if (this.nouns) {
-          return resolve();
+      console.debug('Reading word file');
+      Fs.readFile(internals.kWordFile, {encoding: 'utf8'}, function (err, contents) {
+
+        if (err) {
+          return reject(err);
         }
 
-        this.nouns = [];
-        this._contents.split('\n').forEach(function (line) {
-          var matches;
-          matches = line.match(this._nounRe);
+        const verbs = new Set();
+        const nouns = new Set();
+        const words = contents.split('\n');
+
+        console.debug(`Found ${words.length} words, categorizing`);
+
+        words.forEach(function (line) {
+
+          const matches = line.match(internals.kWordRe);
 
           if (matches) {
-            if (this.nouns.indexOf(matches[1]) === -1) {
-              this.nouns.push(matches[1])
+            if (matches[1] === 'v') {
+              return verbs.add(matches[2]);
             }
+
+            nouns.add(matches[2]);
           }
-        }, this);
-
-        resolve();
-      }.bind(this));
-    },
-
-    _getVerb : function _getVerb() {
-      var index;
-      index = Math.floor(Math.random()*this.verbs.length);
-      return Promise.resolve(this.verbs[index]);
-    },
-
-    _conjugateVerb : function _conjugateVerb(verb) {
-      return new Promise(function (resolve, reject) {
-        var tries;
-
-        tries = 0;
-
-        var attemptConjugation = function attemptConjugation(verb, tries) {
-          if (tries > this._maxTries) {
-            return reject(new Error("Couldn't find a proper verb"));
-          };
-
-          this._conjugator.conjugate(verb)
-              .then(function (conjugatedVerb) {
-                resolve(conjugatedVerb);
-              })
-              .catch(function (err) {
-                this._getVerb().then(function (verb) {
-                  attemptConjugation.bind(this)(verb, tries + 1);
-                }.bind(this))
-              }.bind(this));
-        };
-
-        setTimeout(attemptConjugation.bind(this, verb, 0), 0);
-      }.bind(this));
-    },
-
-    _getNoun : function _getNoun() {
-      var index, noun;
-      index = Math.floor(Math.random()*this.nouns.length);
-      return Promise.resolve(this.nouns[index].toLowerCase());
-    },
-
-    _generateInsult : function _generateInsult(verb, noun) {
-      return Promise.resolve(verb + this._pluralize(noun));
-    },
-
-    // Super dumb pluralizer
-    _pluralize : function _pluralize(noun) {
-      var lastLetter;
-
-      lastLetter = noun[noun.length - 1];
-
-      if (lastLetter === "s") {
-        return noun;
-      }
-
-      if (["a","e","i","o","u"].indexOf(lastLetter) >= 0) {
-        return noun + "s"
-      }
-
-      return noun + "es";
+        });
+
+        console.debug(`Nouns: ${nouns.size}, Verbs: ${verbs.size}`);
+
+        resolve({
+          verbs: [...verbs],
+          nouns: [...nouns]
+        });
+      });
+    });
+  },
+
+  // Gets a conjugated verb
+
+  async getVerb() {
+
+    const verbs = await internals.getWordList('verbs');
+    const verb = verbs[Math.floor(Math.random()*verbs.length)];
+    return await Conjugator.conjugate(verb);
+  },
+
+  // Gets a pluralized noun
+
+  async getNoun() {
+
+    const nouns = await internals.getWordList('nouns');
+    const noun = nouns[Math.floor(Math.random()*nouns.length)];
+    return internals.pluralize(noun);
+  },
+
+  // Pluralizes a word
+
+  pluralize(noun) {
+
+    const lastLetter = noun[noun.length - 1];
+
+    if (lastLetter === 's') {
+      return noun;
     }
+
+    if (internals.kVowels.indexOf(lastLetter) >= 0) {
+      return noun + 's'
+    }
+
+    return noun + 'es';
   }
-});
+};
+
+module.exports = {
 
-module.exports = InsultGenerator;
+  // Generates an insult.
+
+  async generate() {
+
+    const verb = await internals.getVerb();
+    const noun = await internals.getNoun();
+
+    return (verb + noun).toLowerCase();
+  }
+};
index 31c38f5819cb69f6f237c93c180677659c23271a..a5c48dcdaf14a5534a5dd49aa0d8c940b44aeb9f 100644 (file)
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {
-    "ansi-regex": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
-      "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
-    },
-    "ansi-styles": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
-    },
-    "asn1": {
-      "version": "0.1.11",
-      "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz",
-      "integrity": "sha1-VZvhg3bQik7E2+gId9J4GGObLfc="
-    },
-    "assert-plus": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz",
-      "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA="
-    },
-    "async": {
-      "version": "2.6.3",
-      "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
-      "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
-      "requires": {
-        "lodash": "^4.17.14"
-      },
-      "dependencies": {
-        "lodash": {
-          "version": "4.17.15",
-          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
-          "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
-        }
-      }
-    },
-    "aws-sign2": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz",
-      "integrity": "sha1-xXED96F/wDfwLXwuZLYC6iI/fWM="
-    },
-    "bl": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/bl/-/bl-1.0.3.tgz",
-      "integrity": "sha1-/FQhoo/UImA2w7OJGmaiW8ZNIm4=",
-      "requires": {
-        "readable-stream": "~2.0.5"
-      },
-      "dependencies": {
-        "isarray": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
-        },
-        "readable-stream": {
-          "version": "2.0.6",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
-          "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
-          "requires": {
-            "core-util-is": "~1.0.0",
-            "inherits": "~2.0.1",
-            "isarray": "~1.0.0",
-            "process-nextick-args": "~1.0.6",
-            "string_decoder": "~0.10.x",
-            "util-deprecate": "~1.0.1"
-          }
-        }
-      }
-    },
-    "bluebird": {
-      "version": "2.9.34",
-      "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.9.34.tgz",
-      "integrity": "sha1-L3tOyAIWMoqf3evfacjUlC/v99g="
+    "@hapi/accept": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/@hapi/accept/-/accept-5.0.1.tgz",
+      "integrity": "sha512-fMr4d7zLzsAXo28PRRQPXR1o2Wmu+6z+VY1UzDp0iFo13Twj8WePakwXBiqn3E1aAlTpSNzCXdnnQXFhst8h8Q==",
+      "requires": {
+        "@hapi/boom": "9.x.x",
+        "@hapi/hoek": "9.x.x"
+      }
     },
-    "boolbase": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
-      "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
+    "@hapi/address": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/@hapi/address/-/address-4.0.1.tgz",
+      "integrity": "sha512-0oEP5UiyV4f3d6cBL8F3Z5S7iWSX39Knnl0lY8i+6gfmmIBj44JCBNtcMgwyS+5v7j3VYavNay0NFHDS+UGQcw==",
+      "requires": {
+        "@hapi/hoek": "^9.0.0"
+      }
     },
-    "boom": {
-      "version": "2.10.1",
-      "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
-      "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
+    "@hapi/ammo": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/@hapi/ammo/-/ammo-5.0.1.tgz",
+      "integrity": "sha512-FbCNwcTbnQP4VYYhLNGZmA76xb2aHg9AMPiy18NZyWMG310P5KdFGyA9v2rm5ujrIny77dEEIkMOwl0Xv+fSSA==",
       "requires": {
-        "hoek": "2.x.x"
+        "@hapi/hoek": "9.x.x"
       }
     },
-    "caseless": {
-      "version": "0.11.0",
-      "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz",
-      "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c="
+    "@hapi/b64": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/@hapi/b64/-/b64-5.0.0.tgz",
+      "integrity": "sha512-ngu0tSEmrezoiIaNGG6rRvKOUkUuDdf4XTPnONHGYfSGRmDqPZX5oJL6HAdKTo1UQHECbdB4OzhWrfgVppjHUw==",
+      "requires": {
+        "@hapi/hoek": "9.x.x"
+      }
     },
-    "chalk": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
-      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+    "@hapi/boom": {
+      "version": "9.1.0",
+      "resolved": "https://registry.npmjs.org/@hapi/boom/-/boom-9.1.0.tgz",
+      "integrity": "sha512-4nZmpp4tXbm162LaZT45P7F7sgiem8dwAh2vHWT6XX24dozNjGMg6BvKCRvtCUcmcXqeMIUqWN8Rc5X8yKuROQ==",
       "requires": {
-        "ansi-styles": "^2.2.1",
-        "escape-string-regexp": "^1.0.2",
-        "has-ansi": "^2.0.0",
-        "strip-ansi": "^3.0.0",
-        "supports-color": "^2.0.0"
+        "@hapi/hoek": "9.x.x"
       }
     },
-    "cheerio": {
-      "version": "0.19.0",
-      "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.19.0.tgz",
-      "integrity": "sha1-dy5wFfLuKZZQltcepBdbdas1SSU=",
+    "@hapi/bounce": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/@hapi/bounce/-/bounce-2.0.0.tgz",
+      "integrity": "sha512-JesW92uyzOOyuzJKjoLHM1ThiOvHPOLDHw01YV8yh5nCso7sDwJho1h0Ad2N+E62bZyz46TG3xhAi/78Gsct6A==",
       "requires": {
-        "css-select": "~1.0.0",
-        "dom-serializer": "~0.1.0",
-        "entities": "~1.1.1",
-        "htmlparser2": "~3.8.1",
-        "lodash": "^3.2.0"
+        "@hapi/boom": "9.x.x",
+        "@hapi/hoek": "9.x.x"
       }
     },
-    "combined-stream": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
-      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+    "@hapi/bourne": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-2.0.0.tgz",
+      "integrity": "sha512-WEezM1FWztfbzqIUbsDzFRVMxSoLy3HugVcux6KDDtTqzPsLE8NDRHfXvev66aH1i2oOKKar3/XDjbvh/OUBdg=="
+    },
+    "@hapi/call": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/@hapi/call/-/call-8.0.0.tgz",
+      "integrity": "sha512-4xHIWWqaIDQlVU88XAnomACSoC7iWUfaLfdu2T7I0y+HFFwZUrKKGfwn6ik4kwKsJRMnOliG3UXsF8V/94+Lkg==",
       "requires": {
-        "delayed-stream": "~1.0.0"
+        "@hapi/address": "4.x.x",
+        "@hapi/boom": "9.x.x",
+        "@hapi/hoek": "9.x.x"
       }
     },
-    "commander": {
-      "version": "2.20.0",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
-      "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ=="
+    "@hapi/catbox": {
+      "version": "11.1.0",
+      "resolved": "https://registry.npmjs.org/@hapi/catbox/-/catbox-11.1.0.tgz",
+      "integrity": "sha512-FDEjfn26RZRyOEPeZdaAL7dRiAK5FOGuwTnTw0gxK30csAlKeOHsEnoIxnLIXx7QOS17eUaOk6+MiweWQM6Keg==",
+      "requires": {
+        "@hapi/boom": "9.x.x",
+        "@hapi/hoek": "9.x.x",
+        "@hapi/joi": "17.x.x",
+        "@hapi/podium": "4.x.x"
+      }
     },
-    "core-util-is": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
-      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+    "@hapi/catbox-memory": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/@hapi/catbox-memory/-/catbox-memory-5.0.0.tgz",
+      "integrity": "sha512-ByuxVJPHNaXwLzbBv4GdTr6ccpe1nG+AfYt+8ftDWEJY7EWBWzD+Klhy5oPTDGzU26pNUh1e7fcYI1ILZRxAXQ==",
+      "requires": {
+        "@hapi/boom": "9.x.x",
+        "@hapi/hoek": "9.x.x"
+      }
     },
-    "cryptiles": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
-      "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
+    "@hapi/content": {
+      "version": "5.0.2",
+      "resolved": "https://registry.npmjs.org/@hapi/content/-/content-5.0.2.tgz",
+      "integrity": "sha512-mre4dl1ygd4ZyOH3tiYBrOUBzV7Pu/EOs8VLGf58vtOEECWed8Uuw6B4iR9AN/8uQt42tB04qpVaMyoMQh0oMw==",
       "requires": {
-        "boom": "2.x.x"
+        "@hapi/boom": "9.x.x"
       }
     },
-    "css-select": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.0.0.tgz",
-      "integrity": "sha1-sRIcpRhI3SZOIkTQWM7iVN7rRLA=",
+    "@hapi/cryptiles": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/@hapi/cryptiles/-/cryptiles-5.0.0.tgz",
+      "integrity": "sha512-Yq43ti9N51Z7jbm0Q7YVCcofA+4Gh5wsBX/jZ++Z+FM8GYfBQ1WmI9ufZSL+BVX8vRxzDkdQ2fKoG6cxOQlnVQ==",
       "requires": {
-        "boolbase": "~1.0.0",
-        "css-what": "1.0",
-        "domutils": "1.4",
-        "nth-check": "~1.0.0"
+        "@hapi/boom": "9.x.x"
       }
     },
-    "css-what": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/css-what/-/css-what-1.0.0.tgz",
-      "integrity": "sha1-18wt9FGAZm+Z0rFEYmOUaeAPc2w="
+    "@hapi/file": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/@hapi/file/-/file-2.0.0.tgz",
+      "integrity": "sha512-WSrlgpvEqgPWkI18kkGELEZfXr0bYLtr16iIN4Krh9sRnzBZN6nnWxHFxtsnP684wueEySBbXPDg/WfA9xJdBQ=="
     },
-    "ctype": {
-      "version": "0.5.3",
-      "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz",
-      "integrity": "sha1-gsGMJGH3QRTvFsE1IkrQuRRMoS8="
+    "@hapi/formula": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-2.0.0.tgz",
+      "integrity": "sha512-V87P8fv7PI0LH7LiVi8Lkf3x+KCO7pQozXRssAHNXXL9L1K+uyu4XypLXwxqVDKgyQai6qj3/KteNlrqDx4W5A=="
     },
-    "delayed-stream": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
-      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
+    "@hapi/hapi": {
+      "version": "19.1.1",
+      "resolved": "https://registry.npmjs.org/@hapi/hapi/-/hapi-19.1.1.tgz",
+      "integrity": "sha512-rpQzSs0XsHSF7usM4qdJJ0Bcmhs9stWhUW3OiamW33bw4qL8q3uEgUKB9KH8ODmluCAkkXOQ0X0Dh9t94E5VIw==",
+      "requires": {
+        "@hapi/accept": "^5.0.1",
+        "@hapi/ammo": "^5.0.1",
+        "@hapi/boom": "9.x.x",
+        "@hapi/bounce": "2.x.x",
+        "@hapi/call": "8.x.x",
+        "@hapi/catbox": "11.x.x",
+        "@hapi/catbox-memory": "5.x.x",
+        "@hapi/heavy": "7.x.x",
+        "@hapi/hoek": "9.x.x",
+        "@hapi/joi": "17.x.x",
+        "@hapi/mimos": "5.x.x",
+        "@hapi/podium": "4.x.x",
+        "@hapi/shot": "5.x.x",
+        "@hapi/somever": "3.x.x",
+        "@hapi/statehood": "^7.0.2",
+        "@hapi/subtext": "^7.0.3",
+        "@hapi/teamwork": "4.x.x",
+        "@hapi/topo": "5.x.x"
+      }
     },
-    "dom-serializer": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz",
-      "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==",
+    "@hapi/heavy": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/@hapi/heavy/-/heavy-7.0.0.tgz",
+      "integrity": "sha512-n/nheUG6zNleWkjY+3fzV3VJIAumUCaa/WoTmurjqlYY5JgC5ZKOpvP7tWi8rXmKZhbcXgjH3fHFoM55LoBT7g==",
       "requires": {
-        "domelementtype": "^1.3.0",
-        "entities": "^1.1.1"
+        "@hapi/boom": "9.x.x",
+        "@hapi/hoek": "9.x.x",
+        "@hapi/joi": "17.x.x"
       }
     },
-    "domelementtype": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
-      "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w=="
+    "@hapi/hoek": {
+      "version": "9.0.4",
+      "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.0.4.tgz",
+      "integrity": "sha512-EwaJS7RjoXUZ2cXXKZZxZqieGtc7RbvQhUy8FwDoMQtxWVi14tFjeFCYPZAM1mBCpOpiBpyaZbb9NeHc7eGKgw=="
     },
-    "domhandler": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz",
-      "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=",
+    "@hapi/iron": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/@hapi/iron/-/iron-6.0.0.tgz",
+      "integrity": "sha512-zvGvWDufiTGpTJPG1Y/McN8UqWBu0k/xs/7l++HVU535NLHXsHhy54cfEMdW7EjwKfbBfM9Xy25FmTiobb7Hvw==",
       "requires": {
-        "domelementtype": "1"
+        "@hapi/b64": "5.x.x",
+        "@hapi/boom": "9.x.x",
+        "@hapi/bourne": "2.x.x",
+        "@hapi/cryptiles": "5.x.x",
+        "@hapi/hoek": "9.x.x"
       }
     },
-    "domutils": {
-      "version": "1.4.3",
-      "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.4.3.tgz",
-      "integrity": "sha1-CGVRN5bGswYDGFDhdVFrr4C3Km8=",
+    "@hapi/joi": {
+      "version": "17.1.1",
+      "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-17.1.1.tgz",
+      "integrity": "sha512-p4DKeZAoeZW4g3u7ZeRo+vCDuSDgSvtsB/NpfjXEHTUjSeINAi/RrVOWiVQ1isaoLzMvFEhe8n5065mQq1AdQg==",
       "requires": {
-        "domelementtype": "1"
+        "@hapi/address": "^4.0.1",
+        "@hapi/formula": "^2.0.0",
+        "@hapi/hoek": "^9.0.0",
+        "@hapi/pinpoint": "^2.0.0",
+        "@hapi/topo": "^5.0.0"
       }
     },
-    "entities": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
-      "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
+    "@hapi/mimos": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/@hapi/mimos/-/mimos-5.0.0.tgz",
+      "integrity": "sha512-EVS6wJYeE73InTlPWt+2e3Izn319iIvffDreci3qDNT+t3lA5ylJ0/SoTaID8e0TPNUkHUSsgJZXEmLHvoYzrA==",
+      "requires": {
+        "@hapi/hoek": "9.x.x",
+        "mime-db": "1.x.x"
+      }
     },
-    "escape-string-regexp": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+    "@hapi/nigel": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/@hapi/nigel/-/nigel-4.0.0.tgz",
+      "integrity": "sha512-Bqs1pjcDnDQo/XGoiCCNHWTFcMzPbz3L4KU04njeFQMzzEmsojMRX7TX+PezQYCMKtHJOtMg0bHxZyMGqYtbSA==",
+      "requires": {
+        "@hapi/hoek": "9.x.x",
+        "@hapi/vise": "4.x.x"
+      }
     },
-    "extend": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
-      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+    "@hapi/pez": {
+      "version": "5.0.2",
+      "resolved": "https://registry.npmjs.org/@hapi/pez/-/pez-5.0.2.tgz",
+      "integrity": "sha512-jr1lAm8mE7J2IBxvDIuDI1qy2aAsoaD2jxOUd/7JRg/Vmrzco8HdKhtz4fKk6KHU6zbbsAp5m5aSWWVTUrag7g==",
+      "requires": {
+        "@hapi/b64": "5.x.x",
+        "@hapi/boom": "9.x.x",
+        "@hapi/content": "^5.0.2",
+        "@hapi/hoek": "9.x.x",
+        "@hapi/nigel": "4.x.x"
+      }
     },
-    "forever-agent": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
-      "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
+    "@hapi/pinpoint": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.0.tgz",
+      "integrity": "sha512-vzXR5MY7n4XeIvLpfl3HtE3coZYO4raKXW766R6DZw/6aLqR26iuZ109K7a0NtF2Db0jxqh7xz2AxkUwpUFybw=="
     },
-    "form-data": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.1.tgz",
-      "integrity": "sha1-rjFduaSQf6BlUCMEpm13M0de43w=",
+    "@hapi/podium": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/@hapi/podium/-/podium-4.1.0.tgz",
+      "integrity": "sha512-k/n0McAu8PvonfQRLyKKUvvdb+Gh/O5iAeIwv535Hpxw9B1qZcrYdZyWtHZ8O5PkA9/b/Kk+BdvtgcxeKMB/2g==",
       "requires": {
-        "async": "^2.0.1",
-        "combined-stream": "^1.0.5",
-        "mime-types": "^2.1.11"
+        "@hapi/hoek": "9.x.x",
+        "@hapi/joi": "17.x.x",
+        "@hapi/teamwork": "4.x.x"
       }
     },
-    "generate-function": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz",
-      "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
+    "@hapi/shot": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/@hapi/shot/-/shot-5.0.0.tgz",
+      "integrity": "sha512-JXddnJkRh3Xhv9lY1tA+TSIUaoODKbdNIPL/M8WFvFQKOttmGaDeqTW5e8Gf01LtLI7L5DraLMULHjrK1+YNFg==",
       "requires": {
-        "is-property": "^1.0.2"
+        "@hapi/hoek": "9.x.x",
+        "@hapi/joi": "17.x.x"
       }
     },
-    "generate-object-property": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
-      "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=",
-      "requires": {
-        "is-property": "^1.0.0"
-      }
-    },
-    "hapi": {
-      "version": "9.2.0",
-      "resolved": "https://registry.npmjs.org/hapi/-/hapi-9.2.0.tgz",
-      "integrity": "sha1-aBa1nThwEup84c4zZlWwK0YK40Y=",
-      "requires": {
-        "accept": "1.x.x",
-        "ammo": "1.x.x",
-        "boom": "^2.5.x",
-        "call": "2.x.x",
-        "catbox": "6.x.x",
-        "catbox-memory": "1.x.x",
-        "cryptiles": "2.x.x",
-        "heavy": "3.x.x",
-        "hoek": "^2.14.x",
-        "iron": "2.x.x",
-        "items": "1.x.x",
-        "joi": "6.x.x",
-        "kilt": "^1.1.x",
-        "mimos": "2.x.x",
-        "peekaboo": "1.x.x",
-        "qs": "4.x.x",
-        "shot": "1.x.x",
-        "statehood": "2.x.x",
-        "subtext": "2.x.x",
-        "topo": "1.x.x"
-      },
-      "dependencies": {
-        "accept": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/accept/-/accept-1.1.0.tgz",
-          "integrity": "sha1-x7VWfJmt5Kx8k38qm8HFZhYKMLU=",
-          "requires": {
-            "boom": "2.x.x",
-            "hoek": "2.x.x"
-          }
-        },
-        "ammo": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/ammo/-/ammo-1.0.1.tgz",
-          "integrity": "sha1-j4rdFM1Jve3jurOj4OvK8h0D3os=",
-          "requires": {
-            "boom": "2.x.x",
-            "hoek": "2.x.x"
-          }
-        },
-        "boom": {
-          "version": "2.8.0",
-          "resolved": "https://registry.npmjs.org/boom/-/boom-2.8.0.tgz",
-          "integrity": "sha1-MXvf1HAY/n3Xmw6dpz7+JEEZ/fE=",
-          "requires": {
-            "hoek": "2.x.x"
-          }
-        },
-        "call": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/call/-/call-2.0.2.tgz",
-          "integrity": "sha1-nJgxq9B2lIb97oOkEUm4KbMtBsA=",
-          "requires": {
-            "boom": "2.x.x",
-            "hoek": "2.x.x"
-          }
-        },
-        "catbox": {
-          "version": "6.0.0",
-          "resolved": "https://registry.npmjs.org/catbox/-/catbox-6.0.0.tgz",
-          "integrity": "sha1-6i8pT6Bemvx+IhDTI/XeU6OAQ+c=",
-          "requires": {
-            "boom": "2.x.x",
-            "hoek": "2.x.x",
-            "joi": "6.x.x"
-          }
-        },
-        "catbox-memory": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/catbox-memory/-/catbox-memory-1.1.2.tgz",
-          "integrity": "sha1-M8kYOjKzGUXuikhNDjw8u4Lq7Bo=",
-          "requires": {
-            "hoek": "2.x.x"
-          }
-        },
-        "cryptiles": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.4.tgz",
-          "integrity": "sha1-CeoXdbnhx95+YKmdQqtvCM4aEoU=",
-          "requires": {
-            "boom": "2.x.x"
-          }
-        },
-        "heavy": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/heavy/-/heavy-3.0.0.tgz",
-          "integrity": "sha1-/QEIdiExYy+IVIontVQSws9SKwA=",
-          "requires": {
-            "boom": "2.x.x",
-            "hoek": "2.x.x",
-            "joi": "5.x.x"
-          }
-        },
-        "hoek": {
-          "version": "2.14.0",
-          "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.14.0.tgz",
-          "integrity": "sha1-gSEWkfUqWoNa5J7b8eickANHaqQ="
-        },
-        "iron": {
-          "version": "2.1.3",
-          "resolved": "https://registry.npmjs.org/iron/-/iron-2.1.3.tgz",
-          "integrity": "sha1-cbjzV9gGquA6kKdFuaqv/sfi3eQ=",
-          "requires": {
-            "boom": "2.x.x",
-            "cryptiles": "2.x.x",
-            "hoek": "2.x.x"
-          }
-        },
-        "items": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/items/-/items-1.1.0.tgz",
-          "integrity": "sha1-rZ1VhAsimGDLPRYLMidMLUvZ4mI="
-        },
-        "joi": {
-          "version": "6.6.1",
-          "resolved": "https://registry.npmjs.org/joi/-/joi-6.6.1.tgz",
-          "integrity": "sha1-NXR2aGFCb4xBGb9qgLU9C0ib9Qc=",
-          "requires": {
-            "hoek": "^2.2.x",
-            "isemail": "1.x.x",
-            "moment": "2.x.x",
-            "topo": "1.x.x"
-          },
-          "dependencies": {
-            "isemail": {
-              "version": "1.1.1",
-              "resolved": "https://registry.npmjs.org/isemail/-/isemail-1.1.1.tgz",
-              "integrity": "sha1-4Mj23D9HCX53dzlcaJYnGqJWw7U="
-            },
-            "moment": {
-              "version": "2.10.6",
-              "resolved": "https://registry.npmjs.org/moment/-/moment-2.10.6.tgz",
-              "integrity": "sha1-bLIZZ8ecunsMpeZmRPFzZis++nc="
-            }
-          }
-        },
-        "kilt": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/kilt/-/kilt-1.1.1.tgz",
-          "integrity": "sha1-d7SmFjyn+lshN6iMFzNCFuwj1ds=",
-          "requires": {
-            "hoek": "2.x.x"
-          }
-        },
-        "mimos": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/mimos/-/mimos-2.0.2.tgz",
-          "integrity": "sha1-wyQXF+dblZkr54esfdbbGptTmx4=",
-          "requires": {
-            "hoek": "2.x.x",
-            "mime-db": "1.x.x"
-          },
-          "dependencies": {
-            "mime-db": {
-              "version": "1.18.0",
-              "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.18.0.tgz",
-              "integrity": "sha1-UxfigiTAivHUhPYJc904a6jzieA="
-            }
-          }
-        },
-        "peekaboo": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/peekaboo/-/peekaboo-1.0.0.tgz",
-          "integrity": "sha1-wNspJq1lTSygH3ymUKtFkadk/EI="
-        },
-        "qs": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/qs/-/qs-4.0.0.tgz",
-          "integrity": "sha1-wx2bdOwn33XlQ6hseHKO2NRiNgc="
-        },
-        "shot": {
-          "version": "1.6.0",
-          "resolved": "https://registry.npmjs.org/shot/-/shot-1.6.0.tgz",
-          "integrity": "sha1-jIo2fgyIyI/O1d6y7aWUW0avErI=",
-          "requires": {
-            "hoek": "2.x.x"
-          }
-        },
-        "statehood": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/statehood/-/statehood-2.1.1.tgz",
-          "integrity": "sha1-AfFwtmxeklqvZ5qdMiulkYb8AAk=",
-          "requires": {
-            "boom": "2.x.x",
-            "cryptiles": "2.x.x",
-            "hoek": "2.x.x",
-            "iron": "2.x.x",
-            "items": "1.x.x",
-            "joi": "6.x.x"
-          }
-        },
-        "subtext": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/subtext/-/subtext-2.0.0.tgz",
-          "integrity": "sha1-I5lQ6SCBQ/FUirJeHJV5vbaNiU4=",
-          "requires": {
-            "boom": "2.x.x",
-            "content": "1.x.x",
-            "hoek": "2.x.x",
-            "pez": "1.x.x",
-            "qs": "4.x.x",
-            "wreck": "6.x.x"
-          },
-          "dependencies": {
-            "content": {
-              "version": "1.0.2",
-              "resolved": "https://registry.npmjs.org/content/-/content-1.0.2.tgz",
-              "integrity": "sha1-y37fMq/vF8SKz9vSH/mMIzFa6CQ=",
-              "requires": {
-                "boom": "2.x.x",
-                "hoek": "2.x.x"
-              }
-            },
-            "pez": {
-              "version": "1.0.0",
-              "resolved": "https://registry.npmjs.org/pez/-/pez-1.0.0.tgz",
-              "integrity": "sha1-hEMYpc5wku7d/6KV4YB5rHefoBg=",
-              "requires": {
-                "b64": "2.x.x",
-                "boom": "2.x.x",
-                "content": "1.x.x",
-                "hoek": "2.x.x",
-                "nigel": "1.x.x"
-              },
-              "dependencies": {
-                "b64": {
-                  "version": "2.0.0",
-                  "resolved": "https://registry.npmjs.org/b64/-/b64-2.0.0.tgz",
-                  "integrity": "sha1-tZlbJPR+v9nxMQF6bntdZHVvtvM=",
-                  "requires": {
-                    "hoek": "2.x.x"
-                  }
-                },
-                "nigel": {
-                  "version": "1.0.1",
-                  "resolved": "https://registry.npmjs.org/nigel/-/nigel-1.0.1.tgz",
-                  "integrity": "sha1-RjmJr4gSePuqHTzJOCPb0XtDYKE=",
-                  "requires": {
-                    "hoek": "2.x.x",
-                    "vise": "1.x.x"
-                  },
-                  "dependencies": {
-                    "vise": {
-                      "version": "1.0.0",
-                      "resolved": "https://registry.npmjs.org/vise/-/vise-1.0.0.tgz",
-                      "integrity": "sha1-KDRb5N5aNB4V/SgW/Z6j5zA+jfM=",
-                      "requires": {
-                        "hoek": "2.x.x"
-                      }
-                    }
-                  }
-                }
-              }
-            },
-            "wreck": {
-              "version": "6.1.0",
-              "resolved": "https://registry.npmjs.org/wreck/-/wreck-6.1.0.tgz",
-              "integrity": "sha1-DLV9Jkk8LGN91Dkizv5xLGmVSM8=",
-              "requires": {
-                "boom": "2.x.x",
-                "hoek": "2.x.x"
-              }
-            }
-          }
-        },
-        "topo": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/topo/-/topo-1.0.3.tgz",
-          "integrity": "sha1-576uXqSQZ9dp5Sjn40ZC7e1/Llo=",
-          "requires": {
-            "hoek": "2.x.x"
-          }
-        }
-      }
-    },
-    "har-validator": {
-      "version": "1.8.0",
-      "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-1.8.0.tgz",
-      "integrity": "sha1-2DhCsOtMQ1lgrrEIoGejqpTA7rI=",
-      "requires": {
-        "bluebird": "^2.9.30",
-        "chalk": "^1.0.0",
-        "commander": "^2.8.1",
-        "is-my-json-valid": "^2.12.0"
-      }
-    },
-    "has-ansi": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
-      "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+    "@hapi/somever": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/@hapi/somever/-/somever-3.0.0.tgz",
+      "integrity": "sha512-Upw/kmKotC9iEmK4y047HMYe4LDKsE5NWfjgX41XNKmFvxsQL7OiaCWVhuyyhU0ShDGBfIAnCH8jZr49z/JzZA==",
       "requires": {
-        "ansi-regex": "^2.0.0"
+        "@hapi/bounce": "2.x.x",
+        "@hapi/hoek": "9.x.x"
       }
     },
-    "hawk": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
-      "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
+    "@hapi/statehood": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/@hapi/statehood/-/statehood-7.0.2.tgz",
+      "integrity": "sha512-+0VNxysQu+UYzkfvAXq3X4aN65TnUwiR7gsq2cQ/4Rq26nCJjHAfrkYReEeshU2hPmJ3m5QuaBzyDqRm8WOpyg==",
       "requires": {
-        "boom": "2.x.x",
-        "cryptiles": "2.x.x",
-        "hoek": "2.x.x",
-        "sntp": "1.x.x"
+        "@hapi/boom": "9.x.x",
+        "@hapi/bounce": "2.x.x",
+        "@hapi/bourne": "2.x.x",
+        "@hapi/cryptiles": "5.x.x",
+        "@hapi/hoek": "9.x.x",
+        "@hapi/iron": "6.x.x",
+        "@hapi/joi": "17.x.x"
       }
     },
-    "hoek": {
-      "version": "2.16.3",
-      "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
-      "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0="
+    "@hapi/subtext": {
+      "version": "7.0.3",
+      "resolved": "https://registry.npmjs.org/@hapi/subtext/-/subtext-7.0.3.tgz",
+      "integrity": "sha512-CekDizZkDGERJ01C0+TzHlKtqdXZxzSWTOaH6THBrbOHnsr3GY+yiMZC+AfNCypfE17RaIakGIAbpL2Tk1z2+A==",
+      "requires": {
+        "@hapi/boom": "9.x.x",
+        "@hapi/bourne": "2.x.x",
+        "@hapi/content": "^5.0.2",
+        "@hapi/file": "2.x.x",
+        "@hapi/hoek": "9.x.x",
+        "@hapi/pez": "^5.0.1",
+        "@hapi/wreck": "17.x.x"
+      }
     },
-    "htmlparser2": {
-      "version": "3.8.3",
-      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz",
-      "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=",
-      "requires": {
-        "domelementtype": "1",
-        "domhandler": "2.3",
-        "domutils": "1.5",
-        "entities": "1.0",
-        "readable-stream": "1.1"
-      },
-      "dependencies": {
-        "domutils": {
-          "version": "1.5.1",
-          "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
-          "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
-          "requires": {
-            "dom-serializer": "0",
-            "domelementtype": "1"
-          }
-        },
-        "entities": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz",
-          "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY="
-        }
-      }
-    },
-    "http-signature": {
-      "version": "0.11.0",
-      "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.11.0.tgz",
-      "integrity": "sha1-F5bPZ6ABrVzWhJ3KCZFIXwkIn+Y=",
-      "requires": {
-        "asn1": "0.1.11",
-        "assert-plus": "^0.1.5",
-        "ctype": "0.5.3"
+    "@hapi/teamwork": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/@hapi/teamwork/-/teamwork-4.0.0.tgz",
+      "integrity": "sha512-V6xYOrr5aFv/IJqNPneaYCu8vuGTKisamqHVRS3JJnbZr18TrpXdsJOYk9pjPhFti+M2YETPebQLUr820N5NoQ=="
+    },
+    "@hapi/topo": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.0.0.tgz",
+      "integrity": "sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw==",
+      "requires": {
+        "@hapi/hoek": "^9.0.0"
       }
     },
-    "inherits": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+    "@hapi/vise": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/@hapi/vise/-/vise-4.0.0.tgz",
+      "integrity": "sha512-eYyLkuUiFZTer59h+SGy7hUm+qE9p+UemePTHLlIWppEd+wExn3Df5jO04bFQTm7nleF5V8CtuYQYb+VFpZ6Sg==",
+      "requires": {
+        "@hapi/hoek": "9.x.x"
+      }
+    },
+    "@hapi/wreck": {
+      "version": "17.0.0",
+      "resolved": "https://registry.npmjs.org/@hapi/wreck/-/wreck-17.0.0.tgz",
+      "integrity": "sha512-d8lqCinbKyDByn7GzJDRDbitddhIEydNm44UcAMejfhEH3o4IYvKYq6K8cAqXbilXPuvZc0ErlUOg9SDdgRtMw==",
+      "requires": {
+        "@hapi/boom": "9.x.x",
+        "@hapi/bourne": "2.x.x",
+        "@hapi/hoek": "9.x.x"
+      }
     },
-    "ip-regex": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
-      "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk="
+    "@types/node": {
+      "version": "13.13.0",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.0.tgz",
+      "integrity": "sha512-WE4IOAC6r/yBZss1oQGM5zs2D7RuKR6Q+w+X2SouPofnWn+LbCqClRyhO3ZE7Ix8nmFgo/oVuuE01cJT2XB13A=="
     },
-    "is-my-ip-valid": {
+    "boolbase": {
       "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz",
-      "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ=="
+      "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+      "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
     },
-    "is-my-json-valid": {
-      "version": "2.20.0",
-      "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.0.tgz",
-      "integrity": "sha512-XTHBZSIIxNsIsZXg7XB5l8z/OBFosl1Wao4tXLpeC7eKU4Vm/kdop2azkPqULwnfGQjmeDIyey9g7afMMtdWAA==",
+    "cheerio": {
+      "version": "1.0.0-rc.3",
+      "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz",
+      "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==",
       "requires": {
-        "generate-function": "^2.0.0",
-        "generate-object-property": "^1.1.0",
-        "is-my-ip-valid": "^1.0.0",
-        "jsonpointer": "^4.0.0",
-        "xtend": "^4.0.0"
+        "css-select": "~1.2.0",
+        "dom-serializer": "~0.1.1",
+        "entities": "~1.1.1",
+        "htmlparser2": "^3.9.1",
+        "lodash": "^4.15.0",
+        "parse5": "^3.0.1"
       }
     },
-    "is-property": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
-      "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ="
+    "css-select": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
+      "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
+      "requires": {
+        "boolbase": "~1.0.0",
+        "css-what": "2.1",
+        "domutils": "1.5.1",
+        "nth-check": "~1.0.1"
+      }
+    },
+    "css-what": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz",
+      "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg=="
     },
-    "isarray": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
-      "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+    "dom-serializer": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz",
+      "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==",
+      "requires": {
+        "domelementtype": "^1.3.0",
+        "entities": "^1.1.1"
+      }
     },
-    "isstream": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
-      "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
+    "domelementtype": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
+      "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w=="
     },
-    "json-stringify-safe": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
-      "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
+    "domhandler": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+      "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+      "requires": {
+        "domelementtype": "1"
+      }
     },
-    "jsonpointer": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz",
-      "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk="
+    "domutils": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+      "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+      "requires": {
+        "dom-serializer": "0",
+        "domelementtype": "1"
+      }
     },
-    "lodash": {
+    "entities": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+      "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
+    },
+    "htmlparser2": {
       "version": "3.10.1",
-      "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
-      "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y="
+      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
+      "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
+      "requires": {
+        "domelementtype": "^1.3.1",
+        "domhandler": "^2.3.0",
+        "domutils": "^1.5.1",
+        "entities": "^1.1.1",
+        "inherits": "^2.0.1",
+        "readable-stream": "^3.1.1"
+      }
+    },
+    "inherits": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+    },
+    "lodash": {
+      "version": "4.17.15",
+      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+      "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
     },
     "mime-db": {
       "version": "1.40.0",
       "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
       "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA=="
     },
-    "mime-types": {
-      "version": "2.1.24",
-      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
-      "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
-      "requires": {
-        "mime-db": "1.40.0"
-      }
-    },
-    "neon": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/neon/-/neon-2.0.0.tgz",
-      "integrity": "sha1-63AJLFf7A+IgHDaCrtW1SrntExY="
-    },
-    "node-uuid": {
-      "version": "1.4.8",
-      "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz",
-      "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc="
+    "node-fetch": {
+      "version": "2.6.0",
+      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
+      "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA=="
     },
     "nth-check": {
       "version": "1.0.2",
         "boolbase": "~1.0.0"
       }
     },
-    "oauth-sign": {
-      "version": "0.8.2",
-      "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
-      "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM="
-    },
-    "process-nextick-args": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
-      "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
-    },
-    "psl": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/psl/-/psl-1.2.0.tgz",
-      "integrity": "sha512-GEn74ZffufCmkDDLNcl3uuyF/aSD6exEyh1v/ZSdAomB82t6G9hzJVRx0jBmLDW+VfZqks3aScmMw9DszwUalA=="
-    },
-    "punycode": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
-      "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
-    },
-    "qs": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/qs/-/qs-4.0.0.tgz",
-      "integrity": "sha1-wx2bdOwn33XlQ6hseHKO2NRiNgc="
-    },
-    "readable-stream": {
-      "version": "1.1.14",
-      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
-      "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
-      "requires": {
-        "core-util-is": "~1.0.0",
-        "inherits": "~2.0.1",
-        "isarray": "0.0.1",
-        "string_decoder": "~0.10.x"
-      }
-    },
-    "request": {
-      "version": "2.61.0",
-      "resolved": "https://registry.npmjs.org/request/-/request-2.61.0.tgz",
-      "integrity": "sha1-aXPLKslIhfAmk/VU7sZEgdYBP58=",
-      "requires": {
-        "aws-sign2": "~0.5.0",
-        "bl": "~1.0.0",
-        "caseless": "~0.11.0",
-        "combined-stream": "~1.0.1",
-        "extend": "~3.0.0",
-        "forever-agent": "~0.6.0",
-        "form-data": "~1.0.0-rc1",
-        "har-validator": "^1.6.1",
-        "hawk": "~3.1.0",
-        "http-signature": "~0.11.0",
-        "isstream": "~0.1.1",
-        "json-stringify-safe": "~5.0.0",
-        "mime-types": "~2.1.2",
-        "node-uuid": "~1.4.0",
-        "oauth-sign": "~0.8.0",
-        "qs": "~4.0.0",
-        "stringstream": "~0.0.4",
-        "tough-cookie": ">=0.12.0",
-        "tunnel-agent": "~0.4.0"
-      }
-    },
-    "sntp": {
-      "version": "1.0.9",
-      "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
-      "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
-      "requires": {
-        "hoek": "2.x.x"
+    "parse5": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz",
+      "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==",
+      "requires": {
+        "@types/node": "*"
       }
     },
-    "string_decoder": {
-      "version": "0.10.31",
-      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
-      "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
-    },
-    "stringstream": {
-      "version": "0.0.6",
-      "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz",
-      "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA=="
-    },
-    "strip-ansi": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
-      "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+    "readable-stream": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+      "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
       "requires": {
-        "ansi-regex": "^2.0.0"
+        "inherits": "^2.0.3",
+        "string_decoder": "^1.1.1",
+        "util-deprecate": "^1.0.1"
       }
     },
-    "supports-color": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
-      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+    "safe-buffer": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
+      "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
     },
-    "tough-cookie": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz",
-      "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==",
+    "string_decoder": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+      "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
       "requires": {
-        "ip-regex": "^2.1.0",
-        "psl": "^1.1.28",
-        "punycode": "^2.1.1"
+        "safe-buffer": "~5.2.0"
       }
     },
-    "tunnel-agent": {
-      "version": "0.4.3",
-      "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz",
-      "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us="
-    },
     "util-deprecate": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
       "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
-    },
-    "xtend": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
-      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
     }
   }
 }
index db0decfe8efc422d542dce0da1362809a4a69696..22a3daa214630ceca0c4bb3dbbb7e2d61aa377a6 100644 (file)
   },
   "homepage": "https://github.com/rbdr/generador-de-insultos",
   "dependencies": {
-    "bluebird": "2.9.x",
-    "cheerio": "0.19.x",
-    "hapi": "9.2.x",
-    "neon": "2.0.x",
-    "request": "2.61.x"
+    "cheerio": "^1.0.0-rc.3",
+    "@hapi/hapi": "^19.1.1",
+    "node-fetch": "^2.6.0"
   }
 }