├── .gitignore
├── .travis.yml
├── LICENSE
├── README.md
├── index.js
├── package-lock.json
├── package.json
└── tests
├── _create_test_db.js
├── connection_error.test.js
├── perf.test.js
├── server
├── index.js
└── server_example.js
└── test_db_setup.sql
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 |
6 | # Runtime data
7 | pids
8 | *.pid
9 | *.seed
10 |
11 | # Directory for instrumented libs generated by jscoverage/JSCover
12 | lib-cov
13 |
14 | # Coverage directory used by tools like istanbul
15 | coverage
16 |
17 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
18 | .grunt
19 |
20 | # node-waf configuration
21 | .lock-wscript
22 |
23 | # Compiled binary addons (https://nodejs.org/api/addons.html)
24 | build/Release
25 |
26 | # Dependency directory
27 | node_modules
28 |
29 | # Optional npm cache directory
30 | .npm
31 |
32 | # Optional REPL history
33 | .node_repl_history
34 |
35 | # Tests
36 | .nyc_output/
37 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - 12
4 | before_script:
5 | - psql -c 'create database test;' -U postgres
6 | before_install:
7 | - pip install --user codecov
8 | install:
9 | - npm install
10 | after_success:
11 | - codecov --file coverage/lcov.info --disable search
12 | env:
13 | global:
14 | - DATABASE_URL=postgres://postgres:@localhost/test
15 | addons:
16 | postgresql: "9.4"
17 | script:
18 | - npm run test
19 | after_success: npm run coverage
20 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | GNU GENERAL PUBLIC LICENSE
2 | Version 2, June 1991
3 |
4 | Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
5 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
6 | Everyone is permitted to copy and distribute verbatim copies
7 | of this license document, but changing it is not allowed.
8 |
9 | Preamble
10 |
11 | The licenses for most software are designed to take away your
12 | freedom to share and change it. By contrast, the GNU General Public
13 | License is intended to guarantee your freedom to share and change free
14 | software--to make sure the software is free for all its users. This
15 | General Public License applies to most of the Free Software
16 | Foundation's software and to any other program whose authors commit to
17 | using it. (Some other Free Software Foundation software is covered by
18 | the GNU Lesser General Public License instead.) You can apply it to
19 | your programs, too.
20 |
21 | When we speak of free software, we are referring to freedom, not
22 | price. Our General Public Licenses are designed to make sure that you
23 | have the freedom to distribute copies of free software (and charge for
24 | this service if you wish), that you receive source code or can get it
25 | if you want it, that you can change the software or use pieces of it
26 | in new free programs; and that you know you can do these things.
27 |
28 | To protect your rights, we need to make restrictions that forbid
29 | anyone to deny you these rights or to ask you to surrender the rights.
30 | These restrictions translate to certain responsibilities for you if you
31 | distribute copies of the software, or if you modify it.
32 |
33 | For example, if you distribute copies of such a program, whether
34 | gratis or for a fee, you must give the recipients all the rights that
35 | you have. You must make sure that they, too, receive or can get the
36 | source code. And you must show them these terms so they know their
37 | rights.
38 |
39 | We protect your rights with two steps: (1) copyright the software, and
40 | (2) offer you this license which gives you legal permission to copy,
41 | distribute and/or modify the software.
42 |
43 | Also, for each author's protection and ours, we want to make certain
44 | that everyone understands that there is no warranty for this free
45 | software. If the software is modified by someone else and passed on, we
46 | want its recipients to know that what they have is not the original, so
47 | that any problems introduced by others will not reflect on the original
48 | authors' reputations.
49 |
50 | Finally, any free program is threatened constantly by software
51 | patents. We wish to avoid the danger that redistributors of a free
52 | program will individually obtain patent licenses, in effect making the
53 | program proprietary. To prevent this, we have made it clear that any
54 | patent must be licensed for everyone's free use or not licensed at all.
55 |
56 | The precise terms and conditions for copying, distribution and
57 | modification follow.
58 |
59 | GNU GENERAL PUBLIC LICENSE
60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
61 |
62 | 0. This License applies to any program or other work which contains
63 | a notice placed by the copyright holder saying it may be distributed
64 | under the terms of this General Public License. The "Program", below,
65 | refers to any such program or work, and a "work based on the Program"
66 | means either the Program or any derivative work under copyright law:
67 | that is to say, a work containing the Program or a portion of it,
68 | either verbatim or with modifications and/or translated into another
69 | language. (Hereinafter, translation is included without limitation in
70 | the term "modification".) Each licensee is addressed as "you".
71 |
72 | Activities other than copying, distribution and modification are not
73 | covered by this License; they are outside its scope. The act of
74 | running the Program is not restricted, and the output from the Program
75 | is covered only if its contents constitute a work based on the
76 | Program (independent of having been made by running the Program).
77 | Whether that is true depends on what the Program does.
78 |
79 | 1. You may copy and distribute verbatim copies of the Program's
80 | source code as you receive it, in any medium, provided that you
81 | conspicuously and appropriately publish on each copy an appropriate
82 | copyright notice and disclaimer of warranty; keep intact all the
83 | notices that refer to this License and to the absence of any warranty;
84 | and give any other recipients of the Program a copy of this License
85 | along with the Program.
86 |
87 | You may charge a fee for the physical act of transferring a copy, and
88 | you may at your option offer warranty protection in exchange for a fee.
89 |
90 | 2. You may modify your copy or copies of the Program or any portion
91 | of it, thus forming a work based on the Program, and copy and
92 | distribute such modifications or work under the terms of Section 1
93 | above, provided that you also meet all of these conditions:
94 |
95 | a) You must cause the modified files to carry prominent notices
96 | stating that you changed the files and the date of any change.
97 |
98 | b) You must cause any work that you distribute or publish, that in
99 | whole or in part contains or is derived from the Program or any
100 | part thereof, to be licensed as a whole at no charge to all third
101 | parties under the terms of this License.
102 |
103 | c) If the modified program normally reads commands interactively
104 | when run, you must cause it, when started running for such
105 | interactive use in the most ordinary way, to print or display an
106 | announcement including an appropriate copyright notice and a
107 | notice that there is no warranty (or else, saying that you provide
108 | a warranty) and that users may redistribute the program under
109 | these conditions, and telling the user how to view a copy of this
110 | License. (Exception: if the Program itself is interactive but
111 | does not normally print such an announcement, your work based on
112 | the Program is not required to print an announcement.)
113 |
114 | These requirements apply to the modified work as a whole. If
115 | identifiable sections of that work are not derived from the Program,
116 | and can be reasonably considered independent and separate works in
117 | themselves, then this License, and its terms, do not apply to those
118 | sections when you distribute them as separate works. But when you
119 | distribute the same sections as part of a whole which is a work based
120 | on the Program, the distribution of the whole must be on the terms of
121 | this License, whose permissions for other licensees extend to the
122 | entire whole, and thus to each and every part regardless of who wrote it.
123 |
124 | Thus, it is not the intent of this section to claim rights or contest
125 | your rights to work written entirely by you; rather, the intent is to
126 | exercise the right to control the distribution of derivative or
127 | collective works based on the Program.
128 |
129 | In addition, mere aggregation of another work not based on the Program
130 | with the Program (or with a work based on the Program) on a volume of
131 | a storage or distribution medium does not bring the other work under
132 | the scope of this License.
133 |
134 | 3. You may copy and distribute the Program (or a work based on it,
135 | under Section 2) in object code or executable form under the terms of
136 | Sections 1 and 2 above provided that you also do one of the following:
137 |
138 | a) Accompany it with the complete corresponding machine-readable
139 | source code, which must be distributed under the terms of Sections
140 | 1 and 2 above on a medium customarily used for software interchange; or,
141 |
142 | b) Accompany it with a written offer, valid for at least three
143 | years, to give any third party, for a charge no more than your
144 | cost of physically performing source distribution, a complete
145 | machine-readable copy of the corresponding source code, to be
146 | distributed under the terms of Sections 1 and 2 above on a medium
147 | customarily used for software interchange; or,
148 |
149 | c) Accompany it with the information you received as to the offer
150 | to distribute corresponding source code. (This alternative is
151 | allowed only for noncommercial distribution and only if you
152 | received the program in object code or executable form with such
153 | an offer, in accord with Subsection b above.)
154 |
155 | The source code for a work means the preferred form of the work for
156 | making modifications to it. For an executable work, complete source
157 | code means all the source code for all modules it contains, plus any
158 | associated interface definition files, plus the scripts used to
159 | control compilation and installation of the executable. However, as a
160 | special exception, the source code distributed need not include
161 | anything that is normally distributed (in either source or binary
162 | form) with the major components (compiler, kernel, and so on) of the
163 | operating system on which the executable runs, unless that component
164 | itself accompanies the executable.
165 |
166 | If distribution of executable or object code is made by offering
167 | access to copy from a designated place, then offering equivalent
168 | access to copy the source code from the same place counts as
169 | distribution of the source code, even though third parties are not
170 | compelled to copy the source along with the object code.
171 |
172 | 4. You may not copy, modify, sublicense, or distribute the Program
173 | except as expressly provided under this License. Any attempt
174 | otherwise to copy, modify, sublicense or distribute the Program is
175 | void, and will automatically terminate your rights under this License.
176 | However, parties who have received copies, or rights, from you under
177 | this License will not have their licenses terminated so long as such
178 | parties remain in full compliance.
179 |
180 | 5. You are not required to accept this License, since you have not
181 | signed it. However, nothing else grants you permission to modify or
182 | distribute the Program or its derivative works. These actions are
183 | prohibited by law if you do not accept this License. Therefore, by
184 | modifying or distributing the Program (or any work based on the
185 | Program), you indicate your acceptance of this License to do so, and
186 | all its terms and conditions for copying, distributing or modifying
187 | the Program or works based on it.
188 |
189 | 6. Each time you redistribute the Program (or any work based on the
190 | Program), the recipient automatically receives a license from the
191 | original licensor to copy, distribute or modify the Program subject to
192 | these terms and conditions. You may not impose any further
193 | restrictions on the recipients' exercise of the rights granted herein.
194 | You are not responsible for enforcing compliance by third parties to
195 | this License.
196 |
197 | 7. If, as a consequence of a court judgment or allegation of patent
198 | infringement or for any other reason (not limited to patent issues),
199 | conditions are imposed on you (whether by court order, agreement or
200 | otherwise) that contradict the conditions of this License, they do not
201 | excuse you from the conditions of this License. If you cannot
202 | distribute so as to satisfy simultaneously your obligations under this
203 | License and any other pertinent obligations, then as a consequence you
204 | may not distribute the Program at all. For example, if a patent
205 | license would not permit royalty-free redistribution of the Program by
206 | all those who receive copies directly or indirectly through you, then
207 | the only way you could satisfy both it and this License would be to
208 | refrain entirely from distribution of the Program.
209 |
210 | If any portion of this section is held invalid or unenforceable under
211 | any particular circumstance, the balance of the section is intended to
212 | apply and the section as a whole is intended to apply in other
213 | circumstances.
214 |
215 | It is not the purpose of this section to induce you to infringe any
216 | patents or other property right claims or to contest validity of any
217 | such claims; this section has the sole purpose of protecting the
218 | integrity of the free software distribution system, which is
219 | implemented by public license practices. Many people have made
220 | generous contributions to the wide range of software distributed
221 | through that system in reliance on consistent application of that
222 | system; it is up to the author/donor to decide if he or she is willing
223 | to distribute software through any other system and a licensee cannot
224 | impose that choice.
225 |
226 | This section is intended to make thoroughly clear what is believed to
227 | be a consequence of the rest of this License.
228 |
229 | 8. If the distribution and/or use of the Program is restricted in
230 | certain countries either by patents or by copyrighted interfaces, the
231 | original copyright holder who places the Program under this License
232 | may add an explicit geographical distribution limitation excluding
233 | those countries, so that distribution is permitted only in or among
234 | countries not thus excluded. In such case, this License incorporates
235 | the limitation as if written in the body of this License.
236 |
237 | 9. The Free Software Foundation may publish revised and/or new versions
238 | of the General Public License from time to time. Such new versions will
239 | be similar in spirit to the present version, but may differ in detail to
240 | address new problems or concerns.
241 |
242 | Each version is given a distinguishing version number. If the Program
243 | specifies a version number of this License which applies to it and "any
244 | later version", you have the option of following the terms and conditions
245 | either of that version or of any later version published by the Free
246 | Software Foundation. If the Program does not specify a version number of
247 | this License, you may choose any version ever published by the Free Software
248 | Foundation.
249 |
250 | 10. If you wish to incorporate parts of the Program into other free
251 | programs whose distribution conditions are different, write to the author
252 | to ask for permission. For software which is copyrighted by the Free
253 | Software Foundation, write to the Free Software Foundation; we sometimes
254 | make exceptions for this. Our decision will be guided by the two goals
255 | of preserving the free status of all derivatives of our free software and
256 | of promoting the sharing and reuse of software generally.
257 |
258 | NO WARRANTY
259 |
260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
268 | REPAIR OR CORRECTION.
269 |
270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
278 | POSSIBILITY OF SUCH DAMAGES.
279 |
280 | END OF TERMS AND CONDITIONS
281 |
282 | How to Apply These Terms to Your New Programs
283 |
284 | If you develop a new program, and you want it to be of the greatest
285 | possible use to the public, the best way to achieve this is to make it
286 | free software which everyone can redistribute and change under these terms.
287 |
288 | To do so, attach the following notices to the program. It is safest
289 | to attach them to the start of each source file to most effectively
290 | convey the exclusion of warranty; and each file should have at least
291 | the "copyright" line and a pointer to where the full notice is found.
292 |
293 | {description}
294 | Copyright (C) {year} {fullname}
295 |
296 | This program is free software; you can redistribute it and/or modify
297 | it under the terms of the GNU General Public License as published by
298 | the Free Software Foundation; either version 2 of the License, or
299 | (at your option) any later version.
300 |
301 | This program is distributed in the hope that it will be useful,
302 | but WITHOUT ANY WARRANTY; without even the implied warranty of
303 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
304 | GNU General Public License for more details.
305 |
306 | You should have received a copy of the GNU General Public License along
307 | with this program; if not, write to the Free Software Foundation, Inc.,
308 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
309 |
310 | Also add information on how to contact you by electronic and paper mail.
311 |
312 | If the program is interactive, make it output a short notice like this
313 | when it starts in an interactive mode:
314 |
315 | Gnomovision version 69, Copyright (C) year name of author
316 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
317 | This is free software, and you are welcome to redistribute it
318 | under certain conditions; type `show c' for details.
319 |
320 | The hypothetical commands `show w' and `show c' should show the appropriate
321 | parts of the General Public License. Of course, the commands you use may
322 | be called something other than `show w' and `show c'; they could even be
323 | mouse-clicks or menu items--whatever suits your program.
324 |
325 | You should also get your employer (if you work as a programmer) or your
326 | school, if any, to sign a "copyright disclaimer" for the program, if
327 | necessary. Here is a sample; alter the names:
328 |
329 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program
330 | `Gnomovision' (which makes passes at compilers) written by James Hacker.
331 |
332 | {signature of Ty Coon}, 1 April 1989
333 | Ty Coon, President of Vice
334 |
335 | This General Public License does not permit incorporating your program into
336 | proprietary programs. If your program is a subroutine library, you may
337 | consider it more useful to permit linking proprietary applications with the
338 | library. If this is what you want to do, use the GNU Lesser General
339 | Public License instead of this License.
340 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Hapi Postgres Connection (for Hapi v.19)
2 |
3 | 
4 |
5 | Creates a PostgreSQL Connection available anywhere in your Hapi application.
6 |
7 | [](https://travis-ci.org/dwyl/hapi-postgres-connection)
8 | [](https://codecov.io/github/dwyl/hapi-postgres-connection?branch=master)
9 | [](https://codeclimate.com/github/dwyl/hapi-postgres-connection)
10 | [](https://david-dm.org/dwyl/hapi-postgres-connection#info=devDependencies)
11 | [](https://david-dm.org/dwyl/hapi-postgres-connection)
12 | [](https://www.npmjs.com/package/hapi-postgres-connection)
13 | [](https://gitter.im/dwyl/chat?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
14 |
15 | ## *Why*?
16 |
17 | You are building a PostgreSQL-backed Hapi.js Application
18 | but don't want to be initialising a connection to Postgres
19 | in your route handler because it's *slow* and can lead
20 | to [*interesting* errors](https://github.com/brianc/node-postgres/issues/725) ...
21 | so instead, you spend 1 minute to include a *tiny, tried & tested* plugin
22 | that makes Postgres available in all your route handlers.
23 |
24 | > Got *any questions*? *ask*!!
25 |
26 | ## *What*?
27 |
28 | This Hapi Plugin creates a Connection to PostgreSQL when your
29 | server starts up and makes it available *anywhere* in your app's
30 | route handlers via `request.pg.client`.
31 |
32 | When you shut down your server (*e.g. the `server.stop` in your tests*)
33 | the connection is closed for you.
34 |
35 | ### *One Dependency*: `node-postgres` *always up-to-date*
36 |
37 | This plugin uses
38 | the *most popular* (*actively maintained*) node PostgreSQL Client.
39 |
40 | ## *How*?
41 |
42 | ### 1. *Download/Install* from NPM or Yarn
43 |
44 | ```sh
45 | npm install hapi-postgres-connection --save
46 | ```
47 |
48 | or
49 |
50 | ```sh
51 | yarn add hapi-postgres-connection
52 | ```
53 |
54 | ### 2. *Initialize* the plugin in your Hapi Server
55 |
56 | in your server:
57 |
58 | ```js
59 | const HapiPostgresConnection = require('hapi-postgres-connection');
60 |
61 | await server.register({
62 | plugin: HapiPostgresConnection
63 | });
64 | ```
65 |
66 | Now *all* your route handlers have access to Postgres
67 | via: `request.pg.client`
68 |
69 | You also can also access Postgres through the `getCon` method on the Hapi Postgres Connection module: `const pg = require('hapi-postgres-connection').getCon();`
70 |
71 | This method may be useful when do not have access to the request
72 | object.
73 |
74 | ### 3. Using Postgres Client in your Route Handler
75 |
76 | ```js
77 | server.route({
78 | method: 'GET',
79 | path: '/',
80 | handler: async function(request, h) {
81 | let email = 'test@test.net';
82 | let select = `SELECT * FROM people WHERE ${email}`;
83 |
84 | try {
85 | const result = await request.pg.client.query(insertData);
86 | console.log(result);
87 | return h.response(result.rows[0]);
88 | } catch (err) {
89 | console.log(err);
90 | }
91 | }
92 | });
93 | ```
94 |
95 | ### *Required/Expected* Environment Variable: `DATABASE_URL`
96 |
97 | The plugin *expects* (*requires*) that you have an Environment Variable set
98 | for the Postgres Connection URL: `DATABASE_URL` in the format:
99 | `postgres://username:password@localhost/database`
100 |
101 | This is the default used by [*Heroku*](https://www.heroku.com/postgres)
102 | so we figured it made sense to keep it.
103 |
104 | > If you are unsure how to set the Environment Variable
105 | or why this is a *good idea*
106 | (*hard-coding values in your app is a really bad idea...*)
107 | please see:
108 |
109 | ### *Optional* Environment Variable: `DATABASE_SSL`
110 |
111 | If your database connection requires the use of SSL, you can set `DATABASE_SSL` environment
112 | variable to true and the pool connection will be done accordingly. This is required
113 | (for example) by databases hosted on [*Heroku*]
114 | (
115 |
116 | ## *Q*: Don't We need to Close the Postgres Connection?
117 |
118 | ***A***: No! The plugin handles closing the connection for you!
119 |
120 |
121 | ## *Implementation Detail*
122 |
123 | To run the tests *locally* you will need to have
124 | a running instance of PostgreSQL with a database called `test` available.
125 |
126 | Then set your `DATABASE_URL` Environment Variable, on my localhost its:
127 |
128 | ```sh
129 | export DATABASE_URL=postgres://postgres:@localhost/test
130 | ```
131 |
132 | (*the default `postgres` user does not have a password on localhost*)
133 |
134 | ## *Motivation?*
135 |
136 | We were doing postgres connections the *hard* way in our app(s) ...
137 | We knew there had to be a *better* way
138 | After a few hours of [googling and code-reviewing](https://github.com/dwyl/hapi-login-example-postgres/issues/6)
139 | we decided to write our own little plugin to simplify things.
140 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | const assert = require('assert');
2 | // if DATABASE_URL Environment Variable is unset halt the server.start
3 | assert(process.env.DATABASE_URL, 'Please set DATABASE_URL Env Variable');
4 |
5 | const pg = require('pg');
6 | const pkg = require('./package.json');
7 | const PG_CON = []; // this "global" is local to the plugin.
8 | let run_once = false;
9 |
10 | // create a pool
11 | const pool = new pg.Pool({
12 | connectionString: process.env.DATABASE_URL,
13 | ssl: process.env.DATABASE_SSL || false
14 | });
15 |
16 | const createPoolConnection = async () => {
17 | try {
18 | const client = await pool.connect();
19 | PG_CON.push({ client });
20 | } catch (err) {
21 | assert(!err, pkg.name + ' ERROR Connecting to PostgreSQL!');
22 | }
23 | }
24 |
25 | async function assign_connection (request, h) { // DRY
26 | request.pg = await module.exports.getCon();
27 | return h.continue;
28 | }
29 |
30 | const HapiPostgresConnection = {
31 | pkg,
32 | name: 'HapiPostgresConnection',
33 | version: '1.0.0',
34 | register: async function (server) {
35 | // connection using created pool
36 | await createPoolConnection();
37 | server.ext({
38 | type: 'onPreAuth',
39 | method: async function (request, h) {
40 | // each connection created is shut down when the server stops (e.g tests)
41 | if(!run_once) {
42 | run_once = true;
43 | server.events.on('stop', function () { // only one server.on('stop') listener
44 | PG_CON.forEach(async function (con) { // close all the connections
45 | await con.client.end();
46 | });
47 | server.log(['info', pkg.name], 'DB Connection Closed');
48 | });
49 | }
50 | return assign_connection(request, h);
51 | }
52 | });
53 | }
54 | };
55 |
56 | module.exports = HapiPostgresConnection;
57 |
58 | module.exports.getCon = async function () {
59 | if (!PG_CON[0]) {
60 | await createPoolConnection();
61 | return PG_CON[0];
62 | }
63 | return PG_CON[0];
64 | };
65 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "hapi-postgres-connection",
3 | "version": "6.5.1",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@babel/code-frame": {
8 | "version": "7.8.3",
9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
10 | "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
11 | "dev": true,
12 | "requires": {
13 | "@babel/highlight": "^7.8.3"
14 | }
15 | },
16 | "@babel/core": {
17 | "version": "7.9.0",
18 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz",
19 | "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==",
20 | "dev": true,
21 | "requires": {
22 | "@babel/code-frame": "^7.8.3",
23 | "@babel/generator": "^7.9.0",
24 | "@babel/helper-module-transforms": "^7.9.0",
25 | "@babel/helpers": "^7.9.0",
26 | "@babel/parser": "^7.9.0",
27 | "@babel/template": "^7.8.6",
28 | "@babel/traverse": "^7.9.0",
29 | "@babel/types": "^7.9.0",
30 | "convert-source-map": "^1.7.0",
31 | "debug": "^4.1.0",
32 | "gensync": "^1.0.0-beta.1",
33 | "json5": "^2.1.2",
34 | "lodash": "^4.17.13",
35 | "resolve": "^1.3.2",
36 | "semver": "^5.4.1",
37 | "source-map": "^0.5.0"
38 | },
39 | "dependencies": {
40 | "resolve": {
41 | "version": "1.16.1",
42 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.16.1.tgz",
43 | "integrity": "sha512-rmAglCSqWWMrrBv/XM6sW0NuRFiKViw/W4d9EbC4pt+49H8JwHy+mcGmALTEg504AUDcLTvb1T2q3E9AnmY+ig==",
44 | "dev": true,
45 | "requires": {
46 | "path-parse": "^1.0.6"
47 | }
48 | },
49 | "semver": {
50 | "version": "5.7.1",
51 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
52 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
53 | "dev": true
54 | },
55 | "source-map": {
56 | "version": "0.5.7",
57 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
58 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
59 | "dev": true
60 | }
61 | }
62 | },
63 | "@babel/generator": {
64 | "version": "7.9.5",
65 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz",
66 | "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==",
67 | "dev": true,
68 | "requires": {
69 | "@babel/types": "^7.9.5",
70 | "jsesc": "^2.5.1",
71 | "lodash": "^4.17.13",
72 | "source-map": "^0.5.0"
73 | },
74 | "dependencies": {
75 | "source-map": {
76 | "version": "0.5.7",
77 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
78 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
79 | "dev": true
80 | }
81 | }
82 | },
83 | "@babel/helper-environment-visitor": {
84 | "version": "7.22.20",
85 | "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
86 | "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
87 | "dev": true
88 | },
89 | "@babel/helper-hoist-variables": {
90 | "version": "7.22.5",
91 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
92 | "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
93 | "dev": true,
94 | "requires": {
95 | "@babel/types": "^7.22.5"
96 | },
97 | "dependencies": {
98 | "@babel/helper-validator-identifier": {
99 | "version": "7.22.20",
100 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
101 | "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
102 | "dev": true
103 | },
104 | "@babel/types": {
105 | "version": "7.23.0",
106 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
107 | "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
108 | "dev": true,
109 | "requires": {
110 | "@babel/helper-string-parser": "^7.22.5",
111 | "@babel/helper-validator-identifier": "^7.22.20",
112 | "to-fast-properties": "^2.0.0"
113 | }
114 | }
115 | }
116 | },
117 | "@babel/helper-member-expression-to-functions": {
118 | "version": "7.8.3",
119 | "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz",
120 | "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==",
121 | "dev": true,
122 | "requires": {
123 | "@babel/types": "^7.8.3"
124 | }
125 | },
126 | "@babel/helper-module-imports": {
127 | "version": "7.8.3",
128 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz",
129 | "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==",
130 | "dev": true,
131 | "requires": {
132 | "@babel/types": "^7.8.3"
133 | }
134 | },
135 | "@babel/helper-module-transforms": {
136 | "version": "7.9.0",
137 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz",
138 | "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==",
139 | "dev": true,
140 | "requires": {
141 | "@babel/helper-module-imports": "^7.8.3",
142 | "@babel/helper-replace-supers": "^7.8.6",
143 | "@babel/helper-simple-access": "^7.8.3",
144 | "@babel/helper-split-export-declaration": "^7.8.3",
145 | "@babel/template": "^7.8.6",
146 | "@babel/types": "^7.9.0",
147 | "lodash": "^4.17.13"
148 | }
149 | },
150 | "@babel/helper-optimise-call-expression": {
151 | "version": "7.8.3",
152 | "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz",
153 | "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==",
154 | "dev": true,
155 | "requires": {
156 | "@babel/types": "^7.8.3"
157 | }
158 | },
159 | "@babel/helper-replace-supers": {
160 | "version": "7.8.6",
161 | "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz",
162 | "integrity": "sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA==",
163 | "dev": true,
164 | "requires": {
165 | "@babel/helper-member-expression-to-functions": "^7.8.3",
166 | "@babel/helper-optimise-call-expression": "^7.8.3",
167 | "@babel/traverse": "^7.8.6",
168 | "@babel/types": "^7.8.6"
169 | }
170 | },
171 | "@babel/helper-simple-access": {
172 | "version": "7.8.3",
173 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz",
174 | "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==",
175 | "dev": true,
176 | "requires": {
177 | "@babel/template": "^7.8.3",
178 | "@babel/types": "^7.8.3"
179 | }
180 | },
181 | "@babel/helper-split-export-declaration": {
182 | "version": "7.8.3",
183 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
184 | "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
185 | "dev": true,
186 | "requires": {
187 | "@babel/types": "^7.8.3"
188 | }
189 | },
190 | "@babel/helper-string-parser": {
191 | "version": "7.22.5",
192 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
193 | "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
194 | "dev": true
195 | },
196 | "@babel/helper-validator-identifier": {
197 | "version": "7.9.5",
198 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz",
199 | "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==",
200 | "dev": true
201 | },
202 | "@babel/helpers": {
203 | "version": "7.9.2",
204 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.2.tgz",
205 | "integrity": "sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA==",
206 | "dev": true,
207 | "requires": {
208 | "@babel/template": "^7.8.3",
209 | "@babel/traverse": "^7.9.0",
210 | "@babel/types": "^7.9.0"
211 | }
212 | },
213 | "@babel/highlight": {
214 | "version": "7.9.0",
215 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz",
216 | "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==",
217 | "dev": true,
218 | "requires": {
219 | "@babel/helper-validator-identifier": "^7.9.0",
220 | "chalk": "^2.0.0",
221 | "js-tokens": "^4.0.0"
222 | },
223 | "dependencies": {
224 | "ansi-styles": {
225 | "version": "3.2.1",
226 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
227 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
228 | "dev": true,
229 | "requires": {
230 | "color-convert": "^1.9.0"
231 | }
232 | },
233 | "chalk": {
234 | "version": "2.4.2",
235 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
236 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
237 | "dev": true,
238 | "requires": {
239 | "ansi-styles": "^3.2.1",
240 | "escape-string-regexp": "^1.0.5",
241 | "supports-color": "^5.3.0"
242 | }
243 | },
244 | "has-flag": {
245 | "version": "3.0.0",
246 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
247 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
248 | "dev": true
249 | },
250 | "supports-color": {
251 | "version": "5.5.0",
252 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
253 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
254 | "dev": true,
255 | "requires": {
256 | "has-flag": "^3.0.0"
257 | }
258 | }
259 | }
260 | },
261 | "@babel/parser": {
262 | "version": "7.9.4",
263 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz",
264 | "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==",
265 | "dev": true
266 | },
267 | "@babel/template": {
268 | "version": "7.8.6",
269 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz",
270 | "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==",
271 | "dev": true,
272 | "requires": {
273 | "@babel/code-frame": "^7.8.3",
274 | "@babel/parser": "^7.8.6",
275 | "@babel/types": "^7.8.6"
276 | }
277 | },
278 | "@babel/traverse": {
279 | "version": "7.23.2",
280 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz",
281 | "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==",
282 | "dev": true,
283 | "requires": {
284 | "@babel/code-frame": "^7.22.13",
285 | "@babel/generator": "^7.23.0",
286 | "@babel/helper-environment-visitor": "^7.22.20",
287 | "@babel/helper-function-name": "^7.23.0",
288 | "@babel/helper-hoist-variables": "^7.22.5",
289 | "@babel/helper-split-export-declaration": "^7.22.6",
290 | "@babel/parser": "^7.23.0",
291 | "@babel/types": "^7.23.0",
292 | "debug": "^4.1.0",
293 | "globals": "^11.1.0"
294 | },
295 | "dependencies": {
296 | "@babel/code-frame": {
297 | "version": "7.22.13",
298 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
299 | "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
300 | "dev": true,
301 | "requires": {
302 | "@babel/highlight": "^7.22.13",
303 | "chalk": "^2.4.2"
304 | }
305 | },
306 | "@babel/generator": {
307 | "version": "7.23.0",
308 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz",
309 | "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==",
310 | "dev": true,
311 | "requires": {
312 | "@babel/types": "^7.23.0",
313 | "@jridgewell/gen-mapping": "^0.3.2",
314 | "@jridgewell/trace-mapping": "^0.3.17",
315 | "jsesc": "^2.5.1"
316 | }
317 | },
318 | "@babel/helper-function-name": {
319 | "version": "7.23.0",
320 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
321 | "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
322 | "dev": true,
323 | "requires": {
324 | "@babel/template": "^7.22.15",
325 | "@babel/types": "^7.23.0"
326 | }
327 | },
328 | "@babel/helper-split-export-declaration": {
329 | "version": "7.22.6",
330 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
331 | "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
332 | "dev": true,
333 | "requires": {
334 | "@babel/types": "^7.22.5"
335 | }
336 | },
337 | "@babel/helper-validator-identifier": {
338 | "version": "7.22.20",
339 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
340 | "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
341 | "dev": true
342 | },
343 | "@babel/highlight": {
344 | "version": "7.22.20",
345 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
346 | "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
347 | "dev": true,
348 | "requires": {
349 | "@babel/helper-validator-identifier": "^7.22.20",
350 | "chalk": "^2.4.2",
351 | "js-tokens": "^4.0.0"
352 | }
353 | },
354 | "@babel/parser": {
355 | "version": "7.23.0",
356 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz",
357 | "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==",
358 | "dev": true
359 | },
360 | "@babel/template": {
361 | "version": "7.22.15",
362 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
363 | "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
364 | "dev": true,
365 | "requires": {
366 | "@babel/code-frame": "^7.22.13",
367 | "@babel/parser": "^7.22.15",
368 | "@babel/types": "^7.22.15"
369 | }
370 | },
371 | "@babel/types": {
372 | "version": "7.23.0",
373 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
374 | "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
375 | "dev": true,
376 | "requires": {
377 | "@babel/helper-string-parser": "^7.22.5",
378 | "@babel/helper-validator-identifier": "^7.22.20",
379 | "to-fast-properties": "^2.0.0"
380 | }
381 | },
382 | "ansi-styles": {
383 | "version": "3.2.1",
384 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
385 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
386 | "dev": true,
387 | "requires": {
388 | "color-convert": "^1.9.0"
389 | }
390 | },
391 | "chalk": {
392 | "version": "2.4.2",
393 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
394 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
395 | "dev": true,
396 | "requires": {
397 | "ansi-styles": "^3.2.1",
398 | "escape-string-regexp": "^1.0.5",
399 | "supports-color": "^5.3.0"
400 | }
401 | }
402 | }
403 | },
404 | "@babel/types": {
405 | "version": "7.9.5",
406 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
407 | "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
408 | "dev": true,
409 | "requires": {
410 | "@babel/helper-validator-identifier": "^7.9.5",
411 | "lodash": "^4.17.13",
412 | "to-fast-properties": "^2.0.0"
413 | }
414 | },
415 | "@hapi/accept": {
416 | "version": "5.0.1",
417 | "resolved": "https://registry.npmjs.org/@hapi/accept/-/accept-5.0.1.tgz",
418 | "integrity": "sha512-fMr4d7zLzsAXo28PRRQPXR1o2Wmu+6z+VY1UzDp0iFo13Twj8WePakwXBiqn3E1aAlTpSNzCXdnnQXFhst8h8Q==",
419 | "dev": true,
420 | "requires": {
421 | "@hapi/boom": "9.x.x",
422 | "@hapi/hoek": "9.x.x"
423 | }
424 | },
425 | "@hapi/address": {
426 | "version": "4.0.1",
427 | "resolved": "https://registry.npmjs.org/@hapi/address/-/address-4.0.1.tgz",
428 | "integrity": "sha512-0oEP5UiyV4f3d6cBL8F3Z5S7iWSX39Knnl0lY8i+6gfmmIBj44JCBNtcMgwyS+5v7j3VYavNay0NFHDS+UGQcw==",
429 | "dev": true,
430 | "requires": {
431 | "@hapi/hoek": "^9.0.0"
432 | }
433 | },
434 | "@hapi/ammo": {
435 | "version": "5.0.1",
436 | "resolved": "https://registry.npmjs.org/@hapi/ammo/-/ammo-5.0.1.tgz",
437 | "integrity": "sha512-FbCNwcTbnQP4VYYhLNGZmA76xb2aHg9AMPiy18NZyWMG310P5KdFGyA9v2rm5ujrIny77dEEIkMOwl0Xv+fSSA==",
438 | "dev": true,
439 | "requires": {
440 | "@hapi/hoek": "9.x.x"
441 | }
442 | },
443 | "@hapi/b64": {
444 | "version": "5.0.0",
445 | "resolved": "https://registry.npmjs.org/@hapi/b64/-/b64-5.0.0.tgz",
446 | "integrity": "sha512-ngu0tSEmrezoiIaNGG6rRvKOUkUuDdf4XTPnONHGYfSGRmDqPZX5oJL6HAdKTo1UQHECbdB4OzhWrfgVppjHUw==",
447 | "dev": true,
448 | "requires": {
449 | "@hapi/hoek": "9.x.x"
450 | }
451 | },
452 | "@hapi/boom": {
453 | "version": "9.1.0",
454 | "resolved": "https://registry.npmjs.org/@hapi/boom/-/boom-9.1.0.tgz",
455 | "integrity": "sha512-4nZmpp4tXbm162LaZT45P7F7sgiem8dwAh2vHWT6XX24dozNjGMg6BvKCRvtCUcmcXqeMIUqWN8Rc5X8yKuROQ==",
456 | "dev": true,
457 | "requires": {
458 | "@hapi/hoek": "9.x.x"
459 | }
460 | },
461 | "@hapi/bounce": {
462 | "version": "2.0.0",
463 | "resolved": "https://registry.npmjs.org/@hapi/bounce/-/bounce-2.0.0.tgz",
464 | "integrity": "sha512-JesW92uyzOOyuzJKjoLHM1ThiOvHPOLDHw01YV8yh5nCso7sDwJho1h0Ad2N+E62bZyz46TG3xhAi/78Gsct6A==",
465 | "dev": true,
466 | "requires": {
467 | "@hapi/boom": "9.x.x",
468 | "@hapi/hoek": "9.x.x"
469 | }
470 | },
471 | "@hapi/bourne": {
472 | "version": "2.0.0",
473 | "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-2.0.0.tgz",
474 | "integrity": "sha512-WEezM1FWztfbzqIUbsDzFRVMxSoLy3HugVcux6KDDtTqzPsLE8NDRHfXvev66aH1i2oOKKar3/XDjbvh/OUBdg==",
475 | "dev": true
476 | },
477 | "@hapi/call": {
478 | "version": "8.0.0",
479 | "resolved": "https://registry.npmjs.org/@hapi/call/-/call-8.0.0.tgz",
480 | "integrity": "sha512-4xHIWWqaIDQlVU88XAnomACSoC7iWUfaLfdu2T7I0y+HFFwZUrKKGfwn6ik4kwKsJRMnOliG3UXsF8V/94+Lkg==",
481 | "dev": true,
482 | "requires": {
483 | "@hapi/address": "4.x.x",
484 | "@hapi/boom": "9.x.x",
485 | "@hapi/hoek": "9.x.x"
486 | }
487 | },
488 | "@hapi/catbox": {
489 | "version": "11.1.0",
490 | "resolved": "https://registry.npmjs.org/@hapi/catbox/-/catbox-11.1.0.tgz",
491 | "integrity": "sha512-FDEjfn26RZRyOEPeZdaAL7dRiAK5FOGuwTnTw0gxK30csAlKeOHsEnoIxnLIXx7QOS17eUaOk6+MiweWQM6Keg==",
492 | "dev": true,
493 | "requires": {
494 | "@hapi/boom": "9.x.x",
495 | "@hapi/hoek": "9.x.x",
496 | "@hapi/joi": "17.x.x",
497 | "@hapi/podium": "4.x.x"
498 | }
499 | },
500 | "@hapi/catbox-memory": {
501 | "version": "5.0.0",
502 | "resolved": "https://registry.npmjs.org/@hapi/catbox-memory/-/catbox-memory-5.0.0.tgz",
503 | "integrity": "sha512-ByuxVJPHNaXwLzbBv4GdTr6ccpe1nG+AfYt+8ftDWEJY7EWBWzD+Klhy5oPTDGzU26pNUh1e7fcYI1ILZRxAXQ==",
504 | "dev": true,
505 | "requires": {
506 | "@hapi/boom": "9.x.x",
507 | "@hapi/hoek": "9.x.x"
508 | }
509 | },
510 | "@hapi/content": {
511 | "version": "5.0.2",
512 | "resolved": "https://registry.npmjs.org/@hapi/content/-/content-5.0.2.tgz",
513 | "integrity": "sha512-mre4dl1ygd4ZyOH3tiYBrOUBzV7Pu/EOs8VLGf58vtOEECWed8Uuw6B4iR9AN/8uQt42tB04qpVaMyoMQh0oMw==",
514 | "dev": true,
515 | "requires": {
516 | "@hapi/boom": "9.x.x"
517 | }
518 | },
519 | "@hapi/cryptiles": {
520 | "version": "5.0.0",
521 | "resolved": "https://registry.npmjs.org/@hapi/cryptiles/-/cryptiles-5.0.0.tgz",
522 | "integrity": "sha512-Yq43ti9N51Z7jbm0Q7YVCcofA+4Gh5wsBX/jZ++Z+FM8GYfBQ1WmI9ufZSL+BVX8vRxzDkdQ2fKoG6cxOQlnVQ==",
523 | "dev": true,
524 | "requires": {
525 | "@hapi/boom": "9.x.x"
526 | }
527 | },
528 | "@hapi/file": {
529 | "version": "2.0.0",
530 | "resolved": "https://registry.npmjs.org/@hapi/file/-/file-2.0.0.tgz",
531 | "integrity": "sha512-WSrlgpvEqgPWkI18kkGELEZfXr0bYLtr16iIN4Krh9sRnzBZN6nnWxHFxtsnP684wueEySBbXPDg/WfA9xJdBQ==",
532 | "dev": true
533 | },
534 | "@hapi/formula": {
535 | "version": "2.0.0",
536 | "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-2.0.0.tgz",
537 | "integrity": "sha512-V87P8fv7PI0LH7LiVi8Lkf3x+KCO7pQozXRssAHNXXL9L1K+uyu4XypLXwxqVDKgyQai6qj3/KteNlrqDx4W5A==",
538 | "dev": true
539 | },
540 | "@hapi/hapi": {
541 | "version": "19.1.1",
542 | "resolved": "https://registry.npmjs.org/@hapi/hapi/-/hapi-19.1.1.tgz",
543 | "integrity": "sha512-rpQzSs0XsHSF7usM4qdJJ0Bcmhs9stWhUW3OiamW33bw4qL8q3uEgUKB9KH8ODmluCAkkXOQ0X0Dh9t94E5VIw==",
544 | "dev": true,
545 | "requires": {
546 | "@hapi/accept": "^5.0.1",
547 | "@hapi/ammo": "^5.0.1",
548 | "@hapi/boom": "9.x.x",
549 | "@hapi/bounce": "2.x.x",
550 | "@hapi/call": "8.x.x",
551 | "@hapi/catbox": "11.x.x",
552 | "@hapi/catbox-memory": "5.x.x",
553 | "@hapi/heavy": "7.x.x",
554 | "@hapi/hoek": "9.x.x",
555 | "@hapi/joi": "17.x.x",
556 | "@hapi/mimos": "5.x.x",
557 | "@hapi/podium": "4.x.x",
558 | "@hapi/shot": "5.x.x",
559 | "@hapi/somever": "3.x.x",
560 | "@hapi/statehood": "^7.0.2",
561 | "@hapi/subtext": "^7.0.3",
562 | "@hapi/teamwork": "4.x.x",
563 | "@hapi/topo": "5.x.x"
564 | }
565 | },
566 | "@hapi/heavy": {
567 | "version": "7.0.0",
568 | "resolved": "https://registry.npmjs.org/@hapi/heavy/-/heavy-7.0.0.tgz",
569 | "integrity": "sha512-n/nheUG6zNleWkjY+3fzV3VJIAumUCaa/WoTmurjqlYY5JgC5ZKOpvP7tWi8rXmKZhbcXgjH3fHFoM55LoBT7g==",
570 | "dev": true,
571 | "requires": {
572 | "@hapi/boom": "9.x.x",
573 | "@hapi/hoek": "9.x.x",
574 | "@hapi/joi": "17.x.x"
575 | }
576 | },
577 | "@hapi/hoek": {
578 | "version": "9.0.4",
579 | "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.0.4.tgz",
580 | "integrity": "sha512-EwaJS7RjoXUZ2cXXKZZxZqieGtc7RbvQhUy8FwDoMQtxWVi14tFjeFCYPZAM1mBCpOpiBpyaZbb9NeHc7eGKgw==",
581 | "dev": true
582 | },
583 | "@hapi/iron": {
584 | "version": "6.0.0",
585 | "resolved": "https://registry.npmjs.org/@hapi/iron/-/iron-6.0.0.tgz",
586 | "integrity": "sha512-zvGvWDufiTGpTJPG1Y/McN8UqWBu0k/xs/7l++HVU535NLHXsHhy54cfEMdW7EjwKfbBfM9Xy25FmTiobb7Hvw==",
587 | "dev": true,
588 | "requires": {
589 | "@hapi/b64": "5.x.x",
590 | "@hapi/boom": "9.x.x",
591 | "@hapi/bourne": "2.x.x",
592 | "@hapi/cryptiles": "5.x.x",
593 | "@hapi/hoek": "9.x.x"
594 | }
595 | },
596 | "@hapi/joi": {
597 | "version": "17.1.1",
598 | "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-17.1.1.tgz",
599 | "integrity": "sha512-p4DKeZAoeZW4g3u7ZeRo+vCDuSDgSvtsB/NpfjXEHTUjSeINAi/RrVOWiVQ1isaoLzMvFEhe8n5065mQq1AdQg==",
600 | "dev": true,
601 | "requires": {
602 | "@hapi/address": "^4.0.1",
603 | "@hapi/formula": "^2.0.0",
604 | "@hapi/hoek": "^9.0.0",
605 | "@hapi/pinpoint": "^2.0.0",
606 | "@hapi/topo": "^5.0.0"
607 | }
608 | },
609 | "@hapi/mimos": {
610 | "version": "5.0.0",
611 | "resolved": "https://registry.npmjs.org/@hapi/mimos/-/mimos-5.0.0.tgz",
612 | "integrity": "sha512-EVS6wJYeE73InTlPWt+2e3Izn319iIvffDreci3qDNT+t3lA5ylJ0/SoTaID8e0TPNUkHUSsgJZXEmLHvoYzrA==",
613 | "dev": true,
614 | "requires": {
615 | "@hapi/hoek": "9.x.x",
616 | "mime-db": "1.x.x"
617 | }
618 | },
619 | "@hapi/nigel": {
620 | "version": "4.0.0",
621 | "resolved": "https://registry.npmjs.org/@hapi/nigel/-/nigel-4.0.0.tgz",
622 | "integrity": "sha512-Bqs1pjcDnDQo/XGoiCCNHWTFcMzPbz3L4KU04njeFQMzzEmsojMRX7TX+PezQYCMKtHJOtMg0bHxZyMGqYtbSA==",
623 | "dev": true,
624 | "requires": {
625 | "@hapi/hoek": "9.x.x",
626 | "@hapi/vise": "4.x.x"
627 | }
628 | },
629 | "@hapi/pez": {
630 | "version": "5.0.2",
631 | "resolved": "https://registry.npmjs.org/@hapi/pez/-/pez-5.0.2.tgz",
632 | "integrity": "sha512-jr1lAm8mE7J2IBxvDIuDI1qy2aAsoaD2jxOUd/7JRg/Vmrzco8HdKhtz4fKk6KHU6zbbsAp5m5aSWWVTUrag7g==",
633 | "dev": true,
634 | "requires": {
635 | "@hapi/b64": "5.x.x",
636 | "@hapi/boom": "9.x.x",
637 | "@hapi/content": "^5.0.2",
638 | "@hapi/hoek": "9.x.x",
639 | "@hapi/nigel": "4.x.x"
640 | }
641 | },
642 | "@hapi/pinpoint": {
643 | "version": "2.0.0",
644 | "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.0.tgz",
645 | "integrity": "sha512-vzXR5MY7n4XeIvLpfl3HtE3coZYO4raKXW766R6DZw/6aLqR26iuZ109K7a0NtF2Db0jxqh7xz2AxkUwpUFybw==",
646 | "dev": true
647 | },
648 | "@hapi/podium": {
649 | "version": "4.1.0",
650 | "resolved": "https://registry.npmjs.org/@hapi/podium/-/podium-4.1.0.tgz",
651 | "integrity": "sha512-k/n0McAu8PvonfQRLyKKUvvdb+Gh/O5iAeIwv535Hpxw9B1qZcrYdZyWtHZ8O5PkA9/b/Kk+BdvtgcxeKMB/2g==",
652 | "dev": true,
653 | "requires": {
654 | "@hapi/hoek": "9.x.x",
655 | "@hapi/joi": "17.x.x",
656 | "@hapi/teamwork": "4.x.x"
657 | }
658 | },
659 | "@hapi/shot": {
660 | "version": "5.0.0",
661 | "resolved": "https://registry.npmjs.org/@hapi/shot/-/shot-5.0.0.tgz",
662 | "integrity": "sha512-JXddnJkRh3Xhv9lY1tA+TSIUaoODKbdNIPL/M8WFvFQKOttmGaDeqTW5e8Gf01LtLI7L5DraLMULHjrK1+YNFg==",
663 | "dev": true,
664 | "requires": {
665 | "@hapi/hoek": "9.x.x",
666 | "@hapi/joi": "17.x.x"
667 | }
668 | },
669 | "@hapi/somever": {
670 | "version": "3.0.0",
671 | "resolved": "https://registry.npmjs.org/@hapi/somever/-/somever-3.0.0.tgz",
672 | "integrity": "sha512-Upw/kmKotC9iEmK4y047HMYe4LDKsE5NWfjgX41XNKmFvxsQL7OiaCWVhuyyhU0ShDGBfIAnCH8jZr49z/JzZA==",
673 | "dev": true,
674 | "requires": {
675 | "@hapi/bounce": "2.x.x",
676 | "@hapi/hoek": "9.x.x"
677 | }
678 | },
679 | "@hapi/statehood": {
680 | "version": "7.0.2",
681 | "resolved": "https://registry.npmjs.org/@hapi/statehood/-/statehood-7.0.2.tgz",
682 | "integrity": "sha512-+0VNxysQu+UYzkfvAXq3X4aN65TnUwiR7gsq2cQ/4Rq26nCJjHAfrkYReEeshU2hPmJ3m5QuaBzyDqRm8WOpyg==",
683 | "dev": true,
684 | "requires": {
685 | "@hapi/boom": "9.x.x",
686 | "@hapi/bounce": "2.x.x",
687 | "@hapi/bourne": "2.x.x",
688 | "@hapi/cryptiles": "5.x.x",
689 | "@hapi/hoek": "9.x.x",
690 | "@hapi/iron": "6.x.x",
691 | "@hapi/joi": "17.x.x"
692 | }
693 | },
694 | "@hapi/subtext": {
695 | "version": "7.0.3",
696 | "resolved": "https://registry.npmjs.org/@hapi/subtext/-/subtext-7.0.3.tgz",
697 | "integrity": "sha512-CekDizZkDGERJ01C0+TzHlKtqdXZxzSWTOaH6THBrbOHnsr3GY+yiMZC+AfNCypfE17RaIakGIAbpL2Tk1z2+A==",
698 | "dev": true,
699 | "requires": {
700 | "@hapi/boom": "9.x.x",
701 | "@hapi/bourne": "2.x.x",
702 | "@hapi/content": "^5.0.2",
703 | "@hapi/file": "2.x.x",
704 | "@hapi/hoek": "9.x.x",
705 | "@hapi/pez": "^5.0.1",
706 | "@hapi/wreck": "17.x.x"
707 | }
708 | },
709 | "@hapi/teamwork": {
710 | "version": "4.0.0",
711 | "resolved": "https://registry.npmjs.org/@hapi/teamwork/-/teamwork-4.0.0.tgz",
712 | "integrity": "sha512-V6xYOrr5aFv/IJqNPneaYCu8vuGTKisamqHVRS3JJnbZr18TrpXdsJOYk9pjPhFti+M2YETPebQLUr820N5NoQ==",
713 | "dev": true
714 | },
715 | "@hapi/topo": {
716 | "version": "5.0.0",
717 | "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.0.0.tgz",
718 | "integrity": "sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw==",
719 | "dev": true,
720 | "requires": {
721 | "@hapi/hoek": "^9.0.0"
722 | }
723 | },
724 | "@hapi/vise": {
725 | "version": "4.0.0",
726 | "resolved": "https://registry.npmjs.org/@hapi/vise/-/vise-4.0.0.tgz",
727 | "integrity": "sha512-eYyLkuUiFZTer59h+SGy7hUm+qE9p+UemePTHLlIWppEd+wExn3Df5jO04bFQTm7nleF5V8CtuYQYb+VFpZ6Sg==",
728 | "dev": true,
729 | "requires": {
730 | "@hapi/hoek": "9.x.x"
731 | }
732 | },
733 | "@hapi/wreck": {
734 | "version": "17.0.0",
735 | "resolved": "https://registry.npmjs.org/@hapi/wreck/-/wreck-17.0.0.tgz",
736 | "integrity": "sha512-d8lqCinbKyDByn7GzJDRDbitddhIEydNm44UcAMejfhEH3o4IYvKYq6K8cAqXbilXPuvZc0ErlUOg9SDdgRtMw==",
737 | "dev": true,
738 | "requires": {
739 | "@hapi/boom": "9.x.x",
740 | "@hapi/bourne": "2.x.x",
741 | "@hapi/hoek": "9.x.x"
742 | }
743 | },
744 | "@istanbuljs/load-nyc-config": {
745 | "version": "1.0.0",
746 | "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.0.0.tgz",
747 | "integrity": "sha512-ZR0rq/f/E4f4XcgnDvtMWXCUJpi8eO0rssVhmztsZqLIEFA9UUP9zmpE0VxlM+kv/E1ul2I876Fwil2ayptDVg==",
748 | "dev": true,
749 | "requires": {
750 | "camelcase": "^5.3.1",
751 | "find-up": "^4.1.0",
752 | "js-yaml": "^3.13.1",
753 | "resolve-from": "^5.0.0"
754 | },
755 | "dependencies": {
756 | "find-up": {
757 | "version": "4.1.0",
758 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
759 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
760 | "dev": true,
761 | "requires": {
762 | "locate-path": "^5.0.0",
763 | "path-exists": "^4.0.0"
764 | }
765 | },
766 | "locate-path": {
767 | "version": "5.0.0",
768 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
769 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
770 | "dev": true,
771 | "requires": {
772 | "p-locate": "^4.1.0"
773 | }
774 | },
775 | "p-limit": {
776 | "version": "2.3.0",
777 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
778 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
779 | "dev": true,
780 | "requires": {
781 | "p-try": "^2.0.0"
782 | }
783 | },
784 | "p-locate": {
785 | "version": "4.1.0",
786 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
787 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
788 | "dev": true,
789 | "requires": {
790 | "p-limit": "^2.2.0"
791 | }
792 | },
793 | "p-try": {
794 | "version": "2.2.0",
795 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
796 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
797 | "dev": true
798 | },
799 | "path-exists": {
800 | "version": "4.0.0",
801 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
802 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
803 | "dev": true
804 | }
805 | }
806 | },
807 | "@istanbuljs/schema": {
808 | "version": "0.1.2",
809 | "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz",
810 | "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==",
811 | "dev": true
812 | },
813 | "@jridgewell/gen-mapping": {
814 | "version": "0.3.3",
815 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
816 | "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
817 | "dev": true,
818 | "requires": {
819 | "@jridgewell/set-array": "^1.0.1",
820 | "@jridgewell/sourcemap-codec": "^1.4.10",
821 | "@jridgewell/trace-mapping": "^0.3.9"
822 | }
823 | },
824 | "@jridgewell/resolve-uri": {
825 | "version": "3.1.1",
826 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
827 | "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
828 | "dev": true
829 | },
830 | "@jridgewell/set-array": {
831 | "version": "1.1.2",
832 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
833 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
834 | "dev": true
835 | },
836 | "@jridgewell/sourcemap-codec": {
837 | "version": "1.4.15",
838 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
839 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
840 | "dev": true
841 | },
842 | "@jridgewell/trace-mapping": {
843 | "version": "0.3.20",
844 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz",
845 | "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==",
846 | "dev": true,
847 | "requires": {
848 | "@jridgewell/resolve-uri": "^3.1.0",
849 | "@jridgewell/sourcemap-codec": "^1.4.14"
850 | }
851 | },
852 | "@tootallnate/once": {
853 | "version": "1.1.2",
854 | "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
855 | "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
856 | "dev": true
857 | },
858 | "@types/color-name": {
859 | "version": "1.1.1",
860 | "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
861 | "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
862 | "dev": true
863 | },
864 | "agent-base": {
865 | "version": "6.0.2",
866 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
867 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
868 | "dev": true,
869 | "requires": {
870 | "debug": "4"
871 | }
872 | },
873 | "aggregate-error": {
874 | "version": "3.0.1",
875 | "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz",
876 | "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==",
877 | "dev": true,
878 | "requires": {
879 | "clean-stack": "^2.0.0",
880 | "indent-string": "^4.0.0"
881 | }
882 | },
883 | "ansi-regex": {
884 | "version": "2.1.1",
885 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
886 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
887 | "dev": true
888 | },
889 | "ansi-styles": {
890 | "version": "2.2.1",
891 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
892 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
893 | "dev": true
894 | },
895 | "append-transform": {
896 | "version": "2.0.0",
897 | "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz",
898 | "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==",
899 | "dev": true,
900 | "requires": {
901 | "default-require-extensions": "^3.0.0"
902 | }
903 | },
904 | "archy": {
905 | "version": "1.0.0",
906 | "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
907 | "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
908 | "dev": true
909 | },
910 | "argparse": {
911 | "version": "1.0.10",
912 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
913 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
914 | "dev": true,
915 | "requires": {
916 | "sprintf-js": "~1.0.2"
917 | }
918 | },
919 | "argv": {
920 | "version": "0.0.2",
921 | "resolved": "https://registry.npmjs.org/argv/-/argv-0.0.2.tgz",
922 | "integrity": "sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas=",
923 | "dev": true
924 | },
925 | "balanced-match": {
926 | "version": "1.0.0",
927 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
928 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
929 | "dev": true
930 | },
931 | "brace-expansion": {
932 | "version": "1.1.11",
933 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
934 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
935 | "dev": true,
936 | "requires": {
937 | "balanced-match": "^1.0.0",
938 | "concat-map": "0.0.1"
939 | }
940 | },
941 | "buffer-shims": {
942 | "version": "1.0.0",
943 | "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz",
944 | "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=",
945 | "dev": true
946 | },
947 | "buffer-writer": {
948 | "version": "2.0.0",
949 | "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz",
950 | "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw=="
951 | },
952 | "caching-transform": {
953 | "version": "4.0.0",
954 | "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz",
955 | "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==",
956 | "dev": true,
957 | "requires": {
958 | "hasha": "^5.0.0",
959 | "make-dir": "^3.0.0",
960 | "package-hash": "^4.0.0",
961 | "write-file-atomic": "^3.0.0"
962 | },
963 | "dependencies": {
964 | "make-dir": {
965 | "version": "3.1.0",
966 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
967 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
968 | "dev": true,
969 | "requires": {
970 | "semver": "^6.0.0"
971 | }
972 | },
973 | "semver": {
974 | "version": "6.3.0",
975 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
976 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
977 | "dev": true
978 | }
979 | }
980 | },
981 | "callsite": {
982 | "version": "1.0.0",
983 | "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
984 | "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=",
985 | "dev": true
986 | },
987 | "camelcase": {
988 | "version": "5.3.1",
989 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
990 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
991 | "dev": true
992 | },
993 | "chalk": {
994 | "version": "1.1.3",
995 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
996 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
997 | "dev": true,
998 | "requires": {
999 | "ansi-styles": "^2.2.1",
1000 | "escape-string-regexp": "^1.0.2",
1001 | "has-ansi": "^2.0.0",
1002 | "strip-ansi": "^3.0.0",
1003 | "supports-color": "^2.0.0"
1004 | },
1005 | "dependencies": {
1006 | "supports-color": {
1007 | "version": "2.0.0",
1008 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
1009 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
1010 | "dev": true
1011 | }
1012 | }
1013 | },
1014 | "clean-stack": {
1015 | "version": "2.2.0",
1016 | "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
1017 | "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
1018 | "dev": true
1019 | },
1020 | "cliui": {
1021 | "version": "6.0.0",
1022 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
1023 | "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
1024 | "dev": true,
1025 | "requires": {
1026 | "string-width": "^4.2.0",
1027 | "strip-ansi": "^6.0.0",
1028 | "wrap-ansi": "^6.2.0"
1029 | },
1030 | "dependencies": {
1031 | "ansi-regex": {
1032 | "version": "5.0.0",
1033 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
1034 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
1035 | "dev": true
1036 | },
1037 | "strip-ansi": {
1038 | "version": "6.0.0",
1039 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
1040 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
1041 | "dev": true,
1042 | "requires": {
1043 | "ansi-regex": "^5.0.0"
1044 | }
1045 | }
1046 | }
1047 | },
1048 | "codecov": {
1049 | "version": "3.7.1",
1050 | "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.7.1.tgz",
1051 | "integrity": "sha512-JHWxyPTkMLLJn9SmKJnwAnvY09kg2Os2+Ux+GG7LwZ9g8gzDDISpIN5wAsH1UBaafA/yGcd3KofMaorE8qd6Lw==",
1052 | "dev": true,
1053 | "requires": {
1054 | "argv": "0.0.2",
1055 | "ignore-walk": "3.0.3",
1056 | "js-yaml": "3.13.1",
1057 | "teeny-request": "6.0.1",
1058 | "urlgrey": "0.4.4"
1059 | }
1060 | },
1061 | "color-convert": {
1062 | "version": "1.9.3",
1063 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
1064 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
1065 | "dev": true,
1066 | "requires": {
1067 | "color-name": "1.1.3"
1068 | }
1069 | },
1070 | "color-name": {
1071 | "version": "1.1.3",
1072 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
1073 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
1074 | "dev": true
1075 | },
1076 | "commondir": {
1077 | "version": "1.0.1",
1078 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
1079 | "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
1080 | "dev": true
1081 | },
1082 | "concat-map": {
1083 | "version": "0.0.1",
1084 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
1085 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
1086 | "dev": true
1087 | },
1088 | "convert-source-map": {
1089 | "version": "1.7.0",
1090 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
1091 | "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
1092 | "dev": true,
1093 | "requires": {
1094 | "safe-buffer": "~5.1.1"
1095 | }
1096 | },
1097 | "core-util-is": {
1098 | "version": "1.0.2",
1099 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
1100 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
1101 | "dev": true
1102 | },
1103 | "cross-spawn": {
1104 | "version": "7.0.2",
1105 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz",
1106 | "integrity": "sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==",
1107 | "dev": true,
1108 | "requires": {
1109 | "path-key": "^3.1.0",
1110 | "shebang-command": "^2.0.0",
1111 | "which": "^2.0.1"
1112 | },
1113 | "dependencies": {
1114 | "which": {
1115 | "version": "2.0.2",
1116 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
1117 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
1118 | "dev": true,
1119 | "requires": {
1120 | "isexe": "^2.0.0"
1121 | }
1122 | }
1123 | }
1124 | },
1125 | "debug": {
1126 | "version": "4.1.1",
1127 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
1128 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
1129 | "dev": true,
1130 | "requires": {
1131 | "ms": "^2.1.1"
1132 | }
1133 | },
1134 | "decache": {
1135 | "version": "4.5.1",
1136 | "resolved": "https://registry.npmjs.org/decache/-/decache-4.5.1.tgz",
1137 | "integrity": "sha512-5J37nATc6FmOTLbcsr9qx7Nm28qQyg1SK4xyEHqM0IBkNhWFp0Sm+vKoWYHD8wq+OUEb9jLyaKFfzzd1A9hcoA==",
1138 | "dev": true,
1139 | "requires": {
1140 | "callsite": "^1.0.0"
1141 | }
1142 | },
1143 | "decamelize": {
1144 | "version": "1.2.0",
1145 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
1146 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
1147 | "dev": true
1148 | },
1149 | "deep-equal": {
1150 | "version": "1.1.1",
1151 | "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz",
1152 | "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==",
1153 | "dev": true,
1154 | "requires": {
1155 | "is-arguments": "^1.0.4",
1156 | "is-date-object": "^1.0.1",
1157 | "is-regex": "^1.0.4",
1158 | "object-is": "^1.0.1",
1159 | "object-keys": "^1.1.1",
1160 | "regexp.prototype.flags": "^1.2.0"
1161 | }
1162 | },
1163 | "default-require-extensions": {
1164 | "version": "3.0.0",
1165 | "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz",
1166 | "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==",
1167 | "dev": true,
1168 | "requires": {
1169 | "strip-bom": "^4.0.0"
1170 | }
1171 | },
1172 | "define-properties": {
1173 | "version": "1.1.3",
1174 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
1175 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
1176 | "dev": true,
1177 | "requires": {
1178 | "object-keys": "^1.0.12"
1179 | }
1180 | },
1181 | "defined": {
1182 | "version": "1.0.0",
1183 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
1184 | "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
1185 | "dev": true
1186 | },
1187 | "dotignore": {
1188 | "version": "0.1.2",
1189 | "resolved": "https://registry.npmjs.org/dotignore/-/dotignore-0.1.2.tgz",
1190 | "integrity": "sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==",
1191 | "dev": true,
1192 | "requires": {
1193 | "minimatch": "^3.0.4"
1194 | }
1195 | },
1196 | "duplexer": {
1197 | "version": "0.1.1",
1198 | "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
1199 | "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
1200 | "dev": true
1201 | },
1202 | "emoji-regex": {
1203 | "version": "8.0.0",
1204 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
1205 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
1206 | "dev": true
1207 | },
1208 | "es-abstract": {
1209 | "version": "1.17.5",
1210 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
1211 | "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
1212 | "dev": true,
1213 | "requires": {
1214 | "es-to-primitive": "^1.2.1",
1215 | "function-bind": "^1.1.1",
1216 | "has": "^1.0.3",
1217 | "has-symbols": "^1.0.1",
1218 | "is-callable": "^1.1.5",
1219 | "is-regex": "^1.0.5",
1220 | "object-inspect": "^1.7.0",
1221 | "object-keys": "^1.1.1",
1222 | "object.assign": "^4.1.0",
1223 | "string.prototype.trimleft": "^2.1.1",
1224 | "string.prototype.trimright": "^2.1.1"
1225 | }
1226 | },
1227 | "es-to-primitive": {
1228 | "version": "1.2.1",
1229 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
1230 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
1231 | "dev": true,
1232 | "requires": {
1233 | "is-callable": "^1.1.4",
1234 | "is-date-object": "^1.0.1",
1235 | "is-symbol": "^1.0.2"
1236 | }
1237 | },
1238 | "es6-error": {
1239 | "version": "4.1.1",
1240 | "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
1241 | "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==",
1242 | "dev": true
1243 | },
1244 | "escape-string-regexp": {
1245 | "version": "1.0.5",
1246 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
1247 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
1248 | "dev": true
1249 | },
1250 | "figures": {
1251 | "version": "1.7.0",
1252 | "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
1253 | "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
1254 | "dev": true,
1255 | "requires": {
1256 | "escape-string-regexp": "^1.0.5",
1257 | "object-assign": "^4.1.0"
1258 | }
1259 | },
1260 | "find-cache-dir": {
1261 | "version": "3.3.1",
1262 | "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz",
1263 | "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==",
1264 | "dev": true,
1265 | "requires": {
1266 | "commondir": "^1.0.1",
1267 | "make-dir": "^3.0.2",
1268 | "pkg-dir": "^4.1.0"
1269 | },
1270 | "dependencies": {
1271 | "make-dir": {
1272 | "version": "3.1.0",
1273 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
1274 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
1275 | "dev": true,
1276 | "requires": {
1277 | "semver": "^6.0.0"
1278 | }
1279 | },
1280 | "semver": {
1281 | "version": "6.3.0",
1282 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
1283 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
1284 | "dev": true
1285 | }
1286 | }
1287 | },
1288 | "for-each": {
1289 | "version": "0.3.3",
1290 | "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
1291 | "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
1292 | "dev": true,
1293 | "requires": {
1294 | "is-callable": "^1.1.3"
1295 | }
1296 | },
1297 | "foreground-child": {
1298 | "version": "2.0.0",
1299 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz",
1300 | "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==",
1301 | "dev": true,
1302 | "requires": {
1303 | "cross-spawn": "^7.0.0",
1304 | "signal-exit": "^3.0.2"
1305 | }
1306 | },
1307 | "fromentries": {
1308 | "version": "1.2.0",
1309 | "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.2.0.tgz",
1310 | "integrity": "sha512-33X7H/wdfO99GdRLLgkjUrD4geAFdq/Uv0kl3HD4da6HDixd2GUg8Mw7dahLCV9r/EARkmtYBB6Tch4EEokFTQ==",
1311 | "dev": true
1312 | },
1313 | "fs.realpath": {
1314 | "version": "1.0.0",
1315 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
1316 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
1317 | "dev": true
1318 | },
1319 | "function-bind": {
1320 | "version": "1.1.1",
1321 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
1322 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
1323 | "dev": true
1324 | },
1325 | "gensync": {
1326 | "version": "1.0.0-beta.1",
1327 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz",
1328 | "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==",
1329 | "dev": true
1330 | },
1331 | "get-caller-file": {
1332 | "version": "2.0.5",
1333 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
1334 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
1335 | "dev": true
1336 | },
1337 | "globals": {
1338 | "version": "11.12.0",
1339 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
1340 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
1341 | "dev": true
1342 | },
1343 | "graceful-fs": {
1344 | "version": "4.2.3",
1345 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
1346 | "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
1347 | "dev": true
1348 | },
1349 | "has": {
1350 | "version": "1.0.3",
1351 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
1352 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
1353 | "dev": true,
1354 | "requires": {
1355 | "function-bind": "^1.1.1"
1356 | }
1357 | },
1358 | "has-ansi": {
1359 | "version": "2.0.0",
1360 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
1361 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
1362 | "dev": true,
1363 | "requires": {
1364 | "ansi-regex": "^2.0.0"
1365 | }
1366 | },
1367 | "has-flag": {
1368 | "version": "3.0.0",
1369 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
1370 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
1371 | "dev": true
1372 | },
1373 | "has-symbols": {
1374 | "version": "1.0.1",
1375 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
1376 | "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
1377 | "dev": true
1378 | },
1379 | "hasha": {
1380 | "version": "5.2.0",
1381 | "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.0.tgz",
1382 | "integrity": "sha512-2W+jKdQbAdSIrggA8Q35Br8qKadTrqCTC8+XZvBWepKDK6m9XkX6Iz1a2yh2KP01kzAR/dpuMeUnocoLYDcskw==",
1383 | "dev": true,
1384 | "requires": {
1385 | "is-stream": "^2.0.0",
1386 | "type-fest": "^0.8.0"
1387 | }
1388 | },
1389 | "html-escaper": {
1390 | "version": "2.0.2",
1391 | "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
1392 | "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
1393 | "dev": true
1394 | },
1395 | "http-proxy-agent": {
1396 | "version": "4.0.1",
1397 | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
1398 | "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
1399 | "dev": true,
1400 | "requires": {
1401 | "@tootallnate/once": "1",
1402 | "agent-base": "6",
1403 | "debug": "4"
1404 | }
1405 | },
1406 | "https-proxy-agent": {
1407 | "version": "4.0.0",
1408 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz",
1409 | "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==",
1410 | "dev": true,
1411 | "requires": {
1412 | "agent-base": "5",
1413 | "debug": "4"
1414 | },
1415 | "dependencies": {
1416 | "agent-base": {
1417 | "version": "5.1.1",
1418 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz",
1419 | "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==",
1420 | "dev": true
1421 | }
1422 | }
1423 | },
1424 | "ignore-walk": {
1425 | "version": "3.0.3",
1426 | "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz",
1427 | "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==",
1428 | "dev": true,
1429 | "requires": {
1430 | "minimatch": "^3.0.4"
1431 | }
1432 | },
1433 | "imurmurhash": {
1434 | "version": "0.1.4",
1435 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
1436 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
1437 | "dev": true
1438 | },
1439 | "indent-string": {
1440 | "version": "4.0.0",
1441 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
1442 | "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
1443 | "dev": true
1444 | },
1445 | "inflight": {
1446 | "version": "1.0.6",
1447 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1448 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
1449 | "dev": true,
1450 | "requires": {
1451 | "once": "^1.3.0",
1452 | "wrappy": "1"
1453 | }
1454 | },
1455 | "inherits": {
1456 | "version": "2.0.4",
1457 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
1458 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
1459 | "dev": true
1460 | },
1461 | "is-arguments": {
1462 | "version": "1.0.4",
1463 | "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz",
1464 | "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==",
1465 | "dev": true
1466 | },
1467 | "is-callable": {
1468 | "version": "1.1.5",
1469 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
1470 | "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==",
1471 | "dev": true
1472 | },
1473 | "is-date-object": {
1474 | "version": "1.0.2",
1475 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
1476 | "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==",
1477 | "dev": true
1478 | },
1479 | "is-finite": {
1480 | "version": "1.1.0",
1481 | "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz",
1482 | "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==",
1483 | "dev": true
1484 | },
1485 | "is-fullwidth-code-point": {
1486 | "version": "3.0.0",
1487 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
1488 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
1489 | "dev": true
1490 | },
1491 | "is-regex": {
1492 | "version": "1.0.5",
1493 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
1494 | "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
1495 | "dev": true,
1496 | "requires": {
1497 | "has": "^1.0.3"
1498 | }
1499 | },
1500 | "is-stream": {
1501 | "version": "2.0.0",
1502 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
1503 | "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
1504 | "dev": true
1505 | },
1506 | "is-symbol": {
1507 | "version": "1.0.3",
1508 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
1509 | "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
1510 | "dev": true,
1511 | "requires": {
1512 | "has-symbols": "^1.0.1"
1513 | }
1514 | },
1515 | "is-typedarray": {
1516 | "version": "1.0.0",
1517 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
1518 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
1519 | "dev": true
1520 | },
1521 | "is-windows": {
1522 | "version": "1.0.2",
1523 | "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
1524 | "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
1525 | "dev": true
1526 | },
1527 | "isarray": {
1528 | "version": "1.0.0",
1529 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
1530 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
1531 | "dev": true
1532 | },
1533 | "isexe": {
1534 | "version": "2.0.0",
1535 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1536 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
1537 | "dev": true
1538 | },
1539 | "istanbul-lib-coverage": {
1540 | "version": "3.0.0",
1541 | "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz",
1542 | "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==",
1543 | "dev": true
1544 | },
1545 | "istanbul-lib-hook": {
1546 | "version": "3.0.0",
1547 | "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz",
1548 | "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==",
1549 | "dev": true,
1550 | "requires": {
1551 | "append-transform": "^2.0.0"
1552 | }
1553 | },
1554 | "istanbul-lib-instrument": {
1555 | "version": "4.0.1",
1556 | "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.1.tgz",
1557 | "integrity": "sha512-imIchxnodll7pvQBYOqUu88EufLCU56LMeFPZZM/fJZ1irYcYdqroaV+ACK1Ila8ls09iEYArp+nqyC6lW1Vfg==",
1558 | "dev": true,
1559 | "requires": {
1560 | "@babel/core": "^7.7.5",
1561 | "@babel/parser": "^7.7.5",
1562 | "@babel/template": "^7.7.4",
1563 | "@babel/traverse": "^7.7.4",
1564 | "@istanbuljs/schema": "^0.1.2",
1565 | "istanbul-lib-coverage": "^3.0.0",
1566 | "semver": "^6.3.0"
1567 | },
1568 | "dependencies": {
1569 | "semver": {
1570 | "version": "6.3.0",
1571 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
1572 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
1573 | "dev": true
1574 | }
1575 | }
1576 | },
1577 | "istanbul-lib-processinfo": {
1578 | "version": "2.0.2",
1579 | "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz",
1580 | "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==",
1581 | "dev": true,
1582 | "requires": {
1583 | "archy": "^1.0.0",
1584 | "cross-spawn": "^7.0.0",
1585 | "istanbul-lib-coverage": "^3.0.0-alpha.1",
1586 | "make-dir": "^3.0.0",
1587 | "p-map": "^3.0.0",
1588 | "rimraf": "^3.0.0",
1589 | "uuid": "^3.3.3"
1590 | },
1591 | "dependencies": {
1592 | "make-dir": {
1593 | "version": "3.1.0",
1594 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
1595 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
1596 | "dev": true,
1597 | "requires": {
1598 | "semver": "^6.0.0"
1599 | }
1600 | },
1601 | "semver": {
1602 | "version": "6.3.0",
1603 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
1604 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
1605 | "dev": true
1606 | }
1607 | }
1608 | },
1609 | "istanbul-lib-report": {
1610 | "version": "3.0.0",
1611 | "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
1612 | "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
1613 | "dev": true,
1614 | "requires": {
1615 | "istanbul-lib-coverage": "^3.0.0",
1616 | "make-dir": "^3.0.0",
1617 | "supports-color": "^7.1.0"
1618 | },
1619 | "dependencies": {
1620 | "has-flag": {
1621 | "version": "4.0.0",
1622 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
1623 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
1624 | "dev": true
1625 | },
1626 | "make-dir": {
1627 | "version": "3.1.0",
1628 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
1629 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
1630 | "dev": true,
1631 | "requires": {
1632 | "semver": "^6.0.0"
1633 | }
1634 | },
1635 | "semver": {
1636 | "version": "6.3.0",
1637 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
1638 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
1639 | "dev": true
1640 | },
1641 | "supports-color": {
1642 | "version": "7.1.0",
1643 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
1644 | "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
1645 | "dev": true,
1646 | "requires": {
1647 | "has-flag": "^4.0.0"
1648 | }
1649 | }
1650 | }
1651 | },
1652 | "istanbul-lib-source-maps": {
1653 | "version": "4.0.0",
1654 | "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz",
1655 | "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==",
1656 | "dev": true,
1657 | "requires": {
1658 | "debug": "^4.1.1",
1659 | "istanbul-lib-coverage": "^3.0.0",
1660 | "source-map": "^0.6.1"
1661 | },
1662 | "dependencies": {
1663 | "source-map": {
1664 | "version": "0.6.1",
1665 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
1666 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
1667 | "dev": true
1668 | }
1669 | }
1670 | },
1671 | "istanbul-reports": {
1672 | "version": "3.0.2",
1673 | "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz",
1674 | "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==",
1675 | "dev": true,
1676 | "requires": {
1677 | "html-escaper": "^2.0.0",
1678 | "istanbul-lib-report": "^3.0.0"
1679 | }
1680 | },
1681 | "js-tokens": {
1682 | "version": "4.0.0",
1683 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
1684 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
1685 | "dev": true
1686 | },
1687 | "js-yaml": {
1688 | "version": "3.13.1",
1689 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
1690 | "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
1691 | "dev": true,
1692 | "requires": {
1693 | "argparse": "^1.0.7",
1694 | "esprima": "^4.0.0"
1695 | },
1696 | "dependencies": {
1697 | "esprima": {
1698 | "version": "4.0.1",
1699 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
1700 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
1701 | "dev": true
1702 | }
1703 | }
1704 | },
1705 | "jsesc": {
1706 | "version": "2.5.2",
1707 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
1708 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
1709 | "dev": true
1710 | },
1711 | "json5": {
1712 | "version": "2.2.3",
1713 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
1714 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
1715 | "dev": true
1716 | },
1717 | "lodash": {
1718 | "version": "4.17.21",
1719 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
1720 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
1721 | "dev": true
1722 | },
1723 | "lodash.flattendeep": {
1724 | "version": "4.4.0",
1725 | "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz",
1726 | "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=",
1727 | "dev": true
1728 | },
1729 | "mime-db": {
1730 | "version": "1.43.0",
1731 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz",
1732 | "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==",
1733 | "dev": true
1734 | },
1735 | "minimatch": {
1736 | "version": "3.1.2",
1737 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
1738 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
1739 | "dev": true,
1740 | "requires": {
1741 | "brace-expansion": "^1.1.7"
1742 | }
1743 | },
1744 | "minimist": {
1745 | "version": "1.2.6",
1746 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
1747 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
1748 | "dev": true
1749 | },
1750 | "ms": {
1751 | "version": "2.1.2",
1752 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1753 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
1754 | "dev": true
1755 | },
1756 | "node-fetch": {
1757 | "version": "2.6.7",
1758 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
1759 | "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
1760 | "dev": true,
1761 | "requires": {
1762 | "whatwg-url": "^5.0.0"
1763 | }
1764 | },
1765 | "node-preload": {
1766 | "version": "0.2.1",
1767 | "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz",
1768 | "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==",
1769 | "dev": true,
1770 | "requires": {
1771 | "process-on-spawn": "^1.0.0"
1772 | }
1773 | },
1774 | "nyc": {
1775 | "version": "15.0.1",
1776 | "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.0.1.tgz",
1777 | "integrity": "sha512-n0MBXYBYRqa67IVt62qW1r/d9UH/Qtr7SF1w/nQLJ9KxvWF6b2xCHImRAixHN9tnMMYHC2P14uo6KddNGwMgGg==",
1778 | "dev": true,
1779 | "requires": {
1780 | "@istanbuljs/load-nyc-config": "^1.0.0",
1781 | "@istanbuljs/schema": "^0.1.2",
1782 | "caching-transform": "^4.0.0",
1783 | "convert-source-map": "^1.7.0",
1784 | "decamelize": "^1.2.0",
1785 | "find-cache-dir": "^3.2.0",
1786 | "find-up": "^4.1.0",
1787 | "foreground-child": "^2.0.0",
1788 | "glob": "^7.1.6",
1789 | "istanbul-lib-coverage": "^3.0.0",
1790 | "istanbul-lib-hook": "^3.0.0",
1791 | "istanbul-lib-instrument": "^4.0.0",
1792 | "istanbul-lib-processinfo": "^2.0.2",
1793 | "istanbul-lib-report": "^3.0.0",
1794 | "istanbul-lib-source-maps": "^4.0.0",
1795 | "istanbul-reports": "^3.0.2",
1796 | "make-dir": "^3.0.0",
1797 | "node-preload": "^0.2.1",
1798 | "p-map": "^3.0.0",
1799 | "process-on-spawn": "^1.0.0",
1800 | "resolve-from": "^5.0.0",
1801 | "rimraf": "^3.0.0",
1802 | "signal-exit": "^3.0.2",
1803 | "spawn-wrap": "^2.0.0",
1804 | "test-exclude": "^6.0.0",
1805 | "yargs": "^15.0.2"
1806 | },
1807 | "dependencies": {
1808 | "find-up": {
1809 | "version": "4.1.0",
1810 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
1811 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
1812 | "dev": true,
1813 | "requires": {
1814 | "locate-path": "^5.0.0",
1815 | "path-exists": "^4.0.0"
1816 | }
1817 | },
1818 | "glob": {
1819 | "version": "7.1.6",
1820 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
1821 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
1822 | "dev": true,
1823 | "requires": {
1824 | "fs.realpath": "^1.0.0",
1825 | "inflight": "^1.0.4",
1826 | "inherits": "2",
1827 | "minimatch": "^3.0.4",
1828 | "once": "^1.3.0",
1829 | "path-is-absolute": "^1.0.0"
1830 | }
1831 | },
1832 | "locate-path": {
1833 | "version": "5.0.0",
1834 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
1835 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
1836 | "dev": true,
1837 | "requires": {
1838 | "p-locate": "^4.1.0"
1839 | }
1840 | },
1841 | "make-dir": {
1842 | "version": "3.1.0",
1843 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
1844 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
1845 | "dev": true,
1846 | "requires": {
1847 | "semver": "^6.0.0"
1848 | }
1849 | },
1850 | "p-limit": {
1851 | "version": "2.3.0",
1852 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
1853 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
1854 | "dev": true,
1855 | "requires": {
1856 | "p-try": "^2.0.0"
1857 | }
1858 | },
1859 | "p-locate": {
1860 | "version": "4.1.0",
1861 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
1862 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
1863 | "dev": true,
1864 | "requires": {
1865 | "p-limit": "^2.2.0"
1866 | }
1867 | },
1868 | "p-try": {
1869 | "version": "2.2.0",
1870 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
1871 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
1872 | "dev": true
1873 | },
1874 | "path-exists": {
1875 | "version": "4.0.0",
1876 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
1877 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
1878 | "dev": true
1879 | },
1880 | "semver": {
1881 | "version": "6.3.0",
1882 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
1883 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
1884 | "dev": true
1885 | }
1886 | }
1887 | },
1888 | "object-assign": {
1889 | "version": "4.1.1",
1890 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1891 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
1892 | "dev": true
1893 | },
1894 | "object-inspect": {
1895 | "version": "1.7.0",
1896 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
1897 | "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
1898 | "dev": true
1899 | },
1900 | "object-is": {
1901 | "version": "1.1.2",
1902 | "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz",
1903 | "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==",
1904 | "dev": true,
1905 | "requires": {
1906 | "define-properties": "^1.1.3",
1907 | "es-abstract": "^1.17.5"
1908 | }
1909 | },
1910 | "object-keys": {
1911 | "version": "1.1.1",
1912 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
1913 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
1914 | "dev": true
1915 | },
1916 | "object.assign": {
1917 | "version": "4.1.0",
1918 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
1919 | "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
1920 | "dev": true,
1921 | "requires": {
1922 | "define-properties": "^1.1.2",
1923 | "function-bind": "^1.1.1",
1924 | "has-symbols": "^1.0.0",
1925 | "object-keys": "^1.0.11"
1926 | }
1927 | },
1928 | "once": {
1929 | "version": "1.4.0",
1930 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1931 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
1932 | "dev": true,
1933 | "requires": {
1934 | "wrappy": "1"
1935 | }
1936 | },
1937 | "p-map": {
1938 | "version": "3.0.0",
1939 | "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
1940 | "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
1941 | "dev": true,
1942 | "requires": {
1943 | "aggregate-error": "^3.0.0"
1944 | }
1945 | },
1946 | "package-hash": {
1947 | "version": "4.0.0",
1948 | "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz",
1949 | "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==",
1950 | "dev": true,
1951 | "requires": {
1952 | "graceful-fs": "^4.1.15",
1953 | "hasha": "^5.0.0",
1954 | "lodash.flattendeep": "^4.4.0",
1955 | "release-zalgo": "^1.0.0"
1956 | }
1957 | },
1958 | "packet-reader": {
1959 | "version": "1.0.0",
1960 | "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz",
1961 | "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ=="
1962 | },
1963 | "parse-ms": {
1964 | "version": "1.0.1",
1965 | "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-1.0.1.tgz",
1966 | "integrity": "sha1-VjRtR0nXjyNDDKDHE4UK75GqNh0=",
1967 | "dev": true
1968 | },
1969 | "path-is-absolute": {
1970 | "version": "1.0.1",
1971 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1972 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
1973 | "dev": true
1974 | },
1975 | "path-key": {
1976 | "version": "3.1.1",
1977 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
1978 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
1979 | "dev": true
1980 | },
1981 | "path-parse": {
1982 | "version": "1.0.7",
1983 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
1984 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
1985 | "dev": true
1986 | },
1987 | "pg": {
1988 | "version": "8.0.2",
1989 | "resolved": "https://registry.npmjs.org/pg/-/pg-8.0.2.tgz",
1990 | "integrity": "sha512-ngOUEDk69kLdH/k/YLT2NRIBcUiPFRcY4l51dviqn79P5qIa5jBIGIFTIGXh4OlT/6gpiCAza5a9uy08izpFQQ==",
1991 | "requires": {
1992 | "buffer-writer": "2.0.0",
1993 | "packet-reader": "1.0.0",
1994 | "pg-connection-string": "0.1.3",
1995 | "pg-pool": "^3.1.0",
1996 | "pg-protocol": "^1.2.1",
1997 | "pg-types": "^2.1.0",
1998 | "pgpass": "1.x",
1999 | "semver": "4.3.2"
2000 | }
2001 | },
2002 | "pg-connection-string": {
2003 | "version": "0.1.3",
2004 | "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-0.1.3.tgz",
2005 | "integrity": "sha1-2hhHsglA5C7hSSvq9l1J2RskXfc="
2006 | },
2007 | "pg-escape": {
2008 | "version": "0.2.0",
2009 | "resolved": "https://registry.npmjs.org/pg-escape/-/pg-escape-0.2.0.tgz",
2010 | "integrity": "sha1-ZVlMFpFlm0q24Mu/nVB0S+R0mY4=",
2011 | "dev": true
2012 | },
2013 | "pg-int8": {
2014 | "version": "1.0.1",
2015 | "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz",
2016 | "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="
2017 | },
2018 | "pg-pool": {
2019 | "version": "3.1.0",
2020 | "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.1.0.tgz",
2021 | "integrity": "sha512-CvxGctDwjZZad6Q7vvhFA4BsYdk26UFIZaFH0XXqHId5uBOc26vco/GFh/laUVIQUpD9IKe/f9/mr/OQHyQ2ZA=="
2022 | },
2023 | "pg-protocol": {
2024 | "version": "1.2.1",
2025 | "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.2.1.tgz",
2026 | "integrity": "sha512-IqZ+VUOqg3yydxSt5NgNKLVK9JgPBuzq4ZbA9GmrmIkQjQAszPT9DLqTtID0mKsLEZB68PU0gjLla561WZ2QkQ=="
2027 | },
2028 | "pg-types": {
2029 | "version": "2.2.0",
2030 | "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz",
2031 | "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==",
2032 | "requires": {
2033 | "pg-int8": "1.0.1",
2034 | "postgres-array": "~2.0.0",
2035 | "postgres-bytea": "~1.0.0",
2036 | "postgres-date": "~1.0.4",
2037 | "postgres-interval": "^1.1.0"
2038 | }
2039 | },
2040 | "pgpass": {
2041 | "version": "1.0.2",
2042 | "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.2.tgz",
2043 | "integrity": "sha1-Knu0G2BltnkH6R2hsHwYR8h3swY=",
2044 | "requires": {
2045 | "split": "^1.0.0"
2046 | }
2047 | },
2048 | "pkg-dir": {
2049 | "version": "4.2.0",
2050 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
2051 | "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
2052 | "dev": true,
2053 | "requires": {
2054 | "find-up": "^4.0.0"
2055 | },
2056 | "dependencies": {
2057 | "find-up": {
2058 | "version": "4.1.0",
2059 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
2060 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
2061 | "dev": true,
2062 | "requires": {
2063 | "locate-path": "^5.0.0",
2064 | "path-exists": "^4.0.0"
2065 | }
2066 | },
2067 | "locate-path": {
2068 | "version": "5.0.0",
2069 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
2070 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
2071 | "dev": true,
2072 | "requires": {
2073 | "p-locate": "^4.1.0"
2074 | }
2075 | },
2076 | "p-limit": {
2077 | "version": "2.3.0",
2078 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
2079 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
2080 | "dev": true,
2081 | "requires": {
2082 | "p-try": "^2.0.0"
2083 | }
2084 | },
2085 | "p-locate": {
2086 | "version": "4.1.0",
2087 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
2088 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
2089 | "dev": true,
2090 | "requires": {
2091 | "p-limit": "^2.2.0"
2092 | }
2093 | },
2094 | "p-try": {
2095 | "version": "2.2.0",
2096 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
2097 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
2098 | "dev": true
2099 | },
2100 | "path-exists": {
2101 | "version": "4.0.0",
2102 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
2103 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
2104 | "dev": true
2105 | }
2106 | }
2107 | },
2108 | "plur": {
2109 | "version": "1.0.0",
2110 | "resolved": "https://registry.npmjs.org/plur/-/plur-1.0.0.tgz",
2111 | "integrity": "sha1-24XGgU9eXlo7Se/CjWBP7GKXUVY=",
2112 | "dev": true
2113 | },
2114 | "postgres-array": {
2115 | "version": "2.0.0",
2116 | "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz",
2117 | "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA=="
2118 | },
2119 | "postgres-bytea": {
2120 | "version": "1.0.0",
2121 | "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz",
2122 | "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU="
2123 | },
2124 | "postgres-date": {
2125 | "version": "1.0.5",
2126 | "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.5.tgz",
2127 | "integrity": "sha512-pdau6GRPERdAYUQwkBnGKxEfPyhVZXG/JiS44iZWiNdSOWE09N2lUgN6yshuq6fVSon4Pm0VMXd1srUUkLe9iA=="
2128 | },
2129 | "postgres-interval": {
2130 | "version": "1.2.0",
2131 | "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz",
2132 | "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==",
2133 | "requires": {
2134 | "xtend": "^4.0.0"
2135 | }
2136 | },
2137 | "pretty-ms": {
2138 | "version": "2.1.0",
2139 | "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-2.1.0.tgz",
2140 | "integrity": "sha1-QlfCVt8/sLRR1q/6qwIYhBJpgdw=",
2141 | "dev": true,
2142 | "requires": {
2143 | "is-finite": "^1.0.1",
2144 | "parse-ms": "^1.0.0",
2145 | "plur": "^1.0.0"
2146 | }
2147 | },
2148 | "process-nextick-args": {
2149 | "version": "1.0.7",
2150 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
2151 | "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
2152 | "dev": true
2153 | },
2154 | "process-on-spawn": {
2155 | "version": "1.0.0",
2156 | "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz",
2157 | "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==",
2158 | "dev": true,
2159 | "requires": {
2160 | "fromentries": "^1.2.0"
2161 | }
2162 | },
2163 | "re-emitter": {
2164 | "version": "1.1.3",
2165 | "resolved": "https://registry.npmjs.org/re-emitter/-/re-emitter-1.1.3.tgz",
2166 | "integrity": "sha1-+p4xn/3u6zWycpbvDz03TawvUqc=",
2167 | "dev": true
2168 | },
2169 | "readable-stream": {
2170 | "version": "2.2.9",
2171 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz",
2172 | "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=",
2173 | "dev": true,
2174 | "requires": {
2175 | "buffer-shims": "~1.0.0",
2176 | "core-util-is": "~1.0.0",
2177 | "inherits": "~2.0.1",
2178 | "isarray": "~1.0.0",
2179 | "process-nextick-args": "~1.0.6",
2180 | "string_decoder": "~1.0.0",
2181 | "util-deprecate": "~1.0.1"
2182 | }
2183 | },
2184 | "regexp.prototype.flags": {
2185 | "version": "1.3.0",
2186 | "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz",
2187 | "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==",
2188 | "dev": true,
2189 | "requires": {
2190 | "define-properties": "^1.1.3",
2191 | "es-abstract": "^1.17.0-next.1"
2192 | }
2193 | },
2194 | "release-zalgo": {
2195 | "version": "1.0.0",
2196 | "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz",
2197 | "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=",
2198 | "dev": true,
2199 | "requires": {
2200 | "es6-error": "^4.0.1"
2201 | }
2202 | },
2203 | "repeat-string": {
2204 | "version": "1.6.1",
2205 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
2206 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
2207 | "dev": true
2208 | },
2209 | "require-directory": {
2210 | "version": "2.1.1",
2211 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
2212 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
2213 | "dev": true
2214 | },
2215 | "require-main-filename": {
2216 | "version": "2.0.0",
2217 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
2218 | "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
2219 | "dev": true
2220 | },
2221 | "resolve-from": {
2222 | "version": "5.0.0",
2223 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
2224 | "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
2225 | "dev": true
2226 | },
2227 | "resumer": {
2228 | "version": "0.0.0",
2229 | "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz",
2230 | "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=",
2231 | "dev": true,
2232 | "requires": {
2233 | "through": "~2.3.4"
2234 | }
2235 | },
2236 | "rimraf": {
2237 | "version": "3.0.2",
2238 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
2239 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
2240 | "dev": true,
2241 | "requires": {
2242 | "glob": "^7.1.3"
2243 | },
2244 | "dependencies": {
2245 | "glob": {
2246 | "version": "7.1.6",
2247 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
2248 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
2249 | "dev": true,
2250 | "requires": {
2251 | "fs.realpath": "^1.0.0",
2252 | "inflight": "^1.0.4",
2253 | "inherits": "2",
2254 | "minimatch": "^3.0.4",
2255 | "once": "^1.3.0",
2256 | "path-is-absolute": "^1.0.0"
2257 | }
2258 | }
2259 | }
2260 | },
2261 | "safe-buffer": {
2262 | "version": "5.1.2",
2263 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
2264 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
2265 | "dev": true
2266 | },
2267 | "semver": {
2268 | "version": "4.3.2",
2269 | "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.2.tgz",
2270 | "integrity": "sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c="
2271 | },
2272 | "set-blocking": {
2273 | "version": "2.0.0",
2274 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
2275 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
2276 | "dev": true
2277 | },
2278 | "shebang-command": {
2279 | "version": "2.0.0",
2280 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
2281 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
2282 | "dev": true,
2283 | "requires": {
2284 | "shebang-regex": "^3.0.0"
2285 | }
2286 | },
2287 | "shebang-regex": {
2288 | "version": "3.0.0",
2289 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
2290 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
2291 | "dev": true
2292 | },
2293 | "signal-exit": {
2294 | "version": "3.0.3",
2295 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
2296 | "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
2297 | "dev": true
2298 | },
2299 | "spawn-wrap": {
2300 | "version": "2.0.0",
2301 | "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz",
2302 | "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==",
2303 | "dev": true,
2304 | "requires": {
2305 | "foreground-child": "^2.0.0",
2306 | "is-windows": "^1.0.2",
2307 | "make-dir": "^3.0.0",
2308 | "rimraf": "^3.0.0",
2309 | "signal-exit": "^3.0.2",
2310 | "which": "^2.0.1"
2311 | },
2312 | "dependencies": {
2313 | "make-dir": {
2314 | "version": "3.1.0",
2315 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
2316 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
2317 | "dev": true,
2318 | "requires": {
2319 | "semver": "^6.0.0"
2320 | }
2321 | },
2322 | "semver": {
2323 | "version": "6.3.0",
2324 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
2325 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
2326 | "dev": true
2327 | },
2328 | "which": {
2329 | "version": "2.0.2",
2330 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
2331 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
2332 | "dev": true,
2333 | "requires": {
2334 | "isexe": "^2.0.0"
2335 | }
2336 | }
2337 | }
2338 | },
2339 | "split": {
2340 | "version": "1.0.1",
2341 | "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
2342 | "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
2343 | "requires": {
2344 | "through": "2"
2345 | }
2346 | },
2347 | "sprintf-js": {
2348 | "version": "1.0.3",
2349 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
2350 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
2351 | "dev": true
2352 | },
2353 | "stream-events": {
2354 | "version": "1.0.5",
2355 | "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz",
2356 | "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==",
2357 | "dev": true,
2358 | "requires": {
2359 | "stubs": "^3.0.0"
2360 | }
2361 | },
2362 | "string-width": {
2363 | "version": "4.2.0",
2364 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
2365 | "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
2366 | "dev": true,
2367 | "requires": {
2368 | "emoji-regex": "^8.0.0",
2369 | "is-fullwidth-code-point": "^3.0.0",
2370 | "strip-ansi": "^6.0.0"
2371 | },
2372 | "dependencies": {
2373 | "ansi-regex": {
2374 | "version": "5.0.0",
2375 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
2376 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
2377 | "dev": true
2378 | },
2379 | "strip-ansi": {
2380 | "version": "6.0.0",
2381 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
2382 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
2383 | "dev": true,
2384 | "requires": {
2385 | "ansi-regex": "^5.0.0"
2386 | }
2387 | }
2388 | }
2389 | },
2390 | "string.prototype.trim": {
2391 | "version": "1.2.1",
2392 | "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.1.tgz",
2393 | "integrity": "sha512-MjGFEeqixw47dAMFMtgUro/I0+wNqZB5GKXGt1fFr24u3TzDXCPu7J9Buppzoe3r/LqkSDLDDJzE15RGWDGAVw==",
2394 | "dev": true,
2395 | "requires": {
2396 | "define-properties": "^1.1.3",
2397 | "es-abstract": "^1.17.0-next.1",
2398 | "function-bind": "^1.1.1"
2399 | }
2400 | },
2401 | "string.prototype.trimend": {
2402 | "version": "1.0.1",
2403 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz",
2404 | "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==",
2405 | "dev": true,
2406 | "requires": {
2407 | "define-properties": "^1.1.3",
2408 | "es-abstract": "^1.17.5"
2409 | }
2410 | },
2411 | "string.prototype.trimleft": {
2412 | "version": "2.1.2",
2413 | "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz",
2414 | "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==",
2415 | "dev": true,
2416 | "requires": {
2417 | "define-properties": "^1.1.3",
2418 | "es-abstract": "^1.17.5",
2419 | "string.prototype.trimstart": "^1.0.0"
2420 | }
2421 | },
2422 | "string.prototype.trimright": {
2423 | "version": "2.1.2",
2424 | "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz",
2425 | "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==",
2426 | "dev": true,
2427 | "requires": {
2428 | "define-properties": "^1.1.3",
2429 | "es-abstract": "^1.17.5",
2430 | "string.prototype.trimend": "^1.0.0"
2431 | }
2432 | },
2433 | "string.prototype.trimstart": {
2434 | "version": "1.0.1",
2435 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz",
2436 | "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==",
2437 | "dev": true,
2438 | "requires": {
2439 | "define-properties": "^1.1.3",
2440 | "es-abstract": "^1.17.5"
2441 | }
2442 | },
2443 | "string_decoder": {
2444 | "version": "1.0.3",
2445 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
2446 | "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
2447 | "dev": true,
2448 | "requires": {
2449 | "safe-buffer": "~5.1.0"
2450 | }
2451 | },
2452 | "strip-ansi": {
2453 | "version": "3.0.1",
2454 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
2455 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
2456 | "dev": true,
2457 | "requires": {
2458 | "ansi-regex": "^2.0.0"
2459 | }
2460 | },
2461 | "strip-bom": {
2462 | "version": "4.0.0",
2463 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
2464 | "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
2465 | "dev": true
2466 | },
2467 | "stubs": {
2468 | "version": "3.0.0",
2469 | "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz",
2470 | "integrity": "sha1-6NK6H6nJBXAwPAMLaQD31fiavls=",
2471 | "dev": true
2472 | },
2473 | "supports-color": {
2474 | "version": "5.5.0",
2475 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
2476 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
2477 | "dev": true,
2478 | "requires": {
2479 | "has-flag": "^3.0.0"
2480 | }
2481 | },
2482 | "tap-out": {
2483 | "version": "2.1.0",
2484 | "resolved": "https://registry.npmjs.org/tap-out/-/tap-out-2.1.0.tgz",
2485 | "integrity": "sha512-LJE+TBoVbOWhwdz4+FQk40nmbIuxJLqaGvj3WauQw3NYYU5TdjoV3C0x/yq37YAvVyi+oeBXmWnxWSjJ7IEyUw==",
2486 | "dev": true,
2487 | "requires": {
2488 | "re-emitter": "1.1.3",
2489 | "readable-stream": "2.2.9",
2490 | "split": "1.0.0",
2491 | "trim": "0.0.1"
2492 | },
2493 | "dependencies": {
2494 | "split": {
2495 | "version": "1.0.0",
2496 | "resolved": "https://registry.npmjs.org/split/-/split-1.0.0.tgz",
2497 | "integrity": "sha1-xDlc5oOrzSVLwo/h2rtuXCfc/64=",
2498 | "dev": true,
2499 | "requires": {
2500 | "through": "2"
2501 | }
2502 | }
2503 | }
2504 | },
2505 | "tap-spec": {
2506 | "version": "5.0.0",
2507 | "resolved": "https://registry.npmjs.org/tap-spec/-/tap-spec-5.0.0.tgz",
2508 | "integrity": "sha512-zMDVJiE5I6Y4XGjlueGXJIX2YIkbDN44broZlnypT38Hj/czfOXrszHNNJBF/DXR8n+x6gbfSx68x04kIEHdrw==",
2509 | "dev": true,
2510 | "requires": {
2511 | "chalk": "^1.0.0",
2512 | "duplexer": "^0.1.1",
2513 | "figures": "^1.4.0",
2514 | "lodash": "^4.17.10",
2515 | "pretty-ms": "^2.1.0",
2516 | "repeat-string": "^1.5.2",
2517 | "tap-out": "^2.1.0",
2518 | "through2": "^2.0.0"
2519 | }
2520 | },
2521 | "tape": {
2522 | "version": "4.13.2",
2523 | "resolved": "https://registry.npmjs.org/tape/-/tape-4.13.2.tgz",
2524 | "integrity": "sha512-waWwC/OqYVE9TS6r1IynlP2sEdk4Lfo6jazlgkuNkPTHIbuG2BTABIaKdlQWwPeB6Oo4ksZ1j33Yt0NTOAlYMQ==",
2525 | "dev": true,
2526 | "requires": {
2527 | "deep-equal": "~1.1.1",
2528 | "defined": "~1.0.0",
2529 | "dotignore": "~0.1.2",
2530 | "for-each": "~0.3.3",
2531 | "function-bind": "~1.1.1",
2532 | "glob": "~7.1.6",
2533 | "has": "~1.0.3",
2534 | "inherits": "~2.0.4",
2535 | "is-regex": "~1.0.5",
2536 | "minimist": "~1.2.0",
2537 | "object-inspect": "~1.7.0",
2538 | "resolve": "~1.15.1",
2539 | "resumer": "~0.0.0",
2540 | "string.prototype.trim": "~1.2.1",
2541 | "through": "~2.3.8"
2542 | },
2543 | "dependencies": {
2544 | "glob": {
2545 | "version": "7.1.6",
2546 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
2547 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
2548 | "dev": true,
2549 | "requires": {
2550 | "fs.realpath": "^1.0.0",
2551 | "inflight": "^1.0.4",
2552 | "inherits": "2",
2553 | "minimatch": "^3.0.4",
2554 | "once": "^1.3.0",
2555 | "path-is-absolute": "^1.0.0"
2556 | }
2557 | },
2558 | "resolve": {
2559 | "version": "1.15.1",
2560 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz",
2561 | "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==",
2562 | "dev": true,
2563 | "requires": {
2564 | "path-parse": "^1.0.6"
2565 | }
2566 | }
2567 | }
2568 | },
2569 | "teeny-request": {
2570 | "version": "6.0.1",
2571 | "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-6.0.1.tgz",
2572 | "integrity": "sha512-TAK0c9a00ELOqLrZ49cFxvPVogMUFaWY8dUsQc/0CuQPGF+BOxOQzXfE413BAk2kLomwNplvdtMpeaeGWmoc2g==",
2573 | "dev": true,
2574 | "requires": {
2575 | "http-proxy-agent": "^4.0.0",
2576 | "https-proxy-agent": "^4.0.0",
2577 | "node-fetch": "^2.2.0",
2578 | "stream-events": "^1.0.5",
2579 | "uuid": "^3.3.2"
2580 | }
2581 | },
2582 | "test-exclude": {
2583 | "version": "6.0.0",
2584 | "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
2585 | "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
2586 | "dev": true,
2587 | "requires": {
2588 | "@istanbuljs/schema": "^0.1.2",
2589 | "glob": "^7.1.4",
2590 | "minimatch": "^3.0.4"
2591 | },
2592 | "dependencies": {
2593 | "glob": {
2594 | "version": "7.1.6",
2595 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
2596 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
2597 | "dev": true,
2598 | "requires": {
2599 | "fs.realpath": "^1.0.0",
2600 | "inflight": "^1.0.4",
2601 | "inherits": "2",
2602 | "minimatch": "^3.0.4",
2603 | "once": "^1.3.0",
2604 | "path-is-absolute": "^1.0.0"
2605 | }
2606 | }
2607 | }
2608 | },
2609 | "through": {
2610 | "version": "2.3.8",
2611 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
2612 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
2613 | },
2614 | "through2": {
2615 | "version": "2.0.5",
2616 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
2617 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
2618 | "dev": true,
2619 | "requires": {
2620 | "readable-stream": "~2.3.6",
2621 | "xtend": "~4.0.1"
2622 | },
2623 | "dependencies": {
2624 | "process-nextick-args": {
2625 | "version": "2.0.1",
2626 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
2627 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
2628 | "dev": true
2629 | },
2630 | "readable-stream": {
2631 | "version": "2.3.7",
2632 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
2633 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
2634 | "dev": true,
2635 | "requires": {
2636 | "core-util-is": "~1.0.0",
2637 | "inherits": "~2.0.3",
2638 | "isarray": "~1.0.0",
2639 | "process-nextick-args": "~2.0.0",
2640 | "safe-buffer": "~5.1.1",
2641 | "string_decoder": "~1.1.1",
2642 | "util-deprecate": "~1.0.1"
2643 | }
2644 | },
2645 | "string_decoder": {
2646 | "version": "1.1.1",
2647 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
2648 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
2649 | "dev": true,
2650 | "requires": {
2651 | "safe-buffer": "~5.1.0"
2652 | }
2653 | }
2654 | }
2655 | },
2656 | "to-fast-properties": {
2657 | "version": "2.0.0",
2658 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
2659 | "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
2660 | "dev": true
2661 | },
2662 | "tr46": {
2663 | "version": "0.0.3",
2664 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
2665 | "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=",
2666 | "dev": true
2667 | },
2668 | "trim": {
2669 | "version": "0.0.1",
2670 | "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz",
2671 | "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=",
2672 | "dev": true
2673 | },
2674 | "type-fest": {
2675 | "version": "0.8.1",
2676 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
2677 | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
2678 | "dev": true
2679 | },
2680 | "typedarray-to-buffer": {
2681 | "version": "3.1.5",
2682 | "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
2683 | "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
2684 | "dev": true,
2685 | "requires": {
2686 | "is-typedarray": "^1.0.0"
2687 | }
2688 | },
2689 | "urlgrey": {
2690 | "version": "0.4.4",
2691 | "resolved": "https://registry.npmjs.org/urlgrey/-/urlgrey-0.4.4.tgz",
2692 | "integrity": "sha1-iS/pWWCAXoVRnxzUOJ8stMu3ZS8=",
2693 | "dev": true
2694 | },
2695 | "util-deprecate": {
2696 | "version": "1.0.2",
2697 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
2698 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
2699 | "dev": true
2700 | },
2701 | "uuid": {
2702 | "version": "3.4.0",
2703 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
2704 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
2705 | "dev": true
2706 | },
2707 | "webidl-conversions": {
2708 | "version": "3.0.1",
2709 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
2710 | "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=",
2711 | "dev": true
2712 | },
2713 | "whatwg-url": {
2714 | "version": "5.0.0",
2715 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
2716 | "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
2717 | "dev": true,
2718 | "requires": {
2719 | "tr46": "~0.0.3",
2720 | "webidl-conversions": "^3.0.0"
2721 | }
2722 | },
2723 | "which-module": {
2724 | "version": "2.0.0",
2725 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
2726 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
2727 | "dev": true
2728 | },
2729 | "wrap-ansi": {
2730 | "version": "6.2.0",
2731 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
2732 | "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
2733 | "dev": true,
2734 | "requires": {
2735 | "ansi-styles": "^4.0.0",
2736 | "string-width": "^4.1.0",
2737 | "strip-ansi": "^6.0.0"
2738 | },
2739 | "dependencies": {
2740 | "ansi-regex": {
2741 | "version": "5.0.0",
2742 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
2743 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
2744 | "dev": true
2745 | },
2746 | "ansi-styles": {
2747 | "version": "4.2.1",
2748 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
2749 | "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
2750 | "dev": true,
2751 | "requires": {
2752 | "@types/color-name": "^1.1.1",
2753 | "color-convert": "^2.0.1"
2754 | }
2755 | },
2756 | "color-convert": {
2757 | "version": "2.0.1",
2758 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
2759 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
2760 | "dev": true,
2761 | "requires": {
2762 | "color-name": "~1.1.4"
2763 | }
2764 | },
2765 | "color-name": {
2766 | "version": "1.1.4",
2767 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
2768 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
2769 | "dev": true
2770 | },
2771 | "strip-ansi": {
2772 | "version": "6.0.0",
2773 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
2774 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
2775 | "dev": true,
2776 | "requires": {
2777 | "ansi-regex": "^5.0.0"
2778 | }
2779 | }
2780 | }
2781 | },
2782 | "wrappy": {
2783 | "version": "1.0.2",
2784 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
2785 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
2786 | "dev": true
2787 | },
2788 | "write-file-atomic": {
2789 | "version": "3.0.3",
2790 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
2791 | "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
2792 | "dev": true,
2793 | "requires": {
2794 | "imurmurhash": "^0.1.4",
2795 | "is-typedarray": "^1.0.0",
2796 | "signal-exit": "^3.0.2",
2797 | "typedarray-to-buffer": "^3.1.5"
2798 | }
2799 | },
2800 | "xtend": {
2801 | "version": "4.0.2",
2802 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
2803 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
2804 | },
2805 | "y18n": {
2806 | "version": "4.0.1",
2807 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz",
2808 | "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==",
2809 | "dev": true
2810 | },
2811 | "yargs": {
2812 | "version": "15.3.1",
2813 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz",
2814 | "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==",
2815 | "dev": true,
2816 | "requires": {
2817 | "cliui": "^6.0.0",
2818 | "decamelize": "^1.2.0",
2819 | "find-up": "^4.1.0",
2820 | "get-caller-file": "^2.0.1",
2821 | "require-directory": "^2.1.1",
2822 | "require-main-filename": "^2.0.0",
2823 | "set-blocking": "^2.0.0",
2824 | "string-width": "^4.2.0",
2825 | "which-module": "^2.0.0",
2826 | "y18n": "^4.0.0",
2827 | "yargs-parser": "^18.1.1"
2828 | },
2829 | "dependencies": {
2830 | "find-up": {
2831 | "version": "4.1.0",
2832 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
2833 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
2834 | "dev": true,
2835 | "requires": {
2836 | "locate-path": "^5.0.0",
2837 | "path-exists": "^4.0.0"
2838 | }
2839 | },
2840 | "locate-path": {
2841 | "version": "5.0.0",
2842 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
2843 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
2844 | "dev": true,
2845 | "requires": {
2846 | "p-locate": "^4.1.0"
2847 | }
2848 | },
2849 | "p-limit": {
2850 | "version": "2.3.0",
2851 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
2852 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
2853 | "dev": true,
2854 | "requires": {
2855 | "p-try": "^2.0.0"
2856 | }
2857 | },
2858 | "p-locate": {
2859 | "version": "4.1.0",
2860 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
2861 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
2862 | "dev": true,
2863 | "requires": {
2864 | "p-limit": "^2.2.0"
2865 | }
2866 | },
2867 | "p-try": {
2868 | "version": "2.2.0",
2869 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
2870 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
2871 | "dev": true
2872 | },
2873 | "path-exists": {
2874 | "version": "4.0.0",
2875 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
2876 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
2877 | "dev": true
2878 | }
2879 | }
2880 | },
2881 | "yargs-parser": {
2882 | "version": "18.1.3",
2883 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
2884 | "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
2885 | "dev": true,
2886 | "requires": {
2887 | "camelcase": "^5.0.0",
2888 | "decamelize": "^1.2.0"
2889 | }
2890 | }
2891 | }
2892 | }
2893 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "hapi-postgres-connection",
3 | "version": "6.5.1",
4 | "description": "A connection (pool) to PostgreSQL available anywhere in your hapi application",
5 | "main": "index.js",
6 | "scripts": {
7 | "start": "PORT=8000 node ./tests/server/server_example.js",
8 | "createTestDB": "node ./tests/_create_test_db.js",
9 | "allTests": "./node_modules/tape/bin/tape ./tests/*.js",
10 | "performanceTest": "PORT=8000 nyc --reporter=lcov node ./tests/perf.test.js | tap-spec",
11 | "connectionErrorTest": "PORT=8000 nyc --reporter=lcov node ./tests/connection_error.test.js | tap-spec",
12 | "test": "npm run createTestDB && npm run performanceTest && npm run connectionErrorTest",
13 | "coverage": "codecov"
14 | },
15 | "dependencies": {
16 | "pg": "^8.0.2"
17 | },
18 | "devDependencies": {
19 | "@hapi/hapi": "^19.1.1",
20 | "codecov": "^3.6.5",
21 | "decache": "^4.5.1",
22 | "nyc": "^15.0.1",
23 | "pg-escape": "^0.2.0",
24 | "tap-spec": "^5.0.0",
25 | "tape": "^4.13.2"
26 | },
27 | "repository": {
28 | "type": "git",
29 | "url": "git+https://github.com/dwyl/hapi-postgres-connection.git"
30 | },
31 | "keywords": [
32 | "hapi",
33 | "hapi.js",
34 | "hapijs",
35 | "pg",
36 | "postgres",
37 | "postgresql",
38 | "connection",
39 | "connect",
40 | "sql",
41 | "plugin",
42 | "tested"
43 | ],
44 | "author": "dwyl & friends",
45 | "license": "GPL-2.0",
46 | "bugs": {
47 | "url": "https://github.com/dwyl/hapi-postgres-connection/issues"
48 | },
49 | "homepage": "https://github.com/dwyl/hapi-postgres-connection#readme"
50 | }
51 |
--------------------------------------------------------------------------------
/tests/_create_test_db.js:
--------------------------------------------------------------------------------
1 | var test = require('tape');
2 | // we display the file (name) in each test name for stack trace
3 | var dir = __dirname.split('/')[__dirname.split('/').length-1];
4 | var file = dir + __filename.replace(__dirname, '') + ' -> ';
5 |
6 | var pg = require('pg');
7 | var assert = require('assert');
8 |
9 | console.log('process.env.DATABASE_URL', process.env.DATABASE_URL)
10 |
11 | function create_tables (callback) {
12 | var pool = new pg.Pool({connectionString: process.env.DATABASE_URL});
13 | pool.connect( function(err, client) {
14 | assert(!err); // if db connection fails then EXPLODE!!
15 | var file = require('path').resolve(__dirname + '/test_db_setup.sql');
16 | var query = require('fs').readFileSync(file, 'utf8').toString();
17 | // console.log('\n', query);
18 | client.query(query, function(err, result) {
19 | if(err) {
20 | return console.error('error running query', err);
21 | }
22 | client.end();
23 | return callback(err, result);
24 | });
25 | });
26 | }
27 |
28 | test('Create "users" table in test database', function (t) {
29 | create_tables(function (err, data) {
30 | t.equal(data[data.length-1].command, 'INSERT', 'DB Table Created & Test Data Inserted');
31 | t.end();
32 | })
33 | });
34 |
--------------------------------------------------------------------------------
/tests/connection_error.test.js:
--------------------------------------------------------------------------------
1 | const test = require('tape');
2 | const decache = require('decache');
3 | const escape = require('pg-escape');
4 |
5 |
6 | (async () => {
7 | test('GET /logs as fast as you can!', async function (t) {
8 | // delete the cached module:
9 | decache('../index.js');
10 | const HapiPostgresConnection = require('../index.js');
11 |
12 | const { init } = require('./server');
13 | const server = await init();
14 | await server.register({
15 | plugin: HapiPostgresConnection
16 | });
17 | const response = await server.inject('/logs');
18 | await server.stop();
19 | t.equal(response.statusCode, 200, '/logs visited');
20 | t.end();
21 | });
22 |
23 | test('Test getCon function alone', async function (t) {
24 | // delete the cached module:
25 | decache('../index.js');
26 | const getCon = require('../index.js').getCon;
27 |
28 | const connection = await getCon();
29 |
30 | const message = 'Hello World!';
31 | const insertData = escape('INSERT INTO logs (message) VALUES (%L)', message);
32 | const queryData = 'SELECT * FROM logs ORDER BY log_timestamp DESC LIMIT 1;';
33 |
34 | await connection.client.query(insertData);
35 |
36 | const queryResult = await connection.client.query(queryData);
37 |
38 | t.equal(queryResult.command, 'SELECT', 'Received correct data');
39 | t.equal(queryResult.rowCount, 1, 'Received correct data');
40 |
41 | t.end();
42 | });
43 |
44 | test('Test incorrect DATABASE_URL env', async function (t) {
45 | // set incorrect env variable
46 | process.env.DATABASE_URL = 'incorrect DB credentials';
47 |
48 | // delete the cached module:
49 | decache('../index.js');
50 | const HapiPostgresConnection = require('../index.js');
51 |
52 | const { init } = require('./server');
53 |
54 | const server = await init();
55 | try {
56 | await server.register({
57 | plugin: HapiPostgresConnection
58 | });
59 | } catch (e) {
60 | await server.stop();
61 | t.error(!e, 'Plugin can\'t initialise - it is correct in this test');
62 | t.end();
63 | }
64 | });
65 |
66 | test.onFinish(() => {
67 | process.exit();
68 | });
69 | })();
70 |
71 |
--------------------------------------------------------------------------------
/tests/perf.test.js:
--------------------------------------------------------------------------------
1 | const test = require('tape');
2 | const { init } = require('./server');
3 | const decache = require('decache');
4 | // delete the cached module:
5 | decache('../index.js');
6 | const HapiPostgresConnection = require('../index.js');
7 |
8 | (async () => {
9 | const server = await init();
10 |
11 | await server.register({
12 | plugin: HapiPostgresConnection
13 | });
14 |
15 | test('GET /nopg url that do not make any postgres queires', async function (t) {
16 | const nopg = { method: 'GET', url: '/nopg' };
17 |
18 | const request_total = 5;
19 | for(let request_count = 0; request_count < request_total; request_count++) {
20 | const response = await server.inject(nopg);
21 | t.equal(response.statusCode, 200, `/nopg visited ${request_count}`);
22 | }
23 | t.end();
24 | });
25 |
26 | test('POST /insert 1k times to simulate many concurent hits to same endpoint', async function(t){
27 | const insert = {
28 | method: 'POST',
29 | url: '/insert',
30 | payload: { message: 'Ground control to major Tom.'}
31 | }
32 |
33 | const request_total = 1000;
34 | const start_time = Date.now();
35 | for(let request_count = 0; request_count < request_total; request_count++) {
36 | console.log('request_count', request_count)
37 | const response = await server.inject(insert);
38 | t.equal(response.statusCode, 200, 'Find Person in Database');
39 | t.ok(response.result['log_id'] > 1, `Read log entry ${request_count}`);
40 | }
41 |
42 | (function logTime() {
43 | const end_time = Date.now();
44 | const time_taken = end_time - start_time;
45 | const per_sec = request_total/(time_taken/1000);
46 | console.log('Time Taken:', time_taken, 'ms | Requests per second:', per_sec);
47 | t.end();
48 | })()
49 | });
50 |
51 | test.onFinish(async () => {
52 | await server.stop();
53 | process.exit();
54 | });
55 | })();
56 |
--------------------------------------------------------------------------------
/tests/server/index.js:
--------------------------------------------------------------------------------
1 | const Hapi = require('@hapi/hapi');
2 | const escape = require('pg-escape'); // https://github.com/segmentio/pg-escape
3 |
4 | const serverPreparing = async () => {
5 | const server = Hapi.server({
6 | port: process.env.PORT,
7 | host: 'localhost',
8 | debug: {
9 | request: ['error']
10 | }
11 | });
12 |
13 | server.route({
14 | method: '*',
15 | path: '/',
16 | handler: async function (request, h) {
17 |
18 | const message = 'Hello World!';
19 | const insertData = escape('INSERT INTO logs (message) VALUES (%L)', message);
20 | const queryData = 'SELECT * FROM logs ORDER BY log_timestamp DESC LIMIT 1;';
21 |
22 | await request.pg.client.query(insertData);
23 | const queryResult = await request.pg.client.query(queryData);
24 |
25 | queryResultString = JSON.stringify(queryResult.rows[0]);
26 | return h.response(queryResultString);
27 | }
28 | });
29 |
30 | server.route({
31 | method: 'POST',
32 | path: '/insert',
33 | handler: async function (request, h) {
34 | const insertData = escape('INSERT INTO logs (message) VALUES (%L)', request.payload.message);
35 | const select = 'SELECT * FROM logs WHERE (log_id = 2)';
36 |
37 | await request.pg.client.query(insertData);
38 | const queryResult = await request.pg.client.query(select);
39 | return h.response(queryResult.rows[0]);
40 | }
41 | });
42 |
43 | server.route({
44 | method: 'GET',
45 | path: '/nopg',
46 | handler: async function (request, h) {
47 | // does not make any PG queries
48 | return h.response('ok');
49 | }
50 | });
51 |
52 |
53 | server.route({
54 | method: 'GET',
55 | path: '/logs',
56 | handler: async function(request, h) {
57 | var queryString = 'SELECT * FROM logs ORDER BY log_timestamp DESC LIMIT 1';
58 |
59 | try {
60 | const result = await request.pg.client.query(queryString);
61 | return h.response(result.rows[0]);
62 | } catch (err) {
63 | console.log(err);
64 | }
65 | }
66 | });
67 |
68 | return server;
69 | };
70 |
71 | exports.init = async () => {
72 | const server = await serverPreparing();
73 | await server.initialize();
74 | console.log('Server is initialized');
75 | return server;
76 | };
77 |
78 | exports.start = async () => {
79 | const server = await serverPreparing();
80 | await server.start();
81 | console.log(`Server running at: ${server.info.uri}`);
82 | return server;
83 | };
84 |
--------------------------------------------------------------------------------
/tests/server/server_example.js:
--------------------------------------------------------------------------------
1 | const { start } = require('.');
2 |
3 | start();
4 |
--------------------------------------------------------------------------------
/tests/test_db_setup.sql:
--------------------------------------------------------------------------------
1 | /* These SQL statements setup the test database tables we need for our tests */
2 | /* first drop test tables from previous session so we have a clean database */
3 | DROP SCHEMA public cascade;
4 | CREATE SCHEMA public;
5 | /* create the people table */
6 | CREATE TABLE IF NOT EXISTS people (
7 | id SERIAL PRIMARY KEY,
8 | email VARCHAR(254) UNIQUE NOT NULL,
9 | password VARCHAR(60) NOT NULL
10 | );
11 | /* insert a person into the people table */
12 | INSERT INTO people (email, password)
13 | VALUES (
14 | 'test@test.net',
15 | '$2a$12$OgPE9DUNM0KaSodSQVJvw.36GjolssAeO.dfi7a9cmc9KbQTDTj7W'
16 | );
17 | /* create logs table */
18 | CREATE TABLE logs (
19 | log_id SERIAL PRIMARY KEY,
20 | log_timestamp INTEGER DEFAULT EXTRACT(EPOCH FROM CURRENT_TIMESTAMP),
21 | message VARCHAR(160) NOT NULL
22 | );
23 | INSERT INTO logs (message)
24 | VALUES (
25 | 'Hello World!'
26 | );
27 |
--------------------------------------------------------------------------------