From 42bcf83808345f0fbab284c004177a0634ec3088 Mon Sep 17 00:00:00 2001 From: ziy4ch <155040833+ziy4ch@users.noreply.github.com> Date: Wed, 26 Jun 2024 23:15:52 +0800 Subject: [PATCH 01/13] Update README.md Signed-off-by: ziy4ch <155040833+ziy4ch@users.noreply.github.com> --- README.md | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index bfcd9f39..6a9ff2ad 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,14 @@ # OSProject Running Containers for Application Development -Group Name: __Fill your team name__. +Group Name: Group 8. -Section: __Fill your class section__. +Section: 01. Team Mates: -1. __Fill name__ and __matric no__ -2. __Fill name__ and __matric no__ -3. __Fill name__ and __matric no__ +1. Ahmed Ashraf Bin Anuar and 2210177 +2. Nurul Adlina Binti Roslan and 2219814 +3. Nurain Awatif Binti Ismail and 2214552 +4. Nuralya Medina Binti Mohammad Nizam and 2211788 ## Rules 1. You are allowed to have **3 group** members. *Exception* is allowed **IFF (if and only if)** you are allowed to have 4 group members if you are a **multinational** or a **multigender** group. @@ -57,9 +58,11 @@ Team Mates: ***Questions:*** -1. What is default OS used to run the virtual environment for codespaces. ***(1 mark)*** __Fill answer here__. -2. What are the two options of ram, disk and vcpu configuration you can have in running codespaces . ***(1 mark)*** __Fill answer here__. -3. Why must we commit and sync our current work on source control? ***(1 mark)*** __Fill answer here__. +1. What is default OS used to run the virtual environment for codespaces. ***(1 mark)*** Glorious Zebra. +2. What are the two options of ram, disk and vcpu configuration you can have in running codespaces . ***(1 mark)*** +i.2-core with 8GB RAM, and 32GB storage. +ii.4-core with 16GB RAM, and 32GB storage.. +3. Why must we commit and sync our current work on source control? ***(1 mark)*** Committing our work is to publish our work to the team while syncing is to ensure we get the latest commit by the team.. ## Exploring the Terminal From eb283bc456ff86e4d0b1c4ba314af3d52299c40e Mon Sep 17 00:00:00 2001 From: ziy4ch <155040833+ziy4ch@users.noreply.github.com> Date: Wed, 26 Jun 2024 18:19:59 +0000 Subject: [PATCH 02/13] part 1 --- README.md | 232 ++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 209 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 6a9ff2ad..dc43218f 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,8 @@ Team Mates: ***Questions:*** -1. What is the link of the fork OSProject in your repository. ***(1 mark)*** __Fill answer here__. +1. What is the link of the fork OSProject in your repository. ***(1 mark)*** +- https://github.com/ziy4ch/OSProject.git 2. How many files and folders are in this repository. ***(1 mark)*** __Fill answer here__. @@ -58,11 +59,13 @@ Team Mates: ***Questions:*** -1. What is default OS used to run the virtual environment for codespaces. ***(1 mark)*** Glorious Zebra. +1. What is default OS used to run the virtual environment for codespaces. ***(1 mark)*** +- ideal space orbit 2. What are the two options of ram, disk and vcpu configuration you can have in running codespaces . ***(1 mark)*** -i.2-core with 8GB RAM, and 32GB storage. -ii.4-core with 16GB RAM, and 32GB storage.. -3. Why must we commit and sync our current work on source control? ***(1 mark)*** Committing our work is to publish our work to the team while syncing is to ensure we get the latest commit by the team.. +- i.2-core with 8GB RAM, and 32GB storage. +- ii.4-core with 16GB RAM, and 32GB storage.. +3. Why must we commit and sync our current work on source control? ***(1 mark)*** +- Committing our work is to publish our work to the team while syncing is to ensure we get the latest commit by the team.. ## Exploring the Terminal @@ -75,27 +78,210 @@ codespace -***Questions:*** +**Questions:** Look at the TERMINAL tab. Run the following commands and provide the output here. -1. Run the command **pwd** . ***(1 mark)*** __Fill answer here__. -2. Run the command **cat /etc/passwd** . ***(1 mark)*** __Fill answer here__. -3. Run the command **df** . ***(1 mark)*** __Fill answer here__. -4. Run the command **du** . ***(1 mark)*** __Fill answer here__. -5. Run the command **ls** . ***(1 mark)*** __Fill answer here__. -6. Run the command **ls -asl** . ***(1 mark)*** __Fill answer here__. -7. Run the command **free -h** . ***(1 mark)*** __Fill answer here__. -8. Run the command **cat /proc/cpuinfo** . ***(1 mark)*** __Fill answer here__. -9. Run the command **top** and type **q** to quit. ***(1 mark)*** __Fill answer here__. -10. Run the command **uname -a**. ***(1 mark)*** __Fill answer here__. -11. What is the available free memory in the system. ***(1 mark)*** __Fill answer here__. -12. What is the available disk space mounted on /workspace. ***(1 mark)*** __Fill answer here__. -13. Name the version and hardware architecture of the linux Virtual environment. ***(1 mark)*** __Fill answer here__. -14. What is the difference between **ls** vs **ls -asl**. ***(1 mark)*** __Fill answer here__. -15. What is the TLB size of the Virtual CPU. ***(1 mark)*** __Fill answer here__. -16. What is the CPU speed of the Virtual CPU. ***(1 mark)*** __Fill answer here__. -17. What is the top running process that consumes the most CPU cycles. ***(1 mark)*** __Fill answer here__. +1. Run the command *pwd* . **(1 mark)** +bash +/workspaces/OSProject + +2. Run the command *cat /etc/passwd* . **(1 mark)** +bash +root:x:0:0:root:/root:/bin/bash +daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin +bin:x:2:2:bin:/bin:/usr/sbin/nologin +sys:x:3:3:sys:/dev:/usr/sbin/nologin +sync:x:4:65534:sync:/bin:/bin/sync +games:x:5:60:games:/usr/games:/usr/sbin/nologin +man:x:6:12:man:/var/cache/man:/usr/sbin/nologin +lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin +mail:x:8:8:mail:/var/mail:/usr/sbin/nologin +news:x:9:9:news:/var/spool/news:/usr/sbin/nologin +uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin +proxy:x:13:13:proxy:/bin:/usr/sbin/nologin +www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin +backup:x:34:34:backup:/var/backups:/usr/sbin/nologin +list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin +irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin +gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin +nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin +_apt:x:100:65534::/nonexistent:/usr/sbin/nologin +systemd-timesync:x:101:101:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin +systemd-network:x:102:103:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin +systemd-resolve:x:103:104:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin +messagebus:x:104:105::/nonexistent:/usr/sbin/nologin +codespace:x:1000:1000::/home/codespace:/bin/bash +sshd:x:105:65534::/run/sshd:/usr/sbin/nologin + +3. Run the command *df* . **(1 mark)** +bash +Filesystem 1K-blocks Used Available Use% Mounted on +overlay 32847680 10380372 20773208 34% / +tmpfs 65536 0 65536 0% /dev +shm 65536 0 65536 0% /dev/shm +/dev/root 30298176 24263272 6018520 81% /vscode +/dev/sda1 46127956 92 43752288 1% /tmp +/dev/loop3 32847680 10380372 20773208 34% /workspaces +4. Run the command **du** . ***(1 mark)*** + 4 ./.git/lfs/tmp +8 ./.git/lfs +8 ./.git/objects/6c +712 ./.git/objects/12 +12 ./.git/objects/6a +8 ./.git/objects/f6 +300 ./.git/objects/d1 +116 ./.git/objects/03 +200 ./.git/objects/34 +4 ./.git/objects/pack +408 ./.git/objects/3a +112 ./.git/objects/5c +8 ./.git/objects/c0 +4 ./.git/objects/info +1896 ./.git/objects +8 ./.git/refs/heads +4 ./.git/refs/tags +16 ./.git/refs +8 ./.git/logs/refs/heads +12 ./.git/logs/refs +20 ./.git/logs +68 ./.git/hooks +4 ./.git/branches +8 ./.git/info +2044 ./.git +1972 ./images +4040 . + +5. Run the command *ls* . **(1 mark)** +bash +README.md images + +6. Run the command *ls -asl* . **(1 mark)** +bash +total 36 + 4 drwxrwxrwx+ 4 codespace root 4096 Jun 26 16:03 . + 4 drwxr-xrwx+ 5 codespace root 4096 Jun 26 16:04 .. + 4 drwxrwxrwx+ 9 codespace root 4096 Jun 26 16:04 .git +20 -rw-rw-rw- 1 codespace root 19859 Jun 26 17:49 README.md + 4 drwxrwxrwx+ 2 codespace root 4096 Jun 26 16:03 images + +7. Run the command *free -h* . **(1 mark)** +bash + total used free shared buff/cache available +Mem: 7.7Gi 1.3Gi 280Mi 63Mi 6.2Gi 6.1Gi +Swap: 0B 0B 0B + +8. Run the command *cat /proc/cpuinfo* . **(1 mark)** +bash +processor : 0 +vendor_id : AuthenticAMD +cpu family : 25 +model : 1 +model name : AMD EPYC 7763 64-Core Processor +stepping : 1 +microcode : 0xffffffff +cpu MHz : 2852.905 +cache size : 512 KB +physical id : 0 +siblings : 2 +core id : 0 +cpu cores : 1 +apicid : 0 +initial apicid : 0 +fpu : yes +fpu_exception : yes +cpuid level : 13 +wp : yes +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl tsc_reliable nonstop_tsc cpuid extd_apicid aperfmperf pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy svm cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw topoext invpcid_single vmmcall fsgsbase bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves clzero xsaveerptr rdpru arat npt nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold v_vmsave_vmload umip vaes vpclmulqdq rdpid fsrm +bugs : sysret_ss_attrs null_seg spectre_v1 spectre_v2 spec_store_bypass srso +bogomips : 4890.85 +TLB size : 2560 4K pages +clflush size : 64 +cache_alignment : 64 +address sizes : 48 bits physical, 48 bits virtual +power management: + +processor : 1 +vendor_id : AuthenticAMD +cpu family : 25 +model : 1 +model name : AMD EPYC 7763 64-Core Processor +stepping : 1 +microcode : 0xffffffff +cpu MHz : 2833.829 +cache size : 512 KB +physical id : 0 +siblings : 2 +core id : 0 +cpu cores : 1 +apicid : 1 +initial apicid : 1 +fpu : yes +fpu_exception : yes +cpuid level : 13 +wp : yes +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl tsc_reliable nonstop_tsc cpuid extd_apicid aperfmperf pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy svm cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw topoext invpcid_single vmmcall fsgsbase bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves clzero xsaveerptr rdpru arat npt nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold v_vmsave_vmload umip vaes vpclmulqdq rdpid fsrm +bugs : sysret_ss_attrs null_seg spectre_v1 spectre_v2 spec_store_bypass srso +bogomips : 4890.85 +TLB size : 2560 4K pages +clflush size : 64 +cache_alignment : 64 +address sizes : 48 bits physical, 48 bits virtual +power management: + + +9. Run the command *top* and type *q* to quit. **(1 mark)** +bash +processor : 1 +vendor_id : AuthenticAMD +cpu family : 25 +model : 1 +model name : AMD EPYC 7763 64-Core Processor +stepping : 1 +microcode : 0xffffffff +cpu MHz : 2833.829 +cache size : 512 KB +physical id : 0 +siblings : 2 +core id : 0 +cpu cores : 1 +apicid : 1 +initial apicid : 1 +fpu : yes +fpu_exception : yes +cpuid level : 13 +wp : yes +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl tsc_reliable nonstop_tsc cpuid extd_apicid aperfmperf pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy svm cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw topoext invpcid_single vmmcall fsgsbase bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves clzero xsaveerptr rdpru arat npt nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold v_vmsave_vmload umip vaes vpclmulqdq rdpid fsrm +bugs : sysret_ss_attrs null_seg spectre_v1 spectre_v2 spec_store_bypass srso +top - 17:53:59 up 12 min, 0 users, load average: 0.36, 0.56, 0.48 +Tasks: 17 total, 1 running, 16 sleeping, 0 stopped, 0 zombie +%Cpu(s): 3.4 us, 3.7 sy, 0.0 ni, 92.6 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st +MiB Mem : 7929.6 total, 272.3 free, 1338.5 used, 6318.8 buff/cache +MiB Swap: 0.0 total, 0.0 free, 0.0 used. 6212.2 avail Mem + + PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND + 581 codespa+ 20 0 21.5g 330256 49920 S 1.3 4.1 0:19.98 node + 560 codespa+ 20 0 1332444 106588 45184 S 0.3 1.3 0:04.14 node + +10. Run the command *uname -a. ***(1 mark)** +bash +Linux codespaces-3221e8 6.5.0-1021-azure #22~22.04.1-Ubuntu SMP Tue Apr 30 16:08:18 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux + +11. What is the available free memory in the system. **(1 mark)** +- 262.3 MB +12. What is the available disk space mounted on /workspace. **(1 mark)** +- 6202.6 mb +13. Name the version and hardware architecture of the linux Virtual environment. **(1 mark)** +- Ubuntu SMP 22.04.1. +14. What is the difference between *ls* vs *ls -asl. ***(1 mark)** +- ls: show directories/folders in the project. +- ls -asl: show access for owners, private, and public to the directories. +15. What is the TLB size of the Virtual CPU. **(1 mark)** +- 2560 4K pages +16. What is the CPU speed of the Virtual CPU. **(1 mark)** +- 2833.829 MHz +17. What is the top running process that consumes the most CPU cycles. **(1 mark)** +- 581 codespa+ 20 0 21.5g 334960 49920 S 2.0 4.1 0:20.16 node ## Running your own container instance. From f2bf0c85fc14977471fa2d9d3a4bf11c02eb2b6f Mon Sep 17 00:00:00 2001 From: ziy4ch <155040833+ziy4ch@users.noreply.github.com> Date: Wed, 26 Jun 2024 18:22:52 +0000 Subject: [PATCH 03/13] part1.1 --- README.md | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index dc43218f..2ffdc9f9 100644 --- a/README.md +++ b/README.md @@ -83,11 +83,11 @@ codespace Look at the TERMINAL tab. Run the following commands and provide the output here. 1. Run the command *pwd* . **(1 mark)** -bash +```bash /workspaces/OSProject - +``` 2. Run the command *cat /etc/passwd* . **(1 mark)** -bash +```bash root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin @@ -113,9 +113,9 @@ systemd-resolve:x:103:104:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin messagebus:x:104:105::/nonexistent:/usr/sbin/nologin codespace:x:1000:1000::/home/codespace:/bin/bash sshd:x:105:65534::/run/sshd:/usr/sbin/nologin - +``` 3. Run the command *df* . **(1 mark)** -bash +```bash Filesystem 1K-blocks Used Available Use% Mounted on overlay 32847680 10380372 20773208 34% / tmpfs 65536 0 65536 0% /dev @@ -151,28 +151,28 @@ shm 65536 0 65536 0% /dev/shm 2044 ./.git 1972 ./images 4040 . - +``` 5. Run the command *ls* . **(1 mark)** -bash +```bash README.md images - +``` 6. Run the command *ls -asl* . **(1 mark)** -bash +```bash total 36 4 drwxrwxrwx+ 4 codespace root 4096 Jun 26 16:03 . 4 drwxr-xrwx+ 5 codespace root 4096 Jun 26 16:04 .. 4 drwxrwxrwx+ 9 codespace root 4096 Jun 26 16:04 .git 20 -rw-rw-rw- 1 codespace root 19859 Jun 26 17:49 README.md 4 drwxrwxrwx+ 2 codespace root 4096 Jun 26 16:03 images - + ``` 7. Run the command *free -h* . **(1 mark)** -bash +```bash total used free shared buff/cache available Mem: 7.7Gi 1.3Gi 280Mi 63Mi 6.2Gi 6.1Gi Swap: 0B 0B 0B - +``` 8. Run the command *cat /proc/cpuinfo* . **(1 mark)** -bash +```bash processor : 0 vendor_id : AuthenticAMD cpu family : 25 @@ -228,10 +228,10 @@ clflush size : 64 cache_alignment : 64 address sizes : 48 bits physical, 48 bits virtual power management: - +``` 9. Run the command *top* and type *q* to quit. **(1 mark)** -bash +```bash processor : 1 vendor_id : AuthenticAMD cpu family : 25 @@ -262,11 +262,11 @@ MiB Swap: 0.0 total, 0.0 free, 0.0 used. 6212.2 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 581 codespa+ 20 0 21.5g 330256 49920 S 1.3 4.1 0:19.98 node 560 codespa+ 20 0 1332444 106588 45184 S 0.3 1.3 0:04.14 node - +``` 10. Run the command *uname -a. ***(1 mark)** -bash +```bash Linux codespaces-3221e8 6.5.0-1021-azure #22~22.04.1-Ubuntu SMP Tue Apr 30 16:08:18 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux - +``` 11. What is the available free memory in the system. **(1 mark)** - 262.3 MB 12. What is the available disk space mounted on /workspace. **(1 mark)** From 42cf3e9b058e30355a78720e49c2fec36ab1a95f Mon Sep 17 00:00:00 2001 From: ziy4ch <155040833+ziy4ch@users.noreply.github.com> Date: Wed, 26 Jun 2024 19:03:26 +0000 Subject: [PATCH 04/13] part 2 --- README.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 2ffdc9f9..c39a919a 100644 --- a/README.md +++ b/README.md @@ -341,8 +341,10 @@ f65be1987f84 debian "bash" 19 minutes ago Exited (137) 18 seconds ago ***Questions:*** -1. Are files in the container persistent. Why not?. ***(1 mark)*** __Fill answer here__. -2. Can we run two, or three instances of debian linux? . ***(1 mark)*** __Fill answer here__. +1. Are files in the container persistent. Why not?. ***(1 mark)*** +- Not persistent. The files lost when the container is removed or stopped. +2. Can we run two, or three instances of debian linux? . ***(1 mark)*** +- Yes ## Running your own container with persistent storage @@ -361,14 +363,15 @@ At the terminal, create a new directory called **myroot**, and run a instance of ***Questions:*** -1. Check the permission of the files created in myroot, what user and group is the files created in docker container on the host virtual machine? . ***(2 mark)*** __Fill answer here__. +1. Check the permission of the files created in myroot, what user and group is the files created in docker container on the host virtual machine? . ***(2 mark)*** total 4 +- -rw-rw-rw- 1 root root 8 Jun 26 18:40 helloworld.txt 2. Can you change the permission of the files to user codespace. You will need this to be able to commit and get points for this question. ***(2 mark)*** ```bash //use sudo and chown sudo chown -R codespace:codespace myroot ``` -*** __Fill answer here__.*** +*** Yes you can change *** ## You are on your own, create your own static webpage From 491abc23916997c285e8dc6946e2291aadeabe53 Mon Sep 17 00:00:00 2001 From: ziy4ch <155040833+ziy4ch@users.noreply.github.com> Date: Thu, 27 Jun 2024 05:21:04 +0000 Subject: [PATCH 05/13] part 3 --- README.md | 96 +++++++++++++++++++++++++++++++++++++++++----- webpage/index.html | 11 ++++++ 2 files changed, 97 insertions(+), 10 deletions(-) create mode 100644 webpage/index.html diff --git a/README.md b/README.md index c39a919a..ee5e583f 100644 --- a/README.md +++ b/README.md @@ -397,9 +397,23 @@ docker run --detach -v /workspaces/OSProject/webpage:/usr/local/apache2/htdocs/ ***Questions:*** -1. What is the permission of folder /usr/local/apache/htdocs and what user and group owns the folder? . ***(2 mark)*** __Fill answer here__. -2. What port is the apache web server running. ***(1 mark)*** __Fill answer here__. -3. What port is open for http protocol on the host machine? ***(1 mark)*** __Fill answer here__. +1. What is the permission of folder /usr/local/apache/htdocs and what user and group owns the folder? . ***(2 mark)*** +```bash +Permissions: drwxrwxrwx+ + +d: This indicates it's a directory. +rwxrwxrwx: This indicates read, write, and execute permissions for the owner, group, and others. ++: This indicates that there are additional access control list (ACL) entries. + +Owner: 1000 + +Group: 1000 +``` +2. What port is the apache web server running. ***(1 mark) +*** Port '80'. +3. What port is open for http protocol on the host machine? ***(1 mark)*** +Port '8080'. + ## Create SUB Networks @@ -418,11 +432,28 @@ docker run -itd --net rednet --name c2 busybox sh ``` ***Questions:*** -1. Describe what is busybox and what is command switch **--name** is for? . ***(2 mark)*** __Fill answer here__. -2. Explore the network using the command ```docker network ls```, show the output of your terminal. ***(1 mark)*** __Fill answer here__. -3. Using ```docker inspect c1``` and ```docker inspect c2``` inscpect the two network. What is the gateway of bluenet and rednet.? ***(1 mark)*** __Fill answer here__. -4. What is the network address for the running container c1 and c2? ***(1 mark)*** __Fill answer here__. -5. Using the command ```docker exec c1 ping c2```, which basically tries to do a ping from container c1 to c2. Are you able to ping? Show your output . ***(1 mark)*** __Fill answer here__. +1. Describe what is busybox and what is command switch **--name** is for? . ***(2 mark)*** +- BusyBox is a software suite that provides several Unix utilities in a single executable file. It is often used in embedded systems and Docker containers because it offers a lightweight set of tools that are efficient and functional. --name switch: The --name switch in Docker is used to assign a name to a container. This makes it easier to reference the container by name rather than by its container ID, simplifying management and identification of the container +2. Explore the network using the command ```docker network ls```, show the output of your terminal. ***(1 mark)*** +```bash +NETWORK ID NAME DRIVER SCOPE +7c9a2668b993 bluenet bridge local +afe6dade3149 bridge bridge local +adaf77f09c85 host host local +acd86aee4060 none null local +413579fdbb0f rednet bridge local +``` +3. Using ```docker inspect c1``` and ```docker inspect c2``` inscpect the two network. What is the gateway of bluenet and rednet.? ***(1 mark)*** +-bluenet : 172.18.0.1 +-rednet : 172.19.0.1 +4. What is the network address for the running container c1 and c2? ***(1 mark)*** +- IP address c1: 172.18.0.2 +- IP address c2: 172.19.0.2 +5. Using the command ```docker exec c1 ping c2```, which basically tries to do a ping from container c1 to c2. Are you able to ping? Show your output . ***(1 mark)*** +```bash +ping: bad address 'c2' +``` +No , Since c1 and c2 are on different networks (bluenet and rednet respectively), they cannot communicate directly with each other. Therefore, the ping command fails with a "bad address" error. ## Bridging two SUB Networks 1. Let's try this again by creating a network to bridge the two containers in the two subnetworks @@ -434,8 +465,53 @@ docker exec c1 ping c2 ``` ***Questions:*** -1. Are you able to ping? Show your output . ***(1 mark)*** __Fill answer here__. -2. What is different from the previous ping in the section above? ***(1 mark)*** __Fill answer here__. +1. Are you able to ping? Show your output . ***(1 mark)*** +```bash +PING c2 (172.20.0.3): 56 data bytes +64 bytes from 172.20.0.3: seq=0 ttl=64 time=0.130 ms +64 bytes from 172.20.0.3: seq=1 ttl=64 time=0.082 ms +64 bytes from 172.20.0.3: seq=2 ttl=64 time=0.105 ms +64 bytes from 172.20.0.3: seq=3 ttl=64 time=0.071 ms +64 bytes from 172.20.0.3: seq=4 ttl=64 time=0.096 ms +64 bytes from 172.20.0.3: seq=5 ttl=64 time=0.079 ms +64 bytes from 172.20.0.3: seq=6 ttl=64 time=0.076 ms +64 bytes from 172.20.0.3: seq=7 ttl=64 time=0.069 ms +64 bytes from 172.20.0.3: seq=8 ttl=64 time=0.081 ms +64 bytes from 172.20.0.3: seq=9 ttl=64 time=0.068 ms +64 bytes from 172.20.0.3: seq=10 ttl=64 time=0.064 ms +64 bytes from 172.20.0.3: seq=11 ttl=64 time=0.073 ms +64 bytes from 172.20.0.3: seq=12 ttl=64 time=0.078 ms +64 bytes from 172.20.0.3: seq=13 ttl=64 time=0.081 ms +64 bytes from 172.20.0.3: seq=14 ttl=64 time=0.106 ms +64 bytes from 172.20.0.3: seq=15 ttl=64 time=0.079 ms +64 bytes from 172.20.0.3: seq=16 ttl=64 time=0.103 ms +64 bytes from 172.20.0.3: seq=17 ttl=64 time=0.068 ms +64 bytes from 172.20.0.3: seq=18 ttl=64 time=0.078 ms +64 bytes from 172.20.0.3: seq=19 ttl=64 time=0.081 ms +64 bytes from 172.20.0.3: seq=20 ttl=64 time=0.077 ms +64 bytes from 172.20.0.3: seq=21 ttl=64 time=0.084 ms +64 bytes from 172.20.0.3: seq=22 ttl=64 time=0.115 ms +64 bytes from 172.20.0.3: seq=23 ttl=64 time=0.080 ms +64 bytes from 172.20.0.3: seq=24 ttl=64 time=0.090 ms +64 bytes from 172.20.0.3: seq=25 ttl=64 time=0.084 ms +64 bytes from 172.20.0.3: seq=26 ttl=64 time=0.074 ms +64 bytes from 172.20.0.3: seq=27 ttl=64 time=0.068 ms +64 bytes from 172.20.0.3: seq=28 ttl=64 time=0.081 ms +64 bytes from 172.20.0.3: seq=29 ttl=64 time=0.076 ms +64 bytes from 172.20.0.3: seq=30 ttl=64 time=0.080 ms +64 bytes from 172.20.0.3: seq=31 ttl=64 time=0.069 ms +64 bytes from 172.20.0.3: seq=32 ttl=64 time=0.113 ms +64 bytes from 172.20.0.3: seq=33 ttl=64 time=0.071 ms +64 bytes from 172.20.0.3: seq=34 ttl=64 time=0.084 ms +64 bytes from 172.20.0.3: seq=35 ttl=64 time=0.068 ms +64 bytes from 172.20.0.3: seq=36 ttl=64 time=0.068 ms +64 bytes from 172.20.0.3: seq=37 ttl=64 time=0.086 ms +64 bytes from 172.20.0.3: seq=38 ttl=64 time=0.073 ms +``` +2. What is different from the previous ping in the section above? ***(1 mark)*** +I am able to ping c2 from c1 successfully. Previous Ping: The previous ping attempt failed with the error ping: bad address 'c2' because c1 and c2 were on separate, isolated networks (bluenet and rednet) and couldn't communicate with each other directly. + +Current Ping: After connecting both containers to the bridgenet network, they are now part of a common network, allowing them to communicate with each other. As a result, the ping from c1 to c2 is successful. ## Intermediate Level (10 marks bonus) diff --git a/webpage/index.html b/webpage/index.html new file mode 100644 index 00000000..2de195d4 --- /dev/null +++ b/webpage/index.html @@ -0,0 +1,11 @@ + + +
+This is our first webpage hehe.
+ + + From 278cd80d2a9aae77e29d7aef5e9a07c886f7a679 Mon Sep 17 00:00:00 2001 From: ziy4ch <155040833+ziy4ch@users.noreply.github.com> Date: Thu, 27 Jun 2024 05:23:51 +0000 Subject: [PATCH 06/13] hehe --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index ee5e583f..f6f8e8f0 100644 --- a/README.md +++ b/README.md @@ -409,10 +409,10 @@ Owner: 1000 Group: 1000 ``` -2. What port is the apache web server running. ***(1 mark) -*** Port '80'. +2. What port is the apache web server running. ***(1 mark)*** +- Port '80'. 3. What port is open for http protocol on the host machine? ***(1 mark)*** -Port '8080'. +- Port '8080'. ## Create SUB Networks @@ -444,8 +444,8 @@ acd86aee4060 none null local 413579fdbb0f rednet bridge local ``` 3. Using ```docker inspect c1``` and ```docker inspect c2``` inscpect the two network. What is the gateway of bluenet and rednet.? ***(1 mark)*** --bluenet : 172.18.0.1 --rednet : 172.19.0.1 +- bluenet : 172.18.0.1 +- rednet : 172.19.0.1 4. What is the network address for the running container c1 and c2? ***(1 mark)*** - IP address c1: 172.18.0.2 - IP address c2: 172.19.0.2 @@ -509,7 +509,7 @@ PING c2 (172.20.0.3): 56 data bytes 64 bytes from 172.20.0.3: seq=38 ttl=64 time=0.073 ms ``` 2. What is different from the previous ping in the section above? ***(1 mark)*** -I am able to ping c2 from c1 successfully. Previous Ping: The previous ping attempt failed with the error ping: bad address 'c2' because c1 and c2 were on separate, isolated networks (bluenet and rednet) and couldn't communicate with each other directly. +- I am able to ping c2 from c1 successfully. Previous Ping: The previous ping attempt failed with the error ping: bad address 'c2' because c1 and c2 were on separate, isolated networks (bluenet and rednet) and couldn't communicate with each other directly. Current Ping: After connecting both containers to the bridgenet network, they are now part of a common network, allowing them to communicate with each other. As a result, the ping from c1 to c2 is successful. From dfc0b43f3fb18b6bee51bbb894bc27b5514454ac Mon Sep 17 00:00:00 2001 From: ziy4ch <155040833+ziy4ch@users.noreply.github.com> Date: Thu, 27 Jun 2024 16:58:43 +0800 Subject: [PATCH 07/13] Update README.md Signed-off-by: ziy4ch <155040833+ziy4ch@users.noreply.github.com> --- README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f6f8e8f0..212a41c8 100644 --- a/README.md +++ b/README.md @@ -654,8 +654,11 @@ You have now set up a Node.js application in a Docker container on nodejsnet net ***Questions:*** -1. What is the output of step 5 above, explain the error? ***(1 mark)*** __Fill answer here__. -2. Show the instruction needed to make this work. ***(1 mark)*** __Fill answer here__. +1. What is the output of step 5 above, explain the error? ***(1 mark)*** + + + +3. Show the instruction needed to make this work. ***(1 mark)*** __Fill answer here__. From 9af67e9477c8a670b03a45d1edb550795b2e17d8 Mon Sep 17 00:00:00 2001 From: ziy4ch <155040833+ziy4ch@users.noreply.github.com> Date: Thu, 27 Jun 2024 17:31:25 +0800 Subject: [PATCH 08/13] Update README.md Signed-off-by: ziy4ch <155040833+ziy4ch@users.noreply.github.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 212a41c8..cf0cc759 100644 --- a/README.md +++ b/README.md @@ -655,7 +655,7 @@ You have now set up a Node.js application in a Docker container on nodejsnet net ***Questions:*** 1. What is the output of step 5 above, explain the error? ***(1 mark)*** - + 3. Show the instruction needed to make this work. ***(1 mark)*** __Fill answer here__. From 57b02093cee2d83c832fef92d13dde710dbfa842 Mon Sep 17 00:00:00 2001 From: ziy4ch <155040833+ziy4ch@users.noreply.github.com> Date: Thu, 27 Jun 2024 17:32:08 +0800 Subject: [PATCH 09/13] Update README.md Signed-off-by: ziy4ch <155040833+ziy4ch@users.noreply.github.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cf0cc759..346fd4b9 100644 --- a/README.md +++ b/README.md @@ -658,7 +658,7 @@ You have now set up a Node.js application in a Docker container on nodejsnet net -3. Show the instruction needed to make this work. ***(1 mark)*** __Fill answer here__. +2. Show the instruction needed to make this work. ***(1 mark)*** __Fill answer here__. From 665c758a9033a7c15cc9c41657653f785aaeb67f Mon Sep 17 00:00:00 2001 From: ziy4ch <155040833+ziy4ch@users.noreply.github.com> Date: Thu, 27 Jun 2024 09:30:17 +0000 Subject: [PATCH 10/13] part4 --- README.md | 5 +- nodejs-app/Dockerfile | 17 + nodejs-app/index.js | 45 + nodejs-app/node_modules/.bin/mime | 1 + nodejs-app/node_modules/.package-lock.json | 776 ++ nodejs-app/node_modules/accepts/HISTORY.md | 243 + nodejs-app/node_modules/accepts/LICENSE | 23 + nodejs-app/node_modules/accepts/README.md | 140 + nodejs-app/node_modules/accepts/index.js | 238 + nodejs-app/node_modules/accepts/package.json | 47 + nodejs-app/node_modules/array-flatten/LICENSE | 21 + .../node_modules/array-flatten/README.md | 43 + .../array-flatten/array-flatten.js | 64 + .../node_modules/array-flatten/package.json | 39 + .../node_modules/bignumber.js/CHANGELOG.md | 266 + nodejs-app/node_modules/bignumber.js/LICENCE | 23 + .../node_modules/bignumber.js/README.md | 268 + .../node_modules/bignumber.js/bignumber.d.ts | 1829 ++++ .../node_modules/bignumber.js/bignumber.js | 2902 ++++++ .../bignumber.js/bignumber.min.js | 1 + .../bignumber.js/bignumber.min.js.map | 1 + .../node_modules/bignumber.js/bignumber.mjs | 2888 ++++++ .../node_modules/bignumber.js/doc/API.html | 2237 +++++ .../node_modules/bignumber.js/package.json | 40 + .../node_modules/body-parser/HISTORY.md | 665 ++ nodejs-app/node_modules/body-parser/LICENSE | 23 + nodejs-app/node_modules/body-parser/README.md | 465 + .../node_modules/body-parser/SECURITY.md | 25 + nodejs-app/node_modules/body-parser/index.js | 156 + .../node_modules/body-parser/lib/read.js | 205 + .../body-parser/lib/types/json.js | 247 + .../node_modules/body-parser/lib/types/raw.js | 101 + .../body-parser/lib/types/text.js | 121 + .../body-parser/lib/types/urlencoded.js | 284 + .../node_modules/body-parser/package.json | 56 + nodejs-app/node_modules/bytes/History.md | 97 + nodejs-app/node_modules/bytes/LICENSE | 23 + nodejs-app/node_modules/bytes/Readme.md | 152 + nodejs-app/node_modules/bytes/index.js | 170 + nodejs-app/node_modules/bytes/package.json | 42 + .../node_modules/call-bind/.eslintignore | 1 + nodejs-app/node_modules/call-bind/.eslintrc | 16 + .../call-bind/.github/FUNDING.yml | 12 + nodejs-app/node_modules/call-bind/.nycrc | 9 + .../node_modules/call-bind/CHANGELOG.md | 93 + nodejs-app/node_modules/call-bind/LICENSE | 21 + nodejs-app/node_modules/call-bind/README.md | 64 + .../node_modules/call-bind/callBound.js | 15 + nodejs-app/node_modules/call-bind/index.js | 35 + .../node_modules/call-bind/package.json | 95 + .../node_modules/call-bind/test/callBound.js | 54 + .../node_modules/call-bind/test/index.js | 80 + .../content-disposition/HISTORY.md | 60 + .../node_modules/content-disposition/LICENSE | 22 + .../content-disposition/README.md | 142 + .../node_modules/content-disposition/index.js | 458 + .../content-disposition/package.json | 44 + .../node_modules/content-type/HISTORY.md | 29 + nodejs-app/node_modules/content-type/LICENSE | 22 + .../node_modules/content-type/README.md | 94 + nodejs-app/node_modules/content-type/index.js | 225 + .../node_modules/content-type/package.json | 42 + .../node_modules/cookie-signature/.npmignore | 4 + .../node_modules/cookie-signature/History.md | 38 + .../node_modules/cookie-signature/Readme.md | 42 + .../node_modules/cookie-signature/index.js | 51 + .../cookie-signature/package.json | 18 + nodejs-app/node_modules/cookie/HISTORY.md | 147 + nodejs-app/node_modules/cookie/LICENSE | 24 + nodejs-app/node_modules/cookie/README.md | 317 + nodejs-app/node_modules/cookie/SECURITY.md | 25 + nodejs-app/node_modules/cookie/index.js | 274 + nodejs-app/node_modules/cookie/package.json | 44 + nodejs-app/node_modules/core-util-is/LICENSE | 19 + .../node_modules/core-util-is/README.md | 3 + .../node_modules/core-util-is/lib/util.js | 107 + .../node_modules/core-util-is/package.json | 38 + nodejs-app/node_modules/debug/.coveralls.yml | 1 + nodejs-app/node_modules/debug/.eslintrc | 11 + nodejs-app/node_modules/debug/.npmignore | 9 + nodejs-app/node_modules/debug/.travis.yml | 14 + nodejs-app/node_modules/debug/CHANGELOG.md | 362 + nodejs-app/node_modules/debug/LICENSE | 19 + nodejs-app/node_modules/debug/Makefile | 50 + nodejs-app/node_modules/debug/README.md | 312 + nodejs-app/node_modules/debug/component.json | 19 + nodejs-app/node_modules/debug/karma.conf.js | 70 + nodejs-app/node_modules/debug/node.js | 1 + nodejs-app/node_modules/debug/package.json | 49 + nodejs-app/node_modules/debug/src/browser.js | 185 + nodejs-app/node_modules/debug/src/debug.js | 202 + nodejs-app/node_modules/debug/src/index.js | 10 + .../node_modules/debug/src/inspector-log.js | 15 + nodejs-app/node_modules/debug/src/node.js | 248 + .../define-data-property/.eslintrc | 24 + .../define-data-property/.github/FUNDING.yml | 12 + .../node_modules/define-data-property/.nycrc | 13 + .../define-data-property/CHANGELOG.md | 70 + .../node_modules/define-data-property/LICENSE | 21 + .../define-data-property/README.md | 67 + .../define-data-property/index.d.ts | 12 + .../define-data-property/index.js | 56 + .../define-data-property/package.json | 106 + .../define-data-property/test/index.js | 392 + .../define-data-property/tsconfig.json | 59 + nodejs-app/node_modules/depd/History.md | 103 + nodejs-app/node_modules/depd/LICENSE | 22 + nodejs-app/node_modules/depd/Readme.md | 280 + nodejs-app/node_modules/depd/index.js | 538 ++ .../node_modules/depd/lib/browser/index.js | 77 + nodejs-app/node_modules/depd/package.json | 45 + nodejs-app/node_modules/destroy/LICENSE | 23 + nodejs-app/node_modules/destroy/README.md | 63 + nodejs-app/node_modules/destroy/index.js | 209 + nodejs-app/node_modules/destroy/package.json | 48 + nodejs-app/node_modules/ee-first/LICENSE | 22 + nodejs-app/node_modules/ee-first/README.md | 80 + nodejs-app/node_modules/ee-first/index.js | 95 + nodejs-app/node_modules/ee-first/package.json | 29 + nodejs-app/node_modules/encodeurl/HISTORY.md | 14 + nodejs-app/node_modules/encodeurl/LICENSE | 22 + nodejs-app/node_modules/encodeurl/README.md | 128 + nodejs-app/node_modules/encodeurl/index.js | 60 + .../node_modules/encodeurl/package.json | 40 + .../node_modules/es-define-property/.eslintrc | 13 + .../es-define-property/.github/FUNDING.yml | 12 + .../node_modules/es-define-property/.nycrc | 9 + .../es-define-property/CHANGELOG.md | 15 + .../node_modules/es-define-property/LICENSE | 21 + .../node_modules/es-define-property/README.md | 49 + .../es-define-property/index.d.ts | 3 + .../node_modules/es-define-property/index.js | 16 + .../es-define-property/package.json | 81 + .../es-define-property/test/index.js | 55 + .../es-define-property/tsconfig.json | 50 + nodejs-app/node_modules/es-errors/.eslintrc | 5 + .../es-errors/.github/FUNDING.yml | 12 + .../node_modules/es-errors/CHANGELOG.md | 40 + nodejs-app/node_modules/es-errors/LICENSE | 21 + nodejs-app/node_modules/es-errors/README.md | 55 + nodejs-app/node_modules/es-errors/eval.d.ts | 3 + nodejs-app/node_modules/es-errors/eval.js | 4 + nodejs-app/node_modules/es-errors/index.d.ts | 3 + nodejs-app/node_modules/es-errors/index.js | 4 + .../node_modules/es-errors/package.json | 80 + nodejs-app/node_modules/es-errors/range.d.ts | 3 + nodejs-app/node_modules/es-errors/range.js | 4 + nodejs-app/node_modules/es-errors/ref.d.ts | 3 + nodejs-app/node_modules/es-errors/ref.js | 4 + nodejs-app/node_modules/es-errors/syntax.d.ts | 3 + nodejs-app/node_modules/es-errors/syntax.js | 4 + .../node_modules/es-errors/test/index.js | 19 + .../node_modules/es-errors/tsconfig.json | 49 + nodejs-app/node_modules/es-errors/type.d.ts | 3 + nodejs-app/node_modules/es-errors/type.js | 4 + nodejs-app/node_modules/es-errors/uri.d.ts | 3 + nodejs-app/node_modules/es-errors/uri.js | 4 + nodejs-app/node_modules/escape-html/LICENSE | 24 + nodejs-app/node_modules/escape-html/Readme.md | 43 + nodejs-app/node_modules/escape-html/index.js | 78 + .../node_modules/escape-html/package.json | 24 + nodejs-app/node_modules/etag/HISTORY.md | 83 + nodejs-app/node_modules/etag/LICENSE | 22 + nodejs-app/node_modules/etag/README.md | 159 + nodejs-app/node_modules/etag/index.js | 131 + nodejs-app/node_modules/etag/package.json | 47 + nodejs-app/node_modules/express/History.md | 3615 +++++++ nodejs-app/node_modules/express/LICENSE | 24 + nodejs-app/node_modules/express/Readme.md | 166 + nodejs-app/node_modules/express/index.js | 11 + .../node_modules/express/lib/application.js | 661 ++ .../node_modules/express/lib/express.js | 116 + .../express/lib/middleware/init.js | 43 + .../express/lib/middleware/query.js | 47 + .../node_modules/express/lib/request.js | 525 + .../node_modules/express/lib/response.js | 1178 +++ .../node_modules/express/lib/router/index.js | 673 ++ .../node_modules/express/lib/router/layer.js | 181 + .../node_modules/express/lib/router/route.js | 230 + nodejs-app/node_modules/express/lib/utils.js | 303 + nodejs-app/node_modules/express/lib/view.js | 182 + nodejs-app/node_modules/express/package.json | 98 + .../node_modules/finalhandler/HISTORY.md | 195 + nodejs-app/node_modules/finalhandler/LICENSE | 22 + .../node_modules/finalhandler/README.md | 147 + .../node_modules/finalhandler/SECURITY.md | 25 + nodejs-app/node_modules/finalhandler/index.js | 336 + .../node_modules/finalhandler/package.json | 46 + nodejs-app/node_modules/forwarded/HISTORY.md | 21 + nodejs-app/node_modules/forwarded/LICENSE | 22 + nodejs-app/node_modules/forwarded/README.md | 57 + nodejs-app/node_modules/forwarded/index.js | 90 + .../node_modules/forwarded/package.json | 45 + nodejs-app/node_modules/fresh/HISTORY.md | 70 + nodejs-app/node_modules/fresh/LICENSE | 23 + nodejs-app/node_modules/fresh/README.md | 119 + nodejs-app/node_modules/fresh/index.js | 137 + nodejs-app/node_modules/fresh/package.json | 46 + .../node_modules/function-bind/.eslintrc | 21 + .../function-bind/.github/FUNDING.yml | 12 + .../function-bind/.github/SECURITY.md | 3 + nodejs-app/node_modules/function-bind/.nycrc | 13 + .../node_modules/function-bind/CHANGELOG.md | 136 + nodejs-app/node_modules/function-bind/LICENSE | 20 + .../node_modules/function-bind/README.md | 46 + .../function-bind/implementation.js | 84 + .../node_modules/function-bind/index.js | 5 + .../node_modules/function-bind/package.json | 87 + .../node_modules/function-bind/test/.eslintrc | 9 + .../node_modules/function-bind/test/index.js | 252 + .../node_modules/get-intrinsic/.eslintrc | 38 + .../get-intrinsic/.github/FUNDING.yml | 12 + nodejs-app/node_modules/get-intrinsic/.nycrc | 9 + .../node_modules/get-intrinsic/CHANGELOG.md | 143 + nodejs-app/node_modules/get-intrinsic/LICENSE | 21 + .../node_modules/get-intrinsic/README.md | 71 + .../node_modules/get-intrinsic/index.js | 359 + .../node_modules/get-intrinsic/package.json | 93 + .../get-intrinsic/test/GetIntrinsic.js | 274 + nodejs-app/node_modules/gopd/.eslintrc | 16 + .../node_modules/gopd/.github/FUNDING.yml | 12 + nodejs-app/node_modules/gopd/CHANGELOG.md | 25 + nodejs-app/node_modules/gopd/LICENSE | 21 + nodejs-app/node_modules/gopd/README.md | 40 + nodejs-app/node_modules/gopd/index.js | 16 + nodejs-app/node_modules/gopd/package.json | 71 + nodejs-app/node_modules/gopd/test/index.js | 35 + .../has-property-descriptors/.eslintrc | 13 + .../.github/FUNDING.yml | 12 + .../has-property-descriptors/.nycrc | 9 + .../has-property-descriptors/CHANGELOG.md | 35 + .../has-property-descriptors/LICENSE | 21 + .../has-property-descriptors/README.md | 43 + .../has-property-descriptors/index.js | 22 + .../has-property-descriptors/package.json | 77 + .../has-property-descriptors/test/index.js | 57 + nodejs-app/node_modules/has-proto/.eslintrc | 5 + .../has-proto/.github/FUNDING.yml | 12 + .../node_modules/has-proto/CHANGELOG.md | 38 + nodejs-app/node_modules/has-proto/LICENSE | 21 + nodejs-app/node_modules/has-proto/README.md | 38 + nodejs-app/node_modules/has-proto/index.d.ts | 3 + nodejs-app/node_modules/has-proto/index.js | 15 + .../node_modules/has-proto/package.json | 78 + .../node_modules/has-proto/test/index.js | 19 + .../node_modules/has-proto/tsconfig.json | 49 + nodejs-app/node_modules/has-symbols/.eslintrc | 11 + .../has-symbols/.github/FUNDING.yml | 12 + nodejs-app/node_modules/has-symbols/.nycrc | 9 + .../node_modules/has-symbols/CHANGELOG.md | 75 + nodejs-app/node_modules/has-symbols/LICENSE | 21 + nodejs-app/node_modules/has-symbols/README.md | 46 + nodejs-app/node_modules/has-symbols/index.js | 13 + .../node_modules/has-symbols/package.json | 101 + nodejs-app/node_modules/has-symbols/shams.js | 42 + .../node_modules/has-symbols/test/index.js | 22 + .../has-symbols/test/shams/core-js.js | 28 + .../test/shams/get-own-property-symbols.js | 28 + .../node_modules/has-symbols/test/tests.js | 56 + nodejs-app/node_modules/hasown/.eslintrc | 5 + .../node_modules/hasown/.github/FUNDING.yml | 12 + nodejs-app/node_modules/hasown/.nycrc | 13 + nodejs-app/node_modules/hasown/CHANGELOG.md | 40 + nodejs-app/node_modules/hasown/LICENSE | 21 + nodejs-app/node_modules/hasown/README.md | 40 + nodejs-app/node_modules/hasown/index.d.ts | 3 + nodejs-app/node_modules/hasown/index.js | 8 + nodejs-app/node_modules/hasown/package.json | 92 + nodejs-app/node_modules/hasown/tsconfig.json | 6 + .../node_modules/http-errors/HISTORY.md | 180 + nodejs-app/node_modules/http-errors/LICENSE | 23 + nodejs-app/node_modules/http-errors/README.md | 169 + nodejs-app/node_modules/http-errors/index.js | 289 + .../node_modules/http-errors/package.json | 50 + .../node_modules/iconv-lite/Changelog.md | 162 + nodejs-app/node_modules/iconv-lite/LICENSE | 21 + nodejs-app/node_modules/iconv-lite/README.md | 156 + .../iconv-lite/encodings/dbcs-codec.js | 555 ++ .../iconv-lite/encodings/dbcs-data.js | 176 + .../iconv-lite/encodings/index.js | 22 + .../iconv-lite/encodings/internal.js | 188 + .../iconv-lite/encodings/sbcs-codec.js | 72 + .../encodings/sbcs-data-generated.js | 451 + .../iconv-lite/encodings/sbcs-data.js | 174 + .../encodings/tables/big5-added.json | 122 + .../iconv-lite/encodings/tables/cp936.json | 264 + .../iconv-lite/encodings/tables/cp949.json | 273 + .../iconv-lite/encodings/tables/cp950.json | 177 + .../iconv-lite/encodings/tables/eucjp.json | 182 + .../encodings/tables/gb18030-ranges.json | 1 + .../encodings/tables/gbk-added.json | 55 + .../iconv-lite/encodings/tables/shiftjis.json | 125 + .../iconv-lite/encodings/utf16.js | 177 + .../node_modules/iconv-lite/encodings/utf7.js | 290 + .../iconv-lite/lib/bom-handling.js | 52 + .../iconv-lite/lib/extend-node.js | 217 + .../node_modules/iconv-lite/lib/index.d.ts | 24 + .../node_modules/iconv-lite/lib/index.js | 153 + .../node_modules/iconv-lite/lib/streams.js | 121 + .../node_modules/iconv-lite/package.json | 46 + nodejs-app/node_modules/inherits/LICENSE | 16 + nodejs-app/node_modules/inherits/README.md | 42 + nodejs-app/node_modules/inherits/inherits.js | 9 + .../node_modules/inherits/inherits_browser.js | 27 + nodejs-app/node_modules/inherits/package.json | 29 + nodejs-app/node_modules/ipaddr.js/LICENSE | 19 + nodejs-app/node_modules/ipaddr.js/README.md | 233 + .../node_modules/ipaddr.js/ipaddr.min.js | 1 + .../node_modules/ipaddr.js/lib/ipaddr.js | 673 ++ .../node_modules/ipaddr.js/lib/ipaddr.js.d.ts | 68 + .../node_modules/ipaddr.js/package.json | 35 + nodejs-app/node_modules/isarray/.npmignore | 1 + nodejs-app/node_modules/isarray/.travis.yml | 4 + nodejs-app/node_modules/isarray/Makefile | 6 + nodejs-app/node_modules/isarray/README.md | 60 + .../node_modules/isarray/component.json | 19 + nodejs-app/node_modules/isarray/index.js | 5 + nodejs-app/node_modules/isarray/package.json | 45 + nodejs-app/node_modules/isarray/test.js | 20 + .../node_modules/media-typer/HISTORY.md | 22 + nodejs-app/node_modules/media-typer/LICENSE | 22 + nodejs-app/node_modules/media-typer/README.md | 81 + nodejs-app/node_modules/media-typer/index.js | 270 + .../node_modules/media-typer/package.json | 26 + .../node_modules/merge-descriptors/HISTORY.md | 21 + .../node_modules/merge-descriptors/LICENSE | 23 + .../node_modules/merge-descriptors/README.md | 48 + .../node_modules/merge-descriptors/index.js | 60 + .../merge-descriptors/package.json | 32 + nodejs-app/node_modules/methods/HISTORY.md | 29 + nodejs-app/node_modules/methods/LICENSE | 24 + nodejs-app/node_modules/methods/README.md | 51 + nodejs-app/node_modules/methods/index.js | 69 + nodejs-app/node_modules/methods/package.json | 36 + nodejs-app/node_modules/mime-db/HISTORY.md | 507 + nodejs-app/node_modules/mime-db/LICENSE | 23 + nodejs-app/node_modules/mime-db/README.md | 100 + nodejs-app/node_modules/mime-db/db.json | 8519 +++++++++++++++++ nodejs-app/node_modules/mime-db/index.js | 12 + nodejs-app/node_modules/mime-db/package.json | 60 + nodejs-app/node_modules/mime-types/HISTORY.md | 397 + nodejs-app/node_modules/mime-types/LICENSE | 23 + nodejs-app/node_modules/mime-types/README.md | 113 + nodejs-app/node_modules/mime-types/index.js | 188 + .../node_modules/mime-types/package.json | 44 + nodejs-app/node_modules/mime/.npmignore | 0 nodejs-app/node_modules/mime/CHANGELOG.md | 164 + nodejs-app/node_modules/mime/LICENSE | 21 + nodejs-app/node_modules/mime/README.md | 90 + nodejs-app/node_modules/mime/cli.js | 8 + nodejs-app/node_modules/mime/mime.js | 108 + nodejs-app/node_modules/mime/package.json | 44 + nodejs-app/node_modules/mime/src/build.js | 53 + nodejs-app/node_modules/mime/src/test.js | 60 + nodejs-app/node_modules/mime/types.json | 1 + nodejs-app/node_modules/ms/index.js | 152 + nodejs-app/node_modules/ms/license.md | 21 + nodejs-app/node_modules/ms/package.json | 37 + nodejs-app/node_modules/ms/readme.md | 51 + nodejs-app/node_modules/mysql/Changes.md | 569 ++ nodejs-app/node_modules/mysql/License | 19 + nodejs-app/node_modules/mysql/Readme.md | 1548 +++ nodejs-app/node_modules/mysql/index.js | 161 + .../node_modules/mysql/lib/Connection.js | 529 + .../mysql/lib/ConnectionConfig.js | 209 + nodejs-app/node_modules/mysql/lib/Pool.js | 294 + .../node_modules/mysql/lib/PoolCluster.js | 288 + .../node_modules/mysql/lib/PoolConfig.js | 32 + .../node_modules/mysql/lib/PoolConnection.js | 65 + .../node_modules/mysql/lib/PoolNamespace.js | 136 + .../node_modules/mysql/lib/PoolSelector.js | 31 + .../node_modules/mysql/lib/protocol/Auth.js | 168 + .../mysql/lib/protocol/BufferList.js | 25 + .../mysql/lib/protocol/PacketHeader.js | 5 + .../mysql/lib/protocol/PacketWriter.js | 211 + .../node_modules/mysql/lib/protocol/Parser.js | 491 + .../mysql/lib/protocol/Protocol.js | 463 + .../mysql/lib/protocol/ResultSet.js | 7 + .../mysql/lib/protocol/SqlString.js | 1 + .../node_modules/mysql/lib/protocol/Timer.js | 33 + .../mysql/lib/protocol/constants/charsets.js | 262 + .../mysql/lib/protocol/constants/client.js | 26 + .../mysql/lib/protocol/constants/errors.js | 2476 +++++ .../lib/protocol/constants/field_flags.js | 18 + .../lib/protocol/constants/server_status.js | 39 + .../lib/protocol/constants/ssl_profiles.js | 1480 +++ .../mysql/lib/protocol/constants/types.js | 72 + .../packets/AuthSwitchRequestPacket.js | 20 + .../packets/AuthSwitchResponsePacket.js | 14 + .../packets/ClientAuthenticationPacket.js | 54 + .../protocol/packets/ComChangeUserPacket.js | 26 + .../lib/protocol/packets/ComPingPacket.js | 12 + .../lib/protocol/packets/ComQueryPacket.js | 15 + .../lib/protocol/packets/ComQuitPacket.js | 12 + .../protocol/packets/ComStatisticsPacket.js | 12 + .../mysql/lib/protocol/packets/EmptyPacket.js | 9 + .../mysql/lib/protocol/packets/EofPacket.js | 25 + .../mysql/lib/protocol/packets/ErrorPacket.js | 35 + .../mysql/lib/protocol/packets/Field.js | 26 + .../mysql/lib/protocol/packets/FieldPacket.js | 93 + .../packets/HandshakeInitializationPacket.js | 103 + .../protocol/packets/LocalDataFilePacket.js | 15 + .../packets/LocalInfileRequestPacket.js | 21 + .../mysql/lib/protocol/packets/OkPacket.js | 44 + .../lib/protocol/packets/OldPasswordPacket.js | 14 + .../protocol/packets/ResultSetHeaderPacket.js | 14 + .../lib/protocol/packets/RowDataPacket.js | 130 + .../lib/protocol/packets/SSLRequestPacket.js | 27 + .../lib/protocol/packets/StatisticsPacket.js | 20 + .../protocol/packets/UseOldPasswordPacket.js | 14 + .../mysql/lib/protocol/packets/index.js | 23 + .../lib/protocol/sequences/ChangeUser.js | 67 + .../mysql/lib/protocol/sequences/Handshake.js | 126 + .../mysql/lib/protocol/sequences/Ping.js | 19 + .../mysql/lib/protocol/sequences/Query.js | 228 + .../mysql/lib/protocol/sequences/Quit.js | 40 + .../mysql/lib/protocol/sequences/Sequence.js | 125 + .../lib/protocol/sequences/Statistics.js | 30 + .../mysql/lib/protocol/sequences/index.js | 7 + .../mysql/node_modules/safe-buffer/LICENSE | 21 + .../mysql/node_modules/safe-buffer/README.md | 584 ++ .../mysql/node_modules/safe-buffer/index.d.ts | 187 + .../mysql/node_modules/safe-buffer/index.js | 62 + .../node_modules/safe-buffer/package.json | 37 + nodejs-app/node_modules/mysql/package.json | 46 + nodejs-app/node_modules/negotiator/HISTORY.md | 108 + nodejs-app/node_modules/negotiator/LICENSE | 24 + nodejs-app/node_modules/negotiator/README.md | 203 + nodejs-app/node_modules/negotiator/index.js | 82 + .../node_modules/negotiator/lib/charset.js | 169 + .../node_modules/negotiator/lib/encoding.js | 184 + .../node_modules/negotiator/lib/language.js | 179 + .../node_modules/negotiator/lib/mediaType.js | 294 + .../node_modules/negotiator/package.json | 42 + .../node_modules/object-inspect/.eslintrc | 53 + .../object-inspect/.github/FUNDING.yml | 12 + nodejs-app/node_modules/object-inspect/.nycrc | 13 + .../node_modules/object-inspect/CHANGELOG.md | 404 + .../node_modules/object-inspect/LICENSE | 21 + .../object-inspect/example/all.js | 23 + .../object-inspect/example/circular.js | 6 + .../node_modules/object-inspect/example/fn.js | 5 + .../object-inspect/example/inspect.js | 10 + .../node_modules/object-inspect/index.js | 527 + .../object-inspect/package-support.json | 20 + .../node_modules/object-inspect/package.json | 104 + .../object-inspect/readme.markdown | 84 + .../object-inspect/test-core-js.js | 26 + .../object-inspect/test/bigint.js | 58 + .../object-inspect/test/browser/dom.js | 15 + .../object-inspect/test/circular.js | 16 + .../node_modules/object-inspect/test/deep.js | 12 + .../object-inspect/test/element.js | 53 + .../node_modules/object-inspect/test/err.js | 48 + .../node_modules/object-inspect/test/fakes.js | 29 + .../node_modules/object-inspect/test/fn.js | 76 + .../object-inspect/test/global.js | 17 + .../node_modules/object-inspect/test/has.js | 15 + .../node_modules/object-inspect/test/holes.js | 15 + .../object-inspect/test/indent-option.js | 271 + .../object-inspect/test/inspect.js | 139 + .../object-inspect/test/lowbyte.js | 12 + .../object-inspect/test/number.js | 58 + .../object-inspect/test/quoteStyle.js | 17 + .../object-inspect/test/toStringTag.js | 40 + .../node_modules/object-inspect/test/undef.js | 12 + .../object-inspect/test/values.js | 211 + .../object-inspect/util.inspect.js | 1 + .../node_modules/on-finished/HISTORY.md | 98 + nodejs-app/node_modules/on-finished/LICENSE | 23 + nodejs-app/node_modules/on-finished/README.md | 162 + nodejs-app/node_modules/on-finished/index.js | 234 + .../node_modules/on-finished/package.json | 39 + nodejs-app/node_modules/parseurl/HISTORY.md | 58 + nodejs-app/node_modules/parseurl/LICENSE | 24 + nodejs-app/node_modules/parseurl/README.md | 133 + nodejs-app/node_modules/parseurl/index.js | 158 + nodejs-app/node_modules/parseurl/package.json | 40 + .../node_modules/path-to-regexp/History.md | 36 + .../node_modules/path-to-regexp/LICENSE | 21 + .../node_modules/path-to-regexp/Readme.md | 35 + .../node_modules/path-to-regexp/index.js | 129 + .../node_modules/path-to-regexp/package.json | 30 + .../process-nextick-args/index.js | 45 + .../process-nextick-args/license.md | 19 + .../process-nextick-args/package.json | 25 + .../process-nextick-args/readme.md | 18 + nodejs-app/node_modules/proxy-addr/HISTORY.md | 161 + nodejs-app/node_modules/proxy-addr/LICENSE | 22 + nodejs-app/node_modules/proxy-addr/README.md | 139 + nodejs-app/node_modules/proxy-addr/index.js | 327 + .../node_modules/proxy-addr/package.json | 47 + nodejs-app/node_modules/qs/.editorconfig | 43 + nodejs-app/node_modules/qs/.eslintrc | 38 + .../node_modules/qs/.github/FUNDING.yml | 12 + nodejs-app/node_modules/qs/.nycrc | 13 + nodejs-app/node_modules/qs/CHANGELOG.md | 546 ++ nodejs-app/node_modules/qs/LICENSE.md | 29 + nodejs-app/node_modules/qs/README.md | 625 ++ nodejs-app/node_modules/qs/dist/qs.js | 2054 ++++ nodejs-app/node_modules/qs/lib/formats.js | 23 + nodejs-app/node_modules/qs/lib/index.js | 11 + nodejs-app/node_modules/qs/lib/parse.js | 263 + nodejs-app/node_modules/qs/lib/stringify.js | 326 + nodejs-app/node_modules/qs/lib/utils.js | 252 + nodejs-app/node_modules/qs/package.json | 77 + nodejs-app/node_modules/qs/test/parse.js | 855 ++ nodejs-app/node_modules/qs/test/stringify.js | 909 ++ nodejs-app/node_modules/qs/test/utils.js | 136 + .../node_modules/range-parser/HISTORY.md | 56 + nodejs-app/node_modules/range-parser/LICENSE | 23 + .../node_modules/range-parser/README.md | 84 + nodejs-app/node_modules/range-parser/index.js | 162 + .../node_modules/range-parser/package.json | 44 + nodejs-app/node_modules/raw-body/HISTORY.md | 308 + nodejs-app/node_modules/raw-body/LICENSE | 22 + nodejs-app/node_modules/raw-body/README.md | 223 + nodejs-app/node_modules/raw-body/SECURITY.md | 24 + nodejs-app/node_modules/raw-body/index.d.ts | 87 + nodejs-app/node_modules/raw-body/index.js | 336 + nodejs-app/node_modules/raw-body/package.json | 49 + .../node_modules/readable-stream/.travis.yml | 34 + .../readable-stream/CONTRIBUTING.md | 38 + .../readable-stream/GOVERNANCE.md | 136 + .../node_modules/readable-stream/LICENSE | 47 + .../node_modules/readable-stream/README.md | 58 + .../doc/wg-meetings/2015-01-30.md | 60 + .../readable-stream/duplex-browser.js | 1 + .../node_modules/readable-stream/duplex.js | 1 + .../readable-stream/lib/_stream_duplex.js | 131 + .../lib/_stream_passthrough.js | 47 + .../readable-stream/lib/_stream_readable.js | 1019 ++ .../readable-stream/lib/_stream_transform.js | 214 + .../readable-stream/lib/_stream_writable.js | 687 ++ .../lib/internal/streams/BufferList.js | 79 + .../lib/internal/streams/destroy.js | 74 + .../lib/internal/streams/stream-browser.js | 1 + .../lib/internal/streams/stream.js | 1 + .../node_modules/safe-buffer/LICENSE | 21 + .../node_modules/safe-buffer/README.md | 584 ++ .../node_modules/safe-buffer/index.d.ts | 187 + .../node_modules/safe-buffer/index.js | 62 + .../node_modules/safe-buffer/package.json | 37 + .../node_modules/readable-stream/package.json | 52 + .../readable-stream/passthrough.js | 1 + .../readable-stream/readable-browser.js | 7 + .../node_modules/readable-stream/readable.js | 19 + .../node_modules/readable-stream/transform.js | 1 + .../readable-stream/writable-browser.js | 1 + .../node_modules/readable-stream/writable.js | 8 + nodejs-app/node_modules/safe-buffer/LICENSE | 21 + nodejs-app/node_modules/safe-buffer/README.md | 584 ++ .../node_modules/safe-buffer/index.d.ts | 187 + nodejs-app/node_modules/safe-buffer/index.js | 65 + .../node_modules/safe-buffer/package.json | 51 + nodejs-app/node_modules/safer-buffer/LICENSE | 21 + .../safer-buffer/Porting-Buffer.md | 268 + .../node_modules/safer-buffer/Readme.md | 156 + .../node_modules/safer-buffer/dangerous.js | 58 + .../node_modules/safer-buffer/package.json | 34 + nodejs-app/node_modules/safer-buffer/safer.js | 77 + nodejs-app/node_modules/safer-buffer/tests.js | 406 + nodejs-app/node_modules/send/HISTORY.md | 521 + nodejs-app/node_modules/send/LICENSE | 23 + nodejs-app/node_modules/send/README.md | 327 + nodejs-app/node_modules/send/SECURITY.md | 24 + nodejs-app/node_modules/send/index.js | 1143 +++ .../send/node_modules/ms/index.js | 162 + .../send/node_modules/ms/license.md | 21 + .../send/node_modules/ms/package.json | 38 + .../send/node_modules/ms/readme.md | 59 + nodejs-app/node_modules/send/package.json | 62 + .../node_modules/serve-static/HISTORY.md | 471 + nodejs-app/node_modules/serve-static/LICENSE | 25 + .../node_modules/serve-static/README.md | 257 + nodejs-app/node_modules/serve-static/index.js | 210 + .../node_modules/serve-static/package.json | 42 + .../set-function-length/.eslintrc | 27 + .../set-function-length/.github/FUNDING.yml | 12 + .../node_modules/set-function-length/.nycrc | 13 + .../set-function-length/CHANGELOG.md | 70 + .../node_modules/set-function-length/LICENSE | 21 + .../set-function-length/README.md | 56 + .../node_modules/set-function-length/env.d.ts | 9 + .../node_modules/set-function-length/env.js | 25 + .../set-function-length/index.d.ts | 7 + .../node_modules/set-function-length/index.js | 42 + .../set-function-length/package.json | 102 + .../set-function-length/tsconfig.json | 9 + .../node_modules/setprototypeof/LICENSE | 13 + .../node_modules/setprototypeof/README.md | 31 + .../node_modules/setprototypeof/index.d.ts | 2 + .../node_modules/setprototypeof/index.js | 17 + .../node_modules/setprototypeof/package.json | 38 + .../node_modules/setprototypeof/test/index.js | 24 + .../node_modules/side-channel/.editorconfig | 9 + .../node_modules/side-channel/.eslintrc | 11 + .../side-channel/.github/FUNDING.yml | 12 + nodejs-app/node_modules/side-channel/.nycrc | 13 + .../node_modules/side-channel/CHANGELOG.md | 95 + nodejs-app/node_modules/side-channel/LICENSE | 21 + .../node_modules/side-channel/README.md | 2 + .../node_modules/side-channel/index.d.ts | 27 + nodejs-app/node_modules/side-channel/index.js | 129 + .../node_modules/side-channel/package.json | 84 + .../node_modules/side-channel/test/index.js | 83 + .../node_modules/side-channel/tsconfig.json | 50 + nodejs-app/node_modules/sqlstring/HISTORY.md | 43 + nodejs-app/node_modules/sqlstring/LICENSE | 19 + nodejs-app/node_modules/sqlstring/README.md | 206 + nodejs-app/node_modules/sqlstring/index.js | 1 + .../node_modules/sqlstring/lib/SqlString.js | 237 + .../node_modules/sqlstring/package.json | 47 + nodejs-app/node_modules/statuses/HISTORY.md | 82 + nodejs-app/node_modules/statuses/LICENSE | 23 + nodejs-app/node_modules/statuses/README.md | 136 + nodejs-app/node_modules/statuses/codes.json | 65 + nodejs-app/node_modules/statuses/index.js | 146 + nodejs-app/node_modules/statuses/package.json | 49 + .../node_modules/string_decoder/.travis.yml | 50 + .../node_modules/string_decoder/LICENSE | 48 + .../node_modules/string_decoder/README.md | 47 + .../string_decoder/lib/string_decoder.js | 296 + .../node_modules/safe-buffer/LICENSE | 21 + .../node_modules/safe-buffer/README.md | 584 ++ .../node_modules/safe-buffer/index.d.ts | 187 + .../node_modules/safe-buffer/index.js | 62 + .../node_modules/safe-buffer/package.json | 37 + .../node_modules/string_decoder/package.json | 31 + .../node_modules/toidentifier/HISTORY.md | 9 + nodejs-app/node_modules/toidentifier/LICENSE | 21 + .../node_modules/toidentifier/README.md | 61 + nodejs-app/node_modules/toidentifier/index.js | 32 + .../node_modules/toidentifier/package.json | 38 + nodejs-app/node_modules/type-is/HISTORY.md | 259 + nodejs-app/node_modules/type-is/LICENSE | 23 + nodejs-app/node_modules/type-is/README.md | 170 + nodejs-app/node_modules/type-is/index.js | 266 + nodejs-app/node_modules/type-is/package.json | 45 + nodejs-app/node_modules/unpipe/HISTORY.md | 4 + nodejs-app/node_modules/unpipe/LICENSE | 22 + nodejs-app/node_modules/unpipe/README.md | 43 + nodejs-app/node_modules/unpipe/index.js | 69 + nodejs-app/node_modules/unpipe/package.json | 27 + .../node_modules/util-deprecate/History.md | 16 + .../node_modules/util-deprecate/LICENSE | 24 + .../node_modules/util-deprecate/README.md | 53 + .../node_modules/util-deprecate/browser.js | 67 + .../node_modules/util-deprecate/node.js | 6 + .../node_modules/util-deprecate/package.json | 27 + .../node_modules/utils-merge/.npmignore | 9 + nodejs-app/node_modules/utils-merge/LICENSE | 20 + nodejs-app/node_modules/utils-merge/README.md | 34 + nodejs-app/node_modules/utils-merge/index.js | 23 + .../node_modules/utils-merge/package.json | 40 + nodejs-app/node_modules/vary/HISTORY.md | 39 + nodejs-app/node_modules/vary/LICENSE | 22 + nodejs-app/node_modules/vary/README.md | 101 + nodejs-app/node_modules/vary/index.js | 149 + nodejs-app/node_modules/vary/package.json | 43 + nodejs-app/package-lock.json | 785 ++ nodejs-app/package.json | 16 + 662 files changed, 94230 insertions(+), 4 deletions(-) create mode 100644 nodejs-app/Dockerfile create mode 100644 nodejs-app/index.js create mode 120000 nodejs-app/node_modules/.bin/mime create mode 100644 nodejs-app/node_modules/.package-lock.json create mode 100644 nodejs-app/node_modules/accepts/HISTORY.md create mode 100644 nodejs-app/node_modules/accepts/LICENSE create mode 100644 nodejs-app/node_modules/accepts/README.md create mode 100644 nodejs-app/node_modules/accepts/index.js create mode 100644 nodejs-app/node_modules/accepts/package.json create mode 100644 nodejs-app/node_modules/array-flatten/LICENSE create mode 100644 nodejs-app/node_modules/array-flatten/README.md create mode 100644 nodejs-app/node_modules/array-flatten/array-flatten.js create mode 100644 nodejs-app/node_modules/array-flatten/package.json create mode 100644 nodejs-app/node_modules/bignumber.js/CHANGELOG.md create mode 100644 nodejs-app/node_modules/bignumber.js/LICENCE create mode 100644 nodejs-app/node_modules/bignumber.js/README.md create mode 100644 nodejs-app/node_modules/bignumber.js/bignumber.d.ts create mode 100644 nodejs-app/node_modules/bignumber.js/bignumber.js create mode 100644 nodejs-app/node_modules/bignumber.js/bignumber.min.js create mode 100644 nodejs-app/node_modules/bignumber.js/bignumber.min.js.map create mode 100644 nodejs-app/node_modules/bignumber.js/bignumber.mjs create mode 100644 nodejs-app/node_modules/bignumber.js/doc/API.html create mode 100644 nodejs-app/node_modules/bignumber.js/package.json create mode 100644 nodejs-app/node_modules/body-parser/HISTORY.md create mode 100644 nodejs-app/node_modules/body-parser/LICENSE create mode 100644 nodejs-app/node_modules/body-parser/README.md create mode 100644 nodejs-app/node_modules/body-parser/SECURITY.md create mode 100644 nodejs-app/node_modules/body-parser/index.js create mode 100644 nodejs-app/node_modules/body-parser/lib/read.js create mode 100644 nodejs-app/node_modules/body-parser/lib/types/json.js create mode 100644 nodejs-app/node_modules/body-parser/lib/types/raw.js create mode 100644 nodejs-app/node_modules/body-parser/lib/types/text.js create mode 100644 nodejs-app/node_modules/body-parser/lib/types/urlencoded.js create mode 100644 nodejs-app/node_modules/body-parser/package.json create mode 100644 nodejs-app/node_modules/bytes/History.md create mode 100644 nodejs-app/node_modules/bytes/LICENSE create mode 100644 nodejs-app/node_modules/bytes/Readme.md create mode 100644 nodejs-app/node_modules/bytes/index.js create mode 100644 nodejs-app/node_modules/bytes/package.json create mode 100644 nodejs-app/node_modules/call-bind/.eslintignore create mode 100644 nodejs-app/node_modules/call-bind/.eslintrc create mode 100644 nodejs-app/node_modules/call-bind/.github/FUNDING.yml create mode 100644 nodejs-app/node_modules/call-bind/.nycrc create mode 100644 nodejs-app/node_modules/call-bind/CHANGELOG.md create mode 100644 nodejs-app/node_modules/call-bind/LICENSE create mode 100644 nodejs-app/node_modules/call-bind/README.md create mode 100644 nodejs-app/node_modules/call-bind/callBound.js create mode 100644 nodejs-app/node_modules/call-bind/index.js create mode 100644 nodejs-app/node_modules/call-bind/package.json create mode 100644 nodejs-app/node_modules/call-bind/test/callBound.js create mode 100644 nodejs-app/node_modules/call-bind/test/index.js create mode 100644 nodejs-app/node_modules/content-disposition/HISTORY.md create mode 100644 nodejs-app/node_modules/content-disposition/LICENSE create mode 100644 nodejs-app/node_modules/content-disposition/README.md create mode 100644 nodejs-app/node_modules/content-disposition/index.js create mode 100644 nodejs-app/node_modules/content-disposition/package.json create mode 100644 nodejs-app/node_modules/content-type/HISTORY.md create mode 100644 nodejs-app/node_modules/content-type/LICENSE create mode 100644 nodejs-app/node_modules/content-type/README.md create mode 100644 nodejs-app/node_modules/content-type/index.js create mode 100644 nodejs-app/node_modules/content-type/package.json create mode 100644 nodejs-app/node_modules/cookie-signature/.npmignore create mode 100644 nodejs-app/node_modules/cookie-signature/History.md create mode 100644 nodejs-app/node_modules/cookie-signature/Readme.md create mode 100644 nodejs-app/node_modules/cookie-signature/index.js create mode 100644 nodejs-app/node_modules/cookie-signature/package.json create mode 100644 nodejs-app/node_modules/cookie/HISTORY.md create mode 100644 nodejs-app/node_modules/cookie/LICENSE create mode 100644 nodejs-app/node_modules/cookie/README.md create mode 100644 nodejs-app/node_modules/cookie/SECURITY.md create mode 100644 nodejs-app/node_modules/cookie/index.js create mode 100644 nodejs-app/node_modules/cookie/package.json create mode 100644 nodejs-app/node_modules/core-util-is/LICENSE create mode 100644 nodejs-app/node_modules/core-util-is/README.md create mode 100644 nodejs-app/node_modules/core-util-is/lib/util.js create mode 100644 nodejs-app/node_modules/core-util-is/package.json create mode 100644 nodejs-app/node_modules/debug/.coveralls.yml create mode 100644 nodejs-app/node_modules/debug/.eslintrc create mode 100644 nodejs-app/node_modules/debug/.npmignore create mode 100644 nodejs-app/node_modules/debug/.travis.yml create mode 100644 nodejs-app/node_modules/debug/CHANGELOG.md create mode 100644 nodejs-app/node_modules/debug/LICENSE create mode 100644 nodejs-app/node_modules/debug/Makefile create mode 100644 nodejs-app/node_modules/debug/README.md create mode 100644 nodejs-app/node_modules/debug/component.json create mode 100644 nodejs-app/node_modules/debug/karma.conf.js create mode 100644 nodejs-app/node_modules/debug/node.js create mode 100644 nodejs-app/node_modules/debug/package.json create mode 100644 nodejs-app/node_modules/debug/src/browser.js create mode 100644 nodejs-app/node_modules/debug/src/debug.js create mode 100644 nodejs-app/node_modules/debug/src/index.js create mode 100644 nodejs-app/node_modules/debug/src/inspector-log.js create mode 100644 nodejs-app/node_modules/debug/src/node.js create mode 100644 nodejs-app/node_modules/define-data-property/.eslintrc create mode 100644 nodejs-app/node_modules/define-data-property/.github/FUNDING.yml create mode 100644 nodejs-app/node_modules/define-data-property/.nycrc create mode 100644 nodejs-app/node_modules/define-data-property/CHANGELOG.md create mode 100644 nodejs-app/node_modules/define-data-property/LICENSE create mode 100644 nodejs-app/node_modules/define-data-property/README.md create mode 100644 nodejs-app/node_modules/define-data-property/index.d.ts create mode 100644 nodejs-app/node_modules/define-data-property/index.js create mode 100644 nodejs-app/node_modules/define-data-property/package.json create mode 100644 nodejs-app/node_modules/define-data-property/test/index.js create mode 100644 nodejs-app/node_modules/define-data-property/tsconfig.json create mode 100644 nodejs-app/node_modules/depd/History.md create mode 100644 nodejs-app/node_modules/depd/LICENSE create mode 100644 nodejs-app/node_modules/depd/Readme.md create mode 100644 nodejs-app/node_modules/depd/index.js create mode 100644 nodejs-app/node_modules/depd/lib/browser/index.js create mode 100644 nodejs-app/node_modules/depd/package.json create mode 100644 nodejs-app/node_modules/destroy/LICENSE create mode 100644 nodejs-app/node_modules/destroy/README.md create mode 100644 nodejs-app/node_modules/destroy/index.js create mode 100644 nodejs-app/node_modules/destroy/package.json create mode 100644 nodejs-app/node_modules/ee-first/LICENSE create mode 100644 nodejs-app/node_modules/ee-first/README.md create mode 100644 nodejs-app/node_modules/ee-first/index.js create mode 100644 nodejs-app/node_modules/ee-first/package.json create mode 100644 nodejs-app/node_modules/encodeurl/HISTORY.md create mode 100644 nodejs-app/node_modules/encodeurl/LICENSE create mode 100644 nodejs-app/node_modules/encodeurl/README.md create mode 100644 nodejs-app/node_modules/encodeurl/index.js create mode 100644 nodejs-app/node_modules/encodeurl/package.json create mode 100644 nodejs-app/node_modules/es-define-property/.eslintrc create mode 100644 nodejs-app/node_modules/es-define-property/.github/FUNDING.yml create mode 100644 nodejs-app/node_modules/es-define-property/.nycrc create mode 100644 nodejs-app/node_modules/es-define-property/CHANGELOG.md create mode 100644 nodejs-app/node_modules/es-define-property/LICENSE create mode 100644 nodejs-app/node_modules/es-define-property/README.md create mode 100644 nodejs-app/node_modules/es-define-property/index.d.ts create mode 100644 nodejs-app/node_modules/es-define-property/index.js create mode 100644 nodejs-app/node_modules/es-define-property/package.json create mode 100644 nodejs-app/node_modules/es-define-property/test/index.js create mode 100644 nodejs-app/node_modules/es-define-property/tsconfig.json create mode 100644 nodejs-app/node_modules/es-errors/.eslintrc create mode 100644 nodejs-app/node_modules/es-errors/.github/FUNDING.yml create mode 100644 nodejs-app/node_modules/es-errors/CHANGELOG.md create mode 100644 nodejs-app/node_modules/es-errors/LICENSE create mode 100644 nodejs-app/node_modules/es-errors/README.md create mode 100644 nodejs-app/node_modules/es-errors/eval.d.ts create mode 100644 nodejs-app/node_modules/es-errors/eval.js create mode 100644 nodejs-app/node_modules/es-errors/index.d.ts create mode 100644 nodejs-app/node_modules/es-errors/index.js create mode 100644 nodejs-app/node_modules/es-errors/package.json create mode 100644 nodejs-app/node_modules/es-errors/range.d.ts create mode 100644 nodejs-app/node_modules/es-errors/range.js create mode 100644 nodejs-app/node_modules/es-errors/ref.d.ts create mode 100644 nodejs-app/node_modules/es-errors/ref.js create mode 100644 nodejs-app/node_modules/es-errors/syntax.d.ts create mode 100644 nodejs-app/node_modules/es-errors/syntax.js create mode 100644 nodejs-app/node_modules/es-errors/test/index.js create mode 100644 nodejs-app/node_modules/es-errors/tsconfig.json create mode 100644 nodejs-app/node_modules/es-errors/type.d.ts create mode 100644 nodejs-app/node_modules/es-errors/type.js create mode 100644 nodejs-app/node_modules/es-errors/uri.d.ts create mode 100644 nodejs-app/node_modules/es-errors/uri.js create mode 100644 nodejs-app/node_modules/escape-html/LICENSE create mode 100644 nodejs-app/node_modules/escape-html/Readme.md create mode 100644 nodejs-app/node_modules/escape-html/index.js create mode 100644 nodejs-app/node_modules/escape-html/package.json create mode 100644 nodejs-app/node_modules/etag/HISTORY.md create mode 100644 nodejs-app/node_modules/etag/LICENSE create mode 100644 nodejs-app/node_modules/etag/README.md create mode 100644 nodejs-app/node_modules/etag/index.js create mode 100644 nodejs-app/node_modules/etag/package.json create mode 100644 nodejs-app/node_modules/express/History.md create mode 100644 nodejs-app/node_modules/express/LICENSE create mode 100644 nodejs-app/node_modules/express/Readme.md create mode 100644 nodejs-app/node_modules/express/index.js create mode 100644 nodejs-app/node_modules/express/lib/application.js create mode 100644 nodejs-app/node_modules/express/lib/express.js create mode 100644 nodejs-app/node_modules/express/lib/middleware/init.js create mode 100644 nodejs-app/node_modules/express/lib/middleware/query.js create mode 100644 nodejs-app/node_modules/express/lib/request.js create mode 100644 nodejs-app/node_modules/express/lib/response.js create mode 100644 nodejs-app/node_modules/express/lib/router/index.js create mode 100644 nodejs-app/node_modules/express/lib/router/layer.js create mode 100644 nodejs-app/node_modules/express/lib/router/route.js create mode 100644 nodejs-app/node_modules/express/lib/utils.js create mode 100644 nodejs-app/node_modules/express/lib/view.js create mode 100644 nodejs-app/node_modules/express/package.json create mode 100644 nodejs-app/node_modules/finalhandler/HISTORY.md create mode 100644 nodejs-app/node_modules/finalhandler/LICENSE create mode 100644 nodejs-app/node_modules/finalhandler/README.md create mode 100644 nodejs-app/node_modules/finalhandler/SECURITY.md create mode 100644 nodejs-app/node_modules/finalhandler/index.js create mode 100644 nodejs-app/node_modules/finalhandler/package.json create mode 100644 nodejs-app/node_modules/forwarded/HISTORY.md create mode 100644 nodejs-app/node_modules/forwarded/LICENSE create mode 100644 nodejs-app/node_modules/forwarded/README.md create mode 100644 nodejs-app/node_modules/forwarded/index.js create mode 100644 nodejs-app/node_modules/forwarded/package.json create mode 100644 nodejs-app/node_modules/fresh/HISTORY.md create mode 100644 nodejs-app/node_modules/fresh/LICENSE create mode 100644 nodejs-app/node_modules/fresh/README.md create mode 100644 nodejs-app/node_modules/fresh/index.js create mode 100644 nodejs-app/node_modules/fresh/package.json create mode 100644 nodejs-app/node_modules/function-bind/.eslintrc create mode 100644 nodejs-app/node_modules/function-bind/.github/FUNDING.yml create mode 100644 nodejs-app/node_modules/function-bind/.github/SECURITY.md create mode 100644 nodejs-app/node_modules/function-bind/.nycrc create mode 100644 nodejs-app/node_modules/function-bind/CHANGELOG.md create mode 100644 nodejs-app/node_modules/function-bind/LICENSE create mode 100644 nodejs-app/node_modules/function-bind/README.md create mode 100644 nodejs-app/node_modules/function-bind/implementation.js create mode 100644 nodejs-app/node_modules/function-bind/index.js create mode 100644 nodejs-app/node_modules/function-bind/package.json create mode 100644 nodejs-app/node_modules/function-bind/test/.eslintrc create mode 100644 nodejs-app/node_modules/function-bind/test/index.js create mode 100644 nodejs-app/node_modules/get-intrinsic/.eslintrc create mode 100644 nodejs-app/node_modules/get-intrinsic/.github/FUNDING.yml create mode 100644 nodejs-app/node_modules/get-intrinsic/.nycrc create mode 100644 nodejs-app/node_modules/get-intrinsic/CHANGELOG.md create mode 100644 nodejs-app/node_modules/get-intrinsic/LICENSE create mode 100644 nodejs-app/node_modules/get-intrinsic/README.md create mode 100644 nodejs-app/node_modules/get-intrinsic/index.js create mode 100644 nodejs-app/node_modules/get-intrinsic/package.json create mode 100644 nodejs-app/node_modules/get-intrinsic/test/GetIntrinsic.js create mode 100644 nodejs-app/node_modules/gopd/.eslintrc create mode 100644 nodejs-app/node_modules/gopd/.github/FUNDING.yml create mode 100644 nodejs-app/node_modules/gopd/CHANGELOG.md create mode 100644 nodejs-app/node_modules/gopd/LICENSE create mode 100644 nodejs-app/node_modules/gopd/README.md create mode 100644 nodejs-app/node_modules/gopd/index.js create mode 100644 nodejs-app/node_modules/gopd/package.json create mode 100644 nodejs-app/node_modules/gopd/test/index.js create mode 100644 nodejs-app/node_modules/has-property-descriptors/.eslintrc create mode 100644 nodejs-app/node_modules/has-property-descriptors/.github/FUNDING.yml create mode 100644 nodejs-app/node_modules/has-property-descriptors/.nycrc create mode 100644 nodejs-app/node_modules/has-property-descriptors/CHANGELOG.md create mode 100644 nodejs-app/node_modules/has-property-descriptors/LICENSE create mode 100644 nodejs-app/node_modules/has-property-descriptors/README.md create mode 100644 nodejs-app/node_modules/has-property-descriptors/index.js create mode 100644 nodejs-app/node_modules/has-property-descriptors/package.json create mode 100644 nodejs-app/node_modules/has-property-descriptors/test/index.js create mode 100644 nodejs-app/node_modules/has-proto/.eslintrc create mode 100644 nodejs-app/node_modules/has-proto/.github/FUNDING.yml create mode 100644 nodejs-app/node_modules/has-proto/CHANGELOG.md create mode 100644 nodejs-app/node_modules/has-proto/LICENSE create mode 100644 nodejs-app/node_modules/has-proto/README.md create mode 100644 nodejs-app/node_modules/has-proto/index.d.ts create mode 100644 nodejs-app/node_modules/has-proto/index.js create mode 100644 nodejs-app/node_modules/has-proto/package.json create mode 100644 nodejs-app/node_modules/has-proto/test/index.js create mode 100644 nodejs-app/node_modules/has-proto/tsconfig.json create mode 100644 nodejs-app/node_modules/has-symbols/.eslintrc create mode 100644 nodejs-app/node_modules/has-symbols/.github/FUNDING.yml create mode 100644 nodejs-app/node_modules/has-symbols/.nycrc create mode 100644 nodejs-app/node_modules/has-symbols/CHANGELOG.md create mode 100644 nodejs-app/node_modules/has-symbols/LICENSE create mode 100644 nodejs-app/node_modules/has-symbols/README.md create mode 100644 nodejs-app/node_modules/has-symbols/index.js create mode 100644 nodejs-app/node_modules/has-symbols/package.json create mode 100644 nodejs-app/node_modules/has-symbols/shams.js create mode 100644 nodejs-app/node_modules/has-symbols/test/index.js create mode 100644 nodejs-app/node_modules/has-symbols/test/shams/core-js.js create mode 100644 nodejs-app/node_modules/has-symbols/test/shams/get-own-property-symbols.js create mode 100644 nodejs-app/node_modules/has-symbols/test/tests.js create mode 100644 nodejs-app/node_modules/hasown/.eslintrc create mode 100644 nodejs-app/node_modules/hasown/.github/FUNDING.yml create mode 100644 nodejs-app/node_modules/hasown/.nycrc create mode 100644 nodejs-app/node_modules/hasown/CHANGELOG.md create mode 100644 nodejs-app/node_modules/hasown/LICENSE create mode 100644 nodejs-app/node_modules/hasown/README.md create mode 100644 nodejs-app/node_modules/hasown/index.d.ts create mode 100644 nodejs-app/node_modules/hasown/index.js create mode 100644 nodejs-app/node_modules/hasown/package.json create mode 100644 nodejs-app/node_modules/hasown/tsconfig.json create mode 100644 nodejs-app/node_modules/http-errors/HISTORY.md create mode 100644 nodejs-app/node_modules/http-errors/LICENSE create mode 100644 nodejs-app/node_modules/http-errors/README.md create mode 100644 nodejs-app/node_modules/http-errors/index.js create mode 100644 nodejs-app/node_modules/http-errors/package.json create mode 100644 nodejs-app/node_modules/iconv-lite/Changelog.md create mode 100644 nodejs-app/node_modules/iconv-lite/LICENSE create mode 100644 nodejs-app/node_modules/iconv-lite/README.md create mode 100644 nodejs-app/node_modules/iconv-lite/encodings/dbcs-codec.js create mode 100644 nodejs-app/node_modules/iconv-lite/encodings/dbcs-data.js create mode 100644 nodejs-app/node_modules/iconv-lite/encodings/index.js create mode 100644 nodejs-app/node_modules/iconv-lite/encodings/internal.js create mode 100644 nodejs-app/node_modules/iconv-lite/encodings/sbcs-codec.js create mode 100644 nodejs-app/node_modules/iconv-lite/encodings/sbcs-data-generated.js create mode 100644 nodejs-app/node_modules/iconv-lite/encodings/sbcs-data.js create mode 100644 nodejs-app/node_modules/iconv-lite/encodings/tables/big5-added.json create mode 100644 nodejs-app/node_modules/iconv-lite/encodings/tables/cp936.json create mode 100644 nodejs-app/node_modules/iconv-lite/encodings/tables/cp949.json create mode 100644 nodejs-app/node_modules/iconv-lite/encodings/tables/cp950.json create mode 100644 nodejs-app/node_modules/iconv-lite/encodings/tables/eucjp.json create mode 100644 nodejs-app/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json create mode 100644 nodejs-app/node_modules/iconv-lite/encodings/tables/gbk-added.json create mode 100644 nodejs-app/node_modules/iconv-lite/encodings/tables/shiftjis.json create mode 100644 nodejs-app/node_modules/iconv-lite/encodings/utf16.js create mode 100644 nodejs-app/node_modules/iconv-lite/encodings/utf7.js create mode 100644 nodejs-app/node_modules/iconv-lite/lib/bom-handling.js create mode 100644 nodejs-app/node_modules/iconv-lite/lib/extend-node.js create mode 100644 nodejs-app/node_modules/iconv-lite/lib/index.d.ts create mode 100644 nodejs-app/node_modules/iconv-lite/lib/index.js create mode 100644 nodejs-app/node_modules/iconv-lite/lib/streams.js create mode 100644 nodejs-app/node_modules/iconv-lite/package.json create mode 100644 nodejs-app/node_modules/inherits/LICENSE create mode 100644 nodejs-app/node_modules/inherits/README.md create mode 100644 nodejs-app/node_modules/inherits/inherits.js create mode 100644 nodejs-app/node_modules/inherits/inherits_browser.js create mode 100644 nodejs-app/node_modules/inherits/package.json create mode 100644 nodejs-app/node_modules/ipaddr.js/LICENSE create mode 100644 nodejs-app/node_modules/ipaddr.js/README.md create mode 100644 nodejs-app/node_modules/ipaddr.js/ipaddr.min.js create mode 100644 nodejs-app/node_modules/ipaddr.js/lib/ipaddr.js create mode 100644 nodejs-app/node_modules/ipaddr.js/lib/ipaddr.js.d.ts create mode 100644 nodejs-app/node_modules/ipaddr.js/package.json create mode 100644 nodejs-app/node_modules/isarray/.npmignore create mode 100644 nodejs-app/node_modules/isarray/.travis.yml create mode 100644 nodejs-app/node_modules/isarray/Makefile create mode 100644 nodejs-app/node_modules/isarray/README.md create mode 100644 nodejs-app/node_modules/isarray/component.json create mode 100644 nodejs-app/node_modules/isarray/index.js create mode 100644 nodejs-app/node_modules/isarray/package.json create mode 100644 nodejs-app/node_modules/isarray/test.js create mode 100644 nodejs-app/node_modules/media-typer/HISTORY.md create mode 100644 nodejs-app/node_modules/media-typer/LICENSE create mode 100644 nodejs-app/node_modules/media-typer/README.md create mode 100644 nodejs-app/node_modules/media-typer/index.js create mode 100644 nodejs-app/node_modules/media-typer/package.json create mode 100644 nodejs-app/node_modules/merge-descriptors/HISTORY.md create mode 100644 nodejs-app/node_modules/merge-descriptors/LICENSE create mode 100644 nodejs-app/node_modules/merge-descriptors/README.md create mode 100644 nodejs-app/node_modules/merge-descriptors/index.js create mode 100644 nodejs-app/node_modules/merge-descriptors/package.json create mode 100644 nodejs-app/node_modules/methods/HISTORY.md create mode 100644 nodejs-app/node_modules/methods/LICENSE create mode 100644 nodejs-app/node_modules/methods/README.md create mode 100644 nodejs-app/node_modules/methods/index.js create mode 100644 nodejs-app/node_modules/methods/package.json create mode 100644 nodejs-app/node_modules/mime-db/HISTORY.md create mode 100644 nodejs-app/node_modules/mime-db/LICENSE create mode 100644 nodejs-app/node_modules/mime-db/README.md create mode 100644 nodejs-app/node_modules/mime-db/db.json create mode 100644 nodejs-app/node_modules/mime-db/index.js create mode 100644 nodejs-app/node_modules/mime-db/package.json create mode 100644 nodejs-app/node_modules/mime-types/HISTORY.md create mode 100644 nodejs-app/node_modules/mime-types/LICENSE create mode 100644 nodejs-app/node_modules/mime-types/README.md create mode 100644 nodejs-app/node_modules/mime-types/index.js create mode 100644 nodejs-app/node_modules/mime-types/package.json create mode 100644 nodejs-app/node_modules/mime/.npmignore create mode 100644 nodejs-app/node_modules/mime/CHANGELOG.md create mode 100644 nodejs-app/node_modules/mime/LICENSE create mode 100644 nodejs-app/node_modules/mime/README.md create mode 100755 nodejs-app/node_modules/mime/cli.js create mode 100644 nodejs-app/node_modules/mime/mime.js create mode 100644 nodejs-app/node_modules/mime/package.json create mode 100755 nodejs-app/node_modules/mime/src/build.js create mode 100644 nodejs-app/node_modules/mime/src/test.js create mode 100644 nodejs-app/node_modules/mime/types.json create mode 100644 nodejs-app/node_modules/ms/index.js create mode 100644 nodejs-app/node_modules/ms/license.md create mode 100644 nodejs-app/node_modules/ms/package.json create mode 100644 nodejs-app/node_modules/ms/readme.md create mode 100644 nodejs-app/node_modules/mysql/Changes.md create mode 100644 nodejs-app/node_modules/mysql/License create mode 100644 nodejs-app/node_modules/mysql/Readme.md create mode 100644 nodejs-app/node_modules/mysql/index.js create mode 100644 nodejs-app/node_modules/mysql/lib/Connection.js create mode 100644 nodejs-app/node_modules/mysql/lib/ConnectionConfig.js create mode 100644 nodejs-app/node_modules/mysql/lib/Pool.js create mode 100644 nodejs-app/node_modules/mysql/lib/PoolCluster.js create mode 100644 nodejs-app/node_modules/mysql/lib/PoolConfig.js create mode 100644 nodejs-app/node_modules/mysql/lib/PoolConnection.js create mode 100644 nodejs-app/node_modules/mysql/lib/PoolNamespace.js create mode 100644 nodejs-app/node_modules/mysql/lib/PoolSelector.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/Auth.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/BufferList.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/PacketHeader.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/PacketWriter.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/Parser.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/Protocol.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/ResultSet.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/SqlString.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/Timer.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/constants/charsets.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/constants/client.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/constants/errors.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/constants/field_flags.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/constants/server_status.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/constants/ssl_profiles.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/constants/types.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/packets/AuthSwitchRequestPacket.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/packets/AuthSwitchResponsePacket.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/packets/ClientAuthenticationPacket.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/packets/ComChangeUserPacket.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/packets/ComPingPacket.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/packets/ComQueryPacket.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/packets/ComQuitPacket.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/packets/ComStatisticsPacket.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/packets/EmptyPacket.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/packets/EofPacket.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/packets/ErrorPacket.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/packets/Field.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/packets/FieldPacket.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/packets/HandshakeInitializationPacket.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/packets/LocalDataFilePacket.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/packets/LocalInfileRequestPacket.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/packets/OkPacket.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/packets/OldPasswordPacket.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/packets/ResultSetHeaderPacket.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/packets/RowDataPacket.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/packets/SSLRequestPacket.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/packets/StatisticsPacket.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/packets/UseOldPasswordPacket.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/packets/index.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/sequences/ChangeUser.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/sequences/Handshake.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/sequences/Ping.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/sequences/Query.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/sequences/Quit.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/sequences/Sequence.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/sequences/Statistics.js create mode 100644 nodejs-app/node_modules/mysql/lib/protocol/sequences/index.js create mode 100644 nodejs-app/node_modules/mysql/node_modules/safe-buffer/LICENSE create mode 100644 nodejs-app/node_modules/mysql/node_modules/safe-buffer/README.md create mode 100644 nodejs-app/node_modules/mysql/node_modules/safe-buffer/index.d.ts create mode 100644 nodejs-app/node_modules/mysql/node_modules/safe-buffer/index.js create mode 100644 nodejs-app/node_modules/mysql/node_modules/safe-buffer/package.json create mode 100644 nodejs-app/node_modules/mysql/package.json create mode 100644 nodejs-app/node_modules/negotiator/HISTORY.md create mode 100644 nodejs-app/node_modules/negotiator/LICENSE create mode 100644 nodejs-app/node_modules/negotiator/README.md create mode 100644 nodejs-app/node_modules/negotiator/index.js create mode 100644 nodejs-app/node_modules/negotiator/lib/charset.js create mode 100644 nodejs-app/node_modules/negotiator/lib/encoding.js create mode 100644 nodejs-app/node_modules/negotiator/lib/language.js create mode 100644 nodejs-app/node_modules/negotiator/lib/mediaType.js create mode 100644 nodejs-app/node_modules/negotiator/package.json create mode 100644 nodejs-app/node_modules/object-inspect/.eslintrc create mode 100644 nodejs-app/node_modules/object-inspect/.github/FUNDING.yml create mode 100644 nodejs-app/node_modules/object-inspect/.nycrc create mode 100644 nodejs-app/node_modules/object-inspect/CHANGELOG.md create mode 100644 nodejs-app/node_modules/object-inspect/LICENSE create mode 100644 nodejs-app/node_modules/object-inspect/example/all.js create mode 100644 nodejs-app/node_modules/object-inspect/example/circular.js create mode 100644 nodejs-app/node_modules/object-inspect/example/fn.js create mode 100644 nodejs-app/node_modules/object-inspect/example/inspect.js create mode 100644 nodejs-app/node_modules/object-inspect/index.js create mode 100644 nodejs-app/node_modules/object-inspect/package-support.json create mode 100644 nodejs-app/node_modules/object-inspect/package.json create mode 100644 nodejs-app/node_modules/object-inspect/readme.markdown create mode 100644 nodejs-app/node_modules/object-inspect/test-core-js.js create mode 100644 nodejs-app/node_modules/object-inspect/test/bigint.js create mode 100644 nodejs-app/node_modules/object-inspect/test/browser/dom.js create mode 100644 nodejs-app/node_modules/object-inspect/test/circular.js create mode 100644 nodejs-app/node_modules/object-inspect/test/deep.js create mode 100644 nodejs-app/node_modules/object-inspect/test/element.js create mode 100644 nodejs-app/node_modules/object-inspect/test/err.js create mode 100644 nodejs-app/node_modules/object-inspect/test/fakes.js create mode 100644 nodejs-app/node_modules/object-inspect/test/fn.js create mode 100644 nodejs-app/node_modules/object-inspect/test/global.js create mode 100644 nodejs-app/node_modules/object-inspect/test/has.js create mode 100644 nodejs-app/node_modules/object-inspect/test/holes.js create mode 100644 nodejs-app/node_modules/object-inspect/test/indent-option.js create mode 100644 nodejs-app/node_modules/object-inspect/test/inspect.js create mode 100644 nodejs-app/node_modules/object-inspect/test/lowbyte.js create mode 100644 nodejs-app/node_modules/object-inspect/test/number.js create mode 100644 nodejs-app/node_modules/object-inspect/test/quoteStyle.js create mode 100644 nodejs-app/node_modules/object-inspect/test/toStringTag.js create mode 100644 nodejs-app/node_modules/object-inspect/test/undef.js create mode 100644 nodejs-app/node_modules/object-inspect/test/values.js create mode 100644 nodejs-app/node_modules/object-inspect/util.inspect.js create mode 100644 nodejs-app/node_modules/on-finished/HISTORY.md create mode 100644 nodejs-app/node_modules/on-finished/LICENSE create mode 100644 nodejs-app/node_modules/on-finished/README.md create mode 100644 nodejs-app/node_modules/on-finished/index.js create mode 100644 nodejs-app/node_modules/on-finished/package.json create mode 100644 nodejs-app/node_modules/parseurl/HISTORY.md create mode 100644 nodejs-app/node_modules/parseurl/LICENSE create mode 100644 nodejs-app/node_modules/parseurl/README.md create mode 100644 nodejs-app/node_modules/parseurl/index.js create mode 100644 nodejs-app/node_modules/parseurl/package.json create mode 100644 nodejs-app/node_modules/path-to-regexp/History.md create mode 100644 nodejs-app/node_modules/path-to-regexp/LICENSE create mode 100644 nodejs-app/node_modules/path-to-regexp/Readme.md create mode 100644 nodejs-app/node_modules/path-to-regexp/index.js create mode 100644 nodejs-app/node_modules/path-to-regexp/package.json create mode 100644 nodejs-app/node_modules/process-nextick-args/index.js create mode 100644 nodejs-app/node_modules/process-nextick-args/license.md create mode 100644 nodejs-app/node_modules/process-nextick-args/package.json create mode 100644 nodejs-app/node_modules/process-nextick-args/readme.md create mode 100644 nodejs-app/node_modules/proxy-addr/HISTORY.md create mode 100644 nodejs-app/node_modules/proxy-addr/LICENSE create mode 100644 nodejs-app/node_modules/proxy-addr/README.md create mode 100644 nodejs-app/node_modules/proxy-addr/index.js create mode 100644 nodejs-app/node_modules/proxy-addr/package.json create mode 100644 nodejs-app/node_modules/qs/.editorconfig create mode 100644 nodejs-app/node_modules/qs/.eslintrc create mode 100644 nodejs-app/node_modules/qs/.github/FUNDING.yml create mode 100644 nodejs-app/node_modules/qs/.nycrc create mode 100644 nodejs-app/node_modules/qs/CHANGELOG.md create mode 100644 nodejs-app/node_modules/qs/LICENSE.md create mode 100644 nodejs-app/node_modules/qs/README.md create mode 100644 nodejs-app/node_modules/qs/dist/qs.js create mode 100644 nodejs-app/node_modules/qs/lib/formats.js create mode 100644 nodejs-app/node_modules/qs/lib/index.js create mode 100644 nodejs-app/node_modules/qs/lib/parse.js create mode 100644 nodejs-app/node_modules/qs/lib/stringify.js create mode 100644 nodejs-app/node_modules/qs/lib/utils.js create mode 100644 nodejs-app/node_modules/qs/package.json create mode 100644 nodejs-app/node_modules/qs/test/parse.js create mode 100644 nodejs-app/node_modules/qs/test/stringify.js create mode 100644 nodejs-app/node_modules/qs/test/utils.js create mode 100644 nodejs-app/node_modules/range-parser/HISTORY.md create mode 100644 nodejs-app/node_modules/range-parser/LICENSE create mode 100644 nodejs-app/node_modules/range-parser/README.md create mode 100644 nodejs-app/node_modules/range-parser/index.js create mode 100644 nodejs-app/node_modules/range-parser/package.json create mode 100644 nodejs-app/node_modules/raw-body/HISTORY.md create mode 100644 nodejs-app/node_modules/raw-body/LICENSE create mode 100644 nodejs-app/node_modules/raw-body/README.md create mode 100644 nodejs-app/node_modules/raw-body/SECURITY.md create mode 100644 nodejs-app/node_modules/raw-body/index.d.ts create mode 100644 nodejs-app/node_modules/raw-body/index.js create mode 100644 nodejs-app/node_modules/raw-body/package.json create mode 100644 nodejs-app/node_modules/readable-stream/.travis.yml create mode 100644 nodejs-app/node_modules/readable-stream/CONTRIBUTING.md create mode 100644 nodejs-app/node_modules/readable-stream/GOVERNANCE.md create mode 100644 nodejs-app/node_modules/readable-stream/LICENSE create mode 100644 nodejs-app/node_modules/readable-stream/README.md create mode 100644 nodejs-app/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md create mode 100644 nodejs-app/node_modules/readable-stream/duplex-browser.js create mode 100644 nodejs-app/node_modules/readable-stream/duplex.js create mode 100644 nodejs-app/node_modules/readable-stream/lib/_stream_duplex.js create mode 100644 nodejs-app/node_modules/readable-stream/lib/_stream_passthrough.js create mode 100644 nodejs-app/node_modules/readable-stream/lib/_stream_readable.js create mode 100644 nodejs-app/node_modules/readable-stream/lib/_stream_transform.js create mode 100644 nodejs-app/node_modules/readable-stream/lib/_stream_writable.js create mode 100644 nodejs-app/node_modules/readable-stream/lib/internal/streams/BufferList.js create mode 100644 nodejs-app/node_modules/readable-stream/lib/internal/streams/destroy.js create mode 100644 nodejs-app/node_modules/readable-stream/lib/internal/streams/stream-browser.js create mode 100644 nodejs-app/node_modules/readable-stream/lib/internal/streams/stream.js create mode 100644 nodejs-app/node_modules/readable-stream/node_modules/safe-buffer/LICENSE create mode 100644 nodejs-app/node_modules/readable-stream/node_modules/safe-buffer/README.md create mode 100644 nodejs-app/node_modules/readable-stream/node_modules/safe-buffer/index.d.ts create mode 100644 nodejs-app/node_modules/readable-stream/node_modules/safe-buffer/index.js create mode 100644 nodejs-app/node_modules/readable-stream/node_modules/safe-buffer/package.json create mode 100644 nodejs-app/node_modules/readable-stream/package.json create mode 100644 nodejs-app/node_modules/readable-stream/passthrough.js create mode 100644 nodejs-app/node_modules/readable-stream/readable-browser.js create mode 100644 nodejs-app/node_modules/readable-stream/readable.js create mode 100644 nodejs-app/node_modules/readable-stream/transform.js create mode 100644 nodejs-app/node_modules/readable-stream/writable-browser.js create mode 100644 nodejs-app/node_modules/readable-stream/writable.js create mode 100644 nodejs-app/node_modules/safe-buffer/LICENSE create mode 100644 nodejs-app/node_modules/safe-buffer/README.md create mode 100644 nodejs-app/node_modules/safe-buffer/index.d.ts create mode 100644 nodejs-app/node_modules/safe-buffer/index.js create mode 100644 nodejs-app/node_modules/safe-buffer/package.json create mode 100644 nodejs-app/node_modules/safer-buffer/LICENSE create mode 100644 nodejs-app/node_modules/safer-buffer/Porting-Buffer.md create mode 100644 nodejs-app/node_modules/safer-buffer/Readme.md create mode 100644 nodejs-app/node_modules/safer-buffer/dangerous.js create mode 100644 nodejs-app/node_modules/safer-buffer/package.json create mode 100644 nodejs-app/node_modules/safer-buffer/safer.js create mode 100644 nodejs-app/node_modules/safer-buffer/tests.js create mode 100644 nodejs-app/node_modules/send/HISTORY.md create mode 100644 nodejs-app/node_modules/send/LICENSE create mode 100644 nodejs-app/node_modules/send/README.md create mode 100644 nodejs-app/node_modules/send/SECURITY.md create mode 100644 nodejs-app/node_modules/send/index.js create mode 100644 nodejs-app/node_modules/send/node_modules/ms/index.js create mode 100644 nodejs-app/node_modules/send/node_modules/ms/license.md create mode 100644 nodejs-app/node_modules/send/node_modules/ms/package.json create mode 100644 nodejs-app/node_modules/send/node_modules/ms/readme.md create mode 100644 nodejs-app/node_modules/send/package.json create mode 100644 nodejs-app/node_modules/serve-static/HISTORY.md create mode 100644 nodejs-app/node_modules/serve-static/LICENSE create mode 100644 nodejs-app/node_modules/serve-static/README.md create mode 100644 nodejs-app/node_modules/serve-static/index.js create mode 100644 nodejs-app/node_modules/serve-static/package.json create mode 100644 nodejs-app/node_modules/set-function-length/.eslintrc create mode 100644 nodejs-app/node_modules/set-function-length/.github/FUNDING.yml create mode 100644 nodejs-app/node_modules/set-function-length/.nycrc create mode 100644 nodejs-app/node_modules/set-function-length/CHANGELOG.md create mode 100644 nodejs-app/node_modules/set-function-length/LICENSE create mode 100644 nodejs-app/node_modules/set-function-length/README.md create mode 100644 nodejs-app/node_modules/set-function-length/env.d.ts create mode 100644 nodejs-app/node_modules/set-function-length/env.js create mode 100644 nodejs-app/node_modules/set-function-length/index.d.ts create mode 100644 nodejs-app/node_modules/set-function-length/index.js create mode 100644 nodejs-app/node_modules/set-function-length/package.json create mode 100644 nodejs-app/node_modules/set-function-length/tsconfig.json create mode 100644 nodejs-app/node_modules/setprototypeof/LICENSE create mode 100644 nodejs-app/node_modules/setprototypeof/README.md create mode 100644 nodejs-app/node_modules/setprototypeof/index.d.ts create mode 100644 nodejs-app/node_modules/setprototypeof/index.js create mode 100644 nodejs-app/node_modules/setprototypeof/package.json create mode 100644 nodejs-app/node_modules/setprototypeof/test/index.js create mode 100644 nodejs-app/node_modules/side-channel/.editorconfig create mode 100644 nodejs-app/node_modules/side-channel/.eslintrc create mode 100644 nodejs-app/node_modules/side-channel/.github/FUNDING.yml create mode 100644 nodejs-app/node_modules/side-channel/.nycrc create mode 100644 nodejs-app/node_modules/side-channel/CHANGELOG.md create mode 100644 nodejs-app/node_modules/side-channel/LICENSE create mode 100644 nodejs-app/node_modules/side-channel/README.md create mode 100644 nodejs-app/node_modules/side-channel/index.d.ts create mode 100644 nodejs-app/node_modules/side-channel/index.js create mode 100644 nodejs-app/node_modules/side-channel/package.json create mode 100644 nodejs-app/node_modules/side-channel/test/index.js create mode 100644 nodejs-app/node_modules/side-channel/tsconfig.json create mode 100644 nodejs-app/node_modules/sqlstring/HISTORY.md create mode 100644 nodejs-app/node_modules/sqlstring/LICENSE create mode 100644 nodejs-app/node_modules/sqlstring/README.md create mode 100644 nodejs-app/node_modules/sqlstring/index.js create mode 100644 nodejs-app/node_modules/sqlstring/lib/SqlString.js create mode 100644 nodejs-app/node_modules/sqlstring/package.json create mode 100644 nodejs-app/node_modules/statuses/HISTORY.md create mode 100644 nodejs-app/node_modules/statuses/LICENSE create mode 100644 nodejs-app/node_modules/statuses/README.md create mode 100644 nodejs-app/node_modules/statuses/codes.json create mode 100644 nodejs-app/node_modules/statuses/index.js create mode 100644 nodejs-app/node_modules/statuses/package.json create mode 100644 nodejs-app/node_modules/string_decoder/.travis.yml create mode 100644 nodejs-app/node_modules/string_decoder/LICENSE create mode 100644 nodejs-app/node_modules/string_decoder/README.md create mode 100644 nodejs-app/node_modules/string_decoder/lib/string_decoder.js create mode 100644 nodejs-app/node_modules/string_decoder/node_modules/safe-buffer/LICENSE create mode 100644 nodejs-app/node_modules/string_decoder/node_modules/safe-buffer/README.md create mode 100644 nodejs-app/node_modules/string_decoder/node_modules/safe-buffer/index.d.ts create mode 100644 nodejs-app/node_modules/string_decoder/node_modules/safe-buffer/index.js create mode 100644 nodejs-app/node_modules/string_decoder/node_modules/safe-buffer/package.json create mode 100644 nodejs-app/node_modules/string_decoder/package.json create mode 100644 nodejs-app/node_modules/toidentifier/HISTORY.md create mode 100644 nodejs-app/node_modules/toidentifier/LICENSE create mode 100644 nodejs-app/node_modules/toidentifier/README.md create mode 100644 nodejs-app/node_modules/toidentifier/index.js create mode 100644 nodejs-app/node_modules/toidentifier/package.json create mode 100644 nodejs-app/node_modules/type-is/HISTORY.md create mode 100644 nodejs-app/node_modules/type-is/LICENSE create mode 100644 nodejs-app/node_modules/type-is/README.md create mode 100644 nodejs-app/node_modules/type-is/index.js create mode 100644 nodejs-app/node_modules/type-is/package.json create mode 100644 nodejs-app/node_modules/unpipe/HISTORY.md create mode 100644 nodejs-app/node_modules/unpipe/LICENSE create mode 100644 nodejs-app/node_modules/unpipe/README.md create mode 100644 nodejs-app/node_modules/unpipe/index.js create mode 100644 nodejs-app/node_modules/unpipe/package.json create mode 100644 nodejs-app/node_modules/util-deprecate/History.md create mode 100644 nodejs-app/node_modules/util-deprecate/LICENSE create mode 100644 nodejs-app/node_modules/util-deprecate/README.md create mode 100644 nodejs-app/node_modules/util-deprecate/browser.js create mode 100644 nodejs-app/node_modules/util-deprecate/node.js create mode 100644 nodejs-app/node_modules/util-deprecate/package.json create mode 100644 nodejs-app/node_modules/utils-merge/.npmignore create mode 100644 nodejs-app/node_modules/utils-merge/LICENSE create mode 100644 nodejs-app/node_modules/utils-merge/README.md create mode 100644 nodejs-app/node_modules/utils-merge/index.js create mode 100644 nodejs-app/node_modules/utils-merge/package.json create mode 100644 nodejs-app/node_modules/vary/HISTORY.md create mode 100644 nodejs-app/node_modules/vary/LICENSE create mode 100644 nodejs-app/node_modules/vary/README.md create mode 100644 nodejs-app/node_modules/vary/index.js create mode 100644 nodejs-app/node_modules/vary/package.json create mode 100644 nodejs-app/package-lock.json create mode 100644 nodejs-app/package.json diff --git a/README.md b/README.md index 346fd4b9..f6f8e8f0 100644 --- a/README.md +++ b/README.md @@ -654,10 +654,7 @@ You have now set up a Node.js application in a Docker container on nodejsnet net ***Questions:*** -1. What is the output of step 5 above, explain the error? ***(1 mark)*** - - - +1. What is the output of step 5 above, explain the error? ***(1 mark)*** __Fill answer here__. 2. Show the instruction needed to make this work. ***(1 mark)*** __Fill answer here__. diff --git a/nodejs-app/Dockerfile b/nodejs-app/Dockerfile new file mode 100644 index 00000000..8f3b568d --- /dev/null +++ b/nodejs-app/Dockerfile @@ -0,0 +1,17 @@ +# Use the official Node.js image +FROM node:14 + +# Create and change to the app directory +WORKDIR /usr/src/app + +# Copy application dependency manifests to the container image +COPY package*.json ./ + +# Install production dependencies +RUN npm install + +# Copy local code to the container image +COPY . . + +# Run the web service on container startup +CMD [ "node", "index.js" ] \ No newline at end of file diff --git a/nodejs-app/index.js b/nodejs-app/index.js new file mode 100644 index 00000000..574c11fc --- /dev/null +++ b/nodejs-app/index.js @@ -0,0 +1,45 @@ +const express = require('express'); +const mysql = require('mysql'); + +const app = express(); +const port = 3000; + +// Create a MySQL connection +const connection = mysql.createConnection({ + host: 'mysql-container', + user: 'myuser', + password: 'mypassword', + database: 'mydatabase' +}); + +// Connect to MySQL +connection.connect((err) => { + if (err) { + console.error('Error connecting to MySQL:', err); + return; + } + console.log('Connected to MySQL'); +}); + +// Define a route for the root URL +app.get('/', (req, res) => { + res.send('Welcome to the Node.js and MySQL app!'); +}); + +// Define a route to get a random row +app.get('/random', (req, res) => { + const query = 'SELECT * FROM mytable ORDER BY RAND() LIMIT 1'; + connection.query(query, (err, results) => { + if (err) { + console.error('Error executing query:', err); + res.status(500).send('Server Error'); + return; + } + res.json(results[0]); + }); +}); + +// Start the server +app.listen(port, () => { + console.log(`Server running at http://localhost:${port}`); +}); diff --git a/nodejs-app/node_modules/.bin/mime b/nodejs-app/node_modules/.bin/mime new file mode 120000 index 00000000..fbb7ee0e --- /dev/null +++ b/nodejs-app/node_modules/.bin/mime @@ -0,0 +1 @@ +../mime/cli.js \ No newline at end of file diff --git a/nodejs-app/node_modules/.package-lock.json b/nodejs-app/node_modules/.package-lock.json new file mode 100644 index 00000000..51e2c89d --- /dev/null +++ b/nodejs-app/node_modules/.package-lock.json @@ -0,0 +1,776 @@ +{ + "name": "nodejs-app", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/bignumber.js": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", + "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==", + "engines": { + "node": "*" + } + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/mysql": { + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz", + "integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==", + "dependencies": { + "bignumber.js": "9.0.0", + "readable-stream": "2.3.7", + "safe-buffer": "5.1.2", + "sqlstring": "2.3.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mysql/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sqlstring": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", + "integrity": "sha512-ooAzh/7dxIG5+uDik1z/Rd1vli0+38izZhGzSa34FwR7IbelPWCCKSNIl8jlL/F7ERvy8CB2jNeM1E9i9mXMAQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + } + } +} diff --git a/nodejs-app/node_modules/accepts/HISTORY.md b/nodejs-app/node_modules/accepts/HISTORY.md new file mode 100644 index 00000000..cb5990c7 --- /dev/null +++ b/nodejs-app/node_modules/accepts/HISTORY.md @@ -0,0 +1,243 @@ +1.3.8 / 2022-02-02 +================== + + * deps: mime-types@~2.1.34 + - deps: mime-db@~1.51.0 + * deps: negotiator@0.6.3 + +1.3.7 / 2019-04-29 +================== + + * deps: negotiator@0.6.2 + - Fix sorting charset, encoding, and language with extra parameters + +1.3.6 / 2019-04-28 +================== + + * deps: mime-types@~2.1.24 + - deps: mime-db@~1.40.0 + +1.3.5 / 2018-02-28 +================== + + * deps: mime-types@~2.1.18 + - deps: mime-db@~1.33.0 + +1.3.4 / 2017-08-22 +================== + + * deps: mime-types@~2.1.16 + - deps: mime-db@~1.29.0 + +1.3.3 / 2016-05-02 +================== + + * deps: mime-types@~2.1.11 + - deps: mime-db@~1.23.0 + * deps: negotiator@0.6.1 + - perf: improve `Accept` parsing speed + - perf: improve `Accept-Charset` parsing speed + - perf: improve `Accept-Encoding` parsing speed + - perf: improve `Accept-Language` parsing speed + +1.3.2 / 2016-03-08 +================== + + * deps: mime-types@~2.1.10 + - Fix extension of `application/dash+xml` + - Update primary extension for `audio/mp4` + - deps: mime-db@~1.22.0 + +1.3.1 / 2016-01-19 +================== + + * deps: mime-types@~2.1.9 + - deps: mime-db@~1.21.0 + +1.3.0 / 2015-09-29 +================== + + * deps: mime-types@~2.1.7 + - deps: mime-db@~1.19.0 + * deps: negotiator@0.6.0 + - Fix including type extensions in parameters in `Accept` parsing + - Fix parsing `Accept` parameters with quoted equals + - Fix parsing `Accept` parameters with quoted semicolons + - Lazy-load modules from main entry point + - perf: delay type concatenation until needed + - perf: enable strict mode + - perf: hoist regular expressions + - perf: remove closures getting spec properties + - perf: remove a closure from media type parsing + - perf: remove property delete from media type parsing + +1.2.13 / 2015-09-06 +=================== + + * deps: mime-types@~2.1.6 + - deps: mime-db@~1.18.0 + +1.2.12 / 2015-07-30 +=================== + + * deps: mime-types@~2.1.4 + - deps: mime-db@~1.16.0 + +1.2.11 / 2015-07-16 +=================== + + * deps: mime-types@~2.1.3 + - deps: mime-db@~1.15.0 + +1.2.10 / 2015-07-01 +=================== + + * deps: mime-types@~2.1.2 + - deps: mime-db@~1.14.0 + +1.2.9 / 2015-06-08 +================== + + * deps: mime-types@~2.1.1 + - perf: fix deopt during mapping + +1.2.8 / 2015-06-07 +================== + + * deps: mime-types@~2.1.0 + - deps: mime-db@~1.13.0 + * perf: avoid argument reassignment & argument slice + * perf: avoid negotiator recursive construction + * perf: enable strict mode + * perf: remove unnecessary bitwise operator + +1.2.7 / 2015-05-10 +================== + + * deps: negotiator@0.5.3 + - Fix media type parameter matching to be case-insensitive + +1.2.6 / 2015-05-07 +================== + + * deps: mime-types@~2.0.11 + - deps: mime-db@~1.9.1 + * deps: negotiator@0.5.2 + - Fix comparing media types with quoted values + - Fix splitting media types with quoted commas + +1.2.5 / 2015-03-13 +================== + + * deps: mime-types@~2.0.10 + - deps: mime-db@~1.8.0 + +1.2.4 / 2015-02-14 +================== + + * Support Node.js 0.6 + * deps: mime-types@~2.0.9 + - deps: mime-db@~1.7.0 + * deps: negotiator@0.5.1 + - Fix preference sorting to be stable for long acceptable lists + +1.2.3 / 2015-01-31 +================== + + * deps: mime-types@~2.0.8 + - deps: mime-db@~1.6.0 + +1.2.2 / 2014-12-30 +================== + + * deps: mime-types@~2.0.7 + - deps: mime-db@~1.5.0 + +1.2.1 / 2014-12-30 +================== + + * deps: mime-types@~2.0.5 + - deps: mime-db@~1.3.1 + +1.2.0 / 2014-12-19 +================== + + * deps: negotiator@0.5.0 + - Fix list return order when large accepted list + - Fix missing identity encoding when q=0 exists + - Remove dynamic building of Negotiator class + +1.1.4 / 2014-12-10 +================== + + * deps: mime-types@~2.0.4 + - deps: mime-db@~1.3.0 + +1.1.3 / 2014-11-09 +================== + + * deps: mime-types@~2.0.3 + - deps: mime-db@~1.2.0 + +1.1.2 / 2014-10-14 +================== + + * deps: negotiator@0.4.9 + - Fix error when media type has invalid parameter + +1.1.1 / 2014-09-28 +================== + + * deps: mime-types@~2.0.2 + - deps: mime-db@~1.1.0 + * deps: negotiator@0.4.8 + - Fix all negotiations to be case-insensitive + - Stable sort preferences of same quality according to client order + +1.1.0 / 2014-09-02 +================== + + * update `mime-types` + +1.0.7 / 2014-07-04 +================== + + * Fix wrong type returned from `type` when match after unknown extension + +1.0.6 / 2014-06-24 +================== + + * deps: negotiator@0.4.7 + +1.0.5 / 2014-06-20 +================== + + * fix crash when unknown extension given + +1.0.4 / 2014-06-19 +================== + + * use `mime-types` + +1.0.3 / 2014-06-11 +================== + + * deps: negotiator@0.4.6 + - Order by specificity when quality is the same + +1.0.2 / 2014-05-29 +================== + + * Fix interpretation when header not in request + * deps: pin negotiator@0.4.5 + +1.0.1 / 2014-01-18 +================== + + * Identity encoding isn't always acceptable + * deps: negotiator@~0.4.0 + +1.0.0 / 2013-12-27 +================== + + * Genesis diff --git a/nodejs-app/node_modules/accepts/LICENSE b/nodejs-app/node_modules/accepts/LICENSE new file mode 100644 index 00000000..06166077 --- /dev/null +++ b/nodejs-app/node_modules/accepts/LICENSE @@ -0,0 +1,23 @@ +(The MIT License) + +Copyright (c) 2014 Jonathan OngA JavaScript library for arbitrary-precision arithmetic.
+ + ++ See the README on GitHub for a + quick-start introduction. +
+
+ In all examples below, var and semicolons are not shown, and if a commented-out
+ value is in quotes it means toString has been called on the preceding expression.
+
BigNumber(n [, base]) ⇒ BigNumber
+
+ n: number|string|BigNumber
+ base: number: integer, 2 to 36 inclusive. (See
+ ALPHABET to extend this range).
+
+ Returns a new instance of a BigNumber object with value n, where n
+ is a numeric value in the specified base, or base 10 if
+ base is omitted or is null or undefined.
+
+x = new BigNumber(123.4567) // '123.4567' +// 'new' is optional +y = BigNumber(x) // '123.4567'+
+ If n is a base 10 value it can be in normal (fixed-point) or
+ exponential notation. Values in other bases must be in normal notation. Values in any base can
+ have fraction digits, i.e. digits after the decimal point.
+
+new BigNumber(43210) // '43210'
+new BigNumber('4.321e+4') // '43210'
+new BigNumber('-735.0918e-430') // '-7.350918e-428'
+new BigNumber('123412421.234324', 5) // '607236.557696'
+
+ Signed 0, signed Infinity and NaN are supported.
+
+new BigNumber('-Infinity') // '-Infinity'
+new BigNumber(NaN) // 'NaN'
+new BigNumber(-0) // '0'
+new BigNumber('.5') // '0.5'
+new BigNumber('+2') // '2'
+
+ String values in hexadecimal literal form, e.g. '0xff', are valid, as are
+ string values with the octal and binary prefixs '0o' and '0b'.
+ String values in octal literal form without the prefix will be interpreted as
+ decimals, e.g. '011' is interpreted as 11, not 9.
+
+new BigNumber(-10110100.1, 2) // '-180.5'
+new BigNumber('-0b10110100.1') // '-180.5'
+new BigNumber('ff.8', 16) // '255.5'
+new BigNumber('0xff.8') // '255.5'
+
+ If a base is specified, n is rounded according to the current
+ DECIMAL_PLACES and
+ ROUNDING_MODE settings. This includes base
+ 10 so don't include a base parameter for decimal values unless
+ this behaviour is wanted.
+
BigNumber.config({ DECIMAL_PLACES: 5 })
+new BigNumber(1.23456789) // '1.23456789'
+new BigNumber(1.23456789, 10) // '1.23457'
+ An error is thrown if base is invalid. See Errors.
+ There is no limit to the number of digits of a value of type string (other than
+ that of JavaScript's maximum array size). See RANGE to set
+ the maximum and minimum possible exponent value of a BigNumber.
+
+new BigNumber('5032485723458348569331745.33434346346912144534543')
+new BigNumber('4.321e10000000')
+ BigNumber NaN is returned if n is invalid
+ (unless BigNumber.DEBUG is true, see below).
+new BigNumber('.1*') // 'NaN'
+new BigNumber('blurgh') // 'NaN'
+new BigNumber(9, 2) // 'NaN'
+
+ To aid in debugging, if BigNumber.DEBUG is true then an error will
+ be thrown on an invalid n. An error will also be thrown if n is of
+ type number with more than 15 significant digits, as calling
+ toString or valueOf on
+ these numbers may not result in the intended value.
+
+console.log(823456789123456.3) // 823456789123456.2 +new BigNumber(823456789123456.3) // '823456789123456.2' +BigNumber.DEBUG = true +// '[BigNumber Error] Number primitive has more than 15 significant digits' +new BigNumber(823456789123456.3) +// '[BigNumber Error] Not a base 2 number' +new BigNumber(9, 2)+
+ A BigNumber can also be created from an object literal.
+ Use isBigNumber to check that it is well-formed.
+
new BigNumber({ s: 1, e: 2, c: [ 777, 12300000000000 ], _isBigNumber: true }) // '777.123'
+
+
+
+
+ The static methods of a BigNumber constructor.
+ + + + +.clone([object]) ⇒ BigNumber constructor
+ object: object
+ Returns a new independent BigNumber constructor with configuration as described by
+ object (see config), or with the default
+ configuration if object is null or undefined.
+
+ Throws if object is not an object. See Errors.
+
BigNumber.config({ DECIMAL_PLACES: 5 })
+BN = BigNumber.clone({ DECIMAL_PLACES: 9 })
+
+x = new BigNumber(1)
+y = new BN(1)
+
+x.div(3) // 0.33333
+y.div(3) // 0.333333333
+
+// BN = BigNumber.clone({ DECIMAL_PLACES: 9 }) is equivalent to:
+BN = BigNumber.clone()
+BN.config({ DECIMAL_PLACES: 9 })
+
+
+
+ set([object]) ⇒ object
+ object: object: an object that contains some or all of the following
+ properties.
+
Configures the settings for this particular BigNumber constructor.
+ +DECIMAL_PLACES0 to 1e+9 inclusive20
+ BigNumber.config({ DECIMAL_PLACES: 5 })
+BigNumber.set({ DECIMAL_PLACES: 5 }) // equivalent
+ ROUNDING_MODE0 to 8 inclusive4 (ROUND_HALF_UP)
+ decimalPlaces,
+ precision,
+ toExponential,
+ toFixed,
+ toFormat and
+ toPrecision.
+ BigNumber.config({ ROUNDING_MODE: 0 })
+BigNumber.set({ ROUNDING_MODE: BigNumber.ROUND_UP }) // equivalent
+ EXPONENTIAL_AT0 to 1e+9 inclusive, or
+ -1e+9 to 0 inclusive, integer
+ 0 to 1e+9 inclusive ][-7, 20]
+ toString returns exponential notation.
+ [-7, 20].
+ BigNumber.config({ EXPONENTIAL_AT: 2 })
+new BigNumber(12.3) // '12.3' e is only 1
+new BigNumber(123) // '1.23e+2'
+new BigNumber(0.123) // '0.123' e is only -1
+new BigNumber(0.0123) // '1.23e-2'
+
+BigNumber.config({ EXPONENTIAL_AT: [-7, 20] })
+new BigNumber(123456789) // '123456789' e is only 8
+new BigNumber(0.000000123) // '1.23e-7'
+
+// Almost never return exponential notation:
+BigNumber.config({ EXPONENTIAL_AT: 1e+9 })
+
+// Always return exponential notation:
+BigNumber.config({ EXPONENTIAL_AT: 0 })
+ EXPONENTIAL_AT, the toFixed method
+ will always return a value in normal notation and the toExponential method
+ will always return a value in exponential form.
+ toString with a base argument, e.g. toString(10), will
+ also always return normal notation.
+ RANGE1 to 1e+9 inclusive, or
+ -1e+9 to -1 inclusive, integer
+ 1 to 1e+9 inclusive ][-1e+9, 1e+9]
+ Infinity and underflow to
+ zero occurs.
+ Infinity and those with a
+ negative exponent of greater magnitude become zero.
+ Infinity, use [-324, 308].
+ BigNumber.config({ RANGE: 500 })
+BigNumber.config().RANGE // [ -500, 500 ]
+new BigNumber('9.999e499') // '9.999e+499'
+new BigNumber('1e500') // 'Infinity'
+new BigNumber('1e-499') // '1e-499'
+new BigNumber('1e-500') // '0'
+
+BigNumber.config({ RANGE: [-3, 4] })
+new BigNumber(99999) // '99999' e is only 4
+new BigNumber(100000) // 'Infinity' e is 5
+new BigNumber(0.001) // '0.01' e is only -3
+new BigNumber(0.0001) // '0' e is -4
+ 9.999...e+1000000000.1e-1000000000.
+ CRYPTOtrue or false.false
+ CRYPTO is set to true then the
+ random method will generate random digits using
+ crypto.getRandomValues in browsers that support it, or
+ crypto.randomBytes if using Node.js.
+ CRYPTO to true will fail and an exception will be thrown.
+ CRYPTO is false then the source of randomness used will be
+ Math.random (which is assumed to generate at least 30 bits of
+ randomness).
+ random.
+// Node.js
+global.crypto = require('crypto')
+
+BigNumber.config({ CRYPTO: true })
+BigNumber.config().CRYPTO // true
+BigNumber.random() // 0.54340758610486147524
+ MODULO_MODE0 to 9 inclusive1 (ROUND_DOWN)
+ a mod n.q = a / n, is calculated according to the
+ ROUNDING_MODE that corresponds to the chosen
+ MODULO_MODE.
+ r, is calculated as: r = a - n * q.| Property | Value | Description |
|---|---|---|
| ROUND_UP | 0 | ++ The remainder is positive if the dividend is negative, otherwise it is negative. + | +
| ROUND_DOWN | 1 | +
+ The remainder has the same sign as the dividend. + This uses 'truncating division' and matches the behaviour of JavaScript's + remainder operator %.
+ |
+
| ROUND_FLOOR | 3 | +
+ The remainder has the same sign as the divisor. + This matches Python's % operator.
+ |
+
| ROUND_HALF_EVEN | 6 | +The IEEE 754 remainder function. | +
| EUCLID | 9 | +
+ The remainder is always positive. Euclidian division: + q = sign(n) * floor(a / abs(n))
+ |
+
modulo.BigNumber.config({ MODULO_MODE: BigNumber.EUCLID })
+BigNumber.config({ MODULO_MODE: 9 }) // equivalent
+ POW_PRECISION0 to 1e+9 inclusive.0
+ 0, the number of significant digits will not be limited.exponentiatedBy.BigNumber.config({ POW_PRECISION: 100 })FORMATFORMAT object configures the format of the string returned by the
+ toFormat method.
+ FORMAT object that are
+ recognised, and their default values.
+ FORMAT object will not be checked for validity. The existing
+ FORMAT object will simply be replaced by the object that is passed in.
+ The object can include any number of the properties shown below.
+ toFormat for examples of usage.
+BigNumber.config({
+ FORMAT: {
+ // string to prepend
+ prefix: '',
+ // decimal separator
+ decimalSeparator: '.',
+ // grouping separator of the integer part
+ groupSeparator: ',',
+ // primary grouping size of the integer part
+ groupSize: 3,
+ // secondary grouping size of the integer part
+ secondaryGroupSize: 0,
+ // grouping separator of the fraction part
+ fractionGroupSeparator: ' ',
+ // grouping size of the fraction part
+ fractionGroupSize: 0,
+ // string to append
+ suffix: ''
+ }
+});
+ ALPHABET'0123456789abcdefghijklmnopqrstuvwxyz'
+ BigNumber constructor or
+ toString.
+ '+' and '-', or the decimal separator '.'.
+ // duodecimal (base 12)
+BigNumber.config({ ALPHABET: '0123456789TE' })
+x = new BigNumber('T', 12)
+x.toString() // '10'
+x.toString(12) // 'T'
+ Returns an object with the above properties and their current values.
+
+ Throws if object is not an object, or if an invalid value is assigned to
+ one or more of the above properties. See Errors.
+
+BigNumber.config({
+ DECIMAL_PLACES: 40,
+ ROUNDING_MODE: BigNumber.ROUND_HALF_CEIL,
+ EXPONENTIAL_AT: [-10, 20],
+ RANGE: [-500, 500],
+ CRYPTO: true,
+ MODULO_MODE: BigNumber.ROUND_FLOOR,
+ POW_PRECISION: 80,
+ FORMAT: {
+ groupSize: 3,
+ groupSeparator: ' ',
+ decimalSeparator: ','
+ },
+ ALPHABET: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_'
+});
+
+obj = BigNumber.config();
+obj.DECIMAL_PLACES // 40
+obj.RANGE // [-500, 500]
+
+
+
+ .isBigNumber(value) ⇒ boolean
+ value: any
+ Returns true if value is a BigNumber instance, otherwise returns
+ false.
+
x = 42 +y = new BigNumber(x) + +BigNumber.isBigNumber(x) // false +y instanceof BigNumber // true +BigNumber.isBigNumber(y) // true + +BN = BigNumber.clone(); +z = new BN(x) +z instanceof BigNumber // false +BigNumber.isBigNumber(z) // true+
+ If value is a BigNumber instance and BigNumber.DEBUG is true,
+ then this method will also check if value is well-formed, and throw if it is not.
+ See Errors.
+
+ The check can be useful if creating a BigNumber from an object literal. + See BigNumber. +
++x = new BigNumber(10) + +// Change x.c to an illegitimate value. +x.c = NaN + +BigNumber.DEBUG = false + +// No error. +BigNumber.isBigNumber(x) // true + +BigNumber.DEBUG = true + +// Error. +BigNumber.isBigNumber(x) // '[BigNumber Error] Invalid BigNumber'+ + + +
.max(n...) ⇒ BigNumber
+ n: number|string|BigNumber
+ See BigNumber for further parameter details.
+
+ Returns a BigNumber whose value is the maximum of the arguments. +
+The return value is always exact and unrounded.
+x = new BigNumber('3257869345.0378653')
+BigNumber.maximum(4e9, x, '123456789.9') // '4000000000'
+
+arr = [12, '13', new BigNumber(14)]
+BigNumber.max.apply(null, arr) // '14'
+
+
+
+ .min(n...) ⇒ BigNumber
+ n: number|string|BigNumber
+ See BigNumber for further parameter details.
+
+ Returns a BigNumber whose value is the minimum of the arguments. +
+The return value is always exact and unrounded.
+x = new BigNumber('3257869345.0378653')
+BigNumber.minimum(4e9, x, '123456789.9') // '123456789.9'
+
+arr = [2, new BigNumber(-14), '-15.9999', -12]
+BigNumber.min.apply(null, arr) // '-15.9999'
+
+
+
+ .random([dp]) ⇒ BigNumber
+ dp: number: integer, 0 to 1e+9 inclusive
+ Returns a new BigNumber with a pseudo-random value equal to or greater than 0 and
+ less than 1.
+
+ The return value will have dp decimal places (or less if trailing zeros are
+ produced).
+ If dp is omitted then the number of decimal places will default to the current
+ DECIMAL_PLACES setting.
+
+ Depending on the value of this BigNumber constructor's
+ CRYPTO setting and the support for the
+ crypto object in the host environment, the random digits of the return value are
+ generated by either Math.random (fastest), crypto.getRandomValues
+ (Web Cryptography API in recent browsers) or crypto.randomBytes (Node.js).
+
+ To be able to set CRYPTO to true when using
+ Node.js, the crypto object must be available globally:
+
global.crypto = require('crypto')
+
+ If CRYPTO is true, i.e. one of the
+ crypto methods is to be used, the value of a returned BigNumber should be
+ cryptographically-secure and statistically indistinguishable from a random value.
+
+ Throws if dp is invalid. See Errors.
+
BigNumber.config({ DECIMAL_PLACES: 10 })
+BigNumber.random() // '0.4117936847'
+BigNumber.random(20) // '0.78193327636914089009'
+
+
+
+ .sum(n...) ⇒ BigNumber
+ n: number|string|BigNumber
+ See BigNumber for further parameter details.
+
Returns a BigNumber whose value is the sum of the arguments.
+The return value is always exact and unrounded.
+x = new BigNumber('3257869345.0378653')
+BigNumber.sum(4e9, x, '123456789.9') // '7381326134.9378653'
+
+arr = [2, new BigNumber(14), '15.9999', 12]
+BigNumber.sum.apply(null, arr) // '43.9999'
+
+
+
+
+ The library's enumerated rounding modes are stored as properties of the constructor.
+ (They are not referenced internally by the library itself.)
+
+ Rounding modes 0 to 6 (inclusive) are the same as those of Java's
+ BigDecimal class.
+
| Property | +Value | +Description | +
|---|---|---|
| ROUND_UP | +0 | +Rounds away from zero | +
| ROUND_DOWN | +1 | +Rounds towards zero | +
| ROUND_CEIL | +2 | +Rounds towards Infinity |
+
| ROUND_FLOOR | +3 | +Rounds towards -Infinity |
+
| ROUND_HALF_UP | +4 | +
+ Rounds towards nearest neighbour. + If equidistant, rounds away from zero + |
+
| ROUND_HALF_DOWN | +5 | +
+ Rounds towards nearest neighbour. + If equidistant, rounds towards zero + |
+
| ROUND_HALF_EVEN | +6 | +
+ Rounds towards nearest neighbour. + If equidistant, rounds towards even neighbour + |
+
| ROUND_HALF_CEIL | +7 | +
+ Rounds towards nearest neighbour. + If equidistant, rounds towards Infinity
+ |
+
| ROUND_HALF_FLOOR | +8 | +
+ Rounds towards nearest neighbour. + If equidistant, rounds towards -Infinity
+ |
+
+BigNumber.config({ ROUNDING_MODE: BigNumber.ROUND_CEIL })
+BigNumber.config({ ROUNDING_MODE: 2 }) // equivalent
+
+ undefined|false|true
+
+ If BigNumber.DEBUG is set true then an error will be thrown
+ if this BigNumber constructor receives an invalid value, such as
+ a value of type number with more than 15 significant digits.
+ See BigNumber.
+
+ An error will also be thrown if the isBigNumber
+ method receives a BigNumber that is not well-formed.
+ See isBigNumber.
+
BigNumber.DEBUG = true+ + +
The methods inherited by a BigNumber instance from its constructor's prototype object.
+A BigNumber is immutable in the sense that it is not changed by its methods.
+
+ The treatment of ±0, ±Infinity and NaN is
+ consistent with how JavaScript treats these values.
+
Many method names have a shorter alias.
+ + + +.abs() ⇒ BigNumber+ Returns a BigNumber whose value is the absolute value, i.e. the magnitude, of the value of + this BigNumber. +
+The return value is always exact and unrounded.
++x = new BigNumber(-0.8) +y = x.absoluteValue() // '0.8' +z = y.abs() // '0.8'+ + + +
.comparedTo(n [, base]) ⇒ number
+
+ n: number|string|BigNumber
+ base: number
+ See BigNumber for further parameter details.
+
| Returns | |
|---|---|
1 |
+ If the value of this BigNumber is greater than the value of n |
+
-1 |
+ If the value of this BigNumber is less than the value of n |
+
0 |
+ If this BigNumber and n have the same value |
+
null |
+ If the value of either this BigNumber or n is NaN |
+
+x = new BigNumber(Infinity)
+y = new BigNumber(5)
+x.comparedTo(y) // 1
+x.comparedTo(x.minus(1)) // 0
+y.comparedTo(NaN) // null
+y.comparedTo('110', 2) // -1
+
+
+
+ .dp([dp [, rm]]) ⇒ BigNumber|number
+
+ dp: number: integer, 0 to 1e+9 inclusive
+ rm: number: integer, 0 to 8 inclusive
+
+ If dp is a number, returns a BigNumber whose value is the value of this BigNumber
+ rounded by rounding mode rm to a maximum of dp decimal places.
+
+ If dp is omitted, or is null or undefined, the return
+ value is the number of decimal places of the value of this BigNumber, or null if
+ the value of this BigNumber is ±Infinity or NaN.
+
+ If rm is omitted, or is null or undefined,
+ ROUNDING_MODE is used.
+
+ Throws if dp or rm is invalid. See Errors.
+
+x = new BigNumber(1234.56)
+x.decimalPlaces(1) // '1234.6'
+x.dp() // 2
+x.decimalPlaces(2) // '1234.56'
+x.dp(10) // '1234.56'
+x.decimalPlaces(0, 1) // '1234'
+x.dp(0, 6) // '1235'
+x.decimalPlaces(1, 1) // '1234.5'
+x.dp(1, BigNumber.ROUND_HALF_EVEN) // '1234.6'
+x // '1234.56'
+y = new BigNumber('9.9e-101')
+y.dp() // 102
+
+
+
+ .div(n [, base]) ⇒ BigNumber
+
+ n: number|string|BigNumber
+ base: number
+ See BigNumber for further parameter details.
+
+ Returns a BigNumber whose value is the value of this BigNumber divided by
+ n, rounded according to the current
+ DECIMAL_PLACES and
+ ROUNDING_MODE settings.
+
+x = new BigNumber(355) +y = new BigNumber(113) +x.dividedBy(y) // '3.14159292035398230088' +x.div(5) // '71' +x.div(47, 16) // '5'+ + + +
.idiv(n [, base]) ⇒
+ BigNumber
+
+ n: number|string|BigNumber
+ base: number
+ See BigNumber for further parameter details.
+
+ Returns a BigNumber whose value is the integer part of dividing the value of this BigNumber by
+ n.
+
+x = new BigNumber(5)
+y = new BigNumber(3)
+x.dividedToIntegerBy(y) // '1'
+x.idiv(0.7) // '7'
+x.idiv('0.f', 16) // '5'
+
+
+
+ .pow(n [, m]) ⇒ BigNumber
+
+ n: number|string|BigNumber: integer
+ m: number|string|BigNumber
+
+ Returns a BigNumber whose value is the value of this BigNumber exponentiated by
+ n, i.e. raised to the power n, and optionally modulo a modulus
+ m.
+
+ Throws if n is not an integer. See Errors.
+
+ If n is negative the result is rounded according to the current
+ DECIMAL_PLACES and
+ ROUNDING_MODE settings.
+
+ As the number of digits of the result of the power operation can grow so large so quickly,
+ e.g. 123.45610000 has over 50000 digits, the number of significant
+ digits calculated is limited to the value of the
+ POW_PRECISION setting (unless a modulus
+ m is specified).
+
+ By default POW_PRECISION is set to 0.
+ This means that an unlimited number of significant digits will be calculated, and that the
+ method's performance will decrease dramatically for larger exponents.
+
+ If m is specified and the value of m, n and this
+ BigNumber are integers, and n is positive, then a fast modular exponentiation
+ algorithm is used, otherwise the operation will be performed as
+ x.exponentiatedBy(n).modulo(m) with a
+ POW_PRECISION of 0.
+
+Math.pow(0.7, 2) // 0.48999999999999994 +x = new BigNumber(0.7) +x.exponentiatedBy(2) // '0.49' +BigNumber(3).pow(-2) // '0.11111111111111111111'+ + + +
.integerValue([rm]) ⇒ BigNumber
+
+ rm: number: integer, 0 to 8 inclusive
+
+ Returns a BigNumber whose value is the value of this BigNumber rounded to an integer using
+ rounding mode rm.
+
+ If rm is omitted, or is null or undefined,
+ ROUNDING_MODE is used.
+
+ Throws if rm is invalid. See Errors.
+
+x = new BigNumber(123.456) +x.integerValue() // '123' +x.integerValue(BigNumber.ROUND_CEIL) // '124' +y = new BigNumber(-12.7) +y.integerValue() // '-13' +y.integerValue(BigNumber.ROUND_DOWN) // '-12'+
+ The following is an example of how to add a prototype method that emulates JavaScript's
+ Math.round function. Math.ceil, Math.floor and
+ Math.trunc can be emulated in the same way with
+ BigNumber.ROUND_CEIL, BigNumber.ROUND_FLOOR and
+ BigNumber.ROUND_DOWN respectively.
+
+BigNumber.prototype.round = function (n) {
+ return n.integerValue(BigNumber.ROUND_HALF_CEIL);
+};
+x.round() // '123'
+
+
+
+ .eq(n [, base]) ⇒ boolean
+ n: number|string|BigNumber
+ base: number
+ See BigNumber for further parameter details.
+
+ Returns true if the value of this BigNumber is equal to the value of
+ n, otherwise returns false.
+ As with JavaScript, NaN does not equal NaN.
+
Note: This method uses the comparedTo method internally.
+0 === 1e-324 // true
+x = new BigNumber(0)
+x.isEqualTo('1e-324') // false
+BigNumber(-0).eq(x) // true ( -0 === 0 )
+BigNumber(255).eq('ff', 16) // true
+
+y = new BigNumber(NaN)
+y.isEqualTo(NaN) // false
+
+
+
+ .isFinite() ⇒ boolean
+ Returns true if the value of this BigNumber is a finite number, otherwise
+ returns false.
+
+ The only possible non-finite values of a BigNumber are NaN, Infinity
+ and -Infinity.
+
+x = new BigNumber(1) +x.isFinite() // true +y = new BigNumber(Infinity) +y.isFinite() // false+
+ Note: The native method isFinite() can be used if
+ n <= Number.MAX_VALUE.
+
.gt(n [, base]) ⇒ boolean
+ n: number|string|BigNumber
+ base: number
+ See BigNumber for further parameter details.
+
+ Returns true if the value of this BigNumber is greater than the value of
+ n, otherwise returns false.
+
Note: This method uses the comparedTo method internally.
+0.1 > (0.3 - 0.2) // true +x = new BigNumber(0.1) +x.isGreaterThan(BigNumber(0.3).minus(0.2)) // false +BigNumber(0).gt(x) // false +BigNumber(11, 3).gt(11.1, 2) // true+ + + +
.gte(n [, base]) ⇒ boolean
+
+ n: number|string|BigNumber
+ base: number
+ See BigNumber for further parameter details.
+
+ Returns true if the value of this BigNumber is greater than or equal to the value
+ of n, otherwise returns false.
+
Note: This method uses the comparedTo method internally.
+(0.3 - 0.2) >= 0.1 // false
+x = new BigNumber(0.3).minus(0.2)
+x.isGreaterThanOrEqualTo(0.1) // true
+BigNumber(1).gte(x) // true
+BigNumber(10, 18).gte('i', 36) // true
+
+
+
+ .isInteger() ⇒ boolean
+ Returns true if the value of this BigNumber is an integer, otherwise returns
+ false.
+
+x = new BigNumber(1) +x.isInteger() // true +y = new BigNumber(123.456) +y.isInteger() // false+ + + +
.lt(n [, base]) ⇒ boolean
+ n: number|string|BigNumber
+ base: number
+ See BigNumber for further parameter details.
+
+ Returns true if the value of this BigNumber is less than the value of
+ n, otherwise returns false.
+
Note: This method uses the comparedTo method internally.
+(0.3 - 0.2) < 0.1 // true +x = new BigNumber(0.3).minus(0.2) +x.isLessThan(0.1) // false +BigNumber(0).lt(x) // true +BigNumber(11.1, 2).lt(11, 3) // true+ + + +
.lte(n [, base]) ⇒ boolean
+
+ n: number|string|BigNumber
+ base: number
+ See BigNumber for further parameter details.
+
+ Returns true if the value of this BigNumber is less than or equal to the value of
+ n, otherwise returns false.
+
Note: This method uses the comparedTo method internally.
+0.1 <= (0.3 - 0.2) // false
+x = new BigNumber(0.1)
+x.isLessThanOrEqualTo(BigNumber(0.3).minus(0.2)) // true
+BigNumber(-1).lte(x) // true
+BigNumber(10, 18).lte('i', 36) // true
+
+
+
+ .isNaN() ⇒ boolean
+ Returns true if the value of this BigNumber is NaN, otherwise
+ returns false.
+
+x = new BigNumber(NaN)
+x.isNaN() // true
+y = new BigNumber('Infinity')
+y.isNaN() // false
+ Note: The native method isNaN() can also be used.
.isNegative() ⇒ boolean
+ Returns true if the sign of this BigNumber is negative, otherwise returns
+ false.
+
+x = new BigNumber(-0) +x.isNegative() // true +y = new BigNumber(2) +y.isNegative() // false+
Note: n < 0 can be used if n <= -Number.MIN_VALUE.
.isPositive() ⇒ boolean
+ Returns true if the sign of this BigNumber is positive, otherwise returns
+ false.
+
+x = new BigNumber(-0) +x.isPositive() // false +y = new BigNumber(2) +y.isPositive() // true+ + + +
.isZero() ⇒ boolean
+ Returns true if the value of this BigNumber is zero or minus zero, otherwise
+ returns false.
+
+x = new BigNumber(-0) +x.isZero() && x.isNegative() // true +y = new BigNumber(Infinity) +y.isZero() // false+
Note: n == 0 can be used if n >= Number.MIN_VALUE.
.minus(n [, base]) ⇒ BigNumber
+
+ n: number|string|BigNumber
+ base: number
+ See BigNumber for further parameter details.
+
Returns a BigNumber whose value is the value of this BigNumber minus n.
The return value is always exact and unrounded.
++0.3 - 0.1 // 0.19999999999999998 +x = new BigNumber(0.3) +x.minus(0.1) // '0.2' +x.minus(0.6, 20) // '0'+ + + +
.mod(n [, base]) ⇒ BigNumber
+ n: number|string|BigNumber
+ base: number
+ See BigNumber for further parameter details.
+
+ Returns a BigNumber whose value is the value of this BigNumber modulo n, i.e.
+ the integer remainder of dividing this BigNumber by n.
+
+ The value returned, and in particular its sign, is dependent on the value of the
+ MODULO_MODE setting of this BigNumber constructor.
+ If it is 1 (default value), the result will have the same sign as this BigNumber,
+ and it will match that of Javascript's % operator (within the limits of double
+ precision) and BigDecimal's remainder method.
+
The return value is always exact and unrounded.
+
+ See MODULO_MODE for a description of the other
+ modulo modes.
+
+1 % 0.9 // 0.09999999999999998
+x = new BigNumber(1)
+x.modulo(0.9) // '0.1'
+y = new BigNumber(33)
+y.mod('a', 33) // '3'
+
+
+
+ .times(n [, base]) ⇒ BigNumber
+
+ n: number|string|BigNumber
+ base: number
+ See BigNumber for further parameter details.
+
+ Returns a BigNumber whose value is the value of this BigNumber multiplied by n.
+
The return value is always exact and unrounded.
+
+0.6 * 3 // 1.7999999999999998
+x = new BigNumber(0.6)
+y = x.multipliedBy(3) // '1.8'
+BigNumber('7e+500').times(y) // '1.26e+501'
+x.multipliedBy('-a', 16) // '-6'
+
+
+
+ .negated() ⇒ BigNumber
+ Returns a BigNumber whose value is the value of this BigNumber negated, i.e. multiplied by
+ -1.
+
+x = new BigNumber(1.8) +x.negated() // '-1.8' +y = new BigNumber(-1.3) +y.negated() // '1.3'+ + + +
.plus(n [, base]) ⇒ BigNumber
+ n: number|string|BigNumber
+ base: number
+ See BigNumber for further parameter details.
+
Returns a BigNumber whose value is the value of this BigNumber plus n.
The return value is always exact and unrounded.
+
+0.1 + 0.2 // 0.30000000000000004
+x = new BigNumber(0.1)
+y = x.plus(0.2) // '0.3'
+BigNumber(0.7).plus(x).plus(y) // '1'
+x.plus('0.1', 8) // '0.225'
+
+
+
+ .sd([d [, rm]]) ⇒ BigNumber|number
+
+ d: number|boolean: integer, 1 to 1e+9
+ inclusive, or true or false
+ rm: number: integer, 0 to 8 inclusive.
+
+ If d is a number, returns a BigNumber whose value is the value of this BigNumber
+ rounded to a precision of d significant digits using rounding mode
+ rm.
+
+ If d is omitted or is null or undefined, the return
+ value is the number of significant digits of the value of this BigNumber, or null
+ if the value of this BigNumber is ±Infinity or NaN.
+ If d is true then any trailing zeros of the integer
+ part of a number are counted as significant digits, otherwise they are not.
+
+ If rm is omitted or is null or undefined,
+ ROUNDING_MODE will be used.
+
+ Throws if d or rm is invalid. See Errors.
+
+x = new BigNumber(9876.54321) +x.precision(6) // '9876.54' +x.sd() // 9 +x.precision(6, BigNumber.ROUND_UP) // '9876.55' +x.sd(2) // '9900' +x.precision(2, 1) // '9800' +x // '9876.54321' +y = new BigNumber(987000) +y.precision() // 3 +y.sd(true) // 6+ + + +
.shiftedBy(n) ⇒ BigNumber
+ n: number: integer,
+ -9007199254740991 to 9007199254740991 inclusive
+
+ Returns a BigNumber whose value is the value of this BigNumber shifted by n
+ places.
+
+ The shift is of the decimal point, i.e. of powers of ten, and is to the left if n
+ is negative or to the right if n is positive.
+
The return value is always exact and unrounded.
+
+ Throws if n is invalid. See Errors.
+
+x = new BigNumber(1.23) +x.shiftedBy(3) // '1230' +x.shiftedBy(-3) // '0.00123'+ + + +
.sqrt() ⇒ BigNumber
+ Returns a BigNumber whose value is the square root of the value of this BigNumber,
+ rounded according to the current
+ DECIMAL_PLACES and
+ ROUNDING_MODE settings.
+
+ The return value will be correctly rounded, i.e. rounded as if the result was first calculated + to an infinite number of correct digits before rounding. +
++x = new BigNumber(16) +x.squareRoot() // '4' +y = new BigNumber(3) +y.sqrt() // '1.73205080756887729353'+ + + +
.toExponential([dp [, rm]]) ⇒ string
+
+ dp: number: integer, 0 to 1e+9 inclusive
+ rm: number: integer, 0 to 8 inclusive
+
+ Returns a string representing the value of this BigNumber in exponential notation rounded
+ using rounding mode rm to dp decimal places, i.e with one digit
+ before the decimal point and dp digits after it.
+
+ If the value of this BigNumber in exponential notation has fewer than dp fraction
+ digits, the return value will be appended with zeros accordingly.
+
+ If dp is omitted, or is null or undefined, the number
+ of digits after the decimal point defaults to the minimum number of digits necessary to
+ represent the value exactly.
+ If rm is omitted or is null or undefined,
+ ROUNDING_MODE is used.
+
+ Throws if dp or rm is invalid. See Errors.
+
+x = 45.6 +y = new BigNumber(x) +x.toExponential() // '4.56e+1' +y.toExponential() // '4.56e+1' +x.toExponential(0) // '5e+1' +y.toExponential(0) // '5e+1' +x.toExponential(1) // '4.6e+1' +y.toExponential(1) // '4.6e+1' +y.toExponential(1, 1) // '4.5e+1' (ROUND_DOWN) +x.toExponential(3) // '4.560e+1' +y.toExponential(3) // '4.560e+1'+ + + +
.toFixed([dp [, rm]]) ⇒ string
+
+ dp: number: integer, 0 to 1e+9 inclusive
+ rm: number: integer, 0 to 8 inclusive
+
+ Returns a string representing the value of this BigNumber in normal (fixed-point) notation
+ rounded to dp decimal places using rounding mode rm.
+
+ If the value of this BigNumber in normal notation has fewer than dp fraction
+ digits, the return value will be appended with zeros accordingly.
+
+ Unlike Number.prototype.toFixed, which returns exponential notation if a number
+ is greater or equal to 1021, this method will always return normal
+ notation.
+
+ If dp is omitted or is null or undefined, the return
+ value will be unrounded and in normal notation. This is also unlike
+ Number.prototype.toFixed, which returns the value to zero decimal places.
+ It is useful when fixed-point notation is required and the current
+ EXPONENTIAL_AT setting causes
+ toString to return exponential notation.
+ If rm is omitted or is null or undefined,
+ ROUNDING_MODE is used.
+
+ Throws if dp or rm is invalid. See Errors.
+
+x = 3.456 +y = new BigNumber(x) +x.toFixed() // '3' +y.toFixed() // '3.456' +y.toFixed(0) // '3' +x.toFixed(2) // '3.46' +y.toFixed(2) // '3.46' +y.toFixed(2, 1) // '3.45' (ROUND_DOWN) +x.toFixed(5) // '3.45600' +y.toFixed(5) // '3.45600'+ + + +
.toFormat([dp [, rm[, format]]]) ⇒ string
+
+ dp: number: integer, 0 to 1e+9 inclusive
+ rm: number: integer, 0 to 8 inclusive
+ format: object: see FORMAT
+
+
+ Returns a string representing the value of this BigNumber in normal (fixed-point) notation
+ rounded to dp decimal places using rounding mode rm, and formatted
+ according to the properties of the format object.
+
+ See FORMAT and the examples below for the properties of the
+ format object, their types, and their usage. A formatting object may contain
+ some or all of the recognised properties.
+
+ If dp is omitted or is null or undefined, then the
+ return value is not rounded to a fixed number of decimal places.
+ If rm is omitted or is null or undefined,
+ ROUNDING_MODE is used.
+ If format is omitted or is null or undefined, the
+ FORMAT object is used.
+
+ Throws if dp, rm or format is invalid. See
+ Errors.
+
+fmt = {
+ prefix = '',
+ decimalSeparator: '.',
+ groupSeparator: ',',
+ groupSize: 3,
+ secondaryGroupSize: 0,
+ fractionGroupSeparator: ' ',
+ fractionGroupSize: 0,
+ suffix = ''
+}
+
+x = new BigNumber('123456789.123456789')
+
+// Set the global formatting options
+BigNumber.config({ FORMAT: fmt })
+
+x.toFormat() // '123,456,789.123456789'
+x.toFormat(3) // '123,456,789.123'
+
+// If a reference to the object assigned to FORMAT has been retained,
+// the format properties can be changed directly
+fmt.groupSeparator = ' '
+fmt.fractionGroupSize = 5
+x.toFormat() // '123 456 789.12345 6789'
+
+// Alternatively, pass the formatting options as an argument
+fmt = {
+ prefix: '=> ',
+ decimalSeparator: ',',
+ groupSeparator: '.',
+ groupSize: 3,
+ secondaryGroupSize: 2
+}
+
+x.toFormat() // '123 456 789.12345 6789'
+x.toFormat(fmt) // '=> 12.34.56.789,123456789'
+x.toFormat(2, fmt) // '=> 12.34.56.789,12'
+x.toFormat(3, BigNumber.ROUND_UP, fmt) // '=> 12.34.56.789,124'
+
+
+
+ .toFraction([maximum_denominator])
+ ⇒ [BigNumber, BigNumber]
+
+ maximum_denominator:
+ number|string|BigNumber: integer >= 1 and <=
+ Infinity
+
+ Returns an array of two BigNumbers representing the value of this BigNumber as a simple
+ fraction with an integer numerator and an integer denominator. The denominator will be a
+ positive non-zero value less than or equal to maximum_denominator.
+
+ If a maximum_denominator is not specified, or is null or
+ undefined, the denominator will be the lowest value necessary to represent the
+ number exactly.
+
+ Throws if maximum_denominator is invalid. See Errors.
+
+x = new BigNumber(1.75)
+x.toFraction() // '7, 4'
+
+pi = new BigNumber('3.14159265358')
+pi.toFraction() // '157079632679,50000000000'
+pi.toFraction(100000) // '312689, 99532'
+pi.toFraction(10000) // '355, 113'
+pi.toFraction(100) // '311, 99'
+pi.toFraction(10) // '22, 7'
+pi.toFraction(1) // '3, 1'
+
+
+
+ .toJSON() ⇒ stringAs valueOf.
+x = new BigNumber('177.7e+457')
+y = new BigNumber(235.4325)
+z = new BigNumber('0.0098074')
+
+// Serialize an array of three BigNumbers
+str = JSON.stringify( [x, y, z] )
+// "["1.777e+459","235.4325","0.0098074"]"
+
+// Return an array of three BigNumbers
+JSON.parse(str, function (key, val) {
+ return key === '' ? val : new BigNumber(val)
+})
+
+
+
+ .toNumber() ⇒ numberReturns the value of this BigNumber as a JavaScript number primitive.
++ This method is identical to using type coercion with the unary plus operator. +
+
+x = new BigNumber(456.789)
+x.toNumber() // 456.789
++x // 456.789
+
+y = new BigNumber('45987349857634085409857349856430985')
+y.toNumber() // 4.598734985763409e+34
+
+z = new BigNumber(-0)
+1 / z.toNumber() // -Infinity
+1 / +z // -Infinity
+
+
+
+ .toPrecision([sd [, rm]]) ⇒ string
+
+ sd: number: integer, 1 to 1e+9 inclusive
+ rm: number: integer, 0 to 8 inclusive
+
+ Returns a string representing the value of this BigNumber rounded to sd
+ significant digits using rounding mode rm.
+
+ If sd is less than the number of digits necessary to represent the integer part
+ of the value in normal (fixed-point) notation, then exponential notation is used.
+
+ If sd is omitted, or is null or undefined, then the
+ return value is the same as n.toString().
+ If rm is omitted or is null or undefined,
+ ROUNDING_MODE is used.
+
+ Throws if sd or rm is invalid. See Errors.
+
+x = 45.6 +y = new BigNumber(x) +x.toPrecision() // '45.6' +y.toPrecision() // '45.6' +x.toPrecision(1) // '5e+1' +y.toPrecision(1) // '5e+1' +y.toPrecision(2, 0) // '4.6e+1' (ROUND_UP) +y.toPrecision(2, 1) // '4.5e+1' (ROUND_DOWN) +x.toPrecision(5) // '45.600' +y.toPrecision(5) // '45.600'+ + + +
.toString([base]) ⇒ string
+ base: number: integer, 2 to ALPHABET.length
+ inclusive (see ALPHABET).
+
+ Returns a string representing the value of this BigNumber in the specified base, or base
+ 10 if base is omitted or is null or
+ undefined.
+
+ For bases above 10, and using the default base conversion alphabet
+ (see ALPHABET), values from 10 to
+ 35 are represented by a-z
+ (as with Number.prototype.toString).
+
+ If a base is specified the value is rounded according to the current
+ DECIMAL_PLACES
+ and ROUNDING_MODE settings.
+
+ If a base is not specified, and this BigNumber has a positive
+ exponent that is equal to or greater than the positive component of the
+ current EXPONENTIAL_AT setting,
+ or a negative exponent equal to or less than the negative component of the
+ setting, then exponential notation is returned.
+
If base is null or undefined it is ignored.
+ Throws if base is invalid. See Errors.
+
+x = new BigNumber(750000)
+x.toString() // '750000'
+BigNumber.config({ EXPONENTIAL_AT: 5 })
+x.toString() // '7.5e+5'
+
+y = new BigNumber(362.875)
+y.toString(2) // '101101010.111'
+y.toString(9) // '442.77777777777777777778'
+y.toString(32) // 'ba.s'
+
+BigNumber.config({ DECIMAL_PLACES: 4 });
+z = new BigNumber('1.23456789')
+z.toString() // '1.23456789'
+z.toString(10) // '1.2346'
+
+
+
+ .valueOf() ⇒ string
+ As toString, but does not accept a base argument and includes
+ the minus sign for negative zero.
+
+x = new BigNumber('-0')
+x.toString() // '0'
+x.valueOf() // '-0'
+y = new BigNumber('1.777e+457')
+y.valueOf() // '1.777e+457'
+
+
+
+ The properties of a BigNumber instance:
+| Property | +Description | +Type | +Value | +
|---|---|---|---|
| c | +coefficient* | +number[] |
+ Array of base 1e14 numbers |
+
| e | +exponent | +number | +Integer, -1000000000 to 1000000000 inclusive |
+
| s | +sign | +number | +-1 or 1 |
+
*significand
+
+ The value of any of the c, e and s properties may also
+ be null.
+
+ The above properties are best considered to be read-only. In early versions of this library it + was okay to change the exponent of a BigNumber by writing to its exponent property directly, + but this is no longer reliable as the value of the first element of the coefficient array is + now dependent on the exponent. +
++ Note that, as with JavaScript numbers, the original exponent and fractional trailing zeros are + not necessarily preserved. +
+x = new BigNumber(0.123) // '0.123'
+x.toExponential() // '1.23e-1'
+x.c // '1,2,3'
+x.e // -1
+x.s // 1
+
+y = new Number(-123.4567000e+2) // '-12345.67'
+y.toExponential() // '-1.234567e+4'
+z = new BigNumber('-123.4567000e+2') // '-12345.67'
+z.toExponential() // '-1.234567e+4'
+z.c // '1,2,3,4,5,6,7'
+z.e // 4
+z.s // -1
+
+
+
+
+ The table below shows how ±0, NaN and
+ ±Infinity are stored.
+
| + | c | +e | +s | +
|---|---|---|---|
| ±0 | +[0] |
+ 0 |
+ ±1 |
+
| NaN | +null |
+ null |
+ null |
+
| ±Infinity | +null |
+ null |
+ ±1 |
+
+x = new Number(-0) // 0 +1 / x == -Infinity // true + +y = new BigNumber(-0) // '0' +y.c // '0' ( [0].toString() ) +y.e // 0 +y.s // -1+ + + +
The table below shows the errors that are thrown.
+
+ The errors are generic Error objects whose message begins
+ '[BigNumber Error]'.
+
| Method | +Throws | +
|---|---|
+ BigNumber+ comparedTo+ dividedBy+ dividedToIntegerBy+ isEqualTo+ isGreaterThan+ isGreaterThanOrEqualTo+ isLessThan+ isLessThanOrEqualTo+ minus+ modulo+ plus+ multipliedBy
+ |
+ Base not a primitive number | +
| Base not an integer | +|
| Base out of range | +|
| Number primitive has more than 15 significant digits* | +|
| Not a base... number* | +|
| Not a number* | +|
clone |
+ Object expected | +
config |
+ Object expected | +
DECIMAL_PLACES not a primitive number |
+ |
DECIMAL_PLACES not an integer |
+ |
DECIMAL_PLACES out of range |
+ |
ROUNDING_MODE not a primitive number |
+ |
ROUNDING_MODE not an integer |
+ |
ROUNDING_MODE out of range |
+ |
EXPONENTIAL_AT not a primitive number |
+ |
EXPONENTIAL_AT not an integer |
+ |
EXPONENTIAL_AT out of range |
+ |
RANGE not a primitive number |
+ |
RANGE not an integer |
+ |
RANGE cannot be zero |
+ |
RANGE cannot be zero |
+ |
CRYPTO not true or false |
+ |
crypto unavailable |
+ |
MODULO_MODE not a primitive number |
+ |
MODULO_MODE not an integer |
+ |
MODULO_MODE out of range |
+ |
POW_PRECISION not a primitive number |
+ |
POW_PRECISION not an integer |
+ |
POW_PRECISION out of range |
+ |
FORMAT not an object |
+ |
ALPHABET invalid |
+ |
+ decimalPlaces+ precision+ random+ shiftedBy+ toExponential+ toFixed+ toFormat+ toPrecision
+ |
+ Argument not a primitive number | +
| Argument not an integer | +|
| Argument out of range | +|
+ decimalPlaces+ precision
+ |
+ Argument not true or false | +
exponentiatedBy |
+ Argument not an integer | +
isBigNumber |
+ Invalid BigNumber* | +
+ minimum+ maximum
+ |
+ Not a number* | +
+ random
+ |
+ crypto unavailable | +
+ toFormat
+ |
+ Argument not an object | +
toFraction |
+ Argument not an integer | +
| Argument out of range | +|
toString |
+ Base not a primitive number | +
| Base not an integer | +|
| Base out of range | +
*Only thrown if BigNumber.DEBUG is true.
To determine if an exception is a BigNumber Error:
+
+try {
+ // ...
+} catch (e) {
+ if (e instanceof Error && e.message.indexOf('[BigNumber Error]') === 0) {
+ // ...
+ }
+}
+
+
+
+
+ To prevent the accidental use of a BigNumber in primitive number operations, or the
+ accidental addition of a BigNumber to a string, the valueOf method can be safely
+ overwritten as shown below.
+
+ The valueOf method is the same as the
+ toJSON method, and both are the same as the
+ toString method except they do not take a base
+ argument and they include the minus sign for negative zero.
+
+BigNumber.prototype.valueOf = function () {
+ throw Error('valueOf called!')
+}
+
+x = new BigNumber(1)
+x / 2 // '[BigNumber Error] valueOf called!'
+x + 'abc' // '[BigNumber Error] valueOf called!'
+
+
+
+
+ + Some arbitrary-precision libraries retain trailing fractional zeros as they can indicate the + precision of a value. This can be useful but the results of arithmetic operations can be + misleading. +
+
+x = new BigDecimal("1.0")
+y = new BigDecimal("1.1000")
+z = x.add(y) // 2.1000
+
+x = new BigDecimal("1.20")
+y = new BigDecimal("3.45000")
+z = x.multiply(y) // 4.1400000
+ + To specify the precision of a value is to specify that the value lies + within a certain range. +
+
+ In the first example, x has a value of 1.0. The trailing zero shows
+ the precision of the value, implying that it is in the range 0.95 to
+ 1.05. Similarly, the precision indicated by the trailing zeros of y
+ indicates that the value is in the range 1.09995 to 1.10005.
+
+ If we add the two lowest values in the ranges we have, 0.95 + 1.09995 = 2.04995,
+ and if we add the two highest values we have, 1.05 + 1.10005 = 2.15005, so the
+ range of the result of the addition implied by the precision of its operands is
+ 2.04995 to 2.15005.
+
+ The result given by BigDecimal of 2.1000 however, indicates that the value is in
+ the range 2.09995 to 2.10005 and therefore the precision implied by
+ its trailing zeros may be misleading.
+
+ In the second example, the true range is 4.122744 to 4.157256 yet
+ the BigDecimal answer of 4.1400000 indicates a range of 4.13999995
+ to 4.14000005. Again, the precision implied by the trailing zeros may be
+ misleading.
+
+ This library, like binary floating point and most calculators, does not retain trailing
+ fractional zeros. Instead, the toExponential, toFixed and
+ toPrecision methods enable trailing zeros to be added if and when required.
+
Welcome back, ' + escapeHtml(name) + '!
'); + } else { + res.write('Hello, new visitor!
'); + } + + res.write(''); +} + +http.createServer(onRequest).listen(3000); +``` + +## Testing + +```sh +$ npm test +``` + +## Benchmark + +``` +$ npm run bench + +> cookie@0.5.0 bench +> node benchmark/index.js + + node@18.18.2 + acorn@8.10.0 + ada@2.6.0 + ares@1.19.1 + brotli@1.0.9 + cldr@43.1 + icu@73.2 + llhttp@6.0.11 + modules@108 + napi@9 + nghttp2@1.57.0 + nghttp3@0.7.0 + ngtcp2@0.8.1 + openssl@3.0.10+quic + simdutf@3.2.14 + tz@2023c + undici@5.26.3 + unicode@15.0 + uv@1.44.2 + uvwasi@0.0.18 + v8@10.2.154.26-node.26 + zlib@1.2.13.1-motley + +> node benchmark/parse-top.js + + cookie.parse - top sites + + 14 tests completed. + + parse accounts.google.com x 2,588,913 ops/sec ±0.74% (186 runs sampled) + parse apple.com x 2,370,002 ops/sec ±0.69% (186 runs sampled) + parse cloudflare.com x 2,213,102 ops/sec ±0.88% (188 runs sampled) + parse docs.google.com x 2,194,157 ops/sec ±1.03% (184 runs sampled) + parse drive.google.com x 2,265,084 ops/sec ±0.79% (187 runs sampled) + parse en.wikipedia.org x 457,099 ops/sec ±0.81% (186 runs sampled) + parse linkedin.com x 504,407 ops/sec ±0.89% (186 runs sampled) + parse maps.google.com x 1,230,959 ops/sec ±0.98% (186 runs sampled) + parse microsoft.com x 926,294 ops/sec ±0.88% (184 runs sampled) + parse play.google.com x 2,311,338 ops/sec ±0.83% (185 runs sampled) + parse support.google.com x 1,508,850 ops/sec ±0.86% (186 runs sampled) + parse www.google.com x 1,022,582 ops/sec ±1.32% (182 runs sampled) + parse youtu.be x 332,136 ops/sec ±1.02% (185 runs sampled) + parse youtube.com x 323,833 ops/sec ±0.77% (183 runs sampled) + +> node benchmark/parse.js + + cookie.parse - generic + + 6 tests completed. + + simple x 3,214,032 ops/sec ±1.61% (183 runs sampled) + decode x 587,237 ops/sec ±1.16% (187 runs sampled) + unquote x 2,954,618 ops/sec ±1.35% (183 runs sampled) + duplicates x 857,008 ops/sec ±0.89% (187 runs sampled) + 10 cookies x 292,133 ops/sec ±0.89% (187 runs sampled) + 100 cookies x 22,610 ops/sec ±0.68% (187 runs sampled) +``` + +## References + +- [RFC 6265: HTTP State Management Mechanism][rfc-6265] +- [Same-site Cookies][rfc-6265bis-09-5.4.7] + +[rfc-cutler-httpbis-partitioned-cookies]: https://tools.ietf.org/html/draft-cutler-httpbis-partitioned-cookies/ +[rfc-west-cookie-priority-00-4.1]: https://tools.ietf.org/html/draft-west-cookie-priority-00#section-4.1 +[rfc-6265bis-09-5.4.7]: https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-09#section-5.4.7 +[rfc-6265]: https://tools.ietf.org/html/rfc6265 +[rfc-6265-5.1.4]: https://tools.ietf.org/html/rfc6265#section-5.1.4 +[rfc-6265-5.2.1]: https://tools.ietf.org/html/rfc6265#section-5.2.1 +[rfc-6265-5.2.2]: https://tools.ietf.org/html/rfc6265#section-5.2.2 +[rfc-6265-5.2.3]: https://tools.ietf.org/html/rfc6265#section-5.2.3 +[rfc-6265-5.2.4]: https://tools.ietf.org/html/rfc6265#section-5.2.4 +[rfc-6265-5.2.5]: https://tools.ietf.org/html/rfc6265#section-5.2.5 +[rfc-6265-5.2.6]: https://tools.ietf.org/html/rfc6265#section-5.2.6 +[rfc-6265-5.3]: https://tools.ietf.org/html/rfc6265#section-5.3 + +## License + +[MIT](LICENSE) + +[ci-image]: https://badgen.net/github/checks/jshttp/cookie/master?label=ci +[ci-url]: https://github.com/jshttp/cookie/actions/workflows/ci.yml +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/cookie/master +[coveralls-url]: https://coveralls.io/r/jshttp/cookie?branch=master +[node-image]: https://badgen.net/npm/node/cookie +[node-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/cookie +[npm-url]: https://npmjs.org/package/cookie +[npm-version-image]: https://badgen.net/npm/v/cookie diff --git a/nodejs-app/node_modules/cookie/SECURITY.md b/nodejs-app/node_modules/cookie/SECURITY.md new file mode 100644 index 00000000..fd4a6c53 --- /dev/null +++ b/nodejs-app/node_modules/cookie/SECURITY.md @@ -0,0 +1,25 @@ +# Security Policies and Procedures + +## Reporting a Bug + +The `cookie` team and community take all security bugs seriously. Thank +you for improving the security of the project. We appreciate your efforts and +responsible disclosure and will make every effort to acknowledge your +contributions. + +Report security bugs by emailing the current owner(s) of `cookie`. This +information can be found in the npm registry using the command +`npm owner ls cookie`. +If unsure or unable to get the information from the above, open an issue +in the [project issue tracker](https://github.com/jshttp/cookie/issues) +asking for the current contact information. + +To ensure the timely response to your report, please ensure that the entirety +of the report is contained within the email body and not solely behind a web +link or an attachment. + +At least one owner will acknowledge your email within 48 hours, and will send a +more detailed response within 48 hours indicating the next steps in handling +your report. After the initial reply to your report, the owners will +endeavor to keep you informed of the progress towards a fix and full +announcement, and may ask for additional information or guidance. diff --git a/nodejs-app/node_modules/cookie/index.js b/nodejs-app/node_modules/cookie/index.js new file mode 100644 index 00000000..03d4c386 --- /dev/null +++ b/nodejs-app/node_modules/cookie/index.js @@ -0,0 +1,274 @@ +/*! + * cookie + * Copyright(c) 2012-2014 Roman Shtylman + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict'; + +/** + * Module exports. + * @public + */ + +exports.parse = parse; +exports.serialize = serialize; + +/** + * Module variables. + * @private + */ + +var __toString = Object.prototype.toString + +/** + * RegExp to match field-content in RFC 7230 sec 3.2 + * + * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ] + * field-vchar = VCHAR / obs-text + * obs-text = %x80-FF + */ + +var fieldContentRegExp = /^[\u0009\u0020-\u007e\u0080-\u00ff]+$/; + +/** + * Parse a cookie header. + * + * Parse the given cookie header string into an object + * The object has the various cookies as keys(names) => values + * + * @param {string} str + * @param {object} [options] + * @return {object} + * @public + */ + +function parse(str, options) { + if (typeof str !== 'string') { + throw new TypeError('argument str must be a string'); + } + + var obj = {} + var opt = options || {}; + var dec = opt.decode || decode; + + var index = 0 + while (index < str.length) { + var eqIdx = str.indexOf('=', index) + + // no more cookie pairs + if (eqIdx === -1) { + break + } + + var endIdx = str.indexOf(';', index) + + if (endIdx === -1) { + endIdx = str.length + } else if (endIdx < eqIdx) { + // backtrack on prior semicolon + index = str.lastIndexOf(';', eqIdx - 1) + 1 + continue + } + + var key = str.slice(index, eqIdx).trim() + + // only assign once + if (undefined === obj[key]) { + var val = str.slice(eqIdx + 1, endIdx).trim() + + // quoted values + if (val.charCodeAt(0) === 0x22) { + val = val.slice(1, -1) + } + + obj[key] = tryDecode(val, dec); + } + + index = endIdx + 1 + } + + return obj; +} + +/** + * Serialize data into a cookie header. + * + * Serialize the a name value pair into a cookie string suitable for + * http headers. An optional options object specified cookie parameters. + * + * serialize('foo', 'bar', { httpOnly: true }) + * => "foo=bar; httpOnly" + * + * @param {string} name + * @param {string} val + * @param {object} [options] + * @return {string} + * @public + */ + +function serialize(name, val, options) { + var opt = options || {}; + var enc = opt.encode || encode; + + if (typeof enc !== 'function') { + throw new TypeError('option encode is invalid'); + } + + if (!fieldContentRegExp.test(name)) { + throw new TypeError('argument name is invalid'); + } + + var value = enc(val); + + if (value && !fieldContentRegExp.test(value)) { + throw new TypeError('argument val is invalid'); + } + + var str = name + '=' + value; + + if (null != opt.maxAge) { + var maxAge = opt.maxAge - 0; + + if (isNaN(maxAge) || !isFinite(maxAge)) { + throw new TypeError('option maxAge is invalid') + } + + str += '; Max-Age=' + Math.floor(maxAge); + } + + if (opt.domain) { + if (!fieldContentRegExp.test(opt.domain)) { + throw new TypeError('option domain is invalid'); + } + + str += '; Domain=' + opt.domain; + } + + if (opt.path) { + if (!fieldContentRegExp.test(opt.path)) { + throw new TypeError('option path is invalid'); + } + + str += '; Path=' + opt.path; + } + + if (opt.expires) { + var expires = opt.expires + + if (!isDate(expires) || isNaN(expires.valueOf())) { + throw new TypeError('option expires is invalid'); + } + + str += '; Expires=' + expires.toUTCString() + } + + if (opt.httpOnly) { + str += '; HttpOnly'; + } + + if (opt.secure) { + str += '; Secure'; + } + + if (opt.partitioned) { + str += '; Partitioned' + } + + if (opt.priority) { + var priority = typeof opt.priority === 'string' + ? opt.priority.toLowerCase() + : opt.priority + + switch (priority) { + case 'low': + str += '; Priority=Low' + break + case 'medium': + str += '; Priority=Medium' + break + case 'high': + str += '; Priority=High' + break + default: + throw new TypeError('option priority is invalid') + } + } + + if (opt.sameSite) { + var sameSite = typeof opt.sameSite === 'string' + ? opt.sameSite.toLowerCase() : opt.sameSite; + + switch (sameSite) { + case true: + str += '; SameSite=Strict'; + break; + case 'lax': + str += '; SameSite=Lax'; + break; + case 'strict': + str += '; SameSite=Strict'; + break; + case 'none': + str += '; SameSite=None'; + break; + default: + throw new TypeError('option sameSite is invalid'); + } + } + + return str; +} + +/** + * URL-decode string value. Optimized to skip native call when no %. + * + * @param {string} str + * @returns {string} + */ + +function decode (str) { + return str.indexOf('%') !== -1 + ? decodeURIComponent(str) + : str +} + +/** + * URL-encode value. + * + * @param {string} val + * @returns {string} + */ + +function encode (val) { + return encodeURIComponent(val) +} + +/** + * Determine if value is a Date. + * + * @param {*} val + * @private + */ + +function isDate (val) { + return __toString.call(val) === '[object Date]' || + val instanceof Date +} + +/** + * Try decoding a string using a decoding function. + * + * @param {string} str + * @param {function} decode + * @private + */ + +function tryDecode(str, decode) { + try { + return decode(str); + } catch (e) { + return str; + } +} diff --git a/nodejs-app/node_modules/cookie/package.json b/nodejs-app/node_modules/cookie/package.json new file mode 100644 index 00000000..0c3f0063 --- /dev/null +++ b/nodejs-app/node_modules/cookie/package.json @@ -0,0 +1,44 @@ +{ + "name": "cookie", + "description": "HTTP server cookie parsing and serialization", + "version": "0.6.0", + "author": "Roman ShtylmanLocation ' + escapeHtml(url) + ' not found
' + + // send a 404 + res.statusCode = 404 + res.setHeader('Content-Type', 'text/html; charset=UTF-8') + res.setHeader('Content-Length', String(Buffer.byteLength(body, 'utf-8'))) + res.end(body, 'utf-8') +}) +``` + +### Encode a URL for use in a header field + +```js +var encodeUrl = require('encodeurl') +var escapeHtml = require('escape-html') +var url = require('url') + +http.createServer(function onRequest (req, res) { + // parse inbound url + var href = url.parse(req) + + // set new host for redirect + href.host = 'localhost' + href.protocol = 'https:' + href.slashes = true + + // create location header + var location = encodeUrl(url.format(href)) + + // create html message + var body = 'Redirecting to new site: ' + escapeHtml(location) + '
' + + // send a 301 + res.statusCode = 301 + res.setHeader('Content-Type', 'text/html; charset=UTF-8') + res.setHeader('Content-Length', String(Buffer.byteLength(body, 'utf-8'))) + res.setHeader('Location', location) + res.end(body, 'utf-8') +}) +``` + +## Testing + +```sh +$ npm test +$ npm run lint +``` + +## References + +- [RFC 3986: Uniform Resource Identifier (URI): Generic Syntax][rfc-3986] +- [WHATWG URL Living Standard][whatwg-url] + +[rfc-3986]: https://tools.ietf.org/html/rfc3986 +[whatwg-url]: https://url.spec.whatwg.org/ + +## License + +[MIT](LICENSE) + +[npm-image]: https://img.shields.io/npm/v/encodeurl.svg +[npm-url]: https://npmjs.org/package/encodeurl +[node-version-image]: https://img.shields.io/node/v/encodeurl.svg +[node-version-url]: https://nodejs.org/en/download +[travis-image]: https://img.shields.io/travis/pillarjs/encodeurl.svg +[travis-url]: https://travis-ci.org/pillarjs/encodeurl +[coveralls-image]: https://img.shields.io/coveralls/pillarjs/encodeurl.svg +[coveralls-url]: https://coveralls.io/r/pillarjs/encodeurl?branch=master +[downloads-image]: https://img.shields.io/npm/dm/encodeurl.svg +[downloads-url]: https://npmjs.org/package/encodeurl diff --git a/nodejs-app/node_modules/encodeurl/index.js b/nodejs-app/node_modules/encodeurl/index.js new file mode 100644 index 00000000..fc4906c6 --- /dev/null +++ b/nodejs-app/node_modules/encodeurl/index.js @@ -0,0 +1,60 @@ +/*! + * encodeurl + * Copyright(c) 2016 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module exports. + * @public + */ + +module.exports = encodeUrl + +/** + * RegExp to match non-URL code points, *after* encoding (i.e. not including "%") + * and including invalid escape sequences. + * @private + */ + +var ENCODE_CHARS_REGEXP = /(?:[^\x21\x25\x26-\x3B\x3D\x3F-\x5B\x5D\x5F\x61-\x7A\x7E]|%(?:[^0-9A-Fa-f]|[0-9A-Fa-f][^0-9A-Fa-f]|$))+/g + +/** + * RegExp to match unmatched surrogate pair. + * @private + */ + +var UNMATCHED_SURROGATE_PAIR_REGEXP = /(^|[^\uD800-\uDBFF])[\uDC00-\uDFFF]|[\uD800-\uDBFF]([^\uDC00-\uDFFF]|$)/g + +/** + * String to replace unmatched surrogate pair with. + * @private + */ + +var UNMATCHED_SURROGATE_PAIR_REPLACE = '$1\uFFFD$2' + +/** + * Encode a URL to a percent-encoded form, excluding already-encoded sequences. + * + * This function will take an already-encoded URL and encode all the non-URL + * code points. This function will not encode the "%" character unless it is + * not part of a valid sequence (`%20` will be left as-is, but `%foo` will + * be encoded as `%25foo`). + * + * This encode is meant to be "safe" and does not throw errors. It will try as + * hard as it can to properly encode the given URL, including replacing any raw, + * unpaired surrogate pairs with the Unicode replacement character prior to + * encoding. + * + * @param {string} url + * @return {string} + * @public + */ + +function encodeUrl (url) { + return String(url) + .replace(UNMATCHED_SURROGATE_PAIR_REGEXP, UNMATCHED_SURROGATE_PAIR_REPLACE) + .replace(ENCODE_CHARS_REGEXP, encodeURI) +} diff --git a/nodejs-app/node_modules/encodeurl/package.json b/nodejs-app/node_modules/encodeurl/package.json new file mode 100644 index 00000000..b9f25ef1 --- /dev/null +++ b/nodejs-app/node_modules/encodeurl/package.json @@ -0,0 +1,40 @@ +{ + "name": "encodeurl", + "description": "Encode a URL to a percent-encoded form, excluding already-encoded sequences", + "version": "1.0.2", + "contributors": [ + "Douglas Christopher Wilson