# Project export: WasteRA

This document was generated by HackStack to give an AI agent context about a hackathon project. Sections are labeled with their provenance; content marked as truncated was cut to keep this document small.

## Project metadata

- Hackathon: TreeHacks 2024
- Tagline: WasteRA plans to install sensor embed wastage bins in every Stanford dining hall. A dynamic web server will incorporate this data into a realtime leaderboard for comparing between all dining halls.
- Devpost: https://devpost.com/software/wastera
- GitHub: https://github.com/rhaque1234/WasteRA
- Team: 2 GitHub contributor(s) — rhaque1234 (64 commits), Faz005 (25 commits)

## Devpost submission (written by the team)

### Inspiration

We were surprised by the pounds of food wasted at Wilbur Dining hall each day at dinner and thought of coming up with a public website that displayed the astronomical amount of food wastage to all the Stanford students who dine there.

### What it does

WasteRA embeds 3 sensors - light, motion and ultrasound - onto every compost recycle bin at all the 13 dining halls of Stanford. A dynamic web server will incorporate this data into realtime analysis and feature a leaderboard for comparing rates between all the UC campuses.

### How we built it

We used C++, HTML, Javascript and Docker.

### Challenges we ran into

We had a very hard time into making the web server and displaying the real time data.

### Accomplishments we're proud of

We are proud of coding up the backend web server.

### What we learned

We learnt how to to use Docker to quickly test out our applications.

### What's next

Iteration 2.0 of WasteRA will focus on embedding sensors on every recycle bins located inside the Stanford campus. The leaderboard will focus on the different housing complexes like Stern Hall, Wilbur Hall, EVGR, Crothers Hall, etc.

## README (from the GitHub repository)

# WasteRA
WasteRA plans to install sensor embed wastage bins in every Stanford dining hall. A dynamic web server will incorporate this data into a realtime leaderboard for comparing between all dining halls. 


## Detected evidence (automated analysis)

Indexed codebase: 14 recognized source files, 80 KB.
- Express (technology) — detected in the code
- HTML (language) — detected in the code
- JavaScript (language) — detected in the code
- TypeScript (language) — detected in the code
- C++ (language) — claimed on Devpost, not found in the code
- Docker (technology) — claimed on Devpost, not found in the code

## Codebase structure (from repository index)

### Files (88 of 88)

```
array-flatten.js
CHANGELOG.md
depd index
Docker File
Docker-Compose
editorconfig
ee first
eslintrc
eslintrc3
etag
express
formats.js
History
History.md
History.md1
History.md5
history.md7
History.md7
History11
History3
http errors
iconv
index
index destroy
index final handler
index parse str
index produe
index rep headers
index waste
index waste 3
index waste encondeur
index.d.ts
index.d.ts3
index.html
index.js
Index.js1
index.js11
index.js15
index.js17
index.js19
index.js21
index.js3
index.js5
index.js7
index.js9
licence
Licence Waste
License
License waste 1
License11
License13
License17
License7
License9
media typer
merge descriptors
Mime
mime js
mime.cmd
mime.ps1
package
package.js
package.json
Package.json
Package.json1
package.json11
package.json13
package.json15
Package.json15
Package.json3
package.json5
package.json7
parameter
parse.js
parse.js3
qs.js
README.md
sensors.ino
server.js
stringify.js
stringify.js3
utils.js
utils.js3
Waste body parser
waste license
waste package json
waste ra bytes
waste RA license
```

### Dependencies

- package.json: express@^4.17.1
- Package.json: bluebird@3.5.4, bytes@3.1.0, eslint@5.16.0, eslint-config-standard@12.0.0, eslint-plugin-import@2.16.0, eslint-plugin-markdown@1.0.0, eslint-plugin-node@8.0.1, eslint-plugin-promise@4.1.1, eslint-plugin-standard@4.0.0, http-errors@1.7.2, iconv-lite@0.4.24, istanbul@0.4.5, mocha@6.1.3, readable-stream@2.3.6, safe-buffer@5.1.2, unpipe@1.0.0

