├── errors ├── examples │ ├── web │ │ ├── .config.example.env │ │ ├── index.js │ │ ├── package.json │ │ └── package-lock.json │ ├── typo.js │ ├── imposter.py │ ├── BadCasing.java │ └── rhymes.js └── README.md ├── path ├── examples │ └── configure.sh └── README.md ├── shells ├── examples │ ├── did-you-know │ │ └── that-if-you-press-tab │ │ │ └── most-shells-will │ │ │ └── autocomplete.txt │ ├── joke.py │ ├── README.md │ └── wordle.sh └── README.md ├── file-system ├── assets │ ├── rickthumb.gif │ ├── rickthumb.jpg │ ├── rickthumb.png │ └── yo-dawg-folders.jpg └── README.md ├── scripts ├── generate-sample-memes.js ├── generate-silverware-joke.js ├── fs-builder.js └── memes.js ├── terminal ├── examples │ └── server │ │ ├── package.json │ │ ├── index.js │ │ └── package-lock.json └── README.md ├── package.json ├── README.md └── .gitignore /errors/examples/web/.config.example.env: -------------------------------------------------------------------------------- 1 | export PORT=3000 -------------------------------------------------------------------------------- /path/examples/configure.sh: -------------------------------------------------------------------------------- 1 | export TWILIOQUEST_TWITCH_ID=530043634 2 | -------------------------------------------------------------------------------- /errors/examples/typo.js: -------------------------------------------------------------------------------- 1 | const firstName = "Craig"; 2 | console.log("Hello, " + fristName); -------------------------------------------------------------------------------- /shells/examples/did-you-know/that-if-you-press-tab/most-shells-will/autocomplete.txt: -------------------------------------------------------------------------------- 1 | Pretty rad right?! :) 2 | -------------------------------------------------------------------------------- /file-system/assets/rickthumb.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TwilioDevEd/developer-fundamentals-notes/HEAD/file-system/assets/rickthumb.gif -------------------------------------------------------------------------------- /file-system/assets/rickthumb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TwilioDevEd/developer-fundamentals-notes/HEAD/file-system/assets/rickthumb.jpg -------------------------------------------------------------------------------- /file-system/assets/rickthumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TwilioDevEd/developer-fundamentals-notes/HEAD/file-system/assets/rickthumb.png -------------------------------------------------------------------------------- /file-system/assets/yo-dawg-folders.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TwilioDevEd/developer-fundamentals-notes/HEAD/file-system/assets/yo-dawg-folders.jpg -------------------------------------------------------------------------------- /errors/examples/imposter.py: -------------------------------------------------------------------------------- 1 | class Imposter: 2 | 3 | def __init__(self): 4 | self.doubt() 5 | 6 | def doubt(self): 7 | self.doubt() 8 | 9 | me = Imposter() 10 | -------------------------------------------------------------------------------- /scripts/generate-sample-memes.js: -------------------------------------------------------------------------------- 1 | const memes = require("./memes"); 2 | 3 | memes.generateMemeDownloadFolder() 4 | .then(result => console.log("DONE")) 5 | .catch(err => console.error(err)); 6 | -------------------------------------------------------------------------------- /errors/examples/BadCasing.java: -------------------------------------------------------------------------------- 1 | public class BadCasing { 2 | 3 | public static void main() { 4 | System.out.println("Hi mom!"); 5 | system.out.println("I'm writing Java!"); 6 | } 7 | 8 | } -------------------------------------------------------------------------------- /errors/examples/web/index.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const app = express(); 3 | 4 | app.get('/', (req, res) => { 5 | res.send('Hello, World!'); 6 | }) 7 | 8 | console.log(`Starting server on port ${process.env.PORT}`); 9 | app.listen(process.env.PORT); -------------------------------------------------------------------------------- /errors/examples/rhymes.js: -------------------------------------------------------------------------------- 1 | const dictionary = require("ryhming-dictionary"); 2 | 3 | function rhyme(word) { 4 | if (word === "orange") { 5 | throw new Error("There is no known word that rhymes with orange. Try a new word"); 6 | } 7 | return dictionary.getRhyme(word); 8 | } -------------------------------------------------------------------------------- /shells/examples/joke.py: -------------------------------------------------------------------------------- 1 | import signal 2 | import sys 3 | 4 | def finish_joke(num, frame): 5 | print("🐮 MOOOOO!") 6 | print("Program terminated...get it?") 7 | sys.exit(0) 8 | 9 | 10 | signal.signal(signal.SIGTERM, finish_joke) 11 | response = input("What does an interrupting cow say? ") 12 | print("Whoops to slow") 13 | -------------------------------------------------------------------------------- /errors/examples/web/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "web", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "express": "^4.18.2" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /errors/README.md: -------------------------------------------------------------------------------- 1 | # Errors 2 | 3 | [](https://youtu.be/IzuY7whSAJM) 4 | 5 | ## Resources 6 | 7 | - 📚 [How to ask better questions - StackOverflow](https://stackoverflow.com/help/how-to-ask) 8 | - 📚 [Examples of Good Error Messages](https://uxwritinghub.com/error-message-examples/) 9 | -------------------------------------------------------------------------------- /terminal/examples/server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fakey-server", 3 | "version": "1.0.0", 4 | "description": "This is an example server", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "Craig Dennis", 11 | "license": "ISC", 12 | "dependencies": { 13 | "express": "^4.17.3" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /terminal/examples/server/index.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | 3 | const app = express(); 4 | 5 | const PORT = 3000; 6 | 7 | app.get("/", (req, res) => { 8 | res.type("html"); 9 | res.send(` 10 |
You should go check out TwilioQuest
12 | `); 13 | }) 14 | 15 | 16 | console.log(`Server is listening on port ${PORT}`); 17 | console.log(`You are an amazing developer. You've got this 💪 🚀`); 18 | app.listen(PORT); -------------------------------------------------------------------------------- /scripts/generate-silverware-joke.js: -------------------------------------------------------------------------------- 1 | const builder = require("./fs-builder"); 2 | 3 | const samplePath = ["file-system", "samples"]; 4 | 5 | const silverwarePaths = [ 6 | ["house", "kitchen", "drawers", "silverware", "spoons", "spoon1.txt"], 7 | ["house", "kitchen", "drawers", "silverware", "forks", "metafork.txt"], 8 | ]; 9 | 10 | const paths = silverwarePaths.map((p) => samplePath.concat(p)); 11 | builder 12 | .massTextFileCreator(paths, "hi mom!") 13 | .then((results) => console.log(`Created ${results.length} text files`)) 14 | .catch((err) => console.error(err)); 15 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "developer-fundamentals", 3 | "version": "1.0.0", 4 | "description": "Notes and scripts for Dev Fundamentals", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "open-yo-dawg-mac": "open -a \"google chrome\" file://`pwd`/file-system/assets/yo-dawg-folders.jpg", 9 | "generate-sample-memes": "node scripts/generate-sample-memes.js", 10 | "generate-sample-silverware": "node scripts/generate-silverware-joke.js", 11 | "generate-nextjs-blog": "cd file-system/samples && npx create-next-app@latest -e blog-with-comment blog" 12 | }, 13 | "author": "", 14 | "license": "ISC", 15 | "devDependencies": { 16 | "jshint": "^2.13.4" 17 | }, 18 | "dependencies": { 19 | "express": "^4.18.2" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /path/README.md: -------------------------------------------------------------------------------- 1 | # Path 2 | 3 | [](https://youtu.be/43zdpmEu4lE) 4 | 5 | 6 | The path refers to a location on your [file system](../file-system/). Your system path contains an ordered list of places where your Operating System should look for the commands you type in your [terminal](../terminal/). You can see what your path is currently set to by examining it in your [shell](../shells). 7 | 8 | Various shells and operating systems allow you to modify this path which allows you to access commands from anywhere you may be in your file system. 9 | 10 | ## Set your path in your shell 11 | 12 | - [bash](https://askubuntu.com/questions/3744/how-do-i-modify-my-path-so-that-the-changes-are-available-in-every-terminal-sess) 13 | - [zsh](https://stackoverflow.com/questions/11530090/adding-a-new-entry-to-the-path-variable-in-zsh) 14 | - [PowerShell](https://poshcode.gitbook.io/powershell-faq/src/getting-started/environment-variables) 15 | - [Windows](https://stackoverflow.com/questions/9546324/adding-a-directory-to-the-path-environment-variable-in-windows) 16 | 17 | -------------------------------------------------------------------------------- /shells/examples/README.md: -------------------------------------------------------------------------------- 1 | ## Shell Wordle Example 2 | 3 | ### On a POSIX based shell 4 | 5 | - Visit [the gist](https://gist.github.com/huytd/6a1a6a7b34a0d0abcac00b47e3d01513) 6 | - Click the [Raw button](https://gist.githubusercontent.com/huytd/6a1a6a7b34a0d0abcac00b47e3d01513/raw/ca41929c10a6c2ed8faa77c298bb188abfe5145a/wordle.sh) of wordle.sh 7 | - Grab that URL and use [cURL](https://curl.se/) to get it and pipe it to a file on your machine. 8 | 9 | `curl https://gist.githubusercontent.com/huytd/6a1a6a7b34a0d0abcac00b47e3d01513/raw/ca41929c10a6c2ed8faa77c298bb188abfe5145a/wordle.sh > wordle.sh` 10 | 11 | - Allow it to be executable 12 | 13 | `chmod u+x wordle.sh` 14 | 15 | - Play Wordle! 16 | 17 | `./wordle.sh` 18 | 19 | 20 | ## Twilio CLI 21 | 22 | - Install the [Twilio CLI](https://twil.io) 23 | - Log into your account 24 | 25 | `twilio login` 26 | 27 | - Buy a number 28 | - Set the environment variable to your Twilio number (Replace the 555 number with your purchased number) 29 | 30 | `export TWILIO_NUMBER=+15552223333` 31 | 32 | - Send me a message! 33 | 34 | `twilio api:core:messages:create --from=$TWILIO_NUMBER --to=+15037513879 --body="I sent this message from my shell" --properties=status,to` -------------------------------------------------------------------------------- /shells/README.md: -------------------------------------------------------------------------------- 1 | # Shells 2 | 3 | [](https://youtu.be/fhv2dX0axeY) 4 | 5 | Shells provide a protective wrapper around your Operating System. These help to manipulate your [File System](../file-system/README.md), start and stop processes, and other lower level things. You access them through your [Terminal](../terminal/README.md) 6 | 7 | Explore the [examples](./examples/README.md) 8 | 9 | ## Learn more 10 | 11 | - [Comparsion of Shells - wikipedia](https://en.wikipedia.org/wiki/Comparison_of_command_shells) 12 | - [Scripting Languages - wikipedia](https://en.wikipedia.org/wiki/Shell_script) 13 | 14 | ## Practice 15 | 16 | ### Navigate and create directory structures 17 | 18 | From your home directory, create a new directory structure of `scratch > first-folder > second-folder` (Check out [File Systems](../file-system/README.md) for more information) 19 | 20 | ### Mac / Linux 21 | 22 | ```bash 23 | mkdir -p scratch/first-folder/second-folder 24 | ``` 25 | 26 | ### Windows 27 | 28 | ```bash 29 | mkdir scratch\first-folder\second-folder 30 | ``` 31 | 32 | ### Tab Completion 33 | 34 | With the directory structure built, practice using tab completion to navigate through to the `second-folder` 35 | 36 | ```bash 37 | cd scr [TAB] 38 | ``` 39 | 40 | ### Command History 41 | 42 | Open a new terminal. Use command history (typically the up arrow) to navigate to the `second-folder` 43 | 44 | ## Learning Resources 45 | 46 | - **TwilioQuest**: Head over to the _Tower of Infinite Knowledge_ in [TwilioQuest](https://twilio.com/quest?utm_source=gh&utm_medium=referral&utm_campaign=developer-fundamentals) 47 | -------------------------------------------------------------------------------- /scripts/fs-builder.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs"); 2 | const path = require("path"); 3 | 4 | // Takes a list of ["folder", "paths"] 5 | // And ensures the directory exists 6 | // Any entry with an extension (`.`) will be assumed to be a file 7 | function buildRequiredDirs(paths) { 8 | const pathSet = new Set(); 9 | paths.forEach(p => { 10 | let filePath = path.resolve(...p); 11 | if (path.basename(filePath).includes(".")) { 12 | // Lose the path name 13 | const dirOnly = p.slice(0, -1); 14 | filePath = path.resolve(...dirOnly); 15 | } 16 | pathSet.add(filePath); 17 | }); 18 | [...pathSet].forEach(fp => { 19 | console.log(`Creating directory: ${fp}`); 20 | fs.mkdirSync(fp, {recursive: true}); 21 | }); 22 | return pathSet.size; 23 | } 24 | 25 | async function massCopier(srcDestPairs) { 26 | const destPaths = srcDestPairs.map((pair) => pair[1]); 27 | const dirCount = buildRequiredDirs(destPaths); 28 | console.log(`Verified ${dirCount} directories`); 29 | const promises = srcDestPairs.map(async (pair) => { 30 | const [src, dest] = pair; 31 | const srcFile = path.resolve(...src); 32 | const destFile = path.resolve(...dest); 33 | return fs.copyFileSync( 34 | srcFile, destFile 35 | ); 36 | }); 37 | const results = await Promise.all(promises); 38 | return results; 39 | } 40 | 41 | async function massTextFileCreator(paths, text) { 42 | const dirCount = buildRequiredDirs(paths); 43 | const promises = paths.map(async (p) => { 44 | const filePath = path.resolve(...p); 45 | return fs.writeFileSync(filePath, text); 46 | }); 47 | const results = await Promise.all(promises); 48 | return results; 49 | } 50 | 51 | 52 | module.exports = { 53 | buildRequiredDirs, 54 | massCopier, 55 | massTextFileCreator 56 | }; 57 | 58 | -------------------------------------------------------------------------------- /file-system/README.md: -------------------------------------------------------------------------------- 1 | # File Systems 2 | 3 | [](https://youtu.be/2zLQwOiIac8) 4 | 5 | ## Terminal Commands 6 | 7 | ### List Files 8 | 9 | #### *nix (Mac/Linux) Shells 10 | 11 | ```bash 12 | # List files in the current directory 13 | ls 14 | ``` 15 | 16 | #### Windows Shells 17 | 18 | ```powershell 19 | # Lists 20 | dir 21 | ``` 22 | 23 | ### Change Directories 24 | 25 | ```bash 26 | # Goes up a directory 27 | cd .. 28 | ``` 29 | 30 | ```bash 31 | # Directories are relative to your current location 32 | # Move into the directory named photos 33 | cd photos 34 | ``` 35 | 36 | _Important_ In *nix based terminals (Mac/Linux), a forward slash `/` separates directories. Windows uses a backslash `\`. 37 | 38 | ### Rename a File 39 | 40 | ```bash 41 | # mv is short for move and allows you to rename a file (and move it to a new folder) 42 | mv poorly-named-file.txt mv better.txt 43 | ``` 44 | 45 | ### Make a copy 46 | 47 | ```bash 48 | # cp is short for copy 49 | cp myfile.txt myfile2.txt 50 | ``` 51 | 52 | ## Practice 53 | 54 | ### From the GUI: Clean up your Downloads Folder 55 | 56 | - Locate your Downloads folder 57 | - Create a new Folder called `Older Files` 58 | - Move any downloaded file that you no longer want into `Older Files` 59 | - Delete files you no longer want 60 | 61 | ### From the Terminal: Remove that directory 62 | 63 | - Change directories into `Downloads/Older Files` 64 | - Remove a file using `rm` 65 | 66 | ## Learning Resources 67 | 68 | - **TwilioQuest**: The first floor of the _Tower of Infinite Knowledge_ in [TwilioQuest](https://twilio.com/quest?utm_source=gh&utm_medium=referral&utm_campaign=developer-fundamentals) focusses on File Systems. Check it out! (This video even plays there on a VCR! 📼) 69 | -------------------------------------------------------------------------------- /terminal/README.md: -------------------------------------------------------------------------------- 1 | # Terminal 2 | 3 | [](https://youtu.be/lZ7Kix9bjPI) 4 | 5 | ## Opening your default Terminal 6 | 7 | ### Mac 8 | 9 | On a Mac you can find the Terminal application using Spotlight `Cmd` + `Space` and type `terminal`. 10 | 11 | ### Linux 12 | 13 | Press `Ctrl` + `Alt` + `t` 14 | 15 | ### Windows 16 | 17 | Click search and type `terminal`. Choose the `Windows Terminal` option. If you don't see it, you can [download it from the Microsoft store](https://apps.microsoft.com/store/detail/windows-terminal/9N0DX20HK701). If you are running an older version, you can still open the command prompt (AKA the old Terminal) by using `Start > Run > cmd`. 18 | 19 | 20 | ## Practice 21 | 22 | What do you think the following command will do? 23 | 24 | ```bash 25 | echo "hi mom" 26 | ``` 27 | 28 | Can you output your name to the command line? 29 | 30 | ### Text to Speech 31 | 32 | Making your computer output is pretty fun, but did you know you could make it actually *talk*?! 🗣 33 | 34 | The technology has gotten a lot better, in the early days it had a really hard time saying cheeseburger. It'd be like `chezz eh bur grrrr`. 35 | 36 | #### Mac 37 | 38 | ```bash 39 | say "this is for text to speech, cheeseburger" 40 | ``` 41 | 42 | #### Windows PowerShell 43 | 44 | ```PowerShell 45 | Add-Type -AssemblyName System.speech 46 | $speak = New-Object System.Speech.Synthesis.SpeechSynthesizer 47 | $speak.Speak('Cheeseburger') 48 | ``` 49 | 50 | #### Linux 51 | 52 | ```bash 53 | espeak "Check this out. Cheeseburger" 54 | ``` 55 | 56 | --- 57 | 58 | Pass this to your text to speech engine. What does it sound like it says? 59 | 60 | ``` 61 | "eye ham not a hah qur, eye ham lure ning sum duh vehlop urrr fun da mint alls fur uhm my furr ends at twill e oh" 62 | ``` 63 | 64 | --- 65 | 66 | Try to find a word that your text-to-speech engine has a hard time pronouncing. Can you make it work by phonetically spelling things out? Hint new slang seems to always stump this. 67 | 68 | -------------------------------------------------------------------------------- /shells/examples/wordle.sh: -------------------------------------------------------------------------------- 1 | words=($(grep '^\w\w\w\w\w$' /usr/share/dict/words | tr '[a-z]' '[A-Z]')) 2 | actual=${words[$[$RANDOM % ${#words[@]}]]} end=false guess_count=0 max_guess=6 3 | if [[ $1 == "unlimit" ]]; then 4 | max_guess=999999 5 | fi 6 | while [[ $end != true ]]; do 7 | guess_count=$(( $guess_count + 1 )) 8 | if [[ $guess_count -le $max_guess ]]; then 9 | echo "Enter your guess ($guess_count / $max_guess):" 10 | read guess 11 | guess=$(echo $guess | tr '[a-z]' '[A-Z]') 12 | if [[ " ${words[*]} " =~ " $guess " ]]; then 13 | output="" remaining="" 14 | if [[ $actual == $guess ]]; then 15 | echo "You guessed right!" 16 | for ((i = 0; i < ${#actual}; i++)); do 17 | output+="\033[30;102m ${guess:$i:1} \033[0m" 18 | done 19 | printf "$output\n" 20 | end=true 21 | else 22 | for ((i = 0; i < ${#actual}; i++)); do 23 | if [[ "${actual:$i:1}" != "${guess:$i:1}" ]]; then 24 | remaining+=${actual:$i:1} 25 | fi 26 | done 27 | for ((i = 0; i < ${#actual}; i++)); do 28 | if [[ "${actual:$i:1}" != "${guess:$i:1}" ]]; then 29 | if [[ "$remaining" == *"${guess:$i:1}"* ]]; then 30 | output+="\033[30;103m ${guess:$i:1} \033[0m" 31 | remaining=${remaining/"${guess:$i:1}"/} 32 | else 33 | output+="\033[30;107m ${guess:$i:1} \033[0m" 34 | fi 35 | else 36 | output+="\033[30;102m ${guess:$i:1} \033[0m" 37 | fi 38 | done 39 | printf "$output\n" 40 | fi 41 | else 42 | echo "Please enter a valid word with 5 letters!"; 43 | guess_count=$(( $guess_count - 1 )) 44 | fi 45 | else 46 | echo "You lose! The word is:" 47 | echo $actual 48 | end=true 49 | fi 50 | done -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [](https://twilio.com/quest?utm_source=gh-badge&utm_medium=referral&utm_campaign=developer-fundamentals) 2 | 3 | # Developer Fundamentals 4 | 5 | This is an ever-growing repository of content tackling fundamental education for developers built from your friends at [Twilio](https://twilio.com). We can't wait to see what you build! 6 | 7 | - [File System](./file-system) 8 | 9 | [](https://youtu.be/2zLQwOiIac8) 10 | 11 | - [Terminal](./terminal/) 12 | 13 | [](https://youtu.be/lZ7Kix9bjPI) 14 | 15 | 16 | - [Shells](./shells) 17 | 18 | [](https://youtu.be/fhv2dX0axeY) 19 | 20 | - [Path](./path) 21 | 22 | [](https://youtu.be/43zdpmEu4lE) 23 | 24 | - [Errors](./errors) 25 | 26 | [](https://youtu.be/IzuY7whSAJM) 27 | 28 | ## Requests? 29 | 30 | [Let us know what content you feel is missing](https://airtable.com/shrT5lFIfOXNhyd4N?prefill_Source=Videos&hide_Source=true) from your learning journey! -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Created by https://www.toptal.com/developers/gitignore/api/node 3 | # Edit at https://www.toptal.com/developers/gitignore?templates=node 4 | 5 | ### Node ### 6 | # Logs 7 | logs 8 | *.log 9 | npm-debug.log* 10 | yarn-debug.log* 11 | yarn-error.log* 12 | lerna-debug.log* 13 | .pnpm-debug.log* 14 | 15 | # Diagnostic reports (https://nodejs.org/api/report.html) 16 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 17 | 18 | # Runtime data 19 | pids 20 | *.pid 21 | *.seed 22 | *.pid.lock 23 | 24 | # Directory for instrumented libs generated by jscoverage/JSCover 25 | lib-cov 26 | 27 | # Coverage directory used by tools like istanbul 28 | coverage 29 | *.lcov 30 | 31 | # nyc test coverage 32 | .nyc_output 33 | 34 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 35 | .grunt 36 | 37 | # Bower dependency directory (https://bower.io/) 38 | bower_components 39 | 40 | # node-waf configuration 41 | .lock-wscript 42 | 43 | # Compiled binary addons (https://nodejs.org/api/addons.html) 44 | build/Release 45 | 46 | # Dependency directories 47 | node_modules/ 48 | jspm_packages/ 49 | 50 | # Snowpack dependency directory (https://snowpack.dev/) 51 | web_modules/ 52 | 53 | # TypeScript cache 54 | *.tsbuildinfo 55 | 56 | # Optional npm cache directory 57 | .npm 58 | 59 | # Optional eslint cache 60 | .eslintcache 61 | 62 | # Optional stylelint cache 63 | .stylelintcache 64 | 65 | # Microbundle cache 66 | .rpt2_cache/ 67 | .rts2_cache_cjs/ 68 | .rts2_cache_es/ 69 | .rts2_cache_umd/ 70 | 71 | # Optional REPL history 72 | .node_repl_history 73 | 74 | # Output of 'npm pack' 75 | *.tgz 76 | 77 | # Yarn Integrity file 78 | .yarn-integrity 79 | 80 | # dotenv environment variable files 81 | .env 82 | .env.development.local 83 | .env.test.local 84 | .env.production.local 85 | .env.local 86 | 87 | # parcel-bundler cache (https://parceljs.org/) 88 | .cache 89 | .parcel-cache 90 | 91 | # Next.js build output 92 | .next 93 | out 94 | 95 | # Nuxt.js build / generate output 96 | .nuxt 97 | dist 98 | 99 | # Gatsby files 100 | .cache/ 101 | # Comment in the public line in if your project uses Gatsby and not Next.js 102 | # https://nextjs.org/blog/next-9-1#public-directory-support 103 | # public 104 | 105 | # vuepress build output 106 | .vuepress/dist 107 | 108 | # vuepress v2.x temp and cache directory 109 | .temp 110 | 111 | # Docusaurus cache and generated files 112 | .docusaurus 113 | 114 | # Serverless directories 115 | .serverless/ 116 | 117 | # FuseBox cache 118 | .fusebox/ 119 | 120 | # DynamoDB Local files 121 | .dynamodb/ 122 | 123 | # TernJS port file 124 | .tern-port 125 | 126 | # Stores VSCode versions used for testing VSCode extensions 127 | .vscode-test 128 | 129 | # yarn v2 130 | .yarn/cache 131 | .yarn/unplugged 132 | .yarn/build-state.yml 133 | .yarn/install-state.gz 134 | .pnp.* 135 | 136 | ### Node Patch ### 137 | # Serverless Webpack directories 138 | .webpack/ 139 | 140 | # Optional stylelint cache 141 | 142 | # SvelteKit build / generate output 143 | .svelte-kit 144 | 145 | # End of https://www.toptal.com/developers/gitignore/api/node 146 | 147 | # Generate these with `npm run generate-sample-memes` 148 | file-system/samples/* 149 | 150 | .DS_Store -------------------------------------------------------------------------------- /scripts/memes.js: -------------------------------------------------------------------------------- 1 | const path = require("path"); 2 | const builder = require("./fs-builder"); 3 | 4 | const memeTitles = [ 5 | "Drake Hotline Bling", 6 | "Two Buttons", 7 | "Distracted Boyfriend", 8 | "Running Away Balloon", 9 | "Left Exit 12 Off Ramp", 10 | "UNO Draw 25 Cards", 11 | "Buff Doge vs. Cheems", 12 | "Change My Mind", 13 | "Gru's Plan", 14 | "Bernie I Am Once Again Asking For Your Support", 15 | "Woman Yelling At Cat", 16 | "Batman Slapping Robin", 17 | "Waiting Skeleton", 18 | "Expanding Brain", 19 | "Epic Handshake", 20 | "Disaster Girl", 21 | "Sad Pablo Escobar", 22 | "Tuxedo Winnie The Pooh", 23 | "Boardroom Meeting Suggestion", 24 | "I Bet He's Thinking About Other Women", 25 | "Monkey Puppet", 26 | "Always Has Been", 27 | "Mocking Spongebob", 28 | "Anakin Padme 4 Panel", 29 | "Panik Kalm Panik", 30 | "Blank Nut Button", 31 | "Hide the Pain Harold", 32 | "They're The Same Picture", 33 | "X, X Everywhere", 34 | "Bike Fall", 35 | "Clown Applying Makeup", 36 | "Is This A Pigeon", 37 | "Trade Offer", 38 | "Guy Holding Cardboard Sign", 39 | "One Does Not Simply", 40 | "This Is Fine", 41 | "Inhaling Seagull", 42 | "The Scroll Of Truth", 43 | "The Rock Driving", 44 | "Ancient Aliens", 45 | "Marked Safe From", 46 | "Gus Fring we are not the same", 47 | "Roll Safe Think About It", 48 | "Success Kid", 49 | "Surprised Pikachu", 50 | "American Chopper Argument", 51 | "This Is Where I'd Put My Trophy If I Had One", 52 | "Y'all Got Any More Of That", 53 | "Sleeping Shaq", 54 | "Laughing Leo", 55 | "Who Killed Hannibal", 56 | "Oprah You Get A", 57 | "Evil Kermit", 58 | "Teacher's Copy", 59 | "where monkey", 60 | "Finding Neverland", 61 | "Unsettled Tom", 62 | "Flex Tape", 63 | "Third World Skeptical Kid", 64 | "Grandma Finds The Internet", 65 | "Hard To Swallow Pills", 66 | "Spongebob Ight Imma Head Out", 67 | "A train hitting a school bus", 68 | "Types of Headaches meme", 69 | "All My Homies Hate", 70 | "Whisper and Goosebumps", 71 | "Futurama Fry", 72 | "Leonardo Dicaprio Cheers", 73 | "Trump Bill Signing", 74 | "mr incredible becoming uncanny", 75 | "You Guys are Getting Paid", 76 | "Doge", 77 | "Squidward window", 78 | "Normal and dark mr.incredibles", 79 | "Disappointed Black Guy", 80 | "spiderman pointing at spiderman", 81 | "Average Fan vs Average Enjoyer", 82 | "Grant Gustin over grave", 83 | "They don't know", 84 | "Drake Blank", 85 | "Bernie Sanders Once Again Asking", 86 | "Pawn Stars Best I Can Do", 87 | "You know, I'm something of a scientist myself", 88 | "is this butterfly", 89 | "Domino Effect", 90 | "Blank White Template", 91 | "Mother Ignoring Kid Drowning In A Pool", 92 | "Anime Girl Hiding from Terminator", 93 | "Mr. McMahon reaction", 94 | "What Gives People Feelings of Power", 95 | "Soyboy Vs Yes Chad", 96 | "Brain Before Sleep", 97 | "Bugs bunny communist", 98 | "where banana", 99 | "Three-headed Dragon", 100 | "Star Wars Yoda", 101 | "Friendship ended", 102 | "Imagination Spongebob", 103 | "Is This a Pigeon", 104 | "AJ Styles & Undertaker", 105 | "Look At Me", 106 | "Traumatized Mr. Incredible", 107 | "Soldier protecting sleeping child", 108 | "The Most Interesting Man In The World", 109 | "Math lady/Confused lady", 110 | "Both Buttons Pressed", 111 | "the office congratulations", 112 | "Jack Sparrow Being Chased", 113 | "Spongebob Burning Paper", 114 | "Disappearing kid gif", 115 | "i receive you receive", 116 | "Oh yeah! Oh no...", 117 | "Empty Stonks", 118 | "That Would Be Great", 119 | "Moe throws Barney", 120 | "Did you mean?", 121 | "c'mon do something", 122 | "See Nobody Cares", 123 | "Spider Man Triple", 124 | ]; 125 | 126 | const extensions = ["gif", "jpg", "png"]; 127 | 128 | function choice(list) { 129 | return list[Math.floor(Math.random() * list.length)]; 130 | } 131 | 132 | const memeFileNames = memeTitles.map( 133 | (title) => 134 | title 135 | .toLowerCase() 136 | .replace(/[^a-z\s]/g, "") 137 | .split(" ") 138 | .join("-") + `.${choice(extensions)}` 139 | ); 140 | 141 | async function generateMemeDownloadFolder() { 142 | const pairs = memeFileNames.map((memeFileName) => { 143 | const ext = path.basename(memeFileName).split(".")[1]; 144 | const src = ["file-system", "assets", `rickthumb.${ext}`]; 145 | const dest = ["file-system", "samples", "Downloads", memeFileName]; 146 | return [src, dest]; 147 | }); 148 | return await builder.massCopier(pairs); 149 | } 150 | 151 | module.exports = { 152 | generateMemeDownloadFolder, 153 | }; 154 | -------------------------------------------------------------------------------- /terminal/examples/server/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fakey-server", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "fakey-server", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "express": "^4.17.3" 13 | } 14 | }, 15 | "node_modules/accepts": { 16 | "version": "1.3.8", 17 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 18 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 19 | "dependencies": { 20 | "mime-types": "~2.1.34", 21 | "negotiator": "0.6.3" 22 | }, 23 | "engines": { 24 | "node": ">= 0.6" 25 | } 26 | }, 27 | "node_modules/array-flatten": { 28 | "version": "1.1.1", 29 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 30 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 31 | }, 32 | "node_modules/body-parser": { 33 | "version": "1.19.2", 34 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", 35 | "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", 36 | "dependencies": { 37 | "bytes": "3.1.2", 38 | "content-type": "~1.0.4", 39 | "debug": "2.6.9", 40 | "depd": "~1.1.2", 41 | "http-errors": "1.8.1", 42 | "iconv-lite": "0.4.24", 43 | "on-finished": "~2.3.0", 44 | "qs": "6.9.7", 45 | "raw-body": "2.4.3", 46 | "type-is": "~1.6.18" 47 | }, 48 | "engines": { 49 | "node": ">= 0.8" 50 | } 51 | }, 52 | "node_modules/bytes": { 53 | "version": "3.1.2", 54 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 55 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 56 | "engines": { 57 | "node": ">= 0.8" 58 | } 59 | }, 60 | "node_modules/content-disposition": { 61 | "version": "0.5.4", 62 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 63 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 64 | "dependencies": { 65 | "safe-buffer": "5.2.1" 66 | }, 67 | "engines": { 68 | "node": ">= 0.6" 69 | } 70 | }, 71 | "node_modules/content-type": { 72 | "version": "1.0.4", 73 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 74 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", 75 | "engines": { 76 | "node": ">= 0.6" 77 | } 78 | }, 79 | "node_modules/cookie": { 80 | "version": "0.4.2", 81 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", 82 | "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", 83 | "engines": { 84 | "node": ">= 0.6" 85 | } 86 | }, 87 | "node_modules/cookie-signature": { 88 | "version": "1.0.6", 89 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 90 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 91 | }, 92 | "node_modules/debug": { 93 | "version": "2.6.9", 94 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 95 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 96 | "dependencies": { 97 | "ms": "2.0.0" 98 | } 99 | }, 100 | "node_modules/depd": { 101 | "version": "1.1.2", 102 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 103 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", 104 | "engines": { 105 | "node": ">= 0.6" 106 | } 107 | }, 108 | "node_modules/destroy": { 109 | "version": "1.0.4", 110 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 111 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 112 | }, 113 | "node_modules/ee-first": { 114 | "version": "1.1.1", 115 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 116 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 117 | }, 118 | "node_modules/encodeurl": { 119 | "version": "1.0.2", 120 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 121 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", 122 | "engines": { 123 | "node": ">= 0.8" 124 | } 125 | }, 126 | "node_modules/escape-html": { 127 | "version": "1.0.3", 128 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 129 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 130 | }, 131 | "node_modules/etag": { 132 | "version": "1.8.1", 133 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 134 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", 135 | "engines": { 136 | "node": ">= 0.6" 137 | } 138 | }, 139 | "node_modules/express": { 140 | "version": "4.17.3", 141 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", 142 | "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", 143 | "dependencies": { 144 | "accepts": "~1.3.8", 145 | "array-flatten": "1.1.1", 146 | "body-parser": "1.19.2", 147 | "content-disposition": "0.5.4", 148 | "content-type": "~1.0.4", 149 | "cookie": "0.4.2", 150 | "cookie-signature": "1.0.6", 151 | "debug": "2.6.9", 152 | "depd": "~1.1.2", 153 | "encodeurl": "~1.0.2", 154 | "escape-html": "~1.0.3", 155 | "etag": "~1.8.1", 156 | "finalhandler": "~1.1.2", 157 | "fresh": "0.5.2", 158 | "merge-descriptors": "1.0.1", 159 | "methods": "~1.1.2", 160 | "on-finished": "~2.3.0", 161 | "parseurl": "~1.3.3", 162 | "path-to-regexp": "0.1.7", 163 | "proxy-addr": "~2.0.7", 164 | "qs": "6.9.7", 165 | "range-parser": "~1.2.1", 166 | "safe-buffer": "5.2.1", 167 | "send": "0.17.2", 168 | "serve-static": "1.14.2", 169 | "setprototypeof": "1.2.0", 170 | "statuses": "~1.5.0", 171 | "type-is": "~1.6.18", 172 | "utils-merge": "1.0.1", 173 | "vary": "~1.1.2" 174 | }, 175 | "engines": { 176 | "node": ">= 0.10.0" 177 | } 178 | }, 179 | "node_modules/finalhandler": { 180 | "version": "1.1.2", 181 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", 182 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", 183 | "dependencies": { 184 | "debug": "2.6.9", 185 | "encodeurl": "~1.0.2", 186 | "escape-html": "~1.0.3", 187 | "on-finished": "~2.3.0", 188 | "parseurl": "~1.3.3", 189 | "statuses": "~1.5.0", 190 | "unpipe": "~1.0.0" 191 | }, 192 | "engines": { 193 | "node": ">= 0.8" 194 | } 195 | }, 196 | "node_modules/forwarded": { 197 | "version": "0.2.0", 198 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 199 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 200 | "engines": { 201 | "node": ">= 0.6" 202 | } 203 | }, 204 | "node_modules/fresh": { 205 | "version": "0.5.2", 206 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 207 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", 208 | "engines": { 209 | "node": ">= 0.6" 210 | } 211 | }, 212 | "node_modules/http-errors": { 213 | "version": "1.8.1", 214 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", 215 | "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", 216 | "dependencies": { 217 | "depd": "~1.1.2", 218 | "inherits": "2.0.4", 219 | "setprototypeof": "1.2.0", 220 | "statuses": ">= 1.5.0 < 2", 221 | "toidentifier": "1.0.1" 222 | }, 223 | "engines": { 224 | "node": ">= 0.6" 225 | } 226 | }, 227 | "node_modules/iconv-lite": { 228 | "version": "0.4.24", 229 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 230 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 231 | "dependencies": { 232 | "safer-buffer": ">= 2.1.2 < 3" 233 | }, 234 | "engines": { 235 | "node": ">=0.10.0" 236 | } 237 | }, 238 | "node_modules/inherits": { 239 | "version": "2.0.4", 240 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 241 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 242 | }, 243 | "node_modules/ipaddr.js": { 244 | "version": "1.9.1", 245 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 246 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 247 | "engines": { 248 | "node": ">= 0.10" 249 | } 250 | }, 251 | "node_modules/media-typer": { 252 | "version": "0.3.0", 253 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 254 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", 255 | "engines": { 256 | "node": ">= 0.6" 257 | } 258 | }, 259 | "node_modules/merge-descriptors": { 260 | "version": "1.0.1", 261 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 262 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 263 | }, 264 | "node_modules/methods": { 265 | "version": "1.1.2", 266 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 267 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", 268 | "engines": { 269 | "node": ">= 0.6" 270 | } 271 | }, 272 | "node_modules/mime": { 273 | "version": "1.6.0", 274 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 275 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 276 | "bin": { 277 | "mime": "cli.js" 278 | }, 279 | "engines": { 280 | "node": ">=4" 281 | } 282 | }, 283 | "node_modules/mime-db": { 284 | "version": "1.52.0", 285 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 286 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 287 | "engines": { 288 | "node": ">= 0.6" 289 | } 290 | }, 291 | "node_modules/mime-types": { 292 | "version": "2.1.35", 293 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 294 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 295 | "dependencies": { 296 | "mime-db": "1.52.0" 297 | }, 298 | "engines": { 299 | "node": ">= 0.6" 300 | } 301 | }, 302 | "node_modules/ms": { 303 | "version": "2.0.0", 304 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 305 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 306 | }, 307 | "node_modules/negotiator": { 308 | "version": "0.6.3", 309 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 310 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 311 | "engines": { 312 | "node": ">= 0.6" 313 | } 314 | }, 315 | "node_modules/on-finished": { 316 | "version": "2.3.0", 317 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 318 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 319 | "dependencies": { 320 | "ee-first": "1.1.1" 321 | }, 322 | "engines": { 323 | "node": ">= 0.8" 324 | } 325 | }, 326 | "node_modules/parseurl": { 327 | "version": "1.3.3", 328 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 329 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 330 | "engines": { 331 | "node": ">= 0.8" 332 | } 333 | }, 334 | "node_modules/path-to-regexp": { 335 | "version": "0.1.7", 336 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 337 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 338 | }, 339 | "node_modules/proxy-addr": { 340 | "version": "2.0.7", 341 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 342 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 343 | "dependencies": { 344 | "forwarded": "0.2.0", 345 | "ipaddr.js": "1.9.1" 346 | }, 347 | "engines": { 348 | "node": ">= 0.10" 349 | } 350 | }, 351 | "node_modules/qs": { 352 | "version": "6.9.7", 353 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", 354 | "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", 355 | "engines": { 356 | "node": ">=0.6" 357 | }, 358 | "funding": { 359 | "url": "https://github.com/sponsors/ljharb" 360 | } 361 | }, 362 | "node_modules/range-parser": { 363 | "version": "1.2.1", 364 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 365 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 366 | "engines": { 367 | "node": ">= 0.6" 368 | } 369 | }, 370 | "node_modules/raw-body": { 371 | "version": "2.4.3", 372 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", 373 | "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", 374 | "dependencies": { 375 | "bytes": "3.1.2", 376 | "http-errors": "1.8.1", 377 | "iconv-lite": "0.4.24", 378 | "unpipe": "1.0.0" 379 | }, 380 | "engines": { 381 | "node": ">= 0.8" 382 | } 383 | }, 384 | "node_modules/safe-buffer": { 385 | "version": "5.2.1", 386 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 387 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 388 | "funding": [ 389 | { 390 | "type": "github", 391 | "url": "https://github.com/sponsors/feross" 392 | }, 393 | { 394 | "type": "patreon", 395 | "url": "https://www.patreon.com/feross" 396 | }, 397 | { 398 | "type": "consulting", 399 | "url": "https://feross.org/support" 400 | } 401 | ] 402 | }, 403 | "node_modules/safer-buffer": { 404 | "version": "2.1.2", 405 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 406 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 407 | }, 408 | "node_modules/send": { 409 | "version": "0.17.2", 410 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", 411 | "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", 412 | "dependencies": { 413 | "debug": "2.6.9", 414 | "depd": "~1.1.2", 415 | "destroy": "~1.0.4", 416 | "encodeurl": "~1.0.2", 417 | "escape-html": "~1.0.3", 418 | "etag": "~1.8.1", 419 | "fresh": "0.5.2", 420 | "http-errors": "1.8.1", 421 | "mime": "1.6.0", 422 | "ms": "2.1.3", 423 | "on-finished": "~2.3.0", 424 | "range-parser": "~1.2.1", 425 | "statuses": "~1.5.0" 426 | }, 427 | "engines": { 428 | "node": ">= 0.8.0" 429 | } 430 | }, 431 | "node_modules/send/node_modules/ms": { 432 | "version": "2.1.3", 433 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 434 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 435 | }, 436 | "node_modules/serve-static": { 437 | "version": "1.14.2", 438 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", 439 | "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", 440 | "dependencies": { 441 | "encodeurl": "~1.0.2", 442 | "escape-html": "~1.0.3", 443 | "parseurl": "~1.3.3", 444 | "send": "0.17.2" 445 | }, 446 | "engines": { 447 | "node": ">= 0.8.0" 448 | } 449 | }, 450 | "node_modules/setprototypeof": { 451 | "version": "1.2.0", 452 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 453 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 454 | }, 455 | "node_modules/statuses": { 456 | "version": "1.5.0", 457 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 458 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", 459 | "engines": { 460 | "node": ">= 0.6" 461 | } 462 | }, 463 | "node_modules/toidentifier": { 464 | "version": "1.0.1", 465 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 466 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 467 | "engines": { 468 | "node": ">=0.6" 469 | } 470 | }, 471 | "node_modules/type-is": { 472 | "version": "1.6.18", 473 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 474 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 475 | "dependencies": { 476 | "media-typer": "0.3.0", 477 | "mime-types": "~2.1.24" 478 | }, 479 | "engines": { 480 | "node": ">= 0.6" 481 | } 482 | }, 483 | "node_modules/unpipe": { 484 | "version": "1.0.0", 485 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 486 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", 487 | "engines": { 488 | "node": ">= 0.8" 489 | } 490 | }, 491 | "node_modules/utils-merge": { 492 | "version": "1.0.1", 493 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 494 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", 495 | "engines": { 496 | "node": ">= 0.4.0" 497 | } 498 | }, 499 | "node_modules/vary": { 500 | "version": "1.1.2", 501 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 502 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", 503 | "engines": { 504 | "node": ">= 0.8" 505 | } 506 | } 507 | }, 508 | "dependencies": { 509 | "accepts": { 510 | "version": "1.3.8", 511 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 512 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 513 | "requires": { 514 | "mime-types": "~2.1.34", 515 | "negotiator": "0.6.3" 516 | } 517 | }, 518 | "array-flatten": { 519 | "version": "1.1.1", 520 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 521 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 522 | }, 523 | "body-parser": { 524 | "version": "1.19.2", 525 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", 526 | "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", 527 | "requires": { 528 | "bytes": "3.1.2", 529 | "content-type": "~1.0.4", 530 | "debug": "2.6.9", 531 | "depd": "~1.1.2", 532 | "http-errors": "1.8.1", 533 | "iconv-lite": "0.4.24", 534 | "on-finished": "~2.3.0", 535 | "qs": "6.9.7", 536 | "raw-body": "2.4.3", 537 | "type-is": "~1.6.18" 538 | } 539 | }, 540 | "bytes": { 541 | "version": "3.1.2", 542 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 543 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" 544 | }, 545 | "content-disposition": { 546 | "version": "0.5.4", 547 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 548 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 549 | "requires": { 550 | "safe-buffer": "5.2.1" 551 | } 552 | }, 553 | "content-type": { 554 | "version": "1.0.4", 555 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 556 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 557 | }, 558 | "cookie": { 559 | "version": "0.4.2", 560 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", 561 | "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" 562 | }, 563 | "cookie-signature": { 564 | "version": "1.0.6", 565 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 566 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 567 | }, 568 | "debug": { 569 | "version": "2.6.9", 570 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 571 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 572 | "requires": { 573 | "ms": "2.0.0" 574 | } 575 | }, 576 | "depd": { 577 | "version": "1.1.2", 578 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 579 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 580 | }, 581 | "destroy": { 582 | "version": "1.0.4", 583 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 584 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 585 | }, 586 | "ee-first": { 587 | "version": "1.1.1", 588 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 589 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 590 | }, 591 | "encodeurl": { 592 | "version": "1.0.2", 593 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 594 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 595 | }, 596 | "escape-html": { 597 | "version": "1.0.3", 598 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 599 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 600 | }, 601 | "etag": { 602 | "version": "1.8.1", 603 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 604 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 605 | }, 606 | "express": { 607 | "version": "4.17.3", 608 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", 609 | "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", 610 | "requires": { 611 | "accepts": "~1.3.8", 612 | "array-flatten": "1.1.1", 613 | "body-parser": "1.19.2", 614 | "content-disposition": "0.5.4", 615 | "content-type": "~1.0.4", 616 | "cookie": "0.4.2", 617 | "cookie-signature": "1.0.6", 618 | "debug": "2.6.9", 619 | "depd": "~1.1.2", 620 | "encodeurl": "~1.0.2", 621 | "escape-html": "~1.0.3", 622 | "etag": "~1.8.1", 623 | "finalhandler": "~1.1.2", 624 | "fresh": "0.5.2", 625 | "merge-descriptors": "1.0.1", 626 | "methods": "~1.1.2", 627 | "on-finished": "~2.3.0", 628 | "parseurl": "~1.3.3", 629 | "path-to-regexp": "0.1.7", 630 | "proxy-addr": "~2.0.7", 631 | "qs": "6.9.7", 632 | "range-parser": "~1.2.1", 633 | "safe-buffer": "5.2.1", 634 | "send": "0.17.2", 635 | "serve-static": "1.14.2", 636 | "setprototypeof": "1.2.0", 637 | "statuses": "~1.5.0", 638 | "type-is": "~1.6.18", 639 | "utils-merge": "1.0.1", 640 | "vary": "~1.1.2" 641 | } 642 | }, 643 | "finalhandler": { 644 | "version": "1.1.2", 645 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", 646 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", 647 | "requires": { 648 | "debug": "2.6.9", 649 | "encodeurl": "~1.0.2", 650 | "escape-html": "~1.0.3", 651 | "on-finished": "~2.3.0", 652 | "parseurl": "~1.3.3", 653 | "statuses": "~1.5.0", 654 | "unpipe": "~1.0.0" 655 | } 656 | }, 657 | "forwarded": { 658 | "version": "0.2.0", 659 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 660 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" 661 | }, 662 | "fresh": { 663 | "version": "0.5.2", 664 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 665 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 666 | }, 667 | "http-errors": { 668 | "version": "1.8.1", 669 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", 670 | "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", 671 | "requires": { 672 | "depd": "~1.1.2", 673 | "inherits": "2.0.4", 674 | "setprototypeof": "1.2.0", 675 | "statuses": ">= 1.5.0 < 2", 676 | "toidentifier": "1.0.1" 677 | } 678 | }, 679 | "iconv-lite": { 680 | "version": "0.4.24", 681 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 682 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 683 | "requires": { 684 | "safer-buffer": ">= 2.1.2 < 3" 685 | } 686 | }, 687 | "inherits": { 688 | "version": "2.0.4", 689 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 690 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 691 | }, 692 | "ipaddr.js": { 693 | "version": "1.9.1", 694 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 695 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 696 | }, 697 | "media-typer": { 698 | "version": "0.3.0", 699 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 700 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 701 | }, 702 | "merge-descriptors": { 703 | "version": "1.0.1", 704 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 705 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 706 | }, 707 | "methods": { 708 | "version": "1.1.2", 709 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 710 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 711 | }, 712 | "mime": { 713 | "version": "1.6.0", 714 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 715 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 716 | }, 717 | "mime-db": { 718 | "version": "1.52.0", 719 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 720 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" 721 | }, 722 | "mime-types": { 723 | "version": "2.1.35", 724 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 725 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 726 | "requires": { 727 | "mime-db": "1.52.0" 728 | } 729 | }, 730 | "ms": { 731 | "version": "2.0.0", 732 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 733 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 734 | }, 735 | "negotiator": { 736 | "version": "0.6.3", 737 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 738 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" 739 | }, 740 | "on-finished": { 741 | "version": "2.3.0", 742 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 743 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 744 | "requires": { 745 | "ee-first": "1.1.1" 746 | } 747 | }, 748 | "parseurl": { 749 | "version": "1.3.3", 750 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 751 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 752 | }, 753 | "path-to-regexp": { 754 | "version": "0.1.7", 755 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 756 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 757 | }, 758 | "proxy-addr": { 759 | "version": "2.0.7", 760 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 761 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 762 | "requires": { 763 | "forwarded": "0.2.0", 764 | "ipaddr.js": "1.9.1" 765 | } 766 | }, 767 | "qs": { 768 | "version": "6.9.7", 769 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", 770 | "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==" 771 | }, 772 | "range-parser": { 773 | "version": "1.2.1", 774 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 775 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 776 | }, 777 | "raw-body": { 778 | "version": "2.4.3", 779 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", 780 | "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", 781 | "requires": { 782 | "bytes": "3.1.2", 783 | "http-errors": "1.8.1", 784 | "iconv-lite": "0.4.24", 785 | "unpipe": "1.0.0" 786 | } 787 | }, 788 | "safe-buffer": { 789 | "version": "5.2.1", 790 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 791 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 792 | }, 793 | "safer-buffer": { 794 | "version": "2.1.2", 795 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 796 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 797 | }, 798 | "send": { 799 | "version": "0.17.2", 800 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", 801 | "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", 802 | "requires": { 803 | "debug": "2.6.9", 804 | "depd": "~1.1.2", 805 | "destroy": "~1.0.4", 806 | "encodeurl": "~1.0.2", 807 | "escape-html": "~1.0.3", 808 | "etag": "~1.8.1", 809 | "fresh": "0.5.2", 810 | "http-errors": "1.8.1", 811 | "mime": "1.6.0", 812 | "ms": "2.1.3", 813 | "on-finished": "~2.3.0", 814 | "range-parser": "~1.2.1", 815 | "statuses": "~1.5.0" 816 | }, 817 | "dependencies": { 818 | "ms": { 819 | "version": "2.1.3", 820 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 821 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 822 | } 823 | } 824 | }, 825 | "serve-static": { 826 | "version": "1.14.2", 827 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", 828 | "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", 829 | "requires": { 830 | "encodeurl": "~1.0.2", 831 | "escape-html": "~1.0.3", 832 | "parseurl": "~1.3.3", 833 | "send": "0.17.2" 834 | } 835 | }, 836 | "setprototypeof": { 837 | "version": "1.2.0", 838 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 839 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 840 | }, 841 | "statuses": { 842 | "version": "1.5.0", 843 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 844 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" 845 | }, 846 | "toidentifier": { 847 | "version": "1.0.1", 848 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 849 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" 850 | }, 851 | "type-is": { 852 | "version": "1.6.18", 853 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 854 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 855 | "requires": { 856 | "media-typer": "0.3.0", 857 | "mime-types": "~2.1.24" 858 | } 859 | }, 860 | "unpipe": { 861 | "version": "1.0.0", 862 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 863 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 864 | }, 865 | "utils-merge": { 866 | "version": "1.0.1", 867 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 868 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 869 | }, 870 | "vary": { 871 | "version": "1.1.2", 872 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 873 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 874 | } 875 | } 876 | } 877 | -------------------------------------------------------------------------------- /errors/examples/web/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "web", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "web", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "express": "^4.18.2" 13 | } 14 | }, 15 | "node_modules/accepts": { 16 | "version": "1.3.8", 17 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 18 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 19 | "dependencies": { 20 | "mime-types": "~2.1.34", 21 | "negotiator": "0.6.3" 22 | }, 23 | "engines": { 24 | "node": ">= 0.6" 25 | } 26 | }, 27 | "node_modules/array-flatten": { 28 | "version": "1.1.1", 29 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 30 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" 31 | }, 32 | "node_modules/body-parser": { 33 | "version": "1.20.1", 34 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", 35 | "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", 36 | "dependencies": { 37 | "bytes": "3.1.2", 38 | "content-type": "~1.0.4", 39 | "debug": "2.6.9", 40 | "depd": "2.0.0", 41 | "destroy": "1.2.0", 42 | "http-errors": "2.0.0", 43 | "iconv-lite": "0.4.24", 44 | "on-finished": "2.4.1", 45 | "qs": "6.11.0", 46 | "raw-body": "2.5.1", 47 | "type-is": "~1.6.18", 48 | "unpipe": "1.0.0" 49 | }, 50 | "engines": { 51 | "node": ">= 0.8", 52 | "npm": "1.2.8000 || >= 1.4.16" 53 | } 54 | }, 55 | "node_modules/bytes": { 56 | "version": "3.1.2", 57 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 58 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 59 | "engines": { 60 | "node": ">= 0.8" 61 | } 62 | }, 63 | "node_modules/call-bind": { 64 | "version": "1.0.2", 65 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 66 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 67 | "dependencies": { 68 | "function-bind": "^1.1.1", 69 | "get-intrinsic": "^1.0.2" 70 | }, 71 | "funding": { 72 | "url": "https://github.com/sponsors/ljharb" 73 | } 74 | }, 75 | "node_modules/content-disposition": { 76 | "version": "0.5.4", 77 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 78 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 79 | "dependencies": { 80 | "safe-buffer": "5.2.1" 81 | }, 82 | "engines": { 83 | "node": ">= 0.6" 84 | } 85 | }, 86 | "node_modules/content-type": { 87 | "version": "1.0.4", 88 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 89 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", 90 | "engines": { 91 | "node": ">= 0.6" 92 | } 93 | }, 94 | "node_modules/cookie": { 95 | "version": "0.5.0", 96 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 97 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", 98 | "engines": { 99 | "node": ">= 0.6" 100 | } 101 | }, 102 | "node_modules/cookie-signature": { 103 | "version": "1.0.6", 104 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 105 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" 106 | }, 107 | "node_modules/debug": { 108 | "version": "2.6.9", 109 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 110 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 111 | "dependencies": { 112 | "ms": "2.0.0" 113 | } 114 | }, 115 | "node_modules/depd": { 116 | "version": "2.0.0", 117 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 118 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 119 | "engines": { 120 | "node": ">= 0.8" 121 | } 122 | }, 123 | "node_modules/destroy": { 124 | "version": "1.2.0", 125 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 126 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", 127 | "engines": { 128 | "node": ">= 0.8", 129 | "npm": "1.2.8000 || >= 1.4.16" 130 | } 131 | }, 132 | "node_modules/ee-first": { 133 | "version": "1.1.1", 134 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 135 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 136 | }, 137 | "node_modules/encodeurl": { 138 | "version": "1.0.2", 139 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 140 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", 141 | "engines": { 142 | "node": ">= 0.8" 143 | } 144 | }, 145 | "node_modules/escape-html": { 146 | "version": "1.0.3", 147 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 148 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 149 | }, 150 | "node_modules/etag": { 151 | "version": "1.8.1", 152 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 153 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", 154 | "engines": { 155 | "node": ">= 0.6" 156 | } 157 | }, 158 | "node_modules/express": { 159 | "version": "4.18.2", 160 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", 161 | "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", 162 | "dependencies": { 163 | "accepts": "~1.3.8", 164 | "array-flatten": "1.1.1", 165 | "body-parser": "1.20.1", 166 | "content-disposition": "0.5.4", 167 | "content-type": "~1.0.4", 168 | "cookie": "0.5.0", 169 | "cookie-signature": "1.0.6", 170 | "debug": "2.6.9", 171 | "depd": "2.0.0", 172 | "encodeurl": "~1.0.2", 173 | "escape-html": "~1.0.3", 174 | "etag": "~1.8.1", 175 | "finalhandler": "1.2.0", 176 | "fresh": "0.5.2", 177 | "http-errors": "2.0.0", 178 | "merge-descriptors": "1.0.1", 179 | "methods": "~1.1.2", 180 | "on-finished": "2.4.1", 181 | "parseurl": "~1.3.3", 182 | "path-to-regexp": "0.1.7", 183 | "proxy-addr": "~2.0.7", 184 | "qs": "6.11.0", 185 | "range-parser": "~1.2.1", 186 | "safe-buffer": "5.2.1", 187 | "send": "0.18.0", 188 | "serve-static": "1.15.0", 189 | "setprototypeof": "1.2.0", 190 | "statuses": "2.0.1", 191 | "type-is": "~1.6.18", 192 | "utils-merge": "1.0.1", 193 | "vary": "~1.1.2" 194 | }, 195 | "engines": { 196 | "node": ">= 0.10.0" 197 | } 198 | }, 199 | "node_modules/finalhandler": { 200 | "version": "1.2.0", 201 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 202 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 203 | "dependencies": { 204 | "debug": "2.6.9", 205 | "encodeurl": "~1.0.2", 206 | "escape-html": "~1.0.3", 207 | "on-finished": "2.4.1", 208 | "parseurl": "~1.3.3", 209 | "statuses": "2.0.1", 210 | "unpipe": "~1.0.0" 211 | }, 212 | "engines": { 213 | "node": ">= 0.8" 214 | } 215 | }, 216 | "node_modules/forwarded": { 217 | "version": "0.2.0", 218 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 219 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 220 | "engines": { 221 | "node": ">= 0.6" 222 | } 223 | }, 224 | "node_modules/fresh": { 225 | "version": "0.5.2", 226 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 227 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", 228 | "engines": { 229 | "node": ">= 0.6" 230 | } 231 | }, 232 | "node_modules/function-bind": { 233 | "version": "1.1.1", 234 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 235 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 236 | }, 237 | "node_modules/get-intrinsic": { 238 | "version": "1.1.3", 239 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", 240 | "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", 241 | "dependencies": { 242 | "function-bind": "^1.1.1", 243 | "has": "^1.0.3", 244 | "has-symbols": "^1.0.3" 245 | }, 246 | "funding": { 247 | "url": "https://github.com/sponsors/ljharb" 248 | } 249 | }, 250 | "node_modules/has": { 251 | "version": "1.0.3", 252 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 253 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 254 | "dependencies": { 255 | "function-bind": "^1.1.1" 256 | }, 257 | "engines": { 258 | "node": ">= 0.4.0" 259 | } 260 | }, 261 | "node_modules/has-symbols": { 262 | "version": "1.0.3", 263 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 264 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 265 | "engines": { 266 | "node": ">= 0.4" 267 | }, 268 | "funding": { 269 | "url": "https://github.com/sponsors/ljharb" 270 | } 271 | }, 272 | "node_modules/http-errors": { 273 | "version": "2.0.0", 274 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 275 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 276 | "dependencies": { 277 | "depd": "2.0.0", 278 | "inherits": "2.0.4", 279 | "setprototypeof": "1.2.0", 280 | "statuses": "2.0.1", 281 | "toidentifier": "1.0.1" 282 | }, 283 | "engines": { 284 | "node": ">= 0.8" 285 | } 286 | }, 287 | "node_modules/iconv-lite": { 288 | "version": "0.4.24", 289 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 290 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 291 | "dependencies": { 292 | "safer-buffer": ">= 2.1.2 < 3" 293 | }, 294 | "engines": { 295 | "node": ">=0.10.0" 296 | } 297 | }, 298 | "node_modules/inherits": { 299 | "version": "2.0.4", 300 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 301 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 302 | }, 303 | "node_modules/ipaddr.js": { 304 | "version": "1.9.1", 305 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 306 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 307 | "engines": { 308 | "node": ">= 0.10" 309 | } 310 | }, 311 | "node_modules/media-typer": { 312 | "version": "0.3.0", 313 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 314 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", 315 | "engines": { 316 | "node": ">= 0.6" 317 | } 318 | }, 319 | "node_modules/merge-descriptors": { 320 | "version": "1.0.1", 321 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 322 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" 323 | }, 324 | "node_modules/methods": { 325 | "version": "1.1.2", 326 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 327 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", 328 | "engines": { 329 | "node": ">= 0.6" 330 | } 331 | }, 332 | "node_modules/mime": { 333 | "version": "1.6.0", 334 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 335 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 336 | "bin": { 337 | "mime": "cli.js" 338 | }, 339 | "engines": { 340 | "node": ">=4" 341 | } 342 | }, 343 | "node_modules/mime-db": { 344 | "version": "1.52.0", 345 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 346 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 347 | "engines": { 348 | "node": ">= 0.6" 349 | } 350 | }, 351 | "node_modules/mime-types": { 352 | "version": "2.1.35", 353 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 354 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 355 | "dependencies": { 356 | "mime-db": "1.52.0" 357 | }, 358 | "engines": { 359 | "node": ">= 0.6" 360 | } 361 | }, 362 | "node_modules/ms": { 363 | "version": "2.0.0", 364 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 365 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 366 | }, 367 | "node_modules/negotiator": { 368 | "version": "0.6.3", 369 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 370 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 371 | "engines": { 372 | "node": ">= 0.6" 373 | } 374 | }, 375 | "node_modules/object-inspect": { 376 | "version": "1.12.2", 377 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", 378 | "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", 379 | "funding": { 380 | "url": "https://github.com/sponsors/ljharb" 381 | } 382 | }, 383 | "node_modules/on-finished": { 384 | "version": "2.4.1", 385 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 386 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 387 | "dependencies": { 388 | "ee-first": "1.1.1" 389 | }, 390 | "engines": { 391 | "node": ">= 0.8" 392 | } 393 | }, 394 | "node_modules/parseurl": { 395 | "version": "1.3.3", 396 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 397 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 398 | "engines": { 399 | "node": ">= 0.8" 400 | } 401 | }, 402 | "node_modules/path-to-regexp": { 403 | "version": "0.1.7", 404 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 405 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" 406 | }, 407 | "node_modules/proxy-addr": { 408 | "version": "2.0.7", 409 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 410 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 411 | "dependencies": { 412 | "forwarded": "0.2.0", 413 | "ipaddr.js": "1.9.1" 414 | }, 415 | "engines": { 416 | "node": ">= 0.10" 417 | } 418 | }, 419 | "node_modules/qs": { 420 | "version": "6.11.0", 421 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", 422 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", 423 | "dependencies": { 424 | "side-channel": "^1.0.4" 425 | }, 426 | "engines": { 427 | "node": ">=0.6" 428 | }, 429 | "funding": { 430 | "url": "https://github.com/sponsors/ljharb" 431 | } 432 | }, 433 | "node_modules/range-parser": { 434 | "version": "1.2.1", 435 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 436 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 437 | "engines": { 438 | "node": ">= 0.6" 439 | } 440 | }, 441 | "node_modules/raw-body": { 442 | "version": "2.5.1", 443 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", 444 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", 445 | "dependencies": { 446 | "bytes": "3.1.2", 447 | "http-errors": "2.0.0", 448 | "iconv-lite": "0.4.24", 449 | "unpipe": "1.0.0" 450 | }, 451 | "engines": { 452 | "node": ">= 0.8" 453 | } 454 | }, 455 | "node_modules/safe-buffer": { 456 | "version": "5.2.1", 457 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 458 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 459 | "funding": [ 460 | { 461 | "type": "github", 462 | "url": "https://github.com/sponsors/feross" 463 | }, 464 | { 465 | "type": "patreon", 466 | "url": "https://www.patreon.com/feross" 467 | }, 468 | { 469 | "type": "consulting", 470 | "url": "https://feross.org/support" 471 | } 472 | ] 473 | }, 474 | "node_modules/safer-buffer": { 475 | "version": "2.1.2", 476 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 477 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 478 | }, 479 | "node_modules/send": { 480 | "version": "0.18.0", 481 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 482 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 483 | "dependencies": { 484 | "debug": "2.6.9", 485 | "depd": "2.0.0", 486 | "destroy": "1.2.0", 487 | "encodeurl": "~1.0.2", 488 | "escape-html": "~1.0.3", 489 | "etag": "~1.8.1", 490 | "fresh": "0.5.2", 491 | "http-errors": "2.0.0", 492 | "mime": "1.6.0", 493 | "ms": "2.1.3", 494 | "on-finished": "2.4.1", 495 | "range-parser": "~1.2.1", 496 | "statuses": "2.0.1" 497 | }, 498 | "engines": { 499 | "node": ">= 0.8.0" 500 | } 501 | }, 502 | "node_modules/send/node_modules/ms": { 503 | "version": "2.1.3", 504 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 505 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 506 | }, 507 | "node_modules/serve-static": { 508 | "version": "1.15.0", 509 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 510 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 511 | "dependencies": { 512 | "encodeurl": "~1.0.2", 513 | "escape-html": "~1.0.3", 514 | "parseurl": "~1.3.3", 515 | "send": "0.18.0" 516 | }, 517 | "engines": { 518 | "node": ">= 0.8.0" 519 | } 520 | }, 521 | "node_modules/setprototypeof": { 522 | "version": "1.2.0", 523 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 524 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 525 | }, 526 | "node_modules/side-channel": { 527 | "version": "1.0.4", 528 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 529 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 530 | "dependencies": { 531 | "call-bind": "^1.0.0", 532 | "get-intrinsic": "^1.0.2", 533 | "object-inspect": "^1.9.0" 534 | }, 535 | "funding": { 536 | "url": "https://github.com/sponsors/ljharb" 537 | } 538 | }, 539 | "node_modules/statuses": { 540 | "version": "2.0.1", 541 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 542 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 543 | "engines": { 544 | "node": ">= 0.8" 545 | } 546 | }, 547 | "node_modules/toidentifier": { 548 | "version": "1.0.1", 549 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 550 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 551 | "engines": { 552 | "node": ">=0.6" 553 | } 554 | }, 555 | "node_modules/type-is": { 556 | "version": "1.6.18", 557 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 558 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 559 | "dependencies": { 560 | "media-typer": "0.3.0", 561 | "mime-types": "~2.1.24" 562 | }, 563 | "engines": { 564 | "node": ">= 0.6" 565 | } 566 | }, 567 | "node_modules/unpipe": { 568 | "version": "1.0.0", 569 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 570 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", 571 | "engines": { 572 | "node": ">= 0.8" 573 | } 574 | }, 575 | "node_modules/utils-merge": { 576 | "version": "1.0.1", 577 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 578 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", 579 | "engines": { 580 | "node": ">= 0.4.0" 581 | } 582 | }, 583 | "node_modules/vary": { 584 | "version": "1.1.2", 585 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 586 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", 587 | "engines": { 588 | "node": ">= 0.8" 589 | } 590 | } 591 | }, 592 | "dependencies": { 593 | "accepts": { 594 | "version": "1.3.8", 595 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 596 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 597 | "requires": { 598 | "mime-types": "~2.1.34", 599 | "negotiator": "0.6.3" 600 | } 601 | }, 602 | "array-flatten": { 603 | "version": "1.1.1", 604 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 605 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" 606 | }, 607 | "body-parser": { 608 | "version": "1.20.1", 609 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", 610 | "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", 611 | "requires": { 612 | "bytes": "3.1.2", 613 | "content-type": "~1.0.4", 614 | "debug": "2.6.9", 615 | "depd": "2.0.0", 616 | "destroy": "1.2.0", 617 | "http-errors": "2.0.0", 618 | "iconv-lite": "0.4.24", 619 | "on-finished": "2.4.1", 620 | "qs": "6.11.0", 621 | "raw-body": "2.5.1", 622 | "type-is": "~1.6.18", 623 | "unpipe": "1.0.0" 624 | } 625 | }, 626 | "bytes": { 627 | "version": "3.1.2", 628 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 629 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" 630 | }, 631 | "call-bind": { 632 | "version": "1.0.2", 633 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 634 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 635 | "requires": { 636 | "function-bind": "^1.1.1", 637 | "get-intrinsic": "^1.0.2" 638 | } 639 | }, 640 | "content-disposition": { 641 | "version": "0.5.4", 642 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 643 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 644 | "requires": { 645 | "safe-buffer": "5.2.1" 646 | } 647 | }, 648 | "content-type": { 649 | "version": "1.0.4", 650 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 651 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 652 | }, 653 | "cookie": { 654 | "version": "0.5.0", 655 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 656 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" 657 | }, 658 | "cookie-signature": { 659 | "version": "1.0.6", 660 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 661 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" 662 | }, 663 | "debug": { 664 | "version": "2.6.9", 665 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 666 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 667 | "requires": { 668 | "ms": "2.0.0" 669 | } 670 | }, 671 | "depd": { 672 | "version": "2.0.0", 673 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 674 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" 675 | }, 676 | "destroy": { 677 | "version": "1.2.0", 678 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 679 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" 680 | }, 681 | "ee-first": { 682 | "version": "1.1.1", 683 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 684 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 685 | }, 686 | "encodeurl": { 687 | "version": "1.0.2", 688 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 689 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" 690 | }, 691 | "escape-html": { 692 | "version": "1.0.3", 693 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 694 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 695 | }, 696 | "etag": { 697 | "version": "1.8.1", 698 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 699 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" 700 | }, 701 | "express": { 702 | "version": "4.18.2", 703 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", 704 | "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", 705 | "requires": { 706 | "accepts": "~1.3.8", 707 | "array-flatten": "1.1.1", 708 | "body-parser": "1.20.1", 709 | "content-disposition": "0.5.4", 710 | "content-type": "~1.0.4", 711 | "cookie": "0.5.0", 712 | "cookie-signature": "1.0.6", 713 | "debug": "2.6.9", 714 | "depd": "2.0.0", 715 | "encodeurl": "~1.0.2", 716 | "escape-html": "~1.0.3", 717 | "etag": "~1.8.1", 718 | "finalhandler": "1.2.0", 719 | "fresh": "0.5.2", 720 | "http-errors": "2.0.0", 721 | "merge-descriptors": "1.0.1", 722 | "methods": "~1.1.2", 723 | "on-finished": "2.4.1", 724 | "parseurl": "~1.3.3", 725 | "path-to-regexp": "0.1.7", 726 | "proxy-addr": "~2.0.7", 727 | "qs": "6.11.0", 728 | "range-parser": "~1.2.1", 729 | "safe-buffer": "5.2.1", 730 | "send": "0.18.0", 731 | "serve-static": "1.15.0", 732 | "setprototypeof": "1.2.0", 733 | "statuses": "2.0.1", 734 | "type-is": "~1.6.18", 735 | "utils-merge": "1.0.1", 736 | "vary": "~1.1.2" 737 | } 738 | }, 739 | "finalhandler": { 740 | "version": "1.2.0", 741 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 742 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 743 | "requires": { 744 | "debug": "2.6.9", 745 | "encodeurl": "~1.0.2", 746 | "escape-html": "~1.0.3", 747 | "on-finished": "2.4.1", 748 | "parseurl": "~1.3.3", 749 | "statuses": "2.0.1", 750 | "unpipe": "~1.0.0" 751 | } 752 | }, 753 | "forwarded": { 754 | "version": "0.2.0", 755 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 756 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" 757 | }, 758 | "fresh": { 759 | "version": "0.5.2", 760 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 761 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" 762 | }, 763 | "function-bind": { 764 | "version": "1.1.1", 765 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 766 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 767 | }, 768 | "get-intrinsic": { 769 | "version": "1.1.3", 770 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", 771 | "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", 772 | "requires": { 773 | "function-bind": "^1.1.1", 774 | "has": "^1.0.3", 775 | "has-symbols": "^1.0.3" 776 | } 777 | }, 778 | "has": { 779 | "version": "1.0.3", 780 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 781 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 782 | "requires": { 783 | "function-bind": "^1.1.1" 784 | } 785 | }, 786 | "has-symbols": { 787 | "version": "1.0.3", 788 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 789 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" 790 | }, 791 | "http-errors": { 792 | "version": "2.0.0", 793 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 794 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 795 | "requires": { 796 | "depd": "2.0.0", 797 | "inherits": "2.0.4", 798 | "setprototypeof": "1.2.0", 799 | "statuses": "2.0.1", 800 | "toidentifier": "1.0.1" 801 | } 802 | }, 803 | "iconv-lite": { 804 | "version": "0.4.24", 805 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 806 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 807 | "requires": { 808 | "safer-buffer": ">= 2.1.2 < 3" 809 | } 810 | }, 811 | "inherits": { 812 | "version": "2.0.4", 813 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 814 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 815 | }, 816 | "ipaddr.js": { 817 | "version": "1.9.1", 818 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 819 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 820 | }, 821 | "media-typer": { 822 | "version": "0.3.0", 823 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 824 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" 825 | }, 826 | "merge-descriptors": { 827 | "version": "1.0.1", 828 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 829 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" 830 | }, 831 | "methods": { 832 | "version": "1.1.2", 833 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 834 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" 835 | }, 836 | "mime": { 837 | "version": "1.6.0", 838 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 839 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 840 | }, 841 | "mime-db": { 842 | "version": "1.52.0", 843 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 844 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" 845 | }, 846 | "mime-types": { 847 | "version": "2.1.35", 848 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 849 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 850 | "requires": { 851 | "mime-db": "1.52.0" 852 | } 853 | }, 854 | "ms": { 855 | "version": "2.0.0", 856 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 857 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 858 | }, 859 | "negotiator": { 860 | "version": "0.6.3", 861 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 862 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" 863 | }, 864 | "object-inspect": { 865 | "version": "1.12.2", 866 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", 867 | "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" 868 | }, 869 | "on-finished": { 870 | "version": "2.4.1", 871 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 872 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 873 | "requires": { 874 | "ee-first": "1.1.1" 875 | } 876 | }, 877 | "parseurl": { 878 | "version": "1.3.3", 879 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 880 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 881 | }, 882 | "path-to-regexp": { 883 | "version": "0.1.7", 884 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 885 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" 886 | }, 887 | "proxy-addr": { 888 | "version": "2.0.7", 889 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 890 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 891 | "requires": { 892 | "forwarded": "0.2.0", 893 | "ipaddr.js": "1.9.1" 894 | } 895 | }, 896 | "qs": { 897 | "version": "6.11.0", 898 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", 899 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", 900 | "requires": { 901 | "side-channel": "^1.0.4" 902 | } 903 | }, 904 | "range-parser": { 905 | "version": "1.2.1", 906 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 907 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 908 | }, 909 | "raw-body": { 910 | "version": "2.5.1", 911 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", 912 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", 913 | "requires": { 914 | "bytes": "3.1.2", 915 | "http-errors": "2.0.0", 916 | "iconv-lite": "0.4.24", 917 | "unpipe": "1.0.0" 918 | } 919 | }, 920 | "safe-buffer": { 921 | "version": "5.2.1", 922 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 923 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 924 | }, 925 | "safer-buffer": { 926 | "version": "2.1.2", 927 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 928 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 929 | }, 930 | "send": { 931 | "version": "0.18.0", 932 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 933 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 934 | "requires": { 935 | "debug": "2.6.9", 936 | "depd": "2.0.0", 937 | "destroy": "1.2.0", 938 | "encodeurl": "~1.0.2", 939 | "escape-html": "~1.0.3", 940 | "etag": "~1.8.1", 941 | "fresh": "0.5.2", 942 | "http-errors": "2.0.0", 943 | "mime": "1.6.0", 944 | "ms": "2.1.3", 945 | "on-finished": "2.4.1", 946 | "range-parser": "~1.2.1", 947 | "statuses": "2.0.1" 948 | }, 949 | "dependencies": { 950 | "ms": { 951 | "version": "2.1.3", 952 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 953 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 954 | } 955 | } 956 | }, 957 | "serve-static": { 958 | "version": "1.15.0", 959 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 960 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 961 | "requires": { 962 | "encodeurl": "~1.0.2", 963 | "escape-html": "~1.0.3", 964 | "parseurl": "~1.3.3", 965 | "send": "0.18.0" 966 | } 967 | }, 968 | "setprototypeof": { 969 | "version": "1.2.0", 970 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 971 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 972 | }, 973 | "side-channel": { 974 | "version": "1.0.4", 975 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 976 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 977 | "requires": { 978 | "call-bind": "^1.0.0", 979 | "get-intrinsic": "^1.0.2", 980 | "object-inspect": "^1.9.0" 981 | } 982 | }, 983 | "statuses": { 984 | "version": "2.0.1", 985 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 986 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" 987 | }, 988 | "toidentifier": { 989 | "version": "1.0.1", 990 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 991 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" 992 | }, 993 | "type-is": { 994 | "version": "1.6.18", 995 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 996 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 997 | "requires": { 998 | "media-typer": "0.3.0", 999 | "mime-types": "~2.1.24" 1000 | } 1001 | }, 1002 | "unpipe": { 1003 | "version": "1.0.0", 1004 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 1005 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" 1006 | }, 1007 | "utils-merge": { 1008 | "version": "1.0.1", 1009 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 1010 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" 1011 | }, 1012 | "vary": { 1013 | "version": "1.1.2", 1014 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 1015 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" 1016 | } 1017 | } 1018 | } 1019 | --------------------------------------------------------------------------------