├── .gitignore ├── README.md ├── data ├── db.js ├── lambda.db3 ├── migrations │ └── 20180401213248_add_posts_table.js └── seeds │ └── users.js ├── index.js ├── knexfile.js ├── package-lock.json └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | # nyc test coverage 21 | .nyc_output 22 | 23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 24 | .grunt 25 | 26 | # Bower dependency directory (https://bower.io/) 27 | bower_components 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (http://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules/ 37 | jspm_packages/ 38 | 39 | # Typescript v1 declaration files 40 | typings/ 41 | 42 | # Optional npm cache directory 43 | .npm 44 | 45 | # Optional eslint cache 46 | .eslintcache 47 | 48 | # Optional REPL history 49 | .node_repl_history 50 | 51 | # Output of 'npm pack' 52 | *.tgz 53 | 54 | # Yarn Integrity file 55 | .yarn-integrity 56 | 57 | # dotenv environment variables file 58 | .env 59 | 60 | # Mac files 61 | .DS_Store -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Node API Challenge 2 | 3 | ## Topics 4 | 5 | - Building a RESTful API. 6 | - Performing CRUD operations. 7 | - Writing API endpoints. 8 | 9 | ## Assignment 10 | 11 | Use Node.js and Express to build an API that performs CRUD operations on users. 12 | 13 | ### Download Project Files and Install Dependencies 14 | 15 | - **Fork** and **Clone** this repository. 16 | - **CD into the folder** where you cloned the repository. 17 | - Type `npm install` to download all dependencies listed inside `package.json`. 18 | 19 | ### Database access 20 | 21 | Database access will be done using the `db.js` file included inside the `data` folder. This file publishes the following methods: 22 | 23 | - `find()`: calling find returns a promise that resolves to an array of all the users contained in the database. 24 | - `findById()`: this method expects an `id` as it's only parameter and returns the user corresponding to the `id` provided or an empty array if no user with that `id` is found. 25 | - `insert()`: calling insert passing it a user object will add it to the database and return an object with the `id` of the inserted user. The object looks like this: `{ id: 123 }`. 26 | - `update()`: accepts two arguments, the first is the `id` of the user to update and the second is an object with the `changes` to apply. It returns the count of updated records. If the count is 1 it means the record was updated correctly. 27 | - `remove()`: the remove method accepts an `id` as it's first parameter and upon successfully deleting the user from the database it returns the number of records deleted. 28 | 29 | Now that we have a way to add, update, remove and retrieve data from the provided database, it is time to work on the API. 30 | 31 | ### Start the API and Implement Requirements 32 | 33 | - To start the server, type `npm run server` from the root folder (where the _package.json_ file is). The server is configured to restart automatically as you make changes. 34 | - Add the code necessary to implement the API requirements. 35 | - **Test the API using _Postman_ as you work through the exercises.** 36 | 37 | ### User Schema 38 | 39 | Users in the database conform to the following object structure: 40 | 41 | ```js 42 | { 43 | name: "Jane Doe", // String, required 44 | bio: "Not Tarzan's Wife, another Jane", // String 45 | created_at: Mon Aug 14 2017 12:50:16 GMT-0700 (PDT) // Date, defaults to current date 46 | updated_at: Mon Aug 14 2017 12:50:16 GMT-0700 (PDT) // Date, defaults to current date 47 | } 48 | ``` 49 | 50 | ### Write endpoints to perform the following queries 51 | 52 | Inside `index.js` add the code necessary to implement the following _endpoints_: 53 | 54 | | Method | URL | Description | 55 | | ------ | -------------- | --------------------------------------------------------------------------------------------------------------------------------- | 56 | | POST | /api/users | Creates a user using the information sent inside the `request body`. | 57 | | GET | /api/users | Returns an array of all the user objects contained in the database. | 58 | | GET | /api/users/:id | Returns the user object with the specified `id`. | 59 | | DELETE | /api/users/:id | Removes the user with the specified `id` and returns the deleted user. | 60 | | PUT | /api/users/:id | Updates the user with the specified `id` using data from the `request body`. Returns the modified document, **NOT the original**. | 61 | 62 | #### Endpoint Specifications 63 | 64 | When the client makes a `POST` request to `/api/users`: 65 | 66 | - If the request body is missing the `name` or `bio` property: 67 | 68 | - cancel the request. 69 | - respond with HTTP status code `400` (Bad Request). 70 | - return the following JSON response: `{ errorMessage: "Please provide name and bio for the user." }`. 71 | 72 | - If the information about the _user_ is valid: 73 | 74 | - save the new _user_ the the database. 75 | - return HTTP status code `201` (Created). 76 | - return the newly created _user document_. 77 | 78 | - If there's an error while saving the _user_: 79 | - cancel the request. 80 | - respond with HTTP status code `500` (Server Error). 81 | - return the following JSON object: `{ error: "There was an error while saving the user to the database" }`. 82 | 83 | When the client makes a `GET` request to `/api/users`: 84 | 85 | - If there's an error in retrieving the _users_ from the database: 86 | - cancel the request. 87 | - respond with HTTP status code `500`. 88 | - return the following JSON object: `{ error: "The users information could not be retrieved." }`. 89 | 90 | When the client makes a `GET` request to `/api/users/:id`: 91 | 92 | - If the _user_ with the specified `id` is not found: 93 | 94 | - return HTTP status code `404` (Not Found). 95 | - return the following JSON object: `{ message: "The user with the specified ID does not exist." }`. 96 | 97 | - If there's an error in retrieving the _user_ from the database: 98 | - cancel the request. 99 | - respond with HTTP status code `500`. 100 | - return the following JSON object: `{ error: "The user information could not be retrieved." }`. 101 | 102 | When the client makes a `DELETE` request to `/api/users/:id`: 103 | 104 | - If the _user_ with the specified `id` is not found: 105 | 106 | - return HTTP status code `404` (Not Found). 107 | - return the following JSON object: `{ message: "The user with the specified ID does not exist." }`. 108 | 109 | - If there's an error in removing the _user_ from the database: 110 | - cancel the request. 111 | - respond with HTTP status code `500`. 112 | - return the following JSON object: `{ error: "The user could not be removed" }`. 113 | 114 | When the client makes a `PUT` request to `/api/users/:id`: 115 | 116 | - If the _user_ with the specified `id` is not found: 117 | 118 | - return HTTP status code `404` (Not Found). 119 | - return the following JSON object: `{ message: "The user with the specified ID does not exist." }`. 120 | 121 | - If the request body is missing the `name` or `bio` property: 122 | 123 | - cancel the request. 124 | - respond with HTTP status code `400` (Bad Request). 125 | - return the following JSON response: `{ errorMessage: "Please provide name and bio for the user." }`. 126 | 127 | - If there's an error when updating the _user_: 128 | 129 | - cancel the request. 130 | - respond with HTTP status code `500`. 131 | - return the following JSON object: `{ error: "The user information could not be modified." }`. 132 | 133 | - If the user is found and the new information is valid: 134 | 135 | - update the user document in the database using the new information sent in the `request body`. 136 | - return HTTP status code `200` (OK). 137 | - return the newly updated _user document_. 138 | 139 | ## Stretch Problems 140 | 141 | To work on the stretch problems you'll need to enable the `cors` middleware. Follow these steps: 142 | 143 | - add the `cors` npm module: `npm i cors`. 144 | - add `server.use(cors())` after `server.use(express.json())`. 145 | 146 | Create a new React application and connect it to your server: 147 | 148 | - the React application can be anywhere, but, for this project create it inside the folder for the solution. 149 | - connect to the `/api/users` endpoint in the API and show the list of users. 150 | - add a delete button to each displayed user that will remove it from the server. 151 | - add forms to add and update data. 152 | - Style the list of users however you see fit. 153 | -------------------------------------------------------------------------------- /data/db.js: -------------------------------------------------------------------------------- 1 | const knex = require('knex'); 2 | const knexConfig = require('../knexfile.js'); 3 | const db = knex(knexConfig.development); 4 | 5 | module.exports = { 6 | find, 7 | findById, 8 | insert, 9 | update, 10 | remove, 11 | }; 12 | 13 | function find() { 14 | return db('users'); 15 | } 16 | 17 | function findById(id) { 18 | return db('users') 19 | .where({ id: Number(id) }) 20 | .first(); 21 | } 22 | 23 | function insert(user) { 24 | return db('users') 25 | .insert(user) 26 | .then(ids => ({ id: ids[0] })); 27 | } 28 | 29 | function update(id, user) { 30 | return db('users') 31 | .where('id', Number(id)) 32 | .update(user); 33 | } 34 | 35 | function remove(id) { 36 | return db('users') 37 | .where('id', Number(id)) 38 | .del(); 39 | } 40 | -------------------------------------------------------------------------------- /data/lambda.db3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bloominstituteoftechnology/webapi-i-challenge/1aa89b9a644a51b95ca3cb6e283ef64bf34dac09/data/lambda.db3 -------------------------------------------------------------------------------- /data/migrations/20180401213248_add_posts_table.js: -------------------------------------------------------------------------------- 1 | exports.up = function(knex, Promise) { 2 | return knex.schema.createTable('users', function(users) { 3 | users.increments(); 4 | 5 | users.string('name', 255).notNullable(); 6 | users.text('bio'); 7 | 8 | users.timestamps(true, true); 9 | }); 10 | }; 11 | 12 | exports.down = function(knex, Promise) { 13 | return knex.schema.dropTableIfExists('users'); 14 | }; 15 | -------------------------------------------------------------------------------- /data/seeds/users.js: -------------------------------------------------------------------------------- 1 | exports.seed = function(knex) { 2 | return knex('users') 3 | .truncate() 4 | .then(function() { 5 | return knex('users').insert([ 6 | { 7 | name: 'Samwise Gamgee', 8 | bio: 'Gardener and poet. Married to Rose Cotton', 9 | }, 10 | { 11 | name: 'Frodo Baggins', 12 | bio: 'The ring bearer', 13 | }, 14 | ]); 15 | }); 16 | }; 17 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | // implement your API here 2 | -------------------------------------------------------------------------------- /knexfile.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | development: { 3 | client: 'sqlite3', 4 | connection: { filename: './data/lambda.db3' }, 5 | useNullAsDefault: true, 6 | migrations: { 7 | directory: './data/migrations', 8 | tableName: 'dbmigrations', 9 | }, 10 | seeds: { directory: './data/seeds' }, 11 | }, 12 | }; 13 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "webapi-i-challenge", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "webapi-i-challenge", 9 | "dependencies": { 10 | "knex": "^2.4.2", 11 | "sqlite3": "^5.1.4" 12 | }, 13 | "devDependencies": { 14 | "nodemon": "^2.0.20" 15 | } 16 | }, 17 | "node_modules/@gar/promisify": { 18 | "version": "1.1.3", 19 | "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", 20 | "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", 21 | "optional": true 22 | }, 23 | "node_modules/@mapbox/node-pre-gyp": { 24 | "version": "1.0.10", 25 | "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz", 26 | "integrity": "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==", 27 | "dependencies": { 28 | "detect-libc": "^2.0.0", 29 | "https-proxy-agent": "^5.0.0", 30 | "make-dir": "^3.1.0", 31 | "node-fetch": "^2.6.7", 32 | "nopt": "^5.0.0", 33 | "npmlog": "^5.0.1", 34 | "rimraf": "^3.0.2", 35 | "semver": "^7.3.5", 36 | "tar": "^6.1.11" 37 | }, 38 | "bin": { 39 | "node-pre-gyp": "bin/node-pre-gyp" 40 | } 41 | }, 42 | "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { 43 | "version": "7.3.8", 44 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", 45 | "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", 46 | "dependencies": { 47 | "lru-cache": "^6.0.0" 48 | }, 49 | "bin": { 50 | "semver": "bin/semver.js" 51 | }, 52 | "engines": { 53 | "node": ">=10" 54 | } 55 | }, 56 | "node_modules/@npmcli/fs": { 57 | "version": "1.1.1", 58 | "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", 59 | "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", 60 | "optional": true, 61 | "dependencies": { 62 | "@gar/promisify": "^1.0.1", 63 | "semver": "^7.3.5" 64 | } 65 | }, 66 | "node_modules/@npmcli/fs/node_modules/semver": { 67 | "version": "7.3.8", 68 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", 69 | "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", 70 | "optional": true, 71 | "dependencies": { 72 | "lru-cache": "^6.0.0" 73 | }, 74 | "bin": { 75 | "semver": "bin/semver.js" 76 | }, 77 | "engines": { 78 | "node": ">=10" 79 | } 80 | }, 81 | "node_modules/@npmcli/move-file": { 82 | "version": "1.1.2", 83 | "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", 84 | "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", 85 | "deprecated": "This functionality has been moved to @npmcli/fs", 86 | "optional": true, 87 | "dependencies": { 88 | "mkdirp": "^1.0.4", 89 | "rimraf": "^3.0.2" 90 | }, 91 | "engines": { 92 | "node": ">=10" 93 | } 94 | }, 95 | "node_modules/@tootallnate/once": { 96 | "version": "1.1.2", 97 | "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", 98 | "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", 99 | "optional": true, 100 | "engines": { 101 | "node": ">= 6" 102 | } 103 | }, 104 | "node_modules/abbrev": { 105 | "version": "1.1.1", 106 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 107 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" 108 | }, 109 | "node_modules/agent-base": { 110 | "version": "6.0.2", 111 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", 112 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 113 | "dependencies": { 114 | "debug": "4" 115 | }, 116 | "engines": { 117 | "node": ">= 6.0.0" 118 | } 119 | }, 120 | "node_modules/agentkeepalive": { 121 | "version": "4.2.1", 122 | "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", 123 | "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", 124 | "optional": true, 125 | "dependencies": { 126 | "debug": "^4.1.0", 127 | "depd": "^1.1.2", 128 | "humanize-ms": "^1.2.1" 129 | }, 130 | "engines": { 131 | "node": ">= 8.0.0" 132 | } 133 | }, 134 | "node_modules/aggregate-error": { 135 | "version": "3.1.0", 136 | "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", 137 | "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", 138 | "optional": true, 139 | "dependencies": { 140 | "clean-stack": "^2.0.0", 141 | "indent-string": "^4.0.0" 142 | }, 143 | "engines": { 144 | "node": ">=8" 145 | } 146 | }, 147 | "node_modules/ansi-regex": { 148 | "version": "5.0.1", 149 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 150 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 151 | "engines": { 152 | "node": ">=8" 153 | } 154 | }, 155 | "node_modules/anymatch": { 156 | "version": "3.1.3", 157 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 158 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 159 | "dev": true, 160 | "dependencies": { 161 | "normalize-path": "^3.0.0", 162 | "picomatch": "^2.0.4" 163 | }, 164 | "engines": { 165 | "node": ">= 8" 166 | } 167 | }, 168 | "node_modules/aproba": { 169 | "version": "2.0.0", 170 | "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", 171 | "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" 172 | }, 173 | "node_modules/are-we-there-yet": { 174 | "version": "2.0.0", 175 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", 176 | "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", 177 | "dependencies": { 178 | "delegates": "^1.0.0", 179 | "readable-stream": "^3.6.0" 180 | }, 181 | "engines": { 182 | "node": ">=10" 183 | } 184 | }, 185 | "node_modules/balanced-match": { 186 | "version": "1.0.2", 187 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 188 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 189 | }, 190 | "node_modules/binary-extensions": { 191 | "version": "2.2.0", 192 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 193 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 194 | "dev": true, 195 | "engines": { 196 | "node": ">=8" 197 | } 198 | }, 199 | "node_modules/brace-expansion": { 200 | "version": "1.1.11", 201 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 202 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 203 | "dependencies": { 204 | "balanced-match": "^1.0.0", 205 | "concat-map": "0.0.1" 206 | } 207 | }, 208 | "node_modules/braces": { 209 | "version": "3.0.2", 210 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 211 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 212 | "dev": true, 213 | "dependencies": { 214 | "fill-range": "^7.0.1" 215 | }, 216 | "engines": { 217 | "node": ">=8" 218 | } 219 | }, 220 | "node_modules/cacache": { 221 | "version": "15.3.0", 222 | "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", 223 | "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", 224 | "optional": true, 225 | "dependencies": { 226 | "@npmcli/fs": "^1.0.0", 227 | "@npmcli/move-file": "^1.0.1", 228 | "chownr": "^2.0.0", 229 | "fs-minipass": "^2.0.0", 230 | "glob": "^7.1.4", 231 | "infer-owner": "^1.0.4", 232 | "lru-cache": "^6.0.0", 233 | "minipass": "^3.1.1", 234 | "minipass-collect": "^1.0.2", 235 | "minipass-flush": "^1.0.5", 236 | "minipass-pipeline": "^1.2.2", 237 | "mkdirp": "^1.0.3", 238 | "p-map": "^4.0.0", 239 | "promise-inflight": "^1.0.1", 240 | "rimraf": "^3.0.2", 241 | "ssri": "^8.0.1", 242 | "tar": "^6.0.2", 243 | "unique-filename": "^1.1.1" 244 | }, 245 | "engines": { 246 | "node": ">= 10" 247 | } 248 | }, 249 | "node_modules/chokidar": { 250 | "version": "3.5.3", 251 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 252 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 253 | "dev": true, 254 | "funding": [ 255 | { 256 | "type": "individual", 257 | "url": "https://paulmillr.com/funding/" 258 | } 259 | ], 260 | "dependencies": { 261 | "anymatch": "~3.1.2", 262 | "braces": "~3.0.2", 263 | "glob-parent": "~5.1.2", 264 | "is-binary-path": "~2.1.0", 265 | "is-glob": "~4.0.1", 266 | "normalize-path": "~3.0.0", 267 | "readdirp": "~3.6.0" 268 | }, 269 | "engines": { 270 | "node": ">= 8.10.0" 271 | }, 272 | "optionalDependencies": { 273 | "fsevents": "~2.3.2" 274 | } 275 | }, 276 | "node_modules/chownr": { 277 | "version": "2.0.0", 278 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", 279 | "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", 280 | "engines": { 281 | "node": ">=10" 282 | } 283 | }, 284 | "node_modules/clean-stack": { 285 | "version": "2.2.0", 286 | "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", 287 | "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", 288 | "optional": true, 289 | "engines": { 290 | "node": ">=6" 291 | } 292 | }, 293 | "node_modules/color-support": { 294 | "version": "1.1.3", 295 | "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", 296 | "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", 297 | "bin": { 298 | "color-support": "bin.js" 299 | } 300 | }, 301 | "node_modules/colorette": { 302 | "version": "2.0.19", 303 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", 304 | "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" 305 | }, 306 | "node_modules/commander": { 307 | "version": "9.5.0", 308 | "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", 309 | "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", 310 | "engines": { 311 | "node": "^12.20.0 || >=14" 312 | } 313 | }, 314 | "node_modules/concat-map": { 315 | "version": "0.0.1", 316 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 317 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" 318 | }, 319 | "node_modules/console-control-strings": { 320 | "version": "1.1.0", 321 | "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", 322 | "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" 323 | }, 324 | "node_modules/debug": { 325 | "version": "4.3.4", 326 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 327 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 328 | "dependencies": { 329 | "ms": "2.1.2" 330 | }, 331 | "engines": { 332 | "node": ">=6.0" 333 | }, 334 | "peerDependenciesMeta": { 335 | "supports-color": { 336 | "optional": true 337 | } 338 | } 339 | }, 340 | "node_modules/delegates": { 341 | "version": "1.0.0", 342 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", 343 | "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" 344 | }, 345 | "node_modules/depd": { 346 | "version": "1.1.2", 347 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 348 | "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", 349 | "optional": true, 350 | "engines": { 351 | "node": ">= 0.6" 352 | } 353 | }, 354 | "node_modules/detect-libc": { 355 | "version": "2.0.1", 356 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", 357 | "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", 358 | "engines": { 359 | "node": ">=8" 360 | } 361 | }, 362 | "node_modules/emoji-regex": { 363 | "version": "8.0.0", 364 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 365 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 366 | }, 367 | "node_modules/encoding": { 368 | "version": "0.1.13", 369 | "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", 370 | "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", 371 | "optional": true, 372 | "dependencies": { 373 | "iconv-lite": "^0.6.2" 374 | } 375 | }, 376 | "node_modules/env-paths": { 377 | "version": "2.2.1", 378 | "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", 379 | "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", 380 | "optional": true, 381 | "engines": { 382 | "node": ">=6" 383 | } 384 | }, 385 | "node_modules/err-code": { 386 | "version": "2.0.3", 387 | "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", 388 | "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", 389 | "optional": true 390 | }, 391 | "node_modules/escalade": { 392 | "version": "3.1.1", 393 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 394 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 395 | "engines": { 396 | "node": ">=6" 397 | } 398 | }, 399 | "node_modules/esm": { 400 | "version": "3.2.25", 401 | "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", 402 | "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", 403 | "engines": { 404 | "node": ">=6" 405 | } 406 | }, 407 | "node_modules/fill-range": { 408 | "version": "7.0.1", 409 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 410 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 411 | "dev": true, 412 | "dependencies": { 413 | "to-regex-range": "^5.0.1" 414 | }, 415 | "engines": { 416 | "node": ">=8" 417 | } 418 | }, 419 | "node_modules/fs-minipass": { 420 | "version": "2.1.0", 421 | "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", 422 | "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", 423 | "dependencies": { 424 | "minipass": "^3.0.0" 425 | }, 426 | "engines": { 427 | "node": ">= 8" 428 | } 429 | }, 430 | "node_modules/fs.realpath": { 431 | "version": "1.0.0", 432 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 433 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" 434 | }, 435 | "node_modules/fsevents": { 436 | "version": "2.3.2", 437 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 438 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 439 | "dev": true, 440 | "hasInstallScript": true, 441 | "optional": true, 442 | "os": [ 443 | "darwin" 444 | ], 445 | "engines": { 446 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 447 | } 448 | }, 449 | "node_modules/function-bind": { 450 | "version": "1.1.1", 451 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 452 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 453 | }, 454 | "node_modules/gauge": { 455 | "version": "3.0.2", 456 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", 457 | "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", 458 | "dependencies": { 459 | "aproba": "^1.0.3 || ^2.0.0", 460 | "color-support": "^1.1.2", 461 | "console-control-strings": "^1.0.0", 462 | "has-unicode": "^2.0.1", 463 | "object-assign": "^4.1.1", 464 | "signal-exit": "^3.0.0", 465 | "string-width": "^4.2.3", 466 | "strip-ansi": "^6.0.1", 467 | "wide-align": "^1.1.2" 468 | }, 469 | "engines": { 470 | "node": ">=10" 471 | } 472 | }, 473 | "node_modules/get-package-type": { 474 | "version": "0.1.0", 475 | "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", 476 | "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", 477 | "engines": { 478 | "node": ">=8.0.0" 479 | } 480 | }, 481 | "node_modules/getopts": { 482 | "version": "2.3.0", 483 | "resolved": "https://registry.npmjs.org/getopts/-/getopts-2.3.0.tgz", 484 | "integrity": "sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA==" 485 | }, 486 | "node_modules/glob": { 487 | "version": "7.2.3", 488 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 489 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 490 | "dependencies": { 491 | "fs.realpath": "^1.0.0", 492 | "inflight": "^1.0.4", 493 | "inherits": "2", 494 | "minimatch": "^3.1.1", 495 | "once": "^1.3.0", 496 | "path-is-absolute": "^1.0.0" 497 | }, 498 | "engines": { 499 | "node": "*" 500 | }, 501 | "funding": { 502 | "url": "https://github.com/sponsors/isaacs" 503 | } 504 | }, 505 | "node_modules/glob-parent": { 506 | "version": "5.1.2", 507 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 508 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 509 | "dev": true, 510 | "dependencies": { 511 | "is-glob": "^4.0.1" 512 | }, 513 | "engines": { 514 | "node": ">= 6" 515 | } 516 | }, 517 | "node_modules/graceful-fs": { 518 | "version": "4.2.10", 519 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", 520 | "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", 521 | "optional": true 522 | }, 523 | "node_modules/has": { 524 | "version": "1.0.3", 525 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 526 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 527 | "dependencies": { 528 | "function-bind": "^1.1.1" 529 | }, 530 | "engines": { 531 | "node": ">= 0.4.0" 532 | } 533 | }, 534 | "node_modules/has-flag": { 535 | "version": "3.0.0", 536 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 537 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 538 | "dev": true, 539 | "engines": { 540 | "node": ">=4" 541 | } 542 | }, 543 | "node_modules/has-unicode": { 544 | "version": "2.0.1", 545 | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", 546 | "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" 547 | }, 548 | "node_modules/http-cache-semantics": { 549 | "version": "4.1.1", 550 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", 551 | "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", 552 | "optional": true 553 | }, 554 | "node_modules/http-proxy-agent": { 555 | "version": "4.0.1", 556 | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", 557 | "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", 558 | "optional": true, 559 | "dependencies": { 560 | "@tootallnate/once": "1", 561 | "agent-base": "6", 562 | "debug": "4" 563 | }, 564 | "engines": { 565 | "node": ">= 6" 566 | } 567 | }, 568 | "node_modules/https-proxy-agent": { 569 | "version": "5.0.1", 570 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", 571 | "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", 572 | "dependencies": { 573 | "agent-base": "6", 574 | "debug": "4" 575 | }, 576 | "engines": { 577 | "node": ">= 6" 578 | } 579 | }, 580 | "node_modules/humanize-ms": { 581 | "version": "1.2.1", 582 | "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", 583 | "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", 584 | "optional": true, 585 | "dependencies": { 586 | "ms": "^2.0.0" 587 | } 588 | }, 589 | "node_modules/iconv-lite": { 590 | "version": "0.6.3", 591 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", 592 | "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", 593 | "optional": true, 594 | "dependencies": { 595 | "safer-buffer": ">= 2.1.2 < 3.0.0" 596 | }, 597 | "engines": { 598 | "node": ">=0.10.0" 599 | } 600 | }, 601 | "node_modules/ignore-by-default": { 602 | "version": "1.0.1", 603 | "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", 604 | "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", 605 | "dev": true 606 | }, 607 | "node_modules/imurmurhash": { 608 | "version": "0.1.4", 609 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 610 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 611 | "optional": true, 612 | "engines": { 613 | "node": ">=0.8.19" 614 | } 615 | }, 616 | "node_modules/indent-string": { 617 | "version": "4.0.0", 618 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", 619 | "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", 620 | "optional": true, 621 | "engines": { 622 | "node": ">=8" 623 | } 624 | }, 625 | "node_modules/infer-owner": { 626 | "version": "1.0.4", 627 | "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", 628 | "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", 629 | "optional": true 630 | }, 631 | "node_modules/inflight": { 632 | "version": "1.0.6", 633 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 634 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 635 | "dependencies": { 636 | "once": "^1.3.0", 637 | "wrappy": "1" 638 | } 639 | }, 640 | "node_modules/inherits": { 641 | "version": "2.0.4", 642 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 643 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 644 | }, 645 | "node_modules/interpret": { 646 | "version": "2.2.0", 647 | "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", 648 | "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", 649 | "engines": { 650 | "node": ">= 0.10" 651 | } 652 | }, 653 | "node_modules/ip": { 654 | "version": "2.0.0", 655 | "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", 656 | "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", 657 | "optional": true 658 | }, 659 | "node_modules/is-binary-path": { 660 | "version": "2.1.0", 661 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 662 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 663 | "dev": true, 664 | "dependencies": { 665 | "binary-extensions": "^2.0.0" 666 | }, 667 | "engines": { 668 | "node": ">=8" 669 | } 670 | }, 671 | "node_modules/is-core-module": { 672 | "version": "2.11.0", 673 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", 674 | "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", 675 | "dependencies": { 676 | "has": "^1.0.3" 677 | }, 678 | "funding": { 679 | "url": "https://github.com/sponsors/ljharb" 680 | } 681 | }, 682 | "node_modules/is-extglob": { 683 | "version": "2.1.1", 684 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 685 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 686 | "dev": true, 687 | "engines": { 688 | "node": ">=0.10.0" 689 | } 690 | }, 691 | "node_modules/is-fullwidth-code-point": { 692 | "version": "3.0.0", 693 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 694 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 695 | "engines": { 696 | "node": ">=8" 697 | } 698 | }, 699 | "node_modules/is-glob": { 700 | "version": "4.0.3", 701 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 702 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 703 | "dev": true, 704 | "dependencies": { 705 | "is-extglob": "^2.1.1" 706 | }, 707 | "engines": { 708 | "node": ">=0.10.0" 709 | } 710 | }, 711 | "node_modules/is-lambda": { 712 | "version": "1.0.1", 713 | "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", 714 | "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", 715 | "optional": true 716 | }, 717 | "node_modules/is-number": { 718 | "version": "7.0.0", 719 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 720 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 721 | "dev": true, 722 | "engines": { 723 | "node": ">=0.12.0" 724 | } 725 | }, 726 | "node_modules/isexe": { 727 | "version": "2.0.0", 728 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 729 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 730 | "optional": true 731 | }, 732 | "node_modules/knex": { 733 | "version": "2.4.2", 734 | "resolved": "https://registry.npmjs.org/knex/-/knex-2.4.2.tgz", 735 | "integrity": "sha512-tMI1M7a+xwHhPxjbl/H9K1kHX+VncEYcvCx5K00M16bWvpYPKAZd6QrCu68PtHAdIZNQPWZn0GVhqVBEthGWCg==", 736 | "dependencies": { 737 | "colorette": "2.0.19", 738 | "commander": "^9.1.0", 739 | "debug": "4.3.4", 740 | "escalade": "^3.1.1", 741 | "esm": "^3.2.25", 742 | "get-package-type": "^0.1.0", 743 | "getopts": "2.3.0", 744 | "interpret": "^2.2.0", 745 | "lodash": "^4.17.21", 746 | "pg-connection-string": "2.5.0", 747 | "rechoir": "^0.8.0", 748 | "resolve-from": "^5.0.0", 749 | "tarn": "^3.0.2", 750 | "tildify": "2.0.0" 751 | }, 752 | "bin": { 753 | "knex": "bin/cli.js" 754 | }, 755 | "engines": { 756 | "node": ">=12" 757 | }, 758 | "peerDependenciesMeta": { 759 | "better-sqlite3": { 760 | "optional": true 761 | }, 762 | "mysql": { 763 | "optional": true 764 | }, 765 | "mysql2": { 766 | "optional": true 767 | }, 768 | "pg": { 769 | "optional": true 770 | }, 771 | "pg-native": { 772 | "optional": true 773 | }, 774 | "sqlite3": { 775 | "optional": true 776 | }, 777 | "tedious": { 778 | "optional": true 779 | } 780 | } 781 | }, 782 | "node_modules/lodash": { 783 | "version": "4.17.21", 784 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 785 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 786 | }, 787 | "node_modules/lru-cache": { 788 | "version": "6.0.0", 789 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 790 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 791 | "dependencies": { 792 | "yallist": "^4.0.0" 793 | }, 794 | "engines": { 795 | "node": ">=10" 796 | } 797 | }, 798 | "node_modules/make-dir": { 799 | "version": "3.1.0", 800 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", 801 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", 802 | "dependencies": { 803 | "semver": "^6.0.0" 804 | }, 805 | "engines": { 806 | "node": ">=8" 807 | }, 808 | "funding": { 809 | "url": "https://github.com/sponsors/sindresorhus" 810 | } 811 | }, 812 | "node_modules/make-dir/node_modules/semver": { 813 | "version": "6.3.0", 814 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 815 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 816 | "bin": { 817 | "semver": "bin/semver.js" 818 | } 819 | }, 820 | "node_modules/make-fetch-happen": { 821 | "version": "9.1.0", 822 | "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", 823 | "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", 824 | "optional": true, 825 | "dependencies": { 826 | "agentkeepalive": "^4.1.3", 827 | "cacache": "^15.2.0", 828 | "http-cache-semantics": "^4.1.0", 829 | "http-proxy-agent": "^4.0.1", 830 | "https-proxy-agent": "^5.0.0", 831 | "is-lambda": "^1.0.1", 832 | "lru-cache": "^6.0.0", 833 | "minipass": "^3.1.3", 834 | "minipass-collect": "^1.0.2", 835 | "minipass-fetch": "^1.3.2", 836 | "minipass-flush": "^1.0.5", 837 | "minipass-pipeline": "^1.2.4", 838 | "negotiator": "^0.6.2", 839 | "promise-retry": "^2.0.1", 840 | "socks-proxy-agent": "^6.0.0", 841 | "ssri": "^8.0.0" 842 | }, 843 | "engines": { 844 | "node": ">= 10" 845 | } 846 | }, 847 | "node_modules/minimatch": { 848 | "version": "3.1.2", 849 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 850 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 851 | "dependencies": { 852 | "brace-expansion": "^1.1.7" 853 | }, 854 | "engines": { 855 | "node": "*" 856 | } 857 | }, 858 | "node_modules/minipass": { 859 | "version": "3.3.6", 860 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", 861 | "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", 862 | "dependencies": { 863 | "yallist": "^4.0.0" 864 | }, 865 | "engines": { 866 | "node": ">=8" 867 | } 868 | }, 869 | "node_modules/minipass-collect": { 870 | "version": "1.0.2", 871 | "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", 872 | "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", 873 | "optional": true, 874 | "dependencies": { 875 | "minipass": "^3.0.0" 876 | }, 877 | "engines": { 878 | "node": ">= 8" 879 | } 880 | }, 881 | "node_modules/minipass-fetch": { 882 | "version": "1.4.1", 883 | "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", 884 | "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", 885 | "optional": true, 886 | "dependencies": { 887 | "minipass": "^3.1.0", 888 | "minipass-sized": "^1.0.3", 889 | "minizlib": "^2.0.0" 890 | }, 891 | "engines": { 892 | "node": ">=8" 893 | }, 894 | "optionalDependencies": { 895 | "encoding": "^0.1.12" 896 | } 897 | }, 898 | "node_modules/minipass-flush": { 899 | "version": "1.0.5", 900 | "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", 901 | "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", 902 | "optional": true, 903 | "dependencies": { 904 | "minipass": "^3.0.0" 905 | }, 906 | "engines": { 907 | "node": ">= 8" 908 | } 909 | }, 910 | "node_modules/minipass-pipeline": { 911 | "version": "1.2.4", 912 | "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", 913 | "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", 914 | "optional": true, 915 | "dependencies": { 916 | "minipass": "^3.0.0" 917 | }, 918 | "engines": { 919 | "node": ">=8" 920 | } 921 | }, 922 | "node_modules/minipass-sized": { 923 | "version": "1.0.3", 924 | "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", 925 | "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", 926 | "optional": true, 927 | "dependencies": { 928 | "minipass": "^3.0.0" 929 | }, 930 | "engines": { 931 | "node": ">=8" 932 | } 933 | }, 934 | "node_modules/minizlib": { 935 | "version": "2.1.2", 936 | "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", 937 | "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", 938 | "dependencies": { 939 | "minipass": "^3.0.0", 940 | "yallist": "^4.0.0" 941 | }, 942 | "engines": { 943 | "node": ">= 8" 944 | } 945 | }, 946 | "node_modules/mkdirp": { 947 | "version": "1.0.4", 948 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", 949 | "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", 950 | "bin": { 951 | "mkdirp": "bin/cmd.js" 952 | }, 953 | "engines": { 954 | "node": ">=10" 955 | } 956 | }, 957 | "node_modules/ms": { 958 | "version": "2.1.2", 959 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 960 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 961 | }, 962 | "node_modules/negotiator": { 963 | "version": "0.6.3", 964 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 965 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 966 | "optional": true, 967 | "engines": { 968 | "node": ">= 0.6" 969 | } 970 | }, 971 | "node_modules/node-addon-api": { 972 | "version": "4.3.0", 973 | "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", 974 | "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" 975 | }, 976 | "node_modules/node-fetch": { 977 | "version": "2.6.9", 978 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", 979 | "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", 980 | "dependencies": { 981 | "whatwg-url": "^5.0.0" 982 | }, 983 | "engines": { 984 | "node": "4.x || >=6.0.0" 985 | }, 986 | "peerDependencies": { 987 | "encoding": "^0.1.0" 988 | }, 989 | "peerDependenciesMeta": { 990 | "encoding": { 991 | "optional": true 992 | } 993 | } 994 | }, 995 | "node_modules/node-gyp": { 996 | "version": "8.4.1", 997 | "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", 998 | "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", 999 | "optional": true, 1000 | "dependencies": { 1001 | "env-paths": "^2.2.0", 1002 | "glob": "^7.1.4", 1003 | "graceful-fs": "^4.2.6", 1004 | "make-fetch-happen": "^9.1.0", 1005 | "nopt": "^5.0.0", 1006 | "npmlog": "^6.0.0", 1007 | "rimraf": "^3.0.2", 1008 | "semver": "^7.3.5", 1009 | "tar": "^6.1.2", 1010 | "which": "^2.0.2" 1011 | }, 1012 | "bin": { 1013 | "node-gyp": "bin/node-gyp.js" 1014 | }, 1015 | "engines": { 1016 | "node": ">= 10.12.0" 1017 | } 1018 | }, 1019 | "node_modules/node-gyp/node_modules/are-we-there-yet": { 1020 | "version": "3.0.1", 1021 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", 1022 | "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", 1023 | "optional": true, 1024 | "dependencies": { 1025 | "delegates": "^1.0.0", 1026 | "readable-stream": "^3.6.0" 1027 | }, 1028 | "engines": { 1029 | "node": "^12.13.0 || ^14.15.0 || >=16.0.0" 1030 | } 1031 | }, 1032 | "node_modules/node-gyp/node_modules/gauge": { 1033 | "version": "4.0.4", 1034 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", 1035 | "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", 1036 | "optional": true, 1037 | "dependencies": { 1038 | "aproba": "^1.0.3 || ^2.0.0", 1039 | "color-support": "^1.1.3", 1040 | "console-control-strings": "^1.1.0", 1041 | "has-unicode": "^2.0.1", 1042 | "signal-exit": "^3.0.7", 1043 | "string-width": "^4.2.3", 1044 | "strip-ansi": "^6.0.1", 1045 | "wide-align": "^1.1.5" 1046 | }, 1047 | "engines": { 1048 | "node": "^12.13.0 || ^14.15.0 || >=16.0.0" 1049 | } 1050 | }, 1051 | "node_modules/node-gyp/node_modules/npmlog": { 1052 | "version": "6.0.2", 1053 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", 1054 | "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", 1055 | "optional": true, 1056 | "dependencies": { 1057 | "are-we-there-yet": "^3.0.0", 1058 | "console-control-strings": "^1.1.0", 1059 | "gauge": "^4.0.3", 1060 | "set-blocking": "^2.0.0" 1061 | }, 1062 | "engines": { 1063 | "node": "^12.13.0 || ^14.15.0 || >=16.0.0" 1064 | } 1065 | }, 1066 | "node_modules/node-gyp/node_modules/semver": { 1067 | "version": "7.3.8", 1068 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", 1069 | "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", 1070 | "optional": true, 1071 | "dependencies": { 1072 | "lru-cache": "^6.0.0" 1073 | }, 1074 | "bin": { 1075 | "semver": "bin/semver.js" 1076 | }, 1077 | "engines": { 1078 | "node": ">=10" 1079 | } 1080 | }, 1081 | "node_modules/nodemon": { 1082 | "version": "2.0.20", 1083 | "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz", 1084 | "integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==", 1085 | "dev": true, 1086 | "dependencies": { 1087 | "chokidar": "^3.5.2", 1088 | "debug": "^3.2.7", 1089 | "ignore-by-default": "^1.0.1", 1090 | "minimatch": "^3.1.2", 1091 | "pstree.remy": "^1.1.8", 1092 | "semver": "^5.7.1", 1093 | "simple-update-notifier": "^1.0.7", 1094 | "supports-color": "^5.5.0", 1095 | "touch": "^3.1.0", 1096 | "undefsafe": "^2.0.5" 1097 | }, 1098 | "bin": { 1099 | "nodemon": "bin/nodemon.js" 1100 | }, 1101 | "engines": { 1102 | "node": ">=8.10.0" 1103 | }, 1104 | "funding": { 1105 | "type": "opencollective", 1106 | "url": "https://opencollective.com/nodemon" 1107 | } 1108 | }, 1109 | "node_modules/nodemon/node_modules/debug": { 1110 | "version": "3.2.7", 1111 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 1112 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 1113 | "dev": true, 1114 | "dependencies": { 1115 | "ms": "^2.1.1" 1116 | } 1117 | }, 1118 | "node_modules/nopt": { 1119 | "version": "5.0.0", 1120 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", 1121 | "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", 1122 | "dependencies": { 1123 | "abbrev": "1" 1124 | }, 1125 | "bin": { 1126 | "nopt": "bin/nopt.js" 1127 | }, 1128 | "engines": { 1129 | "node": ">=6" 1130 | } 1131 | }, 1132 | "node_modules/normalize-path": { 1133 | "version": "3.0.0", 1134 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1135 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1136 | "dev": true, 1137 | "engines": { 1138 | "node": ">=0.10.0" 1139 | } 1140 | }, 1141 | "node_modules/npmlog": { 1142 | "version": "5.0.1", 1143 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", 1144 | "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", 1145 | "dependencies": { 1146 | "are-we-there-yet": "^2.0.0", 1147 | "console-control-strings": "^1.1.0", 1148 | "gauge": "^3.0.0", 1149 | "set-blocking": "^2.0.0" 1150 | } 1151 | }, 1152 | "node_modules/object-assign": { 1153 | "version": "4.1.1", 1154 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1155 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 1156 | "engines": { 1157 | "node": ">=0.10.0" 1158 | } 1159 | }, 1160 | "node_modules/once": { 1161 | "version": "1.4.0", 1162 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1163 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1164 | "dependencies": { 1165 | "wrappy": "1" 1166 | } 1167 | }, 1168 | "node_modules/p-map": { 1169 | "version": "4.0.0", 1170 | "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", 1171 | "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", 1172 | "optional": true, 1173 | "dependencies": { 1174 | "aggregate-error": "^3.0.0" 1175 | }, 1176 | "engines": { 1177 | "node": ">=10" 1178 | }, 1179 | "funding": { 1180 | "url": "https://github.com/sponsors/sindresorhus" 1181 | } 1182 | }, 1183 | "node_modules/path-is-absolute": { 1184 | "version": "1.0.1", 1185 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1186 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 1187 | "engines": { 1188 | "node": ">=0.10.0" 1189 | } 1190 | }, 1191 | "node_modules/path-parse": { 1192 | "version": "1.0.7", 1193 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1194 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" 1195 | }, 1196 | "node_modules/pg-connection-string": { 1197 | "version": "2.5.0", 1198 | "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", 1199 | "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" 1200 | }, 1201 | "node_modules/picomatch": { 1202 | "version": "2.3.1", 1203 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1204 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1205 | "dev": true, 1206 | "engines": { 1207 | "node": ">=8.6" 1208 | }, 1209 | "funding": { 1210 | "url": "https://github.com/sponsors/jonschlinkert" 1211 | } 1212 | }, 1213 | "node_modules/promise-inflight": { 1214 | "version": "1.0.1", 1215 | "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", 1216 | "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", 1217 | "optional": true 1218 | }, 1219 | "node_modules/promise-retry": { 1220 | "version": "2.0.1", 1221 | "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", 1222 | "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", 1223 | "optional": true, 1224 | "dependencies": { 1225 | "err-code": "^2.0.2", 1226 | "retry": "^0.12.0" 1227 | }, 1228 | "engines": { 1229 | "node": ">=10" 1230 | } 1231 | }, 1232 | "node_modules/pstree.remy": { 1233 | "version": "1.1.8", 1234 | "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", 1235 | "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", 1236 | "dev": true 1237 | }, 1238 | "node_modules/readable-stream": { 1239 | "version": "3.6.1", 1240 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.1.tgz", 1241 | "integrity": "sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ==", 1242 | "dependencies": { 1243 | "inherits": "^2.0.3", 1244 | "string_decoder": "^1.1.1", 1245 | "util-deprecate": "^1.0.1" 1246 | }, 1247 | "engines": { 1248 | "node": ">= 6" 1249 | } 1250 | }, 1251 | "node_modules/readdirp": { 1252 | "version": "3.6.0", 1253 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1254 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1255 | "dev": true, 1256 | "dependencies": { 1257 | "picomatch": "^2.2.1" 1258 | }, 1259 | "engines": { 1260 | "node": ">=8.10.0" 1261 | } 1262 | }, 1263 | "node_modules/rechoir": { 1264 | "version": "0.8.0", 1265 | "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", 1266 | "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", 1267 | "dependencies": { 1268 | "resolve": "^1.20.0" 1269 | }, 1270 | "engines": { 1271 | "node": ">= 10.13.0" 1272 | } 1273 | }, 1274 | "node_modules/resolve": { 1275 | "version": "1.22.1", 1276 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", 1277 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", 1278 | "dependencies": { 1279 | "is-core-module": "^2.9.0", 1280 | "path-parse": "^1.0.7", 1281 | "supports-preserve-symlinks-flag": "^1.0.0" 1282 | }, 1283 | "bin": { 1284 | "resolve": "bin/resolve" 1285 | }, 1286 | "funding": { 1287 | "url": "https://github.com/sponsors/ljharb" 1288 | } 1289 | }, 1290 | "node_modules/resolve-from": { 1291 | "version": "5.0.0", 1292 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", 1293 | "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", 1294 | "engines": { 1295 | "node": ">=8" 1296 | } 1297 | }, 1298 | "node_modules/retry": { 1299 | "version": "0.12.0", 1300 | "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", 1301 | "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", 1302 | "optional": true, 1303 | "engines": { 1304 | "node": ">= 4" 1305 | } 1306 | }, 1307 | "node_modules/rimraf": { 1308 | "version": "3.0.2", 1309 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 1310 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 1311 | "dependencies": { 1312 | "glob": "^7.1.3" 1313 | }, 1314 | "bin": { 1315 | "rimraf": "bin.js" 1316 | }, 1317 | "funding": { 1318 | "url": "https://github.com/sponsors/isaacs" 1319 | } 1320 | }, 1321 | "node_modules/safe-buffer": { 1322 | "version": "5.2.1", 1323 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1324 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1325 | "funding": [ 1326 | { 1327 | "type": "github", 1328 | "url": "https://github.com/sponsors/feross" 1329 | }, 1330 | { 1331 | "type": "patreon", 1332 | "url": "https://www.patreon.com/feross" 1333 | }, 1334 | { 1335 | "type": "consulting", 1336 | "url": "https://feross.org/support" 1337 | } 1338 | ] 1339 | }, 1340 | "node_modules/safer-buffer": { 1341 | "version": "2.1.2", 1342 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1343 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 1344 | "optional": true 1345 | }, 1346 | "node_modules/semver": { 1347 | "version": "5.7.1", 1348 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1349 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 1350 | "dev": true, 1351 | "bin": { 1352 | "semver": "bin/semver" 1353 | } 1354 | }, 1355 | "node_modules/set-blocking": { 1356 | "version": "2.0.0", 1357 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 1358 | "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" 1359 | }, 1360 | "node_modules/signal-exit": { 1361 | "version": "3.0.7", 1362 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 1363 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" 1364 | }, 1365 | "node_modules/simple-update-notifier": { 1366 | "version": "1.1.0", 1367 | "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", 1368 | "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", 1369 | "dev": true, 1370 | "dependencies": { 1371 | "semver": "~7.0.0" 1372 | }, 1373 | "engines": { 1374 | "node": ">=8.10.0" 1375 | } 1376 | }, 1377 | "node_modules/simple-update-notifier/node_modules/semver": { 1378 | "version": "7.0.0", 1379 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", 1380 | "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", 1381 | "dev": true, 1382 | "bin": { 1383 | "semver": "bin/semver.js" 1384 | } 1385 | }, 1386 | "node_modules/smart-buffer": { 1387 | "version": "4.2.0", 1388 | "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", 1389 | "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", 1390 | "optional": true, 1391 | "engines": { 1392 | "node": ">= 6.0.0", 1393 | "npm": ">= 3.0.0" 1394 | } 1395 | }, 1396 | "node_modules/socks": { 1397 | "version": "2.7.1", 1398 | "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", 1399 | "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", 1400 | "optional": true, 1401 | "dependencies": { 1402 | "ip": "^2.0.0", 1403 | "smart-buffer": "^4.2.0" 1404 | }, 1405 | "engines": { 1406 | "node": ">= 10.13.0", 1407 | "npm": ">= 3.0.0" 1408 | } 1409 | }, 1410 | "node_modules/socks-proxy-agent": { 1411 | "version": "6.2.1", 1412 | "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", 1413 | "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", 1414 | "optional": true, 1415 | "dependencies": { 1416 | "agent-base": "^6.0.2", 1417 | "debug": "^4.3.3", 1418 | "socks": "^2.6.2" 1419 | }, 1420 | "engines": { 1421 | "node": ">= 10" 1422 | } 1423 | }, 1424 | "node_modules/sqlite3": { 1425 | "version": "5.1.4", 1426 | "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.4.tgz", 1427 | "integrity": "sha512-i0UlWAzPlzX3B5XP2cYuhWQJsTtlMD6obOa1PgeEQ4DHEXUuyJkgv50I3isqZAP5oFc2T8OFvakmDh2W6I+YpA==", 1428 | "hasInstallScript": true, 1429 | "dependencies": { 1430 | "@mapbox/node-pre-gyp": "^1.0.0", 1431 | "node-addon-api": "^4.2.0", 1432 | "tar": "^6.1.11" 1433 | }, 1434 | "optionalDependencies": { 1435 | "node-gyp": "8.x" 1436 | }, 1437 | "peerDependencies": { 1438 | "node-gyp": "8.x" 1439 | }, 1440 | "peerDependenciesMeta": { 1441 | "node-gyp": { 1442 | "optional": true 1443 | } 1444 | } 1445 | }, 1446 | "node_modules/ssri": { 1447 | "version": "8.0.1", 1448 | "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", 1449 | "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", 1450 | "optional": true, 1451 | "dependencies": { 1452 | "minipass": "^3.1.1" 1453 | }, 1454 | "engines": { 1455 | "node": ">= 8" 1456 | } 1457 | }, 1458 | "node_modules/string_decoder": { 1459 | "version": "1.3.0", 1460 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 1461 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 1462 | "dependencies": { 1463 | "safe-buffer": "~5.2.0" 1464 | } 1465 | }, 1466 | "node_modules/string-width": { 1467 | "version": "4.2.3", 1468 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1469 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1470 | "dependencies": { 1471 | "emoji-regex": "^8.0.0", 1472 | "is-fullwidth-code-point": "^3.0.0", 1473 | "strip-ansi": "^6.0.1" 1474 | }, 1475 | "engines": { 1476 | "node": ">=8" 1477 | } 1478 | }, 1479 | "node_modules/strip-ansi": { 1480 | "version": "6.0.1", 1481 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1482 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1483 | "dependencies": { 1484 | "ansi-regex": "^5.0.1" 1485 | }, 1486 | "engines": { 1487 | "node": ">=8" 1488 | } 1489 | }, 1490 | "node_modules/supports-color": { 1491 | "version": "5.5.0", 1492 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1493 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1494 | "dev": true, 1495 | "dependencies": { 1496 | "has-flag": "^3.0.0" 1497 | }, 1498 | "engines": { 1499 | "node": ">=4" 1500 | } 1501 | }, 1502 | "node_modules/supports-preserve-symlinks-flag": { 1503 | "version": "1.0.0", 1504 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1505 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1506 | "engines": { 1507 | "node": ">= 0.4" 1508 | }, 1509 | "funding": { 1510 | "url": "https://github.com/sponsors/ljharb" 1511 | } 1512 | }, 1513 | "node_modules/tar": { 1514 | "version": "6.1.13", 1515 | "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz", 1516 | "integrity": "sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==", 1517 | "dependencies": { 1518 | "chownr": "^2.0.0", 1519 | "fs-minipass": "^2.0.0", 1520 | "minipass": "^4.0.0", 1521 | "minizlib": "^2.1.1", 1522 | "mkdirp": "^1.0.3", 1523 | "yallist": "^4.0.0" 1524 | }, 1525 | "engines": { 1526 | "node": ">=10" 1527 | } 1528 | }, 1529 | "node_modules/tar/node_modules/minipass": { 1530 | "version": "4.2.4", 1531 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.4.tgz", 1532 | "integrity": "sha512-lwycX3cBMTvcejsHITUgYj6Gy6A7Nh4Q6h9NP4sTHY1ccJlC7yKzDmiShEHsJ16Jf1nKGDEaiHxiltsJEvk0nQ==", 1533 | "engines": { 1534 | "node": ">=8" 1535 | } 1536 | }, 1537 | "node_modules/tarn": { 1538 | "version": "3.0.2", 1539 | "resolved": "https://registry.npmjs.org/tarn/-/tarn-3.0.2.tgz", 1540 | "integrity": "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==", 1541 | "engines": { 1542 | "node": ">=8.0.0" 1543 | } 1544 | }, 1545 | "node_modules/tildify": { 1546 | "version": "2.0.0", 1547 | "resolved": "https://registry.npmjs.org/tildify/-/tildify-2.0.0.tgz", 1548 | "integrity": "sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw==", 1549 | "engines": { 1550 | "node": ">=8" 1551 | } 1552 | }, 1553 | "node_modules/to-regex-range": { 1554 | "version": "5.0.1", 1555 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1556 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1557 | "dev": true, 1558 | "dependencies": { 1559 | "is-number": "^7.0.0" 1560 | }, 1561 | "engines": { 1562 | "node": ">=8.0" 1563 | } 1564 | }, 1565 | "node_modules/touch": { 1566 | "version": "3.1.0", 1567 | "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", 1568 | "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", 1569 | "dev": true, 1570 | "dependencies": { 1571 | "nopt": "~1.0.10" 1572 | }, 1573 | "bin": { 1574 | "nodetouch": "bin/nodetouch.js" 1575 | } 1576 | }, 1577 | "node_modules/touch/node_modules/nopt": { 1578 | "version": "1.0.10", 1579 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", 1580 | "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", 1581 | "dev": true, 1582 | "dependencies": { 1583 | "abbrev": "1" 1584 | }, 1585 | "bin": { 1586 | "nopt": "bin/nopt.js" 1587 | }, 1588 | "engines": { 1589 | "node": "*" 1590 | } 1591 | }, 1592 | "node_modules/tr46": { 1593 | "version": "0.0.3", 1594 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 1595 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" 1596 | }, 1597 | "node_modules/undefsafe": { 1598 | "version": "2.0.5", 1599 | "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", 1600 | "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", 1601 | "dev": true 1602 | }, 1603 | "node_modules/unique-filename": { 1604 | "version": "1.1.1", 1605 | "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", 1606 | "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", 1607 | "optional": true, 1608 | "dependencies": { 1609 | "unique-slug": "^2.0.0" 1610 | } 1611 | }, 1612 | "node_modules/unique-slug": { 1613 | "version": "2.0.2", 1614 | "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", 1615 | "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", 1616 | "optional": true, 1617 | "dependencies": { 1618 | "imurmurhash": "^0.1.4" 1619 | } 1620 | }, 1621 | "node_modules/util-deprecate": { 1622 | "version": "1.0.2", 1623 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1624 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 1625 | }, 1626 | "node_modules/webidl-conversions": { 1627 | "version": "3.0.1", 1628 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 1629 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" 1630 | }, 1631 | "node_modules/whatwg-url": { 1632 | "version": "5.0.0", 1633 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 1634 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 1635 | "dependencies": { 1636 | "tr46": "~0.0.3", 1637 | "webidl-conversions": "^3.0.0" 1638 | } 1639 | }, 1640 | "node_modules/which": { 1641 | "version": "2.0.2", 1642 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1643 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1644 | "optional": true, 1645 | "dependencies": { 1646 | "isexe": "^2.0.0" 1647 | }, 1648 | "bin": { 1649 | "node-which": "bin/node-which" 1650 | }, 1651 | "engines": { 1652 | "node": ">= 8" 1653 | } 1654 | }, 1655 | "node_modules/wide-align": { 1656 | "version": "1.1.5", 1657 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", 1658 | "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", 1659 | "dependencies": { 1660 | "string-width": "^1.0.2 || 2 || 3 || 4" 1661 | } 1662 | }, 1663 | "node_modules/wrappy": { 1664 | "version": "1.0.2", 1665 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1666 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" 1667 | }, 1668 | "node_modules/yallist": { 1669 | "version": "4.0.0", 1670 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 1671 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" 1672 | } 1673 | } 1674 | } 1675 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "webapi-i-challenge", 3 | "scripts": { 4 | "server": "nodemon index.js" 5 | }, 6 | "repository": { 7 | "type": "git", 8 | "url": "git+https://github.com/bloominstituteoftechnology/webapi-i-challenge" 9 | }, 10 | "devDependencies": { 11 | "nodemon": "^2.0.20" 12 | }, 13 | "dependencies": { 14 | "knex": "^2.4.2", 15 | "sqlite3": "^5.1.4" 16 | } 17 | } 18 | --------------------------------------------------------------------------------