diff --git a/.glitch-assets b/.glitch-assets
new file mode 100644
index 00000000..811a2706
--- /dev/null
+++ b/.glitch-assets
@@ -0,0 +1,4 @@
+{"name":"yt5s.com-Vivaldi's Four Seasons - Spring (Part 1)-(480p).mp4","date":"2021-10-04T08:32:01.813Z","url":"https://cdn.glitch.com/cf951236-0fd3-437f-af4a-b97d67cf90f6%2Fyt5s.com-Vivaldi's%20Four%20Seasons%20-%20Spring%20(Part%201)-(480p).mp4","type":"video/mp4","size":16295738,"thumbnail":"https://cdn.glitch.com/cf951236-0fd3-437f-af4a-b97d67cf90f6%2Fthumbnails%2Fyt5s.com-Vivaldi's%20Four%20Seasons%20-%20Spring%20(Part%201)-(480p).mp4","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"jAA2JDGHMSRsBrSb"}
+{"name":"yt5s.com-Billie Eilish - bad guy (Lyrics).mp4","date":"2021-10-04T08:32:12.663Z","url":"https://cdn.glitch.com/cf951236-0fd3-437f-af4a-b97d67cf90f6%2Fyt5s.com-Billie%20Eilish%20-%20bad%20guy%20(Lyrics).mp4","type":"video/mp4","size":7323727,"thumbnail":"https://cdn.glitch.com/cf951236-0fd3-437f-af4a-b97d67cf90f6%2Fthumbnails%2Fyt5s.com-Billie%20Eilish%20-%20bad%20guy%20(Lyrics).mp4","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"ORUhQTmfM4ro9Epg"}
+{"name":"e85856f2-81e9-4292-a461-fc18989ea503.image.png","date":"2021-10-04T08:47:31.876Z","url":"https://cdn.glitch.com/cf951236-0fd3-437f-af4a-b97d67cf90f6%2Fe85856f2-81e9-4292-a461-fc18989ea503.image.png","type":"image/png","size":1239922,"imageWidth":3026,"imageHeight":1572,"thumbnail":"https://cdn.glitch.com/cf951236-0fd3-437f-af4a-b97d67cf90f6%2Fthumbnails%2Fe85856f2-81e9-4292-a461-fc18989ea503.image.png","thumbnailWidth":330,"thumbnailHeight":172,"uuid":"YuC8pqqBksMDUG2Z"}
+{"name":"3457bda0-5f74-46fd-bbaf-7929e22e92e8.image.png","date":"2021-10-04T08:48:53.122Z","url":"https://cdn.glitch.com/cf951236-0fd3-437f-af4a-b97d67cf90f6%2F3457bda0-5f74-46fd-bbaf-7929e22e92e8.image.png","type":"image/png","size":198631,"imageWidth":2813,"imageHeight":1540,"thumbnail":"https://cdn.glitch.com/cf951236-0fd3-437f-af4a-b97d67cf90f6%2Fthumbnails%2F3457bda0-5f74-46fd-bbaf-7929e22e92e8.image.png","thumbnailWidth":330,"thumbnailHeight":181,"uuid":"pk0z10hJxHkMoUQm"}
diff --git a/README.md b/README.md
index 3ae10a92..81ae8747 100644
--- a/README.md
+++ b/README.md
@@ -1,61 +1,17 @@
Assignment 4 - Creative Coding: Interactive Multimedia Experiences
===
+https://a4-msacristanbenjet.glitch.me/
Due: October 4th, by 11:59 AM.
-For this assignment we will focus on client-side development using popular audio/graphics/visualization technologies. The goal of this assignment is to refine our JavaScript knowledge while exploring the multimedia capabilities of the browser.
+## Song Visualizer
-[WebAudio / Canvas / Three Tutorial](https://github.com/cs4241-21a/cs4241-21a.github.io/blob/main/webaudio_canvas_three.md)
-[SVG + D3 tutorial](https://github.com/cs4241-21a/cs4241-21a.github.io/blob/main/using_svg_and_d3.md)
+- I Designed a 2D audio visualizer for 2 songs(Billie Eilish bad guy and Vivaldi's spring). User interaction can control 4 visual aspects : Bar width, Barcolor, Background color and Rotation.
-Baseline Requirements
----
+ -rotate looks better with bar width set to min
-Your application is required to implement the following functionalities:
+Images of application:
-- A server created using Express. This server can be as simple as needed.
-- A client-side interactive experience using at least one of the following web technologies frameworks.
- - [Three.js](https://threejs.org/): A library for 3D graphics / VR experiences
- - [D3.js](https://d3js.org): A library that is primarily used for interactive data visualizations
- - [Canvas](https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API): A 2D raster drawing API included in all modern browsers
- - [SVG](https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API): A 2D vector drawing framework that enables shapes to be defined via XML.
- - [Web Audio API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API): An API for audio synthesis, analysis, processing, and file playback.
-- A user interface for interaction with your project, which must expose at least four parameters for user control. [tweakpane](https://cocopon.github.io/tweakpane/) is highly recommended for this, but you can also use regular HTML ` ` tags (the `range` type is useful to create sliders). You might also explore interaction by tracking mouse movement via the `window.onmousemove` event handler in tandem with the `event.clientX` and `event.clientY` properties. Consider using the [Pointer Events API](https://developer.mozilla.org/en-US/docs/Web/API/Pointer_events) to ensure that that both mouse and touch events will both be supported in your app.
-- Your application should display basic documentation for the user interface when the application first loads.
-
-The interactive experience should possess a reasonable level of complexity. Some examples:
-### Three.js
-- A generative algorithm creates simple agents that move through a virtual world. Your interface controls the behavior / appearance of these agents.
-- A simple 3D game... you really want this to be a simple as possible or it will be outside the scope of this assignment.
-- An 3D audio visualization of a song of your choosing. User interaction should control aspects of the visualization.
-### Canvas
-- Implement a generative algorithm such as [Conway's Game of Life](https://bitstorm.org/gameoflife/) (or 1D cellular automata) and provide interactive controls. Note that the Game of Life has been created by 100s of people using ; we'll be checking to ensure that your implementation is not a copy of these.
-- Design a 2D audio visualizer of a song of your choosing. User interaction should control visual aspects of the experience.
-### Web Audio API
-- Create a screen-based musical instrument using the Web Audio API. You can use projects such as [Interface.js](http://charlie-roberts.com/interface/) or [Nexus UI](https://nexus-js.github.io/ui/api/#Piano) to provide common musical interface elements, or use dat.GUI in combination with mouse/touch events (use the Pointer Events API). Your GUI should enable users to control aspects of sound synthesis. If you want to use higher-level instruments instead of the raw WebAudio API sounds, consider trying the instruments provided by [Tone.js]() or [Gibber](https://github.com/charlieroberts/gibber.audio.lib).
-### D3.js
-- Create visualizations using the datasets found at [Awesome JSON Datasets](https://github.com/jdorfman/Awesome-JSON-Datasets). Experiment with providing different visualizations of the same data set, and providing users interactive control over visualization parameters and/or data filtering. Alternatively, create a single visualization with using one of the more complicated techniques shown at [d3js.org](d3js.org) and provide meaningful points of interaction for users.
-
-Deliverables
----
-
-Do the following to complete this assignment:
-
-1. Implement your project with the above requirements.
-3. Test your project to make sure that when someone goes to your main page on Glitch/Heroku/etc., it displays correctly.
-4. Ensure that your project has the proper naming scheme `a4-firstname-lastname` so we can find it.
-5. Fork this repository and modify the README to the specifications below. *NOTE: If you don't use Glitch for hosting (where we can see the files) then you must include all project files that you author in your repo for this assignment*.
-6. Create and submit a Pull Request to the original repo. Name the pull request using the following template: `a4-firstname-lastname`.
-
-Sample Readme (delete the above when you're ready to submit, and modify the below so with your links and descriptions)
----
-
-## Your Web Application Title
-
-your hosting link e.g. http://a4-charlieroberts.glitch.me
-
-Include a very brief summary of your project here. Images are encouraged when needed, along with concise, high-level text. Be sure to include:
-
-- the goal of the application
-- challenges you faced in realizing the application
-- the instructions you present in the website should be clear enough to use the application, but if you feel any need to provide additional instructions please do so here.
+ https://cdn.glitch.com/cf951236-0fd3-437f-af4a-b97d67cf90f6%2Fe85856f2-81e9-4292-a461-fc18989ea503.image.png?v=1633337251876
+
+ https://cdn.glitch.com/cf951236-0fd3-437f-af4a-b97d67cf90f6%2F3457bda0-5f74-46fd-bbaf-7929e22e92e8.image.png?v=1633337333122
\ No newline at end of file
diff --git a/package.json b/package.json
new file mode 100644
index 00000000..82a3a585
--- /dev/null
+++ b/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "Assigment4",
+ "version": "",
+ "description": "",
+ "author": "Maria del Carmen Sacristan Benjet",
+ "scripts": {
+ "start": "node server.js"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "dependencies": {
+ "cors": "^2.8.5",
+ "express": "^4.17.1",
+ "mime": "^2.5.2"
+ }
+}
\ No newline at end of file
diff --git a/public/css/style.css b/public/css/style.css
new file mode 100644
index 00000000..165d4904
--- /dev/null
+++ b/public/css/style.css
@@ -0,0 +1,30 @@
+#canvasHolder{
+ grid-column-start:2;
+}
+
+#grid{
+ display: grid;
+ grid-template-columns: 35% 65%;
+ grid-template-rows: 100% ;
+}
+
+#left{
+ font-family: 'Staatliches', cursive;
+ grid-column-start:1;
+}
+
+#BillieEilish{
+ font-family: 'Sigmar One', cursive;
+ background-color: red;
+}
+
+#Vivaldi{
+ font-family: 'Ephesis', cursive;
+ font-size:25px;
+ background-color: lightgreen;
+}
+
+.song{
+
+ background-color: lightgreen
+}
\ No newline at end of file
diff --git a/public/js/scripts.js b/public/js/scripts.js
new file mode 100644
index 00000000..9c743dd2
--- /dev/null
+++ b/public/js/scripts.js
@@ -0,0 +1,116 @@
+const canvas = document.getElementById('canvas')
+const ctx = canvas.getContext('2d')
+const barWidth = 3;
+
+var slider = document.getElementById("barWidth");
+var output = document.getElementById("barWidthLable");
+
+var colorBackground = 'black';
+var colorBar = 'red';
+
+const audioCtx = new AudioContext()
+const audioElement = document.createElement('audio')
+document.body.appendChild(audioElement)
+
+const backgroundColorSelect = document.getElementById("BackgroundColor")
+
+backgroundColorSelect.addEventListener('change', (event) => {
+ colorBackground = document.querySelector('.result');
+ colorBackground = event.target.value;
+});
+
+const barColorSelect = document.getElementById("BarColor")
+
+barColorSelect.addEventListener('change', (event) => {
+ colorBar = document.querySelector('.result2');
+ colorBar = event.target.value;
+ //console.log(colorBar)
+});
+
+const rotateSwitch = document.getElementById("rotate")
+var rotate = 'off'
+ rotateSwitch.addEventListener('change', (event) => {
+ if(rotate === 'off'){
+ rotate = 'on'
+ }
+ else{
+ rotate ='off'
+ ctx.fillStyle = colorBackground;
+ ctx.fillRect(0, 0, canvas.width, canvas.height)
+
+ ctx.fillStyle = color
+ }
+ console.log(rotate)
+});
+
+
+const badGuyBtn = document.getElementById('BillieEilish'),
+ vivaldiBtn = document.getElementById('Vivaldi')
+
+
+const badGuy = "https://cdn.glitch.com/cf951236-0fd3-437f-af4a-b97d67cf90f6%2Fyt5s.com-Billie%20Eilish%20-%20bad%20guy%20(Lyrics).mp4?v=1633336332663"
+const vivaldi = "https://cdn.glitch.com/cf951236-0fd3-437f-af4a-b97d67cf90f6%2Fyt5s.com-Vivaldi's%20Four%20Seasons%20-%20Spring%20(Part%201)-(480p).mp4?v=1633336321813"
+
+const defaultColor = document.getElementById('default'),
+ red = document.getElementById('redGradient'),
+ green = document.getElementById('greenGradient'),
+ blue = document.getElementById('blueGradient'),
+ purple = document.getElementById('purpleGradient')
+
+ let color = 'white';
+
+const start = function () {
+ const analyser = audioCtx.createAnalyser()
+ analyser.fftSize = 1024
+ const player = audioCtx.createMediaElementSource(audioElement)
+ player.connect(audioCtx.destination)
+ player.connect(analyser)
+
+ audioElement.crossOrigin = "anonymous";
+
+ const results = new Uint8Array(analyser.frequencyBinCount)
+ var flag= true
+ const draw = function () {
+ window.requestAnimationFrame(draw)
+ ctx.fillStyle = colorBackground;
+ ctx.fillRect(0, 0, canvas.width, canvas.height)
+
+ ctx.fillStyle = color
+
+ analyser.getByteFrequencyData(results)
+
+
+ for (let i = 0; i < analyser.frequencyBinCount; i++) {
+ if(flag){
+ ctx.save()
+ flag =false
+ }
+ ctx.fillStyle = colorBar;
+ ctx.fillRect(i, canvas.height,slider.value, -results[i])
+ if(rotate === 'on'){
+ ctx.rotate(i)
+ }else{
+ ctx.restore();
+
+ }
+
+ }
+ }
+ draw()
+}
+
+
+
+badGuyBtn.addEventListener('click', function () {
+ audioCtx.resume()
+ audioElement.src = badGuy
+ audioElement.play()
+ start()
+})
+
+vivaldiBtn.addEventListener('click', function () {
+ audioCtx.resume()
+ audioElement.src = vivaldi
+ audioElement.play()
+ start()
+})
diff --git a/public/views/index.html b/public/views/index.html
new file mode 100644
index 00000000..ea61f7ef
--- /dev/null
+++ b/public/views/index.html
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
Select song to play
+
+
+
+
+
+
+
+
Visual Aspects control
+
+ Bar Width
+
+
+
Choose Background color:
+
+ black
+ red
+ green
+ yellow
+
+
+
+
Choose Bar color:
+
+ red
+ black
+ green
+ yellow
+
+
+
+
+ Rotate On
+
+
+
+
+
+
+
+
+
+
+
diff --git a/server.js b/server.js
new file mode 100644
index 00000000..6e186e4b
--- /dev/null
+++ b/server.js
@@ -0,0 +1,16 @@
+const express = require("express");
+var cors = require('cors');
+const app = express();
+
+app.use(cors());
+app.use(express.static("public/"));
+
+app.get("/", (request, response) => {
+ response.sendFile(__dirname + "/public/views/index.html");
+});
+
+const listener = app.listen(process.env.PORT, () => {
+ console.log("Your app is listening on port " + listener.address().port);
+});
+
+app.listen(5000)
\ No newline at end of file
diff --git a/shrinkwrap.yaml b/shrinkwrap.yaml
new file mode 100644
index 00000000..7c730b78
--- /dev/null
+++ b/shrinkwrap.yaml
@@ -0,0 +1,422 @@
+dependencies:
+ cors: 2.8.5
+ express: 4.17.1
+ mime: 2.5.2
+packages:
+ /accepts/1.3.7:
+ dependencies:
+ mime-types: 2.1.33
+ negotiator: 0.6.2
+ dev: false
+ engines:
+ node: '>= 0.6'
+ resolution:
+ integrity: sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
+ /array-flatten/1.1.1:
+ dev: false
+ resolution:
+ integrity: sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
+ /body-parser/1.19.0:
+ dependencies:
+ bytes: 3.1.0
+ content-type: 1.0.4
+ debug: 2.6.9
+ depd: 1.1.2
+ http-errors: 1.7.2
+ iconv-lite: 0.4.24
+ on-finished: 2.3.0
+ qs: 6.7.0
+ raw-body: 2.4.0
+ type-is: 1.6.18
+ dev: false
+ engines:
+ node: '>= 0.8'
+ resolution:
+ integrity: sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==
+ /bytes/3.1.0:
+ dev: false
+ engines:
+ node: '>= 0.8'
+ resolution:
+ integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
+ /content-disposition/0.5.3:
+ dependencies:
+ safe-buffer: 5.1.2
+ dev: false
+ engines:
+ node: '>= 0.6'
+ resolution:
+ integrity: sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==
+ /content-type/1.0.4:
+ dev: false
+ engines:
+ node: '>= 0.6'
+ resolution:
+ integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
+ /cookie-signature/1.0.6:
+ dev: false
+ resolution:
+ integrity: sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
+ /cookie/0.4.0:
+ dev: false
+ engines:
+ node: '>= 0.6'
+ resolution:
+ integrity: sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==
+ /cors/2.8.5:
+ dependencies:
+ object-assign: 4.1.1
+ vary: 1.1.2
+ dev: false
+ engines:
+ node: '>= 0.10'
+ resolution:
+ integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==
+ /debug/2.6.9:
+ dependencies:
+ ms: 2.0.0
+ dev: false
+ resolution:
+ integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+ /depd/1.1.2:
+ dev: false
+ engines:
+ node: '>= 0.6'
+ resolution:
+ integrity: sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
+ /destroy/1.0.4:
+ dev: false
+ resolution:
+ integrity: sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
+ /ee-first/1.1.1:
+ dev: false
+ resolution:
+ integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
+ /encodeurl/1.0.2:
+ dev: false
+ engines:
+ node: '>= 0.8'
+ resolution:
+ integrity: sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
+ /escape-html/1.0.3:
+ dev: false
+ resolution:
+ integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
+ /etag/1.8.1:
+ dev: false
+ engines:
+ node: '>= 0.6'
+ resolution:
+ integrity: sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
+ /express/4.17.1:
+ dependencies:
+ accepts: 1.3.7
+ array-flatten: 1.1.1
+ body-parser: 1.19.0
+ content-disposition: 0.5.3
+ content-type: 1.0.4
+ cookie: 0.4.0
+ cookie-signature: 1.0.6
+ debug: 2.6.9
+ depd: 1.1.2
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ etag: 1.8.1
+ finalhandler: 1.1.2
+ fresh: 0.5.2
+ merge-descriptors: 1.0.1
+ methods: 1.1.2
+ on-finished: 2.3.0
+ parseurl: 1.3.3
+ path-to-regexp: 0.1.7
+ proxy-addr: 2.0.7
+ qs: 6.7.0
+ range-parser: 1.2.1
+ safe-buffer: 5.1.2
+ send: 0.17.1
+ serve-static: 1.14.1
+ setprototypeof: 1.1.1
+ statuses: 1.5.0
+ type-is: 1.6.18
+ utils-merge: 1.0.1
+ vary: 1.1.2
+ dev: false
+ engines:
+ node: '>= 0.10.0'
+ resolution:
+ integrity: sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==
+ /finalhandler/1.1.2:
+ dependencies:
+ debug: 2.6.9
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ on-finished: 2.3.0
+ parseurl: 1.3.3
+ statuses: 1.5.0
+ unpipe: 1.0.0
+ dev: false
+ engines:
+ node: '>= 0.8'
+ resolution:
+ integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==
+ /forwarded/0.2.0:
+ dev: false
+ engines:
+ node: '>= 0.6'
+ resolution:
+ integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==
+ /fresh/0.5.2:
+ dev: false
+ engines:
+ node: '>= 0.6'
+ resolution:
+ integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
+ /http-errors/1.7.2:
+ dependencies:
+ depd: 1.1.2
+ inherits: 2.0.3
+ setprototypeof: 1.1.1
+ statuses: 1.5.0
+ toidentifier: 1.0.0
+ dev: false
+ engines:
+ node: '>= 0.6'
+ resolution:
+ integrity: sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==
+ /http-errors/1.7.3:
+ dependencies:
+ depd: 1.1.2
+ inherits: 2.0.4
+ setprototypeof: 1.1.1
+ statuses: 1.5.0
+ toidentifier: 1.0.0
+ dev: false
+ engines:
+ node: '>= 0.6'
+ resolution:
+ integrity: sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==
+ /iconv-lite/0.4.24:
+ dependencies:
+ safer-buffer: 2.1.2
+ dev: false
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+ /inherits/2.0.3:
+ dev: false
+ resolution:
+ integrity: sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+ /inherits/2.0.4:
+ dev: false
+ resolution:
+ integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+ /ipaddr.js/1.9.1:
+ dev: false
+ engines:
+ node: '>= 0.10'
+ resolution:
+ integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
+ /media-typer/0.3.0:
+ dev: false
+ engines:
+ node: '>= 0.6'
+ resolution:
+ integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
+ /merge-descriptors/1.0.1:
+ dev: false
+ resolution:
+ integrity: sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
+ /methods/1.1.2:
+ dev: false
+ engines:
+ node: '>= 0.6'
+ resolution:
+ integrity: sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
+ /mime-db/1.50.0:
+ dev: false
+ engines:
+ node: '>= 0.6'
+ resolution:
+ integrity: sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==
+ /mime-types/2.1.33:
+ dependencies:
+ mime-db: 1.50.0
+ dev: false
+ engines:
+ node: '>= 0.6'
+ resolution:
+ integrity: sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==
+ /mime/1.6.0:
+ dev: false
+ engines:
+ node: '>=4'
+ hasBin: true
+ resolution:
+ integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
+ /mime/2.5.2:
+ dev: false
+ engines:
+ node: '>=4.0.0'
+ hasBin: true
+ resolution:
+ integrity: sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==
+ /ms/2.0.0:
+ dev: false
+ resolution:
+ integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+ /ms/2.1.1:
+ dev: false
+ resolution:
+ integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
+ /negotiator/0.6.2:
+ dev: false
+ engines:
+ node: '>= 0.6'
+ resolution:
+ integrity: sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
+ /object-assign/4.1.1:
+ dev: false
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
+ /on-finished/2.3.0:
+ dependencies:
+ ee-first: 1.1.1
+ dev: false
+ engines:
+ node: '>= 0.8'
+ resolution:
+ integrity: sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
+ /parseurl/1.3.3:
+ dev: false
+ engines:
+ node: '>= 0.8'
+ resolution:
+ integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
+ /path-to-regexp/0.1.7:
+ dev: false
+ resolution:
+ integrity: sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
+ /proxy-addr/2.0.7:
+ dependencies:
+ forwarded: 0.2.0
+ ipaddr.js: 1.9.1
+ dev: false
+ engines:
+ node: '>= 0.10'
+ resolution:
+ integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==
+ /qs/6.7.0:
+ dev: false
+ engines:
+ node: '>=0.6'
+ resolution:
+ integrity: sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==
+ /range-parser/1.2.1:
+ dev: false
+ engines:
+ node: '>= 0.6'
+ resolution:
+ integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
+ /raw-body/2.4.0:
+ dependencies:
+ bytes: 3.1.0
+ http-errors: 1.7.2
+ iconv-lite: 0.4.24
+ unpipe: 1.0.0
+ dev: false
+ engines:
+ node: '>= 0.8'
+ resolution:
+ integrity: sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==
+ /safe-buffer/5.1.2:
+ dev: false
+ resolution:
+ integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+ /safer-buffer/2.1.2:
+ dev: false
+ resolution:
+ integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+ /send/0.17.1:
+ dependencies:
+ debug: 2.6.9
+ depd: 1.1.2
+ destroy: 1.0.4
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ etag: 1.8.1
+ fresh: 0.5.2
+ http-errors: 1.7.3
+ mime: 1.6.0
+ ms: 2.1.1
+ on-finished: 2.3.0
+ range-parser: 1.2.1
+ statuses: 1.5.0
+ dev: false
+ engines:
+ node: '>= 0.8.0'
+ resolution:
+ integrity: sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==
+ /serve-static/1.14.1:
+ dependencies:
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ parseurl: 1.3.3
+ send: 0.17.1
+ dev: false
+ engines:
+ node: '>= 0.8.0'
+ resolution:
+ integrity: sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==
+ /setprototypeof/1.1.1:
+ dev: false
+ resolution:
+ integrity: sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
+ /statuses/1.5.0:
+ dev: false
+ engines:
+ node: '>= 0.6'
+ resolution:
+ integrity: sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
+ /toidentifier/1.0.0:
+ dev: false
+ engines:
+ node: '>=0.6'
+ resolution:
+ integrity: sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
+ /type-is/1.6.18:
+ dependencies:
+ media-typer: 0.3.0
+ mime-types: 2.1.33
+ dev: false
+ engines:
+ node: '>= 0.6'
+ resolution:
+ integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
+ /unpipe/1.0.0:
+ dev: false
+ engines:
+ node: '>= 0.8'
+ resolution:
+ integrity: sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
+ /utils-merge/1.0.1:
+ dev: false
+ engines:
+ node: '>= 0.4.0'
+ resolution:
+ integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
+ /vary/1.1.2:
+ dev: false
+ engines:
+ node: '>= 0.8'
+ resolution:
+ integrity: sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
+registry: 'https://registry.npmjs.org/'
+shrinkwrapMinorVersion: 9
+shrinkwrapVersion: 3
+specifiers:
+ cors: ^2.8.5
+ express: ^4.17.1
+ mime: ^2.5.2