### Recent commits (newest first)

- media typer
- merge descriptors
- Create License11
- iconv
- http errors
- express
- etag
- ee first js
- Safe-Buffer
- mime js
- parameter
- Create index.js21
- depd index
- Safe-Buffer
- index rep headers
- index final handler
- index parse str
- Safe-Buffer
- index produe
- index waste 3

## Key source files (fetched from GitHub, selected and truncated for size)

### History.md

```markdown
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
    - d
[truncated — 1972 more characters]
```

### CHANGELOG.md

```markdown
## **6.7.0**
- [New] `stringify`/`parse`: add `comma` as an `arrayFormat` option (#276, #219)
- [Fix] correctly parse nested arrays (#212)
- [Fix] `utils.merge`: avoid a crash with a null target and a truthy non-array source, also with an array source
- [Robustness] `stringify`: cache `Object.prototype.hasOwnProperty`
- [Refactor] `utils`: `isBuffer`: small tweak; add tests
- [Refactor] use cached `Array.isArray`
- [Refactor] `parse`/`stringify`: make a function to normalize the options
- [Refactor] `utils`: reduce observable [[Get]]s
- [Refactor] `stringify`/`utils`: cache `Array.isArray`
- [Tests] always use `String(x)` over `x.toString()`
- [Tests] fix Buffer tests to work in node < 4.5 and node < 5.10
- [Tests] temporarily allow coverage to fail

## **6.6.0**
- [New] Add support for iso-8859-1, utf8 "sentinel" and numeric entities (#268)
- [New] move two-value combine to a `utils` function (#189)
- [Fix] `stringify`: fix a crash with `strictNullHandling` and a custom `filter`/`serializeDate` (#279)
- [Fix] when `parseArrays` is false, properly handle keys ending in `[]` (#260)
- [Fix] `stringify`: do not crash in an obscure combo of `interpretNumericEntities`, a bad custom `decoder`, & `iso-8859-1`
- [Fix] `utils`: `merge`: fix crash when `source` is a truthy primitive & no options are provided
- [refactor] `stringify`: Avoid arr = arr.concat(...), push to the existing instance (#269)
- [Refactor] `parse`: only need to reassign the var once
- [Refactor] `parse`/`stringify`: clean up `charset` options checking; fix defaults
- [Refactor] add missing defaults
- [Refactor] `parse`: one less `concat` call
- [Refactor] `utils`: `compactQueue`: make it explicitly side-effecting
- [Dev Deps] update `browserify`, `eslint`, `@ljharb/eslint-config`, `iconv-lite`, `safe-publish-latest`, `tape`
- [Tests] up to `node` `v10.10`, `v9.11`, `v8.12`, `v6.14`, `v4.9`; pin included builds to LTS

## **6.5.2**
- [Fix] use `safer-buffer` instead of `Buffer` constructor
- [Refactor] utils: `module.exports` one thing, instead of mutating `exports` (#230)
- [Dev Deps] update `browserify`, `eslint`, `iconv-lite`, `safer-buffer`, `tape`, `browserify`

## **6.5.1**
- [Fix] Fix parsing & compacting very deep objects (#224)
- [Refactor] name utils functions
- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape`
- [Tests] up to `node` `v8.4`; use `nvm install-latest-npm` so newer npm doesn’t break older node
- [Tests] Use precise dist for Node.js 0.6 runtime (#225)
- [Tests] make 0.6 required, now that it’s passing
- [Tests] on `node` `v8.2`; fix npm on node 0.6

## **6.5.0**
- [New] add `utils.assign`
- [New] pass default encoder/decoder to custom encoder/decoder functions (#206)
- [New] `parse`/`stringify`: add `ignoreQueryPrefix`/`addQueryPrefix` options, respectively (#213)
- [Fix] Handle stringifying empty objects with addQueryPrefix (#217)
- [Fix] do not mutate `options` argument (#207)
- [Refactor] `parse`: cache index to reuse in else statement (#182)
- [Docs
[truncated — 11651 more characters]
```

### package.json

```
{
  "name": "smartrecycling",
  "version": "1.0.0",
  "description": "",
  "main": "server.js",
  "scripts":
  {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node server.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies":
  {
    "express": "^4.17.1"
  }
}

```

### Package.json

```
{
  "_from": "raw-body@2.4.0",
  "_id": "raw-body@2.4.0",
  "_inBundle": false,
  "_integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
  "_location": "/raw-body",
  "_phantomChildren": {},
  "_requested": {
    "type": "version",
    "registry": true,
    "raw": "raw-body@2.4.0",
    "name": "raw-body",
    "escapedName": "raw-body",
    "rawSpec": "2.4.0",
    "saveSpec": null,
    "fetchSpec": "2.4.0"
  },
  "_requiredBy": [
    "/body-parser"
  ],
  "_resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
  "_shasum": "a1ce6fb9c9bc356ca52e89256ab59059e13d0332",
  "_spec": "raw-body@2.4.0",
  "_where": "C:\\Users\\Uri\\Desktop\\SmartRecycling\\node_modules\\body-parser",
  "author": {
    "name": "Jonathan Ong",
    "email": "me@jongleberry.com",
    "url": "http://jongleberry.com"
  },
  "bugs": {
    "url": "https://github.com/stream-utils/raw-body/issues"
  },
  "bundleDependencies": false,
  "contributors": [
    {
      "name": "Douglas Christopher Wilson",
      "email": "doug@somethingdoug.com"
    },
    {
      "name": "Raynos",
      "email": "raynos2@gmail.com"
    }
  ],
  "dependencies": {
    "bytes": "3.1.0",
    "http-errors": "1.7.2",
    "iconv-lite": "0.4.24",
    "unpipe": "1.0.0"
  },
  "deprecated": false,
  "description": "Get and validate the raw body of a readable stream.",
  "devDependencies": {
    "bluebird": "3.5.4",
    "eslint": "5.16.0",
    "eslint-config-standard": "12.0.0",
    "eslint-plugin-import": "2.16.0",
    "eslint-plugin-markdown": "1.0.0",
    "eslint-plugin-node": "8.0.1",
    "eslint-plugin-promise": "4.1.1",
    "eslint-plugin-standard": "4.0.0",
    "istanbul": "0.4.5",
    "mocha": "6.1.3",
    "readable-stream": "2.3.6",
    "safe-buffer": "5.1.2"
  },
  "engines": {
    "node": ">= 0.8"
  },
  "files": [
    "HISTORY.md",
    "LICENSE",
    "README.md",
    "index.d.ts",
    "index.js"
  ],
  "homepage": "https://github.com/stream-utils/raw-body#readme",
  "license": "MIT",
  "name": "raw-body",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/stream-utils/raw-body.git"
  },
  "scripts": {
    "lint": "eslint --plugin markdown --ext js,md .",
    "test": "mocha --trace-deprecation --reporter spec --bail --check-leaks test/",
    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --trace-deprecation --reporter dot --check-leaks test/",
    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --trace-deprecation --reporter spec --check-leaks test/"
  },
  "version": "2.4.0"
}

```

### server.js

```javascript
// server to respond to a request
const express = require('express');
const http = require('http');
const app = express();
const server = http.createServer(app);

// server will always find an open port
const port = process.env.PORT || 3001;
server.listen(port, '0.0.0.0', () => 
{
    console.log('Server is running on port: ', port);
});

// send content
app.get('/', (req, res) => 
{
    res.sendFile(__dirname + "/public/index.html");
});

app.post('/insertData', (req, res) => 
{
    const params = req.body;
    iceCreams.push(params.flavor);
    res.redirect('/');
});

app.get('/getData', (req, res) => 
{
    res.send(iceCreams.toString());
});

```

### index.js

```javascript
/*!
 * accepts
 * Copyright(c) 2014 Jonathan Ong
 * Copyright(c) 2015 Douglas Christopher Wilson
 * MIT Licensed
 */

'use strict'

/**
 * Module dependencies.
 * @private
 */

var Negotiator = require('negotiator')
var mime = require('mime-types')

/**
 * Module exports.
 * @public
 */

module.exports = Accepts

/**
 * Create a new Accepts object for the given req.
 *
 * @param {object} req
 * @public
 */

function Accepts (req) {
  if (!(this instanceof Accepts)) {
    return new Accepts(req)
  }

  this.headers = req.headers
  this.negotiator = new Negotiator(req)
}

/**
 * Check if the given `type(s)` is acceptable, returning
 * the best match when true, otherwise `undefined`, in which
 * case you should respond with 406 "Not Acceptable".
 *
 * The `type` value may be a single mime type string
 * such as "application/json", the extension name
 * such as "json" or an array `["json", "html", "text/plain"]`. When a list
 * or array is given the _best_ match, if any is returned.
 *
 * Examples:
 *
 *     // Accept: text/html
 *     this.types('html');
 *     // => "html"
 *
 *     // Accept: text/*, application/json
 *     this.types('html');
 *     // => "html"
 *     this.types('text/html');
 *     // => "text/html"
 *     this.types('json', 'text');
 *     // => "json"
 *     this.types('application/json');
 *     // => "application/json"
 *
 *     // Accept: text/*, application/json
 *     this.types('image/png');
 *     this.types('png');
 *     // => undefined
 *
 *     // Accept: text/*;q=.5, application/json
 *     this.types(['html', 'json']);
 *     this.types('html', 'json');
 *     // => "json"
 *
 * @param {String|Array} types...
 * @return {String|Array|Boolean}
 * @public
 */

Accepts.prototype.type =
Accepts.prototype.types = function (types_) {
  var types = types_

  // support flattened arguments
  if (types && !Array.isArray(types)) {
    types = new Array(arguments.length)
    for (var i = 0; i < types.length; i++) {
      types[i] = arguments[i]
    }
  }

  // no types, return all requested types
  if (!types || types.length === 0) {
    return this.negotiator.mediaTypes()
  }

  // no accept header, return first given type
  if (!this.headers.accept) {
    return types[0]
  }

  var mimes = types.map(extToMime)
  var accepts = this.negotiator.mediaTypes(mimes.filter(validMime))
  var first = accepts[0]

  return first
    ? types[mimes.indexOf(first)]
    : false
}

/**
 * Return accepted encodings or best fit based on `encodings`.
 *
 * Given `Accept-Encoding: gzip, deflate`
 * an array sorted by quality is returned:
 *
 *     ['gzip', 'deflate']
 *
 * @param {String|Array} encodings...
 * @return {String|Array}
 * @public
 */

Accepts.prototype.encoding =
Accepts.prototype.encodings = function (encodings_) {
  var encodings = encodings_

  // support flattened arguments
  if (encodings && !Array.isArray(encodings)) {
    encodings = new Array(arguments.length)
    for (var i = 0; i < encodings.length; i++) {
      encodings[i] = arguments[i]
    }
  }

  // no encodings, return all requested encodings
  if (!encodings || encodings.length === 0) {
    return this.negotiator.encodings()
  }

  return this.negotiator.encodings(encodings)[0] || false
}

/**
 * Return accepted charsets or best fit based on `charsets`.
 *
 * Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5`
 * an array sorted by quality is returned:
 *
 *     ['utf-8', 'utf-7', 'iso-8859-1']
 *
 * @param {String|Array} charsets...
 * @return {String|Array}
 * @public
 */

Accepts.prototype.charset =
Accepts.prototype.charsets = function (charsets_) {
  var charsets = charsets_

  // support flattened arguments
  if (charsets && !Array.isArray(charsets)) {
    charsets = new Array(arguments.length)
    for (var i = 0; i < charsets.length; i++) {
      charsets[i] = arguments[i]
    }
  }

  // no charsets, return all requested charsets
  if (!charsets || charsets.length === 0) {
    return this.negotiator.charsets()
  }

  return this.negotiator.charsets(charsets)[0] || false
}

/**
 * Return accepted languages or best fit based on `langs`.
 *
 * Given `Accept-Language: en;q=0.8, es, pt`
 * an array sorted by quality is returned:
 *
 *     ['es', 'pt', 'en']
 *
 * @param {String|Array} langs...
 * @return {Array|String}
 * @public
 */

Accepts.prototype.lang =
Accepts.prototype.langs =
Accepts.prototype.language =
Accepts.prototype.languages = function (languages_) {
  var languages = languages_

  // support flattened arguments
  if (languages && !Array.isArray(languages)) {
    languages = new Array(arguments.length)
    for (var i = 0; i < languages.length; i++) {
      languages[i] = arguments[i]
    }
  }

  // no languages, return all requested languages
  if (!languages || languages.length === 0) {
    return this.negotiator.languages()
  }

  return this.negotiator.languages(languages)[0] || false
}

/**
 * Convert extnames to mime.
 *
 * @param {String} type
 * @return {String}
 * @private
 */

function extToMime (type) {
  return type.indexOf('/') === -1
    ? mime.lookup(type)
    : type
}

/**
 * Check if mime is valid.
 *
 * @param {String} type
 * @return {String}
 * @private
 */

function validMime (type) {
  return typeof type === 'string'
}

```

### formats.js

```javascript
'use strict';

var replace = String.prototype.replace;
var percentTwenties = /%20/g;

module.exports = {
    'default': 'RFC3986',
    formatters: {
        RFC1738: function (value) {
            return replace.call(value, percentTwenties, '+');
        },
        RFC3986: function (value) {
            return value;
        }
    },
    RFC1738: 'RFC1738',
    RFC3986: 'RFC3986'
};

```

### array-flatten.js

```javascript
'use strict'

/**
 * Expose `arrayFlatten`.
 */
module.exports = arrayFlatten

/**
 * Recursive flatten function with depth.
 *
 * @param  {Array}  array
 * @param  {Array}  result
 * @param  {Number} depth
 * @return {Array}
 */
function flattenWithDepth (array, result, depth) {
  for (var i = 0; i < array.length; i++) {
    var value = array[i]

    if (depth > 0 && Array.isArray(value)) {
      flattenWithDepth(value, result, depth - 1)
    } else {
      result.push(value)
    }
  }

  return result
}

/**
 * Recursive flatten function. Omitting depth is slightly faster.
 *
 * @param  {Array} array
 * @param  {Array} result
 * @return {Array}
 */
function flattenForever (array, result) {
  for (var i = 0; i < array.length; i++) {
    var value = array[i]

    if (Array.isArray(value)) {
      flattenForever(value, result)
    } else {
      result.push(value)
    }
  }

  return result
}

/**
 * Flatten an array, with the ability to define a depth.
 *
 * @param  {Array}  array
 * @param  {Number} depth
 * @return {Array}
 */
function arrayFlatten (array, depth) {
  if (depth == null) {
    return flattenForever(array, [])
  }

  return flattenWithDepth(array, [], depth)
}

```

### index.html

```html
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title> Home Page </title>
        <link type="text/css" rel="stylesheet" href="styles.css">
    </head>
    <body>
        <h1> Welcome to yourTA! </h1>
        <form action="/insertData" method="POST">
            <p>View Recycling Data by UC Campus</p>
            
            <form action="/San Diego" method="GET">
                <input type="submit" value="San Diego"/>

            <form action="/Berkeley" method="GET">
                <input type="submit" value="Berkeley"/>

            <form action="/Santa Cruz" method="GET">
                <input type="submit" value="Santa Cruz"/>

            <form action="/Riverside" method="GET">
                <input type="submit" value="Riverside"/>

            <form action="/Los Angeles" method="GET">
                <input type="submit" value="Los Angeles"/>

            <form action="/Merced" method="GET">
                <input type="submit" value="Merced"/>

            <form action="/Santa Barbara" method="GET">
                <input type="submit" value="Santa Barbara"/>

            <form action="/Davis" method="GET">
                <input type="submit" value="Davis"/>
            
            <form action="/Irvine" method="GET">
                <input type="submit" value="Irvine"/>

        </form>

        <form action="/count" method="GET">
            <h2> Realtime Analysis (Average): </h2>
            <pre><p>UCSD:   514 inputs/hr</p></pre>
            <pre><p>UCB:    417 inputs/hr</p></pre>
            <pre><p>UCSC:   249 inputs/hr</p></pre>
            <pre><p>UCR:    248 inputs/hr</p></pre>
            <pre><p>UCLA:   571 inputs/hr</p></pre>
            <pre><p>UCM:    187 inputs/hr</p></pre>
            <pre><p>UCSB:   301 inputs/hr</p></pre>
            <pre><p>UCD:    287 inputs/hr</p></pre>
            <pre><p>UCI:    452 inputs/hr</p></pre>
            
        </form>

        <form action="/View UC Leaderboard" method="GET">
            <h2> Overall Recycling Grades </h2>
            <input type="submit" value="View UC Leaderboard"/>
        </form>
    </body>
</html>

```

### package.js

```javascript
{
  "_from": "accepts@~1.3.7",
  "_id": "accepts@1.3.7",
  "_inBundle": false,
  "_integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
  "_location": "/accepts",
  "_phantomChildren": {},
  "_requested": {
    "type": "range",
    "registry": true,
    "raw": "accepts@~1.3.7",
    "name": "accepts",
    "escapedName": "accepts",
    "rawSpec": "~1.3.7",
    "saveSpec": null,
    "fetchSpec": "~1.3.7"
  },
  "_requiredBy": [
    "/express"
  ],
  "_resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
  "_shasum": "531bc726517a3b2b41f850021c6cc15eaab507cd",
  "_spec": "accepts@~1.3.7",
  "_where": "C:\\Users\\Uri\\Desktop\\SmartRecycling\\node_modules\\express",
  "bugs": {
    "url": "https://github.com/jshttp/accepts/issues"
  },
  "bundleDependencies": false,
  "contributors": [
    {
      "name": "Douglas Christopher Wilson",
      "email": "doug@somethingdoug.com"
    },
    {
      "name": "Jonathan Ong",
      "email": "me@jongleberry.com",
      "url": "http://jongleberry.com"
    }
  ],
  "dependencies": {
    "mime-types": "~2.1.24",
    "negotiator": "0.6.2"
  },
  "deprecated": false,
  "description": "Higher-level content negotiation",
  "devDependencies": {
    "deep-equal": "1.0.1",
    "eslint": "5.16.0",
    "eslint-config-standard": "12.0.0",
    "eslint-plugin-import": "2.17.2",
    "eslint-plugin-markdown": "1.0.0",
    "eslint-plugin-node": "8.0.1",
    "eslint-plugin-promise": "4.1.1",
    "eslint-plugin-standard": "4.0.0",
    "mocha": "6.1.4",
    "nyc": "14.0.0"
  },
  "engines": {
    "node": ">= 0.6"
  },
  "files": [
    "LICENSE",
    "HISTORY.md",
    "index.js"
  ],
  "homepage": "https://github.com/jshttp/accepts#readme",
  "keywords": [
    "content",
    "negotiation",
    "accept",
    "accepts"
  ],
  "license": "MIT",
  "name": "accepts",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/jshttp/accepts.git"
  },
  "scripts": {
    "lint": "eslint --plugin markdown --ext js,md .",
    "test": "mocha --reporter spec --check-leaks --bail test/",
    "test-cov": "nyc --reporter=html --reporter=text npm test",
    "test-travis": "nyc --reporter=text npm test"
  },
  "version": "1.3.7"
}

```

[5 more indexed source files omitted to keep this export small. The full file list is in the Codebase structure section above.]