From 9d17d350fa7944c356d54b821dc94b62319c95c1 Mon Sep 17 00:00:00 2001 From: Kayne Ruse Date: Tue, 30 Mar 2021 06:17:55 +1100 Subject: [PATCH] Stripped this project to it's bones --- README.md | 175 ++- source/build-type-graph.js | 16 +- source/index.js | 16 +- source/parse-query.js | 117 -- test-server-books/database.js | 53 - test-server-books/handler.js | 178 --- test-server-books/package-lock.json | 1879 ------------------------- test-server-books/package.json | 20 - test-server-books/schema.js | 14 - test-server-books/server.js | 27 - test-server-pokemon/handler.js | 183 --- test-server-pokemon/package-lock.json | 1879 ------------------------- test-server-pokemon/package.json | 20 - test-server-pokemon/pokemon.json | 1 - test-server-pokemon/schema.js | 18 - test-server-pokemon/server.js | 27 - 16 files changed, 130 insertions(+), 4493 deletions(-) delete mode 100644 source/parse-query.js delete mode 100644 test-server-books/database.js delete mode 100644 test-server-books/handler.js delete mode 100644 test-server-books/package-lock.json delete mode 100644 test-server-books/package.json delete mode 100644 test-server-books/schema.js delete mode 100644 test-server-books/server.js delete mode 100644 test-server-pokemon/handler.js delete mode 100644 test-server-pokemon/package-lock.json delete mode 100644 test-server-pokemon/package.json delete mode 100644 test-server-pokemon/pokemon.json delete mode 100644 test-server-pokemon/schema.js delete mode 100644 test-server-pokemon/server.js diff --git a/README.md b/README.md index 359b952..04b1aae 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,73 @@ -# Things That Need To Be Done - -* ~~Debugging options~~ -* N + 1 problem solved -* Change "match" to "filter" -* Full documentation -* Graphical tool -* GitHub CI testing -* Implement the create command -* Implement the update command -* Implement the delete command - # sineQL sineQL is a web API query language that mimics graphQL, designed solely for fun. -sineQL consists of two languages - the schema language, and the query language. +sineQL consists of two languages - the schema language, and the query language. sineQL assumes that the records are related in a non-looping tree-structure, defined by the schema language. -You can try the API right now! +## Example Server + +A simple express server using sineQL. ```js -//create the wave function, wrapping a fetch to a server -const wave = body => fetch('https://krgamestudios.com/pokemon', { +//express for testing +const express = require('express'); +const app = express(); + +app.use(express.text()); + +//test the library +const sineQL = require('sineql'); +const schema = require('./schema.js'); +const handler = require('./handler.js'); + +const sine = sineQL(schema, handler, { debug: true }); + +//open the endpoint +app.post('/sineql', async (req, res) => { + const [code, result] = await sine(req.body); + res.status(code).send(result); +}); + +//startup +const port = process.env.WEB_PORT || 4000; +app.listen(port, err => { + console.log(`listening to *:${port}`); +}); +``` + +```js +const schema = ` +scalar Date + +type Book { + String title + Date published +} + +type Author { + String name + Book books +} +`; + +module.exports = schema; +``` + +```js +//TODO: define the handler object's API properly +const handler = { + Book: () => null, + Author: () => null +}; + +module.exports = handler; +``` + +Create a matching client-side function pointing to the server. + +```js +//create the wave function, wrapping a fetch to the server +const wave = body => fetch('http://example.com/sineql', { method: 'POST', headers: { 'Content-Type': 'text/plain' @@ -28,11 +75,11 @@ const wave = body => fetch('https://krgamestudios.com/pokemon', { body: body }); -//get a list of pokemon names -wave('Pokemon { name }') +//get a list of content +wave('Author { name books { title } }') .then(blob => blob.text()) .then(text => console.log(text)) - .catch(err => console.log(err)) + .catch(e => console.error(e)) ; ``` @@ -59,7 +106,6 @@ scalar Date type Book { String title - Author author Date published } @@ -71,16 +117,14 @@ type Author { ## The Query Language -The query langauge can be used to request data from a server, either in whole or in part by listing it's type and it's fields, and subfields. +The query langauge can be used to request data from a server, either in whole or in part by listing its type and its needed fields: ``` -Book { - title - author { - name - books { - title - } +Author { + name + books { + title + published } } ``` @@ -93,45 +137,21 @@ The fields can be altered as well, using the query language's built-in keywords: * match * set -`create`, `update` and `delete` do as you would expect them to. +`create`, `update` and `delete` work as expected. -When using `create`, `match` will find an existing record for a compound type and use that as it's value (multiple matches is an error): +### Create + +When using `create`, `match` will find an existing record and associate that with the created values (multiple matches is an error): ``` -create Book { - set title "The Wind in the Willows" - match author { - name "Kenneth Grahame" - } +Author { + match name "Kenneth Grahame" + create books { + create title "The Wind in the Willows" + } } ``` -When using `update`, `match` will find all existing records and update those using the `set` keyword: - -``` -update Book { - match title "The Wind in the Willows" - set published "15 June 1908" -} -``` - -``` -update Book { - match title "The Wind in the Willows" - set title "The Fart in the Fronds" -} -``` - -When using `delete`, only `match` is valid, and will delete all matching records: - -``` -delete Book { - match title "The Fart in the Fronds" -} -``` - -You can use as many instances of `match` and `set` as you like, as long as the result is valid. - You can create multiple records at once by surrounding them with `[]`: ``` @@ -158,4 +178,35 @@ create Book [ set title "Yeah, I Got Nothing" } ] -``` \ No newline at end of file +``` + +### Update + +When using `update`, `match` will find all existing records and update those using the `set` keyword: + +``` +update Book { + match title "The Wind in the Willows" + set published "15 June 1908" +} +``` + +``` +update Book { + match title "The Wind in the Willows" + set title "The Fart in the Fronds" +} +``` + +### Delete + +When using `delete`, only `match` is valid, and will delete all matching records: + +``` +delete Book { + match title "The Fart in the Fronds" +} +``` + +You can use as many instances of `match` and `set` as you like, as long as the result is valid. + diff --git a/source/build-type-graph.js b/source/build-type-graph.js index f1deba7..11e43fa 100644 --- a/source/build-type-graph.js +++ b/source/build-type-graph.js @@ -21,7 +21,8 @@ const buildTypeGraph = (schema, options) => { //check for keywords switch(tokens[pos - 1]) { case 'type': - graph[tokens[pos++]] = parseCompoundType(tokens, pos, options); + //delegate + graph[tokens[pos++]] = parseCompoundType(tokens, pos, Object.keys(graph), options); //advance to the end of the compound type pos = eatBlock(tokens, pos); @@ -29,7 +30,9 @@ const buildTypeGraph = (schema, options) => { break; case 'scalar': + //check against keyword list if (keywords.includes(graph[tokens[pos - 1]])) { + //TODO: test this error throw 'Unexpected keyword ' + graph[tokens[pos - 1]]; } @@ -49,7 +52,7 @@ const buildTypeGraph = (schema, options) => { }; //moved this routine to a separate function for clarity -const parseCompoundType = (tokens, pos, options) => { +const parseCompoundType = (tokens, pos, scalars, options) => { //format check (not strictly necessary, but it looks nice) if (tokens[pos] !== '{') { throw 'Expected \'{\' in compound type definition'; @@ -69,12 +72,17 @@ const parseCompoundType = (tokens, pos, options) => { //can't use keywords if (keywords.includes(type) || keywords.includes(name)) { - throw 'Unexpected keyword found as type field or type name (' + type + ' ' + name + ')'; + throw `Unexpected keyword found as type field or type name (${type} ${name})`; + } + + //can only use existing types (prevents looping tree structure) + if (!scalars.includes(type)) { //TODO: test this error + throw `Unexpected value found as type field ('${type}' is undefined)`; } //check for duplicate fields if (Object.keys(compound).includes(name)) { - throw 'Unexpected duplicate field name'; + throw `Unexpected duplicate field name (${name})`; } //finally, push to the compound definition diff --git a/source/index.js b/source/index.js index da1b9f5..72e5f93 100644 --- a/source/index.js +++ b/source/index.js @@ -10,12 +10,12 @@ const sineQL = (schema, handler, options = {}) => { typeGraph = buildTypeGraph(schema, options); } catch(e) { - console.log('Type Graph Error:', e); + console.error('Type Graph Error:', e); return null; } //the receiving function (sine()) - this will be called multiple times - return async (reqBody) => { + return async reqBody => { try { //parse the query const tokens = parseInput(reqBody, true, options); @@ -32,18 +32,12 @@ const sineQL = (schema, handler, options = {}) => { //no leading keyword - regular query default: - const [result, endPos] = await parseQuery(handler, tokens, pos, typeGraph); - - //reject the request, despite finishing processing it - if (tokens[endPos]) { - throw 'Unexpected data found at the end of the token list (found ' + tokens[endPos] + ')'; - } - - return [200, result]; + //TODO: implement queries + return [501, 'Queries not implemented']; } } catch(e) { - console.log('Error:', e); + console.error('Error:', e); return [400, e.stack || e]; } }; diff --git a/source/parse-query.js b/source/parse-query.js deleted file mode 100644 index b6c9e21..0000000 --- a/source/parse-query.js +++ /dev/null @@ -1,117 +0,0 @@ -const keywords = require('./keywords.json'); -const { eatBlock } = require('./utils'); - -//returns an object result from handler for all custom types -const parseQuery = async (handler, tokens, pos, typeGraph, parent = null, superMatching = false) => { - //only read past tokens - pos++; - - //determine this query's supertype - let superType; - - if (!parent) { //top-level - superType = tokens[pos - 1]; - } - - else if (typeGraph[parent.typeName][ tokens[pos-1] ]) { - superType = typeGraph[parent.typeName][ tokens[pos-1] ].typeName; - } - - else { - throw `Missing supertype in type graph (pos = ${pos})`; - } - - //error handling - if (!handler[superType]) { - throw 'Unrecognized type ' + superType; - } - - if (tokens[pos++] != '{') { - throw 'Expected \'{\' after supertype'; - } - - //the scalars to pass to the handler - components of the compound types - const scalarFields = []; - const deferredCalls = []; //functions (promises) that will be called at the end of this function - - while(tokens[pos++] && tokens[pos - 1] !== '}') { //while not at the end of this block - //check for matching flag - let matching = false; - - if (tokens[pos - 1] === 'match') { - matching = true; - pos++; - } - - //prevent using keywords - if (keywords.includes(tokens[pos - 1])) { - throw 'Unexpected keyword ' + tokens[pos - 1]; - } - - //type is a scalar - if (typeGraph[superType] && typeGraph[superType][tokens[pos - 1]] && typeGraph[typeGraph[superType][tokens[pos - 1]].typeName].scalar) { - //push the scalar object to the queryFields - scalarFields.push({ typeName: typeGraph[superType][tokens[pos - 1]].typeName, name: tokens[pos - 1], filter: matching ? tokens[pos++] : null }); - - //if I am a scalar child of a match and I do not match - if (parent && superMatching && !matching) { - throw 'Broken match chain in scalar type ' + tokens[pos - 1]; - } - } - - //type is a compound, and must be recursed - else if (typeGraph[superType] && typeGraph[superType][tokens[pos - 1]]) { - const pos2 = pos; //cache the value to keep it from changing - - //recurse - deferredCalls.push(async (result) => { - //if I am a compound child of a match amd I do not match - if (parent && superMatching && !matching) { - throw 'Broken match chain in compound type ' + tokens[pos2 - 1]; - } - - const [queryResult, dummyPos] = await parseQuery( - handler, - tokens, - pos2 - 1, - typeGraph, - { typeName: superType, scalars: scalarFields, context: result }, //parent object (this one) - matching - ); - - return [tokens[pos2 - 1], queryResult, matching]; //HACK: match piggybacking on the tuple - }); - - pos = eatBlock(tokens, pos + 2); - } else { - //token is something else? - throw 'Found something not in the type graph: ' + tokens[pos - 1] + " " + (pos - 1); - } - } - - //eat the end bracket - if (tokens[pos - 1] !== '}') { - throw 'Expected \'}\' at the end of query (found ' + tokens[pos - 1] + ')'; - } - - let results = handler[superType](parent, scalarFields, superMatching); - - //WTF: related to the recusion above (turning the results inside out?) - results = await Promise.all(results.map(async res => { - const tuples = await Promise.all(deferredCalls.map(async call => await call(res))); - - if (!tuples.every(tuple => !tuple[2] || tuple[1].length > 0)) { - return []; - } - - tuples.forEach(tuple => res[tuple[0]] = tuple[1]); - - return res; - })); - - results = results.filter(r => !Array.isArray(r) || r.length > 0); - - return [results, pos]; -}; - -module.exports = parseQuery; diff --git a/test-server-books/database.js b/test-server-books/database.js deleted file mode 100644 index 03c7c6d..0000000 --- a/test-server-books/database.js +++ /dev/null @@ -1,53 +0,0 @@ -//the authors -let authors = [ - { - name: 'J.K. Roaring', - books: [ - { title: 'The Philosepher\'s Kidney Stone' }, - { title: 'The Chamber Pot of Secrets' }, - { title: 'The Prisoner of Aunt Kazban' }, - { title: 'The Goblet of the Fire Cocktail' }, - { title: 'The Order for Kleenex' }, - { title: 'The Half-Priced Pharmacy' }, - { title: 'Yeah, I Got Nothing' }, - ] - }, - - { - name: 'Kenneth Grahame', - books: [ - { title: 'The Wind in the Willows', published: '1 April 1908' } - ] - }, - - { - name: 'Kayne Ruse', - books: [ - { title: 'alpha', published: "1" }, - { title: 'beta', published: "2" }, - { title: 'gamma', published: "3" }, - { title: 'delta', published: "4" }, - { title: 'epsilon', published: "5" }, - ] - }, -]; - -//insert the authors into the books (relationship) -authors = authors.map(a => { - a.books = a.books.map(b => { - b.authors = [a]; - return b; - }); - return a; -}); - -//get the books array -let books = []; - -authors.forEach(a => books = books.concat(a.books)); - -//the fake database -module.exports = { - authors, - books, -}; \ No newline at end of file diff --git a/test-server-books/handler.js b/test-server-books/handler.js deleted file mode 100644 index 370c4fe..0000000 --- a/test-server-books/handler.js +++ /dev/null @@ -1,178 +0,0 @@ -/* DOCS: handler parameter types -parent: Type | null -scalars: [{ typeName: String, name: String, filter: any | null }, ...] -matching: Boolean -*/ - -//BUG: Book { authors { name } } - this gives a weird result - -const database = require('./database.js'); - -//the handler routines -const handler = { - //type queries - Author: (parent, scalars, matching) => { - let authors; - - //check parentage - if (parent) { - //find the author(s) of the parent Book object - authors = database.authors.filter(author => author.books.some(b => b.title == parent.context.title)); - } else { - authors = database.authors; - } - - //I am being matched (if true, ALL present scalars will have a filter field) - if (matching) { - //check every scalar to every author - a single false match is a miss on that author - authors = authors.filter(author => { - return scalars.every(scalar => { - //handle each type of scalar - switch (scalar.typeName) { - case 'String': - case 'Integer': - case 'Float': - case 'Boolean': - return author[scalar.name] == scalar.filter; //dumb comparison for now - - //custom handling - //NOTE: Only books used the `Date` scalar - - default: - throw `Unknown scalar typeName in handler: ${scalar.typeName} (${scalar.name})`; - } - }); - }); - - //if there are no authors left, then the book's filters missed matches - if (authors.length == 0) { - return []; - } - } - - //scalars are being matched on their own - if (scalars.some(s => s.filter)) { - //check every scalar to every author - a single match is a hit - authors = authors.filter(author => { - return scalars.some(scalar => { - //handle each type of scalar - switch (scalar.typeName) { - case 'String': - case 'Integer': - case 'Float': - case 'Boolean': - return author[scalar.name] == scalar.filter; //dumb comparison for now - - //custom handling - //NOTE: Only books used the `Date` scalar - - default: - throw `Unknown scalar typeName in handler: ${scalar.typeName} (${scalar.name})`; - } - }); - }); - - //if there are no authors left, then the book's filters missed matches - if (authors.length == 0) { - return []; - } - } - - //process (filter out unwanted fields) and return the array of authors - return authors.map(author => { - let ret = {}; - - //that's a big O(damn) - scalars.forEach(scalar => { - ret[scalar.name] = author[scalar.name]; - }); - - return ret; - }); - }, - - Book: (parent, scalars, matching) => { - let books; - - //check parentage - if (parent) { - //find the books of the parent author object - books = database.books.filter(book => book.authors.some(a => a.name == parent.context.name)); - } else { - books = database.books; - } - - //I am being matched (if true, ALL present scalars will have a filter field) - if (matching) { - //check every scalar to every book - a single false match is a miss on that book - books = books.filter(book => { - return scalars.every(scalar => { - //handle each type of scalar - switch (scalar.typeName) { - case 'String': - case 'Integer': - case 'Float': - case 'Boolean': - return book[scalar.name] == scalar.filter; //dumb comparison for now - - //custom handling - case 'Date': - return book[scalar.name] == scalar.filter; //could have a more complex comparator function, like date-ranges - - default: - throw `Unknown scalar typeName in handler: ${scalar.typeName} (${scalar.name})`; - } - }); - }); - - - - //if there are no books left, then the authos's filters missed matches - if (books.length == 0) { - return []; - } - } - - //scalars are being matched on their own - if (scalars.some(s => s.filter)) { - //check every scalar to every author - a single match is a hit - books = books.filter(author => { - return scalars.some(scalar => { - //handle each type of scalar - switch (scalar.typeName) { - case 'String': - case 'Integer': - case 'Float': - case 'Boolean': - return author[scalar.name] == scalar.filter; //dumb comparison for now - - //custom handling - //NOTE: Only books used the `Date` scalar - - default: - throw `Unknown scalar typeName in handler: ${scalar.typeName} (${scalar.name})`; - } - }); - }); - - //if there are no authors left, then the book's filters missed matches - if (books.length == 0) { - return []; - } - } - - //process (filter out unwanted fields) and return the array of books - return books.map(book => { - let ret = {}; - - //that's a big O(damn) - scalars.forEach(scalar => { - ret[scalar.name] = book[scalar.name]; - }); - - return ret; - }); - }, -}; - -module.exports = handler; diff --git a/test-server-books/package-lock.json b/test-server-books/package-lock.json deleted file mode 100644 index 707cf0e..0000000 --- a/test-server-books/package-lock.json +++ /dev/null @@ -1,1879 +0,0 @@ -{ - "name": "test-server", - "version": "0.2.1", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@opencensus/core": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/@opencensus/core/-/core-0.0.9.tgz", - "integrity": "sha512-31Q4VWtbzXpVUd2m9JS6HEaPjlKvNMOiF7lWKNmXF84yUcgfAFL5re7/hjDmdyQbOp32oGc+RFV78jXIldVz6Q==", - "requires": { - "continuation-local-storage": "^3.2.1", - "log-driver": "^1.2.7", - "semver": "^5.5.0", - "shimmer": "^1.2.0", - "uuid": "^3.2.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "@opencensus/propagation-b3": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@opencensus/propagation-b3/-/propagation-b3-0.0.8.tgz", - "integrity": "sha512-PffXX2AL8Sh0VHQ52jJC4u3T0H6wDK6N/4bg7xh4ngMYOIi13aR1kzVvX1sVDBgfGwDOkMbl4c54Xm3tlPx/+A==", - "requires": { - "@opencensus/core": "^0.0.8", - "uuid": "^3.2.1" - }, - "dependencies": { - "@opencensus/core": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@opencensus/core/-/core-0.0.8.tgz", - "integrity": "sha512-yUFT59SFhGMYQgX0PhoTR0LBff2BEhPrD9io1jWfF/VDbakRfs6Pq60rjv0Z7iaTav5gQlttJCX2+VPxFWCuoQ==", - "requires": { - "continuation-local-storage": "^3.2.1", - "log-driver": "^1.2.7", - "semver": "^5.5.0", - "shimmer": "^1.2.0", - "uuid": "^3.2.1" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "@pm2/agent": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@pm2/agent/-/agent-1.0.4.tgz", - "integrity": "sha512-cZLwaoLa45FRuetKCcoI3kHnnQ7VMLpZnmVom04MoK0cpY/RxcSarkCHSCu9V+pdARwxx96QrWdrtAJdw97dng==", - "requires": { - "async": "~3.2.0", - "chalk": "~3.0.0", - "dayjs": "~1.8.24", - "debug": "~4.1.1", - "eventemitter2": "~5.0.1", - "fclone": "~1.0.11", - "nssocket": "0.6.0", - "pm2-axon": "^3.2.0", - "pm2-axon-rpc": "^0.5.0", - "proxy-agent": "~3.1.1", - "semver": "~7.2.0", - "ws": "~7.2.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "pm2-axon": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/pm2-axon/-/pm2-axon-3.3.0.tgz", - "integrity": "sha512-dAFlFYRuFbFjX7oAk41zT+dx86EuaFX/TgOp5QpUKRKwxb946IM6ydnoH5sSTkdI2pHSVZ+3Am8n/l0ocr7jdQ==", - "requires": { - "amp": "~0.3.1", - "amp-message": "~0.1.1", - "debug": "^3.0", - "escape-regexp": "0.0.1" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "pm2-axon-rpc": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/pm2-axon-rpc/-/pm2-axon-rpc-0.5.2.tgz", - "integrity": "sha512-o4u1jO1EYBgBUVlraE1aeGWB5DvClJFB2+v7ytqLypNfgYeT6eJ/B+WMh5NcvRnexAYL5kblcRgNgSbgGEobvA==", - "requires": { - "debug": "^3.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "semver": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.2.3.tgz", - "integrity": "sha512-utbW9Z7ZxVvwiIWkdOMLOR9G/NFXh2aRucghkVrEMJWuC++r3lCkBC3LwqBinyHzGMAJxY5tn6VakZGHObq5ig==" - } - } - }, - "@pm2/agent-node": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@pm2/agent-node/-/agent-node-1.1.10.tgz", - "integrity": "sha512-xRcrk7OEwhS3d/227/kKGvxgmbIi6Yyp27FzGlFNermEKhgddmFaRnmd7GRLIsBM/KB28NrwflBZulzk/mma6g==", - "requires": { - "debug": "^3.1.0", - "eventemitter2": "^5.0.1", - "proxy-agent": "^3.0.3", - "ws": "^6.0.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "@pm2/io": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@pm2/io/-/io-4.3.5.tgz", - "integrity": "sha512-CY/a6Nw72vrlp/FPx38l4jfEHp4gNEbo8i+WlSJ2cnWO6VE6CKmnC1zb4yQLvdP8f3EuzzoOBZVq6aGN20M82Q==", - "requires": { - "@opencensus/core": "0.0.9", - "@opencensus/propagation-b3": "0.0.8", - "@pm2/agent-node": "^1.1.10", - "async": "~2.6.1", - "debug": "4.1.1", - "eventemitter2": "^6.3.1", - "require-in-the-middle": "^5.0.0", - "semver": "6.3.0", - "shimmer": "^1.2.0", - "signal-exit": "^3.0.3", - "tslib": "1.9.3" - }, - "dependencies": { - "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" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "eventemitter2": { - "version": "6.4.3", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.3.tgz", - "integrity": "sha512-t0A2msp6BzOf+QAcI6z9XMktLj52OjGQg+8SJH6v5+3uxNpWYRR3wQmfA+6xtMU9kOC59qk9licus5dYcrYkMQ==" - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" - } - } - }, - "@pm2/js-api": { - "version": "0.6.7", - "resolved": "https://registry.npmjs.org/@pm2/js-api/-/js-api-0.6.7.tgz", - "integrity": "sha512-jiJUhbdsK+5C4zhPZNnyA3wRI01dEc6a2GhcQ9qI38DyIk+S+C8iC3fGjcjUbt/viLYKPjlAaE+hcT2/JMQPXw==", - "requires": { - "async": "^2.6.3", - "axios": "^0.21.0", - "debug": "~4.3.1", - "eventemitter2": "^6.3.1", - "ws": "^7.0.0" - }, - "dependencies": { - "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" - } - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "eventemitter2": { - "version": "6.4.3", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.3.tgz", - "integrity": "sha512-t0A2msp6BzOf+QAcI6z9XMktLj52OjGQg+8SJH6v5+3uxNpWYRR3wQmfA+6xtMU9kOC59qk9licus5dYcrYkMQ==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "@pm2/pm2-version-check": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@pm2/pm2-version-check/-/pm2-version-check-1.0.3.tgz", - "integrity": "sha512-SBuYsh+o35knItbRW97vl5/5nEc5c5DYP7PxjyPLOfmm9bMaDsVeATXjXMBy6+KLlyrYWHZxGbfXe003NnHClg==", - "requires": { - "debug": "^4.1.1" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "requires": { - "es6-promisify": "^5.0.0" - } - }, - "amp": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/amp/-/amp-0.3.1.tgz", - "integrity": "sha1-at+NWKdPNh6CwfqNOJwHnhOfxH0=" - }, - "amp-message": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/amp-message/-/amp-message-0.1.2.tgz", - "integrity": "sha1-p48cmJlQh602GSpBKY5NtJ49/EU=", - "requires": { - "amp": "0.3.1" - } - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - }, - "dependencies": { - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - } - } - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "ast-types": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", - "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", - "requires": { - "tslib": "^2.0.1" - } - }, - "async": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, - "async-listener": { - "version": "0.6.10", - "resolved": "https://registry.npmjs.org/async-listener/-/async-listener-0.6.10.tgz", - "integrity": "sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw==", - "requires": { - "semver": "^5.3.0", - "shimmer": "^1.1.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "axios": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", - "requires": { - "follow-redirects": "^1.10.0" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - }, - "blessed": { - "version": "0.1.81", - "resolved": "https://registry.npmjs.org/blessed/-/blessed-0.1.81.tgz", - "integrity": "sha1-+WLWh+wsNpVwrnGvhDJW5tDKESk=" - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "charm": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/charm/-/charm-0.1.2.tgz", - "integrity": "sha1-BsIe7RobBq62dVPNxT4jJ0usIpY=" - }, - "chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.3.1", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - } - }, - "cli-tableau": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/cli-tableau/-/cli-tableau-2.0.1.tgz", - "integrity": "sha512-he+WTicka9cl0Fg/y+YyxcN6/bfQ/1O3QmgxRXDhABKqLzvoOSM4fMzp39uMyLBulAFuywD2N7UaoQE7WaADxQ==", - "requires": { - "chalk": "3.0.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "continuation-local-storage": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz", - "integrity": "sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA==", - "requires": { - "async-listener": "^0.6.0", - "emitter-listener": "^1.1.1" - } - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "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=" - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "cron": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/cron/-/cron-1.8.2.tgz", - "integrity": "sha512-Gk2c4y6xKEO8FSAUTklqtfSr7oTq0CiPQeLBG5Fl0qoXpZyMcj1SG59YL+hqq04bu6/IuEA7lMkYDAplQNKkyg==", - "requires": { - "moment-timezone": "^0.5.x" - } - }, - "data-uri-to-buffer": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz", - "integrity": "sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ==" - }, - "dayjs": { - "version": "1.8.36", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.36.tgz", - "integrity": "sha512-3VmRXEtw7RZKAf+4Tv1Ym9AGeo8r8+CjDi26x+7SYQil1UqtqdaokhzoEJohqlzt0m5kacJSDhJQkG/LWhpRBw==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" - }, - "degenerator": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-1.0.4.tgz", - "integrity": "sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU=", - "requires": { - "ast-types": "0.x.x", - "escodegen": "1.x.x", - "esprima": "3.x.x" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "emitter-listener": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.1.2.tgz", - "integrity": "sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ==", - "requires": { - "shimmer": "^1.2.0" - } - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "requires": { - "es6-promise": "^4.0.3" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-regexp": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/escape-regexp/-/escape-regexp-0.0.1.tgz", - "integrity": "sha1-9EvaEtRbvfnLf4Yu5+SCez3TIlQ=" - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - } - } - }, - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "eventemitter2": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-5.0.1.tgz", - "integrity": "sha1-YZegldX7a1folC9v1+qtY6CclFI=" - }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - }, - "fclone": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fclone/-/fclone-1.0.11.tgz", - "integrity": "sha1-EOhdo4v+p/xZk0HClu4ddyZu5kA=" - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - } - }, - "follow-redirects": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.1.tgz", - "integrity": "sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==" - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.1.tgz", - "integrity": "sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw==", - "optional": true - }, - "ftp": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", - "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", - "requires": { - "readable-stream": "1.1.x", - "xregexp": "2.0.0" - }, - "dependencies": { - "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" - } - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "get-uri": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-2.0.4.tgz", - "integrity": "sha512-v7LT/s8kVjs+Tx0ykk1I+H/rbpzkHvuIq87LmeXptcf5sNWm9uQiwjNAt94SJPA1zOlCntmnOlJvVWKmzsxG8Q==", - "requires": { - "data-uri-to-buffer": "1", - "debug": "2", - "extend": "~3.0.2", - "file-uri-to-path": "1", - "ftp": "~0.3.10", - "readable-stream": "2" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "http-proxy-agent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", - "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", - "requires": { - "agent-base": "4", - "debug": "3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "https-proxy-agent": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz", - "integrity": "sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg==", - "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", - "requires": { - "has": "^1.0.3" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "lazy": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/lazy/-/lazy-1.0.11.tgz", - "integrity": "sha1-2qBoIGKCVCwIgojpdcKXwa53tpA=" - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" - }, - "log-driver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", - "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==" - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.45.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", - "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==" - }, - "mime-types": { - "version": "2.1.28", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", - "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", - "requires": { - "mime-db": "1.45.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - }, - "module-details-from-path": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz", - "integrity": "sha1-EUyUlnPiqKNenTV4hSeqN7Z52is=" - }, - "moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" - }, - "moment-timezone": { - "version": "0.5.32", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.32.tgz", - "integrity": "sha512-Z8QNyuQHQAmWucp8Knmgei8YNo28aLjJq6Ma+jy1ZSpSk5nyfRT8xgUbSQvD2+2UajISfenndwvFuH3NGS+nvA==", - "requires": { - "moment": ">= 2.9.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - }, - "needle": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz", - "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } - } - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" - }, - "netmask": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz", - "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "nssocket": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/nssocket/-/nssocket-0.6.0.tgz", - "integrity": "sha1-Wflvb/MhVm8zxw99vu7N/cBxVPo=", - "requires": { - "eventemitter2": "~0.4.14", - "lazy": "~1.0.11" - }, - "dependencies": { - "eventemitter2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", - "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=" - } - } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "pac-proxy-agent": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-3.0.1.tgz", - "integrity": "sha512-44DUg21G/liUZ48dJpUSjZnFfZro/0K5JTyFYLBcmh9+T6Ooi4/i4efwUiEy0+4oQusCBqWdhv16XohIj1GqnQ==", - "requires": { - "agent-base": "^4.2.0", - "debug": "^4.1.1", - "get-uri": "^2.0.0", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^3.0.0", - "pac-resolver": "^3.0.0", - "raw-body": "^2.2.0", - "socks-proxy-agent": "^4.0.1" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "pac-resolver": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-3.0.0.tgz", - "integrity": "sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA==", - "requires": { - "co": "^4.6.0", - "degenerator": "^1.0.4", - "ip": "^1.1.5", - "netmask": "^1.0.6", - "thunkify": "^2.1.2" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" - }, - "pidusage": { - "version": "2.0.21", - "resolved": "https://registry.npmjs.org/pidusage/-/pidusage-2.0.21.tgz", - "integrity": "sha512-cv3xAQos+pugVX+BfXpHsbyz/dLzX+lr44zNMsYiGxUw+kV5sgQCIcLd1z+0vq+KyC7dJ+/ts2PsfgWfSC3WXA==", - "requires": { - "safe-buffer": "^5.2.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "pm2": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/pm2/-/pm2-4.5.1.tgz", - "integrity": "sha512-gEOYugy4vEGazszDtjbZcWnZhHpBLKl0JiYhEnIJqmMj576a0D5LNCmd9grJswB1ziZim+9YInqFrG3FQTxvEg==", - "requires": { - "@pm2/agent": "~1.0.2", - "@pm2/io": "~4.3.5", - "@pm2/js-api": "~0.6.0", - "@pm2/pm2-version-check": "^1.0.3", - "async": "~3.2.0", - "blessed": "0.1.81", - "chalk": "3.0.0", - "chokidar": "^3.3.0", - "cli-tableau": "^2.0.0", - "commander": "2.15.1", - "cron": "1.8.2", - "dayjs": "~1.8.25", - "debug": "^4.3.0", - "enquirer": "2.3.6", - "eventemitter2": "5.0.1", - "fclone": "1.0.11", - "mkdirp": "1.0.4", - "needle": "2.4.0", - "pidusage": "2.0.21", - "pm2-axon": "4.0.0", - "pm2-axon-rpc": "0.6.0", - "pm2-deploy": "~1.0.2", - "pm2-multimeter": "^0.1.2", - "promptly": "^2", - "ps-list": "6.3.0", - "semver": "^7.2", - "source-map-support": "0.5.19", - "sprintf-js": "1.1.2", - "systeminformation": "^4.32", - "vizion": "0.2.13", - "yamljs": "0.3.0" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "pm2-axon": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pm2-axon/-/pm2-axon-4.0.0.tgz", - "integrity": "sha512-A8dy0C57cRIm+kX58HrMcnvUdg8EdwCuCmavDdmFE4eoUE+5zfwGbDfZKCBVLNpDwjXPuXQQYZi3wQt/5xC8DQ==", - "requires": { - "amp": "~0.3.1", - "amp-message": "~0.1.1", - "debug": "^4.2", - "escape-string-regexp": "^4.0.0" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "pm2-axon-rpc": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/pm2-axon-rpc/-/pm2-axon-rpc-0.6.0.tgz", - "integrity": "sha512-xjYR0y1HpOopJ09VL2Qd5H1LajVN+QLPVZ1G+GesbORJDAZiStMhwECtOzm/Gx5ANQxL0usW8WZsElMfQq2hbw==", - "requires": { - "debug": "^3.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } - } - }, - "pm2-deploy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pm2-deploy/-/pm2-deploy-1.0.2.tgz", - "integrity": "sha512-YJx6RXKrVrWaphEYf++EdOOx9EH18vM8RSZN/P1Y+NokTKqYAca/ejXwVLyiEpNju4HPZEk3Y2uZouwMqUlcgg==", - "requires": { - "run-series": "^1.1.8", - "tv4": "^1.3.0" - } - }, - "pm2-multimeter": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/pm2-multimeter/-/pm2-multimeter-0.1.2.tgz", - "integrity": "sha1-Gh5VFT1BoFU0zqI8/oYKuqDrSs4=", - "requires": { - "charm": "~0.1.1" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "promptly": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/promptly/-/promptly-2.2.0.tgz", - "integrity": "sha1-KhP6BjaIoqWYOxYf/wEIoH0m/HQ=", - "requires": { - "read": "^1.0.4" - } - }, - "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" - } - }, - "proxy-agent": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-3.1.1.tgz", - "integrity": "sha512-WudaR0eTsDx33O3EJE16PjBRZWcX8GqCEeERw1W3hZJgH/F2a46g7jty6UGty6NeJ4CKQy8ds2CJPMiyeqaTvw==", - "requires": { - "agent-base": "^4.2.0", - "debug": "4", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^3.0.0", - "lru-cache": "^5.1.1", - "pac-proxy-agent": "^3.0.1", - "proxy-from-env": "^1.0.0", - "socks-proxy-agent": "^4.0.1" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "ps-list": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/ps-list/-/ps-list-6.3.0.tgz", - "integrity": "sha512-qau0czUSB0fzSlBOQt0bo+I2v6R+xiQdj78e1BR/Qjfl5OHWJ/urXi8+ilw1eHe+5hSeDI1wrwVTgDp2wst4oA==" - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", - "requires": { - "mute-stream": "~0.0.4" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "requires": { - "picomatch": "^2.2.1" - } - }, - "require-in-the-middle": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-5.1.0.tgz", - "integrity": "sha512-M2rLKVupQfJ5lf9OvqFGIT+9iVLnTmjgbOmpil12hiSQNn5zJTKGPoIisETNjfK+09vP3rpm1zJajmErpr2sEQ==", - "requires": { - "debug": "^4.1.1", - "module-details-from-path": "^1.0.3", - "resolve": "^1.12.0" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", - "requires": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" - } - }, - "run-series": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-series/-/run-series-1.1.9.tgz", - "integrity": "sha512-Arc4hUN896vjkqCYrUXquBFtRZdv1PfLbTYP71efP6butxyQ0kWpiNJyAgsxscmQg1cqvHY32/UCBzXedTpU2g==" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "shimmer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", - "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "smart-buffer": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", - "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==" - }, - "socks": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.3.tgz", - "integrity": "sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==", - "requires": { - "ip": "1.1.5", - "smart-buffer": "^4.1.0" - } - }, - "socks-proxy-agent": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz", - "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==", - "requires": { - "agent-base": "~4.2.1", - "socks": "~2.3.2" - }, - "dependencies": { - "agent-base": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", - "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", - "requires": { - "es6-promisify": "^5.0.0" - } - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "systeminformation": { - "version": "4.34.7", - "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-4.34.7.tgz", - "integrity": "sha512-cS3FiSZasFgVNjO9CP3aZmTO2VHwXKG+JN6Z85nWRyOzxRMNbZe7Xzwrewp42hj+OPMC3hk7MrAFyu/qLM65Mw==", - "optional": true - }, - "thunkify": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/thunkify/-/thunkify-2.1.2.tgz", - "integrity": "sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0=" - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - }, - "tslib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", - "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" - }, - "tv4": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/tv4/-/tv4-1.3.0.tgz", - "integrity": "sha1-0CDIRvrdUMhVq7JeuuzGj8EPeWM=" - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "vizion": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/vizion/-/vizion-0.2.13.tgz", - "integrity": "sha1-ExTN7is0EW+fWxJIU2+V2/zW718=", - "requires": { - "async": "1.5" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" - } - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "ws": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.5.tgz", - "integrity": "sha512-C34cIU4+DB2vMyAbmEKossWq2ZQDr6QEyuuCzWrM9zfw1sGc0mYiJ0UnG9zzNykt49C2Fi34hvr2vssFQRS6EA==" - }, - "xregexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", - "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=" - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "yamljs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz", - "integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==", - "requires": { - "argparse": "^1.0.7", - "glob": "^7.0.5" - } - } - } -} diff --git a/test-server-books/package.json b/test-server-books/package.json deleted file mode 100644 index 995b850..0000000 --- a/test-server-books/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "test-server", - "version": "0.2.1", - "description": "", - "main": "server.js", - "scripts": { - "start": "pm2 start server.js", - "restart": "pm2 restart server.js", - "stop": "pm2 stop server.js", - "list": "pm2 list", - "node": "node server.js" - }, - "author": "Kayne Ruse", - "license": "ISC", - "dependencies": { - "cors": "latest", - "express": "latest", - "pm2": "latest" - } -} diff --git a/test-server-books/schema.js b/test-server-books/schema.js deleted file mode 100644 index 55c9b44..0000000 --- a/test-server-books/schema.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = ` -scalar Date - -type Author { - String name - Book books -} - -type Book { - String title - Date published - Author authors -} -`; diff --git a/test-server-books/server.js b/test-server-books/server.js deleted file mode 100644 index 0370cc5..0000000 --- a/test-server-books/server.js +++ /dev/null @@ -1,27 +0,0 @@ -//express for testing -const express = require('express'); -const cors = require('cors'); -const bodyParser = require('body-parser'); - -const app = express(); - -app.use(cors()); -app.use(bodyParser.text()); - -//test the library -const schema = require('./schema.js'); -const handler = require('./handler.js'); -const sineQL = require('../source/index.js'); - -const sine = sineQL(schema, handler, { debug: false }); - -//open the end -app.post('/sineql', async (req, res) => { - const [code, result] = await sine(req.body); - res.status(code).send(result); -}); - -//startup -app.listen(process.env.WEB_PORT || 3100, err => { - console.log(`listening to *:${process.env.WEB_PORT || 3100}`); -}); diff --git a/test-server-pokemon/handler.js b/test-server-pokemon/handler.js deleted file mode 100644 index 3baf761..0000000 --- a/test-server-pokemon/handler.js +++ /dev/null @@ -1,183 +0,0 @@ -/* DOCS: handler parameter types -parent: Type | null -scalars: [{ typeName: String, name: String, filter: any | null }, ...] -matching: Boolean -*/ - -const database = require('./pokemon.json'); - -//the handler routines -const handler = { - Pokemon: (parent, scalars, matching) => { - let pokemon = database; - - //if this is a sub-query of Pokemon (a form), use the parent to narrow the search - if (parent && parent.typeName == 'Pokemon') { - //filter based on parent object + scalars - pokemon = pokemon.filter(poke => { - return scalars.every(scalar => poke[scalar.name] == parent.context[scalar.name]); - }); - - pokemon = pokemon.map(poke => poke.forms)[0]; - } - - //I am being matched (if true, ALL present scalars will have a filter field) - if (matching) { - console.log('matching'); - //check every scalar to every poke - a single false match is a miss on that poke - pokemon = pokemon.filter(poke => { - return scalars.every(scalar => { - //handle each type of scalar - switch (scalar.typeName) { - case 'String': - case 'Integer': - case 'Float': - case 'Boolean': - return poke[scalar.name] == scalar.filter; //dumb comparison for now - - default: - throw `Unknown scalar typeName in handler: ${scalar.typeName} (${scalar.name})`; - } - }); - }); - - //if there are no pokemon left, then the filters missed matches - if (pokemon.length == 0) { - return []; - } - } - - //scalars are being matched on their own - if (scalars.some(s => s.filter)) { - //check every scalar to every poke - a single match is a hit - pokemon = pokemon.filter(poke => { - return scalars.some(scalar => { - //handle each type of scalar - switch (scalar.typeName) { - case 'String': - case 'Integer': - case 'Float': - case 'Boolean': - return poke[scalar.name] == scalar.filter; //dumb comparison for now - - default: - throw `Unknown scalar typeName in handler: ${scalar.typeName} (${scalar.name})`; - } - }); - }); - - //if there are no pokemon left, then the filters missed matches - if (pokemon.length == 0) { - return []; - } - } - - //process (filter out unwanted fields) and return the array of pokemon - return pokemon.map(poke => { - let ret = {}; - - //that's a big O(damn) - scalars.forEach(scalar => { - ret[scalar.name] = poke[scalar.name]; - }); - - return ret; - }); - }, - - Stats: (parent, scalars, matching) => { - if (!parent || parent.typeName != 'Pokemon') { - throw 'Stats must be inside a Pokemon query'; - } - - console.log('mark 1'); - - //skip unknown/empty pokemon stats - let pokemon = database.filter(poke => poke.base_stats != null); - - //if this is a sub-query of a Pokemon (already checked), use the parent to narrow the search - pokemon = pokemon.filter(poke => { - return scalars.every(scalar => poke[scalar.name] == parent.context[scalar.name]); - }); - - console.log('mark 2', pokemon); - - //handle forms instead of normal queries - if (pokemon.length == 0) { - pokemon = database.filter(poke => poke.base_stats != null);//skip unknown/empty pokemon stats - - pokemon = pokemon.map(p => p.forms); - pokemon = [].concat(...pokemon); - - pokemon = pokemon.filter(poke => { - return poke.forms.some(form => { - return scalars.every(scalar => form[scalar.name] == parent.context[scalar.name]); - }); - }); - } - - console.log('mark 3'); - - //I am being matched (if true, ALL present scalars will have a filter field) - if (matching) { - //check every scalar to every poke - a single false match is a miss on that poke - pokemon = pokemon.filter(poke => { - return scalars.every(scalar => { - //handle each type of scalar - switch (scalar.typeName) { - case 'Integer': - return poke.base_stats[scalar.name] === parseInt(scalar.filter); //dumb comparison for now - - default: - throw `Unhandled scalar typeName in Stats handler: ${scalar.typeName} (${scalar.name})`; - } - }); - }); - - //if there are no pokemon left, then the filters missed matches - if (pokemon.length == 0) { - return []; - } - } - - console.log('mark 4'); - - //scalars are being matched on their own - if (scalars.some(s => s.filter)) { - //check every scalar to every poke - a single match is a hit - pokemon = pokemon.filter(poke => { - return scalars.some(scalar => { - //handle each type of scalar - switch (scalar.typeName) { - case 'Integer': - return poke.base_stats[scalar.name] === parseInt(scalar.filter); //dumb comparison for now - - default: - throw `Unhandled scalar typeName in Stats handler: ${scalar.typeName} (${scalar.name})`; - } - }); - }); - - //if there are no pokemon left, then the filters missed matches - if (pokemon.length == 0) { - return []; - } - } - - console.log('mark 5'); - - //process (filter out unwanted fields) and return the array of pokemon - return pokemon.map(poke => { - let ret = {}; - - //that's a big O(damn) - scalars.forEach(scalar => { - ret[scalar.name] = poke.base_stats[scalar.name]; - }); - - return ret; - }); - }, -}; - -module.exports = handler; diff --git a/test-server-pokemon/package-lock.json b/test-server-pokemon/package-lock.json deleted file mode 100644 index 707cf0e..0000000 --- a/test-server-pokemon/package-lock.json +++ /dev/null @@ -1,1879 +0,0 @@ -{ - "name": "test-server", - "version": "0.2.1", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@opencensus/core": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/@opencensus/core/-/core-0.0.9.tgz", - "integrity": "sha512-31Q4VWtbzXpVUd2m9JS6HEaPjlKvNMOiF7lWKNmXF84yUcgfAFL5re7/hjDmdyQbOp32oGc+RFV78jXIldVz6Q==", - "requires": { - "continuation-local-storage": "^3.2.1", - "log-driver": "^1.2.7", - "semver": "^5.5.0", - "shimmer": "^1.2.0", - "uuid": "^3.2.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "@opencensus/propagation-b3": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@opencensus/propagation-b3/-/propagation-b3-0.0.8.tgz", - "integrity": "sha512-PffXX2AL8Sh0VHQ52jJC4u3T0H6wDK6N/4bg7xh4ngMYOIi13aR1kzVvX1sVDBgfGwDOkMbl4c54Xm3tlPx/+A==", - "requires": { - "@opencensus/core": "^0.0.8", - "uuid": "^3.2.1" - }, - "dependencies": { - "@opencensus/core": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@opencensus/core/-/core-0.0.8.tgz", - "integrity": "sha512-yUFT59SFhGMYQgX0PhoTR0LBff2BEhPrD9io1jWfF/VDbakRfs6Pq60rjv0Z7iaTav5gQlttJCX2+VPxFWCuoQ==", - "requires": { - "continuation-local-storage": "^3.2.1", - "log-driver": "^1.2.7", - "semver": "^5.5.0", - "shimmer": "^1.2.0", - "uuid": "^3.2.1" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "@pm2/agent": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@pm2/agent/-/agent-1.0.4.tgz", - "integrity": "sha512-cZLwaoLa45FRuetKCcoI3kHnnQ7VMLpZnmVom04MoK0cpY/RxcSarkCHSCu9V+pdARwxx96QrWdrtAJdw97dng==", - "requires": { - "async": "~3.2.0", - "chalk": "~3.0.0", - "dayjs": "~1.8.24", - "debug": "~4.1.1", - "eventemitter2": "~5.0.1", - "fclone": "~1.0.11", - "nssocket": "0.6.0", - "pm2-axon": "^3.2.0", - "pm2-axon-rpc": "^0.5.0", - "proxy-agent": "~3.1.1", - "semver": "~7.2.0", - "ws": "~7.2.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "pm2-axon": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/pm2-axon/-/pm2-axon-3.3.0.tgz", - "integrity": "sha512-dAFlFYRuFbFjX7oAk41zT+dx86EuaFX/TgOp5QpUKRKwxb946IM6ydnoH5sSTkdI2pHSVZ+3Am8n/l0ocr7jdQ==", - "requires": { - "amp": "~0.3.1", - "amp-message": "~0.1.1", - "debug": "^3.0", - "escape-regexp": "0.0.1" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "pm2-axon-rpc": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/pm2-axon-rpc/-/pm2-axon-rpc-0.5.2.tgz", - "integrity": "sha512-o4u1jO1EYBgBUVlraE1aeGWB5DvClJFB2+v7ytqLypNfgYeT6eJ/B+WMh5NcvRnexAYL5kblcRgNgSbgGEobvA==", - "requires": { - "debug": "^3.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "semver": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.2.3.tgz", - "integrity": "sha512-utbW9Z7ZxVvwiIWkdOMLOR9G/NFXh2aRucghkVrEMJWuC++r3lCkBC3LwqBinyHzGMAJxY5tn6VakZGHObq5ig==" - } - } - }, - "@pm2/agent-node": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@pm2/agent-node/-/agent-node-1.1.10.tgz", - "integrity": "sha512-xRcrk7OEwhS3d/227/kKGvxgmbIi6Yyp27FzGlFNermEKhgddmFaRnmd7GRLIsBM/KB28NrwflBZulzk/mma6g==", - "requires": { - "debug": "^3.1.0", - "eventemitter2": "^5.0.1", - "proxy-agent": "^3.0.3", - "ws": "^6.0.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "@pm2/io": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@pm2/io/-/io-4.3.5.tgz", - "integrity": "sha512-CY/a6Nw72vrlp/FPx38l4jfEHp4gNEbo8i+WlSJ2cnWO6VE6CKmnC1zb4yQLvdP8f3EuzzoOBZVq6aGN20M82Q==", - "requires": { - "@opencensus/core": "0.0.9", - "@opencensus/propagation-b3": "0.0.8", - "@pm2/agent-node": "^1.1.10", - "async": "~2.6.1", - "debug": "4.1.1", - "eventemitter2": "^6.3.1", - "require-in-the-middle": "^5.0.0", - "semver": "6.3.0", - "shimmer": "^1.2.0", - "signal-exit": "^3.0.3", - "tslib": "1.9.3" - }, - "dependencies": { - "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" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "eventemitter2": { - "version": "6.4.3", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.3.tgz", - "integrity": "sha512-t0A2msp6BzOf+QAcI6z9XMktLj52OjGQg+8SJH6v5+3uxNpWYRR3wQmfA+6xtMU9kOC59qk9licus5dYcrYkMQ==" - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" - } - } - }, - "@pm2/js-api": { - "version": "0.6.7", - "resolved": "https://registry.npmjs.org/@pm2/js-api/-/js-api-0.6.7.tgz", - "integrity": "sha512-jiJUhbdsK+5C4zhPZNnyA3wRI01dEc6a2GhcQ9qI38DyIk+S+C8iC3fGjcjUbt/viLYKPjlAaE+hcT2/JMQPXw==", - "requires": { - "async": "^2.6.3", - "axios": "^0.21.0", - "debug": "~4.3.1", - "eventemitter2": "^6.3.1", - "ws": "^7.0.0" - }, - "dependencies": { - "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" - } - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "eventemitter2": { - "version": "6.4.3", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.3.tgz", - "integrity": "sha512-t0A2msp6BzOf+QAcI6z9XMktLj52OjGQg+8SJH6v5+3uxNpWYRR3wQmfA+6xtMU9kOC59qk9licus5dYcrYkMQ==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "@pm2/pm2-version-check": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@pm2/pm2-version-check/-/pm2-version-check-1.0.3.tgz", - "integrity": "sha512-SBuYsh+o35knItbRW97vl5/5nEc5c5DYP7PxjyPLOfmm9bMaDsVeATXjXMBy6+KLlyrYWHZxGbfXe003NnHClg==", - "requires": { - "debug": "^4.1.1" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "requires": { - "es6-promisify": "^5.0.0" - } - }, - "amp": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/amp/-/amp-0.3.1.tgz", - "integrity": "sha1-at+NWKdPNh6CwfqNOJwHnhOfxH0=" - }, - "amp-message": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/amp-message/-/amp-message-0.1.2.tgz", - "integrity": "sha1-p48cmJlQh602GSpBKY5NtJ49/EU=", - "requires": { - "amp": "0.3.1" - } - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - }, - "dependencies": { - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - } - } - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "ast-types": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", - "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", - "requires": { - "tslib": "^2.0.1" - } - }, - "async": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, - "async-listener": { - "version": "0.6.10", - "resolved": "https://registry.npmjs.org/async-listener/-/async-listener-0.6.10.tgz", - "integrity": "sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw==", - "requires": { - "semver": "^5.3.0", - "shimmer": "^1.1.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "axios": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", - "requires": { - "follow-redirects": "^1.10.0" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - }, - "blessed": { - "version": "0.1.81", - "resolved": "https://registry.npmjs.org/blessed/-/blessed-0.1.81.tgz", - "integrity": "sha1-+WLWh+wsNpVwrnGvhDJW5tDKESk=" - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "charm": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/charm/-/charm-0.1.2.tgz", - "integrity": "sha1-BsIe7RobBq62dVPNxT4jJ0usIpY=" - }, - "chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.3.1", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - } - }, - "cli-tableau": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/cli-tableau/-/cli-tableau-2.0.1.tgz", - "integrity": "sha512-he+WTicka9cl0Fg/y+YyxcN6/bfQ/1O3QmgxRXDhABKqLzvoOSM4fMzp39uMyLBulAFuywD2N7UaoQE7WaADxQ==", - "requires": { - "chalk": "3.0.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "continuation-local-storage": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz", - "integrity": "sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA==", - "requires": { - "async-listener": "^0.6.0", - "emitter-listener": "^1.1.1" - } - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "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=" - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "cron": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/cron/-/cron-1.8.2.tgz", - "integrity": "sha512-Gk2c4y6xKEO8FSAUTklqtfSr7oTq0CiPQeLBG5Fl0qoXpZyMcj1SG59YL+hqq04bu6/IuEA7lMkYDAplQNKkyg==", - "requires": { - "moment-timezone": "^0.5.x" - } - }, - "data-uri-to-buffer": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz", - "integrity": "sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ==" - }, - "dayjs": { - "version": "1.8.36", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.36.tgz", - "integrity": "sha512-3VmRXEtw7RZKAf+4Tv1Ym9AGeo8r8+CjDi26x+7SYQil1UqtqdaokhzoEJohqlzt0m5kacJSDhJQkG/LWhpRBw==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" - }, - "degenerator": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-1.0.4.tgz", - "integrity": "sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU=", - "requires": { - "ast-types": "0.x.x", - "escodegen": "1.x.x", - "esprima": "3.x.x" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "emitter-listener": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.1.2.tgz", - "integrity": "sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ==", - "requires": { - "shimmer": "^1.2.0" - } - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "requires": { - "es6-promise": "^4.0.3" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-regexp": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/escape-regexp/-/escape-regexp-0.0.1.tgz", - "integrity": "sha1-9EvaEtRbvfnLf4Yu5+SCez3TIlQ=" - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - } - } - }, - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "eventemitter2": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-5.0.1.tgz", - "integrity": "sha1-YZegldX7a1folC9v1+qtY6CclFI=" - }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - }, - "fclone": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fclone/-/fclone-1.0.11.tgz", - "integrity": "sha1-EOhdo4v+p/xZk0HClu4ddyZu5kA=" - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - } - }, - "follow-redirects": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.1.tgz", - "integrity": "sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==" - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.1.tgz", - "integrity": "sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw==", - "optional": true - }, - "ftp": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", - "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", - "requires": { - "readable-stream": "1.1.x", - "xregexp": "2.0.0" - }, - "dependencies": { - "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" - } - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "get-uri": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-2.0.4.tgz", - "integrity": "sha512-v7LT/s8kVjs+Tx0ykk1I+H/rbpzkHvuIq87LmeXptcf5sNWm9uQiwjNAt94SJPA1zOlCntmnOlJvVWKmzsxG8Q==", - "requires": { - "data-uri-to-buffer": "1", - "debug": "2", - "extend": "~3.0.2", - "file-uri-to-path": "1", - "ftp": "~0.3.10", - "readable-stream": "2" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "http-proxy-agent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", - "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", - "requires": { - "agent-base": "4", - "debug": "3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "https-proxy-agent": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz", - "integrity": "sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg==", - "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", - "requires": { - "has": "^1.0.3" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "lazy": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/lazy/-/lazy-1.0.11.tgz", - "integrity": "sha1-2qBoIGKCVCwIgojpdcKXwa53tpA=" - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" - }, - "log-driver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", - "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==" - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.45.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", - "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==" - }, - "mime-types": { - "version": "2.1.28", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", - "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", - "requires": { - "mime-db": "1.45.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - }, - "module-details-from-path": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz", - "integrity": "sha1-EUyUlnPiqKNenTV4hSeqN7Z52is=" - }, - "moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" - }, - "moment-timezone": { - "version": "0.5.32", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.32.tgz", - "integrity": "sha512-Z8QNyuQHQAmWucp8Knmgei8YNo28aLjJq6Ma+jy1ZSpSk5nyfRT8xgUbSQvD2+2UajISfenndwvFuH3NGS+nvA==", - "requires": { - "moment": ">= 2.9.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - }, - "needle": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz", - "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } - } - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" - }, - "netmask": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz", - "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "nssocket": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/nssocket/-/nssocket-0.6.0.tgz", - "integrity": "sha1-Wflvb/MhVm8zxw99vu7N/cBxVPo=", - "requires": { - "eventemitter2": "~0.4.14", - "lazy": "~1.0.11" - }, - "dependencies": { - "eventemitter2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", - "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=" - } - } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "pac-proxy-agent": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-3.0.1.tgz", - "integrity": "sha512-44DUg21G/liUZ48dJpUSjZnFfZro/0K5JTyFYLBcmh9+T6Ooi4/i4efwUiEy0+4oQusCBqWdhv16XohIj1GqnQ==", - "requires": { - "agent-base": "^4.2.0", - "debug": "^4.1.1", - "get-uri": "^2.0.0", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^3.0.0", - "pac-resolver": "^3.0.0", - "raw-body": "^2.2.0", - "socks-proxy-agent": "^4.0.1" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "pac-resolver": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-3.0.0.tgz", - "integrity": "sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA==", - "requires": { - "co": "^4.6.0", - "degenerator": "^1.0.4", - "ip": "^1.1.5", - "netmask": "^1.0.6", - "thunkify": "^2.1.2" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" - }, - "pidusage": { - "version": "2.0.21", - "resolved": "https://registry.npmjs.org/pidusage/-/pidusage-2.0.21.tgz", - "integrity": "sha512-cv3xAQos+pugVX+BfXpHsbyz/dLzX+lr44zNMsYiGxUw+kV5sgQCIcLd1z+0vq+KyC7dJ+/ts2PsfgWfSC3WXA==", - "requires": { - "safe-buffer": "^5.2.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "pm2": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/pm2/-/pm2-4.5.1.tgz", - "integrity": "sha512-gEOYugy4vEGazszDtjbZcWnZhHpBLKl0JiYhEnIJqmMj576a0D5LNCmd9grJswB1ziZim+9YInqFrG3FQTxvEg==", - "requires": { - "@pm2/agent": "~1.0.2", - "@pm2/io": "~4.3.5", - "@pm2/js-api": "~0.6.0", - "@pm2/pm2-version-check": "^1.0.3", - "async": "~3.2.0", - "blessed": "0.1.81", - "chalk": "3.0.0", - "chokidar": "^3.3.0", - "cli-tableau": "^2.0.0", - "commander": "2.15.1", - "cron": "1.8.2", - "dayjs": "~1.8.25", - "debug": "^4.3.0", - "enquirer": "2.3.6", - "eventemitter2": "5.0.1", - "fclone": "1.0.11", - "mkdirp": "1.0.4", - "needle": "2.4.0", - "pidusage": "2.0.21", - "pm2-axon": "4.0.0", - "pm2-axon-rpc": "0.6.0", - "pm2-deploy": "~1.0.2", - "pm2-multimeter": "^0.1.2", - "promptly": "^2", - "ps-list": "6.3.0", - "semver": "^7.2", - "source-map-support": "0.5.19", - "sprintf-js": "1.1.2", - "systeminformation": "^4.32", - "vizion": "0.2.13", - "yamljs": "0.3.0" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "pm2-axon": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pm2-axon/-/pm2-axon-4.0.0.tgz", - "integrity": "sha512-A8dy0C57cRIm+kX58HrMcnvUdg8EdwCuCmavDdmFE4eoUE+5zfwGbDfZKCBVLNpDwjXPuXQQYZi3wQt/5xC8DQ==", - "requires": { - "amp": "~0.3.1", - "amp-message": "~0.1.1", - "debug": "^4.2", - "escape-string-regexp": "^4.0.0" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "pm2-axon-rpc": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/pm2-axon-rpc/-/pm2-axon-rpc-0.6.0.tgz", - "integrity": "sha512-xjYR0y1HpOopJ09VL2Qd5H1LajVN+QLPVZ1G+GesbORJDAZiStMhwECtOzm/Gx5ANQxL0usW8WZsElMfQq2hbw==", - "requires": { - "debug": "^3.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } - } - }, - "pm2-deploy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pm2-deploy/-/pm2-deploy-1.0.2.tgz", - "integrity": "sha512-YJx6RXKrVrWaphEYf++EdOOx9EH18vM8RSZN/P1Y+NokTKqYAca/ejXwVLyiEpNju4HPZEk3Y2uZouwMqUlcgg==", - "requires": { - "run-series": "^1.1.8", - "tv4": "^1.3.0" - } - }, - "pm2-multimeter": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/pm2-multimeter/-/pm2-multimeter-0.1.2.tgz", - "integrity": "sha1-Gh5VFT1BoFU0zqI8/oYKuqDrSs4=", - "requires": { - "charm": "~0.1.1" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "promptly": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/promptly/-/promptly-2.2.0.tgz", - "integrity": "sha1-KhP6BjaIoqWYOxYf/wEIoH0m/HQ=", - "requires": { - "read": "^1.0.4" - } - }, - "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" - } - }, - "proxy-agent": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-3.1.1.tgz", - "integrity": "sha512-WudaR0eTsDx33O3EJE16PjBRZWcX8GqCEeERw1W3hZJgH/F2a46g7jty6UGty6NeJ4CKQy8ds2CJPMiyeqaTvw==", - "requires": { - "agent-base": "^4.2.0", - "debug": "4", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^3.0.0", - "lru-cache": "^5.1.1", - "pac-proxy-agent": "^3.0.1", - "proxy-from-env": "^1.0.0", - "socks-proxy-agent": "^4.0.1" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "ps-list": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/ps-list/-/ps-list-6.3.0.tgz", - "integrity": "sha512-qau0czUSB0fzSlBOQt0bo+I2v6R+xiQdj78e1BR/Qjfl5OHWJ/urXi8+ilw1eHe+5hSeDI1wrwVTgDp2wst4oA==" - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", - "requires": { - "mute-stream": "~0.0.4" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "requires": { - "picomatch": "^2.2.1" - } - }, - "require-in-the-middle": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-5.1.0.tgz", - "integrity": "sha512-M2rLKVupQfJ5lf9OvqFGIT+9iVLnTmjgbOmpil12hiSQNn5zJTKGPoIisETNjfK+09vP3rpm1zJajmErpr2sEQ==", - "requires": { - "debug": "^4.1.1", - "module-details-from-path": "^1.0.3", - "resolve": "^1.12.0" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", - "requires": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" - } - }, - "run-series": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-series/-/run-series-1.1.9.tgz", - "integrity": "sha512-Arc4hUN896vjkqCYrUXquBFtRZdv1PfLbTYP71efP6butxyQ0kWpiNJyAgsxscmQg1cqvHY32/UCBzXedTpU2g==" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "shimmer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", - "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "smart-buffer": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", - "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==" - }, - "socks": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.3.tgz", - "integrity": "sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==", - "requires": { - "ip": "1.1.5", - "smart-buffer": "^4.1.0" - } - }, - "socks-proxy-agent": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz", - "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==", - "requires": { - "agent-base": "~4.2.1", - "socks": "~2.3.2" - }, - "dependencies": { - "agent-base": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", - "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", - "requires": { - "es6-promisify": "^5.0.0" - } - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "systeminformation": { - "version": "4.34.7", - "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-4.34.7.tgz", - "integrity": "sha512-cS3FiSZasFgVNjO9CP3aZmTO2VHwXKG+JN6Z85nWRyOzxRMNbZe7Xzwrewp42hj+OPMC3hk7MrAFyu/qLM65Mw==", - "optional": true - }, - "thunkify": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/thunkify/-/thunkify-2.1.2.tgz", - "integrity": "sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0=" - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - }, - "tslib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", - "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" - }, - "tv4": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/tv4/-/tv4-1.3.0.tgz", - "integrity": "sha1-0CDIRvrdUMhVq7JeuuzGj8EPeWM=" - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "vizion": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/vizion/-/vizion-0.2.13.tgz", - "integrity": "sha1-ExTN7is0EW+fWxJIU2+V2/zW718=", - "requires": { - "async": "1.5" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" - } - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "ws": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.5.tgz", - "integrity": "sha512-C34cIU4+DB2vMyAbmEKossWq2ZQDr6QEyuuCzWrM9zfw1sGc0mYiJ0UnG9zzNykt49C2Fi34hvr2vssFQRS6EA==" - }, - "xregexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", - "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=" - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "yamljs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz", - "integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==", - "requires": { - "argparse": "^1.0.7", - "glob": "^7.0.5" - } - } - } -} diff --git a/test-server-pokemon/package.json b/test-server-pokemon/package.json deleted file mode 100644 index 995b850..0000000 --- a/test-server-pokemon/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "test-server", - "version": "0.2.1", - "description": "", - "main": "server.js", - "scripts": { - "start": "pm2 start server.js", - "restart": "pm2 restart server.js", - "stop": "pm2 stop server.js", - "list": "pm2 list", - "node": "node server.js" - }, - "author": "Kayne Ruse", - "license": "ISC", - "dependencies": { - "cors": "latest", - "express": "latest", - "pm2": "latest" - } -} diff --git a/test-server-pokemon/pokemon.json b/test-server-pokemon/pokemon.json deleted file mode 100644 index 46b1435..0000000 --- a/test-server-pokemon/pokemon.json +++ /dev/null @@ -1 +0,0 @@ -[{"name":"unown","height":5,"weight":50,"base_stats":{"hp":48,"attack":72,"defense":48,"specialAttack":72,"specialDefense":48,"speed":48},"forms":[]},{"name":"silcoon","height":6,"weight":100,"base_stats":{"hp":50,"attack":35,"defense":55,"specialAttack":25,"specialDefense":25,"speed":15},"forms":[]},{"name":"cascoon","height":7,"weight":115,"base_stats":{"hp":50,"attack":35,"defense":55,"specialAttack":25,"specialDefense":25,"speed":15},"forms":[]},{"name":"burmy","height":2,"weight":34,"base_stats":{"hp":40,"attack":29,"defense":45,"specialAttack":29,"specialDefense":45,"speed":36},"forms":[]},{"name":"tynamo","height":2,"weight":3,"base_stats":{"hp":35,"attack":55,"defense":40,"specialAttack":45,"specialDefense":40,"speed":60},"forms":[]},{"name":"scatterbug","height":3,"weight":25,"base_stats":{"hp":38,"attack":35,"defense":40,"specialAttack":27,"specialDefense":25,"speed":35},"forms":[]},{"name":"spewpa","height":3,"weight":84,"base_stats":{"hp":45,"attack":22,"defense":60,"specialAttack":27,"specialDefense":30,"speed":29},"forms":[]},{"name":"cosmog","height":2,"weight":1,"base_stats":{"hp":43,"attack":29,"defense":31,"specialAttack":29,"specialDefense":31,"speed":37},"forms":[]},{"name":"cosmoem","height":1,"weight":9999,"base_stats":{"hp":43,"attack":29,"defense":131,"specialAttack":29,"specialDefense":131,"speed":37},"forms":[]},{"name":"meltan","height":2,"weight":80,"base_stats":{"hp":null,"attack":null,"defense":null,"specialAttack":null,"specialDefense":null,"speed":null},"forms":[]},{"name":"poipole","height":6,"weight":18,"base_stats":{"hp":67,"attack":73,"defense":67,"specialAttack":73,"specialDefense":67,"speed":73},"forms":[]},{"name":"scorbunny","height":3,"weight":45,"base_stats":{"hp":50,"attack":71,"defense":40,"specialAttack":40,"specialDefense":40,"speed":69},"forms":[]},{"name":"thwackey","height":7,"weight":140,"base_stats":{"hp":70,"attack":85,"defense":70,"specialAttack":55,"specialDefense":60,"speed":80},"forms":[]},{"name":"cinderace","height":14,"weight":330,"base_stats":{"hp":80,"attack":116,"defense":75,"specialAttack":65,"specialDefense":75,"speed":119},"forms":[]},{"name":"melmetal","height":25,"weight":8000,"base_stats":{"hp":null,"attack":null,"defense":null,"specialAttack":null,"specialDefense":null,"speed":null},"forms":[]},{"name":"grookey","height":3,"weight":50,"base_stats":{"hp":50,"attack":65,"defense":50,"specialAttack":40,"specialDefense":40,"speed":65},"forms":[]},{"name":"raboot","height":6,"weight":90,"base_stats":{"hp":65,"attack":86,"defense":60,"specialAttack":55,"specialDefense":60,"speed":94},"forms":[]},{"name":"drizzile","height":7,"weight":115,"base_stats":{"hp":65,"attack":60,"defense":55,"specialAttack":95,"specialDefense":55,"speed":90},"forms":[]},{"name":"skwovet","height":3,"weight":25,"base_stats":{"hp":70,"attack":55,"defense":55,"specialAttack":35,"specialDefense":35,"speed":25},"forms":[]},{"name":"rookidee","height":2,"weight":18,"base_stats":{"hp":38,"attack":47,"defense":35,"specialAttack":33,"specialDefense":35,"speed":57},"forms":[]},{"name":"greedent","height":6,"weight":60,"base_stats":{"hp":120,"attack":95,"defense":95,"specialAttack":55,"specialDefense":75,"speed":20},"forms":[]},{"name":"rillaboom","height":21,"weight":900,"base_stats":{"hp":100,"attack":125,"defense":90,"specialAttack":60,"specialDefense":70,"speed":85},"forms":[]},{"name":"corvisquire","height":8,"weight":160,"base_stats":{"hp":68,"attack":67,"defense":55,"specialAttack":43,"specialDefense":55,"speed":77},"forms":[]},{"name":"thievul","height":12,"weight":199,"base_stats":{"hp":70,"attack":58,"defense":58,"specialAttack":87,"specialDefense":92,"speed":90},"forms":[]},{"name":"inteleon","height":19,"weight":452,"base_stats":{"hp":70,"attack":85,"defense":65,"specialAttack":125,"specialDefense":65,"speed":120},"forms":[]},{"name":"blipbug","height":4,"weight":80,"base_stats":{"hp":25,"attack":20,"defense":20,"specialAttack":25,"specialDefense":45,"speed":45},"forms":[]},{"name":"corviknight","height":22,"weight":750,"base_stats":{"hp":98,"attack":87,"defense":105,"specialAttack":53,"specialDefense":85,"speed":67},"forms":[]},{"name":"sobble","height":3,"weight":40,"base_stats":{"hp":50,"attack":40,"defense":40,"specialAttack":70,"specialDefense":40,"speed":70},"forms":[]},{"name":"orbeetle","height":4,"weight":408,"base_stats":{"hp":60,"attack":45,"defense":110,"specialAttack":80,"specialDefense":120,"speed":90},"forms":[]},{"name":"wooloo","height":6,"weight":60,"base_stats":{"hp":42,"attack":40,"defense":55,"specialAttack":40,"specialDefense":45,"speed":48},"forms":[]},{"name":"nickit","height":6,"weight":89,"base_stats":{"hp":40,"attack":28,"defense":28,"specialAttack":47,"specialDefense":52,"speed":50},"forms":[]},{"name":"dottler","height":4,"weight":195,"base_stats":{"hp":50,"attack":35,"defense":80,"specialAttack":50,"specialDefense":90,"speed":30},"forms":[]},{"name":"rolycoly","height":3,"weight":120,"base_stats":{"hp":30,"attack":40,"defense":50,"specialAttack":40,"specialDefense":50,"speed":30},"forms":[]},{"name":"yamper","height":3,"weight":135,"base_stats":{"hp":59,"attack":45,"defense":50,"specialAttack":40,"specialDefense":50,"speed":26},"forms":[]},{"name":"dubwool","height":13,"weight":430,"base_stats":{"hp":72,"attack":80,"defense":100,"specialAttack":60,"specialDefense":90,"speed":88},"forms":[]},{"name":"gossifleur","height":4,"weight":22,"base_stats":{"hp":40,"attack":40,"defense":60,"specialAttack":40,"specialDefense":60,"speed":10},"forms":[]},{"name":"drednaw","height":10,"weight":1155,"base_stats":{"hp":90,"attack":115,"defense":90,"specialAttack":48,"specialDefense":68,"speed":74},"forms":[]},{"name":"applin","height":2,"weight":5,"base_stats":{"hp":40,"attack":40,"defense":80,"specialAttack":40,"specialDefense":40,"speed":20},"forms":[]},{"name":"eldegoss","height":5,"weight":25,"base_stats":{"hp":60,"attack":50,"defense":90,"specialAttack":80,"specialDefense":120,"speed":60},"forms":[]},{"name":"chewtle","height":3,"weight":85,"base_stats":{"hp":50,"attack":64,"defense":50,"specialAttack":38,"specialDefense":38,"speed":44},"forms":[]},{"name":"appletun","height":4,"weight":130,"base_stats":{"hp":110,"attack":85,"defense":80,"specialAttack":100,"specialDefense":80,"speed":30},"forms":[]},{"name":"coalossal","height":28,"weight":3105,"base_stats":{"hp":110,"attack":80,"defense":120,"specialAttack":80,"specialDefense":90,"speed":30},"forms":[]},{"name":"boltund","height":10,"weight":340,"base_stats":{"hp":69,"attack":90,"defense":60,"specialAttack":90,"specialDefense":60,"speed":121},"forms":[]},{"name":"flapple","height":3,"weight":10,"base_stats":{"hp":70,"attack":110,"defense":80,"specialAttack":95,"specialDefense":60,"speed":70},"forms":[]},{"name":"barraskewda","height":13,"weight":300,"base_stats":{"hp":61,"attack":123,"defense":60,"specialAttack":60,"specialDefense":50,"speed":136},"forms":[]},{"name":"cramorant","height":8,"weight":180,"base_stats":{"hp":70,"attack":85,"defense":55,"specialAttack":85,"specialDefense":95,"speed":85},"forms":[]},{"name":"toxtricity","height":16,"weight":400,"base_stats":{"hp":75,"attack":98,"defense":70,"specialAttack":114,"specialDefense":70,"speed":75},"forms":[]},{"name":"sandaconda","height":38,"weight":655,"base_stats":{"hp":72,"attack":107,"defense":125,"specialAttack":65,"specialDefense":70,"speed":71},"forms":[]},{"name":"carkol","height":11,"weight":780,"base_stats":{"hp":80,"attack":60,"defense":90,"specialAttack":60,"specialDefense":70,"speed":50},"forms":[]},{"name":"centiskorch","height":30,"weight":1200,"base_stats":{"hp":100,"attack":115,"defense":65,"specialAttack":90,"specialDefense":90,"speed":65},"forms":[]},{"name":"sizzlipede","height":7,"weight":10,"base_stats":{"hp":50,"attack":65,"defense":45,"specialAttack":50,"specialDefense":50,"speed":45},"forms":[]},{"name":"arrokuda","height":5,"weight":10,"base_stats":{"hp":41,"attack":63,"defense":40,"specialAttack":40,"specialDefense":30,"speed":66},"forms":[]},{"name":"silicobra","height":22,"weight":76,"base_stats":{"hp":52,"attack":57,"defense":75,"specialAttack":35,"specialDefense":50,"speed":46},"forms":[]},{"name":"grimmsnarl","height":15,"weight":610,"base_stats":{"hp":95,"attack":120,"defense":65,"specialAttack":95,"specialDefense":75,"speed":60},"forms":[]},{"name":"hatenna","height":4,"weight":34,"base_stats":{"hp":42,"attack":30,"defense":45,"specialAttack":56,"specialDefense":53,"speed":39},"forms":[]},{"name":"clobbopus","height":6,"weight":40,"base_stats":{"hp":50,"attack":68,"defense":60,"specialAttack":50,"specialDefense":50,"speed":32},"forms":[]},{"name":"grapploct","height":16,"weight":390,"base_stats":{"hp":80,"attack":118,"defense":90,"specialAttack":70,"specialDefense":80,"speed":42},"forms":[]},{"name":"toxel","height":4,"weight":110,"base_stats":{"hp":40,"attack":38,"defense":35,"specialAttack":54,"specialDefense":35,"speed":40},"forms":[]},{"name":"milcery","height":2,"weight":3,"base_stats":{"hp":45,"attack":40,"defense":40,"specialAttack":50,"specialDefense":61,"speed":34},"forms":[]},{"name":"eiscue","height":14,"weight":890,"base_stats":{"hp":75,"attack":80,"defense":110,"specialAttack":65,"specialDefense":90,"speed":50},"forms":[]},{"name":"cursola","height":10,"weight":4,"base_stats":{"hp":60,"attack":95,"defense":50,"specialAttack":145,"specialDefense":130,"speed":30},"forms":[]},{"name":"obstagoon","height":16,"weight":460,"base_stats":{"hp":93,"attack":90,"defense":101,"specialAttack":60,"specialDefense":81,"speed":95},"forms":[]},{"name":"mr","height":15,"weight":582,"base_stats":{"hp":80,"attack":85,"defense":75,"specialAttack":110,"specialDefense":100,"speed":70},"forms":[]},{"name":"alcremie","height":3,"weight":5,"base_stats":{"hp":65,"attack":60,"defense":75,"specialAttack":110,"specialDefense":121,"speed":64},"forms":[]},{"name":"sirfetch","height":8,"weight":1170,"base_stats":{"hp":62,"attack":135,"defense":95,"specialAttack":68,"specialDefense":82,"speed":65},"forms":[]},{"name":"perrserker","height":8,"weight":280,"base_stats":{"hp":70,"attack":110,"defense":100,"specialAttack":50,"specialDefense":60,"speed":50},"forms":[]},{"name":"runerigus","height":16,"weight":666,"base_stats":{"hp":58,"attack":95,"defense":145,"specialAttack":50,"specialDefense":105,"speed":30},"forms":[]},{"name":"arctozolt","height":23,"weight":1500,"base_stats":{"hp":90,"attack":100,"defense":90,"specialAttack":90,"specialDefense":80,"speed":55},"forms":[]},{"name":"morpeko","height":3,"weight":30,"base_stats":{"hp":58,"attack":95,"defense":58,"specialAttack":70,"specialDefense":58,"speed":97},"forms":[]},{"name":"indeedee","height":9,"weight":280,"base_stats":{"hp":60,"attack":65,"defense":55,"specialAttack":105,"specialDefense":95,"speed":95},"forms":[]},{"name":"copperajah","height":30,"weight":6500,"base_stats":{"hp":122,"attack":130,"defense":69,"specialAttack":80,"specialDefense":69,"speed":30},"forms":[]},{"name":"arctovish","height":20,"weight":1750,"base_stats":{"hp":90,"attack":90,"defense":100,"specialAttack":80,"specialDefense":90,"speed":55},"forms":[]},{"name":"cufant","height":12,"weight":1000,"base_stats":{"hp":72,"attack":80,"defense":49,"specialAttack":40,"specialDefense":49,"speed":40},"forms":[]},{"name":"dracozolt","height":18,"weight":1900,"base_stats":{"hp":90,"attack":100,"defense":90,"specialAttack":80,"specialDefense":70,"speed":75},"forms":[]},{"name":"dreepy","height":5,"weight":20,"base_stats":{"hp":28,"attack":60,"defense":30,"specialAttack":40,"specialDefense":30,"speed":82},"forms":[]},{"name":"duraludon","height":18,"weight":400,"base_stats":{"hp":70,"attack":95,"defense":115,"specialAttack":120,"specialDefense":50,"speed":85},"forms":[]},{"name":"dracovish","height":23,"weight":2150,"base_stats":{"hp":90,"attack":90,"defense":100,"specialAttack":70,"specialDefense":80,"speed":75},"forms":[]},{"name":"caterpie","height":3,"weight":29,"base_stats":{"hp":45,"attack":30,"defense":35,"specialAttack":20,"specialDefense":20,"speed":45},"forms":[]},{"name":"metapod","height":7,"weight":99,"base_stats":{"hp":50,"attack":20,"defense":55,"specialAttack":25,"specialDefense":25,"speed":30},"forms":[]},{"name":"weedle","height":3,"weight":32,"base_stats":{"hp":40,"attack":35,"defense":30,"specialAttack":20,"specialDefense":20,"speed":50},"forms":[]},{"name":"kakuna","height":6,"weight":100,"base_stats":{"hp":45,"attack":25,"defense":50,"specialAttack":25,"specialDefense":25,"speed":35},"forms":[]},{"name":"magikarp","height":9,"weight":100,"base_stats":{"hp":20,"attack":10,"defense":55,"specialAttack":15,"specialDefense":20,"speed":80},"forms":[]},{"name":"ditto","height":3,"weight":40,"base_stats":{"hp":48,"attack":48,"defense":48,"specialAttack":48,"specialDefense":48,"speed":48},"forms":[]},{"name":"wobbuffet","height":13,"weight":285,"base_stats":{"hp":190,"attack":33,"defense":58,"specialAttack":33,"specialDefense":58,"speed":33},"forms":[]},{"name":"wurmple","height":3,"weight":36,"base_stats":{"hp":45,"attack":45,"defense":35,"specialAttack":20,"specialDefense":30,"speed":20},"forms":[]},{"name":"wynaut","height":6,"weight":140,"base_stats":{"hp":95,"attack":23,"defense":48,"specialAttack":23,"specialDefense":48,"speed":23},"forms":[]},{"name":"beldum","height":6,"weight":952,"base_stats":{"hp":40,"attack":55,"defense":80,"specialAttack":35,"specialDefense":60,"speed":30},"forms":[]},{"name":"kricketot","height":3,"weight":22,"base_stats":{"hp":37,"attack":25,"defense":41,"specialAttack":25,"specialDefense":41,"speed":25},"forms":[]},{"name":"combee","height":3,"weight":55,"base_stats":{"hp":30,"attack":30,"defense":42,"specialAttack":30,"specialDefense":42,"speed":70},"forms":[]},{"name":"charjabug","height":5,"weight":105,"base_stats":{"hp":57,"attack":82,"defense":95,"specialAttack":55,"specialDefense":75,"speed":36},"forms":[]},{"name":"wimpod","height":5,"weight":120,"base_stats":{"hp":25,"attack":35,"defense":40,"specialAttack":20,"specialDefense":30,"speed":80},"forms":[]},{"name":"pyukumuku","height":3,"weight":12,"base_stats":{"hp":55,"attack":60,"defense":130,"specialAttack":30,"specialDefense":130,"speed":5},"forms":[]},{"name":"kartana","height":3,"weight":1,"base_stats":{"hp":59,"attack":181,"defense":131,"specialAttack":59,"specialDefense":31,"speed":109},"forms":[]},{"name":"zeraora","height":15,"weight":445,"base_stats":{"hp":88,"attack":112,"defense":75,"specialAttack":102,"specialDefense":80,"speed":143},"forms":[]},{"name":"stakataka","height":55,"weight":8200,"base_stats":{"hp":61,"attack":131,"defense":211,"specialAttack":53,"specialDefense":101,"speed":13},"forms":[]},{"name":"blacephalon","height":18,"weight":130,"base_stats":{"hp":53,"attack":127,"defense":53,"specialAttack":151,"specialDefense":79,"speed":107},"forms":[]},{"name":"grubbin","height":4,"weight":44,"base_stats":{"hp":47,"attack":62,"defense":45,"specialAttack":55,"specialDefense":45,"speed":46},"forms":[]},{"name":"urshifu","height":19,"weight":1050,"base_stats":{"hp":100,"attack":130,"defense":100,"specialAttack":63,"specialDefense":60,"speed":97},"forms":[]},{"name":"zamazenta","height":29,"weight":2100,"base_stats":{"hp":92,"attack":130,"defense":115,"specialAttack":80,"specialDefense":115,"speed":138},"forms":[]},{"name":"impidimp","height":4,"weight":55,"base_stats":{"hp":45,"attack":45,"defense":30,"specialAttack":55,"specialDefense":40,"speed":50},"forms":[]},{"name":"kubfu","height":6,"weight":120,"base_stats":{"hp":60,"attack":90,"defense":60,"specialAttack":53,"specialDefense":50,"speed":72},"forms":[]},{"name":"eternatus","height":200,"weight":9500,"base_stats":{"hp":140,"attack":85,"defense":95,"specialAttack":145,"specialDefense":95,"speed":130},"forms":[]},{"name":"hattrem","height":6,"weight":48,"base_stats":{"hp":57,"attack":40,"defense":65,"specialAttack":86,"specialDefense":73,"speed":49},"forms":[]},{"name":"sinistea","height":1,"weight":2,"base_stats":{"hp":40,"attack":45,"defense":45,"specialAttack":74,"specialDefense":54,"speed":50},"forms":[]},{"name":"zarude","height":18,"weight":700,"base_stats":{"hp":105,"attack":120,"defense":105,"specialAttack":70,"specialDefense":95,"speed":105},"forms":[]},{"name":"dragapult","height":30,"weight":500,"base_stats":{"hp":88,"attack":120,"defense":75,"specialAttack":100,"specialDefense":75,"speed":142},"forms":[]},{"name":"pincurchin","height":3,"weight":10,"base_stats":{"hp":48,"attack":101,"defense":95,"specialAttack":91,"specialDefense":85,"speed":15},"forms":[]},{"name":"zacian","height":28,"weight":1100,"base_stats":{"hp":92,"attack":130,"defense":115,"specialAttack":80,"specialDefense":115,"speed":138},"forms":[]},{"name":"morgrem","height":8,"weight":125,"base_stats":{"hp":65,"attack":60,"defense":45,"specialAttack":75,"specialDefense":55,"speed":70},"forms":[]},{"name":"stonjourner","height":25,"weight":5200,"base_stats":{"hp":100,"attack":125,"defense":135,"specialAttack":20,"specialDefense":20,"speed":70},"forms":[]},{"name":"snom","height":3,"weight":38,"base_stats":{"hp":30,"attack":25,"defense":35,"specialAttack":45,"specialDefense":30,"speed":20},"forms":[]},{"name":"hatterene","height":21,"weight":51,"base_stats":{"hp":57,"attack":90,"defense":95,"specialAttack":136,"specialDefense":103,"speed":29},"forms":[]},{"name":"falinks","height":30,"weight":620,"base_stats":{"hp":65,"attack":100,"defense":100,"specialAttack":70,"specialDefense":60,"speed":75},"forms":[]},{"name":"drakloak","height":14,"weight":110,"base_stats":{"hp":68,"attack":80,"defense":50,"specialAttack":60,"specialDefense":50,"speed":102},"forms":[]},{"name":"polteageist","height":2,"weight":4,"base_stats":{"hp":60,"attack":65,"defense":65,"specialAttack":134,"specialDefense":114,"speed":70},"forms":[]},{"name":"frosmoth","height":13,"weight":420,"base_stats":{"hp":70,"attack":65,"defense":60,"specialAttack":125,"specialDefense":90,"speed":65},"forms":[]},{"name":"rockruff","height":5,"weight":92,"base_stats":{"hp":45,"attack":65,"defense":40,"specialAttack":30,"specialDefense":40,"speed":60},"forms":[{"name":"rockruff-own-tempo","height":5,"weight":92,"base_stats":{"hp":45,"attack":65,"defense":40,"specialAttack":30,"specialDefense":40,"speed":60},"forms":[]}]},{"name":"smeargle","height":12,"weight":580,"base_stats":{"hp":55,"attack":20,"defense":35,"specialAttack":20,"specialDefense":45,"speed":75},"forms":[]},{"name":"torracat","height":7,"weight":250,"base_stats":{"hp":65,"attack":85,"defense":50,"specialAttack":80,"specialDefense":50,"speed":90},"forms":[]},{"name":"dartrix","height":7,"weight":160,"base_stats":{"hp":78,"attack":75,"defense":75,"specialAttack":70,"specialDefense":70,"speed":52},"forms":[]},{"name":"pikipek","height":3,"weight":12,"base_stats":{"hp":35,"attack":75,"defense":30,"specialAttack":30,"specialDefense":30,"speed":65},"forms":[]},{"name":"popplio","height":4,"weight":75,"base_stats":{"hp":50,"attack":54,"defense":54,"specialAttack":66,"specialDefense":56,"speed":40},"forms":[]},{"name":"toucannon","height":11,"weight":260,"base_stats":{"hp":80,"attack":120,"defense":75,"specialAttack":75,"specialDefense":75,"speed":60},"forms":[]},{"name":"litten","height":4,"weight":43,"base_stats":{"hp":45,"attack":65,"defense":40,"specialAttack":60,"specialDefense":40,"speed":70},"forms":[]},{"name":"rowlet","height":3,"weight":15,"base_stats":{"hp":68,"attack":55,"defense":55,"specialAttack":50,"specialDefense":50,"speed":42},"forms":[]},{"name":"gumshoos","height":7,"weight":142,"base_stats":{"hp":88,"attack":110,"defense":60,"specialAttack":55,"specialDefense":60,"speed":45},"forms":[{"name":"gumshoos-totem","height":14,"weight":600,"base_stats":{"hp":88,"attack":110,"defense":60,"specialAttack":55,"specialDefense":60,"speed":45},"forms":[]}]},{"name":"primarina","height":18,"weight":440,"base_stats":{"hp":80,"attack":74,"defense":74,"specialAttack":126,"specialDefense":116,"speed":60},"forms":[]},{"name":"oricorio","forms":[{"name":"oricorio-baile","height":6,"weight":34,"base_stats":{"hp":75,"attack":70,"defense":70,"specialAttack":98,"specialDefense":70,"speed":93},"forms":[]},{"name":"oricorio-pom-pom","height":6,"weight":34,"base_stats":{"hp":75,"attack":70,"defense":70,"specialAttack":98,"specialDefense":70,"speed":93},"forms":[]},{"name":"oricorio-sensu","height":6,"weight":34,"base_stats":{"hp":75,"attack":70,"defense":70,"specialAttack":98,"specialDefense":70,"speed":93},"forms":[]},{"name":"oricorio-pau","height":6,"weight":34,"base_stats":{"hp":75,"attack":70,"defense":70,"specialAttack":98,"specialDefense":70,"speed":93},"forms":[]}]},{"name":"yungoos","height":4,"weight":60,"base_stats":{"hp":48,"attack":70,"defense":30,"specialAttack":30,"specialDefense":30,"speed":45},"forms":[]},{"name":"brionne","height":6,"weight":175,"base_stats":{"hp":60,"attack":69,"defense":69,"specialAttack":91,"specialDefense":81,"speed":50},"forms":[]},{"name":"cutiefly","height":1,"weight":2,"base_stats":{"hp":40,"attack":45,"defense":40,"specialAttack":55,"specialDefense":40,"speed":84},"forms":[]},{"name":"crabrawler","height":6,"weight":70,"base_stats":{"hp":47,"attack":82,"defense":57,"specialAttack":42,"specialDefense":47,"speed":63},"forms":[]},{"name":"ribombee","height":2,"weight":5,"base_stats":{"hp":60,"attack":55,"defense":60,"specialAttack":95,"specialDefense":70,"speed":124},"forms":[{"name":"ribombee-totem","height":4,"weight":20,"base_stats":{"hp":60,"attack":55,"defense":60,"specialAttack":95,"specialDefense":70,"speed":124},"forms":[]}]},{"name":"mareanie","height":4,"weight":80,"base_stats":{"hp":50,"attack":53,"defense":62,"specialAttack":43,"specialDefense":52,"speed":45},"forms":[]},{"name":"toxapex","height":7,"weight":145,"base_stats":{"hp":50,"attack":63,"defense":152,"specialAttack":53,"specialDefense":142,"speed":35},"forms":[]},{"name":"vikavolt","height":15,"weight":450,"base_stats":{"hp":77,"attack":70,"defense":90,"specialAttack":145,"specialDefense":75,"speed":43},"forms":[{"name":"vikavolt-totem","height":26,"weight":1475,"base_stats":{"hp":77,"attack":70,"defense":90,"specialAttack":145,"specialDefense":75,"speed":43},"forms":[]}]},{"name":"wishiwashi","forms":[{"name":"wishiwashi-solo","height":2,"weight":3,"base_stats":{"hp":45,"attack":20,"defense":20,"specialAttack":25,"specialDefense":25,"speed":40},"forms":[]},{"name":"wishiwashi-school","height":82,"weight":786,"base_stats":{"hp":45,"attack":140,"defense":130,"specialAttack":140,"specialDefense":135,"speed":30},"forms":[]}]},{"name":"crabominable","height":17,"weight":1800,"base_stats":{"hp":97,"attack":132,"defense":77,"specialAttack":62,"specialDefense":67,"speed":43},"forms":[]},{"name":"lycanroc","forms":[{"name":"lycanroc-midday","height":8,"weight":250,"base_stats":{"hp":75,"attack":115,"defense":65,"specialAttack":55,"specialDefense":65,"speed":112},"forms":[]},{"name":"lycanroc-midnight","height":11,"weight":250,"base_stats":{"hp":85,"attack":115,"defense":75,"specialAttack":55,"specialDefense":75,"speed":82},"forms":[]},{"name":"lycanroc-dusk","height":8,"weight":250,"base_stats":{"hp":75,"attack":117,"defense":65,"specialAttack":55,"specialDefense":65,"speed":110},"forms":[]}]},{"name":"steenee","height":7,"weight":82,"base_stats":{"hp":52,"attack":40,"defense":48,"specialAttack":40,"specialDefense":48,"speed":62},"forms":[]},{"name":"lurantis","height":9,"weight":185,"base_stats":{"hp":70,"attack":105,"defense":90,"specialAttack":80,"specialDefense":90,"speed":45},"forms":[{"name":"lurantis-totem","height":15,"weight":580,"base_stats":{"hp":70,"attack":105,"defense":90,"specialAttack":80,"specialDefense":90,"speed":45},"forms":[]}]},{"name":"salandit","height":6,"weight":48,"base_stats":{"hp":48,"attack":44,"defense":40,"specialAttack":71,"specialDefense":40,"speed":77},"forms":[]},{"name":"araquanid","height":18,"weight":820,"base_stats":{"hp":68,"attack":70,"defense":92,"specialAttack":50,"specialDefense":132,"speed":42},"forms":[{"name":"araquanid-totem","height":31,"weight":2175,"base_stats":{"hp":68,"attack":70,"defense":92,"specialAttack":50,"specialDefense":132,"speed":42},"forms":[]}]},{"name":"bounsweet","height":3,"weight":32,"base_stats":{"hp":42,"attack":30,"defense":38,"specialAttack":30,"specialDefense":38,"speed":32},"forms":[]},{"name":"bewear","height":21,"weight":1350,"base_stats":{"hp":120,"attack":125,"defense":80,"specialAttack":55,"specialDefense":60,"speed":60},"forms":[]},{"name":"mudbray","height":10,"weight":1100,"base_stats":{"hp":70,"attack":100,"defense":70,"specialAttack":45,"specialDefense":55,"speed":45},"forms":[]},{"name":"morelull","height":2,"weight":15,"base_stats":{"hp":40,"attack":35,"defense":55,"specialAttack":65,"specialDefense":75,"speed":15},"forms":[]},{"name":"dewpider","height":3,"weight":40,"base_stats":{"hp":38,"attack":40,"defense":52,"specialAttack":40,"specialDefense":72,"speed":27},"forms":[]},{"name":"fomantis","height":3,"weight":15,"base_stats":{"hp":40,"attack":55,"defense":35,"specialAttack":50,"specialDefense":35,"speed":35},"forms":[]},{"name":"mudsdale","height":25,"weight":9200,"base_stats":{"hp":100,"attack":125,"defense":100,"specialAttack":55,"specialDefense":85,"speed":35},"forms":[]},{"name":"tsareena","height":12,"weight":214,"base_stats":{"hp":72,"attack":120,"defense":98,"specialAttack":50,"specialDefense":98,"speed":72},"forms":[]},{"name":"trumbeak","height":6,"weight":148,"base_stats":{"hp":55,"attack":85,"defense":50,"specialAttack":40,"specialDefense":50,"speed":75},"forms":[]},{"name":"shiinotic","height":10,"weight":115,"base_stats":{"hp":60,"attack":45,"defense":80,"specialAttack":90,"specialDefense":100,"speed":30},"forms":[]},{"name":"stufful","height":5,"weight":68,"base_stats":{"hp":70,"attack":75,"defense":50,"specialAttack":45,"specialDefense":50,"speed":50},"forms":[]},{"name":"sandygast","height":5,"weight":700,"base_stats":{"hp":55,"attack":55,"defense":80,"specialAttack":70,"specialDefense":45,"speed":15},"forms":[]},{"name":"palossand","height":13,"weight":2500,"base_stats":{"hp":85,"attack":75,"defense":110,"specialAttack":100,"specialDefense":75,"speed":35},"forms":[]},{"name":"komala","height":4,"weight":199,"base_stats":{"hp":65,"attack":115,"defense":65,"specialAttack":75,"specialDefense":95,"speed":65},"forms":[]},{"name":"minior","forms":[{"name":"minior-red-meteor","height":3,"weight":400,"base_stats":{"hp":60,"attack":60,"defense":100,"specialAttack":60,"specialDefense":100,"speed":60},"forms":[]},{"name":"minior-yellow","height":3,"weight":3,"base_stats":{"hp":60,"attack":100,"defense":60,"specialAttack":100,"specialDefense":60,"speed":120},"forms":[]},{"name":"minior-orange-meteor","height":3,"weight":400,"base_stats":{"hp":60,"attack":60,"defense":100,"specialAttack":60,"specialDefense":100,"speed":60},"forms":[]},{"name":"minior-yellow-meteor","height":3,"weight":400,"base_stats":{"hp":60,"attack":60,"defense":100,"specialAttack":60,"specialDefense":100,"speed":60},"forms":[]},{"name":"minior-green-meteor","height":3,"weight":400,"base_stats":{"hp":60,"attack":60,"defense":100,"specialAttack":60,"specialDefense":100,"speed":60},"forms":[]},{"name":"minior-blue-meteor","height":3,"weight":400,"base_stats":{"hp":60,"attack":60,"defense":100,"specialAttack":60,"specialDefense":100,"speed":60},"forms":[]},{"name":"minior-indigo-meteor","height":3,"weight":400,"base_stats":{"hp":60,"attack":60,"defense":100,"specialAttack":60,"specialDefense":100,"speed":60},"forms":[]},{"name":"minior-red","height":3,"weight":3,"base_stats":{"hp":60,"attack":100,"defense":60,"specialAttack":100,"specialDefense":60,"speed":120},"forms":[]},{"name":"minior-orange","height":3,"weight":3,"base_stats":{"hp":60,"attack":100,"defense":60,"specialAttack":100,"specialDefense":60,"speed":120},"forms":[]},{"name":"minior-violet-meteor","height":3,"weight":400,"base_stats":{"hp":60,"attack":60,"defense":100,"specialAttack":60,"specialDefense":100,"speed":60},"forms":[]},{"name":"minior-blue","height":3,"weight":3,"base_stats":{"hp":60,"attack":100,"defense":60,"specialAttack":100,"specialDefense":60,"speed":120},"forms":[]},{"name":"minior-green","height":3,"weight":3,"base_stats":{"hp":60,"attack":100,"defense":60,"specialAttack":100,"specialDefense":60,"speed":120},"forms":[]},{"name":"minior-indigo","height":3,"weight":3,"base_stats":{"hp":60,"attack":100,"defense":60,"specialAttack":100,"specialDefense":60,"speed":120},"forms":[]},{"name":"minior-violet","height":3,"weight":3,"base_stats":{"hp":60,"attack":100,"defense":60,"specialAttack":100,"specialDefense":60,"speed":120},"forms":[]}]},{"name":"type-null","height":19,"weight":1205,"base_stats":{"hp":95,"attack":95,"defense":95,"specialAttack":95,"specialDefense":95,"speed":59},"forms":[]},{"name":"jangmo-o","height":6,"weight":297,"base_stats":{"hp":45,"attack":55,"defense":65,"specialAttack":45,"specialDefense":45,"speed":45},"forms":[]},{"name":"tapu-lele","height":12,"weight":186,"base_stats":{"hp":70,"attack":85,"defense":75,"specialAttack":130,"specialDefense":115,"speed":95},"forms":[]},{"name":"buzzwole","height":24,"weight":3336,"base_stats":{"hp":107,"attack":139,"defense":139,"specialAttack":53,"specialDefense":53,"speed":79},"forms":[]},{"name":"xurkitree","height":38,"weight":1000,"base_stats":{"hp":83,"attack":89,"defense":71,"specialAttack":173,"specialDefense":71,"speed":83},"forms":[]},{"name":"magearna","height":10,"weight":805,"base_stats":{"hp":80,"attack":95,"defense":115,"specialAttack":130,"specialDefense":115,"speed":65},"forms":[{"name":"magearna-original","height":10,"weight":805,"base_stats":{"hp":80,"attack":95,"defense":115,"specialAttack":130,"specialDefense":115,"speed":65},"forms":[]}]},{"name":"pheromosa","height":18,"weight":250,"base_stats":{"hp":71,"attack":137,"defense":37,"specialAttack":137,"specialDefense":37,"speed":151},"forms":[]},{"name":"tapu-fini","height":13,"weight":212,"base_stats":{"hp":70,"attack":75,"defense":115,"specialAttack":95,"specialDefense":130,"speed":85},"forms":[]},{"name":"nihilego","height":12,"weight":555,"base_stats":{"hp":109,"attack":53,"defense":47,"specialAttack":127,"specialDefense":131,"speed":103},"forms":[]},{"name":"celesteela","height":92,"weight":9999,"base_stats":{"hp":97,"attack":101,"defense":103,"specialAttack":107,"specialDefense":101,"speed":61},"forms":[]},{"name":"naganadel","height":36,"weight":1500,"base_stats":{"hp":73,"attack":73,"defense":73,"specialAttack":127,"specialDefense":73,"speed":121},"forms":[]},{"name":"zygarde","height":50,"weight":3050,"base_stats":{"hp":108,"attack":100,"defense":121,"specialAttack":81,"specialDefense":95,"speed":95},"forms":[{"name":"zygarde-50","height":50,"weight":3050,"base_stats":{"hp":108,"attack":100,"defense":121,"specialAttack":81,"specialDefense":95,"speed":95},"forms":[]},{"name":"zygarde-complete","height":45,"weight":6100,"base_stats":{"hp":216,"attack":100,"defense":121,"specialAttack":91,"specialDefense":95,"speed":85},"forms":[]},{"name":"zygarde-10","height":12,"weight":335,"base_stats":{"hp":54,"attack":100,"defense":71,"specialAttack":61,"specialDefense":85,"speed":115},"forms":[]}]},{"name":"pikachu","height":4,"weight":60,"base_stats":{"hp":35,"attack":55,"defense":40,"specialAttack":50,"specialDefense":50,"speed":90},"forms":[{"name":"pikachu-partner-cap","height":4,"weight":60,"base_stats":{"hp":35,"attack":55,"defense":40,"specialAttack":50,"specialDefense":50,"speed":90},"forms":[]},{"name":"pikachu-original-cap","height":4,"weight":60,"base_stats":{"hp":35,"attack":55,"defense":40,"specialAttack":50,"specialDefense":50,"speed":90},"forms":[]},{"name":"pikachu-sinnoh-cap","height":4,"weight":60,"base_stats":{"hp":35,"attack":55,"defense":40,"specialAttack":50,"specialDefense":50,"speed":90},"forms":[]},{"name":"pikachu-kalos-cap","height":4,"weight":60,"base_stats":{"hp":35,"attack":55,"defense":40,"specialAttack":50,"specialDefense":50,"speed":90},"forms":[]},{"name":"pikachu-hoenn-cap","height":4,"weight":60,"base_stats":{"hp":35,"attack":55,"defense":40,"specialAttack":50,"specialDefense":50,"speed":90},"forms":[]},{"name":"pikachu-unova-cap","height":4,"weight":60,"base_stats":{"hp":35,"attack":55,"defense":40,"specialAttack":50,"specialDefense":50,"speed":90},"forms":[]},{"name":"pikachu-alola-cap","height":4,"weight":60,"base_stats":{"hp":35,"attack":55,"defense":40,"specialAttack":50,"specialDefense":50,"speed":90},"forms":[]},{"name":"pikachu-rock-star","height":4,"weight":60,"base_stats":{"hp":35,"attack":55,"defense":40,"specialAttack":50,"specialDefense":50,"speed":90},"forms":[]},{"name":"pikachu-belle","height":4,"weight":60,"base_stats":{"hp":35,"attack":55,"defense":40,"specialAttack":50,"specialDefense":50,"speed":90},"forms":[]},{"name":"pikachu-pop-star","height":4,"weight":60,"base_stats":{"hp":35,"attack":55,"defense":40,"specialAttack":50,"specialDefense":50,"speed":90},"forms":[]},{"name":"pikachu-cosplay","height":4,"weight":60,"base_stats":{"hp":35,"attack":55,"defense":40,"specialAttack":50,"specialDefense":50,"speed":90},"forms":[]},{"name":"pikachu-phd","height":4,"weight":60,"base_stats":{"hp":35,"attack":55,"defense":40,"specialAttack":50,"specialDefense":50,"speed":90},"forms":[]},{"name":"pikachu-libre","height":4,"weight":60,"base_stats":{"hp":35,"attack":55,"defense":40,"specialAttack":50,"specialDefense":50,"speed":90},"forms":[]}]},{"name":"togedemaru","height":3,"weight":33,"base_stats":{"hp":65,"attack":98,"defense":63,"specialAttack":40,"specialDefense":73,"speed":96},"forms":[{"name":"togedemaru-totem","height":6,"weight":130,"base_stats":{"hp":65,"attack":98,"defense":63,"specialAttack":40,"specialDefense":73,"speed":96},"forms":[]}]},{"name":"rattata","height":3,"weight":35,"base_stats":{"hp":30,"attack":56,"defense":35,"specialAttack":25,"specialDefense":35,"speed":72},"forms":[{"name":"rattata-alola","height":3,"weight":38,"base_stats":{"hp":30,"attack":56,"defense":35,"specialAttack":25,"specialDefense":35,"speed":72},"forms":[]}]},{"name":"raichu","height":8,"weight":300,"base_stats":{"hp":60,"attack":90,"defense":55,"specialAttack":90,"specialDefense":80,"speed":110},"forms":[{"name":"raichu-alola","height":7,"weight":210,"base_stats":{"hp":60,"attack":85,"defense":50,"specialAttack":95,"specialDefense":85,"speed":110},"forms":[]}]},{"name":"sandslash","height":10,"weight":295,"base_stats":{"hp":75,"attack":100,"defense":110,"specialAttack":45,"specialDefense":55,"speed":65},"forms":[{"name":"sandslash-alola","height":12,"weight":550,"base_stats":{"hp":75,"attack":100,"defense":120,"specialAttack":25,"specialDefense":65,"speed":65},"forms":[]}]},{"name":"diglett","height":2,"weight":8,"base_stats":{"hp":10,"attack":55,"defense":25,"specialAttack":35,"specialDefense":45,"speed":95},"forms":[{"name":"diglett-alola","height":2,"weight":10,"base_stats":{"hp":10,"attack":55,"defense":30,"specialAttack":35,"specialDefense":45,"speed":90},"forms":[]}]},{"name":"ninetales","height":11,"weight":199,"base_stats":{"hp":73,"attack":76,"defense":75,"specialAttack":81,"specialDefense":100,"speed":100},"forms":[{"name":"ninetales-alola","height":11,"weight":199,"base_stats":{"hp":73,"attack":67,"defense":75,"specialAttack":81,"specialDefense":100,"speed":109},"forms":[]}]},{"name":"fletchling","height":3,"weight":17,"base_stats":{"hp":45,"attack":50,"defense":43,"specialAttack":40,"specialDefense":38,"speed":62},"forms":[]},{"name":"florges","height":11,"weight":100,"base_stats":{"hp":78,"attack":65,"defense":68,"specialAttack":112,"specialDefense":154,"speed":75},"forms":[]},{"name":"floette","height":2,"weight":9,"base_stats":{"hp":54,"attack":45,"defense":47,"specialAttack":75,"specialDefense":98,"speed":52},"forms":[{"name":"floette-eternal","height":2,"weight":9,"base_stats":{"hp":74,"attack":65,"defense":67,"specialAttack":125,"specialDefense":128,"speed":92},"forms":[]}]},{"name":"doublade","height":8,"weight":45,"base_stats":{"hp":59,"attack":110,"defense":150,"specialAttack":45,"specialDefense":49,"speed":35},"forms":[]},{"name":"honedge","height":8,"weight":20,"base_stats":{"hp":45,"attack":80,"defense":100,"specialAttack":35,"specialDefense":37,"speed":28},"forms":[]},{"name":"goomy","height":3,"weight":28,"base_stats":{"hp":45,"attack":50,"defense":35,"specialAttack":55,"specialDefense":75,"speed":40},"forms":[]},{"name":"sliggoo","height":8,"weight":175,"base_stats":{"hp":68,"attack":75,"defense":53,"specialAttack":83,"specialDefense":113,"speed":60},"forms":[]},{"name":"decidueye","height":16,"weight":366,"base_stats":{"hp":78,"attack":107,"defense":75,"specialAttack":100,"specialDefense":100,"speed":70},"forms":[]},{"name":"incineroar","height":18,"weight":830,"base_stats":{"hp":95,"attack":115,"defense":90,"specialAttack":80,"specialDefense":90,"speed":60},"forms":[]},{"name":"comfey","height":1,"weight":3,"base_stats":{"hp":51,"attack":52,"defense":90,"specialAttack":82,"specialDefense":110,"speed":100},"forms":[]},{"name":"salazzle","height":12,"weight":222,"base_stats":{"hp":68,"attack":64,"defense":60,"specialAttack":111,"specialDefense":60,"speed":117},"forms":[{"name":"salazzle-totem","height":21,"weight":810,"base_stats":{"hp":68,"attack":64,"defense":60,"specialAttack":111,"specialDefense":60,"speed":117},"forms":[]}]},{"name":"oranguru","height":15,"weight":760,"base_stats":{"hp":90,"attack":60,"defense":80,"specialAttack":90,"specialDefense":110,"speed":60},"forms":[]},{"name":"silvally","height":23,"weight":1005,"base_stats":{"hp":95,"attack":95,"defense":95,"specialAttack":95,"specialDefense":95,"speed":95},"forms":[]},{"name":"passimian","height":20,"weight":828,"base_stats":{"hp":100,"attack":120,"defense":90,"specialAttack":40,"specialDefense":60,"speed":80},"forms":[]},{"name":"golisopod","height":20,"weight":1080,"base_stats":{"hp":75,"attack":125,"defense":140,"specialAttack":60,"specialDefense":90,"speed":40},"forms":[]},{"name":"dhelmise","height":39,"weight":2100,"base_stats":{"hp":70,"attack":131,"defense":100,"specialAttack":86,"specialDefense":90,"speed":40},"forms":[]},{"name":"turtonator","height":20,"weight":2120,"base_stats":{"hp":60,"attack":78,"defense":135,"specialAttack":91,"specialDefense":85,"speed":36},"forms":[]},{"name":"bruxish","height":9,"weight":190,"base_stats":{"hp":68,"attack":105,"defense":70,"specialAttack":70,"specialDefense":70,"speed":92},"forms":[]},{"name":"hakamo-o","height":12,"weight":470,"base_stats":{"hp":55,"attack":75,"defense":90,"specialAttack":65,"specialDefense":70,"speed":65},"forms":[]},{"name":"kommo-o","height":16,"weight":782,"base_stats":{"hp":75,"attack":110,"defense":125,"specialAttack":100,"specialDefense":105,"speed":85},"forms":[]},{"name":"mimikyu","forms":[{"name":"mimikyu-disguised","height":2,"weight":7,"base_stats":{"hp":55,"attack":90,"defense":80,"specialAttack":50,"specialDefense":105,"speed":96},"forms":[]},{"name":"mimikyu-busted","height":2,"weight":7,"base_stats":{"hp":55,"attack":90,"defense":80,"specialAttack":50,"specialDefense":105,"speed":96},"forms":[]},{"name":"mimikyu-totem-disguised","height":4,"weight":28,"base_stats":{"hp":55,"attack":90,"defense":80,"specialAttack":50,"specialDefense":105,"speed":96},"forms":[]},{"name":"mimikyu-totem-busted","height":4,"weight":28,"base_stats":{"hp":55,"attack":90,"defense":80,"specialAttack":50,"specialDefense":105,"speed":96},"forms":[]}]},{"name":"drampa","height":30,"weight":1850,"base_stats":{"hp":78,"attack":60,"defense":85,"specialAttack":135,"specialDefense":91,"speed":36},"forms":[]},{"name":"tapu-koko","height":18,"weight":205,"base_stats":{"hp":70,"attack":115,"defense":85,"specialAttack":95,"specialDefense":75,"speed":130},"forms":[]},{"name":"guzzlord","height":55,"weight":8880,"base_stats":{"hp":223,"attack":101,"defense":53,"specialAttack":97,"specialDefense":53,"speed":43},"forms":[]},{"name":"tapu-bulu","height":19,"weight":455,"base_stats":{"hp":70,"attack":130,"defense":115,"specialAttack":85,"specialDefense":95,"speed":75},"forms":[]},{"name":"marshadow","height":7,"weight":222,"base_stats":{"hp":90,"attack":125,"defense":80,"specialAttack":90,"specialDefense":90,"speed":125},"forms":[]},{"name":"necrozma","height":24,"weight":2300,"base_stats":{"hp":97,"attack":107,"defense":101,"specialAttack":127,"specialDefense":89,"speed":79},"forms":[{"name":"necrozma-dusk","height":38,"weight":4600,"base_stats":{"hp":97,"attack":157,"defense":127,"specialAttack":113,"specialDefense":109,"speed":77},"forms":[]},{"name":"necrozma-dawn","height":42,"weight":3500,"base_stats":{"hp":97,"attack":113,"defense":109,"specialAttack":157,"specialDefense":127,"speed":77},"forms":[]},{"name":"necrozma-ultra","height":75,"weight":2300,"base_stats":{"hp":97,"attack":167,"defense":97,"specialAttack":167,"specialDefense":97,"speed":129},"forms":[]}]},{"name":"lunala","height":40,"weight":1200,"base_stats":{"hp":137,"attack":113,"defense":89,"specialAttack":137,"specialDefense":107,"speed":97},"forms":[]},{"name":"solgaleo","height":34,"weight":2300,"base_stats":{"hp":137,"attack":137,"defense":107,"specialAttack":113,"specialDefense":89,"speed":97},"forms":[]},{"name":"marowak","height":10,"weight":450,"base_stats":{"hp":60,"attack":80,"defense":110,"specialAttack":50,"specialDefense":80,"speed":45},"forms":[{"name":"marowak-totem","height":17,"weight":980,"base_stats":{"hp":60,"attack":80,"defense":110,"specialAttack":50,"specialDefense":80,"speed":45},"forms":[]},{"name":"marowak-alola","height":10,"weight":340,"base_stats":{"hp":60,"attack":80,"defense":110,"specialAttack":50,"specialDefense":80,"speed":45},"forms":[]}]},{"name":"raticate","height":7,"weight":185,"base_stats":{"hp":55,"attack":81,"defense":60,"specialAttack":50,"specialDefense":70,"speed":97},"forms":[{"name":"raticate-alola","height":7,"weight":255,"base_stats":{"hp":75,"attack":71,"defense":70,"specialAttack":40,"specialDefense":80,"speed":77},"forms":[]},{"name":"raticate-totem-alola","height":14,"weight":1050,"base_stats":{"hp":75,"attack":71,"defense":70,"specialAttack":40,"specialDefense":80,"speed":77},"forms":[]}]},{"name":"sandshrew","height":6,"weight":120,"base_stats":{"hp":50,"attack":75,"defense":85,"specialAttack":20,"specialDefense":30,"speed":40},"forms":[{"name":"sandshrew-alola","height":7,"weight":400,"base_stats":{"hp":50,"attack":75,"defense":90,"specialAttack":10,"specialDefense":35,"speed":40},"forms":[]}]},{"name":"vulpix","height":6,"weight":99,"base_stats":{"hp":38,"attack":41,"defense":40,"specialAttack":50,"specialDefense":65,"speed":65},"forms":[{"name":"vulpix-alola","height":6,"weight":99,"base_stats":{"hp":38,"attack":41,"defense":40,"specialAttack":50,"specialDefense":65,"speed":65},"forms":[]}]},{"name":"meowth","height":4,"weight":42,"base_stats":{"hp":40,"attack":45,"defense":35,"specialAttack":40,"specialDefense":40,"speed":90},"forms":[{"name":"meowth-alola","height":4,"weight":42,"base_stats":{"hp":40,"attack":35,"defense":35,"specialAttack":50,"specialDefense":40,"speed":90},"forms":[]}]},{"name":"graveler","height":10,"weight":1050,"base_stats":{"hp":55,"attack":95,"defense":115,"specialAttack":45,"specialDefense":45,"speed":35},"forms":[{"name":"graveler-alola","height":10,"weight":1100,"base_stats":{"hp":55,"attack":95,"defense":115,"specialAttack":45,"specialDefense":45,"speed":35},"forms":[]}]},{"name":"exeggutor","height":20,"weight":1200,"base_stats":{"hp":95,"attack":95,"defense":85,"specialAttack":125,"specialDefense":75,"speed":55},"forms":[{"name":"exeggutor-alola","height":109,"weight":4156,"base_stats":{"hp":95,"attack":105,"defense":85,"specialAttack":125,"specialDefense":75,"speed":45},"forms":[]}]},{"name":"grimer","height":9,"weight":300,"base_stats":{"hp":80,"attack":80,"defense":50,"specialAttack":40,"specialDefense":50,"speed":25},"forms":[{"name":"grimer-alola","height":7,"weight":420,"base_stats":{"hp":80,"attack":80,"defense":50,"specialAttack":40,"specialDefense":50,"speed":25},"forms":[]}]},{"name":"geodude","height":4,"weight":200,"base_stats":{"hp":40,"attack":80,"defense":100,"specialAttack":30,"specialDefense":30,"speed":20},"forms":[{"name":"geodude-alola","height":4,"weight":203,"base_stats":{"hp":40,"attack":80,"defense":100,"specialAttack":30,"specialDefense":30,"speed":20},"forms":[]}]},{"name":"dugtrio","height":7,"weight":333,"base_stats":{"hp":35,"attack":100,"defense":50,"specialAttack":50,"specialDefense":70,"speed":120},"forms":[{"name":"dugtrio-alola","height":7,"weight":666,"base_stats":{"hp":35,"attack":100,"defense":60,"specialAttack":50,"specialDefense":70,"speed":110},"forms":[]}]},{"name":"tranquill","height":6,"weight":150,"base_stats":{"hp":62,"attack":77,"defense":62,"specialAttack":50,"specialDefense":42,"speed":65},"forms":[]},{"name":"swadloon","height":5,"weight":73,"base_stats":{"hp":55,"attack":63,"defense":90,"specialAttack":50,"specialDefense":80,"speed":42},"forms":[]},{"name":"lilligant","height":11,"weight":163,"base_stats":{"hp":70,"attack":60,"defense":75,"specialAttack":110,"specialDefense":75,"speed":90},"forms":[]},{"name":"klink","height":3,"weight":210,"base_stats":{"hp":40,"attack":55,"defense":70,"specialAttack":45,"specialDefense":60,"speed":30},"forms":[]},{"name":"bunnelby","height":4,"weight":50,"base_stats":{"hp":38,"attack":36,"defense":38,"specialAttack":32,"specialDefense":36,"speed":57},"forms":[]},{"name":"froakie","height":3,"weight":70,"base_stats":{"hp":41,"attack":56,"defense":40,"specialAttack":62,"specialDefense":44,"speed":71},"forms":[]},{"name":"braixen","height":10,"weight":145,"base_stats":{"hp":59,"attack":59,"defense":58,"specialAttack":90,"specialDefense":70,"speed":73},"forms":[]},{"name":"fennekin","height":4,"weight":94,"base_stats":{"hp":40,"attack":45,"defense":40,"specialAttack":62,"specialDefense":60,"speed":60},"forms":[]},{"name":"frogadier","height":6,"weight":109,"base_stats":{"hp":54,"attack":63,"defense":52,"specialAttack":83,"specialDefense":56,"speed":97},"forms":[]},{"name":"fletchinder","height":7,"weight":160,"base_stats":{"hp":62,"attack":73,"defense":55,"specialAttack":56,"specialDefense":52,"speed":84},"forms":[]},{"name":"vivillon","height":12,"weight":170,"base_stats":{"hp":80,"attack":52,"defense":50,"specialAttack":90,"specialDefense":50,"speed":89},"forms":[]},{"name":"flabebe","height":1,"weight":1,"base_stats":{"hp":44,"attack":38,"defense":39,"specialAttack":61,"specialDefense":79,"speed":42},"forms":[]},{"name":"talonflame","height":12,"weight":245,"base_stats":{"hp":78,"attack":81,"defense":71,"specialAttack":74,"specialDefense":69,"speed":126},"forms":[]},{"name":"pyroar","height":15,"weight":815,"base_stats":{"hp":86,"attack":68,"defense":72,"specialAttack":109,"specialDefense":66,"speed":106},"forms":[]},{"name":"gogoat","height":17,"weight":910,"base_stats":{"hp":123,"attack":100,"defense":62,"specialAttack":97,"specialDefense":81,"speed":68},"forms":[]},{"name":"skiddo","height":9,"weight":310,"base_stats":{"hp":66,"attack":65,"defense":48,"specialAttack":62,"specialDefense":57,"speed":52},"forms":[]},{"name":"litleo","height":6,"weight":135,"base_stats":{"hp":62,"attack":50,"defense":58,"specialAttack":73,"specialDefense":54,"speed":72},"forms":[]},{"name":"furfrou","height":12,"weight":280,"base_stats":{"hp":75,"attack":80,"defense":60,"specialAttack":65,"specialDefense":90,"speed":102},"forms":[]},{"name":"espurr","height":3,"weight":35,"base_stats":{"hp":62,"attack":48,"defense":54,"specialAttack":63,"specialDefense":60,"speed":68},"forms":[]},{"name":"spritzee","height":2,"weight":5,"base_stats":{"hp":78,"attack":52,"defense":60,"specialAttack":63,"specialDefense":65,"speed":23},"forms":[]},{"name":"aegislash","forms":[{"name":"aegislash-shield","height":17,"weight":530,"base_stats":{"hp":60,"attack":50,"defense":150,"specialAttack":50,"specialDefense":150,"speed":60},"forms":[]},{"name":"aegislash-blade","height":17,"weight":530,"base_stats":{"hp":60,"attack":150,"defense":50,"specialAttack":150,"specialDefense":50,"speed":60},"forms":[]}]},{"name":"aromatisse","height":8,"weight":155,"base_stats":{"hp":101,"attack":72,"defense":72,"specialAttack":99,"specialDefense":89,"speed":29},"forms":[]},{"name":"slurpuff","height":8,"weight":50,"base_stats":{"hp":82,"attack":80,"defense":86,"specialAttack":85,"specialDefense":75,"speed":72},"forms":[]},{"name":"inkay","height":4,"weight":35,"base_stats":{"hp":53,"attack":54,"defense":53,"specialAttack":37,"specialDefense":46,"speed":45},"forms":[]},{"name":"swirlix","height":4,"weight":35,"base_stats":{"hp":62,"attack":48,"defense":66,"specialAttack":59,"specialDefense":57,"speed":49},"forms":[]},{"name":"clauncher","height":5,"weight":83,"base_stats":{"hp":50,"attack":53,"defense":62,"specialAttack":58,"specialDefense":63,"speed":44},"forms":[]},{"name":"malamar","height":15,"weight":470,"base_stats":{"hp":86,"attack":92,"defense":88,"specialAttack":68,"specialDefense":75,"speed":73},"forms":[]},{"name":"dragalge","height":18,"weight":815,"base_stats":{"hp":65,"attack":75,"defense":90,"specialAttack":97,"specialDefense":123,"speed":44},"forms":[]},{"name":"clawitzer","height":13,"weight":353,"base_stats":{"hp":71,"attack":73,"defense":88,"specialAttack":120,"specialDefense":89,"speed":59},"forms":[]},{"name":"helioptile","height":5,"weight":60,"base_stats":{"hp":44,"attack":38,"defense":33,"specialAttack":61,"specialDefense":43,"speed":70},"forms":[]},{"name":"heliolisk","height":10,"weight":210,"base_stats":{"hp":62,"attack":55,"defense":52,"specialAttack":109,"specialDefense":94,"speed":109},"forms":[]},{"name":"skrelp","height":5,"weight":73,"base_stats":{"hp":50,"attack":60,"defense":60,"specialAttack":60,"specialDefense":60,"speed":30},"forms":[]},{"name":"tyrantrum","height":25,"weight":2700,"base_stats":{"hp":82,"attack":121,"defense":119,"specialAttack":69,"specialDefense":59,"speed":71},"forms":[]},{"name":"carbink","height":3,"weight":57,"base_stats":{"hp":50,"attack":50,"defense":150,"specialAttack":50,"specialDefense":150,"speed":50},"forms":[]},{"name":"dedenne","height":2,"weight":22,"base_stats":{"hp":67,"attack":58,"defense":57,"specialAttack":81,"specialDefense":67,"speed":101},"forms":[]},{"name":"sylveon","height":10,"weight":235,"base_stats":{"hp":95,"attack":65,"defense":65,"specialAttack":110,"specialDefense":130,"speed":60},"forms":[]},{"name":"tyrunt","height":8,"weight":260,"base_stats":{"hp":58,"attack":89,"defense":77,"specialAttack":45,"specialDefense":45,"speed":48},"forms":[]},{"name":"trevenant","height":15,"weight":710,"base_stats":{"hp":85,"attack":110,"defense":76,"specialAttack":65,"specialDefense":82,"speed":56},"forms":[]},{"name":"goodra","height":20,"weight":1505,"base_stats":{"hp":90,"attack":100,"defense":70,"specialAttack":110,"specialDefense":150,"speed":80},"forms":[]},{"name":"phantump","height":4,"weight":70,"base_stats":{"hp":43,"attack":70,"defense":48,"specialAttack":50,"specialDefense":60,"speed":38},"forms":[]},{"name":"klefki","height":2,"weight":30,"base_stats":{"hp":57,"attack":80,"defense":91,"specialAttack":80,"specialDefense":87,"speed":75},"forms":[]},{"name":"bergmite","height":10,"weight":995,"base_stats":{"hp":55,"attack":69,"defense":85,"specialAttack":32,"specialDefense":35,"speed":28},"forms":[]},{"name":"pumpkaboo","forms":[{"name":"pumpkaboo-average","height":4,"weight":50,"base_stats":{"hp":49,"attack":66,"defense":70,"specialAttack":44,"specialDefense":55,"speed":51},"forms":[]},{"name":"pumpkaboo-small","height":3,"weight":35,"base_stats":{"hp":44,"attack":66,"defense":70,"specialAttack":44,"specialDefense":55,"speed":56},"forms":[]},{"name":"pumpkaboo-large","height":5,"weight":75,"base_stats":{"hp":54,"attack":66,"defense":70,"specialAttack":44,"specialDefense":55,"speed":46},"forms":[]},{"name":"pumpkaboo-super","height":8,"weight":150,"base_stats":{"hp":59,"attack":66,"defense":70,"specialAttack":44,"specialDefense":55,"speed":41},"forms":[]}]},{"name":"avalugg","height":20,"weight":5050,"base_stats":{"hp":95,"attack":117,"defense":184,"specialAttack":44,"specialDefense":46,"speed":28},"forms":[]},{"name":"diancie","height":7,"weight":88,"base_stats":{"hp":50,"attack":100,"defense":150,"specialAttack":100,"specialDefense":150,"speed":50},"forms":[{"name":"diancie-mega","height":11,"weight":278,"base_stats":{"hp":50,"attack":160,"defense":110,"specialAttack":160,"specialDefense":110,"speed":110},"forms":[]}]},{"name":"yveltal","height":58,"weight":2030,"base_stats":{"hp":126,"attack":131,"defense":95,"specialAttack":131,"specialDefense":98,"speed":99},"forms":[]},{"name":"noibat","height":5,"weight":80,"base_stats":{"hp":40,"attack":30,"defense":35,"specialAttack":45,"specialDefense":40,"speed":55},"forms":[]},{"name":"volcanion","height":17,"weight":1950,"base_stats":{"hp":80,"attack":110,"defense":120,"specialAttack":130,"specialDefense":90,"speed":70},"forms":[]},{"name":"xerneas","height":30,"weight":2150,"base_stats":{"hp":126,"attack":131,"defense":95,"specialAttack":131,"specialDefense":98,"speed":99},"forms":[]},{"name":"gourgeist","forms":[{"name":"gourgeist-large","height":11,"weight":140,"base_stats":{"hp":75,"attack":95,"defense":122,"specialAttack":58,"specialDefense":75,"speed":69},"forms":[]},{"name":"gourgeist-small","height":7,"weight":95,"base_stats":{"hp":55,"attack":85,"defense":122,"specialAttack":58,"specialDefense":75,"speed":99},"forms":[]},{"name":"gourgeist-average","height":9,"weight":125,"base_stats":{"hp":65,"attack":90,"defense":122,"specialAttack":58,"specialDefense":75,"speed":84},"forms":[]},{"name":"gourgeist-super","height":17,"weight":390,"base_stats":{"hp":85,"attack":100,"defense":122,"specialAttack":58,"specialDefense":75,"speed":54},"forms":[]}]},{"name":"blastoise","height":16,"weight":855,"base_stats":{"hp":79,"attack":83,"defense":100,"specialAttack":85,"specialDefense":105,"speed":78},"forms":[{"name":"blastoise-mega","height":16,"weight":1011,"base_stats":{"hp":79,"attack":103,"defense":120,"specialAttack":135,"specialDefense":115,"speed":78},"forms":[]}]},{"name":"venusaur","height":20,"weight":1000,"base_stats":{"hp":80,"attack":82,"defense":83,"specialAttack":100,"specialDefense":100,"speed":80},"forms":[{"name":"venusaur-mega","height":24,"weight":1555,"base_stats":{"hp":80,"attack":100,"defense":123,"specialAttack":122,"specialDefense":120,"speed":80},"forms":[]}]},{"name":"gyarados","height":65,"weight":2350,"base_stats":{"hp":95,"attack":125,"defense":79,"specialAttack":60,"specialDefense":100,"speed":81},"forms":[{"name":"gyarados-mega","height":65,"weight":3050,"base_stats":{"hp":95,"attack":155,"defense":109,"specialAttack":70,"specialDefense":130,"speed":81},"forms":[]}]},{"name":"pinsir","height":15,"weight":550,"base_stats":{"hp":65,"attack":125,"defense":100,"specialAttack":55,"specialDefense":70,"speed":85},"forms":[{"name":"pinsir-mega","height":17,"weight":590,"base_stats":{"hp":65,"attack":155,"defense":120,"specialAttack":65,"specialDefense":90,"speed":105},"forms":[]}]},{"name":"greninja","height":15,"weight":400,"base_stats":{"hp":72,"attack":95,"defense":67,"specialAttack":103,"specialDefense":71,"speed":122},"forms":[{"name":"greninja-ash","height":15,"weight":400,"base_stats":{"hp":72,"attack":145,"defense":67,"specialAttack":153,"specialDefense":71,"speed":132},"forms":[]},{"name":"greninja-battle-bond","height":15,"weight":400,"base_stats":{"hp":72,"attack":95,"defense":67,"specialAttack":103,"specialDefense":71,"speed":122},"forms":[]}]},{"name":"kommo","forms":[{"name":"kommo-o-totem","height":24,"weight":2075,"base_stats":{"hp":75,"attack":110,"defense":125,"specialAttack":100,"specialDefense":105,"speed":85},"forms":[]}]},{"name":"pidgeot","height":15,"weight":395,"base_stats":{"hp":83,"attack":80,"defense":75,"specialAttack":70,"specialDefense":70,"speed":101},"forms":[{"name":"pidgeot-mega","height":22,"weight":505,"base_stats":{"hp":83,"attack":80,"defense":80,"specialAttack":135,"specialDefense":80,"speed":121},"forms":[]}]},{"name":"kyogre","height":45,"weight":3520,"base_stats":{"hp":100,"attack":100,"defense":90,"specialAttack":150,"specialDefense":140,"speed":90},"forms":[{"name":"kyogre-primal","height":98,"weight":4300,"base_stats":{"hp":100,"attack":150,"defense":90,"specialAttack":180,"specialDefense":160,"speed":90},"forms":[]}]},{"name":"glalie","height":15,"weight":2565,"base_stats":{"hp":80,"attack":80,"defense":80,"specialAttack":80,"specialDefense":80,"speed":80},"forms":[{"name":"glalie-mega","height":21,"weight":3502,"base_stats":{"hp":80,"attack":120,"defense":80,"specialAttack":120,"specialDefense":80,"speed":100},"forms":[]}]},{"name":"camerupt","height":19,"weight":2200,"base_stats":{"hp":70,"attack":100,"defense":70,"specialAttack":105,"specialDefense":75,"speed":40},"forms":[{"name":"camerupt-mega","height":25,"weight":3205,"base_stats":{"hp":70,"attack":120,"defense":100,"specialAttack":145,"specialDefense":105,"speed":20},"forms":[]}]},{"name":"beedrill","height":10,"weight":295,"base_stats":{"hp":65,"attack":90,"defense":40,"specialAttack":45,"specialDefense":80,"speed":75},"forms":[{"name":"beedrill-mega","height":14,"weight":405,"base_stats":{"hp":65,"attack":150,"defense":40,"specialAttack":15,"specialDefense":80,"speed":145},"forms":[]}]},{"name":"persian","height":10,"weight":320,"base_stats":{"hp":65,"attack":70,"defense":60,"specialAttack":65,"specialDefense":65,"speed":115},"forms":[{"name":"persian-alola","height":11,"weight":330,"base_stats":{"hp":65,"attack":60,"defense":60,"specialAttack":75,"specialDefense":65,"speed":115},"forms":[]}]},{"name":"golem","height":14,"weight":3000,"base_stats":{"hp":80,"attack":120,"defense":130,"specialAttack":55,"specialDefense":65,"speed":45},"forms":[{"name":"golem-alola","height":17,"weight":3160,"base_stats":{"hp":80,"attack":120,"defense":130,"specialAttack":55,"specialDefense":65,"speed":45},"forms":[]}]},{"name":"muk","height":12,"weight":300,"base_stats":{"hp":105,"attack":105,"defense":75,"specialAttack":65,"specialDefense":100,"speed":50},"forms":[{"name":"muk-alola","height":10,"weight":520,"base_stats":{"hp":105,"attack":105,"defense":75,"specialAttack":65,"specialDefense":100,"speed":50},"forms":[]}]},{"name":"servine","height":8,"weight":160,"base_stats":{"hp":60,"attack":60,"defense":75,"specialAttack":60,"specialDefense":75,"speed":83},"forms":[]},{"name":"herdier","height":9,"weight":147,"base_stats":{"hp":65,"attack":80,"defense":65,"specialAttack":35,"specialDefense":65,"speed":60},"forms":[]},{"name":"patrat","height":5,"weight":116,"base_stats":{"hp":45,"attack":55,"defense":39,"specialAttack":35,"specialDefense":39,"speed":42},"forms":[]},{"name":"dewott","height":8,"weight":245,"base_stats":{"hp":75,"attack":75,"defense":60,"specialAttack":83,"specialDefense":60,"speed":60},"forms":[]},{"name":"stoutland","height":12,"weight":610,"base_stats":{"hp":85,"attack":110,"defense":90,"specialAttack":45,"specialDefense":90,"speed":80},"forms":[]},{"name":"musharna","height":11,"weight":605,"base_stats":{"hp":116,"attack":55,"defense":85,"specialAttack":107,"specialDefense":95,"speed":29},"forms":[]},{"name":"simisear","height":10,"weight":280,"base_stats":{"hp":75,"attack":98,"defense":63,"specialAttack":98,"specialDefense":63,"speed":101},"forms":[]},{"name":"simisage","height":11,"weight":305,"base_stats":{"hp":75,"attack":98,"defense":63,"specialAttack":98,"specialDefense":63,"speed":101},"forms":[]},{"name":"simipour","height":10,"weight":290,"base_stats":{"hp":75,"attack":98,"defense":63,"specialAttack":98,"specialDefense":63,"speed":101},"forms":[]},{"name":"pidove","height":3,"weight":21,"base_stats":{"hp":50,"attack":55,"defense":50,"specialAttack":36,"specialDefense":30,"speed":43},"forms":[]},{"name":"blitzle","height":8,"weight":298,"base_stats":{"hp":45,"attack":60,"defense":32,"specialAttack":50,"specialDefense":32,"speed":76},"forms":[]},{"name":"zebstrika","height":16,"weight":795,"base_stats":{"hp":75,"attack":100,"defense":63,"specialAttack":80,"specialDefense":63,"speed":116},"forms":[]},{"name":"roggenrola","height":4,"weight":180,"base_stats":{"hp":55,"attack":75,"defense":85,"specialAttack":25,"specialDefense":25,"speed":15},"forms":[]},{"name":"drilbur","height":3,"weight":85,"base_stats":{"hp":60,"attack":85,"defense":40,"specialAttack":30,"specialDefense":45,"speed":68},"forms":[]},{"name":"gigalith","height":17,"weight":2600,"base_stats":{"hp":85,"attack":135,"defense":130,"specialAttack":60,"specialDefense":80,"speed":25},"forms":[]},{"name":"tympole","height":5,"weight":45,"base_stats":{"hp":50,"attack":50,"defense":40,"specialAttack":50,"specialDefense":40,"speed":64},"forms":[]},{"name":"palpitoad","height":8,"weight":170,"base_stats":{"hp":75,"attack":65,"defense":55,"specialAttack":65,"specialDefense":55,"speed":69},"forms":[]},{"name":"sewaddle","height":3,"weight":25,"base_stats":{"hp":45,"attack":53,"defense":70,"specialAttack":40,"specialDefense":60,"speed":42},"forms":[]},{"name":"boldore","height":9,"weight":1020,"base_stats":{"hp":70,"attack":105,"defense":105,"specialAttack":50,"specialDefense":40,"speed":20},"forms":[]},{"name":"gurdurr","height":12,"weight":400,"base_stats":{"hp":85,"attack":105,"defense":85,"specialAttack":40,"specialDefense":50,"speed":40},"forms":[]},{"name":"whimsicott","height":7,"weight":66,"base_stats":{"hp":60,"attack":67,"defense":85,"specialAttack":77,"specialDefense":75,"speed":116},"forms":[]},{"name":"whirlipede","height":12,"weight":585,"base_stats":{"hp":40,"attack":55,"defense":99,"specialAttack":40,"specialDefense":79,"speed":47},"forms":[]},{"name":"cottonee","height":3,"weight":6,"base_stats":{"hp":40,"attack":27,"defense":60,"specialAttack":37,"specialDefense":50,"speed":66},"forms":[]},{"name":"basculin","forms":[{"name":"basculin-red-striped","height":10,"weight":180,"base_stats":{"hp":70,"attack":92,"defense":65,"specialAttack":80,"specialDefense":55,"speed":98},"forms":[]},{"name":"basculin-blue-striped","height":10,"weight":180,"base_stats":{"hp":70,"attack":92,"defense":65,"specialAttack":80,"specialDefense":55,"speed":98},"forms":[]}]},{"name":"venipede","height":4,"weight":53,"base_stats":{"hp":30,"attack":45,"defense":59,"specialAttack":30,"specialDefense":39,"speed":57},"forms":[]},{"name":"petilil","height":5,"weight":66,"base_stats":{"hp":45,"attack":35,"defense":50,"specialAttack":70,"specialDefense":50,"speed":30},"forms":[]},{"name":"cinccino","height":5,"weight":75,"base_stats":{"hp":75,"attack":95,"defense":60,"specialAttack":65,"specialDefense":60,"speed":115},"forms":[]},{"name":"swanna","height":13,"weight":242,"base_stats":{"hp":75,"attack":87,"defense":63,"specialAttack":87,"specialDefense":63,"speed":98},"forms":[]},{"name":"ducklett","height":5,"weight":55,"base_stats":{"hp":62,"attack":44,"defense":50,"specialAttack":44,"specialDefense":50,"speed":55},"forms":[]},{"name":"sawsbuck","height":19,"weight":925,"base_stats":{"hp":80,"attack":100,"defense":70,"specialAttack":60,"specialDefense":70,"speed":95},"forms":[]},{"name":"vanillish","height":11,"weight":410,"base_stats":{"hp":51,"attack":65,"defense":65,"specialAttack":80,"specialDefense":75,"speed":59},"forms":[]},{"name":"trubbish","height":6,"weight":310,"base_stats":{"hp":50,"attack":50,"defense":62,"specialAttack":40,"specialDefense":62,"speed":65},"forms":[]},{"name":"vanillite","height":4,"weight":57,"base_stats":{"hp":36,"attack":50,"defense":50,"specialAttack":65,"specialDefense":60,"speed":44},"forms":[]},{"name":"amoonguss","height":6,"weight":105,"base_stats":{"hp":114,"attack":85,"defense":70,"specialAttack":85,"specialDefense":80,"speed":30},"forms":[]},{"name":"escavalier","height":10,"weight":330,"base_stats":{"hp":70,"attack":135,"defense":105,"specialAttack":60,"specialDefense":105,"speed":20},"forms":[]},{"name":"foongus","height":2,"weight":10,"base_stats":{"hp":69,"attack":55,"defense":45,"specialAttack":55,"specialDefense":55,"speed":15},"forms":[]},{"name":"vanilluxe","height":13,"weight":575,"base_stats":{"hp":71,"attack":95,"defense":85,"specialAttack":110,"specialDefense":95,"speed":79},"forms":[]},{"name":"karrablast","height":5,"weight":59,"base_stats":{"hp":50,"attack":75,"defense":45,"specialAttack":40,"specialDefense":45,"speed":60},"forms":[]},{"name":"deerling","height":6,"weight":195,"base_stats":{"hp":60,"attack":60,"defense":50,"specialAttack":40,"specialDefense":50,"speed":75},"forms":[]},{"name":"galvantula","height":8,"weight":143,"base_stats":{"hp":70,"attack":77,"defense":60,"specialAttack":97,"specialDefense":60,"speed":108},"forms":[]},{"name":"unfezant","height":12,"weight":290,"base_stats":{"hp":80,"attack":115,"defense":80,"specialAttack":65,"specialDefense":55,"speed":93},"forms":[]},{"name":"chandelure","height":10,"weight":343,"base_stats":{"hp":60,"attack":55,"defense":90,"specialAttack":145,"specialDefense":90,"speed":80},"forms":[]},{"name":"klinklang","height":6,"weight":810,"base_stats":{"hp":60,"attack":100,"defense":115,"specialAttack":70,"specialDefense":85,"speed":90},"forms":[]},{"name":"joltik","height":1,"weight":6,"base_stats":{"hp":50,"attack":47,"defense":50,"specialAttack":57,"specialDefense":50,"speed":65},"forms":[]},{"name":"eelektrik","height":12,"weight":220,"base_stats":{"hp":65,"attack":85,"defense":70,"specialAttack":75,"specialDefense":70,"speed":40},"forms":[]},{"name":"cryogonal","height":11,"weight":1480,"base_stats":{"hp":80,"attack":50,"defense":50,"specialAttack":95,"specialDefense":135,"speed":105},"forms":[]},{"name":"eelektross","height":21,"weight":805,"base_stats":{"hp":85,"attack":115,"defense":80,"specialAttack":105,"specialDefense":80,"speed":50},"forms":[]},{"name":"shelmet","height":4,"weight":77,"base_stats":{"hp":50,"attack":40,"defense":85,"specialAttack":40,"specialDefense":65,"speed":25},"forms":[]},{"name":"klang","height":6,"weight":510,"base_stats":{"hp":60,"attack":80,"defense":95,"specialAttack":70,"specialDefense":85,"speed":50},"forms":[]},{"name":"accelgor","height":8,"weight":253,"base_stats":{"hp":80,"attack":70,"defense":40,"specialAttack":100,"specialDefense":60,"speed":145},"forms":[]},{"name":"rufflet","height":5,"weight":105,"base_stats":{"hp":70,"attack":83,"defense":50,"specialAttack":37,"specialDefense":50,"speed":60},"forms":[]},{"name":"zweilous","height":14,"weight":500,"base_stats":{"hp":72,"attack":85,"defense":70,"specialAttack":65,"specialDefense":70,"speed":58},"forms":[]},{"name":"ferroseed","height":6,"weight":188,"base_stats":{"hp":44,"attack":50,"defense":91,"specialAttack":24,"specialDefense":86,"speed":10},"forms":[]},{"name":"larvesta","height":11,"weight":288,"base_stats":{"hp":55,"attack":85,"defense":55,"specialAttack":50,"specialDefense":55,"speed":60},"forms":[]},{"name":"keldeo","forms":[{"name":"keldeo-ordinary","height":14,"weight":485,"base_stats":{"hp":91,"attack":72,"defense":90,"specialAttack":129,"specialDefense":90,"speed":108},"forms":[]},{"name":"keldeo-resolute","height":14,"weight":485,"base_stats":{"hp":91,"attack":72,"defense":90,"specialAttack":129,"specialDefense":90,"speed":108},"forms":[]}]},{"name":"quilladin","height":7,"weight":290,"base_stats":{"hp":61,"attack":78,"defense":95,"specialAttack":56,"specialDefense":58,"speed":57},"forms":[]},{"name":"chesnaught","height":16,"weight":900,"base_stats":{"hp":88,"attack":107,"defense":122,"specialAttack":74,"specialDefense":75,"speed":64},"forms":[]},{"name":"diggersby","height":10,"weight":424,"base_stats":{"hp":85,"attack":56,"defense":77,"specialAttack":50,"specialDefense":77,"speed":78},"forms":[]},{"name":"chespin","height":4,"weight":90,"base_stats":{"hp":56,"attack":61,"defense":65,"specialAttack":48,"specialDefense":45,"speed":38},"forms":[]},{"name":"delphox","height":15,"weight":390,"base_stats":{"hp":75,"attack":69,"defense":72,"specialAttack":114,"specialDefense":100,"speed":104},"forms":[]},{"name":"pancham","height":6,"weight":80,"base_stats":{"hp":67,"attack":82,"defense":62,"specialAttack":46,"specialDefense":48,"speed":43},"forms":[]},{"name":"meowstic","forms":[{"name":"meowstic-male","height":6,"weight":85,"base_stats":{"hp":74,"attack":48,"defense":76,"specialAttack":83,"specialDefense":81,"speed":104},"forms":[]},{"name":"meowstic-female","height":6,"weight":85,"base_stats":{"hp":74,"attack":48,"defense":76,"specialAttack":83,"specialDefense":81,"speed":104},"forms":[]}]},{"name":"barbaracle","height":13,"weight":960,"base_stats":{"hp":72,"attack":105,"defense":115,"specialAttack":54,"specialDefense":86,"speed":68},"forms":[]},{"name":"binacle","height":5,"weight":310,"base_stats":{"hp":42,"attack":52,"defense":67,"specialAttack":39,"specialDefense":56,"speed":50},"forms":[]},{"name":"hawlucha","height":8,"weight":215,"base_stats":{"hp":78,"attack":92,"defense":75,"specialAttack":74,"specialDefense":63,"speed":118},"forms":[]},{"name":"aurorus","height":27,"weight":2250,"base_stats":{"hp":123,"attack":77,"defense":72,"specialAttack":99,"specialDefense":92,"speed":58},"forms":[]},{"name":"amaura","height":13,"weight":252,"base_stats":{"hp":77,"attack":59,"defense":50,"specialAttack":67,"specialDefense":63,"speed":46},"forms":[]},{"name":"hoopa","height":5,"weight":90,"base_stats":{"hp":80,"attack":110,"defense":60,"specialAttack":150,"specialDefense":130,"speed":70},"forms":[{"name":"hoopa-unbound","height":65,"weight":4900,"base_stats":{"hp":80,"attack":160,"defense":60,"specialAttack":170,"specialDefense":130,"speed":80},"forms":[]}]},{"name":"noivern","height":15,"weight":850,"base_stats":{"hp":85,"attack":70,"defense":80,"specialAttack":97,"specialDefense":80,"speed":123},"forms":[]},{"name":"charizard","height":17,"weight":905,"base_stats":{"hp":78,"attack":84,"defense":78,"specialAttack":109,"specialDefense":85,"speed":100},"forms":[{"name":"charizard-mega-x","height":17,"weight":1105,"base_stats":{"hp":78,"attack":130,"defense":111,"specialAttack":130,"specialDefense":85,"speed":100},"forms":[]},{"name":"charizard-mega-y","height":17,"weight":1005,"base_stats":{"hp":78,"attack":104,"defense":78,"specialAttack":159,"specialDefense":115,"speed":100},"forms":[]}]},{"name":"sceptile","height":17,"weight":522,"base_stats":{"hp":70,"attack":85,"defense":65,"specialAttack":105,"specialDefense":85,"speed":120},"forms":[{"name":"sceptile-mega","height":19,"weight":552,"base_stats":{"hp":70,"attack":110,"defense":75,"specialAttack":145,"specialDefense":85,"speed":145},"forms":[]}]},{"name":"manectric","height":15,"weight":402,"base_stats":{"hp":70,"attack":75,"defense":60,"specialAttack":105,"specialDefense":60,"speed":105},"forms":[{"name":"manectric-mega","height":18,"weight":440,"base_stats":{"hp":70,"attack":75,"defense":80,"specialAttack":135,"specialDefense":80,"speed":135},"forms":[]}]},{"name":"abomasnow","height":22,"weight":1355,"base_stats":{"hp":90,"attack":92,"defense":75,"specialAttack":92,"specialDefense":85,"speed":60},"forms":[{"name":"abomasnow-mega","height":27,"weight":1850,"base_stats":{"hp":90,"attack":132,"defense":105,"specialAttack":132,"specialDefense":105,"speed":30},"forms":[]}]},{"name":"garchomp","height":19,"weight":950,"base_stats":{"hp":108,"attack":130,"defense":95,"specialAttack":80,"specialDefense":85,"speed":102},"forms":[{"name":"garchomp-mega","height":19,"weight":950,"base_stats":{"hp":108,"attack":170,"defense":115,"specialAttack":120,"specialDefense":95,"speed":92},"forms":[]}]},{"name":"swampert","height":15,"weight":819,"base_stats":{"hp":100,"attack":110,"defense":90,"specialAttack":85,"specialDefense":90,"speed":60},"forms":[{"name":"swampert-mega","height":19,"weight":1020,"base_stats":{"hp":100,"attack":150,"defense":110,"specialAttack":95,"specialDefense":110,"speed":70},"forms":[]}]},{"name":"sableye","height":5,"weight":110,"base_stats":{"hp":50,"attack":75,"defense":75,"specialAttack":65,"specialDefense":65,"speed":50},"forms":[{"name":"sableye-mega","height":5,"weight":1610,"base_stats":{"hp":50,"attack":85,"defense":125,"specialAttack":85,"specialDefense":115,"speed":20},"forms":[]}]},{"name":"scizor","height":18,"weight":1180,"base_stats":{"hp":70,"attack":130,"defense":100,"specialAttack":55,"specialDefense":80,"speed":65},"forms":[{"name":"scizor-mega","height":20,"weight":1250,"base_stats":{"hp":70,"attack":150,"defense":140,"specialAttack":65,"specialDefense":100,"speed":75},"forms":[]}]},{"name":"houndoom","height":14,"weight":350,"base_stats":{"hp":75,"attack":90,"defense":50,"specialAttack":110,"specialDefense":80,"speed":95},"forms":[{"name":"houndoom-mega","height":19,"weight":495,"base_stats":{"hp":75,"attack":90,"defense":90,"specialAttack":140,"specialDefense":90,"speed":115},"forms":[]}]},{"name":"ampharos","height":14,"weight":615,"base_stats":{"hp":90,"attack":75,"defense":85,"specialAttack":115,"specialDefense":90,"speed":55},"forms":[{"name":"ampharos-mega","height":14,"weight":615,"base_stats":{"hp":90,"attack":95,"defense":105,"specialAttack":165,"specialDefense":110,"speed":45},"forms":[]}]},{"name":"banette","height":11,"weight":125,"base_stats":{"hp":64,"attack":115,"defense":65,"specialAttack":83,"specialDefense":63,"speed":65},"forms":[{"name":"banette-mega","height":12,"weight":130,"base_stats":{"hp":64,"attack":165,"defense":75,"specialAttack":93,"specialDefense":83,"speed":75},"forms":[]}]},{"name":"alakazam","height":15,"weight":480,"base_stats":{"hp":55,"attack":50,"defense":45,"specialAttack":135,"specialDefense":95,"speed":120},"forms":[{"name":"alakazam-mega","height":12,"weight":480,"base_stats":{"hp":55,"attack":50,"defense":65,"specialAttack":175,"specialDefense":105,"speed":150},"forms":[]}]},{"name":"audino","height":11,"weight":310,"base_stats":{"hp":103,"attack":60,"defense":86,"specialAttack":60,"specialDefense":86,"speed":50},"forms":[{"name":"audino-mega","height":15,"weight":320,"base_stats":{"hp":103,"attack":60,"defense":126,"specialAttack":80,"specialDefense":126,"speed":50},"forms":[]}]},{"name":"altaria","height":11,"weight":206,"base_stats":{"hp":75,"attack":70,"defense":90,"specialAttack":70,"specialDefense":105,"speed":80},"forms":[{"name":"altaria-mega","height":15,"weight":206,"base_stats":{"hp":75,"attack":110,"defense":110,"specialAttack":110,"specialDefense":105,"speed":80},"forms":[]}]},{"name":"slowbro","height":16,"weight":785,"base_stats":{"hp":95,"attack":75,"defense":110,"specialAttack":100,"specialDefense":80,"speed":30},"forms":[{"name":"slowbro-mega","height":20,"weight":1200,"base_stats":{"hp":95,"attack":75,"defense":180,"specialAttack":130,"specialDefense":80,"speed":30},"forms":[]}]},{"name":"steelix","height":92,"weight":4000,"base_stats":{"hp":75,"attack":85,"defense":200,"specialAttack":55,"specialDefense":65,"speed":30},"forms":[{"name":"steelix-mega","height":105,"weight":7400,"base_stats":{"hp":75,"attack":125,"defense":230,"specialAttack":55,"specialDefense":95,"speed":30},"forms":[]}]},{"name":"sharpedo","height":18,"weight":888,"base_stats":{"hp":70,"attack":120,"defense":40,"specialAttack":95,"specialDefense":40,"speed":95},"forms":[{"name":"sharpedo-mega","height":25,"weight":1303,"base_stats":{"hp":70,"attack":140,"defense":70,"specialAttack":110,"specialDefense":65,"speed":105},"forms":[]}]},{"name":"metagross","height":16,"weight":5500,"base_stats":{"hp":80,"attack":135,"defense":130,"specialAttack":95,"specialDefense":90,"speed":70},"forms":[{"name":"metagross-mega","height":25,"weight":9429,"base_stats":{"hp":80,"attack":145,"defense":150,"specialAttack":105,"specialDefense":110,"speed":110},"forms":[]}]},{"name":"groudon","height":35,"weight":9500,"base_stats":{"hp":100,"attack":150,"defense":140,"specialAttack":100,"specialDefense":90,"speed":90},"forms":[{"name":"groudon-primal","height":50,"weight":9997,"base_stats":{"hp":100,"attack":180,"defense":160,"specialAttack":150,"specialDefense":90,"speed":90},"forms":[]}]},{"name":"rayquaza","height":70,"weight":2065,"base_stats":{"hp":105,"attack":150,"defense":90,"specialAttack":150,"specialDefense":90,"speed":95},"forms":[{"name":"rayquaza-mega","height":108,"weight":3920,"base_stats":{"hp":105,"attack":180,"defense":100,"specialAttack":180,"specialDefense":100,"speed":115},"forms":[]}]},{"name":"lopunny","height":12,"weight":333,"base_stats":{"hp":65,"attack":76,"defense":84,"specialAttack":54,"specialDefense":96,"speed":105},"forms":[{"name":"lopunny-mega","height":13,"weight":283,"base_stats":{"hp":65,"attack":136,"defense":94,"specialAttack":54,"specialDefense":96,"speed":135},"forms":[]}]},{"name":"salamence","height":15,"weight":1026,"base_stats":{"hp":95,"attack":135,"defense":80,"specialAttack":110,"specialDefense":80,"speed":100},"forms":[{"name":"salamence-mega","height":18,"weight":1126,"base_stats":{"hp":95,"attack":145,"defense":130,"specialAttack":120,"specialDefense":90,"speed":120},"forms":[]}]},{"name":"heracross","height":15,"weight":540,"base_stats":{"hp":80,"attack":125,"defense":75,"specialAttack":40,"specialDefense":95,"speed":85},"forms":[{"name":"heracross-mega","height":17,"weight":625,"base_stats":{"hp":80,"attack":185,"defense":115,"specialAttack":40,"specialDefense":105,"speed":75},"forms":[]}]},{"name":"staravia","height":6,"weight":155,"base_stats":{"hp":55,"attack":75,"defense":50,"specialAttack":40,"specialDefense":40,"speed":80},"forms":[]},{"name":"luxio","height":9,"weight":305,"base_stats":{"hp":60,"attack":85,"defense":49,"specialAttack":60,"specialDefense":49,"speed":60},"forms":[]},{"name":"roserade","height":9,"weight":145,"base_stats":{"hp":60,"attack":70,"defense":65,"specialAttack":125,"specialDefense":105,"speed":90},"forms":[]},{"name":"cherrim","height":5,"weight":93,"base_stats":{"hp":70,"attack":60,"defense":70,"specialAttack":87,"specialDefense":78,"speed":85},"forms":[]},{"name":"snivy","height":6,"weight":81,"base_stats":{"hp":45,"attack":45,"defense":55,"specialAttack":45,"specialDefense":55,"speed":63},"forms":[]},{"name":"oshawott","height":5,"weight":59,"base_stats":{"hp":55,"attack":55,"defense":45,"specialAttack":63,"specialDefense":45,"speed":45},"forms":[]},{"name":"serperior","height":33,"weight":630,"base_stats":{"hp":75,"attack":75,"defense":95,"specialAttack":75,"specialDefense":95,"speed":113},"forms":[]},{"name":"lillipup","height":4,"weight":41,"base_stats":{"hp":45,"attack":60,"defense":45,"specialAttack":25,"specialDefense":45,"speed":55},"forms":[]},{"name":"conkeldurr","height":14,"weight":870,"base_stats":{"hp":105,"attack":140,"defense":95,"specialAttack":55,"specialDefense":65,"speed":45},"forms":[]},{"name":"sawk","height":14,"weight":510,"base_stats":{"hp":75,"attack":125,"defense":75,"specialAttack":30,"specialDefense":75,"speed":85},"forms":[]},{"name":"cofagrigus","height":17,"weight":765,"base_stats":{"hp":58,"attack":50,"defense":145,"specialAttack":95,"specialDefense":105,"speed":30},"forms":[]},{"name":"crustle","height":14,"weight":2000,"base_stats":{"hp":70,"attack":105,"defense":125,"specialAttack":65,"specialDefense":75,"speed":45},"forms":[]},{"name":"garbodor","height":19,"weight":1073,"base_stats":{"hp":80,"attack":95,"defense":82,"specialAttack":60,"specialDefense":82,"speed":75},"forms":[]},{"name":"excadrill","height":7,"weight":404,"base_stats":{"hp":110,"attack":135,"defense":60,"specialAttack":50,"specialDefense":65,"speed":88},"forms":[]},{"name":"emolga","height":4,"weight":50,"base_stats":{"hp":55,"attack":75,"defense":60,"specialAttack":75,"specialDefense":60,"speed":103},"forms":[]},{"name":"carracosta","height":12,"weight":810,"base_stats":{"hp":74,"attack":108,"defense":133,"specialAttack":83,"specialDefense":65,"speed":32},"forms":[]},{"name":"jellicent","height":22,"weight":1350,"base_stats":{"hp":100,"attack":60,"defense":70,"specialAttack":85,"specialDefense":105,"speed":60},"forms":[]},{"name":"alomomola","height":12,"weight":316,"base_stats":{"hp":165,"attack":75,"defense":80,"specialAttack":40,"specialDefense":45,"speed":65},"forms":[]},{"name":"lampent","height":6,"weight":130,"base_stats":{"hp":60,"attack":40,"defense":60,"specialAttack":95,"specialDefense":60,"speed":55},"forms":[]},{"name":"fraxure","height":10,"weight":360,"base_stats":{"hp":66,"attack":117,"defense":70,"specialAttack":40,"specialDefense":50,"speed":67},"forms":[]},{"name":"golett","height":10,"weight":920,"base_stats":{"hp":59,"attack":74,"defense":50,"specialAttack":35,"specialDefense":50,"speed":35},"forms":[]},{"name":"durant","height":3,"weight":330,"base_stats":{"hp":58,"attack":109,"defense":112,"specialAttack":48,"specialDefense":48,"speed":109},"forms":[]},{"name":"bouffalant","height":16,"weight":946,"base_stats":{"hp":95,"attack":110,"defense":95,"specialAttack":40,"specialDefense":95,"speed":55},"forms":[]},{"name":"mandibuzz","height":12,"weight":395,"base_stats":{"hp":110,"attack":65,"defense":105,"specialAttack":55,"specialDefense":95,"speed":80},"forms":[]},{"name":"terrakion","height":19,"weight":2600,"base_stats":{"hp":91,"attack":129,"defense":90,"specialAttack":72,"specialDefense":90,"speed":108},"forms":[]},{"name":"deino","height":8,"weight":173,"base_stats":{"hp":52,"attack":65,"defense":50,"specialAttack":45,"specialDefense":50,"speed":38},"forms":[]},{"name":"braviary","height":15,"weight":410,"base_stats":{"hp":100,"attack":123,"defense":75,"specialAttack":57,"specialDefense":75,"speed":80},"forms":[]},{"name":"tornadus","forms":[{"name":"tornadus-incarnate","height":15,"weight":630,"base_stats":{"hp":79,"attack":115,"defense":70,"specialAttack":125,"specialDefense":80,"speed":111},"forms":[]},{"name":"tornadus-therian","height":14,"weight":630,"base_stats":{"hp":79,"attack":100,"defense":80,"specialAttack":110,"specialDefense":90,"speed":121},"forms":[]}]},{"name":"cobalion","height":21,"weight":2500,"base_stats":{"hp":91,"attack":90,"defense":129,"specialAttack":90,"specialDefense":72,"speed":108},"forms":[]},{"name":"kyurem","height":30,"weight":3250,"base_stats":{"hp":125,"attack":130,"defense":90,"specialAttack":130,"specialDefense":90,"speed":95},"forms":[{"name":"kyurem-black","height":33,"weight":3250,"base_stats":{"hp":125,"attack":170,"defense":100,"specialAttack":120,"specialDefense":90,"speed":95},"forms":[]},{"name":"kyurem-white","height":36,"weight":3250,"base_stats":{"hp":125,"attack":120,"defense":90,"specialAttack":170,"specialDefense":100,"speed":95},"forms":[]}]},{"name":"virizion","height":20,"weight":2000,"base_stats":{"hp":91,"attack":90,"defense":72,"specialAttack":90,"specialDefense":129,"speed":108},"forms":[]},{"name":"shaymin","forms":[{"name":"shaymin-sky","height":4,"weight":52,"base_stats":{"hp":100,"attack":103,"defense":75,"specialAttack":120,"specialDefense":75,"speed":127},"forms":[]},{"name":"shaymin-land","height":2,"weight":21,"base_stats":{"hp":100,"attack":100,"defense":100,"specialAttack":100,"specialDefense":100,"speed":100},"forms":[]}]},{"name":"phione","height":4,"weight":31,"base_stats":{"hp":80,"attack":80,"defense":80,"specialAttack":80,"specialDefense":80,"speed":80},"forms":[]},{"name":"medicham","height":13,"weight":315,"base_stats":{"hp":60,"attack":60,"defense":75,"specialAttack":60,"specialDefense":75,"speed":80},"forms":[{"name":"medicham-mega","height":13,"weight":315,"base_stats":{"hp":60,"attack":100,"defense":85,"specialAttack":80,"specialDefense":85,"speed":100},"forms":[]}]},{"name":"tyranitar","height":20,"weight":2020,"base_stats":{"hp":100,"attack":134,"defense":110,"specialAttack":95,"specialDefense":100,"speed":61},"forms":[{"name":"tyranitar-mega","height":25,"weight":2550,"base_stats":{"hp":100,"attack":164,"defense":150,"specialAttack":95,"specialDefense":120,"speed":71},"forms":[]}]},{"name":"mawile","height":6,"weight":115,"base_stats":{"hp":50,"attack":85,"defense":85,"specialAttack":55,"specialDefense":55,"speed":50},"forms":[{"name":"mawile-mega","height":10,"weight":235,"base_stats":{"hp":50,"attack":105,"defense":125,"specialAttack":55,"specialDefense":95,"speed":50},"forms":[]}]},{"name":"latias","height":14,"weight":400,"base_stats":{"hp":80,"attack":80,"defense":90,"specialAttack":110,"specialDefense":130,"speed":110},"forms":[{"name":"latias-mega","height":18,"weight":520,"base_stats":{"hp":80,"attack":100,"defense":120,"specialAttack":140,"specialDefense":150,"speed":110},"forms":[]}]},{"name":"latios","height":20,"weight":600,"base_stats":{"hp":80,"attack":90,"defense":80,"specialAttack":130,"specialDefense":110,"speed":110},"forms":[{"name":"latios-mega","height":23,"weight":700,"base_stats":{"hp":80,"attack":130,"defense":100,"specialAttack":160,"specialDefense":120,"speed":110},"forms":[]}]},{"name":"aggron","height":21,"weight":3600,"base_stats":{"hp":70,"attack":110,"defense":180,"specialAttack":60,"specialDefense":60,"speed":50},"forms":[{"name":"aggron-mega","height":22,"weight":3950,"base_stats":{"hp":70,"attack":140,"defense":230,"specialAttack":60,"specialDefense":80,"speed":50},"forms":[]}]},{"name":"blaziken","height":19,"weight":520,"base_stats":{"hp":80,"attack":120,"defense":70,"specialAttack":110,"specialDefense":70,"speed":80},"forms":[{"name":"blaziken-mega","height":19,"weight":520,"base_stats":{"hp":80,"attack":160,"defense":80,"specialAttack":130,"specialDefense":80,"speed":100},"forms":[]}]},{"name":"lucario","height":12,"weight":540,"base_stats":{"hp":70,"attack":110,"defense":70,"specialAttack":115,"specialDefense":70,"speed":90},"forms":[{"name":"lucario-mega","height":13,"weight":575,"base_stats":{"hp":70,"attack":145,"defense":88,"specialAttack":140,"specialDefense":70,"speed":112},"forms":[]}]},{"name":"landorus","forms":[{"name":"landorus-therian","height":13,"weight":680,"base_stats":{"hp":89,"attack":145,"defense":90,"specialAttack":105,"specialDefense":80,"speed":91},"forms":[]},{"name":"landorus-incarnate","height":15,"weight":680,"base_stats":{"hp":89,"attack":125,"defense":90,"specialAttack":115,"specialDefense":80,"speed":101},"forms":[]}]},{"name":"gardevoir","height":16,"weight":484,"base_stats":{"hp":68,"attack":65,"defense":65,"specialAttack":125,"specialDefense":115,"speed":80},"forms":[{"name":"gardevoir-mega","height":16,"weight":484,"base_stats":{"hp":68,"attack":85,"defense":65,"specialAttack":165,"specialDefense":135,"speed":100},"forms":[]}]},{"name":"gengar","height":15,"weight":405,"base_stats":{"hp":60,"attack":65,"defense":60,"specialAttack":130,"specialDefense":75,"speed":110},"forms":[{"name":"gengar-mega","height":14,"weight":405,"base_stats":{"hp":60,"attack":65,"defense":80,"specialAttack":170,"specialDefense":95,"speed":130},"forms":[]}]},{"name":"aerodactyl","height":18,"weight":590,"base_stats":{"hp":80,"attack":105,"defense":65,"specialAttack":60,"specialDefense":75,"speed":130},"forms":[{"name":"aerodactyl-mega","height":21,"weight":790,"base_stats":{"hp":80,"attack":135,"defense":85,"specialAttack":70,"specialDefense":95,"speed":150},"forms":[]}]},{"name":"kangaskhan","height":22,"weight":800,"base_stats":{"hp":105,"attack":95,"defense":80,"specialAttack":40,"specialDefense":80,"speed":90},"forms":[{"name":"kangaskhan-mega","height":22,"weight":1000,"base_stats":{"hp":105,"attack":125,"defense":100,"specialAttack":60,"specialDefense":100,"speed":100},"forms":[]}]},{"name":"grotle","height":11,"weight":970,"base_stats":{"hp":75,"attack":89,"defense":85,"specialAttack":55,"specialDefense":65,"speed":36},"forms":[]},{"name":"staraptor","height":12,"weight":249,"base_stats":{"hp":85,"attack":120,"defense":70,"specialAttack":50,"specialDefense":60,"speed":100},"forms":[]},{"name":"kricketune","height":10,"weight":255,"base_stats":{"hp":77,"attack":85,"defense":51,"specialAttack":55,"specialDefense":51,"speed":65},"forms":[]},{"name":"luxray","height":14,"weight":420,"base_stats":{"hp":80,"attack":120,"defense":79,"specialAttack":95,"specialDefense":79,"speed":70},"forms":[]},{"name":"budew","height":2,"weight":12,"base_stats":{"hp":40,"attack":30,"defense":35,"specialAttack":50,"specialDefense":70,"speed":55},"forms":[]},{"name":"wormadam","forms":[{"name":"wormadam-plant","height":5,"weight":65,"base_stats":{"hp":60,"attack":59,"defense":85,"specialAttack":79,"specialDefense":105,"speed":36},"forms":[]},{"name":"wormadam-trash","height":5,"weight":65,"base_stats":{"hp":60,"attack":69,"defense":95,"specialAttack":69,"specialDefense":95,"speed":36},"forms":[]},{"name":"wormadam-sandy","height":5,"weight":65,"base_stats":{"hp":60,"attack":79,"defense":105,"specialAttack":59,"specialDefense":85,"speed":36},"forms":[]}]},{"name":"mothim","height":9,"weight":233,"base_stats":{"hp":70,"attack":94,"defense":50,"specialAttack":94,"specialDefense":50,"speed":66},"forms":[]},{"name":"cherubi","height":4,"weight":33,"base_stats":{"hp":45,"attack":35,"defense":45,"specialAttack":62,"specialDefense":53,"speed":35},"forms":[]},{"name":"shellos","height":3,"weight":63,"base_stats":{"hp":76,"attack":48,"defense":48,"specialAttack":57,"specialDefense":62,"speed":34},"forms":[]},{"name":"gastrodon","height":9,"weight":299,"base_stats":{"hp":111,"attack":83,"defense":68,"specialAttack":92,"specialDefense":82,"speed":39},"forms":[]},{"name":"honchkrow","height":9,"weight":273,"base_stats":{"hp":100,"attack":125,"defense":52,"specialAttack":105,"specialDefense":52,"speed":71},"forms":[]},{"name":"starly","height":3,"weight":20,"base_stats":{"hp":40,"attack":55,"defense":30,"specialAttack":30,"specialDefense":30,"speed":60},"forms":[]},{"name":"pignite","height":10,"weight":555,"base_stats":{"hp":90,"attack":93,"defense":55,"specialAttack":70,"specialDefense":55,"speed":55},"forms":[]},{"name":"watchog","height":11,"weight":270,"base_stats":{"hp":60,"attack":85,"defense":69,"specialAttack":60,"specialDefense":69,"speed":77},"forms":[]},{"name":"samurott","height":15,"weight":946,"base_stats":{"hp":95,"attack":100,"defense":85,"specialAttack":108,"specialDefense":70,"speed":70},"forms":[]},{"name":"purrloin","height":4,"weight":101,"base_stats":{"hp":41,"attack":50,"defense":37,"specialAttack":50,"specialDefense":37,"speed":66},"forms":[]},{"name":"pansage","height":6,"weight":105,"base_stats":{"hp":50,"attack":53,"defense":48,"specialAttack":53,"specialDefense":48,"speed":64},"forms":[]},{"name":"munna","height":6,"weight":233,"base_stats":{"hp":76,"attack":25,"defense":45,"specialAttack":67,"specialDefense":55,"speed":24},"forms":[]},{"name":"liepard","height":11,"weight":375,"base_stats":{"hp":64,"attack":88,"defense":50,"specialAttack":88,"specialDefense":50,"speed":106},"forms":[]},{"name":"seismitoad","height":15,"weight":620,"base_stats":{"hp":105,"attack":95,"defense":75,"specialAttack":85,"specialDefense":75,"speed":74},"forms":[]},{"name":"throh","height":13,"weight":555,"base_stats":{"hp":120,"attack":100,"defense":85,"specialAttack":30,"specialDefense":85,"speed":45},"forms":[]},{"name":"swoobat","height":9,"weight":105,"base_stats":{"hp":67,"attack":57,"defense":55,"specialAttack":77,"specialDefense":55,"speed":114},"forms":[]},{"name":"timburr","height":6,"weight":125,"base_stats":{"hp":75,"attack":80,"defense":55,"specialAttack":25,"specialDefense":35,"speed":35},"forms":[]},{"name":"leavanny","height":12,"weight":205,"base_stats":{"hp":75,"attack":103,"defense":80,"specialAttack":70,"specialDefense":80,"speed":92},"forms":[]},{"name":"scolipede","height":25,"weight":2005,"base_stats":{"hp":60,"attack":100,"defense":89,"specialAttack":55,"specialDefense":69,"speed":112},"forms":[]},{"name":"dwebble","height":3,"weight":145,"base_stats":{"hp":50,"attack":65,"defense":85,"specialAttack":35,"specialDefense":35,"speed":55},"forms":[]},{"name":"maractus","height":10,"weight":280,"base_stats":{"hp":75,"attack":86,"defense":67,"specialAttack":106,"specialDefense":67,"speed":60},"forms":[]},{"name":"yamask","height":5,"weight":15,"base_stats":{"hp":38,"attack":30,"defense":85,"specialAttack":55,"specialDefense":65,"speed":30},"forms":[]},{"name":"darumaka","height":6,"weight":375,"base_stats":{"hp":70,"attack":90,"defense":45,"specialAttack":15,"specialDefense":45,"speed":50},"forms":[]},{"name":"krokorok","height":10,"weight":334,"base_stats":{"hp":60,"attack":82,"defense":45,"specialAttack":45,"specialDefense":45,"speed":74},"forms":[]},{"name":"tirtouga","height":7,"weight":165,"base_stats":{"hp":54,"attack":78,"defense":103,"specialAttack":53,"specialDefense":45,"speed":22},"forms":[]},{"name":"sandile","height":7,"weight":152,"base_stats":{"hp":50,"attack":72,"defense":35,"specialAttack":35,"specialDefense":35,"speed":65},"forms":[]},{"name":"archeops","height":14,"weight":320,"base_stats":{"hp":75,"attack":140,"defense":65,"specialAttack":112,"specialDefense":65,"speed":110},"forms":[]},{"name":"archen","height":5,"weight":95,"base_stats":{"hp":55,"attack":112,"defense":45,"specialAttack":74,"specialDefense":45,"speed":70},"forms":[]},{"name":"minccino","height":4,"weight":58,"base_stats":{"hp":55,"attack":50,"defense":40,"specialAttack":40,"specialDefense":40,"speed":75},"forms":[]},{"name":"zorua","height":7,"weight":125,"base_stats":{"hp":40,"attack":65,"defense":40,"specialAttack":80,"specialDefense":40,"speed":65},"forms":[]},{"name":"zoroark","height":16,"weight":811,"base_stats":{"hp":60,"attack":105,"defense":60,"specialAttack":120,"specialDefense":60,"speed":105},"forms":[]},{"name":"solosis","height":3,"weight":10,"base_stats":{"hp":45,"attack":30,"defense":40,"specialAttack":105,"specialDefense":50,"speed":20},"forms":[]},{"name":"gothorita","height":7,"weight":180,"base_stats":{"hp":60,"attack":45,"defense":70,"specialAttack":75,"specialDefense":85,"speed":55},"forms":[]},{"name":"duosion","height":6,"weight":80,"base_stats":{"hp":65,"attack":40,"defense":50,"specialAttack":125,"specialDefense":60,"speed":30},"forms":[]},{"name":"frillish","height":12,"weight":330,"base_stats":{"hp":55,"attack":40,"defense":50,"specialAttack":65,"specialDefense":85,"speed":40},"forms":[]},{"name":"ferrothorn","height":10,"weight":1100,"base_stats":{"hp":74,"attack":94,"defense":131,"specialAttack":54,"specialDefense":116,"speed":20},"forms":[]},{"name":"litwick","height":3,"weight":31,"base_stats":{"hp":50,"attack":30,"defense":55,"specialAttack":65,"specialDefense":55,"speed":20},"forms":[]},{"name":"tepig","height":5,"weight":99,"base_stats":{"hp":65,"attack":63,"defense":45,"specialAttack":45,"specialDefense":45,"speed":45},"forms":[]},{"name":"beheeyem","height":10,"weight":345,"base_stats":{"hp":75,"attack":75,"defense":75,"specialAttack":125,"specialDefense":95,"speed":40},"forms":[]},{"name":"axew","height":6,"weight":180,"base_stats":{"hp":46,"attack":87,"defense":60,"specialAttack":30,"specialDefense":40,"speed":57},"forms":[]},{"name":"beartic","height":26,"weight":2600,"base_stats":{"hp":95,"attack":130,"defense":80,"specialAttack":70,"specialDefense":80,"speed":50},"forms":[]},{"name":"mienshao","height":14,"weight":355,"base_stats":{"hp":65,"attack":125,"defense":60,"specialAttack":95,"specialDefense":60,"speed":105},"forms":[]},{"name":"haxorus","height":18,"weight":1055,"base_stats":{"hp":76,"attack":147,"defense":90,"specialAttack":60,"specialDefense":70,"speed":97},"forms":[]},{"name":"cubchoo","height":5,"weight":85,"base_stats":{"hp":55,"attack":70,"defense":40,"specialAttack":60,"specialDefense":40,"speed":40},"forms":[]},{"name":"stunfisk","height":7,"weight":110,"base_stats":{"hp":109,"attack":66,"defense":84,"specialAttack":81,"specialDefense":99,"speed":32},"forms":[]},{"name":"mienfoo","height":9,"weight":200,"base_stats":{"hp":45,"attack":85,"defense":50,"specialAttack":55,"specialDefense":50,"speed":65},"forms":[]},{"name":"heatmor","height":14,"weight":580,"base_stats":{"hp":85,"attack":97,"defense":66,"specialAttack":105,"specialDefense":66,"speed":65},"forms":[]},{"name":"vullaby","height":5,"weight":90,"base_stats":{"hp":70,"attack":55,"defense":75,"specialAttack":45,"specialDefense":65,"speed":60},"forms":[]},{"name":"volcarona","height":16,"weight":460,"base_stats":{"hp":85,"attack":60,"defense":65,"specialAttack":135,"specialDefense":105,"speed":100},"forms":[]},{"name":"zekrom","height":29,"weight":3450,"base_stats":{"hp":100,"attack":150,"defense":120,"specialAttack":120,"specialDefense":100,"speed":90},"forms":[]},{"name":"thundurus","forms":[{"name":"thundurus-incarnate","height":15,"weight":610,"base_stats":{"hp":79,"attack":115,"defense":70,"specialAttack":125,"specialDefense":80,"speed":111},"forms":[]},{"name":"thundurus-therian","height":30,"weight":610,"base_stats":{"hp":79,"attack":105,"defense":70,"specialAttack":145,"specialDefense":80,"speed":101},"forms":[]}]},{"name":"reshiram","height":32,"weight":3300,"base_stats":{"hp":100,"attack":120,"defense":100,"specialAttack":150,"specialDefense":120,"speed":90},"forms":[]},{"name":"genesect","height":15,"weight":825,"base_stats":{"hp":71,"attack":120,"defense":95,"specialAttack":120,"specialDefense":95,"speed":99},"forms":[]},{"name":"pangoro","height":21,"weight":1360,"base_stats":{"hp":95,"attack":124,"defense":78,"specialAttack":69,"specialDefense":71,"speed":58},"forms":[]},{"name":"rotom","height":3,"weight":3,"base_stats":{"hp":50,"attack":50,"defense":77,"specialAttack":95,"specialDefense":77,"speed":91},"forms":[{"name":"rotom-heat","height":3,"weight":3,"base_stats":{"hp":50,"attack":65,"defense":107,"specialAttack":105,"specialDefense":107,"speed":86},"forms":[]},{"name":"rotom-wash","height":3,"weight":3,"base_stats":{"hp":50,"attack":65,"defense":107,"specialAttack":105,"specialDefense":107,"speed":86},"forms":[]},{"name":"rotom-frost","height":3,"weight":3,"base_stats":{"hp":50,"attack":65,"defense":107,"specialAttack":105,"specialDefense":107,"speed":86},"forms":[]},{"name":"rotom-fan","height":3,"weight":3,"base_stats":{"hp":50,"attack":65,"defense":107,"specialAttack":105,"specialDefense":107,"speed":86},"forms":[]},{"name":"rotom-mow","height":3,"weight":3,"base_stats":{"hp":50,"attack":65,"defense":107,"specialAttack":105,"specialDefense":107,"speed":86},"forms":[]}]},{"name":"gallade","height":16,"weight":520,"base_stats":{"hp":68,"attack":125,"defense":65,"specialAttack":65,"specialDefense":115,"speed":80},"forms":[{"name":"gallade-mega","height":16,"weight":564,"base_stats":{"hp":68,"attack":165,"defense":95,"specialAttack":65,"specialDefense":115,"speed":110},"forms":[]}]},{"name":"feebas","height":6,"weight":74,"base_stats":{"hp":20,"attack":15,"defense":20,"specialAttack":10,"specialDefense":55,"speed":80},"forms":[]},{"name":"clamperl","height":4,"weight":525,"base_stats":{"hp":35,"attack":64,"defense":85,"specialAttack":74,"specialDefense":55,"speed":32},"forms":[]},{"name":"prinplup","height":8,"weight":230,"base_stats":{"hp":64,"attack":66,"defense":68,"specialAttack":81,"specialDefense":76,"speed":50},"forms":[]},{"name":"piplup","height":4,"weight":52,"base_stats":{"hp":53,"attack":51,"defense":53,"specialAttack":61,"specialDefense":56,"speed":40},"forms":[]},{"name":"shinx","height":5,"weight":95,"base_stats":{"hp":45,"attack":65,"defense":34,"specialAttack":40,"specialDefense":34,"speed":45},"forms":[]},{"name":"bastiodon","height":13,"weight":1495,"base_stats":{"hp":60,"attack":52,"defense":168,"specialAttack":47,"specialDefense":138,"speed":30},"forms":[]},{"name":"pachirisu","height":4,"weight":39,"base_stats":{"hp":60,"attack":45,"defense":70,"specialAttack":45,"specialDefense":90,"speed":95},"forms":[]},{"name":"vespiquen","height":12,"weight":385,"base_stats":{"hp":70,"attack":80,"defense":102,"specialAttack":80,"specialDefense":102,"speed":40},"forms":[]},{"name":"buizel","height":7,"weight":295,"base_stats":{"hp":55,"attack":65,"defense":35,"specialAttack":60,"specialDefense":30,"speed":85},"forms":[]},{"name":"floatzel","height":11,"weight":335,"base_stats":{"hp":85,"attack":105,"defense":55,"specialAttack":85,"specialDefense":50,"speed":115},"forms":[]},{"name":"mismagius","height":9,"weight":44,"base_stats":{"hp":60,"attack":60,"defense":60,"specialAttack":105,"specialDefense":105,"speed":105},"forms":[]},{"name":"victini","height":4,"weight":40,"base_stats":{"hp":100,"attack":100,"defense":100,"specialAttack":100,"specialDefense":100,"speed":100},"forms":[]},{"name":"emboar","height":16,"weight":1500,"base_stats":{"hp":110,"attack":123,"defense":65,"specialAttack":100,"specialDefense":65,"speed":65},"forms":[]},{"name":"pansear","height":6,"weight":110,"base_stats":{"hp":50,"attack":53,"defense":48,"specialAttack":53,"specialDefense":48,"speed":64},"forms":[]},{"name":"panpour","height":6,"weight":135,"base_stats":{"hp":50,"attack":53,"defense":48,"specialAttack":53,"specialDefense":48,"speed":64},"forms":[]},{"name":"turtwig","height":4,"weight":102,"base_stats":{"hp":55,"attack":68,"defense":64,"specialAttack":45,"specialDefense":55,"speed":31},"forms":[]},{"name":"woobat","height":4,"weight":21,"base_stats":{"hp":65,"attack":45,"defense":43,"specialAttack":55,"specialDefense":43,"speed":72},"forms":[]},{"name":"darmanitan","forms":[{"name":"darmanitan-standard","height":13,"weight":929,"base_stats":{"hp":105,"attack":140,"defense":55,"specialAttack":30,"specialDefense":55,"speed":95},"forms":[]},{"name":"darmanitan-zen","height":13,"weight":929,"base_stats":{"hp":105,"attack":30,"defense":105,"specialAttack":140,"specialDefense":105,"speed":55},"forms":[]}]},{"name":"krookodile","height":15,"weight":963,"base_stats":{"hp":95,"attack":117,"defense":80,"specialAttack":65,"specialDefense":70,"speed":92},"forms":[]},{"name":"scrafty","height":11,"weight":300,"base_stats":{"hp":65,"attack":90,"defense":115,"specialAttack":45,"specialDefense":115,"speed":58},"forms":[]},{"name":"sigilyph","height":14,"weight":140,"base_stats":{"hp":72,"attack":58,"defense":80,"specialAttack":103,"specialDefense":80,"speed":97},"forms":[]},{"name":"scraggy","height":6,"weight":118,"base_stats":{"hp":50,"attack":75,"defense":70,"specialAttack":35,"specialDefense":70,"speed":48},"forms":[]},{"name":"gothitelle","height":15,"weight":440,"base_stats":{"hp":70,"attack":55,"defense":95,"specialAttack":95,"specialDefense":110,"speed":65},"forms":[]},{"name":"reuniclus","height":10,"weight":201,"base_stats":{"hp":110,"attack":65,"defense":75,"specialAttack":125,"specialDefense":85,"speed":30},"forms":[]},{"name":"gothita","height":4,"weight":58,"base_stats":{"hp":45,"attack":30,"defense":50,"specialAttack":55,"specialDefense":65,"speed":45},"forms":[]},{"name":"elgyem","height":5,"weight":90,"base_stats":{"hp":55,"attack":55,"defense":55,"specialAttack":85,"specialDefense":55,"speed":30},"forms":[]},{"name":"golurk","height":28,"weight":3300,"base_stats":{"hp":89,"attack":124,"defense":80,"specialAttack":55,"specialDefense":80,"speed":55},"forms":[]},{"name":"pawniard","height":5,"weight":102,"base_stats":{"hp":45,"attack":85,"defense":70,"specialAttack":40,"specialDefense":40,"speed":60},"forms":[]},{"name":"druddigon","height":16,"weight":1390,"base_stats":{"hp":77,"attack":120,"defense":90,"specialAttack":60,"specialDefense":90,"speed":48},"forms":[]},{"name":"bisharp","height":16,"weight":700,"base_stats":{"hp":65,"attack":125,"defense":100,"specialAttack":60,"specialDefense":70,"speed":70},"forms":[]},{"name":"hydreigon","height":18,"weight":1600,"base_stats":{"hp":92,"attack":105,"defense":90,"specialAttack":125,"specialDefense":90,"speed":98},"forms":[]},{"name":"meloetta","forms":[{"name":"meloetta-aria","height":6,"weight":65,"base_stats":{"hp":100,"attack":77,"defense":77,"specialAttack":128,"specialDefense":128,"speed":90},"forms":[]},{"name":"meloetta-pirouette","height":6,"weight":65,"base_stats":{"hp":100,"attack":128,"defense":90,"specialAttack":77,"specialDefense":77,"speed":128},"forms":[]}]},{"name":"bonsly","height":5,"weight":150,"base_stats":{"hp":50,"attack":80,"defense":95,"specialAttack":10,"specialDefense":45,"speed":10},"forms":[]},{"name":"gabite","height":14,"weight":560,"base_stats":{"hp":68,"attack":90,"defense":65,"specialAttack":50,"specialDefense":55,"speed":82},"forms":[]},{"name":"hippopotas","height":8,"weight":495,"base_stats":{"hp":68,"attack":72,"defense":78,"specialAttack":38,"specialDefense":42,"speed":32},"forms":[]},{"name":"hippowdon","height":20,"weight":3000,"base_stats":{"hp":108,"attack":112,"defense":118,"specialAttack":68,"specialDefense":72,"speed":47},"forms":[]},{"name":"lumineon","height":12,"weight":240,"base_stats":{"hp":69,"attack":69,"defense":76,"specialAttack":69,"specialDefense":86,"speed":91},"forms":[]},{"name":"glaceon","height":8,"weight":259,"base_stats":{"hp":65,"attack":60,"defense":110,"specialAttack":130,"specialDefense":95,"speed":65},"forms":[]},{"name":"leafeon","height":10,"weight":255,"base_stats":{"hp":65,"attack":110,"defense":130,"specialAttack":60,"specialDefense":65,"speed":95},"forms":[]},{"name":"absol","height":12,"weight":470,"base_stats":{"hp":65,"attack":130,"defense":60,"specialAttack":75,"specialDefense":60,"speed":75},"forms":[{"name":"absol-mega","height":12,"weight":490,"base_stats":{"hp":65,"attack":150,"defense":60,"specialAttack":115,"specialDefense":60,"speed":115},"forms":[]}]},{"name":"mewtwo","height":20,"weight":1220,"base_stats":{"hp":106,"attack":110,"defense":90,"specialAttack":154,"specialDefense":90,"speed":130},"forms":[{"name":"mewtwo-mega-y","height":15,"weight":330,"base_stats":{"hp":106,"attack":150,"defense":70,"specialAttack":194,"specialDefense":120,"speed":140},"forms":[]},{"name":"mewtwo-mega-x","height":23,"weight":1270,"base_stats":{"hp":106,"attack":190,"defense":100,"specialAttack":154,"specialDefense":100,"speed":130},"forms":[]}]},{"name":"vileplume","height":12,"weight":186,"base_stats":{"hp":75,"attack":80,"defense":85,"specialAttack":110,"specialDefense":90,"speed":50},"forms":[]},{"name":"victreebel","height":17,"weight":155,"base_stats":{"hp":80,"attack":105,"defense":65,"specialAttack":100,"specialDefense":70,"speed":70},"forms":[]},{"name":"bellossom","height":4,"weight":58,"base_stats":{"hp":75,"attack":80,"defense":95,"specialAttack":90,"specialDefense":100,"speed":50},"forms":[]},{"name":"delibird","height":9,"weight":160,"base_stats":{"hp":45,"attack":55,"defense":45,"specialAttack":65,"specialDefense":45,"speed":75},"forms":[]},{"name":"tyrogue","height":7,"weight":210,"base_stats":{"hp":35,"attack":35,"defense":35,"specialAttack":35,"specialDefense":35,"speed":35},"forms":[]},{"name":"beautifly","height":10,"weight":284,"base_stats":{"hp":60,"attack":70,"defense":50,"specialAttack":100,"specialDefense":50,"speed":65},"forms":[]},{"name":"dustox","height":12,"weight":316,"base_stats":{"hp":60,"attack":50,"defense":70,"specialAttack":50,"specialDefense":90,"speed":65},"forms":[]},{"name":"taillow","height":3,"weight":23,"base_stats":{"hp":40,"attack":55,"defense":30,"specialAttack":30,"specialDefense":30,"speed":85},"forms":[]},{"name":"swellow","height":7,"weight":198,"base_stats":{"hp":60,"attack":85,"defense":60,"specialAttack":75,"specialDefense":50,"speed":125},"forms":[]},{"name":"surskit","height":5,"weight":17,"base_stats":{"hp":40,"attack":30,"defense":32,"specialAttack":50,"specialDefense":52,"speed":65},"forms":[]},{"name":"seedot","height":5,"weight":40,"base_stats":{"hp":40,"attack":40,"defense":50,"specialAttack":30,"specialDefense":30,"speed":30},"forms":[]},{"name":"shroomish","height":4,"weight":45,"base_stats":{"hp":60,"attack":40,"defense":60,"specialAttack":40,"specialDefense":60,"speed":35},"forms":[]},{"name":"shedinja","height":8,"weight":12,"base_stats":{"hp":1,"attack":90,"defense":45,"specialAttack":30,"specialDefense":30,"speed":40},"forms":[]},{"name":"nincada","height":5,"weight":55,"base_stats":{"hp":31,"attack":45,"defense":90,"specialAttack":30,"specialDefense":30,"speed":40},"forms":[]},{"name":"azurill","height":2,"weight":20,"base_stats":{"hp":50,"attack":20,"defense":40,"specialAttack":20,"specialDefense":40,"speed":20},"forms":[]},{"name":"snorunt","height":7,"weight":168,"base_stats":{"hp":50,"attack":50,"defense":50,"specialAttack":50,"specialDefense":50,"speed":50},"forms":[]},{"name":"huntail","height":17,"weight":270,"base_stats":{"hp":55,"attack":104,"defense":105,"specialAttack":94,"specialDefense":75,"speed":52},"forms":[]},{"name":"gorebyss","height":18,"weight":226,"base_stats":{"hp":55,"attack":84,"defense":105,"specialAttack":114,"specialDefense":75,"speed":52},"forms":[]},{"name":"luvdisc","height":6,"weight":87,"base_stats":{"hp":43,"attack":30,"defense":55,"specialAttack":40,"specialDefense":65,"speed":97},"forms":[]},{"name":"torterra","height":22,"weight":3100,"base_stats":{"hp":95,"attack":109,"defense":105,"specialAttack":75,"specialDefense":85,"speed":56},"forms":[]},{"name":"monferno","height":9,"weight":220,"base_stats":{"hp":64,"attack":78,"defense":52,"specialAttack":78,"specialDefense":52,"speed":81},"forms":[]},{"name":"empoleon","height":17,"weight":845,"base_stats":{"hp":84,"attack":86,"defense":88,"specialAttack":111,"specialDefense":101,"speed":60},"forms":[]},{"name":"bidoof","height":5,"weight":200,"base_stats":{"hp":59,"attack":45,"defense":40,"specialAttack":35,"specialDefense":40,"speed":31},"forms":[]},{"name":"bibarel","height":10,"weight":315,"base_stats":{"hp":79,"attack":85,"defense":60,"specialAttack":55,"specialDefense":60,"speed":71},"forms":[]},{"name":"delcatty","height":11,"weight":326,"base_stats":{"hp":70,"attack":65,"defense":65,"specialAttack":55,"specialDefense":55,"speed":90},"forms":[]},{"name":"rampardos","height":16,"weight":1025,"base_stats":{"hp":97,"attack":165,"defense":60,"specialAttack":65,"specialDefense":50,"speed":58},"forms":[]},{"name":"shieldon","height":5,"weight":570,"base_stats":{"hp":30,"attack":42,"defense":118,"specialAttack":42,"specialDefense":88,"speed":30},"forms":[]},{"name":"cranidos","height":9,"weight":315,"base_stats":{"hp":67,"attack":125,"defense":40,"specialAttack":30,"specialDefense":30,"speed":58},"forms":[]},{"name":"drifloon","height":4,"weight":12,"base_stats":{"hp":90,"attack":50,"defense":34,"specialAttack":60,"specialDefense":44,"speed":70},"forms":[]},{"name":"ambipom","height":12,"weight":203,"base_stats":{"hp":75,"attack":100,"defense":66,"specialAttack":60,"specialDefense":66,"speed":115},"forms":[]},{"name":"buneary","height":4,"weight":55,"base_stats":{"hp":55,"attack":66,"defense":44,"specialAttack":44,"specialDefense":56,"speed":85},"forms":[]},{"name":"drifblim","height":12,"weight":150,"base_stats":{"hp":150,"attack":80,"defense":44,"specialAttack":90,"specialDefense":54,"speed":80},"forms":[]},{"name":"giratina","forms":[{"name":"giratina-origin","height":69,"weight":6500,"base_stats":{"hp":150,"attack":120,"defense":100,"specialAttack":120,"specialDefense":100,"speed":90},"forms":[]},{"name":"giratina-altered","height":45,"weight":7500,"base_stats":{"hp":150,"attack":100,"defense":120,"specialAttack":100,"specialDefense":120,"speed":90},"forms":[]}]},{"name":"glameow","height":5,"weight":39,"base_stats":{"hp":49,"attack":55,"defense":42,"specialAttack":42,"specialDefense":37,"speed":85},"forms":[]},{"name":"purugly","height":10,"weight":438,"base_stats":{"hp":71,"attack":82,"defense":64,"specialAttack":64,"specialDefense":59,"speed":112},"forms":[]},{"name":"chingling","height":2,"weight":6,"base_stats":{"hp":45,"attack":30,"defense":50,"specialAttack":65,"specialDefense":50,"speed":45},"forms":[]},{"name":"bronzor","height":5,"weight":605,"base_stats":{"hp":57,"attack":24,"defense":86,"specialAttack":24,"specialDefense":86,"speed":23},"forms":[]},{"name":"skuntank","height":10,"weight":380,"base_stats":{"hp":103,"attack":93,"defense":67,"specialAttack":71,"specialDefense":61,"speed":84},"forms":[]},{"name":"chatot","height":5,"weight":19,"base_stats":{"hp":76,"attack":65,"defense":45,"specialAttack":92,"specialDefense":42,"speed":91},"forms":[]},{"name":"happiny","height":6,"weight":244,"base_stats":{"hp":100,"attack":5,"defense":5,"specialAttack":15,"specialDefense":65,"speed":30},"forms":[]},{"name":"spiritomb","height":10,"weight":1080,"base_stats":{"hp":50,"attack":92,"defense":108,"specialAttack":92,"specialDefense":108,"speed":35},"forms":[]},{"name":"carnivine","height":14,"weight":270,"base_stats":{"hp":74,"attack":100,"defense":72,"specialAttack":90,"specialDefense":72,"speed":46},"forms":[]},{"name":"finneon","height":4,"weight":70,"base_stats":{"hp":49,"attack":49,"defense":56,"specialAttack":49,"specialDefense":61,"speed":66},"forms":[]},{"name":"snover","height":10,"weight":505,"base_stats":{"hp":60,"attack":62,"defense":50,"specialAttack":62,"specialDefense":60,"speed":40},"forms":[]},{"name":"mantyke","height":10,"weight":650,"base_stats":{"hp":45,"attack":20,"defense":50,"specialAttack":60,"specialDefense":120,"speed":50},"forms":[]},{"name":"magnezone","height":12,"weight":1800,"base_stats":{"hp":70,"attack":70,"defense":115,"specialAttack":130,"specialDefense":90,"speed":60},"forms":[]},{"name":"magmortar","height":16,"weight":680,"base_stats":{"hp":75,"attack":95,"defense":67,"specialAttack":125,"specialDefense":95,"speed":83},"forms":[]},{"name":"yanmega","height":19,"weight":515,"base_stats":{"hp":86,"attack":76,"defense":86,"specialAttack":116,"specialDefense":56,"speed":95},"forms":[]},{"name":"togekiss","height":15,"weight":380,"base_stats":{"hp":85,"attack":50,"defense":95,"specialAttack":120,"specialDefense":115,"speed":80},"forms":[]},{"name":"porygon-z","height":9,"weight":340,"base_stats":{"hp":85,"attack":80,"defense":70,"specialAttack":135,"specialDefense":75,"speed":90},"forms":[]},{"name":"mamoswine","height":25,"weight":2910,"base_stats":{"hp":110,"attack":130,"defense":80,"specialAttack":70,"specialDefense":60,"speed":80},"forms":[]},{"name":"froslass","height":13,"weight":266,"base_stats":{"hp":70,"attack":80,"defense":70,"specialAttack":80,"specialDefense":70,"speed":110},"forms":[]},{"name":"heatran","height":17,"weight":4300,"base_stats":{"hp":91,"attack":90,"defense":106,"specialAttack":130,"specialDefense":106,"speed":77},"forms":[]},{"name":"regigigas","height":37,"weight":4200,"base_stats":{"hp":110,"attack":160,"defense":110,"specialAttack":80,"specialDefense":110,"speed":100},"forms":[]},{"name":"cresselia","height":15,"weight":856,"base_stats":{"hp":120,"attack":70,"defense":120,"specialAttack":75,"specialDefense":130,"speed":85},"forms":[]},{"name":"manaphy","height":3,"weight":14,"base_stats":{"hp":100,"attack":100,"defense":100,"specialAttack":100,"specialDefense":100,"speed":100},"forms":[]},{"name":"pidgeotto","height":11,"weight":300,"base_stats":{"hp":63,"attack":60,"defense":55,"specialAttack":50,"specialDefense":50,"speed":71},"forms":[]},{"name":"arcanine","height":19,"weight":1550,"base_stats":{"hp":90,"attack":110,"defense":80,"specialAttack":100,"specialDefense":80,"speed":95},"forms":[]},{"name":"cloyster","height":15,"weight":1325,"base_stats":{"hp":50,"attack":95,"defense":180,"specialAttack":85,"specialDefense":45,"speed":70},"forms":[]},{"name":"quilava","height":9,"weight":190,"base_stats":{"hp":58,"attack":64,"defense":58,"specialAttack":80,"specialDefense":65,"speed":80},"forms":[]},{"name":"sunflora","height":8,"weight":85,"base_stats":{"hp":75,"attack":75,"defense":55,"specialAttack":105,"specialDefense":85,"speed":30},"forms":[]},{"name":"lotad","height":5,"weight":26,"base_stats":{"hp":40,"attack":30,"defense":30,"specialAttack":40,"specialDefense":50,"speed":30},"forms":[]},{"name":"ludicolo","height":15,"weight":550,"base_stats":{"hp":80,"attack":70,"defense":70,"specialAttack":90,"specialDefense":100,"speed":70},"forms":[]},{"name":"ninjask","height":8,"weight":120,"base_stats":{"hp":61,"attack":90,"defense":45,"specialAttack":50,"specialDefense":50,"speed":160},"forms":[]},{"name":"carvanha","height":8,"weight":208,"base_stats":{"hp":45,"attack":90,"defense":20,"specialAttack":65,"specialDefense":20,"speed":65},"forms":[]},{"name":"vibrava","height":11,"weight":153,"base_stats":{"hp":50,"attack":70,"defense":50,"specialAttack":50,"specialDefense":50,"speed":70},"forms":[]},{"name":"barboach","height":4,"weight":19,"base_stats":{"hp":50,"attack":48,"defense":43,"specialAttack":46,"specialDefense":41,"speed":60},"forms":[]},{"name":"whiscash","height":9,"weight":236,"base_stats":{"hp":110,"attack":78,"defense":73,"specialAttack":76,"specialDefense":71,"speed":60},"forms":[]},{"name":"anorith","height":7,"weight":125,"base_stats":{"hp":45,"attack":95,"defense":50,"specialAttack":40,"specialDefense":50,"speed":75},"forms":[]},{"name":"sealeo","height":11,"weight":876,"base_stats":{"hp":90,"attack":60,"defense":70,"specialAttack":75,"specialDefense":70,"speed":45},"forms":[]},{"name":"milotic","height":62,"weight":1620,"base_stats":{"hp":95,"attack":60,"defense":79,"specialAttack":100,"specialDefense":125,"speed":81},"forms":[]},{"name":"infernape","height":12,"weight":550,"base_stats":{"hp":76,"attack":104,"defense":71,"specialAttack":104,"specialDefense":71,"speed":108},"forms":[]},{"name":"chimchar","height":5,"weight":62,"base_stats":{"hp":44,"attack":58,"defense":44,"specialAttack":58,"specialDefense":44,"speed":61},"forms":[]},{"name":"stunky","height":4,"weight":192,"base_stats":{"hp":63,"attack":63,"defense":47,"specialAttack":41,"specialDefense":41,"speed":74},"forms":[]},{"name":"bronzong","height":13,"weight":1870,"base_stats":{"hp":67,"attack":89,"defense":116,"specialAttack":79,"specialDefense":116,"speed":33},"forms":[]},{"name":"gible","height":7,"weight":205,"base_stats":{"hp":58,"attack":70,"defense":45,"specialAttack":40,"specialDefense":45,"speed":42},"forms":[]},{"name":"riolu","height":7,"weight":202,"base_stats":{"hp":40,"attack":70,"defense":40,"specialAttack":35,"specialDefense":40,"speed":60},"forms":[]},{"name":"drapion","height":13,"weight":615,"base_stats":{"hp":70,"attack":90,"defense":110,"specialAttack":60,"specialDefense":75,"speed":95},"forms":[]},{"name":"skorupi","height":8,"weight":120,"base_stats":{"hp":40,"attack":50,"defense":90,"specialAttack":30,"specialDefense":55,"speed":65},"forms":[]},{"name":"electivire","height":18,"weight":1386,"base_stats":{"hp":75,"attack":123,"defense":67,"specialAttack":95,"specialDefense":85,"speed":95},"forms":[]},{"name":"tangrowth","height":20,"weight":1286,"base_stats":{"hp":100,"attack":100,"defense":125,"specialAttack":110,"specialDefense":50,"speed":50},"forms":[]},{"name":"probopass","height":14,"weight":3400,"base_stats":{"hp":60,"attack":55,"defense":145,"specialAttack":75,"specialDefense":150,"speed":40},"forms":[]},{"name":"uxie","height":3,"weight":3,"base_stats":{"hp":75,"attack":75,"defense":130,"specialAttack":75,"specialDefense":130,"speed":95},"forms":[]},{"name":"mesprit","height":3,"weight":3,"base_stats":{"hp":80,"attack":105,"defense":105,"specialAttack":105,"specialDefense":105,"speed":80},"forms":[]},{"name":"dialga","height":54,"weight":6830,"base_stats":{"hp":100,"attack":120,"defense":120,"specialAttack":150,"specialDefense":100,"speed":90},"forms":[]},{"name":"azelf","height":3,"weight":3,"base_stats":{"hp":75,"attack":125,"defense":70,"specialAttack":125,"specialDefense":70,"speed":115},"forms":[]},{"name":"palkia","height":42,"weight":3360,"base_stats":{"hp":90,"attack":120,"defense":100,"specialAttack":150,"specialDefense":120,"speed":100},"forms":[]},{"name":"fearow","height":12,"weight":380,"base_stats":{"hp":65,"attack":90,"defense":65,"specialAttack":61,"specialDefense":61,"speed":100},"forms":[]},{"name":"gloom","height":8,"weight":86,"base_stats":{"hp":60,"attack":65,"defense":70,"specialAttack":85,"specialDefense":75,"speed":40},"forms":[]},{"name":"weepinbell","height":10,"weight":64,"base_stats":{"hp":65,"attack":90,"defense":50,"specialAttack":85,"specialDefense":45,"speed":55},"forms":[]},{"name":"voltorb","height":5,"weight":104,"base_stats":{"hp":40,"attack":30,"defense":50,"specialAttack":55,"specialDefense":55,"speed":100},"forms":[]},{"name":"seadra","height":12,"weight":250,"base_stats":{"hp":55,"attack":65,"defense":95,"specialAttack":95,"specialDefense":45,"speed":85},"forms":[]},{"name":"bayleef","height":12,"weight":158,"base_stats":{"hp":60,"attack":62,"defense":80,"specialAttack":63,"specialDefense":80,"speed":60},"forms":[]},{"name":"ariados","height":11,"weight":335,"base_stats":{"hp":70,"attack":90,"defense":70,"specialAttack":60,"specialDefense":70,"speed":40},"forms":[]},{"name":"pichu","height":3,"weight":20,"base_stats":{"hp":20,"attack":40,"defense":15,"specialAttack":35,"specialDefense":35,"speed":60},"forms":[]},{"name":"flaaffy","height":8,"weight":133,"base_stats":{"hp":70,"attack":55,"defense":55,"specialAttack":80,"specialDefense":60,"speed":45},"forms":[]},{"name":"politoed","height":11,"weight":339,"base_stats":{"hp":90,"attack":75,"defense":75,"specialAttack":90,"specialDefense":100,"speed":70},"forms":[]},{"name":"skiploom","height":6,"weight":10,"base_stats":{"hp":55,"attack":45,"defense":50,"specialAttack":45,"specialDefense":65,"speed":80},"forms":[]},{"name":"kingdra","height":18,"weight":1520,"base_stats":{"hp":75,"attack":95,"defense":95,"specialAttack":95,"specialDefense":95,"speed":85},"forms":[]},{"name":"mareep","height":6,"weight":78,"base_stats":{"hp":55,"attack":40,"defense":40,"specialAttack":65,"specialDefense":45,"speed":35},"forms":[]},{"name":"lombre","height":12,"weight":325,"base_stats":{"hp":60,"attack":50,"defense":50,"specialAttack":60,"specialDefense":70,"speed":50},"forms":[]},{"name":"wingull","height":6,"weight":95,"base_stats":{"hp":40,"attack":30,"defense":30,"specialAttack":55,"specialDefense":30,"speed":85},"forms":[]},{"name":"mightyena","height":10,"weight":370,"base_stats":{"hp":70,"attack":90,"defense":70,"specialAttack":60,"specialDefense":60,"speed":70},"forms":[]},{"name":"masquerain","height":8,"weight":36,"base_stats":{"hp":70,"attack":60,"defense":62,"specialAttack":100,"specialDefense":82,"speed":80},"forms":[]},{"name":"whismur","height":6,"weight":163,"base_stats":{"hp":64,"attack":51,"defense":23,"specialAttack":51,"specialDefense":23,"speed":28},"forms":[]},{"name":"electrike","height":6,"weight":152,"base_stats":{"hp":40,"attack":45,"defense":40,"specialAttack":65,"specialDefense":40,"speed":65},"forms":[]},{"name":"plusle","height":4,"weight":42,"base_stats":{"hp":60,"attack":50,"defense":40,"specialAttack":85,"specialDefense":75,"speed":95},"forms":[]},{"name":"minun","height":4,"weight":42,"base_stats":{"hp":60,"attack":40,"defense":50,"specialAttack":75,"specialDefense":85,"speed":95},"forms":[]},{"name":"trapinch","height":7,"weight":150,"base_stats":{"hp":45,"attack":100,"defense":45,"specialAttack":45,"specialDefense":45,"speed":10},"forms":[]},{"name":"wailord","height":145,"weight":3980,"base_stats":{"hp":170,"attack":90,"defense":45,"specialAttack":90,"specialDefense":45,"speed":60},"forms":[]},{"name":"swablu","height":4,"weight":12,"base_stats":{"hp":45,"attack":40,"defense":60,"specialAttack":40,"specialDefense":75,"speed":50},"forms":[]},{"name":"lileep","height":10,"weight":238,"base_stats":{"hp":66,"attack":41,"defense":77,"specialAttack":61,"specialDefense":87,"speed":23},"forms":[]},{"name":"cradily","height":15,"weight":604,"base_stats":{"hp":86,"attack":81,"defense":97,"specialAttack":81,"specialDefense":107,"speed":43},"forms":[]},{"name":"walrein","height":14,"weight":1506,"base_stats":{"hp":110,"attack":80,"defense":90,"specialAttack":95,"specialDefense":90,"speed":65},"forms":[]},{"name":"shelgon","height":11,"weight":1105,"base_stats":{"hp":65,"attack":95,"defense":100,"specialAttack":60,"specialDefense":50,"speed":50},"forms":[]},{"name":"bagon","height":6,"weight":421,"base_stats":{"hp":45,"attack":75,"defense":60,"specialAttack":40,"specialDefense":30,"speed":50},"forms":[]},{"name":"darkrai","height":15,"weight":505,"base_stats":{"hp":70,"attack":90,"defense":90,"specialAttack":135,"specialDefense":90,"speed":125},"forms":[]},{"name":"castform","height":3,"weight":8,"base_stats":{"hp":70,"attack":70,"defense":70,"specialAttack":70,"specialDefense":70,"speed":70},"forms":[{"name":"castform-rainy","height":3,"weight":8,"base_stats":{"hp":70,"attack":70,"defense":70,"specialAttack":70,"specialDefense":70,"speed":70},"forms":[]},{"name":"castform-sunny","height":3,"weight":8,"base_stats":{"hp":70,"attack":70,"defense":70,"specialAttack":70,"specialDefense":70,"speed":70},"forms":[]},{"name":"castform-snowy","height":3,"weight":8,"base_stats":{"hp":70,"attack":70,"defense":70,"specialAttack":70,"specialDefense":70,"speed":70},"forms":[]}]},{"name":"lickilicky","height":17,"weight":1400,"base_stats":{"hp":110,"attack":85,"defense":95,"specialAttack":80,"specialDefense":95,"speed":50},"forms":[]},{"name":"gliscor","height":20,"weight":425,"base_stats":{"hp":75,"attack":95,"defense":125,"specialAttack":45,"specialDefense":75,"speed":95},"forms":[]},{"name":"dusknoir","height":22,"weight":1066,"base_stats":{"hp":45,"attack":100,"defense":135,"specialAttack":65,"specialDefense":135,"speed":45},"forms":[]},{"name":"ivysaur","height":10,"weight":130,"base_stats":{"hp":60,"attack":62,"defense":63,"specialAttack":80,"specialDefense":80,"speed":60},"forms":[]},{"name":"pidgey","height":3,"weight":18,"base_stats":{"hp":40,"attack":45,"defense":40,"specialAttack":35,"specialDefense":35,"speed":56},"forms":[]},{"name":"spearow","height":3,"weight":20,"base_stats":{"hp":40,"attack":60,"defense":30,"specialAttack":31,"specialDefense":31,"speed":70},"forms":[]},{"name":"nidorina","height":8,"weight":200,"base_stats":{"hp":70,"attack":62,"defense":67,"specialAttack":55,"specialDefense":55,"speed":56},"forms":[]},{"name":"nidorino","height":9,"weight":195,"base_stats":{"hp":61,"attack":72,"defense":57,"specialAttack":55,"specialDefense":55,"speed":65},"forms":[]},{"name":"oddish","height":5,"weight":54,"base_stats":{"hp":45,"attack":50,"defense":55,"specialAttack":75,"specialDefense":65,"speed":30},"forms":[]},{"name":"venonat","height":10,"weight":300,"base_stats":{"hp":60,"attack":55,"defense":50,"specialAttack":40,"specialDefense":55,"speed":45},"forms":[]},{"name":"ponyta","height":10,"weight":300,"base_stats":{"hp":50,"attack":85,"defense":55,"specialAttack":65,"specialDefense":65,"speed":90},"forms":[]},{"name":"magnemite","height":3,"weight":60,"base_stats":{"hp":25,"attack":35,"defense":70,"specialAttack":95,"specialDefense":55,"speed":45},"forms":[]},{"name":"doduo","height":14,"weight":392,"base_stats":{"hp":35,"attack":85,"defense":45,"specialAttack":35,"specialDefense":35,"speed":75},"forms":[]},{"name":"shellder","height":3,"weight":40,"base_stats":{"hp":30,"attack":65,"defense":100,"specialAttack":45,"specialDefense":25,"speed":40},"forms":[]},{"name":"rapidash","height":17,"weight":950,"base_stats":{"hp":65,"attack":100,"defense":70,"specialAttack":80,"specialDefense":80,"speed":105},"forms":[]},{"name":"electrode","height":12,"weight":666,"base_stats":{"hp":60,"attack":50,"defense":70,"specialAttack":80,"specialDefense":80,"speed":150},"forms":[]},{"name":"horsea","height":4,"weight":80,"base_stats":{"hp":30,"attack":40,"defense":70,"specialAttack":70,"specialDefense":25,"speed":60},"forms":[]},{"name":"seaking","height":13,"weight":390,"base_stats":{"hp":80,"attack":92,"defense":65,"specialAttack":65,"specialDefense":80,"speed":68},"forms":[]},{"name":"goldeen","height":6,"weight":150,"base_stats":{"hp":45,"attack":67,"defense":60,"specialAttack":35,"specialDefense":50,"speed":63},"forms":[]},{"name":"flareon","height":9,"weight":250,"base_stats":{"hp":65,"attack":130,"defense":60,"specialAttack":95,"specialDefense":110,"speed":65},"forms":[]},{"name":"articuno","height":17,"weight":554,"base_stats":{"hp":90,"attack":85,"defense":100,"specialAttack":95,"specialDefense":125,"speed":85},"forms":[]},{"name":"moltres","height":20,"weight":600,"base_stats":{"hp":90,"attack":100,"defense":90,"specialAttack":125,"specialDefense":85,"speed":90},"forms":[]},{"name":"starmie","height":11,"weight":800,"base_stats":{"hp":60,"attack":75,"defense":85,"specialAttack":100,"specialDefense":85,"speed":115},"forms":[]},{"name":"cyndaquil","height":5,"weight":79,"base_stats":{"hp":39,"attack":52,"defense":43,"specialAttack":60,"specialDefense":50,"speed":65},"forms":[]},{"name":"noctowl","height":16,"weight":408,"base_stats":{"hp":100,"attack":50,"defense":50,"specialAttack":86,"specialDefense":96,"speed":70},"forms":[]},{"name":"crobat","height":18,"weight":750,"base_stats":{"hp":85,"attack":90,"defense":80,"specialAttack":70,"specialDefense":80,"speed":130},"forms":[]},{"name":"chinchou","height":5,"weight":120,"base_stats":{"hp":75,"attack":38,"defense":38,"specialAttack":56,"specialDefense":56,"speed":67},"forms":[]},{"name":"spinarak","height":5,"weight":85,"base_stats":{"hp":40,"attack":60,"defense":40,"specialAttack":40,"specialDefense":40,"speed":30},"forms":[]},{"name":"lanturn","height":12,"weight":225,"base_stats":{"hp":125,"attack":58,"defense":58,"specialAttack":76,"specialDefense":76,"speed":67},"forms":[]},{"name":"eevee","height":3,"weight":65,"base_stats":{"hp":55,"attack":55,"defense":50,"specialAttack":45,"specialDefense":65,"speed":55},"forms":[]},{"name":"dodrio","height":18,"weight":852,"base_stats":{"hp":60,"attack":110,"defense":70,"specialAttack":60,"specialDefense":60,"speed":110},"forms":[]},{"name":"hoppip","height":4,"weight":5,"base_stats":{"hp":35,"attack":35,"defense":40,"specialAttack":35,"specialDefense":55,"speed":50},"forms":[]},{"name":"jumpluff","height":8,"weight":30,"base_stats":{"hp":75,"attack":55,"defense":70,"specialAttack":55,"specialDefense":95,"speed":110},"forms":[]},{"name":"sunkern","height":3,"weight":18,"base_stats":{"hp":30,"attack":30,"defense":30,"specialAttack":30,"specialDefense":30,"speed":30},"forms":[]},{"name":"espeon","height":9,"weight":265,"base_stats":{"hp":65,"attack":65,"defense":60,"specialAttack":130,"specialDefense":95,"speed":110},"forms":[]},{"name":"umbreon","height":10,"weight":270,"base_stats":{"hp":95,"attack":65,"defense":110,"specialAttack":60,"specialDefense":130,"speed":65},"forms":[]},{"name":"pineco","height":6,"weight":72,"base_stats":{"hp":50,"attack":65,"defense":90,"specialAttack":35,"specialDefense":35,"speed":15},"forms":[]},{"name":"shuckle","height":6,"weight":205,"base_stats":{"hp":20,"attack":10,"defense":230,"specialAttack":10,"specialDefense":230,"speed":5},"forms":[]},{"name":"slugma","height":7,"weight":350,"base_stats":{"hp":40,"attack":40,"defense":40,"specialAttack":70,"specialDefense":40,"speed":20},"forms":[]},{"name":"piloswine","height":11,"weight":558,"base_stats":{"hp":100,"attack":100,"defense":80,"specialAttack":60,"specialDefense":60,"speed":50},"forms":[]},{"name":"phanpy","height":5,"weight":335,"base_stats":{"hp":90,"attack":60,"defense":60,"specialAttack":40,"specialDefense":40,"speed":40},"forms":[]},{"name":"donphan","height":11,"weight":1200,"base_stats":{"hp":90,"attack":120,"defense":120,"specialAttack":60,"specialDefense":60,"speed":50},"forms":[]},{"name":"hitmontop","height":14,"weight":480,"base_stats":{"hp":50,"attack":95,"defense":95,"specialAttack":35,"specialDefense":110,"speed":70},"forms":[]},{"name":"magby","height":7,"weight":214,"base_stats":{"hp":45,"attack":75,"defense":37,"specialAttack":70,"specialDefense":55,"speed":83},"forms":[]},{"name":"entei","height":21,"weight":1980,"base_stats":{"hp":115,"attack":115,"defense":85,"specialAttack":90,"specialDefense":75,"speed":100},"forms":[]},{"name":"raikou","height":19,"weight":1780,"base_stats":{"hp":90,"attack":85,"defense":75,"specialAttack":115,"specialDefense":100,"speed":115},"forms":[]},{"name":"suicune","height":20,"weight":1870,"base_stats":{"hp":100,"attack":75,"defense":115,"specialAttack":90,"specialDefense":115,"speed":85},"forms":[]},{"name":"pupitar","height":12,"weight":1520,"base_stats":{"hp":70,"attack":84,"defense":70,"specialAttack":65,"specialDefense":70,"speed":51},"forms":[]},{"name":"torchic","height":4,"weight":25,"base_stats":{"hp":45,"attack":60,"defense":40,"specialAttack":70,"specialDefense":50,"speed":45},"forms":[]},{"name":"combusken","height":9,"weight":195,"base_stats":{"hp":60,"attack":85,"defense":60,"specialAttack":85,"specialDefense":60,"speed":55},"forms":[]},{"name":"marshtomp","height":7,"weight":280,"base_stats":{"hp":70,"attack":85,"defense":70,"specialAttack":60,"specialDefense":70,"speed":50},"forms":[]},{"name":"mudkip","height":4,"weight":76,"base_stats":{"hp":50,"attack":70,"defense":50,"specialAttack":50,"specialDefense":50,"speed":40},"forms":[]},{"name":"poochyena","height":5,"weight":136,"base_stats":{"hp":35,"attack":55,"defense":35,"specialAttack":30,"specialDefense":30,"speed":35},"forms":[]},{"name":"nuzleaf","height":10,"weight":280,"base_stats":{"hp":70,"attack":70,"defense":40,"specialAttack":60,"specialDefense":40,"speed":60},"forms":[]},{"name":"shiftry","height":13,"weight":596,"base_stats":{"hp":90,"attack":100,"defense":60,"specialAttack":90,"specialDefense":60,"speed":80},"forms":[]},{"name":"pelipper","height":12,"weight":280,"base_stats":{"hp":60,"attack":50,"defense":100,"specialAttack":95,"specialDefense":70,"speed":65},"forms":[]},{"name":"loudred","height":10,"weight":405,"base_stats":{"hp":84,"attack":71,"defense":43,"specialAttack":71,"specialDefense":43,"speed":48},"forms":[]},{"name":"grovyle","height":9,"weight":216,"base_stats":{"hp":50,"attack":65,"defense":45,"specialAttack":85,"specialDefense":65,"speed":95},"forms":[]},{"name":"nosepass","height":10,"weight":970,"base_stats":{"hp":30,"attack":45,"defense":135,"specialAttack":45,"specialDefense":90,"speed":30},"forms":[]},{"name":"lairon","height":9,"weight":1200,"base_stats":{"hp":60,"attack":90,"defense":140,"specialAttack":50,"specialDefense":50,"speed":40},"forms":[]},{"name":"swalot","height":17,"weight":800,"base_stats":{"hp":100,"attack":73,"defense":83,"specialAttack":73,"specialDefense":83,"speed":55},"forms":[]},{"name":"volbeat","height":7,"weight":177,"base_stats":{"hp":65,"attack":73,"defense":75,"specialAttack":47,"specialDefense":85,"speed":85},"forms":[]},{"name":"illumise","height":6,"weight":177,"base_stats":{"hp":65,"attack":47,"defense":75,"specialAttack":73,"specialDefense":85,"speed":85},"forms":[]},{"name":"wailmer","height":20,"weight":1300,"base_stats":{"hp":130,"attack":70,"defense":35,"specialAttack":70,"specialDefense":35,"speed":60},"forms":[]},{"name":"gulpin","height":4,"weight":103,"base_stats":{"hp":70,"attack":43,"defense":53,"specialAttack":43,"specialDefense":53,"speed":40},"forms":[]},{"name":"numel","height":7,"weight":240,"base_stats":{"hp":60,"attack":60,"defense":40,"specialAttack":65,"specialDefense":45,"speed":35},"forms":[]},{"name":"roselia","height":3,"weight":20,"base_stats":{"hp":50,"attack":60,"defense":45,"specialAttack":100,"specialDefense":80,"speed":65},"forms":[]},{"name":"torkoal","height":5,"weight":804,"base_stats":{"hp":70,"attack":85,"defense":140,"specialAttack":85,"specialDefense":70,"speed":20},"forms":[]},{"name":"seviper","height":27,"weight":525,"base_stats":{"hp":73,"attack":100,"defense":60,"specialAttack":100,"specialDefense":60,"speed":65},"forms":[]},{"name":"baltoy","height":5,"weight":215,"base_stats":{"hp":40,"attack":40,"defense":55,"specialAttack":40,"specialDefense":70,"speed":55},"forms":[]},{"name":"armaldo","height":15,"weight":682,"base_stats":{"hp":75,"attack":125,"defense":100,"specialAttack":70,"specialDefense":80,"speed":45},"forms":[]},{"name":"flygon","height":20,"weight":820,"base_stats":{"hp":80,"attack":100,"defense":80,"specialAttack":80,"specialDefense":80,"speed":100},"forms":[]},{"name":"duskull","height":8,"weight":150,"base_stats":{"hp":20,"attack":40,"defense":90,"specialAttack":30,"specialDefense":90,"speed":25},"forms":[]},{"name":"yanma","height":12,"weight":380,"base_stats":{"hp":65,"attack":65,"defense":45,"specialAttack":75,"specialDefense":45,"speed":95},"forms":[]},{"name":"metang","height":12,"weight":2025,"base_stats":{"hp":60,"attack":75,"defense":100,"specialAttack":55,"specialDefense":80,"speed":50},"forms":[]},{"name":"regirock","height":17,"weight":2300,"base_stats":{"hp":80,"attack":100,"defense":200,"specialAttack":50,"specialDefense":100,"speed":50},"forms":[]},{"name":"regice","height":18,"weight":1750,"base_stats":{"hp":80,"attack":50,"defense":100,"specialAttack":100,"specialDefense":200,"speed":50},"forms":[]},{"name":"registeel","height":19,"weight":2050,"base_stats":{"hp":80,"attack":75,"defense":150,"specialAttack":75,"specialDefense":150,"speed":50},"forms":[]},{"name":"spheal","height":8,"weight":395,"base_stats":{"hp":70,"attack":40,"defense":50,"specialAttack":55,"specialDefense":50,"speed":25},"forms":[]},{"name":"munchlax","height":6,"weight":1050,"base_stats":{"hp":135,"attack":85,"defense":40,"specialAttack":40,"specialDefense":85,"speed":5},"forms":[]},{"name":"toxicroak","height":13,"weight":444,"base_stats":{"hp":83,"attack":106,"defense":65,"specialAttack":86,"specialDefense":65,"speed":85},"forms":[]},{"name":"weavile","height":11,"weight":340,"base_stats":{"hp":70,"attack":120,"defense":65,"specialAttack":45,"specialDefense":85,"speed":125},"forms":[]},{"name":"wartortle","height":10,"weight":225,"base_stats":{"hp":59,"attack":63,"defense":80,"specialAttack":65,"specialDefense":80,"speed":58},"forms":[]},{"name":"charmeleon","height":11,"weight":190,"base_stats":{"hp":58,"attack":64,"defense":58,"specialAttack":80,"specialDefense":65,"speed":80},"forms":[]},{"name":"butterfree","height":11,"weight":320,"base_stats":{"hp":60,"attack":45,"defense":50,"specialAttack":90,"specialDefense":80,"speed":70},"forms":[]},{"name":"zubat","height":8,"weight":75,"base_stats":{"hp":40,"attack":45,"defense":35,"specialAttack":30,"specialDefense":40,"speed":55},"forms":[]},{"name":"golbat","height":16,"weight":550,"base_stats":{"hp":75,"attack":80,"defense":70,"specialAttack":65,"specialDefense":75,"speed":90},"forms":[]},{"name":"venomoth","height":15,"weight":125,"base_stats":{"hp":70,"attack":65,"defense":60,"specialAttack":90,"specialDefense":75,"speed":90},"forms":[]},{"name":"poliwag","height":6,"weight":124,"base_stats":{"hp":40,"attack":50,"defense":40,"specialAttack":40,"specialDefense":40,"speed":90},"forms":[]},{"name":"poliwhirl","height":10,"weight":200,"base_stats":{"hp":65,"attack":65,"defense":65,"specialAttack":50,"specialDefense":50,"speed":90},"forms":[]},{"name":"poliwrath","height":13,"weight":540,"base_stats":{"hp":90,"attack":95,"defense":95,"specialAttack":70,"specialDefense":90,"speed":70},"forms":[]},{"name":"abra","height":9,"weight":195,"base_stats":{"hp":25,"attack":20,"defense":15,"specialAttack":105,"specialDefense":55,"speed":90},"forms":[]},{"name":"bellsprout","height":7,"weight":40,"base_stats":{"hp":50,"attack":75,"defense":35,"specialAttack":70,"specialDefense":30,"speed":40},"forms":[]},{"name":"parasect","height":10,"weight":295,"base_stats":{"hp":60,"attack":95,"defense":80,"specialAttack":60,"specialDefense":80,"speed":30},"forms":[]},{"name":"tentacruel","height":16,"weight":550,"base_stats":{"hp":80,"attack":70,"defense":65,"specialAttack":80,"specialDefense":120,"speed":100},"forms":[]},{"name":"magneton","height":10,"weight":600,"base_stats":{"hp":50,"attack":60,"defense":95,"specialAttack":120,"specialDefense":70,"speed":70},"forms":[]},{"name":"seel","height":11,"weight":900,"base_stats":{"hp":65,"attack":45,"defense":55,"specialAttack":45,"specialDefense":70,"speed":45},"forms":[]},{"name":"kingler","height":13,"weight":600,"base_stats":{"hp":55,"attack":130,"defense":115,"specialAttack":50,"specialDefense":50,"speed":75},"forms":[]},{"name":"hitmonchan","height":14,"weight":502,"base_stats":{"hp":50,"attack":105,"defense":79,"specialAttack":35,"specialDefense":110,"speed":76},"forms":[]},{"name":"hitmonlee","height":15,"weight":498,"base_stats":{"hp":50,"attack":120,"defense":53,"specialAttack":35,"specialDefense":110,"speed":87},"forms":[]},{"name":"staryu","height":8,"weight":345,"base_stats":{"hp":30,"attack":45,"defense":55,"specialAttack":70,"specialDefense":55,"speed":85},"forms":[]},{"name":"weezing","height":12,"weight":95,"base_stats":{"hp":65,"attack":90,"defense":120,"specialAttack":85,"specialDefense":70,"speed":60},"forms":[]},{"name":"magmar","height":13,"weight":445,"base_stats":{"hp":65,"attack":95,"defense":57,"specialAttack":100,"specialDefense":85,"speed":93},"forms":[]},{"name":"electabuzz","height":11,"weight":300,"base_stats":{"hp":65,"attack":83,"defense":57,"specialAttack":95,"specialDefense":85,"speed":105},"forms":[]},{"name":"vaporeon","height":10,"weight":290,"base_stats":{"hp":130,"attack":65,"defense":60,"specialAttack":110,"specialDefense":95,"speed":65},"forms":[]},{"name":"jolteon","height":8,"weight":245,"base_stats":{"hp":65,"attack":65,"defense":60,"specialAttack":110,"specialDefense":95,"speed":130},"forms":[]},{"name":"omastar","height":10,"weight":350,"base_stats":{"hp":70,"attack":60,"defense":125,"specialAttack":115,"specialDefense":70,"speed":55},"forms":[]},{"name":"kabuto","height":5,"weight":115,"base_stats":{"hp":30,"attack":80,"defense":90,"specialAttack":55,"specialDefense":45,"speed":55},"forms":[]},{"name":"zapdos","height":16,"weight":526,"base_stats":{"hp":90,"attack":90,"defense":85,"specialAttack":125,"specialDefense":90,"speed":100},"forms":[]},{"name":"dragonair","height":40,"weight":165,"base_stats":{"hp":61,"attack":84,"defense":65,"specialAttack":70,"specialDefense":70,"speed":70},"forms":[]},{"name":"chikorita","height":9,"weight":64,"base_stats":{"hp":45,"attack":49,"defense":65,"specialAttack":49,"specialDefense":65,"speed":45},"forms":[]},{"name":"meganium","height":18,"weight":1005,"base_stats":{"hp":80,"attack":82,"defense":100,"specialAttack":83,"specialDefense":100,"speed":80},"forms":[]},{"name":"croconaw","height":11,"weight":250,"base_stats":{"hp":65,"attack":80,"defense":80,"specialAttack":59,"specialDefense":63,"speed":58},"forms":[]},{"name":"hoothoot","height":7,"weight":212,"base_stats":{"hp":60,"attack":30,"defense":30,"specialAttack":36,"specialDefense":56,"speed":50},"forms":[]},{"name":"ledyba","height":10,"weight":108,"base_stats":{"hp":40,"attack":20,"defense":30,"specialAttack":40,"specialDefense":80,"speed":55},"forms":[]},{"name":"ledian","height":14,"weight":356,"base_stats":{"hp":55,"attack":35,"defense":50,"specialAttack":55,"specialDefense":110,"speed":85},"forms":[]},{"name":"igglybuff","height":3,"weight":10,"base_stats":{"hp":90,"attack":30,"defense":15,"specialAttack":40,"specialDefense":20,"speed":15},"forms":[]},{"name":"xatu","height":15,"weight":150,"base_stats":{"hp":65,"attack":75,"defense":70,"specialAttack":95,"specialDefense":70,"speed":95},"forms":[]},{"name":"azumarill","height":8,"weight":285,"base_stats":{"hp":100,"attack":50,"defense":80,"specialAttack":60,"specialDefense":80,"speed":50},"forms":[]},{"name":"porygon","height":8,"weight":365,"base_stats":{"hp":65,"attack":60,"defense":70,"specialAttack":85,"specialDefense":75,"speed":40},"forms":[]},{"name":"forretress","height":12,"weight":1258,"base_stats":{"hp":75,"attack":90,"defense":140,"specialAttack":60,"specialDefense":60,"speed":40},"forms":[]},{"name":"magcargo","height":8,"weight":550,"base_stats":{"hp":60,"attack":50,"defense":120,"specialAttack":90,"specialDefense":80,"speed":30},"forms":[]},{"name":"swinub","height":4,"weight":65,"base_stats":{"hp":50,"attack":50,"defense":40,"specialAttack":30,"specialDefense":30,"speed":50},"forms":[]},{"name":"octillery","height":9,"weight":285,"base_stats":{"hp":75,"attack":105,"defense":75,"specialAttack":105,"specialDefense":75,"speed":45},"forms":[]},{"name":"skarmory","height":17,"weight":505,"base_stats":{"hp":65,"attack":80,"defense":140,"specialAttack":40,"specialDefense":70,"speed":70},"forms":[]},{"name":"remoraid","height":6,"weight":120,"base_stats":{"hp":35,"attack":65,"defense":35,"specialAttack":65,"specialDefense":35,"speed":65},"forms":[]},{"name":"mantine","height":21,"weight":2200,"base_stats":{"hp":85,"attack":40,"defense":70,"specialAttack":80,"specialDefense":140,"speed":70},"forms":[]},{"name":"porygon2","height":6,"weight":325,"base_stats":{"hp":85,"attack":80,"defense":90,"specialAttack":105,"specialDefense":95,"speed":60},"forms":[]},{"name":"elekid","height":6,"weight":235,"base_stats":{"hp":45,"attack":63,"defense":37,"specialAttack":65,"specialDefense":55,"speed":95},"forms":[]},{"name":"larvitar","height":6,"weight":720,"base_stats":{"hp":50,"attack":64,"defense":50,"specialAttack":45,"specialDefense":50,"speed":41},"forms":[]},{"name":"treecko","height":5,"weight":50,"base_stats":{"hp":40,"attack":45,"defense":35,"specialAttack":65,"specialDefense":55,"speed":70},"forms":[]},{"name":"dewgong","height":17,"weight":1200,"base_stats":{"hp":90,"attack":70,"defense":80,"specialAttack":70,"specialDefense":95,"speed":70},"forms":[]},{"name":"zigzagoon","height":4,"weight":175,"base_stats":{"hp":38,"attack":30,"defense":41,"specialAttack":30,"specialDefense":41,"speed":60},"forms":[]},{"name":"linoone","height":5,"weight":325,"base_stats":{"hp":78,"attack":70,"defense":61,"specialAttack":50,"specialDefense":61,"speed":100},"forms":[]},{"name":"kirlia","height":8,"weight":202,"base_stats":{"hp":38,"attack":35,"defense":35,"specialAttack":65,"specialDefense":55,"speed":50},"forms":[]},{"name":"breloom","height":12,"weight":392,"base_stats":{"hp":60,"attack":130,"defense":80,"specialAttack":60,"specialDefense":60,"speed":70},"forms":[]},{"name":"vigoroth","height":14,"weight":465,"base_stats":{"hp":80,"attack":80,"defense":80,"specialAttack":55,"specialDefense":55,"speed":90},"forms":[]},{"name":"slakoth","height":8,"weight":240,"base_stats":{"hp":60,"attack":60,"defense":60,"specialAttack":35,"specialDefense":35,"speed":30},"forms":[]},{"name":"hariyama","height":23,"weight":2538,"base_stats":{"hp":144,"attack":120,"defense":60,"specialAttack":40,"specialDefense":60,"speed":50},"forms":[]},{"name":"makuhita","height":10,"weight":864,"base_stats":{"hp":72,"attack":60,"defense":30,"specialAttack":20,"specialDefense":30,"speed":25},"forms":[]},{"name":"aron","height":4,"weight":600,"base_stats":{"hp":50,"attack":70,"defense":100,"specialAttack":40,"specialDefense":40,"speed":30},"forms":[]},{"name":"cacturne","height":13,"weight":774,"base_stats":{"hp":70,"attack":115,"defense":60,"specialAttack":115,"specialDefense":60,"speed":55},"forms":[]},{"name":"solrock","height":12,"weight":1540,"base_stats":{"hp":90,"attack":95,"defense":85,"specialAttack":55,"specialDefense":65,"speed":70},"forms":[]},{"name":"corphish","height":6,"weight":115,"base_stats":{"hp":43,"attack":80,"defense":65,"specialAttack":50,"specialDefense":35,"speed":35},"forms":[]},{"name":"lunatone","height":10,"weight":1680,"base_stats":{"hp":90,"attack":55,"defense":65,"specialAttack":95,"specialDefense":85,"speed":70},"forms":[]},{"name":"crawdaunt","height":11,"weight":328,"base_stats":{"hp":63,"attack":120,"defense":85,"specialAttack":90,"specialDefense":55,"speed":55},"forms":[]},{"name":"shuppet","height":6,"weight":23,"base_stats":{"hp":44,"attack":75,"defense":35,"specialAttack":63,"specialDefense":33,"speed":45},"forms":[]},{"name":"chimecho","height":6,"weight":10,"base_stats":{"hp":75,"attack":50,"defense":80,"specialAttack":95,"specialDefense":90,"speed":65},"forms":[]},{"name":"tropius","height":20,"weight":1000,"base_stats":{"hp":99,"attack":68,"defense":83,"specialAttack":72,"specialDefense":87,"speed":51},"forms":[]},{"name":"relicanth","height":10,"weight":234,"base_stats":{"hp":100,"attack":90,"defense":130,"specialAttack":45,"specialDefense":65,"speed":55},"forms":[]},{"name":"jirachi","height":3,"weight":11,"base_stats":{"hp":100,"attack":100,"defense":100,"specialAttack":100,"specialDefense":100,"speed":100},"forms":[]},{"name":"deoxys","forms":[{"name":"deoxys-normal","height":17,"weight":608,"base_stats":{"hp":50,"attack":150,"defense":50,"specialAttack":150,"specialDefense":50,"speed":150},"forms":[]},{"name":"deoxys-speed","height":17,"weight":608,"base_stats":{"hp":50,"attack":95,"defense":90,"specialAttack":95,"specialDefense":90,"speed":180},"forms":[]},{"name":"deoxys-attack","height":17,"weight":608,"base_stats":{"hp":50,"attack":180,"defense":20,"specialAttack":180,"specialDefense":20,"speed":150},"forms":[]},{"name":"deoxys-defense","height":17,"weight":608,"base_stats":{"hp":50,"attack":70,"defense":160,"specialAttack":70,"specialDefense":160,"speed":90},"forms":[]}]},{"name":"spoink","height":7,"weight":306,"base_stats":{"hp":60,"attack":25,"defense":35,"specialAttack":70,"specialDefense":80,"speed":60},"forms":[]},{"name":"cacnea","height":4,"weight":513,"base_stats":{"hp":50,"attack":85,"defense":40,"specialAttack":85,"specialDefense":40,"speed":35},"forms":[]},{"name":"mime-jr","height":6,"weight":130,"base_stats":{"hp":20,"attack":25,"defense":45,"specialAttack":70,"specialDefense":90,"speed":60},"forms":[]},{"name":"croagunk","height":7,"weight":230,"base_stats":{"hp":48,"attack":61,"defense":40,"specialAttack":61,"specialDefense":40,"speed":50},"forms":[]},{"name":"rhyperior","height":24,"weight":2828,"base_stats":{"hp":115,"attack":140,"defense":130,"specialAttack":55,"specialDefense":55,"speed":40},"forms":[]},{"name":"bulbasaur","height":7,"weight":69,"base_stats":{"hp":45,"attack":49,"defense":49,"specialAttack":65,"specialDefense":65,"speed":45},"forms":[]},{"name":"ekans","height":20,"weight":69,"base_stats":{"hp":35,"attack":60,"defense":44,"specialAttack":40,"specialDefense":54,"speed":55},"forms":[]},{"name":"arbok","height":35,"weight":650,"base_stats":{"hp":60,"attack":95,"defense":69,"specialAttack":65,"specialDefense":79,"speed":80},"forms":[]},{"name":"nidoran","forms":[{"name":"nidoran-f","height":4,"weight":70,"base_stats":{"hp":55,"attack":47,"defense":52,"specialAttack":40,"specialDefense":40,"speed":41},"forms":[]},{"name":"nidoran-m","height":5,"weight":90,"base_stats":{"hp":46,"attack":57,"defense":40,"specialAttack":40,"specialDefense":40,"speed":50},"forms":[]}]},{"name":"paras","height":3,"weight":54,"base_stats":{"hp":35,"attack":70,"defense":55,"specialAttack":45,"specialDefense":55,"speed":25},"forms":[]},{"name":"growlithe","height":7,"weight":190,"base_stats":{"hp":55,"attack":70,"defense":45,"specialAttack":70,"specialDefense":50,"speed":60},"forms":[]},{"name":"machamp","height":16,"weight":1300,"base_stats":{"hp":90,"attack":130,"defense":80,"specialAttack":65,"specialDefense":85,"speed":55},"forms":[]},{"name":"machoke","height":15,"weight":705,"base_stats":{"hp":80,"attack":100,"defense":70,"specialAttack":50,"specialDefense":60,"speed":45},"forms":[]},{"name":"tentacool","height":9,"weight":455,"base_stats":{"hp":40,"attack":40,"defense":35,"specialAttack":50,"specialDefense":100,"speed":70},"forms":[]},{"name":"haunter","height":16,"weight":1,"base_stats":{"hp":45,"attack":50,"defense":45,"specialAttack":115,"specialDefense":55,"speed":95},"forms":[]},{"name":"krabby","height":4,"weight":65,"base_stats":{"hp":30,"attack":105,"defense":90,"specialAttack":25,"specialDefense":25,"speed":50},"forms":[]},{"name":"gastly","height":13,"weight":1,"base_stats":{"hp":30,"attack":35,"defense":30,"specialAttack":100,"specialDefense":35,"speed":80},"forms":[]},{"name":"exeggcute","height":4,"weight":25,"base_stats":{"hp":60,"attack":40,"defense":80,"specialAttack":60,"specialDefense":45,"speed":40},"forms":[]},{"name":"koffing","height":6,"weight":10,"base_stats":{"hp":40,"attack":65,"defense":95,"specialAttack":60,"specialDefense":45,"speed":35},"forms":[]},{"name":"tangela","height":10,"weight":350,"base_stats":{"hp":65,"attack":55,"defense":115,"specialAttack":100,"specialDefense":40,"speed":60},"forms":[]},{"name":"scyther","height":15,"weight":560,"base_stats":{"hp":70,"attack":110,"defense":80,"specialAttack":55,"specialDefense":80,"speed":105},"forms":[]},{"name":"tauros","height":14,"weight":884,"base_stats":{"hp":75,"attack":100,"defense":95,"specialAttack":40,"specialDefense":70,"speed":110},"forms":[]},{"name":"omanyte","height":4,"weight":75,"base_stats":{"hp":35,"attack":40,"defense":100,"specialAttack":90,"specialDefense":55,"speed":35},"forms":[]},{"name":"dratini","height":18,"weight":33,"base_stats":{"hp":41,"attack":64,"defense":45,"specialAttack":50,"specialDefense":50,"speed":50},"forms":[]},{"name":"totodile","height":6,"weight":95,"base_stats":{"hp":50,"attack":65,"defense":64,"specialAttack":44,"specialDefense":48,"speed":43},"forms":[]},{"name":"furret","height":18,"weight":325,"base_stats":{"hp":85,"attack":76,"defense":64,"specialAttack":45,"specialDefense":55,"speed":90},"forms":[]},{"name":"cleffa","height":3,"weight":30,"base_stats":{"hp":50,"attack":25,"defense":28,"specialAttack":45,"specialDefense":55,"speed":15},"forms":[]},{"name":"typhlosion","height":17,"weight":795,"base_stats":{"hp":78,"attack":84,"defense":78,"specialAttack":109,"specialDefense":85,"speed":100},"forms":[]},{"name":"natu","height":2,"weight":20,"base_stats":{"hp":40,"attack":50,"defense":45,"specialAttack":70,"specialDefense":45,"speed":70},"forms":[]},{"name":"togepi","height":3,"weight":15,"base_stats":{"hp":35,"attack":20,"defense":65,"specialAttack":40,"specialDefense":65,"speed":20},"forms":[]},{"name":"sudowoodo","height":12,"weight":380,"base_stats":{"hp":70,"attack":100,"defense":115,"specialAttack":30,"specialDefense":65,"speed":30},"forms":[]},{"name":"marill","height":4,"weight":85,"base_stats":{"hp":70,"attack":20,"defense":50,"specialAttack":20,"specialDefense":50,"speed":40},"forms":[]},{"name":"wooper","height":4,"weight":85,"base_stats":{"hp":55,"attack":45,"defense":45,"specialAttack":25,"specialDefense":25,"speed":15},"forms":[]},{"name":"quagsire","height":14,"weight":750,"base_stats":{"hp":95,"attack":85,"defense":85,"specialAttack":65,"specialDefense":65,"speed":35},"forms":[]},{"name":"murkrow","height":5,"weight":21,"base_stats":{"hp":60,"attack":85,"defense":42,"specialAttack":85,"specialDefense":42,"speed":91},"forms":[]},{"name":"qwilfish","height":5,"weight":39,"base_stats":{"hp":65,"attack":95,"defense":85,"specialAttack":55,"specialDefense":55,"speed":85},"forms":[]},{"name":"ursaring","height":18,"weight":1258,"base_stats":{"hp":90,"attack":130,"defense":75,"specialAttack":75,"specialDefense":75,"speed":55},"forms":[]},{"name":"smoochum","height":4,"weight":60,"base_stats":{"hp":45,"attack":30,"defense":15,"specialAttack":85,"specialDefense":65,"speed":65},"forms":[]},{"name":"celebi","height":6,"weight":50,"base_stats":{"hp":100,"attack":100,"defense":100,"specialAttack":100,"specialDefense":100,"speed":100},"forms":[]},{"name":"ralts","height":4,"weight":66,"base_stats":{"hp":28,"attack":25,"defense":25,"specialAttack":45,"specialDefense":35,"speed":40},"forms":[]},{"name":"slaking","height":20,"weight":1305,"base_stats":{"hp":150,"attack":160,"defense":100,"specialAttack":95,"specialDefense":65,"speed":100},"forms":[]},{"name":"misdreavus","height":7,"weight":10,"base_stats":{"hp":60,"attack":60,"defense":60,"specialAttack":85,"specialDefense":85,"speed":85},"forms":[]},{"name":"exploud","height":15,"weight":840,"base_stats":{"hp":104,"attack":91,"defense":63,"specialAttack":91,"specialDefense":73,"speed":68},"forms":[]},{"name":"meditite","height":6,"weight":112,"base_stats":{"hp":30,"attack":40,"defense":55,"specialAttack":40,"specialDefense":55,"speed":60},"forms":[]},{"name":"houndour","height":6,"weight":108,"base_stats":{"hp":45,"attack":60,"defense":30,"specialAttack":80,"specialDefense":50,"speed":65},"forms":[]},{"name":"grumpig","height":9,"weight":715,"base_stats":{"hp":80,"attack":45,"defense":65,"specialAttack":90,"specialDefense":110,"speed":80},"forms":[]},{"name":"spinda","height":11,"weight":50,"base_stats":{"hp":60,"attack":60,"defense":60,"specialAttack":60,"specialDefense":60,"speed":60},"forms":[]},{"name":"claydol","height":15,"weight":1080,"base_stats":{"hp":60,"attack":70,"defense":105,"specialAttack":70,"specialDefense":120,"speed":75},"forms":[]},{"name":"dusclops","height":16,"weight":306,"base_stats":{"hp":40,"attack":70,"defense":130,"specialAttack":60,"specialDefense":130,"speed":25},"forms":[]},{"name":"skitty","height":6,"weight":110,"base_stats":{"hp":50,"attack":45,"defense":45,"specialAttack":35,"specialDefense":35,"speed":50},"forms":[]},{"name":"charmander","height":6,"weight":85,"base_stats":{"hp":39,"attack":52,"defense":43,"specialAttack":60,"specialDefense":50,"speed":65},"forms":[]},{"name":"wigglytuff","height":10,"weight":120,"base_stats":{"hp":140,"attack":70,"defense":45,"specialAttack":85,"specialDefense":50,"speed":45},"forms":[]},{"name":"golduck","height":17,"weight":766,"base_stats":{"hp":80,"attack":82,"defense":78,"specialAttack":95,"specialDefense":80,"speed":85},"forms":[]},{"name":"farfetchd","height":8,"weight":150,"base_stats":{"hp":52,"attack":90,"defense":55,"specialAttack":58,"specialDefense":62,"speed":60},"forms":[]},{"name":"kabutops","height":13,"weight":405,"base_stats":{"hp":60,"attack":115,"defense":105,"specialAttack":65,"specialDefense":70,"speed":80},"forms":[]},{"name":"sentret","height":8,"weight":60,"base_stats":{"hp":35,"attack":46,"defense":34,"specialAttack":35,"specialDefense":45,"speed":20},"forms":[]},{"name":"feraligatr","height":23,"weight":888,"base_stats":{"hp":85,"attack":105,"defense":100,"specialAttack":79,"specialDefense":83,"speed":78},"forms":[]},{"name":"togetic","height":6,"weight":32,"base_stats":{"hp":55,"attack":40,"defense":85,"specialAttack":80,"specialDefense":105,"speed":40},"forms":[]},{"name":"granbull","height":14,"weight":487,"base_stats":{"hp":90,"attack":120,"defense":75,"specialAttack":60,"specialDefense":60,"speed":45},"forms":[]},{"name":"teddiursa","height":6,"weight":88,"base_stats":{"hp":60,"attack":80,"defense":50,"specialAttack":50,"specialDefense":50,"speed":40},"forms":[]},{"name":"stantler","height":14,"weight":712,"base_stats":{"hp":73,"attack":95,"defense":62,"specialAttack":85,"specialDefense":65,"speed":85},"forms":[]},{"name":"ho-oh","height":38,"weight":1990,"base_stats":{"hp":106,"attack":130,"defense":90,"specialAttack":110,"specialDefense":154,"speed":90},"forms":[]},{"name":"arceus","height":32,"weight":3200,"base_stats":{"hp":120,"attack":120,"defense":120,"specialAttack":120,"specialDefense":120,"speed":120},"forms":[]},{"name":"squirtle","height":5,"weight":90,"base_stats":{"hp":44,"attack":48,"defense":65,"specialAttack":50,"specialDefense":64,"speed":43},"forms":[]},{"name":"nidoqueen","height":13,"weight":600,"base_stats":{"hp":90,"attack":92,"defense":87,"specialAttack":75,"specialDefense":85,"speed":76},"forms":[]},{"name":"clefable","height":13,"weight":400,"base_stats":{"hp":95,"attack":70,"defense":73,"specialAttack":95,"specialDefense":90,"speed":60},"forms":[]},{"name":"nidoking","height":14,"weight":620,"base_stats":{"hp":81,"attack":102,"defense":77,"specialAttack":85,"specialDefense":75,"speed":85},"forms":[]},{"name":"kadabra","height":13,"weight":565,"base_stats":{"hp":40,"attack":35,"defense":30,"specialAttack":120,"specialDefense":70,"speed":105},"forms":[]},{"name":"machop","height":8,"weight":195,"base_stats":{"hp":70,"attack":80,"defense":50,"specialAttack":35,"specialDefense":35,"speed":35},"forms":[]},{"name":"onix","height":88,"weight":2100,"base_stats":{"hp":35,"attack":45,"defense":160,"specialAttack":30,"specialDefense":45,"speed":70},"forms":[]},{"name":"snubbull","height":6,"weight":78,"base_stats":{"hp":60,"attack":80,"defense":50,"specialAttack":40,"specialDefense":40,"speed":30},"forms":[]},{"name":"gligar","height":11,"weight":648,"base_stats":{"hp":65,"attack":75,"defense":105,"specialAttack":35,"specialDefense":65,"speed":85},"forms":[]},{"name":"corsola","height":6,"weight":50,"base_stats":{"hp":65,"attack":55,"defense":95,"specialAttack":65,"specialDefense":95,"speed":35},"forms":[]},{"name":"psyduck","height":8,"weight":196,"base_stats":{"hp":50,"attack":52,"defense":48,"specialAttack":65,"specialDefense":50,"speed":55},"forms":[]},{"name":"primeape","height":10,"weight":320,"base_stats":{"hp":65,"attack":105,"defense":60,"specialAttack":60,"specialDefense":70,"speed":95},"forms":[]},{"name":"hypno","height":16,"weight":756,"base_stats":{"hp":85,"attack":73,"defense":70,"specialAttack":73,"specialDefense":115,"speed":67},"forms":[]},{"name":"rhyhorn","height":10,"weight":1150,"base_stats":{"hp":80,"attack":85,"defense":95,"specialAttack":30,"specialDefense":30,"speed":25},"forms":[]},{"name":"jynx","height":14,"weight":406,"base_stats":{"hp":65,"attack":50,"defense":35,"specialAttack":115,"specialDefense":95,"speed":95},"forms":[]},{"name":"lapras","height":25,"weight":2200,"base_stats":{"hp":130,"attack":85,"defense":80,"specialAttack":85,"specialDefense":95,"speed":60},"forms":[]},{"name":"cubone","height":4,"weight":65,"base_stats":{"hp":50,"attack":50,"defense":95,"specialAttack":40,"specialDefense":50,"speed":35},"forms":[]},{"name":"drowzee","height":10,"weight":324,"base_stats":{"hp":60,"attack":48,"defense":45,"specialAttack":43,"specialDefense":90,"speed":42},"forms":[]},{"name":"aipom","height":8,"weight":115,"base_stats":{"hp":55,"attack":70,"defense":55,"specialAttack":40,"specialDefense":55,"speed":85},"forms":[]},{"name":"jigglypuff","height":5,"weight":55,"base_stats":{"hp":115,"attack":45,"defense":20,"specialAttack":45,"specialDefense":25,"speed":20},"forms":[]},{"name":"slowking","height":20,"weight":795,"base_stats":{"hp":95,"attack":75,"defense":80,"specialAttack":100,"specialDefense":110,"speed":30},"forms":[]},{"name":"dunsparce","height":15,"weight":140,"base_stats":{"hp":100,"attack":70,"defense":70,"specialAttack":65,"specialDefense":65,"speed":45},"forms":[]},{"name":"girafarig","height":15,"weight":415,"base_stats":{"hp":70,"attack":80,"defense":65,"specialAttack":90,"specialDefense":65,"speed":85},"forms":[]},{"name":"miltank","height":12,"weight":755,"base_stats":{"hp":95,"attack":80,"defense":105,"specialAttack":40,"specialDefense":70,"speed":100},"forms":[]},{"name":"lugia","height":52,"weight":2160,"base_stats":{"hp":106,"attack":90,"defense":130,"specialAttack":90,"specialDefense":154,"speed":110},"forms":[]},{"name":"zangoose","height":13,"weight":403,"base_stats":{"hp":73,"attack":115,"defense":60,"specialAttack":60,"specialDefense":60,"speed":90},"forms":[]},{"name":"kecleon","height":10,"weight":220,"base_stats":{"hp":60,"attack":90,"defense":70,"specialAttack":60,"specialDefense":120,"speed":40},"forms":[]},{"name":"mankey","height":5,"weight":280,"base_stats":{"hp":40,"attack":80,"defense":35,"specialAttack":35,"specialDefense":45,"speed":70},"forms":[]},{"name":"slowpoke","height":12,"weight":360,"base_stats":{"hp":90,"attack":65,"defense":65,"specialAttack":40,"specialDefense":40,"speed":15},"forms":[]},{"name":"rhydon","height":19,"weight":1200,"base_stats":{"hp":105,"attack":130,"defense":120,"specialAttack":45,"specialDefense":45,"speed":40},"forms":[]},{"name":"sneasel","height":9,"weight":280,"base_stats":{"hp":55,"attack":95,"defense":55,"specialAttack":35,"specialDefense":75,"speed":115},"forms":[]},{"name":"blissey","height":15,"weight":468,"base_stats":{"hp":255,"attack":10,"defense":10,"specialAttack":75,"specialDefense":135,"speed":55},"forms":[]},{"name":"clefairy","height":6,"weight":75,"base_stats":{"hp":70,"attack":45,"defense":48,"specialAttack":60,"specialDefense":65,"speed":35},"forms":[]},{"name":"lickitung","height":12,"weight":655,"base_stats":{"hp":90,"attack":55,"defense":75,"specialAttack":60,"specialDefense":75,"speed":30},"forms":[]},{"name":"snorlax","height":21,"weight":4600,"base_stats":{"hp":160,"attack":110,"defense":65,"specialAttack":65,"specialDefense":110,"speed":30},"forms":[]},{"name":"dragonite","height":22,"weight":2100,"base_stats":{"hp":91,"attack":134,"defense":95,"specialAttack":100,"specialDefense":100,"speed":80},"forms":[]},{"name":"chansey","height":11,"weight":346,"base_stats":{"hp":250,"attack":5,"defense":5,"specialAttack":35,"specialDefense":105,"speed":50},"forms":[]},{"name":"mr-mime","height":13,"weight":545,"base_stats":{"hp":40,"attack":45,"defense":65,"specialAttack":100,"specialDefense":120,"speed":90},"forms":[]},{"name":"mew","height":4,"weight":40,"base_stats":{"hp":100,"attack":100,"defense":100,"specialAttack":100,"specialDefense":100,"speed":100},"forms":[]}] \ No newline at end of file diff --git a/test-server-pokemon/schema.js b/test-server-pokemon/schema.js deleted file mode 100644 index df8b6f6..0000000 --- a/test-server-pokemon/schema.js +++ /dev/null @@ -1,18 +0,0 @@ -module.exports = ` -type Pokemon { - String name - Integer height - Integer weight - Stats stats - Pokemon forms -} - -type Stats { - Integer hp - Integer attack - Integer defense - Integer specialAttack - Integer specialDefense - Integer speed -} -`; diff --git a/test-server-pokemon/server.js b/test-server-pokemon/server.js deleted file mode 100644 index 2cf41a7..0000000 --- a/test-server-pokemon/server.js +++ /dev/null @@ -1,27 +0,0 @@ -//express for testing -const express = require('express'); -const cors = require('cors'); -const bodyParser = require('body-parser'); - -const app = express(); - -app.use(cors()); -app.use(bodyParser.text()); - -//test the library -const schema = require('./schema.js'); -const handler = require('./handler.js'); -const sineQL = require('../source/index.js'); - -const sine = sineQL(schema, handler, { debug: true }); - -//open the end -app.post('/sineql', async (req, res) => { - const [code, result] = await sine(req.body); - res.status(code).send(result); -}); - -//startup -app.listen(process.env.WEB_PORT || 3100, err => { - console.log(`listening to *:${process.env.WEB_PORT || 3100}`); -});