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

+
+
+ +
+
+ + 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