From a3950f2bc3b8ca37c159d26aa844407a2d83a5e7 Mon Sep 17 00:00:00 2001 From: "github-classroom[bot]" <66690702+github-classroom[bot]@users.noreply.github.com> Date: Wed, 20 Jul 2022 13:18:10 +0000 Subject: [PATCH 01/82] Setting up GitHub Classroom Feedback From 284665724fd6b3950d6740504dc219a687c9410f Mon Sep 17 00:00:00 2001 From: N-LEE-94 Date: Tue, 26 Jul 2022 10:53:10 +0100 Subject: [PATCH 02/82] set up initial backend files, create and delete scripts --- .gitignore | 4 + app.js | 0 db/index.js | 11 + db/scripts/createTable.js | 15 + db/scripts/deleteTable.js | 5 + db/scripts/populateTable.js | 0 index.js | 0 package-lock.json | 2013 +++++++++++++++++++++++++++++++++++ package.json | 33 + 9 files changed, 2081 insertions(+) create mode 100644 .gitignore create mode 100644 app.js create mode 100644 db/index.js create mode 100644 db/scripts/createTable.js create mode 100644 db/scripts/deleteTable.js create mode 100644 db/scripts/populateTable.js create mode 100644 index.js create mode 100644 package-lock.json create mode 100644 package.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fc03b07 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.env +node_modules +.DS_Store + diff --git a/app.js b/app.js new file mode 100644 index 0000000..e69de29 diff --git a/db/index.js b/db/index.js new file mode 100644 index 0000000..c63dc24 --- /dev/null +++ b/db/index.js @@ -0,0 +1,11 @@ +import pg from 'pg'; +const connectionString = process.env.PGURI; + +const pool = new pg.Pool({connectionString, ssl: {rejectUnauthorized: false}}); + +export default function query(text, params, callback) { + return pool.query(text, params, callback) +}; + +// Checks that query is a-ok. +// console.log(await query("SELECT NOW()")) \ No newline at end of file diff --git a/db/scripts/createTable.js b/db/scripts/createTable.js new file mode 100644 index 0000000..ec9a259 --- /dev/null +++ b/db/scripts/createTable.js @@ -0,0 +1,15 @@ +import query from "../index.js"; + +const sqlString = `CREATE TABLE IF NOT EXISTS produce +(id SERIAL PRIMARY KEY, +name TEXT, +imageURL TEXT, +description TEXT, +family TEXT, +foodType TEXT, +usedAs TEXT, +month TEXT [], +allergens TEXT +);` + +await query(sqlString); \ No newline at end of file diff --git a/db/scripts/deleteTable.js b/db/scripts/deleteTable.js new file mode 100644 index 0000000..1737f6f --- /dev/null +++ b/db/scripts/deleteTable.js @@ -0,0 +1,5 @@ +import query from "../index.js"; + +const sqlString = `DROP TABLE IF EXISTS produce` + +await query(sqlString); \ No newline at end of file diff --git a/db/scripts/populateTable.js b/db/scripts/populateTable.js new file mode 100644 index 0000000..e69de29 diff --git a/index.js b/index.js new file mode 100644 index 0000000..e69de29 diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..3a60a82 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2013 @@ +{ + "name": "final-project_back-end-12", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "dependencies": { + "cors": "^2.8.5", + "dotenv": "^16.0.1", + "express": "^4.18.1", + "pg": "^8.7.3" + }, + "devDependencies": { + "nodemon": "^2.0.19" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "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/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "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/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/body-parser": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "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.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/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/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer-writer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", + "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", + "engines": { + "node": ">=4" + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "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.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "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/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "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/dotenv": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz", + "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==", + "engines": { + "node": ">=12" + } + }, + "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/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.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.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.10.3", + "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/express/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/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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/finalhandler/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/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "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/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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/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/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, + "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/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "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/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "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/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/nodemon": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.19.tgz", + "integrity": "sha512-4pv1f2bMDj0Eeg/MhGqxrtveeQ5/G/UVe9iO6uTZzjnRluSA4PVWf8CW99LUPwGB3eNIA7zUFoP77YuI7hOc0A==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "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/packet-reader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", + "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" + }, + "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/pg": { + "version": "8.7.3", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.7.3.tgz", + "integrity": "sha512-HPmH4GH4H3AOprDJOazoIcpI49XFsHCe8xlrjHkWiapdbHK+HLtbm/GQzXYAZwmPju/kzKhjaSfMACG+8cgJcw==", + "dependencies": { + "buffer-writer": "2.0.0", + "packet-reader": "1.0.0", + "pg-connection-string": "^2.5.0", + "pg-pool": "^3.5.1", + "pg-protocol": "^1.5.0", + "pg-types": "^2.1.0", + "pgpass": "1.x" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "pg-native": ">=2.0.0" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-connection-string": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", + "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-pool": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.1.tgz", + "integrity": "sha512-6iCR0wVrro6OOHFsyavV+i6KYL4lVNyYAB9RD18w66xSzN+d8b66HiwuP30Gp1SH5O9T82fckkzsRjlrhD0ioQ==", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz", + "integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "dependencies": { + "split2": "^4.1.0" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "node_modules/qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "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.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "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/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "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/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "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/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/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "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/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.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/simple-update-notifier": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", + "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", + "dev": true, + "dependencies": { + "semver": "~7.0.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/split2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", + "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==", + "engines": { + "node": ">= 10.x" + } + }, + "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/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "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/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "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/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "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/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" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + } + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "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==", + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "body-parser": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "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.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "buffer-writer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", + "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==" + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "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==", + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + }, + "dotenv": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz", + "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==" + }, + "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==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, + "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==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + }, + "express": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.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.10.3", + "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" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "requires": { + "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" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "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==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "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==" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "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==" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "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==", + "requires": { + "mime-db": "1.52.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + }, + "nodemon": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.19.tgz", + "integrity": "sha512-4pv1f2bMDj0Eeg/MhGqxrtveeQ5/G/UVe9iO6uTZzjnRluSA4PVWf8CW99LUPwGB3eNIA7zUFoP77YuI7hOc0A==", + "dev": true, + "requires": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, + "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==", + "requires": { + "ee-first": "1.1.1" + } + }, + "packet-reader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", + "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "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==" + }, + "pg": { + "version": "8.7.3", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.7.3.tgz", + "integrity": "sha512-HPmH4GH4H3AOprDJOazoIcpI49XFsHCe8xlrjHkWiapdbHK+HLtbm/GQzXYAZwmPju/kzKhjaSfMACG+8cgJcw==", + "requires": { + "buffer-writer": "2.0.0", + "packet-reader": "1.0.0", + "pg-connection-string": "^2.5.0", + "pg-pool": "^3.5.1", + "pg-protocol": "^1.5.0", + "pg-types": "^2.1.0", + "pgpass": "1.x" + } + }, + "pg-connection-string": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", + "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" + }, + "pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==" + }, + "pg-pool": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.1.tgz", + "integrity": "sha512-6iCR0wVrro6OOHFsyavV+i6KYL4lVNyYAB9RD18w66xSzN+d8b66HiwuP30Gp1SH5O9T82fckkzsRjlrhD0ioQ==", + "requires": {} + }, + "pg-protocol": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz", + "integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==" + }, + "pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "requires": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + } + }, + "pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "requires": { + "split2": "^4.1.0" + } + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==" + }, + "postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==" + }, + "postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==" + }, + "postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "requires": { + "xtend": "^4.0.0" + } + }, + "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==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "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==" + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "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==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "requires": { + "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" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + } + } + }, + "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==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "simple-update-notifier": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", + "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", + "dev": true, + "requires": { + "semver": "~7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "split2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", + "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "requires": { + "nopt": "~1.0.10" + } + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + }, + "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==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..de48b05 --- /dev/null +++ b/package.json @@ -0,0 +1,33 @@ +{ + "dependencies": { + "cors": "^2.8.5", + "dotenv": "^16.0.1", + "express": "^4.18.1", + "pg": "^8.7.3" + }, + "devDependencies": { + "nodemon": "^2.0.19" + }, + "name": "final-project_back-end-12", + "description": "[![Open in Visual Studio Code](https://classroom.github.com/assets/open-in-vscode-c66648af7eb3fe8bc4f294546bfd86ef473780cde1dea487d3c4ff354943c9ae.svg)](https://classroom.github.com/online_ide?assignment_repo_id=8143654&assignment_repo_type=AssignmentRepo)\r # final-project_back-end", + "version": "1.0.0", + "main": "index.js", + "type": "module", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "dbtest": "node -r dotenv/config ./db/index.js", + "createTable": "node -r dotenv/config ./db/scripts/createTable.js", + "dropTable": "node -r dotenv/config ./db/scripts/deleteTable.js" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/SchoolOfCode/final-project_back-end-12.git" + }, + "keywords": [], + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/SchoolOfCode/final-project_back-end-12/issues" + }, + "homepage": "https://github.com/SchoolOfCode/final-project_back-end-12#readme" +} From 047074134820966facbb5254f80ec4e6e87084cf Mon Sep 17 00:00:00 2001 From: fiona Date: Tue, 26 Jul 2022 11:23:07 +0100 Subject: [PATCH 03/82] added express on port 4000 --- app.js | 17 +++++++++++++++++ package-lock.json | 4 ++++ package.json | 5 +++-- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/app.js b/app.js index e69de29..146b65b 100644 --- a/app.js +++ b/app.js @@ -0,0 +1,17 @@ +import express from 'express' +import cors from 'cors' + +const PORT=4000 + + +const app = express() + + +app.use(cors()) +app.use(express.json()) + +app.get('/', (req, res) => { + res.send('hello world') +}) + +app.listen(`${PORT}`) \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 3a60a82..1aab5bf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,9 +1,13 @@ { "name": "final-project_back-end-12", + "version": "1.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { + "name": "final-project_back-end-12", + "version": "1.0.0", + "license": "ISC", "dependencies": { "cors": "^2.8.5", "dotenv": "^16.0.1", diff --git a/package.json b/package.json index de48b05..c959e5d 100644 --- a/package.json +++ b/package.json @@ -17,8 +17,9 @@ "test": "echo \"Error: no test specified\" && exit 1", "dbtest": "node -r dotenv/config ./db/index.js", "createTable": "node -r dotenv/config ./db/scripts/createTable.js", - "dropTable": "node -r dotenv/config ./db/scripts/deleteTable.js" - }, + "dropTable": "node -r dotenv/config ./db/scripts/deleteTable.js", + "start":"nodemon -r dotenv/config ./app.js " +}, "repository": { "type": "git", "url": "git+https://github.com/SchoolOfCode/final-project_back-end-12.git" From d3d69cdf4c25650e52a4678018f7dafe3c6ef88e Mon Sep 17 00:00:00 2001 From: fiona Date: Tue, 26 Jul 2022 12:05:53 +0100 Subject: [PATCH 04/82] added populate table script, dummy data and a reset script --- db/dummyData.js | 36 ++++++++++++++++++++++++++++++++++++ db/scripts/populateTable.js | 23 +++++++++++++++++++++++ package.json | 4 +++- 3 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 db/dummyData.js diff --git a/db/dummyData.js b/db/dummyData.js new file mode 100644 index 0000000..f6085dd --- /dev/null +++ b/db/dummyData.js @@ -0,0 +1,36 @@ + + const dummyProduce= [{ + foodName: "Banana", + imageURL: "https://images.immediate.co.uk/production/volatile/sites/30/2020/02/bananas-d5a7b4c.jpg?webp=true&quality=90&resize=277%2C251", + description: "Bananas are a popular tropical fruit that can be eaten on their own or incorporated into cooking. Find out how to select, store, prepare and cook with bananas", + family: "Musaceae", + foodType: "fruit", + usedAs: "fruit", + month:["jan","feb","march","april","may","june","july","august","sept","oct","nov","dec"], + allergens: "none"}, + { + foodName: "carrot", + imageURL: "https://images.immediate.co.uk/production/volatile/sites/30/2020/02/carrot_0-125e0c9.jpg?webp=true&quality=90&resize=408%2C370", + description: "The carrot, with its distinctive bright orange colour, is one of the most versatile root vegetables around – a result of its sweet flavour, which means it can be used raw or cooked, in sweet or savoury dishes.", + family: "Apiaceae" , + foodType: "vegetable", + usedAs: "vegetable", + month: ["may","june","july","august","sept"], + allergens: "none" + } + , + { + foodName: "aubergine", + imageURL: "https://images.immediate.co.uk/production/volatile/sites/30/2020/02/aubergine-356f89b.jpg?webp=true&quality=90&resize=408%2C370", + description: "Although it’s technically a fruit (a berry, to be exact), the aubergine is used as a vegetable. ", + family: "berry", + foodType: "fruit", + usedAs: "vegetable", + month:["may","june","july","august","sept","oct"], + allergens: "nightshade" + }, + +] + +export default dummyProduce + diff --git a/db/scripts/populateTable.js b/db/scripts/populateTable.js index e69de29..8532ed6 100644 --- a/db/scripts/populateTable.js +++ b/db/scripts/populateTable.js @@ -0,0 +1,23 @@ +import query from "../index.js"; +import dummyProduce from "../dummyData.js"; + + +for (let i=0; i Date: Tue, 26 Jul 2022 12:21:19 +0100 Subject: [PATCH 05/82] adding procfile to help with deployment --- procfile | 1 + 1 file changed, 1 insertion(+) create mode 100644 procfile diff --git a/procfile b/procfile new file mode 100644 index 0000000..2158c7a --- /dev/null +++ b/procfile @@ -0,0 +1 @@ +web: node ./app. \ No newline at end of file From e3d6dc9f98a6ff64d637a589f82111553fbdf20e Mon Sep 17 00:00:00 2001 From: N-LEE-94 Date: Tue, 26 Jul 2022 12:25:17 +0100 Subject: [PATCH 06/82] changed script --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 39d41c9..da4f312 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "populateTable": "node -r dotenv/config ./db/scripts/populateTable.js", "dropTable": "node -r dotenv/config ./db/scripts/deleteTable.js", "reset":"npm run dropTable && npm run createTable && npm run populateTable", - "start":"nodemon -r dotenv/config ./app.js " + "start":"node -r dotenv/config ./app.js " }, "repository": { "type": "git", From 741637ab328930ccf685b982a49174c63a3845cb Mon Sep 17 00:00:00 2001 From: N-LEE-94 Date: Tue, 26 Jul 2022 13:23:54 +0100 Subject: [PATCH 07/82] testing spacing in procfile --- package.json | 2 +- procfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index da4f312..b054a35 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "populateTable": "node -r dotenv/config ./db/scripts/populateTable.js", "dropTable": "node -r dotenv/config ./db/scripts/deleteTable.js", "reset":"npm run dropTable && npm run createTable && npm run populateTable", - "start":"node -r dotenv/config ./app.js " + "start":"node -r dotenv/config .git /app.js " }, "repository": { "type": "git", diff --git a/procfile b/procfile index 2158c7a..9b1ef5b 100644 --- a/procfile +++ b/procfile @@ -1 +1 @@ -web: node ./app. \ No newline at end of file +web:node ./app.js \ No newline at end of file From a37b767d38503f2d8aeb302817b61bf33d48b559 Mon Sep 17 00:00:00 2001 From: N-LEE-94 Date: Tue, 26 Jul 2022 13:32:08 +0100 Subject: [PATCH 08/82] changed start script --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b054a35..da4f312 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "populateTable": "node -r dotenv/config ./db/scripts/populateTable.js", "dropTable": "node -r dotenv/config ./db/scripts/deleteTable.js", "reset":"npm run dropTable && npm run createTable && npm run populateTable", - "start":"node -r dotenv/config .git /app.js " + "start":"node -r dotenv/config ./app.js " }, "repository": { "type": "git", From ae7593b1a505ce2d75f02f14749cee34e7be8835 Mon Sep 17 00:00:00 2001 From: N-LEE-94 Date: Tue, 26 Jul 2022 13:55:31 +0100 Subject: [PATCH 09/82] fixing deploy issues, port thing --- app.js | 2 +- package.json | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app.js b/app.js index 146b65b..436a21c 100644 --- a/app.js +++ b/app.js @@ -1,7 +1,7 @@ import express from 'express' import cors from 'cors' -const PORT=4000 +const PORT= process.env.PORT || 4000 const app = express() diff --git a/package.json b/package.json index da4f312..cce856e 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,8 @@ "populateTable": "node -r dotenv/config ./db/scripts/populateTable.js", "dropTable": "node -r dotenv/config ./db/scripts/deleteTable.js", "reset":"npm run dropTable && npm run createTable && npm run populateTable", - "start":"node -r dotenv/config ./app.js " + "start":"node ./app.js" + }, "repository": { "type": "git", From f77d597ab30b8e54dfe2a128feba9cbb8e647a94 Mon Sep 17 00:00:00 2001 From: fiona Date: Tue, 26 Jul 2022 14:18:32 +0100 Subject: [PATCH 10/82] made some folders- models and routes --- PLAN.md | 3 +++ index.js => models/index.js | 0 routes/index.js | 12 ++++++++++++ 3 files changed, 15 insertions(+) create mode 100644 PLAN.md rename index.js => models/index.js (100%) create mode 100644 routes/index.js diff --git a/PLAN.md b/PLAN.md new file mode 100644 index 0000000..4898424 --- /dev/null +++ b/PLAN.md @@ -0,0 +1,3 @@ +- crud routes +- models +- get by name and get by season, get all \ No newline at end of file diff --git a/index.js b/models/index.js similarity index 100% rename from index.js rename to models/index.js diff --git a/routes/index.js b/routes/index.js new file mode 100644 index 0000000..af45ef4 --- /dev/null +++ b/routes/index.js @@ -0,0 +1,12 @@ +import express from 'express' + +const router= express.Router() + + +router.get('/') + +router.post + +router.patch + +router.delete \ No newline at end of file From b6995df9f6e6779cfbb1ed0c4bea150417ced6a2 Mon Sep 17 00:00:00 2001 From: N-LEE-94 Date: Tue, 26 Jul 2022 14:30:24 +0100 Subject: [PATCH 11/82] did a get --- app.js | 3 +++ models/index.js | 6 ++++++ routes/index.js | 16 ++++++++++++---- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/app.js b/app.js index 436a21c..13b06da 100644 --- a/app.js +++ b/app.js @@ -1,5 +1,6 @@ import express from 'express' import cors from 'cors' +import router from './routes/index.js' const PORT= process.env.PORT || 4000 @@ -10,6 +11,8 @@ const app = express() app.use(cors()) app.use(express.json()) +app.use("/produce", router) + app.get('/', (req, res) => { res.send('hello world') }) diff --git a/models/index.js b/models/index.js index e69de29..273dac8 100644 --- a/models/index.js +++ b/models/index.js @@ -0,0 +1,6 @@ +import query from "../db/index.js"; + +export function getAll() { + let res = await query(`SELECT * FROM produce`) + return res.rows +} \ No newline at end of file diff --git a/routes/index.js b/routes/index.js index af45ef4..c744243 100644 --- a/routes/index.js +++ b/routes/index.js @@ -1,12 +1,20 @@ import express from 'express' +import { getAll } from '../models/index.js'; const router= express.Router() -router.get('/') +router.get('/', async function(req, res) { + let result = await getAll(); + return res.json({success: true, payload: result}); -router.post -router.patch +}) -router.delete \ No newline at end of file +// router.post + +// router.patch + +// router.delete + +export default router; \ No newline at end of file From c5511c4dbfbc22720cf898b235049959d202ca07 Mon Sep 17 00:00:00 2001 From: fiona Date: Tue, 26 Jul 2022 14:37:29 +0100 Subject: [PATCH 12/82] added an async --- models/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/index.js b/models/index.js index 273dac8..32fb667 100644 --- a/models/index.js +++ b/models/index.js @@ -1,6 +1,6 @@ import query from "../db/index.js"; -export function getAll() { +export async function getAll() { let res = await query(`SELECT * FROM produce`) return res.rows } \ No newline at end of file From a8632449e50033abe4abe03e23f6c9e6b6cc6de3 Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Tue, 26 Jul 2022 14:47:29 +0100 Subject: [PATCH 13/82] Initialised back-end docs. --- README.md | 163 +++++++++++++++++++++++++++++++++++++++++++++- package-lock.json | 4 ++ 2 files changed, 165 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7d4f353..a53f047 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,161 @@ -[![Open in Visual Studio Code](https://classroom.github.com/assets/open-in-vscode-c66648af7eb3fe8bc4f294546bfd86ef473780cde1dea487d3c4ff354943c9ae.svg)](https://classroom.github.com/online_ide?assignment_repo_id=8143654&assignment_repo_type=AssignmentRepo) -# final-project_back-end \ No newline at end of file +# 12\*\* Seasonality App: Back-End Documentation + +This repository holds the back-end documentation for Team 12\*\* (Twelve Exponential) and their 'Seasonality' final project at the School of Code. TODO: INSERT AUTHOR DETAILS AND PROJECT DESCRIPTION HERE, AS WELL AS LINK TO FRONT-END. + +This documentation file is currently intended to primarily act as a reference point for members of the 12\*\* team, when interacting with the back-end half of the project. + +## Installation + +To install this repository on your local machine, fork or clone the repository from GitHub. To do this, you can run: + +``` +git clone https://github.com/SchoolOfCode/final-project_back-end-12.git +``` + +Or to fork, you can press the 'fork' button on this page, and follow the on-screen instructions. + +Once you have access to this repository on your local machine, change directory into the right folder: + +``` +cd final-project_back-end-12 +``` + +Once you are inside this directory, run: + +``` +npm i +``` + +This will install all the necessary dependencies. + +Referring to the `package.json` details, you will notice the following dependencies: dotenv, nodemon, cors, express, pg. TODO: FORMAT AND WORD THIS BETTER. + +You will also notice that `type` is set to `module` and that we are using ES6 import and export syntax. + +## Setting Up Your Environment + +After you have installed the project on your local machine, you will want to set up the necessary environment variables to connect the project to the database. + +To do this, create a `.env` file at the root level of the folder. + +Inside the root level, where 'loremipsum' is a variable representing your own credentials, save the following database credentials inside of the `.env` file: + +``` +PGURI=loremipsum +``` + +TODO: REWORD SECTION ON DATABASE. For our database, we are linked to Heroku. Nathan is the Data-Lord and has main access to the database and keys on his account for this project. + +## Back-End Structure + +Our server and our database are both hosted on Heroku, but on different instances. + +\*\*Server + +TODO: WRITE UP ABOUT THESE ONCE THEY'RE FIXED. + +## File Structure + +In the back-end repository, our files are structured as follows: + +- db + - index.js + - scripts + - createTable.js (the shape of our database can be found here for reference, creates produce table on database) + - deleteTable.js (deletes produce table from database) + - populateTable.js (populates produce table on database) + - dummyData.js (test data, used to make sure our scripts and database are working) + - data.js (not made yet, all data should be lowercase bar the 'description' which should be properly capitalised) +- routes +- app.js +- index.js +- .env +- .gitignore + +## Data Shape + +### Produce Table + +For the produce table, our data on the back-end is provided to the database as an array of objects. Each object represents one food entry, and is formatted as thus: + +``` +{ +foodName: string, +imageURL: string, +description: string, +family: string, +foodType: string, +usedAs: string, +month: string[], +allergens: string, +} +``` + +An example entry: + +``` +{ +name: "aubergine", +imageURL: "https://auberginepic.com" +description: "This is a description of an aubergine. This will be a longer piece of text. It will describe the following things: what the item is, what value it has nutritionally or if there are any allergens, what to make with it, and how to grow it." +family: "Nightshade" +foodType: "Berry" +usedAs: "Vegetable" +month: ["January", "February"] +allergens: "None" +} +``` + +A more verbose description of what each key-value pair should contain: + +``` +{ +name: The name of the food item, +imageURL: A URL for the image or graphic which represents the item, +description: A description - a few short paragraphs maximum - of the item, +family: The actual family of the item, eg. nightshade, mollusc, +usedAs: How a food is used, eg. tomato and aubergine would be “Vegetable” even though they're fruits, +month: The months it’s in season for, +allergens: Anything that is an allergen in the item. This value should come from one of the legally classified 14 +} +``` + +### Produce Table: 'Description' Example + +As a content-guide for how the 'description' segment of each object in our `produce` data should be organised, please see the below: + +
+ +**_The first paragraph should be a short description of the item._** Aubergines are a dark purple berry - though they’re functionally used as a vegetable - which are at their cheapest and highest quality in the shops from July to September. + +**_The second paragraph should mention any allergens or notable nutritional info._** They’re a good source of fibre, and are also low GI, so won’t raise your blood glucose levels. No allergens to aubergine are currently known; they are part of the nightshade family. + +**_The third paragraph should mention, broadly, how to cook with it._** You can grill, fry, griddle, barbecue and bake aubergines. They’re often added to dishes like curries and casseroles. Famous dishes using aubergine include ratatouille and moussaka, and they feature widely in Mediterranean cuisine. They have a mellow flavour that combines well with other ingredients. + +**_The fourth paragraph should briefly outline ideal growing conditions._** When grown, they like sunny and warm weather, and do best when grown in a greenhouse in the UK climate. + +
+ +## Routes + +Current routes: + +- "/" + +## Models + +Current models: + +- getAll + +## Other + +Please refer to Trello for all upcoming tickets related to this repository. + +For any needed credentials, TODO: add where to find credentials once we've sorted them out. + +# NOTES + +Our server and our database are both deployed on Heroku, but on different instances. + +TODO: Update when database and server are fixed. diff --git a/package-lock.json b/package-lock.json index 3a60a82..1aab5bf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,9 +1,13 @@ { "name": "final-project_back-end-12", + "version": "1.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { + "name": "final-project_back-end-12", + "version": "1.0.0", + "license": "ISC", "dependencies": { "cors": "^2.8.5", "dotenv": "^16.0.1", From f1e3cb04ec652313337544df680754e54bf6f1be Mon Sep 17 00:00:00 2001 From: Madison Lowe <101978552+madisonlowe@users.noreply.github.com> Date: Tue, 26 Jul 2022 17:38:40 +0100 Subject: [PATCH 14/82] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a53f047..d7cac0e 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ In the back-end repository, our files are structured as follows: - deleteTable.js (deletes produce table from database) - populateTable.js (populates produce table on database) - dummyData.js (test data, used to make sure our scripts and database are working) - - data.js (not made yet, all data should be lowercase bar the 'description' which should be properly capitalised) + - data.js (all data currently properly capitalised, so remember to make to lower or upper case when querying or displaying) - routes - app.js - index.js From 8b381b8b96d5ed780384dd7db4690836ea7fc557 Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Tue, 26 Jul 2022 18:42:40 +0100 Subject: [PATCH 15/82] Data.js initialised. --- db/data.js | 1318 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1318 insertions(+) create mode 100644 db/data.js diff --git a/db/data.js b/db/data.js new file mode 100644 index 0000000..724d4bb --- /dev/null +++ b/db/data.js @@ -0,0 +1,1318 @@ +/* Data drawn from https://www.bbcgoodfood.com/seasonal-calendar. If we want to make this a releasable API at some point in the future, will probably be worth making the data more comprehensive, but this'll do for now. */ + +/* +FIELDS TO FILL: +foodName DONE +imageURL DONE +description +family +foodType +usedAs +month DONE +allergens +*/ + +/* +TODO: ADD EASTER EGG LISTINGS. +*/ + +const produce = [ + { + foodName: "Apple", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jan", "feb", "sep", "oct", "nov", "dec"], + allergens: "none", + }, + { + foodName: "Apricot", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["may", "jun", "jul", "aug", "sep"], + allergens: "none", + }, + { + foodName: "Asparagus", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jun", "jul"], + allergens: "none", + }, + { + foodName: "Aubergine", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jun", "jul", "aug", "sep", "oct"], + allergens: "none", + }, + { + foodName: "Banana", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: [ + "jan", + "feb", + "mar", + "apr", + "may", + "jun", + "jul", + "aug", + "sep", + "oct", + "nov", + "dec", + ], + allergens: "none", + }, + { + foodName: "Basil", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jul", "aug"], + allergens: "none", + }, + { + foodName: "Beef", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: [ + "jan", + "feb", + "mar", + "apr", + "may", + "jun", + "jul", + "aug", + "sep", + "oct", + "nov", + "dec", + ], + allergens: "none", + }, + { + foodName: "Beetroot", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jan", "jul", "aug", "sep", "oct", "nov", "dec"], + allergens: "none", + }, + { + foodName: "Blackberry", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["aug", "sep", "oct"], + allergens: "none", + }, + { + foodName: "Blackcurrants", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jun", "jul"], + allergens: "none", + }, + { + foodName: "Bramley Apple", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jan", "feb", "mar", "dec"], + allergens: "none", + }, + { + foodName: "Broadbean", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jul", "aug", "sep"], + allergens: "none", + }, + { + foodName: "Broccoli", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["aug", "sep", "oct"], + allergens: "none", + }, + { + foodName: "Brussels Sprouts", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jan", "feb", "mar", "oct", "nov", "dec"], + allergens: "none", + }, + { + foodName: "Cabbage", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: [ + "jan", + "feb", + "mar", + "apr", + "may", + "jun", + "jul", + "aug", + "sep", + "oct", + "nov", + "dec", + ], + allergens: "none", + }, + { + foodName: "Carrot", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jun", "jul", "aug", "sep"], + allergens: "none", + }, + { + foodName: "Cauliflower", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jan", "feb", "mar", "apr"], + allergens: "none", + }, + { + foodName: "Cavolo Nero", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["july", "aug", "sep", "oct"], + allergens: "none", + }, + { + foodName: "Celeriac", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jan", "feb", "mar", "apr", "sep", "oct", "nov", "dec"], + allergens: "none", + }, + { + foodName: "Celery", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jan", "feb", "aug", "sep", "oct", "nov", "dec"], + allergens: "none", + }, + { + foodName: "Cherry", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jul"], + allergens: "none", + }, + { + foodName: "Chervil", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["may", "jun", "jul", "aug", "sep"], + allergens: "none", + }, + { + foodName: "Chestnut", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jan", "oct", "nov", "dec"], + allergens: "none", + }, + { + foodName: "Chicory", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jan", "feb", "mar"], + allergens: "none", + }, + { + foodName: "Clementine", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jan", "feb", "nov", "dec"], + allergens: "none", + }, + { + foodName: "Cod", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["feb", "mar", "apr"], + allergens: "none", + }, + { + foodName: "Courgette", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jun", "jul", "aug", "sep"], + allergens: "none", + }, + { + foodName: "Courgette Flower", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jun", "jul", "aug"], + allergens: "none", + }, + { + foodName: "Crab", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["apr", "may", "jun", "jul", "aug", "sep", "oct", "nov"], + allergens: "none", + }, + { + foodName: "Crab Apple", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["aug"], + allergens: "none", + }, + { + foodName: "Cranberry", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["oct", "nov", "dec"], + allergens: "none", + }, + { + foodName: "Damson", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["sep"], + allergens: "none", + }, + { + foodName: "Date", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jan", "nov", "dec"], + allergens: "none", + }, + { + foodName: "Duck", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["oct", "nov", "dec"], + allergens: "none", + }, + { + foodName: "Elderberries", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["aug", "sep", "oct"], + allergens: "none", + }, + { + foodName: "Fennel Bulb", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jun", "jul", "aug", "sep"], + allergens: "none", + }, + { + foodName: "Fig", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["aug", "sep", "oct"], + allergens: "none", + }, + { + foodName: "Garlic", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jul", "aug", "sep", "oct"], + allergens: "none", + }, + { + foodName: "Globe Artichoke", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jun", "jul", "aug", "sep", "oct", "nov"], + allergens: "none", + }, + { + foodName: "Goose", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jan", "sep", "oct", "nov", "dec"], + allergens: "none", + }, + { + foodName: "Gooseberry", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jun", "jul", "aug", "sep"], + allergens: "none", + }, + { + foodName: "Grapefruit", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jan", "feb", "mar", "apr", "may", "dec"], + allergens: "none", + }, + { + foodName: "Grouse", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["aug", "sep", "oct", "nov", "dec"], + allergens: "none", + }, + { + foodName: "Guinea Fowl", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["sep", "oct", "nov"], + allergens: "none", + }, + { + foodName: "Halibut", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["mar", "apr", "may", "jun", "jul", "aug", "sep"], + allergens: "none", + }, + { + foodName: "Jerusalem Artichoke", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jan", "feb", "mar", "nov", "dec"], + allergens: "none", + }, + { + foodName: "Kale", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jan", "feb", "oct", "nov", "dec"], + allergens: "none", + }, + { + foodName: "Kipper", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["may", "jun", "jul", "aug", "sep"], + allergens: "none", + }, + { + foodName: "Kohlrabi", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["aug", "sep", "oct", "nov"], + allergens: "none", + }, + { + foodName: "Lamb", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: [ + "jan", + "feb", + "mar", + "apr", + "may", + "jun", + "jul", + "aug", + "sep", + "oct", + "nov", + "dec", + ], + allergens: "none", + }, + { + foodName: "Lamb's Lettuce", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["may", "jun", "jul", "aug", "sep", "oct", "nov"], + allergens: "none", + }, + { + foodName: "Leek", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jan", "feb", "mar", "sep", "oct", "nov", "dec"], + allergens: "none", + }, + { + foodName: "Lemon", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jan", "feb", "mar"], + allergens: "none", + }, + { + foodName: "Lettuce", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"], + allergens: "none", + }, + { + foodName: "Loganberry", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["aug", "sep"], + allergens: "none", + }, + { + foodName: "Mackerel", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["may", "jun", "jul", "aug", "sep", "oct"], + allergens: "none", + }, + { + foodName: "Mangetout", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jun", "jul", "aug"], + allergens: "none", + }, + { + foodName: "Marrow", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["aug", "sep"], + allergens: "none", + }, + { + foodName: "Mint", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["may", "jun", "jul", "aug", "sep"], + allergens: "none", + }, + { + foodName: "Mussels", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jan", "feb", "mar", "oct", "nov", "dec"], + allergens: "none", + }, + { + foodName: "Nectarine", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["may", "jun", "jul", "aug", "sep"], + allergens: "none", + }, + { + foodName: "New Potatoes", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["apr", "may", "jun", "jul"], + allergens: "none", + }, + { + foodName: "Onion", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: [ + "jan", + "feb", + "mar", + "apr", + "may", + "jun", + "jul", + "aug", + "sep", + "oct", + "nov", + "dec", + ], + allergens: "none", + }, + { + foodName: "Orange", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jan", "feb", "mar"], + allergens: "none", + }, + { + foodName: "Oyster", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jan", "feb", "mar", "apr", "sep", "oct", "nov", "dec"], + allergens: "none", + }, + { + foodName: "Pak Choi", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: [ + "jan", + "feb", + "mar", + "apr", + "may", + "jun", + "jul", + "aug", + "sep", + "oct", + "nov", + "dec", + ], + allergens: "none", + }, + { + foodName: "Parsnip", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jan", "feb", "mar", "sep", "oct", "nov", "dec"], + allergens: "none", + }, + { + foodName: "Peach", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["aug", "sep"], + allergens: "none", + }, + { + foodName: "Pear", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jan", "sep", "oct", "nov", "dec"], + allergens: "none", + }, + { + foodName: "Peas", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov"], + allergens: "none", + }, + { + foodName: "Pepper", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["mar", "apr", "may", "jun", "jul", "aug", "sep", "oct"], + allergens: "none", + }, + { + foodName: "Plum", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["sep", "oct"], + allergens: "none", + }, + { + foodName: "Pomegranate", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: [ + "jan", + "feb", + "mar", + "apr", + "may", + "jun", + "jul", + "aug", + "sep", + "oct", + "nov", + "dec", + ], + allergens: "none", + }, + { + foodName: "Pork", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: [ + "jan", + "feb", + "mar", + "apr", + "may", + "jun", + "jul", + "aug", + "sep", + "oct", + "nov", + "dec", + ], + allergens: "none", + }, + { + foodName: "Potato", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["apr", "may", "jun", "jul"], + allergens: "none", + }, + { + foodName: "Pumpkin", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["oct", "nov", "dec"], + allergens: "none", + }, + { + foodName: "Purple Sprouting Broccoli", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["feb", "mar", "apr"], + allergens: "none", + }, + { + foodName: "Quince", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["oct", "nov", "dec"], + allergens: "none", + }, + { + foodName: "Radicchio", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: [ + "jan", + "feb", + "mar", + "apr", + "may", + "jun", + "jul", + "aug", + "sep", + "oct", + "nov", + "dec", + ], + allergens: "none", + }, + { + foodName: "Radish", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["may", "jun", "jul", "aug", "sep", "oct"], + allergens: "none", + }, + { + foodName: "Raspberry", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jul", "aug", "sep"], + allergens: "none", + }, + { + foodName: "Redcurrant", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jul", "aug", "sep"], + allergens: "none", + }, + { + foodName: "Rhubarb", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jan", "feb", "mar", "apr", "may", "jun"], + allergens: "none", + }, + { + foodName: "Runner Bean", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jun", "jul", "aug", "sep", "oct", "nov"], + allergens: "none", + }, + { + foodName: "Salmon", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["mar", "apr", "may", "jun", "jul", "aug", "sep"], + allergens: "none", + }, + { + foodName: "Salsify", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jan", "oct", "nov", "dec"], + allergens: "none", + }, + { + foodName: "Samphire", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jul", "aug"], + allergens: "none", + }, + { + foodName: "Sorrel", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["apr", "may", "jun", "jul", "aug", "sep"], + allergens: "none", + }, + { + foodName: "Spinach", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["apr", "may", "jun", "jul", "aug", "sep"], + allergens: "none", + }, + { + foodName: "Spring Greens", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["apr", "may", "jun"], + allergens: "none", + }, + { + foodName: "Spring Lamb", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["feb", "mar", "apr", "may", "jun"], + allergens: "none", + }, + { + foodName: "Spring Onion", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: [ + "jan", + "feb", + "mar", + "apr", + "may", + "jun", + "jul", + "aug", + "sep", + "oct", + "nov", + "dec", + ], + allergens: "none", + }, + { + foodName: "Strawberry", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jun", "jul", "aug", "sep"], + allergens: "none", + }, + { + foodName: "Swede", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jan", "feb", "nov", "dec"], + allergens: "none", + }, + { + foodName: "Sweet Potato", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jan", "feb", "mar", "oct", "nov", "dec"], + allergens: "none", + }, + { + foodName: "Sweetcorn", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["sep"], + allergens: "none", + }, + { + foodName: "Swiss Chard", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jul", "aug", "sep", "oct", "nov"], + allergens: "none", + }, + { + foodName: "Tayberry", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jul", "aug"], + allergens: "none", + }, + { + foodName: "Tomato", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jun", "jul", "aug", "sep", "oct"], + allergens: "none", + }, + { + foodName: "Tuna", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["may", "jun", "jul", "aug", "sep"], + allergens: "none", + }, + { + foodName: "Turkey", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["dec"], + allergens: "none", + }, + { + foodName: "Turnip", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jan", "feb", "oct", "nov", "dec"], + allergens: "none", + }, + { + foodName: "Venison", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jan", "feb", "nov", "dec"], + allergens: "none", + }, + { + foodName: "Watercress", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["april", "may", "june", "july", "august", "sept"], + allergens: "none", + }, + { + foodName: "Watermelon", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["july", "august"], + allergens: "none", + }, + { + foodName: "Whiting", + imageURL: "https://via.placeholder.com/200x200", + description: + "This is an example entry, and this is an example description.", + family: "example", + foodType: "example", + usedAs: "example", + month: ["jan", "feb", "jun", "jul", "aug", "sep", "oct", "nov", "dec"], + allergens: "none", + }, +]; + +export default produce; From d6442c548342604fbd9840bb8a182f3f7af84462 Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Tue, 26 Jul 2022 19:23:59 +0100 Subject: [PATCH 16/82] Added usedAs, updated month. --- db/data.js | 646 ++++++++++++++++++++++++++--------------------------- 1 file changed, 323 insertions(+), 323 deletions(-) diff --git a/db/data.js b/db/data.js index 724d4bb..42d1090 100644 --- a/db/data.js +++ b/db/data.js @@ -8,7 +8,7 @@ description family foodType usedAs -month DONE +month NEED CAPITALISING allergens */ @@ -24,8 +24,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jan", "feb", "sep", "oct", "nov", "dec"], + usedAs: "Fruit", + month: ["Jan", "Feb", "Sep", "Oct", "Nov", "Dec"], allergens: "none", }, { @@ -35,8 +35,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["may", "jun", "jul", "aug", "sep"], + usedAs: "Fruit", + month: ["May", "Jun", "Jul", "Aug", "Sep"], allergens: "none", }, { @@ -46,8 +46,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jun", "jul"], + usedAs: "Vegetable", + month: ["Jun", "Jul"], allergens: "none", }, { @@ -57,8 +57,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jun", "jul", "aug", "sep", "oct"], + usedAs: "Vegetable", + month: ["Jun", "Jul", "Aug", "Sep", "Oct"], allergens: "none", }, { @@ -68,20 +68,20 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", + usedAs: "Fruit", month: [ - "jan", - "feb", - "mar", - "apr", - "may", - "jun", - "jul", - "aug", - "sep", - "oct", - "nov", - "dec", + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec", ], allergens: "none", }, @@ -92,8 +92,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jul", "aug"], + usedAs: "Herb", + month: ["Jul", "Aug"], allergens: "none", }, { @@ -103,20 +103,20 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", + usedAs: "Meat", month: [ - "jan", - "feb", - "mar", - "apr", - "may", - "jun", - "jul", - "aug", - "sep", - "oct", - "nov", - "dec", + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec", ], allergens: "none", }, @@ -127,8 +127,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jan", "jul", "aug", "sep", "oct", "nov", "dec"], + usedAs: "Vegetable", + month: ["Jan", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], allergens: "none", }, { @@ -138,8 +138,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["aug", "sep", "oct"], + usedAs: "Fruit", + month: ["Aug", "Sep", "Oct"], allergens: "none", }, { @@ -149,8 +149,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jun", "jul"], + usedAs: "Fruit", + month: ["Jun", "Jul"], allergens: "none", }, { @@ -160,8 +160,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jan", "feb", "mar", "dec"], + usedAs: "Fruit", + month: ["Jan", "Feb", "Mar", "Dec"], allergens: "none", }, { @@ -171,8 +171,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jul", "aug", "sep"], + usedAs: "Vegetable", + month: ["Jul", "Aug", "Sep"], allergens: "none", }, { @@ -182,8 +182,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["aug", "sep", "oct"], + usedAs: "Vegetable", + month: ["Aug", "Sep", "Oct"], allergens: "none", }, { @@ -193,8 +193,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jan", "feb", "mar", "oct", "nov", "dec"], + usedAs: "Vegetable", + month: ["Jan", "Feb", "Mar", "Oct", "Nov", "Dec"], allergens: "none", }, { @@ -204,20 +204,20 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", + usedAs: "Vegetable", month: [ - "jan", - "feb", - "mar", - "apr", - "may", - "jun", - "jul", - "aug", - "sep", - "oct", - "nov", - "dec", + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec", ], allergens: "none", }, @@ -228,8 +228,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jun", "jul", "aug", "sep"], + usedAs: "Vegetable", + month: ["Jun", "Jul", "Aug", "Sep"], allergens: "none", }, { @@ -239,8 +239,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jan", "feb", "mar", "apr"], + usedAs: "Vegetable", + month: ["Jan", "Feb", "Mar", "Apr"], allergens: "none", }, { @@ -250,8 +250,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["july", "aug", "sep", "oct"], + usedAs: "Vegetable", + month: ["Jul", "Aug", "Sep", "Oct"], allergens: "none", }, { @@ -261,8 +261,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jan", "feb", "mar", "apr", "sep", "oct", "nov", "dec"], + usedAs: "Vegetable", + month: ["Jan", "Feb", "Mar", "Apr", "Sep", "Oct", "Nov", "Dec"], allergens: "none", }, { @@ -272,8 +272,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jan", "feb", "aug", "sep", "oct", "nov", "dec"], + usedAs: "Vegetable", + month: ["Jan", "Feb", "Aug", "Sep", "Oct", "Nov", "Dec"], allergens: "none", }, { @@ -283,8 +283,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jul"], + usedAs: "Fruit", + month: ["Jul"], allergens: "none", }, { @@ -294,8 +294,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["may", "jun", "jul", "aug", "sep"], + usedAs: "Herb", + month: ["May", "Jun", "Jul", "Aug", "Sep"], allergens: "none", }, { @@ -305,8 +305,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jan", "oct", "nov", "dec"], + usedAs: "Nut", + month: ["Jan", "Oct", "Nov", "Dec"], allergens: "none", }, { @@ -316,8 +316,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jan", "feb", "mar"], + usedAs: "Vegetable", + month: ["Jan", "Feb", "Mar"], allergens: "none", }, { @@ -327,8 +327,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jan", "feb", "nov", "dec"], + usedAs: "Fruit", + month: ["Jan", "Feb", "Nov", "Dec"], allergens: "none", }, { @@ -338,8 +338,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["feb", "mar", "apr"], + usedAs: "Fish", + month: ["Feb", "Mar", "Apr"], allergens: "none", }, { @@ -349,8 +349,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jun", "jul", "aug", "sep"], + usedAs: "Vegetable", + month: ["Jun", "Jul", "Aug", "Sep"], allergens: "none", }, { @@ -360,8 +360,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jun", "jul", "aug"], + usedAs: "Vegetable", + month: ["Jun", "Jul", "Aug"], allergens: "none", }, { @@ -371,8 +371,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["apr", "may", "jun", "jul", "aug", "sep", "oct", "nov"], + usedAs: "Fish", + month: ["Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov"], allergens: "none", }, { @@ -382,8 +382,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["aug"], + usedAs: "Fruit", + month: ["Aug"], allergens: "none", }, { @@ -393,8 +393,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["oct", "nov", "dec"], + usedAs: "Fruit", + month: ["Oct", "Nov", "Dec"], allergens: "none", }, { @@ -404,8 +404,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["sep"], + usedAs: "Fruit", + month: ["Sep"], allergens: "none", }, { @@ -415,8 +415,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jan", "nov", "dec"], + usedAs: "Fruit", + month: ["Jan", "Nov", "Dec"], allergens: "none", }, { @@ -426,8 +426,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["oct", "nov", "dec"], + usedAs: "Meat", + month: ["Oct", "Nov", "Dec"], allergens: "none", }, { @@ -437,8 +437,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["aug", "sep", "oct"], + usedAs: "Fruit", + month: ["Aug", "Sep", "Oct"], allergens: "none", }, { @@ -448,8 +448,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jun", "jul", "aug", "sep"], + usedAs: "Vegetable", + month: ["Jun", "Jul", "Aug", "Sep"], allergens: "none", }, { @@ -459,8 +459,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["aug", "sep", "oct"], + usedAs: "Fruit", + month: ["Aug", "Sep", "Oct"], allergens: "none", }, { @@ -470,8 +470,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jul", "aug", "sep", "oct"], + usedAs: "Herb", + month: ["Jul", "Aug", "Sep", "Oct"], allergens: "none", }, { @@ -481,8 +481,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jun", "jul", "aug", "sep", "oct", "nov"], + usedAs: "Vegetable", + month: ["Jun", "Jul", "Aug", "Sep", "Oct", "Nov"], allergens: "none", }, { @@ -492,8 +492,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jan", "sep", "oct", "nov", "dec"], + usedAs: "Meat", + month: ["Jan", "Sep", "Oct", "Nov", "Dec"], allergens: "none", }, { @@ -503,8 +503,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jun", "jul", "aug", "sep"], + usedAs: "Fruit", + month: ["Jun", "Jul", "Aug", "Sep"], allergens: "none", }, { @@ -514,8 +514,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jan", "feb", "mar", "apr", "may", "dec"], + usedAs: "Fruit", + month: ["Jan", "Feb", "Mar", "Apr", "May", "Dec"], allergens: "none", }, { @@ -525,8 +525,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["aug", "sep", "oct", "nov", "dec"], + usedAs: "Meat", + month: ["Aug", "Sep", "Oct", "Nov", "Dec"], allergens: "none", }, { @@ -536,8 +536,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["sep", "oct", "nov"], + usedAs: "Meat", + month: ["Sep", "Oct", "Nov"], allergens: "none", }, { @@ -547,8 +547,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["mar", "apr", "may", "jun", "jul", "aug", "sep"], + usedAs: "Fish", + month: ["Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep"], allergens: "none", }, { @@ -558,8 +558,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jan", "feb", "mar", "nov", "dec"], + usedAs: "Vegetable", + month: ["Jan", "Feb", "Mar", "Nov", "Dec"], allergens: "none", }, { @@ -569,8 +569,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jan", "feb", "oct", "nov", "dec"], + usedAs: "Vegetable", + month: ["Jan", "Feb", "Oct", "Nov", "Dec"], allergens: "none", }, { @@ -580,8 +580,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["may", "jun", "jul", "aug", "sep"], + usedAs: "Fish", + month: ["May", "Jun", "Jul", "Aug", "Sep"], allergens: "none", }, { @@ -591,8 +591,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["aug", "sep", "oct", "nov"], + usedAs: "Vegetable", + month: ["Aug", "Sep", "Oct", "Nov"], allergens: "none", }, { @@ -602,20 +602,20 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", + usedAs: "Meat", month: [ - "jan", - "feb", - "mar", - "apr", - "may", - "jun", - "jul", - "aug", - "sep", - "oct", - "nov", - "dec", + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec", ], allergens: "none", }, @@ -626,8 +626,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["may", "jun", "jul", "aug", "sep", "oct", "nov"], + usedAs: "Vegetable", + month: ["May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov"], allergens: "none", }, { @@ -637,8 +637,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jan", "feb", "mar", "sep", "oct", "nov", "dec"], + usedAs: "Vegetable", + month: ["Jan", "Feb", "Mar", "Sep", "Oct", "Nov", "Dec"], allergens: "none", }, { @@ -648,8 +648,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jan", "feb", "mar"], + usedAs: "Fruit", + month: ["Jan", "Feb", "Mar"], allergens: "none", }, { @@ -659,8 +659,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"], + usedAs: "Vegetable", + month: ["May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], allergens: "none", }, { @@ -670,8 +670,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["aug", "sep"], + usedAs: "Fruit", + month: ["Aug", "Sep"], allergens: "none", }, { @@ -681,8 +681,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["may", "jun", "jul", "aug", "sep", "oct"], + usedAs: "Fish", + month: ["May", "Jun", "Jul", "Aug", "Sep", "Oct"], allergens: "none", }, { @@ -692,8 +692,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jun", "jul", "aug"], + usedAs: "Vegetable", + month: ["Jun", "Jul", "Aug"], allergens: "none", }, { @@ -703,8 +703,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["aug", "sep"], + usedAs: "Vegetable", + month: ["Aug", "Sep"], allergens: "none", }, { @@ -714,8 +714,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["may", "jun", "jul", "aug", "sep"], + usedAs: "Herb", + month: ["May", "Jun", "Jul", "Aug", "Sep"], allergens: "none", }, { @@ -725,8 +725,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jan", "feb", "mar", "oct", "nov", "dec"], + usedAs: "Fish", + month: ["Jan", "Feb", "Mar", "Oct", "Nov", "Dec"], allergens: "none", }, { @@ -736,8 +736,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["may", "jun", "jul", "aug", "sep"], + usedAs: "Fruit", + month: ["May", "Jun", "Jul", "Aug", "Sep"], allergens: "none", }, { @@ -747,8 +747,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["apr", "may", "jun", "jul"], + usedAs: "Vegetable", + month: ["Apr", "May", "Jun", "Jul"], allergens: "none", }, { @@ -758,20 +758,20 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", + usedAs: "Vegetable", month: [ - "jan", - "feb", - "mar", - "apr", - "may", - "jun", - "jul", - "aug", - "sep", - "oct", - "nov", - "dec", + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec", ], allergens: "none", }, @@ -782,8 +782,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jan", "feb", "mar"], + usedAs: "Fruit", + month: ["Jan", "Feb", "Mar"], allergens: "none", }, { @@ -793,8 +793,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jan", "feb", "mar", "apr", "sep", "oct", "nov", "dec"], + usedAs: "Fish", + month: ["Jan", "Feb", "Mar", "Apr", "Sep", "Oct", "Nov", "Dec"], allergens: "none", }, { @@ -804,20 +804,20 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", + usedAs: "Vegetable", month: [ - "jan", - "feb", - "mar", - "apr", - "may", - "jun", - "jul", - "aug", - "sep", - "oct", - "nov", - "dec", + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec", ], allergens: "none", }, @@ -828,8 +828,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jan", "feb", "mar", "sep", "oct", "nov", "dec"], + usedAs: "Vegetable", + month: ["Jan", "Feb", "Mar", "Sep", "Oct", "Nov", "Dec"], allergens: "none", }, { @@ -839,8 +839,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["aug", "sep"], + usedAs: "Fruit", + month: ["Aug", "Sep"], allergens: "none", }, { @@ -850,8 +850,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jan", "sep", "oct", "nov", "dec"], + usedAs: "Fruit", + month: ["Jan", "Sep", "Oct", "Nov", "Dec"], allergens: "none", }, { @@ -861,8 +861,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov"], + usedAs: "Vegetable", + month: ["Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov"], allergens: "none", }, { @@ -872,8 +872,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["mar", "apr", "may", "jun", "jul", "aug", "sep", "oct"], + usedAs: "Vegetable", + month: ["Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct"], allergens: "none", }, { @@ -883,8 +883,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["sep", "oct"], + usedAs: "Fruit", + month: ["Sep", "Oct"], allergens: "none", }, { @@ -894,20 +894,20 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", + usedAs: "Fruit", month: [ - "jan", - "feb", - "mar", - "apr", - "may", - "jun", - "jul", - "aug", - "sep", - "oct", - "nov", - "dec", + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec", ], allergens: "none", }, @@ -918,20 +918,20 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", + usedAs: "Meat", month: [ - "jan", - "feb", - "mar", - "apr", - "may", - "jun", - "jul", - "aug", - "sep", - "oct", - "nov", - "dec", + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec", ], allergens: "none", }, @@ -942,8 +942,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["apr", "may", "jun", "jul"], + usedAs: "Vegetable", + month: ["Apr", "May", "Jun", "Jul"], allergens: "none", }, { @@ -953,8 +953,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["oct", "nov", "dec"], + usedAs: "Vegetable", + month: ["Oct", "Nov", "Dec"], allergens: "none", }, { @@ -964,8 +964,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["feb", "mar", "apr"], + usedAs: "Vegetable", + month: ["Feb", "Mar", "Apr"], allergens: "none", }, { @@ -975,8 +975,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["oct", "nov", "dec"], + usedAs: "Fruit", + month: ["Oct", "Nov", "Dec"], allergens: "none", }, { @@ -986,20 +986,20 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", + usedAs: "Vegetable", month: [ - "jan", - "feb", - "mar", - "apr", - "may", - "jun", - "jul", - "aug", - "sep", - "oct", - "nov", - "dec", + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec", ], allergens: "none", }, @@ -1010,8 +1010,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["may", "jun", "jul", "aug", "sep", "oct"], + usedAs: "Vegetable", + month: ["May", "Jun", "Jul", "Aug", "Sep", "Oct"], allergens: "none", }, { @@ -1021,8 +1021,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jul", "aug", "sep"], + usedAs: "Fruit", + month: ["Jul", "Aug", "Sep"], allergens: "none", }, { @@ -1032,8 +1032,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jul", "aug", "sep"], + usedAs: "Fruit", + month: ["Jul", "Aug", "Sep"], allergens: "none", }, { @@ -1043,8 +1043,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jan", "feb", "mar", "apr", "may", "jun"], + usedAs: "Fruit", + month: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"], allergens: "none", }, { @@ -1054,8 +1054,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jun", "jul", "aug", "sep", "oct", "nov"], + usedAs: "Vegetable", + month: ["Jun", "Jul", "Aug", "Sep", "Oct", "Nov"], allergens: "none", }, { @@ -1065,8 +1065,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["mar", "apr", "may", "jun", "jul", "aug", "sep"], + usedAs: "Fish", + month: ["Mar", "Apr", "May", "Jun", "Jul", "Aug", "Fep"], allergens: "none", }, { @@ -1076,8 +1076,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jan", "oct", "nov", "dec"], + usedAs: "Vegetable", + month: ["Jan", "Oct", "Nov", "Dec"], allergens: "none", }, { @@ -1087,8 +1087,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jul", "aug"], + usedAs: "Vegetable", + month: ["Jul", "Aug"], allergens: "none", }, { @@ -1098,8 +1098,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["apr", "may", "jun", "jul", "aug", "sep"], + usedAs: "Vegetable", + month: ["Apr", "May", "Jun", "Jul", "Aug", "Sep"], allergens: "none", }, { @@ -1109,8 +1109,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["apr", "may", "jun", "jul", "aug", "sep"], + usedAs: "Vegetable", + month: ["Apr", "May", "Jun", "Jul", "Aug", "Sep"], allergens: "none", }, { @@ -1120,8 +1120,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["apr", "may", "jun"], + usedAs: "Vegetable", + month: ["Apr", "May", "Jun"], allergens: "none", }, { @@ -1131,8 +1131,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["feb", "mar", "apr", "may", "jun"], + usedAs: "Meat", + month: ["Feb", "Mar", "Apr", "May", "Jun"], allergens: "none", }, { @@ -1142,20 +1142,20 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", + usedAs: "Vegetable", month: [ - "jan", - "feb", - "mar", - "apr", - "may", - "jun", - "jul", - "aug", - "sep", - "oct", - "nov", - "dec", + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec", ], allergens: "none", }, @@ -1166,8 +1166,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jun", "jul", "aug", "sep"], + usedAs: "Fruit", + month: ["Jun", "Jul", "Aug", "Sep"], allergens: "none", }, { @@ -1177,8 +1177,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jan", "feb", "nov", "dec"], + usedAs: "Vegetable", + month: ["Jan", "Feb", "Nov", "Dec"], allergens: "none", }, { @@ -1188,8 +1188,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jan", "feb", "mar", "oct", "nov", "dec"], + usedAs: "Vegetable", + month: ["Jan", "Feb", "Mar", "Oct", "Nov", "Dec"], allergens: "none", }, { @@ -1199,8 +1199,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["sep"], + usedAs: "Vegetable", + month: ["Sep"], allergens: "none", }, { @@ -1210,8 +1210,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jul", "aug", "sep", "oct", "nov"], + usedAs: "Vegetable", + month: ["Jul", "Aug", "Sep", "Oct", "Nov"], allergens: "none", }, { @@ -1221,8 +1221,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jul", "aug"], + usedAs: "Fruit", + month: ["Jul", "Aug"], allergens: "none", }, { @@ -1232,8 +1232,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jun", "jul", "aug", "sep", "oct"], + usedAs: "Vegetable", + month: ["Jun", "Jul", "Aug", "Sep", "Oct"], allergens: "none", }, { @@ -1243,8 +1243,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["may", "jun", "jul", "aug", "sep"], + usedAs: "Fish", + month: ["May", "Jun", "Jul", "Aug", "Sep"], allergens: "none", }, { @@ -1254,8 +1254,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["dec"], + usedAs: "Meat", + month: ["Dec"], allergens: "none", }, { @@ -1265,8 +1265,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jan", "feb", "oct", "nov", "dec"], + usedAs: "Vegetable", + month: ["Jan", "Feb", "Oct", "Nov", "Dec"], allergens: "none", }, { @@ -1276,8 +1276,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jan", "feb", "nov", "dec"], + usedAs: "Meat", + month: ["Jan", "Feb", "Nov", "Dec"], allergens: "none", }, { @@ -1287,8 +1287,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["april", "may", "june", "july", "august", "sept"], + usedAs: "Vegetable", + month: ["Apr", "May", "Jun", "Jul", "Aug", "Sep"], allergens: "none", }, { @@ -1298,8 +1298,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["july", "august"], + usedAs: "Fruit", + month: ["Jul", "Aug"], allergens: "none", }, { @@ -1309,8 +1309,8 @@ const produce = [ "This is an example entry, and this is an example description.", family: "example", foodType: "example", - usedAs: "example", - month: ["jan", "feb", "jun", "jul", "aug", "sep", "oct", "nov", "dec"], + usedAs: "Fish", + month: ["Jan", "Feb", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], allergens: "none", }, ]; From 8fd4d8dea28f4eb5c9d75105252bce161ce29118 Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Tue, 26 Jul 2022 20:16:33 +0100 Subject: [PATCH 17/82] Added foodType. --- db/data.js | 432 ++++++++++++++++++++++++++--------------------------- 1 file changed, 216 insertions(+), 216 deletions(-) diff --git a/db/data.js b/db/data.js index 42d1090..56de553 100644 --- a/db/data.js +++ b/db/data.js @@ -6,10 +6,10 @@ foodName DONE imageURL DONE description family -foodType -usedAs -month NEED CAPITALISING -allergens +foodType DONE WITH CAVEAT THIS WAS A NIGHTMARE +usedAs DONE +month DONE +allergens DONE WITH CAVEAT THAT I DON'T KNOW ALL ALLERGENS, WILL WANT DOUBLE-CHECKING */ /* @@ -22,11 +22,11 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", - foodType: "example", + family: "Rosaceae", + foodType: "Pome", usedAs: "Fruit", month: ["Jan", "Feb", "Sep", "Oct", "Nov", "Dec"], - allergens: "none", + allergens: "NA", }, { foodName: "Apricot", @@ -34,10 +34,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Drupe", usedAs: "Fruit", month: ["May", "Jun", "Jul", "Aug", "Sep"], - allergens: "none", + allergens: "NA", }, { foodName: "Asparagus", @@ -45,10 +45,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Stem", usedAs: "Vegetable", month: ["Jun", "Jul"], - allergens: "none", + allergens: "NA", }, { foodName: "Aubergine", @@ -56,10 +56,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Berry", usedAs: "Vegetable", month: ["Jun", "Jul", "Aug", "Sep", "Oct"], - allergens: "none", + allergens: "NA", }, { foodName: "Banana", @@ -67,7 +67,7 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Berry", usedAs: "Fruit", month: [ "Jan", @@ -83,7 +83,7 @@ const produce = [ "Nov", "Dec", ], - allergens: "none", + allergens: "NA", }, { foodName: "Basil", @@ -91,10 +91,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Herb", usedAs: "Herb", month: ["Jul", "Aug"], - allergens: "none", + allergens: "NA", }, { foodName: "Beef", @@ -102,7 +102,7 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Meat", usedAs: "Meat", month: [ "Jan", @@ -118,7 +118,7 @@ const produce = [ "Nov", "Dec", ], - allergens: "none", + allergens: "NA", }, { foodName: "Beetroot", @@ -126,10 +126,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Root", usedAs: "Vegetable", month: ["Jan", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], - allergens: "none", + allergens: "NA", }, { foodName: "Blackberry", @@ -137,10 +137,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Berry", usedAs: "Fruit", month: ["Aug", "Sep", "Oct"], - allergens: "none", + allergens: "NA", }, { foodName: "Blackcurrants", @@ -148,10 +148,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Berry", usedAs: "Fruit", month: ["Jun", "Jul"], - allergens: "none", + allergens: "NA", }, { foodName: "Bramley Apple", @@ -159,10 +159,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Pome", usedAs: "Fruit", month: ["Jan", "Feb", "Mar", "Dec"], - allergens: "none", + allergens: "NA", }, { foodName: "Broadbean", @@ -170,10 +170,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Legume", usedAs: "Vegetable", month: ["Jul", "Aug", "Sep"], - allergens: "none", + allergens: "NA", }, { foodName: "Broccoli", @@ -181,10 +181,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Cruciferous", usedAs: "Vegetable", month: ["Aug", "Sep", "Oct"], - allergens: "none", + allergens: "NA", }, { foodName: "Brussels Sprouts", @@ -192,10 +192,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Leaf", usedAs: "Vegetable", month: ["Jan", "Feb", "Mar", "Oct", "Nov", "Dec"], - allergens: "none", + allergens: "NA", }, { foodName: "Cabbage", @@ -203,7 +203,7 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Root", usedAs: "Vegetable", month: [ "Jan", @@ -219,7 +219,7 @@ const produce = [ "Nov", "Dec", ], - allergens: "none", + allergens: "NA", }, { foodName: "Carrot", @@ -227,10 +227,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Root", usedAs: "Vegetable", month: ["Jun", "Jul", "Aug", "Sep"], - allergens: "none", + allergens: "NA", }, { foodName: "Cauliflower", @@ -238,10 +238,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Cruciferous", usedAs: "Vegetable", month: ["Jan", "Feb", "Mar", "Apr"], - allergens: "none", + allergens: "NA", }, { foodName: "Cavolo Nero", @@ -249,10 +249,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Cruciferous", usedAs: "Vegetable", month: ["Jul", "Aug", "Sep", "Oct"], - allergens: "none", + allergens: "NA", }, { foodName: "Celeriac", @@ -260,10 +260,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Root", usedAs: "Vegetable", month: ["Jan", "Feb", "Mar", "Apr", "Sep", "Oct", "Nov", "Dec"], - allergens: "none", + allergens: "Celery", }, { foodName: "Celery", @@ -271,10 +271,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Stem", usedAs: "Vegetable", month: ["Jan", "Feb", "Aug", "Sep", "Oct", "Nov", "Dec"], - allergens: "none", + allergens: "Celery", }, { foodName: "Cherry", @@ -282,10 +282,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Berry", usedAs: "Fruit", month: ["Jul"], - allergens: "none", + allergens: "NA", }, { foodName: "Chervil", @@ -293,10 +293,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Herb", usedAs: "Herb", month: ["May", "Jun", "Jul", "Aug", "Sep"], - allergens: "none", + allergens: "NA", }, { foodName: "Chestnut", @@ -304,10 +304,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Nut", usedAs: "Nut", month: ["Jan", "Oct", "Nov", "Dec"], - allergens: "none", + allergens: "Nut", }, { foodName: "Chicory", @@ -315,10 +315,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Leaf", usedAs: "Vegetable", month: ["Jan", "Feb", "Mar"], - allergens: "none", + allergens: "NA", }, { foodName: "Clementine", @@ -326,10 +326,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Citrus", usedAs: "Fruit", month: ["Jan", "Feb", "Nov", "Dec"], - allergens: "none", + allergens: "NA", }, { foodName: "Cod", @@ -337,10 +337,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Fish", usedAs: "Fish", month: ["Feb", "Mar", "Apr"], - allergens: "none", + allergens: "Fish", }, { foodName: "Courgette", @@ -348,10 +348,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Squash", usedAs: "Vegetable", month: ["Jun", "Jul", "Aug", "Sep"], - allergens: "none", + allergens: "NA", }, { foodName: "Courgette Flower", @@ -359,10 +359,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Squash", usedAs: "Vegetable", month: ["Jun", "Jul", "Aug"], - allergens: "none", + allergens: "NA", }, { foodName: "Crab", @@ -373,7 +373,7 @@ const produce = [ foodType: "example", usedAs: "Fish", month: ["Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov"], - allergens: "none", + allergens: "Crustacean", }, { foodName: "Crab Apple", @@ -381,10 +381,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Pome", usedAs: "Fruit", month: ["Aug"], - allergens: "none", + allergens: "NA", }, { foodName: "Cranberry", @@ -392,10 +392,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Berry", usedAs: "Fruit", month: ["Oct", "Nov", "Dec"], - allergens: "none", + allergens: "NA", }, { foodName: "Damson", @@ -403,10 +403,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Drupe", usedAs: "Fruit", month: ["Sep"], - allergens: "none", + allergens: "NA", }, { foodName: "Date", @@ -414,10 +414,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Berry", usedAs: "Fruit", month: ["Jan", "Nov", "Dec"], - allergens: "none", + allergens: "NA", }, { foodName: "Duck", @@ -425,10 +425,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Fowl", usedAs: "Meat", month: ["Oct", "Nov", "Dec"], - allergens: "none", + allergens: "NA", }, { foodName: "Elderberries", @@ -436,10 +436,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Berry", usedAs: "Fruit", month: ["Aug", "Sep", "Oct"], - allergens: "none", + allergens: "NA", }, { foodName: "Fennel Bulb", @@ -447,10 +447,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Stem", usedAs: "Vegetable", month: ["Jun", "Jul", "Aug", "Sep"], - allergens: "none", + allergens: "NA", }, { foodName: "Fig", @@ -458,10 +458,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Berry", usedAs: "Fruit", month: ["Aug", "Sep", "Oct"], - allergens: "none", + allergens: "NA", }, { foodName: "Garlic", @@ -469,10 +469,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Herb", usedAs: "Herb", month: ["Jul", "Aug", "Sep", "Oct"], - allergens: "none", + allergens: "NA", }, { foodName: "Globe Artichoke", @@ -480,10 +480,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Root", usedAs: "Vegetable", month: ["Jun", "Jul", "Aug", "Sep", "Oct", "Nov"], - allergens: "none", + allergens: "NA", }, { foodName: "Goose", @@ -491,10 +491,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Fowl", usedAs: "Meat", month: ["Jan", "Sep", "Oct", "Nov", "Dec"], - allergens: "none", + allergens: "NA", }, { foodName: "Gooseberry", @@ -502,10 +502,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Berry", usedAs: "Fruit", month: ["Jun", "Jul", "Aug", "Sep"], - allergens: "none", + allergens: "NA", }, { foodName: "Grapefruit", @@ -513,10 +513,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Citrus", usedAs: "Fruit", month: ["Jan", "Feb", "Mar", "Apr", "May", "Dec"], - allergens: "none", + allergens: "NA", }, { foodName: "Grouse", @@ -524,10 +524,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Fowl", usedAs: "Meat", month: ["Aug", "Sep", "Oct", "Nov", "Dec"], - allergens: "none", + allergens: "NA", }, { foodName: "Guinea Fowl", @@ -535,10 +535,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Fowl", usedAs: "Meat", month: ["Sep", "Oct", "Nov"], - allergens: "none", + allergens: "NA", }, { foodName: "Halibut", @@ -546,10 +546,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Fish", usedAs: "Fish", month: ["Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep"], - allergens: "none", + allergens: "Fish", }, { foodName: "Jerusalem Artichoke", @@ -557,10 +557,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Root", usedAs: "Vegetable", month: ["Jan", "Feb", "Mar", "Nov", "Dec"], - allergens: "none", + allergens: "NA", }, { foodName: "Kale", @@ -568,10 +568,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Cruciferous", usedAs: "Vegetable", month: ["Jan", "Feb", "Oct", "Nov", "Dec"], - allergens: "none", + allergens: "NA", }, { foodName: "Kipper", @@ -579,10 +579,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Fish", usedAs: "Fish", month: ["May", "Jun", "Jul", "Aug", "Sep"], - allergens: "none", + allergens: "Fish", }, { foodName: "Kohlrabi", @@ -590,10 +590,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Root", usedAs: "Vegetable", month: ["Aug", "Sep", "Oct", "Nov"], - allergens: "none", + allergens: "NA", }, { foodName: "Lamb", @@ -601,7 +601,7 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Meat", usedAs: "Meat", month: [ "Jan", @@ -617,7 +617,7 @@ const produce = [ "Nov", "Dec", ], - allergens: "none", + allergens: "NA", }, { foodName: "Lamb's Lettuce", @@ -625,10 +625,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Leaf", usedAs: "Vegetable", month: ["May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov"], - allergens: "none", + allergens: "NA", }, { foodName: "Leek", @@ -636,10 +636,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Root", usedAs: "Vegetable", month: ["Jan", "Feb", "Mar", "Sep", "Oct", "Nov", "Dec"], - allergens: "none", + allergens: "NA", }, { foodName: "Lemon", @@ -647,10 +647,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Citrus", usedAs: "Fruit", month: ["Jan", "Feb", "Mar"], - allergens: "none", + allergens: "NA", }, { foodName: "Lettuce", @@ -658,10 +658,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Leaf", usedAs: "Vegetable", month: ["May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], - allergens: "none", + allergens: "NA", }, { foodName: "Loganberry", @@ -669,10 +669,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Berry", usedAs: "Fruit", month: ["Aug", "Sep"], - allergens: "none", + allergens: "NA", }, { foodName: "Mackerel", @@ -680,10 +680,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Fish", usedAs: "Fish", month: ["May", "Jun", "Jul", "Aug", "Sep", "Oct"], - allergens: "none", + allergens: "Fish", }, { foodName: "Mangetout", @@ -691,10 +691,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Legume", usedAs: "Vegetable", month: ["Jun", "Jul", "Aug"], - allergens: "none", + allergens: "NA", }, { foodName: "Marrow", @@ -702,10 +702,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Squash", usedAs: "Vegetable", month: ["Aug", "Sep"], - allergens: "none", + allergens: "NA", }, { foodName: "Mint", @@ -713,10 +713,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Herb", usedAs: "Herb", month: ["May", "Jun", "Jul", "Aug", "Sep"], - allergens: "none", + allergens: "NA", }, { foodName: "Mussels", @@ -724,10 +724,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Fish", usedAs: "Fish", month: ["Jan", "Feb", "Mar", "Oct", "Nov", "Dec"], - allergens: "none", + allergens: "Crustacean", }, { foodName: "Nectarine", @@ -735,10 +735,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Citrus", usedAs: "Fruit", month: ["May", "Jun", "Jul", "Aug", "Sep"], - allergens: "none", + allergens: "NA", }, { foodName: "New Potatoes", @@ -746,10 +746,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Root", usedAs: "Vegetable", month: ["Apr", "May", "Jun", "Jul"], - allergens: "none", + allergens: "NA", }, { foodName: "Onion", @@ -757,7 +757,7 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Allium", usedAs: "Vegetable", month: [ "Jan", @@ -773,7 +773,7 @@ const produce = [ "Nov", "Dec", ], - allergens: "none", + allergens: "NA", }, { foodName: "Orange", @@ -781,10 +781,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Citrus", usedAs: "Fruit", month: ["Jan", "Feb", "Mar"], - allergens: "none", + allergens: "NA", }, { foodName: "Oyster", @@ -792,10 +792,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Fish", usedAs: "Fish", month: ["Jan", "Feb", "Mar", "Apr", "Sep", "Oct", "Nov", "Dec"], - allergens: "none", + allergens: "Crustacean", }, { foodName: "Pak Choi", @@ -803,7 +803,7 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Leaf", usedAs: "Vegetable", month: [ "Jan", @@ -819,7 +819,7 @@ const produce = [ "Nov", "Dec", ], - allergens: "none", + allergens: "NA", }, { foodName: "Parsnip", @@ -827,10 +827,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Root", usedAs: "Vegetable", month: ["Jan", "Feb", "Mar", "Sep", "Oct", "Nov", "Dec"], - allergens: "none", + allergens: "NA", }, { foodName: "Peach", @@ -838,10 +838,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Drupe", usedAs: "Fruit", month: ["Aug", "Sep"], - allergens: "none", + allergens: "NA", }, { foodName: "Pear", @@ -849,10 +849,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Pome", usedAs: "Fruit", month: ["Jan", "Sep", "Oct", "Nov", "Dec"], - allergens: "none", + allergens: "NA", }, { foodName: "Peas", @@ -860,10 +860,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Legume", usedAs: "Vegetable", month: ["Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov"], - allergens: "none", + allergens: "NA", }, { foodName: "Pepper", @@ -871,10 +871,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Berry", usedAs: "Vegetable", month: ["Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct"], - allergens: "none", + allergens: "NA", }, { foodName: "Plum", @@ -882,10 +882,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Drupe", usedAs: "Fruit", month: ["Sep", "Oct"], - allergens: "none", + allergens: "NA", }, { foodName: "Pomegranate", @@ -893,7 +893,7 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Berry", usedAs: "Fruit", month: [ "Jan", @@ -909,7 +909,7 @@ const produce = [ "Nov", "Dec", ], - allergens: "none", + allergens: "NA", }, { foodName: "Pork", @@ -917,7 +917,7 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Meat", usedAs: "Meat", month: [ "Jan", @@ -933,7 +933,7 @@ const produce = [ "Nov", "Dec", ], - allergens: "none", + allergens: "NA", }, { foodName: "Potato", @@ -941,10 +941,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Root", usedAs: "Vegetable", month: ["Apr", "May", "Jun", "Jul"], - allergens: "none", + allergens: "NA", }, { foodName: "Pumpkin", @@ -952,10 +952,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Squash", usedAs: "Vegetable", month: ["Oct", "Nov", "Dec"], - allergens: "none", + allergens: "NA", }, { foodName: "Purple Sprouting Broccoli", @@ -963,10 +963,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Cruciferous", usedAs: "Vegetable", month: ["Feb", "Mar", "Apr"], - allergens: "none", + allergens: "NA", }, { foodName: "Quince", @@ -974,10 +974,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Pome", usedAs: "Fruit", month: ["Oct", "Nov", "Dec"], - allergens: "none", + allergens: "NA", }, { foodName: "Radicchio", @@ -985,7 +985,7 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Leaf", usedAs: "Vegetable", month: [ "Jan", @@ -1001,7 +1001,7 @@ const produce = [ "Nov", "Dec", ], - allergens: "none", + allergens: "NA", }, { foodName: "Radish", @@ -1009,10 +1009,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Root", usedAs: "Vegetable", month: ["May", "Jun", "Jul", "Aug", "Sep", "Oct"], - allergens: "none", + allergens: "NA", }, { foodName: "Raspberry", @@ -1020,10 +1020,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Berry", usedAs: "Fruit", month: ["Jul", "Aug", "Sep"], - allergens: "none", + allergens: "NA", }, { foodName: "Redcurrant", @@ -1031,10 +1031,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Berry", usedAs: "Fruit", month: ["Jul", "Aug", "Sep"], - allergens: "none", + allergens: "NA", }, { foodName: "Rhubarb", @@ -1042,10 +1042,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Stem", usedAs: "Fruit", month: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"], - allergens: "none", + allergens: "NA", }, { foodName: "Runner Bean", @@ -1053,10 +1053,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Legume", usedAs: "Vegetable", month: ["Jun", "Jul", "Aug", "Sep", "Oct", "Nov"], - allergens: "none", + allergens: "NA", }, { foodName: "Salmon", @@ -1064,10 +1064,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Fish", usedAs: "Fish", month: ["Mar", "Apr", "May", "Jun", "Jul", "Aug", "Fep"], - allergens: "none", + allergens: "Fish", }, { foodName: "Salsify", @@ -1075,10 +1075,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Root", usedAs: "Vegetable", month: ["Jan", "Oct", "Nov", "Dec"], - allergens: "none", + allergens: "NA", }, { foodName: "Samphire", @@ -1086,10 +1086,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Leaf", usedAs: "Vegetable", month: ["Jul", "Aug"], - allergens: "none", + allergens: "NA", }, { foodName: "Sorrel", @@ -1097,10 +1097,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Leaf", usedAs: "Vegetable", month: ["Apr", "May", "Jun", "Jul", "Aug", "Sep"], - allergens: "none", + allergens: "NA", }, { foodName: "Spinach", @@ -1108,10 +1108,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Leaf", usedAs: "Vegetable", month: ["Apr", "May", "Jun", "Jul", "Aug", "Sep"], - allergens: "none", + allergens: "NA", }, { foodName: "Spring Greens", @@ -1119,10 +1119,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Leaf", usedAs: "Vegetable", month: ["Apr", "May", "Jun"], - allergens: "none", + allergens: "NA", }, { foodName: "Spring Lamb", @@ -1130,10 +1130,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Meat", usedAs: "Meat", month: ["Feb", "Mar", "Apr", "May", "Jun"], - allergens: "none", + allergens: "NA", }, { foodName: "Spring Onion", @@ -1141,7 +1141,7 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Allium", usedAs: "Vegetable", month: [ "Jan", @@ -1157,7 +1157,7 @@ const produce = [ "Nov", "Dec", ], - allergens: "none", + allergens: "NA", }, { foodName: "Strawberry", @@ -1165,10 +1165,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Berry", usedAs: "Fruit", month: ["Jun", "Jul", "Aug", "Sep"], - allergens: "none", + allergens: "NA", }, { foodName: "Swede", @@ -1176,10 +1176,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Root", usedAs: "Vegetable", month: ["Jan", "Feb", "Nov", "Dec"], - allergens: "none", + allergens: "NA", }, { foodName: "Sweet Potato", @@ -1187,10 +1187,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Root", usedAs: "Vegetable", month: ["Jan", "Feb", "Mar", "Oct", "Nov", "Dec"], - allergens: "none", + allergens: "NA", }, { foodName: "Sweetcorn", @@ -1198,10 +1198,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Scientific Anomaly", usedAs: "Vegetable", month: ["Sep"], - allergens: "none", + allergens: "NA", }, { foodName: "Swiss Chard", @@ -1209,10 +1209,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Leaf", usedAs: "Vegetable", month: ["Jul", "Aug", "Sep", "Oct", "Nov"], - allergens: "none", + allergens: "NA", }, { foodName: "Tayberry", @@ -1220,10 +1220,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Berry", usedAs: "Fruit", month: ["Jul", "Aug"], - allergens: "none", + allergens: "NA", }, { foodName: "Tomato", @@ -1231,10 +1231,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Berry", usedAs: "Vegetable", month: ["Jun", "Jul", "Aug", "Sep", "Oct"], - allergens: "none", + allergens: "NA", }, { foodName: "Tuna", @@ -1242,10 +1242,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Fish", usedAs: "Fish", month: ["May", "Jun", "Jul", "Aug", "Sep"], - allergens: "none", + allergens: "Fish", }, { foodName: "Turkey", @@ -1253,10 +1253,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Fowl", usedAs: "Meat", month: ["Dec"], - allergens: "none", + allergens: "NA", }, { foodName: "Turnip", @@ -1264,10 +1264,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Root", usedAs: "Vegetable", month: ["Jan", "Feb", "Oct", "Nov", "Dec"], - allergens: "none", + allergens: "NA", }, { foodName: "Venison", @@ -1275,10 +1275,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Meat", usedAs: "Meat", month: ["Jan", "Feb", "Nov", "Dec"], - allergens: "none", + allergens: "NA", }, { foodName: "Watercress", @@ -1286,10 +1286,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Leaf", usedAs: "Vegetable", month: ["Apr", "May", "Jun", "Jul", "Aug", "Sep"], - allergens: "none", + allergens: "NA", }, { foodName: "Watermelon", @@ -1297,10 +1297,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Berry", usedAs: "Fruit", month: ["Jul", "Aug"], - allergens: "none", + allergens: "NA", }, { foodName: "Whiting", @@ -1308,10 +1308,10 @@ const produce = [ description: "This is an example entry, and this is an example description.", family: "example", - foodType: "example", + foodType: "Fish", usedAs: "Fish", month: ["Jan", "Feb", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], - allergens: "none", + allergens: "Fish", }, ]; From fbac44a0e08204cae7d2f83cbfb0e1b3719f865a Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Tue, 26 Jul 2022 20:39:26 +0100 Subject: [PATCH 18/82] Added family. --- db/data.js | 206 ++++++++++++++++++++++++++--------------------------- 1 file changed, 103 insertions(+), 103 deletions(-) diff --git a/db/data.js b/db/data.js index 56de553..cce1f61 100644 --- a/db/data.js +++ b/db/data.js @@ -22,7 +22,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "Rosaceae", + family: "Rose", foodType: "Pome", usedAs: "Fruit", month: ["Jan", "Feb", "Sep", "Oct", "Nov", "Dec"], @@ -33,7 +33,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Rose", foodType: "Drupe", usedAs: "Fruit", month: ["May", "Jun", "Jul", "Aug", "Sep"], @@ -44,7 +44,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Asparagus", foodType: "Stem", usedAs: "Vegetable", month: ["Jun", "Jul"], @@ -55,7 +55,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Nightshade", foodType: "Berry", usedAs: "Vegetable", month: ["Jun", "Jul", "Aug", "Sep", "Oct"], @@ -66,7 +66,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Musa", foodType: "Berry", usedAs: "Fruit", month: [ @@ -90,7 +90,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Mint", foodType: "Herb", usedAs: "Herb", month: ["Jul", "Aug"], @@ -101,7 +101,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Meat", foodType: "Meat", usedAs: "Meat", month: [ @@ -125,7 +125,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Beet", foodType: "Root", usedAs: "Vegetable", month: ["Jan", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], @@ -136,7 +136,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Rose", foodType: "Berry", usedAs: "Fruit", month: ["Aug", "Sep", "Oct"], @@ -158,7 +158,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Ribes", foodType: "Pome", usedAs: "Fruit", month: ["Jan", "Feb", "Mar", "Dec"], @@ -169,7 +169,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Legume", foodType: "Legume", usedAs: "Vegetable", month: ["Jul", "Aug", "Sep"], @@ -180,7 +180,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Cabbage", foodType: "Cruciferous", usedAs: "Vegetable", month: ["Aug", "Sep", "Oct"], @@ -191,7 +191,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Cabbage", foodType: "Leaf", usedAs: "Vegetable", month: ["Jan", "Feb", "Mar", "Oct", "Nov", "Dec"], @@ -202,7 +202,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Cabbage", foodType: "Root", usedAs: "Vegetable", month: [ @@ -226,7 +226,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Carrot", foodType: "Root", usedAs: "Vegetable", month: ["Jun", "Jul", "Aug", "Sep"], @@ -237,7 +237,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Cabbage", foodType: "Cruciferous", usedAs: "Vegetable", month: ["Jan", "Feb", "Mar", "Apr"], @@ -248,7 +248,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Cabbage", foodType: "Cruciferous", usedAs: "Vegetable", month: ["Jul", "Aug", "Sep", "Oct"], @@ -259,7 +259,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Parsley", foodType: "Root", usedAs: "Vegetable", month: ["Jan", "Feb", "Mar", "Apr", "Sep", "Oct", "Nov", "Dec"], @@ -270,7 +270,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Parsley", foodType: "Stem", usedAs: "Vegetable", month: ["Jan", "Feb", "Aug", "Sep", "Oct", "Nov", "Dec"], @@ -281,7 +281,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Rose", foodType: "Berry", usedAs: "Fruit", month: ["Jul"], @@ -292,7 +292,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Parsley", foodType: "Herb", usedAs: "Herb", month: ["May", "Jun", "Jul", "Aug", "Sep"], @@ -303,7 +303,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Beech", foodType: "Nut", usedAs: "Nut", month: ["Jan", "Oct", "Nov", "Dec"], @@ -314,7 +314,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Daisy", foodType: "Leaf", usedAs: "Vegetable", month: ["Jan", "Feb", "Mar"], @@ -325,7 +325,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Citrus", foodType: "Citrus", usedAs: "Fruit", month: ["Jan", "Feb", "Nov", "Dec"], @@ -336,7 +336,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Fish", foodType: "Fish", usedAs: "Fish", month: ["Feb", "Mar", "Apr"], @@ -347,7 +347,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Cucurbita", foodType: "Squash", usedAs: "Vegetable", month: ["Jun", "Jul", "Aug", "Sep"], @@ -358,7 +358,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Cucurbita", foodType: "Squash", usedAs: "Vegetable", month: ["Jun", "Jul", "Aug"], @@ -369,8 +369,8 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", - foodType: "example", + family: "Fish", + foodType: "Fish", usedAs: "Fish", month: ["Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov"], allergens: "Crustacean", @@ -380,7 +380,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Rose", foodType: "Pome", usedAs: "Fruit", month: ["Aug"], @@ -391,7 +391,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Heath", foodType: "Berry", usedAs: "Fruit", month: ["Oct", "Nov", "Dec"], @@ -402,7 +402,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Rose", foodType: "Drupe", usedAs: "Fruit", month: ["Sep"], @@ -413,7 +413,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Palm", foodType: "Berry", usedAs: "Fruit", month: ["Jan", "Nov", "Dec"], @@ -424,7 +424,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Meat", foodType: "Fowl", usedAs: "Meat", month: ["Oct", "Nov", "Dec"], @@ -435,7 +435,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Sambucus", foodType: "Berry", usedAs: "Fruit", month: ["Aug", "Sep", "Oct"], @@ -457,7 +457,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Parsley", foodType: "Berry", usedAs: "Fruit", month: ["Aug", "Sep", "Oct"], @@ -468,7 +468,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Amaryllis", foodType: "Herb", usedAs: "Herb", month: ["Jul", "Aug", "Sep", "Oct"], @@ -479,7 +479,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Daisy", foodType: "Root", usedAs: "Vegetable", month: ["Jun", "Jul", "Aug", "Sep", "Oct", "Nov"], @@ -490,7 +490,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Meat", foodType: "Fowl", usedAs: "Meat", month: ["Jan", "Sep", "Oct", "Nov", "Dec"], @@ -501,7 +501,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Ribes", foodType: "Berry", usedAs: "Fruit", month: ["Jun", "Jul", "Aug", "Sep"], @@ -512,7 +512,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Citrus", foodType: "Citrus", usedAs: "Fruit", month: ["Jan", "Feb", "Mar", "Apr", "May", "Dec"], @@ -523,7 +523,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Meat", foodType: "Fowl", usedAs: "Meat", month: ["Aug", "Sep", "Oct", "Nov", "Dec"], @@ -534,7 +534,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Meat", foodType: "Fowl", usedAs: "Meat", month: ["Sep", "Oct", "Nov"], @@ -545,7 +545,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Fish", foodType: "Fish", usedAs: "Fish", month: ["Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep"], @@ -556,7 +556,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Daisy", foodType: "Root", usedAs: "Vegetable", month: ["Jan", "Feb", "Mar", "Nov", "Dec"], @@ -567,7 +567,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Cabbage", foodType: "Cruciferous", usedAs: "Vegetable", month: ["Jan", "Feb", "Oct", "Nov", "Dec"], @@ -578,7 +578,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Fish", foodType: "Fish", usedAs: "Fish", month: ["May", "Jun", "Jul", "Aug", "Sep"], @@ -589,7 +589,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Cabbage", foodType: "Root", usedAs: "Vegetable", month: ["Aug", "Sep", "Oct", "Nov"], @@ -600,7 +600,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Meat", foodType: "Meat", usedAs: "Meat", month: [ @@ -624,7 +624,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Honeysuckle", foodType: "Leaf", usedAs: "Vegetable", month: ["May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov"], @@ -635,7 +635,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Amaryllis", foodType: "Root", usedAs: "Vegetable", month: ["Jan", "Feb", "Mar", "Sep", "Oct", "Nov", "Dec"], @@ -646,7 +646,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Citrus", foodType: "Citrus", usedAs: "Fruit", month: ["Jan", "Feb", "Mar"], @@ -657,7 +657,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Daisy", foodType: "Leaf", usedAs: "Vegetable", month: ["May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], @@ -668,7 +668,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Rose", foodType: "Berry", usedAs: "Fruit", month: ["Aug", "Sep"], @@ -679,7 +679,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Fish", foodType: "Fish", usedAs: "Fish", month: ["May", "Jun", "Jul", "Aug", "Sep", "Oct"], @@ -690,7 +690,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Legume", foodType: "Legume", usedAs: "Vegetable", month: ["Jun", "Jul", "Aug"], @@ -701,7 +701,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Cucurbita", foodType: "Squash", usedAs: "Vegetable", month: ["Aug", "Sep"], @@ -712,7 +712,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Mint", foodType: "Herb", usedAs: "Herb", month: ["May", "Jun", "Jul", "Aug", "Sep"], @@ -723,7 +723,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Fish", foodType: "Fish", usedAs: "Fish", month: ["Jan", "Feb", "Mar", "Oct", "Nov", "Dec"], @@ -734,7 +734,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Citrus", foodType: "Citrus", usedAs: "Fruit", month: ["May", "Jun", "Jul", "Aug", "Sep"], @@ -745,7 +745,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Nightshade", foodType: "Root", usedAs: "Vegetable", month: ["Apr", "May", "Jun", "Jul"], @@ -756,7 +756,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Amaryllis", foodType: "Allium", usedAs: "Vegetable", month: [ @@ -780,7 +780,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Citrus", foodType: "Citrus", usedAs: "Fruit", month: ["Jan", "Feb", "Mar"], @@ -791,7 +791,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Fish", foodType: "Fish", usedAs: "Fish", month: ["Jan", "Feb", "Mar", "Apr", "Sep", "Oct", "Nov", "Dec"], @@ -802,7 +802,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Cabbage", foodType: "Leaf", usedAs: "Vegetable", month: [ @@ -826,7 +826,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Parsley", foodType: "Root", usedAs: "Vegetable", month: ["Jan", "Feb", "Mar", "Sep", "Oct", "Nov", "Dec"], @@ -837,7 +837,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Rose", foodType: "Drupe", usedAs: "Fruit", month: ["Aug", "Sep"], @@ -848,7 +848,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Rose", foodType: "Pome", usedAs: "Fruit", month: ["Jan", "Sep", "Oct", "Nov", "Dec"], @@ -859,7 +859,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Legume", foodType: "Legume", usedAs: "Vegetable", month: ["Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov"], @@ -870,7 +870,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Nightshade", foodType: "Berry", usedAs: "Vegetable", month: ["Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct"], @@ -881,7 +881,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Rose", foodType: "Drupe", usedAs: "Fruit", month: ["Sep", "Oct"], @@ -892,7 +892,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Punica", foodType: "Berry", usedAs: "Fruit", month: [ @@ -916,7 +916,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Meat", foodType: "Meat", usedAs: "Meat", month: [ @@ -940,7 +940,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Nightshade", foodType: "Root", usedAs: "Vegetable", month: ["Apr", "May", "Jun", "Jul"], @@ -951,7 +951,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Cucurbita", foodType: "Squash", usedAs: "Vegetable", month: ["Oct", "Nov", "Dec"], @@ -962,7 +962,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Cabbage", foodType: "Cruciferous", usedAs: "Vegetable", month: ["Feb", "Mar", "Apr"], @@ -973,7 +973,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Rose", foodType: "Pome", usedAs: "Fruit", month: ["Oct", "Nov", "Dec"], @@ -984,7 +984,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Daisy", foodType: "Leaf", usedAs: "Vegetable", month: [ @@ -1008,7 +1008,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Cabbage", foodType: "Root", usedAs: "Vegetable", month: ["May", "Jun", "Jul", "Aug", "Sep", "Oct"], @@ -1019,7 +1019,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Rose", foodType: "Berry", usedAs: "Fruit", month: ["Jul", "Aug", "Sep"], @@ -1030,7 +1030,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Ribes", foodType: "Berry", usedAs: "Fruit", month: ["Jul", "Aug", "Sep"], @@ -1041,7 +1041,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Buckwheat", foodType: "Stem", usedAs: "Fruit", month: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"], @@ -1052,7 +1052,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Legume", foodType: "Legume", usedAs: "Vegetable", month: ["Jun", "Jul", "Aug", "Sep", "Oct", "Nov"], @@ -1063,7 +1063,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Fish", foodType: "Fish", usedAs: "Fish", month: ["Mar", "Apr", "May", "Jun", "Jul", "Aug", "Fep"], @@ -1074,7 +1074,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Daisy", foodType: "Root", usedAs: "Vegetable", month: ["Jan", "Oct", "Nov", "Dec"], @@ -1085,7 +1085,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Parsley", foodType: "Leaf", usedAs: "Vegetable", month: ["Jul", "Aug"], @@ -1107,7 +1107,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Buckwheat", foodType: "Leaf", usedAs: "Vegetable", month: ["Apr", "May", "Jun", "Jul", "Aug", "Sep"], @@ -1118,7 +1118,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Cabbage", foodType: "Leaf", usedAs: "Vegetable", month: ["Apr", "May", "Jun"], @@ -1129,7 +1129,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Meat", foodType: "Meat", usedAs: "Meat", month: ["Feb", "Mar", "Apr", "May", "Jun"], @@ -1140,7 +1140,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Amaryllis", foodType: "Allium", usedAs: "Vegetable", month: [ @@ -1164,7 +1164,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Rose", foodType: "Berry", usedAs: "Fruit", month: ["Jun", "Jul", "Aug", "Sep"], @@ -1175,7 +1175,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Cabbage", foodType: "Root", usedAs: "Vegetable", month: ["Jan", "Feb", "Nov", "Dec"], @@ -1186,7 +1186,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Morning Glory", foodType: "Root", usedAs: "Vegetable", month: ["Jan", "Feb", "Mar", "Oct", "Nov", "Dec"], @@ -1197,7 +1197,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Grass", foodType: "Scientific Anomaly", usedAs: "Vegetable", month: ["Sep"], @@ -1208,7 +1208,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Beet", foodType: "Leaf", usedAs: "Vegetable", month: ["Jul", "Aug", "Sep", "Oct", "Nov"], @@ -1230,7 +1230,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Rose", foodType: "Berry", usedAs: "Vegetable", month: ["Jun", "Jul", "Aug", "Sep", "Oct"], @@ -1241,7 +1241,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Fish", foodType: "Fish", usedAs: "Fish", month: ["May", "Jun", "Jul", "Aug", "Sep"], @@ -1252,7 +1252,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Meat", foodType: "Fowl", usedAs: "Meat", month: ["Dec"], @@ -1263,7 +1263,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Cabbage", foodType: "Root", usedAs: "Vegetable", month: ["Jan", "Feb", "Oct", "Nov", "Dec"], @@ -1274,7 +1274,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Meat", foodType: "Meat", usedAs: "Meat", month: ["Jan", "Feb", "Nov", "Dec"], @@ -1285,7 +1285,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Cabbage", foodType: "Leaf", usedAs: "Vegetable", month: ["Apr", "May", "Jun", "Jul", "Aug", "Sep"], @@ -1296,7 +1296,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Cucurbita", foodType: "Berry", usedAs: "Fruit", month: ["Jul", "Aug"], @@ -1307,7 +1307,7 @@ const produce = [ imageURL: "https://via.placeholder.com/200x200", description: "This is an example entry, and this is an example description.", - family: "example", + family: "Fish", foodType: "Fish", usedAs: "Fish", month: ["Jan", "Feb", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], From d8ecefe1b6dd4d11be69d43c8b96b1283237b0c5 Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Tue, 26 Jul 2022 21:01:36 +0100 Subject: [PATCH 19/82] Updated comments. --- db/data.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/db/data.js b/db/data.js index cce1f61..e5be80f 100644 --- a/db/data.js +++ b/db/data.js @@ -5,14 +5,15 @@ FIELDS TO FILL: foodName DONE imageURL DONE description -family -foodType DONE WITH CAVEAT THIS WAS A NIGHTMARE +family DONE WITH CAVEAT THIS WAS A NIGHTMARE, MIGHT NEED EDITING +foodType DONE WITH CAVEAT THIS WAS A NIGHTMARE, MIGHT NEED EDITING usedAs DONE month DONE allergens DONE WITH CAVEAT THAT I DON'T KNOW ALL ALLERGENS, WILL WANT DOUBLE-CHECKING */ /* +TODO: ADD DESCRIPTIONS. TODO: ADD EASTER EGG LISTINGS. */ From e106dfa884cde3b7a3188290eb9d8d744a068fbf Mon Sep 17 00:00:00 2001 From: multi-vit <103585624+multi-vit@users.noreply.github.com> Date: Wed, 27 Jul 2022 10:12:28 +0100 Subject: [PATCH 20/82] Add search by food name --- app.js | 26 +++++++++++++------------- db/scripts/populateTable.js | 30 ++++++++++++++---------------- models/index.js | 14 +++++++++++--- routes/index.js | 28 +++++++++++++++------------- 4 files changed, 53 insertions(+), 45 deletions(-) diff --git a/app.js b/app.js index 13b06da..065d55f 100644 --- a/app.js +++ b/app.js @@ -1,20 +1,20 @@ -import express from 'express' -import cors from 'cors' -import router from './routes/index.js' +import express from "express"; +import cors from "cors"; +import router from "./routes/index.js"; -const PORT= process.env.PORT || 4000 +const PORT = process.env.PORT || 4000; +const app = express(); -const app = express() +app.use(cors()); +app.use(express.json()); +app.use("/produce", router); -app.use(cors()) -app.use(express.json()) +app.get("/", (req, res) => { + res.send("hello world"); +}); -app.use("/produce", router) +app.listen(`${PORT}`); -app.get('/', (req, res) => { - res.send('hello world') -}) - -app.listen(`${PORT}`) \ No newline at end of file +console.log(`Listening on ${PORT}`); diff --git a/db/scripts/populateTable.js b/db/scripts/populateTable.js index 8532ed6..a36865a 100644 --- a/db/scripts/populateTable.js +++ b/db/scripts/populateTable.js @@ -1,23 +1,21 @@ import query from "../index.js"; -import dummyProduce from "../dummyData.js"; +import data from "../data.js"; - -for (let i=0; i Date: Wed, 27 Jul 2022 10:14:50 +0100 Subject: [PATCH 21/82] Uncomment search by item --- routes/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/routes/index.js b/routes/index.js index 5d6cede..a37ee6b 100644 --- a/routes/index.js +++ b/routes/index.js @@ -4,10 +4,10 @@ import { getAll, getByItem } from "../models/index.js"; const router = express.Router(); router.get("/", async function (req, res) { - /* if (req.query !== undefined) { + if (req.query !== undefined) { let result = await getByItem(req.query); return res.json({ success: true, payload: result }); - } */ + } console.log(`Getting all items`); let result = await getAll(); return res.json({ success: true, payload: result }); From 0a6fffb89d235555cc79fb547e0f1791197e9d51 Mon Sep 17 00:00:00 2001 From: multi-vit <103585624+multi-vit@users.noreply.github.com> Date: Wed, 27 Jul 2022 10:17:37 +0100 Subject: [PATCH 22/82] Debugging search --- models/index.js | 2 +- routes/index.js | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/models/index.js b/models/index.js index 09cee8c..ce3c18f 100644 --- a/models/index.js +++ b/models/index.js @@ -7,7 +7,7 @@ export async function getAll() { } export async function getByItem(item) { let res = await query( - `SELECT * FROM produce WHERE lower(name) LIKE lower($1)`, + `SELECT * FROM produce WHERE lower(name) LIKE lower($1) RETURNING *`, [item] ); return res.rows; diff --git a/routes/index.js b/routes/index.js index a37ee6b..8247d9f 100644 --- a/routes/index.js +++ b/routes/index.js @@ -4,6 +4,7 @@ import { getAll, getByItem } from "../models/index.js"; const router = express.Router(); router.get("/", async function (req, res) { + console.log(req.query); if (req.query !== undefined) { let result = await getByItem(req.query); return res.json({ success: true, payload: result }); From b16e1178dac83b69c844d4bdba5f6e69faea5d6b Mon Sep 17 00:00:00 2001 From: fiona Date: Wed, 27 Jul 2022 10:36:32 +0100 Subject: [PATCH 23/82] troubleshooting produce paths --- routes/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/routes/index.js b/routes/index.js index 8247d9f..b451a6c 100644 --- a/routes/index.js +++ b/routes/index.js @@ -4,11 +4,11 @@ import { getAll, getByItem } from "../models/index.js"; const router = express.Router(); router.get("/", async function (req, res) { - console.log(req.query); +/* console.log(req.query); if (req.query !== undefined) { let result = await getByItem(req.query); return res.json({ success: true, payload: result }); - } + } */ console.log(`Getting all items`); let result = await getAll(); return res.json({ success: true, payload: result }); From 0ab4c18e4bc518222b2d46ae014470b3af3fa386 Mon Sep 17 00:00:00 2001 From: fiona Date: Wed, 27 Jul 2022 10:40:11 +0100 Subject: [PATCH 24/82] adding item search --- routes/index.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/routes/index.js b/routes/index.js index b451a6c..ebe6ce7 100644 --- a/routes/index.js +++ b/routes/index.js @@ -4,11 +4,11 @@ import { getAll, getByItem } from "../models/index.js"; const router = express.Router(); router.get("/", async function (req, res) { -/* console.log(req.query); - if (req.query !== undefined) { - let result = await getByItem(req.query); + console.log(req.query); + if (req.query.item !== undefined) { + let result = await getByItem(req.query.item); return res.json({ success: true, payload: result }); - } */ + } console.log(`Getting all items`); let result = await getAll(); return res.json({ success: true, payload: result }); From b5d367494b9f4fdce4ba3ad40a3aff93c43a24b8 Mon Sep 17 00:00:00 2001 From: fiona Date: Wed, 27 Jul 2022 11:36:55 +0100 Subject: [PATCH 25/82] checking version are the same --- models/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/models/index.js b/models/index.js index ce3c18f..fe714dc 100644 --- a/models/index.js +++ b/models/index.js @@ -6,8 +6,9 @@ export async function getAll() { return res.rows; } export async function getByItem(item) { + console.log('im starting to get by item ') let res = await query( - `SELECT * FROM produce WHERE lower(name) LIKE lower($1) RETURNING *`, + `SELECT * FROM produce WHERE lower(name) LIKE lower($1)`, [item] ); return res.rows; From 2441616e52ca3c4d89e40320ccc77738ed1dcd22 Mon Sep 17 00:00:00 2001 From: multi-vit <103585624+multi-vit@users.noreply.github.com> Date: Wed, 27 Jul 2022 11:53:54 +0100 Subject: [PATCH 26/82] Complete search by month --- app.js | 4 +++- db/index.js | 15 ++++++++++----- models/index.js | 8 +++++++- routes/index.js | 8 +++++--- 4 files changed, 25 insertions(+), 10 deletions(-) diff --git a/app.js b/app.js index 065d55f..ac92423 100644 --- a/app.js +++ b/app.js @@ -12,7 +12,9 @@ app.use(express.json()); app.use("/produce", router); app.get("/", (req, res) => { - res.send("hello world"); + res.send( + "Go to /produce to get all items, or use ?item= or ?month= to query specifically" + ); }); app.listen(`${PORT}`); diff --git a/db/index.js b/db/index.js index c63dc24..f13ca3d 100644 --- a/db/index.js +++ b/db/index.js @@ -1,11 +1,16 @@ -import pg from 'pg'; +import pg from "pg"; +import dotenv from "dotenv"; +dotenv.config(); const connectionString = process.env.PGURI; -const pool = new pg.Pool({connectionString, ssl: {rejectUnauthorized: false}}); +const pool = new pg.Pool({ + connectionString, + ssl: { rejectUnauthorized: false }, +}); export default function query(text, params, callback) { - return pool.query(text, params, callback) -}; + return pool.query(text, params, callback); +} // Checks that query is a-ok. -// console.log(await query("SELECT NOW()")) \ No newline at end of file +// console.log(await query("SELECT NOW()")) diff --git a/models/index.js b/models/index.js index fe714dc..fb62aae 100644 --- a/models/index.js +++ b/models/index.js @@ -6,10 +6,16 @@ export async function getAll() { return res.rows; } export async function getByItem(item) { - console.log('im starting to get by item ') let res = await query( `SELECT * FROM produce WHERE lower(name) LIKE lower($1)`, [item] ); return res.rows; } +export async function getByMonth(month) { + let res = await query( + `SELECT * FROM produce WHERE lower($1) ILIKE ANY(month);`, + [month] + ); + return res.rows; +} diff --git a/routes/index.js b/routes/index.js index ebe6ce7..92dece5 100644 --- a/routes/index.js +++ b/routes/index.js @@ -1,15 +1,17 @@ import express from "express"; -import { getAll, getByItem } from "../models/index.js"; +import { getAll, getByItem, getByMonth } from "../models/index.js"; const router = express.Router(); router.get("/", async function (req, res) { - console.log(req.query); if (req.query.item !== undefined) { let result = await getByItem(req.query.item); return res.json({ success: true, payload: result }); } - console.log(`Getting all items`); + if (req.query.month !== undefined) { + let result = await getByMonth(req.query.month); + return res.json({ success: true, payload: result }); + } let result = await getAll(); return res.json({ success: true, payload: result }); }); From 1be05b4047c2e9ec34e0e1a15a22aa33b0858f36 Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Fri, 29 Jul 2022 14:39:52 +0100 Subject: [PATCH 27/82] Edited data. --- db/data.js | 744 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 428 insertions(+), 316 deletions(-) diff --git a/db/data.js b/db/data.js index e5be80f..cea2e67 100644 --- a/db/data.js +++ b/db/data.js @@ -22,67 +22,74 @@ const produce = [ foodName: "Apple", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", foodType: "Pome", usedAs: "Fruit", - month: ["Jan", "Feb", "Sep", "Oct", "Nov", "Dec"], + month: [ + "January", + "February", + "September", + "October", + "November", + "December", + ], allergens: "NA", }, { foodName: "Apricot", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", foodType: "Drupe", usedAs: "Fruit", - month: ["May", "Jun", "Jul", "Aug", "Sep"], + month: ["May", "June", "July", "August", "September"], allergens: "NA", }, { foodName: "Asparagus", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Asparagus", foodType: "Stem", usedAs: "Vegetable", - month: ["Jun", "Jul"], + month: ["June", "July"], allergens: "NA", }, { foodName: "Aubergine", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Nightshade", foodType: "Berry", usedAs: "Vegetable", - month: ["Jun", "Jul", "Aug", "Sep", "Oct"], + month: ["June", "July", "August", "September", "October"], allergens: "NA", }, { foodName: "Banana", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Musa", foodType: "Berry", usedAs: "Fruit", month: [ - "Jan", - "Feb", - "Mar", - "Apr", + "January", + "February", + "March", + "April", "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec", + "June", + "July", + "August", + "September", + "October", + "November", + "December", ], allergens: "NA", }, @@ -90,34 +97,34 @@ const produce = [ foodName: "Basil", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Mint", foodType: "Herb", usedAs: "Herb", - month: ["Jul", "Aug"], + month: ["July", "August"], allergens: "NA", }, { foodName: "Beef", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", foodType: "Meat", usedAs: "Meat", month: [ - "Jan", - "Feb", - "Mar", - "Apr", + "January", + "February", + "March", + "April", "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec", + "June", + "July", + "August", + "September", + "October", + "November", + "December", ], allergens: "NA", }, @@ -125,100 +132,108 @@ const produce = [ foodName: "Beetroot", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Beet", foodType: "Root", usedAs: "Vegetable", - month: ["Jan", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], + month: [ + "January", + "July", + "August", + "September", + "October", + "November", + "December", + ], allergens: "NA", }, { foodName: "Blackberry", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", foodType: "Berry", usedAs: "Fruit", - month: ["Aug", "Sep", "Oct"], + month: ["August", "September", "October"], allergens: "NA", }, { foodName: "Blackcurrants", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "example", foodType: "Berry", usedAs: "Fruit", - month: ["Jun", "Jul"], + month: ["June", "July"], allergens: "NA", }, { foodName: "Bramley Apple", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Ribes", foodType: "Pome", usedAs: "Fruit", - month: ["Jan", "Feb", "Mar", "Dec"], + month: ["January", "February", "March", "December"], allergens: "NA", }, { foodName: "Broadbean", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Legume", foodType: "Legume", usedAs: "Vegetable", - month: ["Jul", "Aug", "Sep"], + month: ["July", "August", "September"], allergens: "NA", }, { foodName: "Broccoli", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", foodType: "Cruciferous", usedAs: "Vegetable", - month: ["Aug", "Sep", "Oct"], + month: ["August", "September", "October"], allergens: "NA", }, { foodName: "Brussels Sprouts", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", foodType: "Leaf", usedAs: "Vegetable", - month: ["Jan", "Feb", "Mar", "Oct", "Nov", "Dec"], + month: ["January", "February", "March", "October", "November", "December"], allergens: "NA", }, { foodName: "Cabbage", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", foodType: "Root", usedAs: "Vegetable", month: [ - "Jan", - "Feb", - "Mar", - "Apr", + "January", + "February", + "March", + "April", "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec", + "June", + "July", + "August", + "September", + "October", + "November", + "December", ], allergens: "NA", }, @@ -226,397 +241,423 @@ const produce = [ foodName: "Carrot", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Carrot", foodType: "Root", usedAs: "Vegetable", - month: ["Jun", "Jul", "Aug", "Sep"], + month: ["June", "July", "August", "September"], allergens: "NA", }, { foodName: "Cauliflower", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", foodType: "Cruciferous", usedAs: "Vegetable", - month: ["Jan", "Feb", "Mar", "Apr"], + month: ["January", "February", "March", "April"], allergens: "NA", }, { foodName: "Cavolo Nero", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", foodType: "Cruciferous", usedAs: "Vegetable", - month: ["Jul", "Aug", "Sep", "Oct"], + month: ["July", "August", "September", "October"], allergens: "NA", }, { foodName: "Celeriac", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Parsley", foodType: "Root", usedAs: "Vegetable", - month: ["Jan", "Feb", "Mar", "Apr", "Sep", "Oct", "Nov", "Dec"], + month: [ + "January", + "February", + "March", + "April", + "September", + "October", + "November", + "December", + ], allergens: "Celery", }, { foodName: "Celery", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Parsley", foodType: "Stem", usedAs: "Vegetable", - month: ["Jan", "Feb", "Aug", "Sep", "Oct", "Nov", "Dec"], + month: [ + "January", + "February", + "August", + "September", + "October", + "November", + "December", + ], allergens: "Celery", }, { foodName: "Cherry", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", foodType: "Berry", usedAs: "Fruit", - month: ["Jul"], + month: ["July"], allergens: "NA", }, { foodName: "Chervil", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Parsley", foodType: "Herb", usedAs: "Herb", - month: ["May", "Jun", "Jul", "Aug", "Sep"], + month: ["May", "June", "July", "August", "September"], allergens: "NA", }, { foodName: "Chestnut", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Beech", foodType: "Nut", usedAs: "Nut", - month: ["Jan", "Oct", "Nov", "Dec"], + month: ["January", "October", "November", "December"], allergens: "Nut", }, { foodName: "Chicory", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Daisy", foodType: "Leaf", usedAs: "Vegetable", - month: ["Jan", "Feb", "Mar"], + month: ["January", "February", "March"], allergens: "NA", }, { foodName: "Clementine", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Citrus", foodType: "Citrus", usedAs: "Fruit", - month: ["Jan", "Feb", "Nov", "Dec"], + month: ["January", "February", "November", "December"], allergens: "NA", }, { foodName: "Cod", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", foodType: "Fish", usedAs: "Fish", - month: ["Feb", "Mar", "Apr"], + month: ["February", "March", "April"], allergens: "Fish", }, { foodName: "Courgette", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cucurbita", - foodType: "Squash", + foodType: "Gourd", usedAs: "Vegetable", - month: ["Jun", "Jul", "Aug", "Sep"], + month: ["June", "July", "August", "September"], allergens: "NA", }, { foodName: "Courgette Flower", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cucurbita", - foodType: "Squash", + foodType: "Gourd", usedAs: "Vegetable", - month: ["Jun", "Jul", "Aug"], + month: ["June", "July", "August"], allergens: "NA", }, { foodName: "Crab", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", foodType: "Fish", usedAs: "Fish", - month: ["Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov"], + month: [ + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + ], allergens: "Crustacean", }, { foodName: "Crab Apple", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", foodType: "Pome", usedAs: "Fruit", - month: ["Aug"], + month: ["August"], allergens: "NA", }, { foodName: "Cranberry", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Heath", foodType: "Berry", usedAs: "Fruit", - month: ["Oct", "Nov", "Dec"], + month: ["October", "November", "December"], allergens: "NA", }, { foodName: "Damson", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", foodType: "Drupe", usedAs: "Fruit", - month: ["Sep"], + month: ["September"], allergens: "NA", }, { foodName: "Date", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Palm", foodType: "Berry", usedAs: "Fruit", - month: ["Jan", "Nov", "Dec"], + month: ["January", "November", "December"], allergens: "NA", }, { foodName: "Duck", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", foodType: "Fowl", usedAs: "Meat", - month: ["Oct", "Nov", "Dec"], + month: ["October", "November", "December"], allergens: "NA", }, { foodName: "Elderberries", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Sambucus", foodType: "Berry", usedAs: "Fruit", - month: ["Aug", "Sep", "Oct"], + month: ["August", "September", "October"], allergens: "NA", }, { foodName: "Fennel Bulb", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "example", foodType: "Stem", usedAs: "Vegetable", - month: ["Jun", "Jul", "Aug", "Sep"], + month: ["June", "July", "August", "September"], allergens: "NA", }, { foodName: "Fig", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Parsley", foodType: "Berry", usedAs: "Fruit", - month: ["Aug", "Sep", "Oct"], + month: ["August", "September", "October"], allergens: "NA", }, { foodName: "Garlic", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Amaryllis", foodType: "Herb", usedAs: "Herb", - month: ["Jul", "Aug", "Sep", "Oct"], + month: ["July", "August", "September", "October"], allergens: "NA", }, { foodName: "Globe Artichoke", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Daisy", foodType: "Root", usedAs: "Vegetable", - month: ["Jun", "Jul", "Aug", "Sep", "Oct", "Nov"], + month: ["June", "July", "August", "September", "October", "November"], allergens: "NA", }, { foodName: "Goose", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", foodType: "Fowl", usedAs: "Meat", - month: ["Jan", "Sep", "Oct", "Nov", "Dec"], + month: ["January", "September", "October", "November", "December"], allergens: "NA", }, { foodName: "Gooseberry", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Ribes", foodType: "Berry", usedAs: "Fruit", - month: ["Jun", "Jul", "Aug", "Sep"], + month: ["June", "July", "August", "September"], allergens: "NA", }, { foodName: "Grapefruit", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Citrus", foodType: "Citrus", usedAs: "Fruit", - month: ["Jan", "Feb", "Mar", "Apr", "May", "Dec"], + month: ["January", "February", "March", "April", "May", "December"], allergens: "NA", }, { foodName: "Grouse", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", foodType: "Fowl", usedAs: "Meat", - month: ["Aug", "Sep", "Oct", "Nov", "Dec"], + month: ["August", "September", "October", "November", "December"], allergens: "NA", }, { foodName: "Guinea Fowl", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", foodType: "Fowl", usedAs: "Meat", - month: ["Sep", "Oct", "Nov"], + month: ["September", "October", "November"], allergens: "NA", }, { foodName: "Halibut", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", foodType: "Fish", usedAs: "Fish", - month: ["Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep"], + month: ["March", "April", "May", "June", "July", "August", "September"], allergens: "Fish", }, { foodName: "Jerusalem Artichoke", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Daisy", foodType: "Root", usedAs: "Vegetable", - month: ["Jan", "Feb", "Mar", "Nov", "Dec"], + month: ["January", "February", "March", "November", "December"], allergens: "NA", }, { foodName: "Kale", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", foodType: "Cruciferous", usedAs: "Vegetable", - month: ["Jan", "Feb", "Oct", "Nov", "Dec"], + month: ["January", "February", "October", "November", "December"], allergens: "NA", }, { foodName: "Kipper", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", foodType: "Fish", usedAs: "Fish", - month: ["May", "Jun", "Jul", "Aug", "Sep"], + month: ["May", "June", "July", "August", "September"], allergens: "Fish", }, { foodName: "Kohlrabi", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", foodType: "Root", usedAs: "Vegetable", - month: ["Aug", "Sep", "Oct", "Nov"], + month: ["August", "September", "October", "November"], allergens: "NA", }, { foodName: "Lamb", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", foodType: "Meat", usedAs: "Meat", month: [ - "Jan", - "Feb", - "Mar", - "Apr", + "January", + "February", + "March", + "April", "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec", + "June", + "July", + "August", + "September", + "October", + "November", + "December", ], allergens: "NA", }, @@ -624,155 +665,180 @@ const produce = [ foodName: "Lamb's Lettuce", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Honeysuckle", foodType: "Leaf", usedAs: "Vegetable", - month: ["May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov"], + month: [ + "May", + "June", + "July", + "August", + "September", + "October", + "November", + ], allergens: "NA", }, { foodName: "Leek", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Amaryllis", foodType: "Root", usedAs: "Vegetable", - month: ["Jan", "Feb", "Mar", "Sep", "Oct", "Nov", "Dec"], + month: [ + "January", + "February", + "March", + "September", + "October", + "November", + "December", + ], allergens: "NA", }, { foodName: "Lemon", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Citrus", foodType: "Citrus", usedAs: "Fruit", - month: ["Jan", "Feb", "Mar"], + month: ["January", "February", "March"], allergens: "NA", }, { foodName: "Lettuce", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Daisy", foodType: "Leaf", usedAs: "Vegetable", - month: ["May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], + month: [ + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December", + ], allergens: "NA", }, { foodName: "Loganberry", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", foodType: "Berry", usedAs: "Fruit", - month: ["Aug", "Sep"], + month: ["August", "September"], allergens: "NA", }, { foodName: "Mackerel", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", foodType: "Fish", usedAs: "Fish", - month: ["May", "Jun", "Jul", "Aug", "Sep", "Oct"], + month: ["May", "June", "July", "August", "September", "October"], allergens: "Fish", }, { foodName: "Mangetout", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Legume", foodType: "Legume", usedAs: "Vegetable", - month: ["Jun", "Jul", "Aug"], + month: ["June", "July", "August"], allergens: "NA", }, { foodName: "Marrow", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cucurbita", - foodType: "Squash", + foodType: "Gourd", usedAs: "Vegetable", - month: ["Aug", "Sep"], + month: ["August", "September"], allergens: "NA", }, { foodName: "Mint", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Mint", foodType: "Herb", usedAs: "Herb", - month: ["May", "Jun", "Jul", "Aug", "Sep"], + month: ["May", "June", "July", "August", "September"], allergens: "NA", }, { foodName: "Mussels", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", foodType: "Fish", usedAs: "Fish", - month: ["Jan", "Feb", "Mar", "Oct", "Nov", "Dec"], + month: ["January", "February", "March", "October", "November", "December"], allergens: "Crustacean", }, { foodName: "Nectarine", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Citrus", foodType: "Citrus", usedAs: "Fruit", - month: ["May", "Jun", "Jul", "Aug", "Sep"], + month: ["May", "June", "July", "August", "September"], allergens: "NA", }, { foodName: "New Potatoes", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Nightshade", foodType: "Root", usedAs: "Vegetable", - month: ["Apr", "May", "Jun", "Jul"], + month: ["April", "May", "June", "July"], allergens: "NA", }, { foodName: "Onion", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Amaryllis", foodType: "Allium", usedAs: "Vegetable", month: [ - "Jan", - "Feb", - "Mar", - "Apr", + "January", + "February", + "March", + "April", "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec", + "June", + "July", + "August", + "September", + "October", + "November", + "December", ], allergens: "NA", }, @@ -780,45 +846,54 @@ const produce = [ foodName: "Orange", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Citrus", foodType: "Citrus", usedAs: "Fruit", - month: ["Jan", "Feb", "Mar"], + month: ["January", "February", "March"], allergens: "NA", }, { foodName: "Oyster", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", foodType: "Fish", usedAs: "Fish", - month: ["Jan", "Feb", "Mar", "Apr", "Sep", "Oct", "Nov", "Dec"], + month: [ + "January", + "February", + "March", + "April", + "September", + "October", + "November", + "December", + ], allergens: "Crustacean", }, { foodName: "Pak Choi", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", foodType: "Leaf", usedAs: "Vegetable", month: [ - "Jan", - "Feb", - "Mar", - "Apr", + "January", + "February", + "March", + "April", "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec", + "June", + "July", + "August", + "September", + "October", + "November", + "December", ], allergens: "NA", }, @@ -826,89 +901,116 @@ const produce = [ foodName: "Parsnip", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Parsley", foodType: "Root", usedAs: "Vegetable", - month: ["Jan", "Feb", "Mar", "Sep", "Oct", "Nov", "Dec"], + month: [ + "January", + "February", + "March", + "September", + "October", + "November", + "December", + ], allergens: "NA", }, { foodName: "Peach", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", foodType: "Drupe", usedAs: "Fruit", - month: ["Aug", "Sep"], + month: ["August", "September"], allergens: "NA", }, { foodName: "Pear", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", foodType: "Pome", usedAs: "Fruit", - month: ["Jan", "Sep", "Oct", "Nov", "Dec"], + month: ["January", "September", "October", "November", "December"], allergens: "NA", }, { foodName: "Peas", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Legume", foodType: "Legume", usedAs: "Vegetable", - month: ["Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov"], + month: [ + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + ], allergens: "NA", }, { foodName: "Pepper", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Nightshade", foodType: "Berry", usedAs: "Vegetable", - month: ["Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct"], + month: [ + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + ], allergens: "NA", }, { foodName: "Plum", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", foodType: "Drupe", usedAs: "Fruit", - month: ["Sep", "Oct"], + month: ["September", "October"], allergens: "NA", }, { foodName: "Pomegranate", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Punica", foodType: "Berry", usedAs: "Fruit", month: [ - "Jan", - "Feb", - "Mar", - "Apr", + "January", + "February", + "March", + "April", "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec", + "June", + "July", + "August", + "September", + "October", + "November", + "December", ], allergens: "NA", }, @@ -916,23 +1018,23 @@ const produce = [ foodName: "Pork", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", foodType: "Meat", usedAs: "Meat", month: [ - "Jan", - "Feb", - "Mar", - "Apr", + "January", + "February", + "March", + "April", "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec", + "June", + "July", + "August", + "September", + "October", + "November", + "December", ], allergens: "NA", }, @@ -940,67 +1042,67 @@ const produce = [ foodName: "Potato", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Nightshade", foodType: "Root", usedAs: "Vegetable", - month: ["Apr", "May", "Jun", "Jul"], + month: ["April", "May", "June", "July"], allergens: "NA", }, { foodName: "Pumpkin", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cucurbita", - foodType: "Squash", + foodType: "Gourd", usedAs: "Vegetable", - month: ["Oct", "Nov", "Dec"], + month: ["October", "November", "December"], allergens: "NA", }, { foodName: "Purple Sprouting Broccoli", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", foodType: "Cruciferous", usedAs: "Vegetable", - month: ["Feb", "Mar", "Apr"], + month: ["February", "March", "April"], allergens: "NA", }, { foodName: "Quince", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", foodType: "Pome", usedAs: "Fruit", - month: ["Oct", "Nov", "Dec"], + month: ["October", "November", "December"], allergens: "NA", }, { foodName: "Radicchio", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Daisy", foodType: "Leaf", usedAs: "Vegetable", month: [ - "Jan", - "Feb", - "Mar", - "Apr", + "January", + "February", + "March", + "April", "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec", + "June", + "July", + "August", + "September", + "October", + "November", + "December", ], allergens: "NA", }, @@ -1008,155 +1110,155 @@ const produce = [ foodName: "Radish", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", foodType: "Root", usedAs: "Vegetable", - month: ["May", "Jun", "Jul", "Aug", "Sep", "Oct"], + month: ["May", "June", "July", "August", "September", "October"], allergens: "NA", }, { foodName: "Raspberry", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", foodType: "Berry", usedAs: "Fruit", - month: ["Jul", "Aug", "Sep"], + month: ["July", "August", "September"], allergens: "NA", }, { foodName: "Redcurrant", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Ribes", foodType: "Berry", usedAs: "Fruit", - month: ["Jul", "Aug", "Sep"], + month: ["July", "August", "September"], allergens: "NA", }, { foodName: "Rhubarb", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Buckwheat", foodType: "Stem", usedAs: "Fruit", - month: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"], + month: ["January", "February", "March", "April", "May", "June"], allergens: "NA", }, { foodName: "Runner Bean", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Legume", foodType: "Legume", usedAs: "Vegetable", - month: ["Jun", "Jul", "Aug", "Sep", "Oct", "Nov"], + month: ["June", "July", "August", "September", "October", "November"], allergens: "NA", }, { foodName: "Salmon", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", foodType: "Fish", usedAs: "Fish", - month: ["Mar", "Apr", "May", "Jun", "Jul", "Aug", "Fep"], + month: ["March", "April", "May", "June", "July", "August", "Fep"], allergens: "Fish", }, { foodName: "Salsify", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Daisy", foodType: "Root", usedAs: "Vegetable", - month: ["Jan", "Oct", "Nov", "Dec"], + month: ["January", "October", "November", "December"], allergens: "NA", }, { foodName: "Samphire", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Parsley", foodType: "Leaf", usedAs: "Vegetable", - month: ["Jul", "Aug"], + month: ["July", "August"], allergens: "NA", }, { foodName: "Sorrel", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "example", foodType: "Leaf", usedAs: "Vegetable", - month: ["Apr", "May", "Jun", "Jul", "Aug", "Sep"], + month: ["April", "May", "June", "July", "August", "September"], allergens: "NA", }, { foodName: "Spinach", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Buckwheat", foodType: "Leaf", usedAs: "Vegetable", - month: ["Apr", "May", "Jun", "Jul", "Aug", "Sep"], + month: ["April", "May", "June", "July", "August", "September"], allergens: "NA", }, { foodName: "Spring Greens", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", foodType: "Leaf", usedAs: "Vegetable", - month: ["Apr", "May", "Jun"], + month: ["April", "May", "June"], allergens: "NA", }, { foodName: "Spring Lamb", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", foodType: "Meat", usedAs: "Meat", - month: ["Feb", "Mar", "Apr", "May", "Jun"], + month: ["February", "March", "April", "May", "June"], allergens: "NA", }, { foodName: "Spring Onion", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Amaryllis", foodType: "Allium", usedAs: "Vegetable", month: [ - "Jan", - "Feb", - "Mar", - "Apr", + "January", + "February", + "March", + "April", "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec", + "June", + "July", + "August", + "September", + "October", + "November", + "December", ], allergens: "NA", }, @@ -1164,154 +1266,164 @@ const produce = [ foodName: "Strawberry", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", foodType: "Berry", usedAs: "Fruit", - month: ["Jun", "Jul", "Aug", "Sep"], + month: ["June", "July", "August", "September"], allergens: "NA", }, { foodName: "Swede", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", foodType: "Root", usedAs: "Vegetable", - month: ["Jan", "Feb", "Nov", "Dec"], + month: ["January", "February", "November", "December"], allergens: "NA", }, { foodName: "Sweet Potato", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Morning Glory", foodType: "Root", usedAs: "Vegetable", - month: ["Jan", "Feb", "Mar", "Oct", "Nov", "Dec"], + month: ["January", "February", "March", "October", "November", "December"], allergens: "NA", }, { foodName: "Sweetcorn", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Grass", foodType: "Scientific Anomaly", usedAs: "Vegetable", - month: ["Sep"], + month: ["September"], allergens: "NA", }, { foodName: "Swiss Chard", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Beet", foodType: "Leaf", usedAs: "Vegetable", - month: ["Jul", "Aug", "Sep", "Oct", "Nov"], + month: ["July", "August", "September", "October", "November"], allergens: "NA", }, { foodName: "Tayberry", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "example", foodType: "Berry", usedAs: "Fruit", - month: ["Jul", "Aug"], + month: ["July", "August"], allergens: "NA", }, { foodName: "Tomato", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", foodType: "Berry", usedAs: "Vegetable", - month: ["Jun", "Jul", "Aug", "Sep", "Oct"], + month: ["June", "July", "August", "September", "October"], allergens: "NA", }, { foodName: "Tuna", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie..", family: "Fish", foodType: "Fish", usedAs: "Fish", - month: ["May", "Jun", "Jul", "Aug", "Sep"], + month: ["May", "June", "July", "August", "September"], allergens: "Fish", }, { foodName: "Turkey", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", foodType: "Fowl", usedAs: "Meat", - month: ["Dec"], + month: ["December"], allergens: "NA", }, { foodName: "Turnip", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", foodType: "Root", usedAs: "Vegetable", - month: ["Jan", "Feb", "Oct", "Nov", "Dec"], + month: ["January", "February", "October", "November", "December"], allergens: "NA", }, { foodName: "Venison", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", foodType: "Meat", usedAs: "Meat", - month: ["Jan", "Feb", "Nov", "Dec"], + month: ["January", "February", "November", "December"], allergens: "NA", }, { foodName: "Watercress", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", foodType: "Leaf", usedAs: "Vegetable", - month: ["Apr", "May", "Jun", "Jul", "Aug", "Sep"], + month: ["April", "May", "June", "July", "August", "September"], allergens: "NA", }, { foodName: "Watermelon", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cucurbita", foodType: "Berry", usedAs: "Fruit", - month: ["Jul", "Aug"], + month: ["July", "August"], allergens: "NA", }, { foodName: "Whiting", imageURL: "https://via.placeholder.com/200x200", description: - "This is an example entry, and this is an example description.", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", foodType: "Fish", usedAs: "Fish", - month: ["Jan", "Feb", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], + month: [ + "January", + "February", + "June", + "July", + "August", + "September", + "October", + "November", + "December", + ], allergens: "Fish", }, ]; From d31c2f5ceb50d59b2ab8a1b2b908f8ff338fe981 Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Mon, 1 Aug 2022 10:30:10 +0100 Subject: [PATCH 28/82] Updated notes. --- db/data.js | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/db/data.js b/db/data.js index cea2e67..a547fdf 100644 --- a/db/data.js +++ b/db/data.js @@ -1,19 +1,7 @@ /* Data drawn from https://www.bbcgoodfood.com/seasonal-calendar. If we want to make this a releasable API at some point in the future, will probably be worth making the data more comprehensive, but this'll do for now. */ /* -FIELDS TO FILL: -foodName DONE -imageURL DONE -description -family DONE WITH CAVEAT THIS WAS A NIGHTMARE, MIGHT NEED EDITING -foodType DONE WITH CAVEAT THIS WAS A NIGHTMARE, MIGHT NEED EDITING -usedAs DONE -month DONE -allergens DONE WITH CAVEAT THAT I DON'T KNOW ALL ALLERGENS, WILL WANT DOUBLE-CHECKING -*/ - -/* -TODO: ADD DESCRIPTIONS. +TODO: ADD DESCRIPTIONS FOR ITEMS WE WANT TO SHOW IN THE APP DEMO. TODO: ADD EASTER EGG LISTINGS. */ From 07e65cecaae94dd3ee5ebf6b99c29a61ee6790ee Mon Sep 17 00:00:00 2001 From: codedresser Date: Mon, 1 Aug 2022 11:50:22 +0100 Subject: [PATCH 29/82] random route and function added --- app.js | 2 +- helper_scripts/randomGet.js | 16 ++++++++++++++++ models/index.js | 2 +- routes/index.js | 12 +++++++++++- 4 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 helper_scripts/randomGet.js diff --git a/app.js b/app.js index ac92423..bcd88d5 100644 --- a/app.js +++ b/app.js @@ -13,7 +13,7 @@ app.use("/produce", router); app.get("/", (req, res) => { res.send( - "Go to /produce to get all items, or use ?item= or ?month= to query specifically" + "Go to /produce to get all items, or use ?item= or ?month= to query specifically, or /produce/random if you're feeling lucky" ); }); diff --git a/helper_scripts/randomGet.js b/helper_scripts/randomGet.js new file mode 100644 index 0000000..6999073 --- /dev/null +++ b/helper_scripts/randomGet.js @@ -0,0 +1,16 @@ +export function getRandom(allResults){ + + let randomResults = []; + + let length = allResults.length; + + if (length < 5){ + return allResults; + } else { + for (let i = 0; 1 < 5; i++){ + let randomNumber = Math.floor(Math.random() * length); + randomResults.push(allResults[randomNumber]); + } + return randomResults + }; +}; \ No newline at end of file diff --git a/models/index.js b/models/index.js index fb62aae..c72f75c 100644 --- a/models/index.js +++ b/models/index.js @@ -18,4 +18,4 @@ export async function getByMonth(month) { [month] ); return res.rows; -} +} \ No newline at end of file diff --git a/routes/index.js b/routes/index.js index 92dece5..c9c446a 100644 --- a/routes/index.js +++ b/routes/index.js @@ -1,5 +1,6 @@ import express from "express"; -import { getAll, getByItem, getByMonth } from "../models/index.js"; +import { getAll, getByItem, getByMonth} from "../models/index.js"; +import { getRandom } from "../helper_scripts/randomGet.js"; const router = express.Router(); @@ -16,6 +17,15 @@ router.get("/", async function (req, res) { return res.json({ success: true, payload: result }); }); +router.get("/random", async function (req, res) { + if (req.query.month !== undefined) { + let allResults = await getByMonth(req.query.month); + let result = getRandom(allResults) + return res.json({ success: true, payload: result }); + } + return res.json({success: false, payload: "Sorry, no random food for you today"}); +}); + // router.post // router.patch From 585ca8056491abd6764dd4956b6212a9d9d48dc2 Mon Sep 17 00:00:00 2001 From: multi-vit <103585624+multi-vit@users.noreply.github.com> Date: Mon, 1 Aug 2022 12:03:58 +0100 Subject: [PATCH 30/82] Debug random function --- helper_scripts/randomGet.js | 31 +++++++++++++++---------------- routes/index.js | 9 ++++++--- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/helper_scripts/randomGet.js b/helper_scripts/randomGet.js index 6999073..9d320dc 100644 --- a/helper_scripts/randomGet.js +++ b/helper_scripts/randomGet.js @@ -1,16 +1,15 @@ -export function getRandom(allResults){ - - let randomResults = []; - - let length = allResults.length; - - if (length < 5){ - return allResults; - } else { - for (let i = 0; 1 < 5; i++){ - let randomNumber = Math.floor(Math.random() * length); - randomResults.push(allResults[randomNumber]); - } - return randomResults - }; -}; \ No newline at end of file +export function getRandom(allResults) { + let randomResults = []; + let length = allResults.length; + if (length < 5) { + return allResults; + } else { + for (let i = 0; i < 5; i++) { + console.log("Returning 5 items"); + let randomNumber = Math.floor(Math.random() * length); + console.log(randomNumber); + randomResults.push(allResults[randomNumber]); + } + return randomResults; + } +} diff --git a/routes/index.js b/routes/index.js index c9c446a..8df97f4 100644 --- a/routes/index.js +++ b/routes/index.js @@ -1,5 +1,5 @@ import express from "express"; -import { getAll, getByItem, getByMonth} from "../models/index.js"; +import { getAll, getByItem, getByMonth } from "../models/index.js"; import { getRandom } from "../helper_scripts/randomGet.js"; const router = express.Router(); @@ -20,10 +20,13 @@ router.get("/", async function (req, res) { router.get("/random", async function (req, res) { if (req.query.month !== undefined) { let allResults = await getByMonth(req.query.month); - let result = getRandom(allResults) + let result = getRandom(allResults); return res.json({ success: true, payload: result }); } - return res.json({success: false, payload: "Sorry, no random food for you today"}); + return res.json({ + success: false, + payload: "Sorry, no random food for you today", + }); }); // router.post From 8d3dca4b1bb4f79876c0f297740e608a34981dff Mon Sep 17 00:00:00 2001 From: multi-vit <103585624+multi-vit@users.noreply.github.com> Date: Mon, 1 Aug 2022 12:29:45 +0100 Subject: [PATCH 31/82] Account for random number being the same Co-authored-by: Matt Miller <101735099+codedresser@users.noreply.github.com> --- helper_scripts/randomGet.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/helper_scripts/randomGet.js b/helper_scripts/randomGet.js index 9d320dc..e1ee5d6 100644 --- a/helper_scripts/randomGet.js +++ b/helper_scripts/randomGet.js @@ -1,14 +1,22 @@ export function getRandom(allResults) { let randomResults = []; let length = allResults.length; + if (length < 5) { return allResults; } else { for (let i = 0; i < 5; i++) { - console.log("Returning 5 items"); let randomNumber = Math.floor(Math.random() * length); - console.log(randomNumber); - randomResults.push(allResults[randomNumber]); + if ( + randomResults.some((item) => { + return item.id === allResults[randomNumber].id; + }) + ) { + console.log("Duplicate found, going again!"); + i--; + } else { + randomResults.push(allResults[randomNumber]); + } } return randomResults; } From 7cf1ef8e06b08819a043bfbec1a8612259bf1c2a Mon Sep 17 00:00:00 2001 From: multi-vit <103585624+multi-vit@users.noreply.github.com> Date: Mon, 1 Aug 2022 13:43:35 +0100 Subject: [PATCH 32/82] Account for random number being the same Co-authored-by: Matt Miller <101735099+codedresser@users.noreply.github.com> --- helper_scripts/randomGet.js | 1 - 1 file changed, 1 deletion(-) diff --git a/helper_scripts/randomGet.js b/helper_scripts/randomGet.js index e1ee5d6..8a30abe 100644 --- a/helper_scripts/randomGet.js +++ b/helper_scripts/randomGet.js @@ -12,7 +12,6 @@ export function getRandom(allResults) { return item.id === allResults[randomNumber].id; }) ) { - console.log("Duplicate found, going again!"); i--; } else { randomResults.push(allResults[randomNumber]); From d58b99155535cd1a6fd466d2da95c8817f0baa60 Mon Sep 17 00:00:00 2001 From: fiona Date: Wed, 3 Aug 2022 11:45:03 +0100 Subject: [PATCH 33/82] done the jest for the models testing Co-authored-by: Andy Johnson <103585624+multi-vit@users.noreply.github.com> --- db/index.js | 2 +- models/index.test.js | 26 + package-lock.json | 7547 +++++++++++++++++++++++++++++++++++++----- package.json | 10 +- 4 files changed, 6768 insertions(+), 817 deletions(-) create mode 100644 models/index.test.js diff --git a/db/index.js b/db/index.js index f13ca3d..7deb3dd 100644 --- a/db/index.js +++ b/db/index.js @@ -3,7 +3,7 @@ import dotenv from "dotenv"; dotenv.config(); const connectionString = process.env.PGURI; -const pool = new pg.Pool({ +export const pool = new pg.Pool({ connectionString, ssl: { rejectUnauthorized: false }, }); diff --git a/models/index.test.js b/models/index.test.js new file mode 100644 index 0000000..3413d77 --- /dev/null +++ b/models/index.test.js @@ -0,0 +1,26 @@ +import{ pool } from '../db/index.js' +import { getAll, getByItem, getByMonth } from "./index.js"; +import { test, expect, describe } from "@jest/globals"; + +test('testing the getAll model retrieves all ', async () => { + const response= await getAll(); + expect(response).toEqual(expect.any(Array)); + expect(response).toEqual(expect.arrayContaining([expect.any(Object)])); + expect(response).toEqual(expect.arrayContaining([expect.objectContaining({id:expect.any(Number),name:expect.any(String),imageurl:expect.any(String),description:expect.any(String),family:expect.any(String),foodtype:expect.any(String),usedas:expect.any(String),month:expect.arrayContaining([expect.any(String)]),allergens:expect.any(String)})])); + +}) + +test('testing for the get by item function', async() => { +const response= await getByItem('pear') +expect(response).toEqual(expect.arrayContaining([expect.objectContaining({id:expect.any(Number),name:'Pear',imageurl:expect.any(String),description:expect.any(String),family:expect.any(String),foodtype:expect.any(String),usedas:expect.any(String),month:expect.arrayContaining([expect.any(String)]),allergens:expect.any(String)})])); +}) + +test('testing for the get by a month function ', async() => { + const response= await getByMonth('march') + expect(response).toEqual(expect.arrayContaining([expect.objectContaining({id:expect.any(Number),name:expect.any(String),imageurl:expect.any(String),description:expect.any(String),family:expect.any(String),foodtype:expect.any(String),usedas:expect.any(String),month:expect.arrayContaining(['March']),allergens:expect.any(String)})])); + }) + +afterAll((done) => { + pool.end() + done() + }); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 1aab5bf..76e2905 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,975 +15,1312 @@ "pg": "^8.7.3" }, "devDependencies": { + "jest": "^28.1.3", "nodemon": "^2.0.19" } }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "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==", + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { - "node": ">= 0.6" + "node": ">=6.0.0" } }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "dev": true, "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "@babel/highlight": "^7.18.6" }, "engines": { - "node": ">= 8" + "node": ">=6.9.0" } }, - "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/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "node_modules/@babel/compat-data": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", + "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">=6.9.0" } }, - "node_modules/body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "node_modules/@babel/core": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", + "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", + "dev": true, "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "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.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helpers": "^7.18.9", + "@babel/parser": "^7.18.10", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.10", + "@babel/types": "^7.18.10", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/@babel/core/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "dependencies": { - "ms": "2.0.0" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "node_modules/@babel/core/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.10.tgz", + "integrity": "sha512-0+sW7e3HjQbiHbj1NeU/vN8ornohYlacAfZIaXhdoGweQqgcNy69COVciYYqEXJ/v+9OBA7Frxm4CVAuNqKeNA==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@babel/types": "^7.18.10", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { - "node": ">=8" + "node": ">=6.0.0" } }, - "node_modules/buffer-writer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", - "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", + "node_modules/@babel/helper-compilation-targets": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", + "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + }, "engines": { - "node": ">=4" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true, "engines": { - "node": ">= 0.8" + "node": ">=6.9.0" } }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "node_modules/@babel/helper-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", + "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", + "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.9" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "@babel/types": "^7.18.6" }, "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "node": ">=6.9.0" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "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==", + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, "dependencies": { - "safe-buffer": "5.2.1" + "@babel/types": "^7.18.6" }, "engines": { - "node": ">= 0.6" + "node": ">=6.9.0" } }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "node_modules/@babel/helper-module-transforms": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", + "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + }, "engines": { - "node": ">= 0.6" + "node": ">=6.9.0" } }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "node_modules/@babel/helper-plugin-utils": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", + "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", + "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=6.9.0" } }, - "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/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "node_modules/@babel/helper-simple-access": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "dev": true, "dependencies": { - "object-assign": "^4", - "vary": "^1" + "@babel/types": "^7.18.6" }, "engines": { - "node": ">= 0.10" + "node": ">=6.9.0" } }, - "node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", "dev": true, "dependencies": { - "ms": "^2.1.1" + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, - "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==", + "node_modules/@babel/helper-string-parser": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", + "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "dev": true, "engines": { - "node": ">= 0.8" + "node": ">=6.9.0" } }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "node_modules/@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "dev": true, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=6.9.0" } }, - "node_modules/dotenv": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz", - "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==", + "node_modules/@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true, "engines": { - "node": ">=12" + "node": ">=6.9.0" } }, - "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/@babel/helpers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", + "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } }, - "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==", + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, "engines": { - "node": ">= 0.8" + "node": ">=6.9.0" } }, - "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/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "node_modules/express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.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.10.3", - "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" + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.10.tgz", + "integrity": "sha512-TYk3OA0HKL6qNryUayb5UUEhM/rkOQozIBEA5ITXh5DWrSp0TlUQXMyZmnWxG/DizSWBeeQ0Zbc5z8UGaaqoeg==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" }, "engines": { - "node": ">= 0.10.0" + "node": ">=6.0.0" } }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, "dependencies": { - "ms": "2.0.0" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, "dependencies": { - "to-regex-range": "^5.0.1" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, "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" + "@babel/helper-plugin-utils": "^7.12.13" }, - "engines": { - "node": ">= 0.8" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, "dependencies": { - "ms": "2.0.0" + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "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/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "@babel/helper-plugin-utils": "^7.8.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, "dependencies": { - "is-glob": "^4.0.1" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">= 6" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, "dependencies": { - "function-bind": "^1.1.1" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": ">= 0.4.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", + "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, "engines": { - "node": ">=4" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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" + "node_modules/@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=6.9.0" } }, - "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==", + "node_modules/@babel/traverse": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.10.tgz", + "integrity": "sha512-J7ycxg0/K9XCtLyHf0cz2DqDihonJeIo+z+HEdRe9YuT8TY4A66i+Ab2/xZCEW7Ro60bPCBBfqqboHSamoV3+g==", + "dev": true, "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10", + "debug": "^4.1.0", + "globals": "^11.1.0" }, "engines": { - "node": ">= 0.8" + "node": ">=6.9.0" } }, - "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==", + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "ms": "2.1.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "node_modules/@babel/traverse/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "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==", + "node_modules/@babel/types": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz", + "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + }, "engines": { - "node": ">= 0.10" + "node": ">=6.9.0" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "dependencies": { - "binary-extensions": "^2.0.0" + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/@jest/console": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", + "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", "dev": true, "dependencies": { - "is-extglob": "^2.1.1" + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/@jest/core": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz", + "integrity": "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==", "dev": true, + "dependencies": { + "@jest/console": "^28.1.3", + "@jest/reporters": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^28.1.3", + "jest-config": "^28.1.3", + "jest-haste-map": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-resolve-dependencies": "^28.1.3", + "jest-runner": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "jest-watcher": "^28.1.3", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, "engines": { - "node": ">=0.12.0" - } - }, - "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": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "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" + "node_modules/@jest/environment": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz", + "integrity": "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "jest-mock": "^28.1.3" }, "engines": { - "node": ">=4" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "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==", + "node_modules/@jest/expect": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz", + "integrity": "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==", + "dev": true, + "dependencies": { + "expect": "^28.1.3", + "jest-snapshot": "^28.1.3" + }, "engines": { - "node": ">= 0.6" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "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==", + "node_modules/@jest/expect-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", + "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", + "dev": true, "dependencies": { - "mime-db": "1.52.0" + "jest-get-type": "^28.0.2" }, "engines": { - "node": ">= 0.6" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/@jest/fake-timers": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz", + "integrity": "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "@jest/types": "^28.1.3", + "@sinonjs/fake-timers": "^9.1.2", + "@types/node": "*", + "jest-message-util": "^28.1.3", + "jest-mock": "^28.1.3", + "jest-util": "^28.1.3" }, "engines": { - "node": "*" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "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/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "node_modules/@jest/globals": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz", + "integrity": "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==", + "dev": true, + "dependencies": { + "@jest/environment": "^28.1.3", + "@jest/expect": "^28.1.3", + "@jest/types": "^28.1.3" + }, "engines": { - "node": ">= 0.6" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/nodemon": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.19.tgz", - "integrity": "sha512-4pv1f2bMDj0Eeg/MhGqxrtveeQ5/G/UVe9iO6uTZzjnRluSA4PVWf8CW99LUPwGB3eNIA7zUFoP77YuI7hOc0A==", + "node_modules/@jest/reporters": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz", + "integrity": "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==", "dev": true, - "hasInstallScript": true, "dependencies": { - "chokidar": "^3.5.2", - "debug": "^3.2.7", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", - "pstree.remy": "^1.1.8", - "semver": "^5.7.1", - "simple-update-notifier": "^1.0.7", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^9.0.1" }, "engines": { - "node": ">=8.10.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", "dev": true, "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" + "@sinclair/typebox": "^0.24.1" }, "engines": { - "node": "*" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "node_modules/@jest/source-map": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz", + "integrity": "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==", "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.13", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, "engines": { - "node": ">=0.10.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "node_modules/@jest/test-result": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", + "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", + "dev": true, + "dependencies": { + "@jest/console": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/@jest/test-sequencer": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz", + "integrity": "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^28.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "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==", + "node_modules/@jest/transform": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", + "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", + "dev": true, "dependencies": { - "ee-first": "1.1.1" + "@babel/core": "^7.11.6", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.1" }, "engines": { - "node": ">= 0.8" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/packet-reader": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", - "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, "engines": { - "node": ">= 0.8" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "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/pg": { - "version": "8.7.3", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.7.3.tgz", - "integrity": "sha512-HPmH4GH4H3AOprDJOazoIcpI49XFsHCe8xlrjHkWiapdbHK+HLtbm/GQzXYAZwmPju/kzKhjaSfMACG+8cgJcw==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, "dependencies": { - "buffer-writer": "2.0.0", - "packet-reader": "1.0.0", - "pg-connection-string": "^2.5.0", - "pg-pool": "^3.5.1", - "pg-protocol": "^1.5.0", - "pg-types": "^2.1.0", - "pgpass": "1.x" + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" }, "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "pg-native": ">=2.0.0" - }, - "peerDependenciesMeta": { - "pg-native": { - "optional": true - } + "node": ">=6.0.0" } }, - "node_modules/pg-connection-string": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", - "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" - }, - "node_modules/pg-int8": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", - "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, "engines": { - "node": ">=4.0.0" + "node": ">=6.0.0" } }, - "node_modules/pg-pool": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.1.tgz", - "integrity": "sha512-6iCR0wVrro6OOHFsyavV+i6KYL4lVNyYAB9RD18w66xSzN+d8b66HiwuP30Gp1SH5O9T82fckkzsRjlrhD0ioQ==", - "peerDependencies": { - "pg": ">=8.0" + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" } }, - "node_modules/pg-protocol": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz", - "integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==" + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true }, - "node_modules/pg-types": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", - "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "dev": true, "dependencies": { - "pg-int8": "1.0.1", - "postgres-array": "~2.0.0", - "postgres-bytea": "~1.0.0", - "postgres-date": "~1.0.4", - "postgres-interval": "^1.1.0" - }, - "engines": { - "node": ">=4" + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/pgpass": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", - "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "node_modules/@sinclair/typebox": { + "version": "0.24.26", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.26.tgz", + "integrity": "sha512-1ZVIyyS1NXDRVT8GjWD5jULjhDyM3IsIHef2VGUMdnWOlX2tkPjyEX/7K0TGSH2S8EaPhp1ylFdjSjUGQ+gecg==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, "dependencies": { - "split2": "^4.1.0" + "type-detect": "4.0.8" } }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/@sinonjs/fake-timers": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "dependencies": { + "@sinonjs/commons": "^1.7.0" } }, - "node_modules/postgres-array": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", - "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", - "engines": { - "node": ">=4" + "node_modules/@types/babel__core": { + "version": "7.1.19", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", + "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" } }, - "node_modules/postgres-bytea": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", - "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", - "engines": { - "node": ">=0.10.0" + "node_modules/@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" } }, - "node_modules/postgres-date": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", - "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", - "engines": { - "node": ">=0.10.0" + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "node_modules/postgres-interval": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", - "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "node_modules/@types/babel__traverse": { + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", + "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", + "dev": true, "dependencies": { - "xtend": "^4.0.0" + "@babel/types": "^7.3.0" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/node": { + "version": "18.6.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.3.tgz", + "integrity": "sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg==", + "dev": true + }, + "node_modules/@types/prettier": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.4.tgz", + "integrity": "sha512-fOwvpvQYStpb/zHMx0Cauwywu9yLDmzWiiQBC7gJyq5tYLUXFZvDG7VK1B7WBxxjBJNKFOZ0zLoOQn8vmATbhw==", + "dev": true + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "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.10.0" + "node": ">= 0.6" } }, - "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==", + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" + "type-fest": "^0.21.3" }, "engines": { - "node": ">= 0.10" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "dev": true + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { - "side-channel": "^1.0.4" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=0.6" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "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==", + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, "engines": { - "node": ">= 0.6" + "node": ">= 8" } }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "sprintf-js": "~1.0.2" + } + }, + "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/babel-jest": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz", + "integrity": "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==", + "dev": true, + "dependencies": { + "@jest/transform": "^28.1.3", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^28.1.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" }, "engines": { - "node": ">= 0.8" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, "dependencies": { - "picomatch": "^2.2.1" + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" }, "engines": { - "node": ">=8.10.0" + "node": ">=8" } }, - "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/babel-plugin-jest-hoist": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz", + "integrity": "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } }, - "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/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } }, - "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "node_modules/babel-preset-jest": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz", + "integrity": "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==", "dev": true, - "bin": { - "semver": "bin/semver" + "dependencies": { + "babel-plugin-jest-hoist": "^28.1.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/body-parser": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", "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", + "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/send/node_modules/debug": { + "node_modules/body-parser/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", @@ -991,176 +1328,4073 @@ "ms": "2.0.0" } }, - "node_modules/send/node_modules/debug/node_modules/ms": { + "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "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==", + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" }, "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, - "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.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "node_modules/browserslist": { + "version": "4.21.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", + "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/buffer-writer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", + "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", + "engines": { + "node": ">=4" + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/simple-update-notifier": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", - "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001373", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001373.tgz", + "integrity": "sha512-pJYArGHrPp3TUqQzFYRmP/lwJlj8RCbVe3Gd3eJQkAV8SAC6b19XS9BjMvRdvaS8RMkaTN8ZhoHP6S1y8zzwEQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/ci-info": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "dev": true + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "dev": true + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "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.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/convert-source-map/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==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "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/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff-sequences": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", + "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/dotenv": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz", + "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==", + "engines": { + "node": ">=12" + } + }, + "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/electron-to-chromium": { + "version": "1.4.210", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.210.tgz", + "integrity": "sha512-kSiX4tuyZijV7Cz0MWVmGT8K2siqaOA4Z66K5dCttPPRh0HicOcOAEj1KlC8O8J1aOS/1M8rGofOzksLKaHWcQ==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "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/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "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/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", + "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/express": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.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.10.3", + "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/express/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/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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/finalhandler/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/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=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/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "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/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "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/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "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/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", + "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.3.tgz", + "integrity": "sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA==", + "dev": true, + "dependencies": { + "@jest/core": "^28.1.3", + "@jest/types": "^28.1.3", + "import-local": "^3.0.2", + "jest-cli": "^28.1.3" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz", + "integrity": "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz", + "integrity": "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==", + "dev": true, + "dependencies": { + "@jest/environment": "^28.1.3", + "@jest/expect": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^28.1.3", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "p-limit": "^3.1.0", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-cli": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz", + "integrity": "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==", + "dev": true, + "dependencies": { + "@jest/core": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz", + "integrity": "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^28.1.3", + "@jest/types": "^28.1.3", + "babel-jest": "^28.1.3", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^28.1.3", + "jest-environment-node": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-runner": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", + "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz", + "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-each": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz", + "integrity": "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "jest-util": "^28.1.3", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz", + "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==", + "dev": true, + "dependencies": { + "@jest/environment": "^28.1.3", + "@jest/fake-timers": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "jest-mock": "^28.1.3", + "jest-util": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", + "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz", + "integrity": "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==", + "dev": true, + "dependencies": { + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", + "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^28.1.3", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-mock": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz", + "integrity": "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz", + "integrity": "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz", + "integrity": "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==", + "dev": true, + "dependencies": { + "jest-regex-util": "^28.0.2", + "jest-snapshot": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runner": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz", + "integrity": "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==", + "dev": true, + "dependencies": { + "@jest/console": "^28.1.3", + "@jest/environment": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "graceful-fs": "^4.2.9", + "jest-docblock": "^28.1.1", + "jest-environment-node": "^28.1.3", + "jest-haste-map": "^28.1.3", + "jest-leak-detector": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-resolve": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-util": "^28.1.3", + "jest-watcher": "^28.1.3", + "jest-worker": "^28.1.3", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz", + "integrity": "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==", + "dev": true, + "dependencies": { + "@jest/environment": "^28.1.3", + "@jest/fake-timers": "^28.1.3", + "@jest/globals": "^28.1.3", + "@jest/source-map": "^28.1.2", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-mock": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz", + "integrity": "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/babel__traverse": "^7.0.6", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^28.1.3", + "graceful-fs": "^4.2.9", + "jest-diff": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-haste-map": "^28.1.3", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "natural-compare": "^1.4.0", + "pretty-format": "^28.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-validate": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz", + "integrity": "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "leven": "^3.1.0", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", + "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", + "dev": true, + "dependencies": { + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "jest-util": "^28.1.3", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-worker": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "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/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "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/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.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/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "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/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "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/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, + "node_modules/nodemon": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.19.tgz", + "integrity": "sha512-4pv1f2bMDj0Eeg/MhGqxrtveeQ5/G/UVe9iO6uTZzjnRluSA4PVWf8CW99LUPwGB3eNIA7zUFoP77YuI7hOc0A==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "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/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/packet-reader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", + "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "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/pg": { + "version": "8.7.3", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.7.3.tgz", + "integrity": "sha512-HPmH4GH4H3AOprDJOazoIcpI49XFsHCe8xlrjHkWiapdbHK+HLtbm/GQzXYAZwmPju/kzKhjaSfMACG+8cgJcw==", + "dependencies": { + "buffer-writer": "2.0.0", + "packet-reader": "1.0.0", + "pg-connection-string": "^2.5.0", + "pg-pool": "^3.5.1", + "pg-protocol": "^1.5.0", + "pg-types": "^2.1.0", + "pgpass": "1.x" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "pg-native": ">=2.0.0" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-connection-string": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", + "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-pool": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.1.tgz", + "integrity": "sha512-6iCR0wVrro6OOHFsyavV+i6KYL4lVNyYAB9RD18w66xSzN+d8b66HiwuP30Gp1SH5O9T82fckkzsRjlrhD0ioQ==", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz", + "integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "dependencies": { + "split2": "^4.1.0" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "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/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "node_modules/qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "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.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "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/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve.exports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", + "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "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/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/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "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/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/simple-update-notifier": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", + "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", + "dev": true, + "dependencies": { + "semver": "~7.0.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/split2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", + "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "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-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "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/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "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/update-browserslist-db": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", + "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "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/v8-to-istanbul": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", + "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + }, + "engines": { + "node": ">=10.12.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" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", + "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yargs": { + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", + "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", + "dev": true + }, + "@babel/core": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", + "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helpers": "^7.18.9", + "@babel/parser": "^7.18.10", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.10", + "@babel/types": "^7.18.10", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.10.tgz", + "integrity": "sha512-0+sW7e3HjQbiHbj1NeU/vN8ornohYlacAfZIaXhdoGweQqgcNy69COVciYYqEXJ/v+9OBA7Frxm4CVAuNqKeNA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.10", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-compilation-targets": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", + "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", + "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", + "dev": true, + "requires": { + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", + "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", + "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", + "dev": true + }, + "@babel/helper-simple-access": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-string-parser": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", + "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", + "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", + "dev": true, + "requires": { + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + } + } + }, + "@babel/parser": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.10.tgz", + "integrity": "sha512-TYk3OA0HKL6qNryUayb5UUEhM/rkOQozIBEA5ITXh5DWrSp0TlUQXMyZmnWxG/DizSWBeeQ0Zbc5z8UGaaqoeg==", + "dev": true + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", + "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + } + }, + "@babel/traverse": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.10.tgz", + "integrity": "sha512-J7ycxg0/K9XCtLyHf0cz2DqDihonJeIo+z+HEdRe9YuT8TY4A66i+Ab2/xZCEW7Ro60bPCBBfqqboHSamoV3+g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz", + "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jest/console": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", + "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0" + } + }, + "@jest/core": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz", + "integrity": "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==", + "dev": true, + "requires": { + "@jest/console": "^28.1.3", + "@jest/reporters": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^28.1.3", + "jest-config": "^28.1.3", + "jest-haste-map": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-resolve-dependencies": "^28.1.3", + "jest-runner": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "jest-watcher": "^28.1.3", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "@jest/environment": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz", + "integrity": "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==", + "dev": true, + "requires": { + "@jest/fake-timers": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "jest-mock": "^28.1.3" + } + }, + "@jest/expect": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz", + "integrity": "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==", + "dev": true, + "requires": { + "expect": "^28.1.3", + "jest-snapshot": "^28.1.3" + } + }, + "@jest/expect-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", + "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", + "dev": true, + "requires": { + "jest-get-type": "^28.0.2" + } + }, + "@jest/fake-timers": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz", + "integrity": "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "@sinonjs/fake-timers": "^9.1.2", + "@types/node": "*", + "jest-message-util": "^28.1.3", + "jest-mock": "^28.1.3", + "jest-util": "^28.1.3" + } + }, + "@jest/globals": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz", + "integrity": "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==", + "dev": true, + "requires": { + "@jest/environment": "^28.1.3", + "@jest/expect": "^28.1.3", + "@jest/types": "^28.1.3" + } + }, + "@jest/reporters": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz", + "integrity": "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^9.0.1" + } + }, + "@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.24.1" + } + }, + "@jest/source-map": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz", + "integrity": "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.13", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + } + }, + "@jest/test-result": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", + "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", + "dev": true, + "requires": { + "@jest/console": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz", + "integrity": "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==", + "dev": true, + "requires": { + "@jest/test-result": "^28.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "slash": "^3.0.0" + } + }, + "@jest/transform": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", + "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.1" + } + }, + "@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dev": true, + "requires": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@sinclair/typebox": { + "version": "0.24.26", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.26.tgz", + "integrity": "sha512-1ZVIyyS1NXDRVT8GjWD5jULjhDyM3IsIHef2VGUMdnWOlX2tkPjyEX/7K0TGSH2S8EaPhp1ylFdjSjUGQ+gecg==", + "dev": true + }, + "@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", "dev": true, - "dependencies": { - "semver": "~7.0.0" - }, - "engines": { - "node": ">=8.10.0" + "requires": { + "type-detect": "4.0.8" } }, - "node_modules/simple-update-notifier/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "@sinonjs/fake-timers": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "requires": { + "@sinonjs/commons": "^1.7.0" } }, - "node_modules/split2": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", - "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==", - "engines": { - "node": ">= 10.x" + "@types/babel__core": { + "version": "7.1.19", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", + "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" } }, - "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" + "@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" } }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "@types/babel__traverse": { + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", + "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" + "requires": { + "@babel/types": "^7.3.0" } }, - "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" + "@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "requires": { + "@types/node": "*" } }, - "node_modules/touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", "dev": true, - "dependencies": { - "nopt": "~1.0.10" - }, - "bin": { - "nodetouch": "bin/nodetouch.js" + "requires": { + "@types/istanbul-lib-coverage": "*" } }, - "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" + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" } }, - "node_modules/undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "@types/node": { + "version": "18.6.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.3.tgz", + "integrity": "sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg==", "dev": true }, - "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" - } + "@types/prettier": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.4.tgz", + "integrity": "sha512-fOwvpvQYStpb/zHMx0Cauwywu9yLDmzWiiQBC7gJyq5tYLUXFZvDG7VK1B7WBxxjBJNKFOZ0zLoOQn8vmATbhw==", + "dev": true }, - "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" - } + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true }, - "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" + "@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" } }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - } - }, - "dependencies": { + "@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -1176,6 +5410,30 @@ "negotiator": "0.6.3" } }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, "anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", @@ -1186,11 +5444,90 @@ "picomatch": "^2.0.4" } }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, + "babel-jest": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz", + "integrity": "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==", + "dev": true, + "requires": { + "@jest/transform": "^28.1.3", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^28.1.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz", + "integrity": "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + } + }, + "babel-preset-jest": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz", + "integrity": "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^28.1.3", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1256,6 +5593,33 @@ "fill-range": "^7.0.1" } }, + "browserslist": { + "version": "4.21.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", + "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, "buffer-writer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", @@ -1275,6 +5639,57 @@ "get-intrinsic": "^1.0.2" } }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001373", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001373.tgz", + "integrity": "sha512-pJYArGHrPp3TUqQzFYRmP/lwJlj8RCbVe3Gd3eJQkAV8SAC6b19XS9BjMvRdvaS8RMkaTN8ZhoHP6S1y8zzwEQ==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true + }, "chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -1291,6 +5706,56 @@ "readdirp": "~3.6.0" } }, + "ci-info": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "dev": true + }, + "cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "dev": true + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true + }, + "collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1310,6 +5775,23 @@ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "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==", + "dev": true + } + } + }, "cookie": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", @@ -1329,6 +5811,17 @@ "vary": "^1" } }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, "debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", @@ -1338,6 +5831,18 @@ "ms": "^2.1.1" } }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, "depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -1348,6 +5853,18 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true + }, + "diff-sequences": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", + "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", + "dev": true + }, "dotenv": { "version": "16.0.1", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz", @@ -1358,21 +5875,102 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, + "electron-to-chromium": { + "version": "1.4.210", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.210.tgz", + "integrity": "sha512-kSiX4tuyZijV7Cz0MWVmGT8K2siqaOA4Z66K5dCttPPRh0HicOcOAEj1KlC8O8J1aOS/1M8rGofOzksLKaHWcQ==", + "dev": true + }, + "emittery": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, "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==" }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true + }, + "expect": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", + "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", + "dev": true, + "requires": { + "@jest/expect-utils": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3" + } + }, "express": { "version": "4.18.1", "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", @@ -1426,6 +6024,21 @@ } } }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -1464,6 +6077,16 @@ } } }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, "forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -1474,6 +6097,12 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, "fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", @@ -1486,6 +6115,18 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, "get-intrinsic": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", @@ -1496,6 +6137,32 @@ "has-symbols": "^1.0.3" } }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -1505,6 +6172,18 @@ "is-glob": "^4.0.1" } }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -1524,6 +6203,12 @@ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, "http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -1536,6 +6221,12 @@ "toidentifier": "1.0.1" } }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -1550,6 +6241,32 @@ "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", "dev": true }, + "import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -1560,35 +6277,706 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "requires": { - "binary-extensions": "^2.0.0" + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", + "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jest": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.3.tgz", + "integrity": "sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA==", + "dev": true, + "requires": { + "@jest/core": "^28.1.3", + "@jest/types": "^28.1.3", + "import-local": "^3.0.2", + "jest-cli": "^28.1.3" + } + }, + "jest-changed-files": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz", + "integrity": "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==", + "dev": true, + "requires": { + "execa": "^5.0.0", + "p-limit": "^3.1.0" + } + }, + "jest-circus": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz", + "integrity": "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==", + "dev": true, + "requires": { + "@jest/environment": "^28.1.3", + "@jest/expect": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^28.1.3", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "p-limit": "^3.1.0", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-cli": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz", + "integrity": "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==", + "dev": true, + "requires": { + "@jest/core": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + } + }, + "jest-config": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz", + "integrity": "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^28.1.3", + "@jest/types": "^28.1.3", + "babel-jest": "^28.1.3", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^28.1.3", + "jest-environment-node": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-runner": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + } + }, + "jest-diff": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", + "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + } + }, + "jest-docblock": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz", + "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz", + "integrity": "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "jest-util": "^28.1.3", + "pretty-format": "^28.1.3" + } + }, + "jest-environment-node": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz", + "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==", + "dev": true, + "requires": { + "@jest/environment": "^28.1.3", + "@jest/fake-timers": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "jest-mock": "^28.1.3", + "jest-util": "^28.1.3" + } + }, + "jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true + }, + "jest-haste-map": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", + "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + } + }, + "jest-leak-detector": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz", + "integrity": "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==", + "dev": true, + "requires": { + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + } + }, + "jest-matcher-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", + "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^28.1.3", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + } + }, + "jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz", + "integrity": "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "@types/node": "*" + } + }, + "jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true, + "requires": {} + }, + "jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "dev": true + }, + "jest-resolve": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz", + "integrity": "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + } + }, + "jest-resolve-dependencies": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz", + "integrity": "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==", + "dev": true, + "requires": { + "jest-regex-util": "^28.0.2", + "jest-snapshot": "^28.1.3" + } + }, + "jest-runner": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz", + "integrity": "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==", + "dev": true, + "requires": { + "@jest/console": "^28.1.3", + "@jest/environment": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "graceful-fs": "^4.2.9", + "jest-docblock": "^28.1.1", + "jest-environment-node": "^28.1.3", + "jest-haste-map": "^28.1.3", + "jest-leak-detector": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-resolve": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-util": "^28.1.3", + "jest-watcher": "^28.1.3", + "jest-worker": "^28.1.3", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + } + }, + "jest-runtime": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz", + "integrity": "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==", + "dev": true, + "requires": { + "@jest/environment": "^28.1.3", + "@jest/fake-timers": "^28.1.3", + "@jest/globals": "^28.1.3", + "@jest/source-map": "^28.1.2", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-mock": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + } + }, + "jest-snapshot": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz", + "integrity": "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/babel__traverse": "^7.0.6", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^28.1.3", + "graceful-fs": "^4.2.9", + "jest-diff": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-haste-map": "^28.1.3", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "natural-compare": "^1.4.0", + "pretty-format": "^28.1.3", + "semver": "^7.3.5" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-validate": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz", + "integrity": "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "leven": "^3.1.0", + "pretty-format": "^28.1.3" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + } + } + }, + "jest-watcher": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", + "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", + "dev": true, + "requires": { + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "jest-util": "^28.1.3", + "string-length": "^4.0.1" + } + }, + "jest-worker": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" } }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { - "is-extglob": "^2.1.1" + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true + "makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "requires": { + "tmpl": "1.0.5" + } }, "media-typer": { "version": "0.3.0", @@ -1600,11 +6988,27 @@ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, "mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -1623,6 +7027,12 @@ "mime-db": "1.52.0" } }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -1637,11 +7047,29 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, "negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, "nodemon": { "version": "2.0.19", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.19.tgz", @@ -1675,6 +7103,15 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -1693,16 +7130,105 @@ "ee-first": "1.1.1" } }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + }, + "dependencies": { + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + } + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, "packet-reader": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -1763,12 +7289,33 @@ "split2": "^4.1.0" } }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, + "pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, "postgres-array": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", @@ -1792,6 +7339,36 @@ "xtend": "^4.0.0" } }, + "pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dev": true, + "requires": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, "proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -1831,6 +7408,12 @@ "unpipe": "1.0.0" } }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -1840,6 +7423,53 @@ "picomatch": "^2.2.1" } }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "resolve.exports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", + "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -1909,6 +7539,21 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, "side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -1919,6 +7564,12 @@ "object-inspect": "^1.9.0" } }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, "simple-update-notifier": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", @@ -1936,16 +7587,107 @@ } } }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "split2": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==" }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + } + }, "statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" }, + "string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -1955,6 +7697,72 @@ "has-flag": "^3.0.0" } }, + "supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -1978,6 +7786,18 @@ "nopt": "~1.0.10" } }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -1998,20 +7818,125 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, + "update-browserslist-db": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", + "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, "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==" }, + "v8-to-istanbul": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", + "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + } + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" }, + "walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "requires": { + "makeerror": "1.0.12" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "write-file-atomic": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", + "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yargs": { + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + } + }, + "yargs-parser": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/package.json b/package.json index cce856e..2059fca 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "pg": "^8.7.3" }, "devDependencies": { + "jest": "^28.1.3", "nodemon": "^2.0.19" }, "name": "final-project_back-end-12", @@ -14,15 +15,14 @@ "main": "index.js", "type": "module", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", + "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js", "dbtest": "node -r dotenv/config ./db/index.js", "createTable": "node -r dotenv/config ./db/scripts/createTable.js", "populateTable": "node -r dotenv/config ./db/scripts/populateTable.js", "dropTable": "node -r dotenv/config ./db/scripts/deleteTable.js", - "reset":"npm run dropTable && npm run createTable && npm run populateTable", - "start":"node ./app.js" - -}, + "reset": "npm run dropTable && npm run createTable && npm run populateTable", + "start": "node ./app.js" + }, "repository": { "type": "git", "url": "git+https://github.com/SchoolOfCode/final-project_back-end-12.git" From e80fa78bf80bb8bdb12b351fb5b9930f503fa63c Mon Sep 17 00:00:00 2001 From: multi-vit <103585624+multi-vit@users.noreply.github.com> Date: Wed, 3 Aug 2022 12:20:58 +0100 Subject: [PATCH 34/82] Add first integration test Co-authored-by: Fiona Kitchen <100845392+fkit00@users.noreply.github.com> --- app.js | 2 +- app.test.js | 51 ++++++ package-lock.json | 381 +++++++++++++++++++++++++++++++++++++++++-- package.json | 3 +- routes/index.test.js | 1 + 5 files changed, 423 insertions(+), 15 deletions(-) create mode 100644 app.test.js create mode 100644 routes/index.test.js diff --git a/app.js b/app.js index ac92423..ed6aa13 100644 --- a/app.js +++ b/app.js @@ -4,7 +4,7 @@ import router from "./routes/index.js"; const PORT = process.env.PORT || 4000; -const app = express(); +export const app = express(); app.use(cors()); app.use(express.json()); diff --git a/app.test.js b/app.test.js new file mode 100644 index 0000000..ab4aa0f --- /dev/null +++ b/app.test.js @@ -0,0 +1,51 @@ +import { test, expect, describe } from "@jest/globals"; +import { pool } from "./db/index.js"; +import request from "supertest"; +import { app } from "./app.js"; + +test("Testing get all using /produce", async () => { + const response = await request(app) + .get("/produce") + .set("Accept", "application/json"); + expect(response.status).toEqual(200); + expect(response.body).toEqual( + expect.objectContaining({ + success: true, + payload: expect.arrayContaining([ + expect.objectContaining({ + id: expect.any(Number), + name: expect.any(String), + imageurl: expect.any(String), + description: expect.any(String), + family: expect.any(String), + foodtype: expect.any(String), + usedas: expect.any(String), + month: expect.arrayContaining([expect.any(String)]), + allergens: expect.any(String), + }), + ]), + }) + ); +}); + +afterAll((done) => { + pool.end(); + done(); +}); + +/* +Import: +Jest +Supertest +App +Pool + +Write a jest test block +Use supertest to mock a request using app.js +Pass the route via .get +Set application/json if needed + +Assert +Expect status code +Expect body using models test +*/ diff --git a/package-lock.json b/package-lock.json index 76e2905..c28266b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,8 @@ "cors": "^2.8.5", "dotenv": "^16.0.1", "express": "^4.18.1", - "pg": "^8.7.3" + "pg": "^8.7.3", + "supertest": "^6.2.4" }, "devDependencies": { "jest": "^28.1.3", @@ -1191,6 +1192,16 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, "node_modules/babel-jest": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz", @@ -1590,6 +1601,22 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1643,6 +1670,11 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, + "node_modules/cookiejar": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", + "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" + }, "node_modules/cors": { "version": "2.8.5", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", @@ -1693,6 +1725,14 @@ "node": ">=0.10.0" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -1719,6 +1759,15 @@ "node": ">=8" } }, + "node_modules/dezalgo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha512-K7i4zNfT2kgQz3GylDw40ot9GAE47sFZ9EXHFSPP6zONLgH6kWXE0KWJchkbQJLBkRazq4APwZ4OwiFFlT95OQ==", + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, "node_modules/diff-sequences": { "version": "28.1.1", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", @@ -1934,6 +1983,11 @@ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, "node_modules/fb-watchman": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", @@ -1998,6 +2052,44 @@ "node": ">=8" } }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formidable": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.0.1.tgz", + "integrity": "sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ==", + "dependencies": { + "dezalgo": "1.0.3", + "hexoid": "1.0.0", + "once": "1.4.0", + "qs": "6.9.3" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/formidable/node_modules/qs": { + "version": "6.9.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz", + "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==", + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -2169,6 +2261,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "engines": { + "node": ">=8" + } + }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -3150,7 +3250,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -3409,7 +3508,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "dependencies": { "wrappy": "1" } @@ -3797,6 +3895,19 @@ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -4097,6 +4208,14 @@ "node": ">= 0.8" } }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -4166,6 +4285,85 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/superagent": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.0.tgz", + "integrity": "sha512-iudipXEel+SzlP9y29UBWGDjB+Zzag+eeA1iLosaR2YHBRr1Q1kC29iBrF2zIVD9fqVbpZnXkN/VJmwFMVyNWg==", + "dependencies": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.3", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.0.1", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.10.3", + "readable-stream": "^3.6.0", + "semver": "^7.3.7" + }, + "engines": { + "node": ">=6.4.0 <13 || >=14" + } + }, + "node_modules/superagent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/superagent/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/superagent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/superagent/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/supertest": { + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.2.4.tgz", + "integrity": "sha512-M8xVnCNv+q2T2WXVzxDECvL2695Uv2uUj2O0utxsld/HRyJvOU8W9f1gvsYxSNU4wmIe0/L/ItnpU4iKq0emDA==", + "dependencies": { + "methods": "^1.1.2", + "superagent": "^8.0.0" + }, + "engines": { + "node": ">=6.4.0" + } + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -4374,6 +4572,11 @@ "browserslist": ">= 4.21.0" } }, + "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", @@ -4448,8 +4651,7 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/write-file-atomic": { "version": "4.0.1", @@ -4484,8 +4686,7 @@ "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yargs": { "version": "17.5.1", @@ -5458,6 +5659,16 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, "babel-jest": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz", @@ -5756,6 +5967,19 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -5802,6 +6026,11 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, + "cookiejar": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", + "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" + }, "cors": { "version": "2.8.5", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", @@ -5843,6 +6072,11 @@ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, "depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -5859,6 +6093,15 @@ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true }, + "dezalgo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha512-K7i4zNfT2kgQz3GylDw40ot9GAE47sFZ9EXHFSPP6zONLgH6kWXE0KWJchkbQJLBkRazq4APwZ4OwiFFlT95OQ==", + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, "diff-sequences": { "version": "28.1.1", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", @@ -6030,6 +6273,11 @@ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, + "fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, "fb-watchman": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", @@ -6087,6 +6335,34 @@ "path-exists": "^4.0.0" } }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "formidable": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.0.1.tgz", + "integrity": "sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ==", + "requires": { + "dezalgo": "1.0.3", + "hexoid": "1.0.0", + "once": "1.4.0", + "qs": "6.9.3" + }, + "dependencies": { + "qs": { + "version": "6.9.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz", + "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==" + } + } + }, "forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -6203,6 +6479,11 @@ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, + "hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==" + }, "html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -6947,7 +7228,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "requires": { "yallist": "^4.0.0" } @@ -7134,7 +7414,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "requires": { "wrappy": "1" } @@ -7414,6 +7693,16 @@ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -7640,6 +7929,14 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, "string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -7688,6 +7985,61 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, + "superagent": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.0.tgz", + "integrity": "sha512-iudipXEel+SzlP9y29UBWGDjB+Zzag+eeA1iLosaR2YHBRr1Q1kC29iBrF2zIVD9fqVbpZnXkN/VJmwFMVyNWg==", + "requires": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.3", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.0.1", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.10.3", + "readable-stream": "^3.6.0", + "semver": "^7.3.7" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "supertest": { + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.2.4.tgz", + "integrity": "sha512-M8xVnCNv+q2T2WXVzxDECvL2695Uv2uUj2O0utxsld/HRyJvOU8W9f1gvsYxSNU4wmIe0/L/ItnpU4iKq0emDA==", + "requires": { + "methods": "^1.1.2", + "superagent": "^8.0.0" + } + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -7828,6 +8180,11 @@ "picocolors": "^1.0.0" } }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -7881,8 +8238,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "write-file-atomic": { "version": "4.0.1", @@ -7908,8 +8264,7 @@ "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yargs": { "version": "17.5.1", diff --git a/package.json b/package.json index 2059fca..8c5f482 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,8 @@ "cors": "^2.8.5", "dotenv": "^16.0.1", "express": "^4.18.1", - "pg": "^8.7.3" + "pg": "^8.7.3", + "supertest": "^6.2.4" }, "devDependencies": { "jest": "^28.1.3", diff --git a/routes/index.test.js b/routes/index.test.js new file mode 100644 index 0000000..81c093e --- /dev/null +++ b/routes/index.test.js @@ -0,0 +1 @@ +//Andy could test the routes here but we are going to test the app From c1ceaa96176d9b427eb84ab14346611cfe8307c2 Mon Sep 17 00:00:00 2001 From: fiona Date: Wed, 3 Aug 2022 13:57:43 +0100 Subject: [PATCH 35/82] added supertest to test the app routes Co-authored-by: Andy Johnson <103585624+multi-vit@users.noreply.github.com> --- app.test.js | 51 ++++++++++++++++++++++++++ routes/index.js | 2 +- routes/index.test.js | 86 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 138 insertions(+), 1 deletion(-) diff --git a/app.test.js b/app.test.js index ab4aa0f..408a713 100644 --- a/app.test.js +++ b/app.test.js @@ -28,6 +28,57 @@ test("Testing get all using /produce", async () => { ); }); +test("Testing get item using a query after produce", async () => { + const response = await request(app) + .get("/produce?item=pear") + .set("Accept", "application/json"); + expect(response.status).toEqual(200); + expect(response.body).toEqual( + expect.objectContaining({ + success: true, + payload: expect.arrayContaining([ + expect.objectContaining({ + id: expect.any(Number), + name: 'Pear', + imageurl: expect.any(String), + description: expect.any(String), + family: expect.any(String), + foodtype: expect.any(String), + usedas: expect.any(String), + month: expect.arrayContaining([expect.any(String)]), + allergens: expect.any(String), + }), + ]), + }) + ); +}); + +test("Testing the get month route using a month query", async () => { + const response = await request(app) + .get("/produce?month=march") + .set("Accept", "application/json"); + expect(response.status).toEqual(200); + expect(response.body).toEqual( + expect.objectContaining({ + success: true, + payload: expect.arrayContaining([ + expect.objectContaining({ + id: expect.any(Number), + name: expect.any(String), + imageurl: expect.any(String), + description: expect.any(String), + family: expect.any(String), + foodtype: expect.any(String), + usedas: expect.any(String), + month: expect.arrayContaining(['March']), + allergens: expect.any(String), + }), + ]), + }) + ); +}); + + afterAll((done) => { pool.end(); done(); diff --git a/routes/index.js b/routes/index.js index 92dece5..588b6dc 100644 --- a/routes/index.js +++ b/routes/index.js @@ -1,7 +1,7 @@ import express from "express"; import { getAll, getByItem, getByMonth } from "../models/index.js"; -const router = express.Router(); +export const router = express.Router(); router.get("/", async function (req, res) { if (req.query.item !== undefined) { diff --git a/routes/index.test.js b/routes/index.test.js index 81c093e..37caaff 100644 --- a/routes/index.test.js +++ b/routes/index.test.js @@ -1 +1,87 @@ //Andy could test the routes here but we are going to test the app +/* +import { test, expect, describe } from "@jest/globals"; +import { pool } from '../db/index.js' +import request from "supertest"; +import { router } from './index.js' + +test("Testing get all using /", async () => { + const response = await request(router) + .get('/') + .set("Accept", "application/json"); + expect(response.status).toEqual(200); + expect(response.body).toEqual( + expect.objectContaining({ + success: true, + payload: expect.arrayContaining([ + expect.objectContaining({ + id: expect.any(Number), + name: expect.any(String), + imageurl: expect.any(String), + description: expect.any(String), + family: expect.any(String), + foodtype: expect.any(String), + usedas: expect.any(String), + month: expect.arrayContaining([expect.any(String)]), + allergens: expect.any(String), + }), + ]), + }) + ); +}); + */ +/* test("Testing get item using a query after produce", async () => { + const response = await request(router) + .get("/?item=pear") + .set("Accept", "application/json"); + expect(response.status).toEqual(200); + expect(response.body).toEqual( + expect.objectContaining({ + success: true, + payload: expect.arrayContaining([ + expect.objectContaining({ + id: expect.any(Number), + name: 'Pear', + imageurl: expect.any(String), + description: expect.any(String), + family: expect.any(String), + foodtype: expect.any(String), + usedas: expect.any(String), + month: expect.arrayContaining([expect.any(String)]), + allergens: expect.any(String), + }), + ]), + }) + ); +}); + +test("Testing the get month route using a month query", async () => { + const response = await request(router) + .get("/?month=march") + .set("Accept", "application/json"); + expect(response.status).toEqual(200); + expect(response.body).toEqual( + expect.objectContaining({ + success: true, + payload: expect.arrayContaining([ + expect.objectContaining({ + id: expect.any(Number), + name: expect.any(String), + imageurl: expect.any(String), + description: expect.any(String), + family: expect.any(String), + foodtype: expect.any(String), + usedas: expect.any(String), + month: expect.arrayContaining(['March']), + allergens: expect.any(String), + }), + ]), + }) + ); +}); + */ + +afterAll((done) => { + pool.end(); + done(); +}); \ No newline at end of file From 82d099bca807de596c040023aac54fa828a000ea Mon Sep 17 00:00:00 2001 From: multi-vit <103585624+multi-vit@users.noreply.github.com> Date: Wed, 3 Aug 2022 14:20:38 +0100 Subject: [PATCH 36/82] Complete integration tests but pool not closing properly Co-authored-by: Fiona Kitchen <100845392+fkit00@users.noreply.github.com> --- app.test.js | 25 ++----------- routes/index.test.js | 87 -------------------------------------------- 2 files changed, 3 insertions(+), 109 deletions(-) delete mode 100644 routes/index.test.js diff --git a/app.test.js b/app.test.js index 408a713..2a26fae 100644 --- a/app.test.js +++ b/app.test.js @@ -39,7 +39,7 @@ test("Testing get item using a query after produce", async () => { payload: expect.arrayContaining([ expect.objectContaining({ id: expect.any(Number), - name: 'Pear', + name: "Pear", imageurl: expect.any(String), description: expect.any(String), family: expect.any(String), @@ -70,7 +70,7 @@ test("Testing the get month route using a month query", async () => { family: expect.any(String), foodtype: expect.any(String), usedas: expect.any(String), - month: expect.arrayContaining(['March']), + month: expect.arrayContaining(["March"]), allergens: expect.any(String), }), ]), @@ -78,25 +78,6 @@ test("Testing the get month route using a month query", async () => { ); }); - afterAll((done) => { - pool.end(); - done(); + pool.end(done); }); - -/* -Import: -Jest -Supertest -App -Pool - -Write a jest test block -Use supertest to mock a request using app.js -Pass the route via .get -Set application/json if needed - -Assert -Expect status code -Expect body using models test -*/ diff --git a/routes/index.test.js b/routes/index.test.js deleted file mode 100644 index 37caaff..0000000 --- a/routes/index.test.js +++ /dev/null @@ -1,87 +0,0 @@ -//Andy could test the routes here but we are going to test the app -/* -import { test, expect, describe } from "@jest/globals"; -import { pool } from '../db/index.js' -import request from "supertest"; -import { router } from './index.js' - -test("Testing get all using /", async () => { - const response = await request(router) - .get('/') - .set("Accept", "application/json"); - expect(response.status).toEqual(200); - expect(response.body).toEqual( - expect.objectContaining({ - success: true, - payload: expect.arrayContaining([ - expect.objectContaining({ - id: expect.any(Number), - name: expect.any(String), - imageurl: expect.any(String), - description: expect.any(String), - family: expect.any(String), - foodtype: expect.any(String), - usedas: expect.any(String), - month: expect.arrayContaining([expect.any(String)]), - allergens: expect.any(String), - }), - ]), - }) - ); -}); - */ -/* test("Testing get item using a query after produce", async () => { - const response = await request(router) - .get("/?item=pear") - .set("Accept", "application/json"); - expect(response.status).toEqual(200); - expect(response.body).toEqual( - expect.objectContaining({ - success: true, - payload: expect.arrayContaining([ - expect.objectContaining({ - id: expect.any(Number), - name: 'Pear', - imageurl: expect.any(String), - description: expect.any(String), - family: expect.any(String), - foodtype: expect.any(String), - usedas: expect.any(String), - month: expect.arrayContaining([expect.any(String)]), - allergens: expect.any(String), - }), - ]), - }) - ); -}); - -test("Testing the get month route using a month query", async () => { - const response = await request(router) - .get("/?month=march") - .set("Accept", "application/json"); - expect(response.status).toEqual(200); - expect(response.body).toEqual( - expect.objectContaining({ - success: true, - payload: expect.arrayContaining([ - expect.objectContaining({ - id: expect.any(Number), - name: expect.any(String), - imageurl: expect.any(String), - description: expect.any(String), - family: expect.any(String), - foodtype: expect.any(String), - usedas: expect.any(String), - month: expect.arrayContaining(['March']), - allergens: expect.any(String), - }), - ]), - }) - ); -}); - */ - -afterAll((done) => { - pool.end(); - done(); -}); \ No newline at end of file From baae9a79676220a556c56a102e2a622f59dd52ed Mon Sep 17 00:00:00 2001 From: N-LEE-94 Date: Thu, 4 Aug 2022 13:56:21 +0100 Subject: [PATCH 37/82] Finished random 5 number of results test Co-authored-by: Matt Miller <101735099+codedresser@users.noreply.github.com> --- helper_scripts/randomGet.test.js | 42 ++++ helper_scripts/testingdata.js | 375 +++++++++++++++++++++++++++++++ 2 files changed, 417 insertions(+) create mode 100644 helper_scripts/randomGet.test.js create mode 100644 helper_scripts/testingdata.js diff --git a/helper_scripts/randomGet.test.js b/helper_scripts/randomGet.test.js new file mode 100644 index 0000000..25b81a7 --- /dev/null +++ b/helper_scripts/randomGet.test.js @@ -0,0 +1,42 @@ +import { test, expect, describe } from "@jest/globals"; +import { getRandom } from "./randomGet.js" +import { FirstTenData } from "./testingdata.js" + + +// give the test script an array of objects (get from the db) +// include a duplicate in the array +// 2 test: +// give it an array to test if it gets 5 items/10 +// 6 items - 2 duplicates +// test should give back exactly 5 unique objects + +test("Testing the getRandom to check that it produces 5 objects from an array of 10", () => { + const data = FirstTenData; + const testArray = getRandom(data) + expect(testArray.length).toEqual(5); +}); + + +// test("Testing the getRandom to check that it produces 5 objects from an array of 10", () => { +// const data = FirstTenData; + +// expect(getRandom(data)).toEqual(array.length === 5); +// expect(response.body).toEqual( +// expect.objectContaining({ +// success: true, +// payload: expect.arrayContaining([ +// expect.objectContaining({ +// id: expect.any(Number), +// name: "Pear", +// imageurl: expect.any(String), +// description: expect.any(String), +// family: expect.any(String), +// foodtype: expect.any(String), +// usedas: expect.any(String), +// month: expect.arrayContaining([expect.any(String)]), +// allergens: expect.any(String), +// }), +// ]), +// }) +// ); +// }); \ No newline at end of file diff --git a/helper_scripts/testingdata.js b/helper_scripts/testingdata.js new file mode 100644 index 0000000..2fff6b7 --- /dev/null +++ b/helper_scripts/testingdata.js @@ -0,0 +1,375 @@ +export let FirstTenData = [{ + "id": 57, + "name": "Mangetout", + "imageurl": "https://via.placeholder.com/200x200", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "family": "Legume", + "foodtype": "Legume", + "usedas": "Vegetable", + "month": [ + "June", + "July", + "August" + ], + "allergens": "NA" + }, + { + "id": 58, + "name": "Marrow", + "imageurl": "https://via.placeholder.com/200x200", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "family": "Cucurbita", + "foodtype": "Gourd", + "usedas": "Vegetable", + "month": [ + "August", + "September" + ], + "allergens": "NA" + }, + { + "id": 59, + "name": "Mint", + "imageurl": "https://via.placeholder.com/200x200", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "family": "Mint", + "foodtype": "Herb", + "usedas": "Herb", + "month": [ + "May", + "June", + "July", + "August", + "September" + ], + "allergens": "NA" + }, + { + "id": 60, + "name": "Mussels", + "imageurl": "https://via.placeholder.com/200x200", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "family": "Fish", + "foodtype": "Fish", + "usedas": "Fish", + "month": [ + "January", + "February", + "March", + "October", + "November", + "December" + ], + "allergens": "Crustacean" + }, + { + "id": 61, + "name": "Nectarine", + "imageurl": "https://via.placeholder.com/200x200", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "family": "Citrus", + "foodtype": "Citrus", + "usedas": "Fruit", + "month": [ + "May", + "June", + "July", + "August", + "September" + ], + "allergens": "NA" + }, + { + "id": 62, + "name": "New Potatoes", + "imageurl": "https://via.placeholder.com/200x200", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "family": "Nightshade", + "foodtype": "Root", + "usedas": "Vegetable", + "month": [ + "April", + "May", + "June", + "July" + ], + "allergens": "NA" + }, + { + "id": 63, + "name": "Onion", + "imageurl": "https://via.placeholder.com/200x200", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "family": "Amaryllis", + "foodtype": "Allium", + "usedas": "Vegetable", + "month": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "allergens": "NA" + }, + { + "id": 64, + "name": "Orange", + "imageurl": "https://via.placeholder.com/200x200", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "family": "Citrus", + "foodtype": "Citrus", + "usedas": "Fruit", + "month": [ + "January", + "February", + "March" + ], + "allergens": "NA" + }, + { + "id": 65, + "name": "Oyster", + "imageurl": "https://via.placeholder.com/200x200", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "family": "Fish", + "foodtype": "Fish", + "usedas": "Fish", + "month": [ + "January", + "February", + "March", + "April", + "September", + "October", + "November", + "December" + ], + "allergens": "Crustacean" + }, + { + "id": 66, + "name": "Pak Choi", + "imageurl": "https://via.placeholder.com/200x200", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "family": "Cabbage", + "foodtype": "Leaf", + "usedas": "Vegetable", + "month": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "allergens": "NA" + }] + + export let duplicateData = [{ + "id": 57, + "name": "Mangetout", + "imageurl": "https://via.placeholder.com/200x200", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "family": "Legume", + "foodtype": "Legume", + "usedas": "Vegetable", + "month": [ + "June", + "July", + "August" + ], + "allergens": "NA" + }, + { + "id": 58, + "name": "Marrow", + "imageurl": "https://via.placeholder.com/200x200", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "family": "Cucurbita", + "foodtype": "Gourd", + "usedas": "Vegetable", + "month": [ + "August", + "September" + ], + "allergens": "NA" + }, + { + "id": 59, + "name": "Mint", + "imageurl": "https://via.placeholder.com/200x200", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "family": "Mint", + "foodtype": "Herb", + "usedas": "Herb", + "month": [ + "May", + "June", + "July", + "August", + "September" + ], + "allergens": "NA" + }, + { + "id": 60, + "name": "Mussels", + "imageurl": "https://via.placeholder.com/200x200", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "family": "Fish", + "foodtype": "Fish", + "usedas": "Fish", + "month": [ + "January", + "February", + "March", + "October", + "November", + "December" + ], + "allergens": "Crustacean" + }, + { + "id": 61, + "name": "Nectarine", + "imageurl": "https://via.placeholder.com/200x200", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "family": "Citrus", + "foodtype": "Citrus", + "usedas": "Fruit", + "month": [ + "May", + "June", + "July", + "August", + "September" + ], + "allergens": "NA" + }, + { + "id": 62, + "name": "New Potatoes", + "imageurl": "https://via.placeholder.com/200x200", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "family": "Nightshade", + "foodtype": "Root", + "usedas": "Vegetable", + "month": [ + "April", + "May", + "June", + "July" + ], + "allergens": "NA" + }, + { + "id": 57, + "name": "Mangetout", + "imageurl": "https://via.placeholder.com/200x200", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "family": "Legume", + "foodtype": "Legume", + "usedas": "Vegetable", + "month": [ + "June", + "July", + "August" + ], + "allergens": "NA" + }, + { + "id": 58, + "name": "Marrow", + "imageurl": "https://via.placeholder.com/200x200", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "family": "Cucurbita", + "foodtype": "Gourd", + "usedas": "Vegetable", + "month": [ + "August", + "September" + ], + "allergens": "NA" + }, + { + "id": 59, + "name": "Mint", + "imageurl": "https://via.placeholder.com/200x200", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "family": "Mint", + "foodtype": "Herb", + "usedas": "Herb", + "month": [ + "May", + "June", + "July", + "August", + "September" + ], + "allergens": "NA" + }, + { + "id": 60, + "name": "Mussels", + "imageurl": "https://via.placeholder.com/200x200", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "family": "Fish", + "foodtype": "Fish", + "usedas": "Fish", + "month": [ + "January", + "February", + "March", + "October", + "November", + "December" + ], + "allergens": "Crustacean" + }, + { + "id": 61, + "name": "Nectarine", + "imageurl": "https://via.placeholder.com/200x200", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "family": "Citrus", + "foodtype": "Citrus", + "usedas": "Fruit", + "month": [ + "May", + "June", + "July", + "August", + "September" + ], + "allergens": "NA" + }, + { + "id": 62, + "name": "New Potatoes", + "imageurl": "https://via.placeholder.com/200x200", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "family": "Nightshade", + "foodtype": "Root", + "usedas": "Vegetable", + "month": [ + "April", + "May", + "June", + "July" + ], + "allergens": "NA" + }] \ No newline at end of file From 28751f6c44e5789c4bbd3d6bb16a02dccc6ede73 Mon Sep 17 00:00:00 2001 From: codedresser Date: Thu, 4 Aug 2022 15:49:01 +0100 Subject: [PATCH 38/82] one test passing for random and one test still failing but closer Co-authored-by: Nathan Lee <100144036+N-LEE-94@users.noreply.github.com> --- helper_scripts/randomGet.js | 2 +- helper_scripts/randomGet.test.js | 85 +++++++++++++++++++--- helper_scripts/testingdata.js | 118 ++++++++++++++++++++++--------- 3 files changed, 160 insertions(+), 45 deletions(-) diff --git a/helper_scripts/randomGet.js b/helper_scripts/randomGet.js index 8a30abe..d479165 100644 --- a/helper_scripts/randomGet.js +++ b/helper_scripts/randomGet.js @@ -19,4 +19,4 @@ export function getRandom(allResults) { } return randomResults; } -} +}; \ No newline at end of file diff --git a/helper_scripts/randomGet.test.js b/helper_scripts/randomGet.test.js index 25b81a7..ad7909e 100644 --- a/helper_scripts/randomGet.test.js +++ b/helper_scripts/randomGet.test.js @@ -1,21 +1,86 @@ import { test, expect, describe } from "@jest/globals"; import { getRandom } from "./randomGet.js" -import { FirstTenData } from "./testingdata.js" +import { firstTenData, duplicateData, randomData } from "./testingdata.js" -// give the test script an array of objects (get from the db) -// include a duplicate in the array -// 2 test: -// give it an array to test if it gets 5 items/10 -// 6 items - 2 duplicates -// test should give back exactly 5 unique objects - test("Testing the getRandom to check that it produces 5 objects from an array of 10", () => { - const data = FirstTenData; - const testArray = getRandom(data) + + const data = firstTenData; + + const testArray = getRandom(data); + expect(testArray.length).toEqual(5); + }); +test("Testing the getRandom to check that it produces 5 unique objects with no duplicates from an array of 10 (with 5 duplicates)", () => { + + const data = duplicateData; + + const testArray = getRandom(data); + + let randomResults = []; + + let check = null; + + function randomTest(){ + + + for (let i = 0; i < 5; i++) { + + if ( + testArray.some((item) => { + return item.id === randomResults[i]; + }) + ) { + let check = false; + } else { + randomResults.push(allResults[randomNumber]); + let check = true; + } + } + } + + expect(check).toEqual(true); + +}); + +// test("Testing the getRandom to check that it produces 5 unique objects with no duplicates from an array of 10 (with 5 duplicates)", () => { + +// const data = duplicateData; + +// const testArray = getRandom(data); + +// let randomResult = randomData; + +// function randomTest(testArray, randomResults){ + +// for (let i = 0; i < 5; i++) { + +// if ( +// testArray.some((item) => { +// return item.id === randomResults[i]; +// }) +// ) { +// false; +// } else { +// true; +// } +// } +// } + +// expect().toEqual(); + +// }); + + //Plan + // expecting the sum of all testArray.id = (57, 58, 59, 60, 61)Sum of them = 295 + // create variable for id sum =0 + // To get the sum we will loop through (.map) and add id integer to id sum. + // test the idsum equals what we are expecting (295). + + + // test("Testing the getRandom to check that it produces 5 objects from an array of 10", () => { // const data = FirstTenData; diff --git a/helper_scripts/testingdata.js b/helper_scripts/testingdata.js index 2fff6b7..8d693dd 100644 --- a/helper_scripts/testingdata.js +++ b/helper_scripts/testingdata.js @@ -1,4 +1,4 @@ -export let FirstTenData = [{ +export let firstTenData = [{ "id": 57, "name": "Mangetout", "imageurl": "https://via.placeholder.com/200x200", @@ -260,22 +260,6 @@ export let FirstTenData = [{ ], "allergens": "NA" }, - { - "id": 62, - "name": "New Potatoes", - "imageurl": "https://via.placeholder.com/200x200", - "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", - "family": "Nightshade", - "foodtype": "Root", - "usedas": "Vegetable", - "month": [ - "April", - "May", - "June", - "July" - ], - "allergens": "NA" - }, { "id": 57, "name": "Mangetout", @@ -356,20 +340,86 @@ export let FirstTenData = [{ "September" ], "allergens": "NA" - }, - { - "id": 62, - "name": "New Potatoes", - "imageurl": "https://via.placeholder.com/200x200", - "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", - "family": "Nightshade", - "foodtype": "Root", - "usedas": "Vegetable", - "month": [ - "April", - "May", - "June", - "July" - ], - "allergens": "NA" - }] \ No newline at end of file + }]; + + export let randomData = [{ + "id": 57, + "name": "Mangetout", + "imageurl": "https://via.placeholder.com/200x200", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "family": "Legume", + "foodtype": "Legume", + "usedas": "Vegetable", + "month": [ + "June", + "July", + "August" + ], + "allergens": "NA" + }, + { + "id": 58, + "name": "Marrow", + "imageurl": "https://via.placeholder.com/200x200", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "family": "Cucurbita", + "foodtype": "Gourd", + "usedas": "Vegetable", + "month": [ + "August", + "September" + ], + "allergens": "NA" + }, + { + "id": 59, + "name": "Mint", + "imageurl": "https://via.placeholder.com/200x200", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "family": "Mint", + "foodtype": "Herb", + "usedas": "Herb", + "month": [ + "May", + "June", + "July", + "August", + "September" + ], + "allergens": "NA" + }, + { + "id": 60, + "name": "Mussels", + "imageurl": "https://via.placeholder.com/200x200", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "family": "Fish", + "foodtype": "Fish", + "usedas": "Fish", + "month": [ + "January", + "February", + "March", + "October", + "November", + "December" + ], + "allergens": "Crustacean" + }, + { + "id": 61, + "name": "Nectarine", + "imageurl": "https://via.placeholder.com/200x200", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "family": "Citrus", + "foodtype": "Citrus", + "usedas": "Fruit", + "month": [ + "May", + "June", + "July", + "August", + "September" + ], + "allergens": "NA" + }] \ No newline at end of file From 254030ed9b0ce4b5a627aa0f2bc7be2d13389b46 Mon Sep 17 00:00:00 2001 From: N-LEE-94 Date: Thu, 4 Aug 2022 16:09:48 +0100 Subject: [PATCH 39/82] completed tests to ensure no duplicates are coming through the random function Co-authored-by: Matt Miller <101735099+codedresser@users.noreply.github.com> --- helper_scripts/randomGet.test.js | 101 ++++++++++--------------------- 1 file changed, 33 insertions(+), 68 deletions(-) diff --git a/helper_scripts/randomGet.test.js b/helper_scripts/randomGet.test.js index ad7909e..6f93b34 100644 --- a/helper_scripts/randomGet.test.js +++ b/helper_scripts/randomGet.test.js @@ -13,47 +13,18 @@ test("Testing the getRandom to check that it produces 5 objects from an array of }); -test("Testing the getRandom to check that it produces 5 unique objects with no duplicates from an array of 10 (with 5 duplicates)", () => { - - const data = duplicateData; - - const testArray = getRandom(data); - - let randomResults = []; - - let check = null; - - function randomTest(){ - - - for (let i = 0; i < 5; i++) { - - if ( - testArray.some((item) => { - return item.id === randomResults[i]; - }) - ) { - let check = false; - } else { - randomResults.push(allResults[randomNumber]); - let check = true; - } - } - } - - expect(check).toEqual(true); - -}); - // test("Testing the getRandom to check that it produces 5 unique objects with no duplicates from an array of 10 (with 5 duplicates)", () => { // const data = duplicateData; // const testArray = getRandom(data); -// let randomResult = randomData; +// let randomResults = []; + +// let check = null; + +// function randomTest(){ -// function randomTest(testArray, randomResults){ // for (let i = 0; i < 5; i++) { @@ -62,46 +33,40 @@ test("Testing the getRandom to check that it produces 5 unique objects with no d // return item.id === randomResults[i]; // }) // ) { -// false; +// check = false; // } else { -// true; +// randomResults.push(allResults[randomNumber]); +// check = true; // } // } // } -// expect().toEqual(); +// expect(check).toEqual(true); // }); - //Plan - // expecting the sum of all testArray.id = (57, 58, 59, 60, 61)Sum of them = 295 - // create variable for id sum =0 - // To get the sum we will loop through (.map) and add id integer to id sum. - // test the idsum equals what we are expecting (295). - - - - -// test("Testing the getRandom to check that it produces 5 objects from an array of 10", () => { -// const data = FirstTenData; +test("Testing the getRandom to check that it produces 5 unique objects with no duplicates from an array of 10 (with 5 duplicates)", () => { -// expect(getRandom(data)).toEqual(array.length === 5); -// expect(response.body).toEqual( -// expect.objectContaining({ -// success: true, -// payload: expect.arrayContaining([ -// expect.objectContaining({ -// id: expect.any(Number), -// name: "Pear", -// imageurl: expect.any(String), -// description: expect.any(String), -// family: expect.any(String), -// foodtype: expect.any(String), -// usedas: expect.any(String), -// month: expect.arrayContaining([expect.any(String)]), -// allergens: expect.any(String), -// }), -// ]), -// }) -// ); -// }); \ No newline at end of file + const data = duplicateData; + const result = getRandom(data); + + let fiftySeven = 0; + let fiftyEight = 0; + let fiftyNine = 0; + let sixty = 0; + let sixtyOne = 0; + + for (let i = 0; i < result.length; i++) { + if (result[i].id === 57) { fiftySeven ++} + else if (result[i].id === 58) { fiftyEight ++} + else if (result[i].id === 59) { fiftyNine ++} + else if (result[i].id === 60) { sixty ++} + else if (result[i].id === 61) { sixtyOne ++} + } + + expect(fiftySeven).toEqual(1); + expect(fiftyEight).toEqual(1); + expect(fiftyNine).toEqual(1); + expect(sixty).toEqual(1); + expect(sixtyOne).toEqual(1); +}); \ No newline at end of file From 64d91b42e49772e900f0f33e1993b4a60e8dc660 Mon Sep 17 00:00:00 2001 From: N-LEE-94 Date: Thu, 4 Aug 2022 16:23:10 +0100 Subject: [PATCH 40/82] completed tests to ensure no duplicates are coming through the random function Co-authored-by: Matt Miller <101735099+codedresser@users.noreply.github.com> --- app.test.js | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/app.test.js b/app.test.js index 2a26fae..47a2782 100644 --- a/app.test.js +++ b/app.test.js @@ -78,6 +78,41 @@ test("Testing the get month route using a month query", async () => { ); }); + +test("Testing that produce/random returns 5 objects", async () => { + const response = await request(app) + .get("/produce/random?month=January") + .set("Accept", "application/json"); + expect(response.status).toEqual(200); + expect(response.body.payload.length).toEqual(5); +}); + +test("Testing that produce/random returns unique objects", async () => { + const response = await request(app) + .get("/produce/random?month=January") + .set("Accept", "application/json"); + expect(response.status).toEqual(200); + expect(response.body).toEqual( + expect.objectContaining({ + success: true, + payload: expect.arrayContaining([ + expect.objectContaining({ + id: expect.any(Number), + name: expect.any(String), + imageurl: expect.any(String), + description: expect.any(String), + family: expect.any(String), + foodtype: expect.any(String), + usedas: expect.any(String), + month: expect.arrayContaining(["January"]), + allergens: expect.any(String), + }), + ]), + }) + ); + +}); + afterAll((done) => { pool.end(done); }); From 1ee2fcfe3bba8d45f4880f75ddd7583b7723c35e Mon Sep 17 00:00:00 2001 From: multi-vit <103585624+multi-vit@users.noreply.github.com> Date: Thu, 4 Aug 2022 20:26:19 +0100 Subject: [PATCH 41/82] Add images for august Co-authored-by: Madison Lowe <101978552+madisonlowe@users.noreply.github.com> --- db/data.js | 318 +++++++++++++++++++++++++++++++++++------------------ 1 file changed, 212 insertions(+), 106 deletions(-) diff --git a/db/data.js b/db/data.js index a547fdf..1df48cc 100644 --- a/db/data.js +++ b/db/data.js @@ -8,7 +8,8 @@ TODO: ADD EASTER EGG LISTINGS. const produce = [ { foodName: "Apple", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/019-apple_zxjdqm.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -26,7 +27,8 @@ const produce = [ }, { foodName: "Apricot", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637881/Seasonal/012-apricot_mj99xa.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -37,7 +39,8 @@ const produce = [ }, { foodName: "Asparagus", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Asparagus", @@ -48,7 +51,8 @@ const produce = [ }, { foodName: "Aubergine", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637877/Seasonal/001-aubergine_g9dkiw.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Nightshade", @@ -59,7 +63,8 @@ const produce = [ }, { foodName: "Banana", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637877/Seasonal/002-bananas_awomgk.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Musa", @@ -83,7 +88,8 @@ const produce = [ }, { foodName: "Basil", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637884/Seasonal/013-basil_hwolf6.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Mint", @@ -94,7 +100,8 @@ const produce = [ }, { foodName: "Beef", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637877/Seasonal/003-beef_sjwsxt.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", @@ -118,7 +125,8 @@ const produce = [ }, { foodName: "Beetroot", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637877/Seasonal/004-beetroot_zeq9bj.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Beet", @@ -137,7 +145,8 @@ const produce = [ }, { foodName: "Blackberry", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637877/Seasonal/005-berry_zflhtr.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -148,7 +157,8 @@ const produce = [ }, { foodName: "Blackcurrants", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "example", @@ -159,7 +169,8 @@ const produce = [ }, { foodName: "Bramley Apple", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Ribes", @@ -170,7 +181,8 @@ const produce = [ }, { foodName: "Broadbean", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637883/Seasonal/014-peas_ck7vlm.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Legume", @@ -181,7 +193,8 @@ const produce = [ }, { foodName: "Broccoli", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637879/Seasonal/006-broccoli_ehpar1.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -192,7 +205,8 @@ const produce = [ }, { foodName: "Brussels Sprouts", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -203,7 +217,8 @@ const produce = [ }, { foodName: "Cabbage", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637880/Seasonal/007-cabbage_xqq68l.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -227,7 +242,8 @@ const produce = [ }, { foodName: "Carrot", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637881/Seasonal/008-carrot_xesp4y.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Carrot", @@ -238,7 +254,8 @@ const produce = [ }, { foodName: "Cauliflower", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -249,7 +266,8 @@ const produce = [ }, { foodName: "Cavolo Nero", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637881/Seasonal/009-kale_wuhokp.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -260,7 +278,8 @@ const produce = [ }, { foodName: "Celeriac", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Parsley", @@ -280,7 +299,8 @@ const produce = [ }, { foodName: "Celery", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637884/Seasonal/015-celery_g1mfru.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Parsley", @@ -299,7 +319,8 @@ const produce = [ }, { foodName: "Cherry", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -310,7 +331,8 @@ const produce = [ }, { foodName: "Chervil", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637885/Seasonal/016-chervil_vtabww.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Parsley", @@ -321,7 +343,8 @@ const produce = [ }, { foodName: "Chestnut", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Beech", @@ -332,7 +355,8 @@ const produce = [ }, { foodName: "Chicory", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Daisy", @@ -343,7 +367,8 @@ const produce = [ }, { foodName: "Clementine", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Citrus", @@ -354,7 +379,8 @@ const produce = [ }, { foodName: "Cod", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", @@ -365,7 +391,8 @@ const produce = [ }, { foodName: "Courgette", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637886/Seasonal/017-courgette_x1jmsl.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cucurbita", @@ -376,7 +403,8 @@ const produce = [ }, { foodName: "Courgette Flower", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637886/Seasonal/017-courgette_x1jmsl.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cucurbita", @@ -387,7 +415,8 @@ const produce = [ }, { foodName: "Crab", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637885/Seasonal/018-crab_oxn7ew.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", @@ -407,7 +436,8 @@ const produce = [ }, { foodName: "Crab Apple", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/019-apple_zxjdqm.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -418,7 +448,8 @@ const produce = [ }, { foodName: "Cranberry", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Heath", @@ -429,7 +460,8 @@ const produce = [ }, { foodName: "Damson", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -440,7 +472,8 @@ const produce = [ }, { foodName: "Date", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Palm", @@ -451,7 +484,8 @@ const produce = [ }, { foodName: "Duck", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", @@ -462,7 +496,8 @@ const produce = [ }, { foodName: "Elderberries", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637877/Seasonal/020-berries_pw9fzh.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Sambucus", @@ -473,7 +508,8 @@ const produce = [ }, { foodName: "Fennel Bulb", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637880/Seasonal/021-fennel_uqqf6p.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "example", @@ -484,7 +520,8 @@ const produce = [ }, { foodName: "Fig", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637882/Seasonal/022-figs_jj1ssf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Parsley", @@ -495,7 +532,8 @@ const produce = [ }, { foodName: "Garlic", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637882/Seasonal/023-garlic_tszkk7.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Amaryllis", @@ -506,7 +544,8 @@ const produce = [ }, { foodName: "Globe Artichoke", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637883/Seasonal/024-artichoke_rh8u1h.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Daisy", @@ -517,7 +556,8 @@ const produce = [ }, { foodName: "Goose", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", @@ -528,7 +568,8 @@ const produce = [ }, { foodName: "Gooseberry", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637883/Seasonal/025-gooseberry_n0c9xl.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Ribes", @@ -539,7 +580,8 @@ const produce = [ }, { foodName: "Grapefruit", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Citrus", @@ -550,7 +592,8 @@ const produce = [ }, { foodName: "Grouse", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/026-chicken_xt4kgm.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", @@ -561,7 +604,8 @@ const produce = [ }, { foodName: "Guinea Fowl", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", @@ -572,7 +616,8 @@ const produce = [ }, { foodName: "Halibut", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/027-halibut_wagn5i.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", @@ -583,7 +628,8 @@ const produce = [ }, { foodName: "Jerusalem Artichoke", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Daisy", @@ -594,7 +640,8 @@ const produce = [ }, { foodName: "Kale", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637881/Seasonal/009-kale_wuhokp.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -605,7 +652,8 @@ const produce = [ }, { foodName: "Kipper", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637890/Seasonal/034-mackerel_f8xvhi.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", @@ -616,7 +664,8 @@ const produce = [ }, { foodName: "Kohlrabi", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/029-kohlrabi_nwtzii.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -627,7 +676,8 @@ const produce = [ }, { foodName: "Lamb", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/030-ewe_w2coor.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", @@ -651,7 +701,8 @@ const produce = [ }, { foodName: "Lamb's Lettuce", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637889/Seasonal/031-greens_rsygez.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Honeysuckle", @@ -670,7 +721,8 @@ const produce = [ }, { foodName: "Leek", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Amaryllis", @@ -689,7 +741,8 @@ const produce = [ }, { foodName: "Lemon", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Citrus", @@ -700,7 +753,8 @@ const produce = [ }, { foodName: "Lettuce", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637889/Seasonal/032-lettuce_k50llo.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Daisy", @@ -720,7 +774,8 @@ const produce = [ }, { foodName: "Loganberry", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637890/Seasonal/033-grape_jdq8ux.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -731,7 +786,8 @@ const produce = [ }, { foodName: "Mackerel", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637890/Seasonal/034-mackerel_f8xvhi.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", @@ -742,7 +798,8 @@ const produce = [ }, { foodName: "Mangetout", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637883/Seasonal/014-peas_ck7vlm.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Legume", @@ -753,7 +810,8 @@ const produce = [ }, { foodName: "Marrow", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637890/Seasonal/035-marrow_hmofph.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cucurbita", @@ -764,7 +822,8 @@ const produce = [ }, { foodName: "Mint", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637890/Seasonal/036-mint_umqpfz.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Mint", @@ -775,7 +834,8 @@ const produce = [ }, { foodName: "Mussels", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", @@ -786,7 +846,8 @@ const produce = [ }, { foodName: "Nectarine", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637880/Seasonal/010-nectarine_vtqysg.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Citrus", @@ -797,7 +858,8 @@ const produce = [ }, { foodName: "New Potatoes", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Nightshade", @@ -808,7 +870,8 @@ const produce = [ }, { foodName: "Onion", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637891/Seasonal/037-onion_tzbdx9.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Amaryllis", @@ -832,7 +895,8 @@ const produce = [ }, { foodName: "Orange", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Citrus", @@ -843,7 +907,8 @@ const produce = [ }, { foodName: "Oyster", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", @@ -863,7 +928,8 @@ const produce = [ }, { foodName: "Pak Choi", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637891/Seasonal/038-pak-choi_ujodbb.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -887,7 +953,8 @@ const produce = [ }, { foodName: "Parsnip", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Parsley", @@ -906,7 +973,8 @@ const produce = [ }, { foodName: "Peach", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637892/Seasonal/039-peach_tjw63g.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -917,7 +985,8 @@ const produce = [ }, { foodName: "Pear", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -928,7 +997,8 @@ const produce = [ }, { foodName: "Peas", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637883/Seasonal/014-peas_ck7vlm.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Legume", @@ -949,7 +1019,8 @@ const produce = [ }, { foodName: "Pepper", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637892/Seasonal/040-peppers_gplnan.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Nightshade", @@ -969,7 +1040,8 @@ const produce = [ }, { foodName: "Plum", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -980,7 +1052,8 @@ const produce = [ }, { foodName: "Pomegranate", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637893/Seasonal/041-pomegranate_xepy6o.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Punica", @@ -1004,7 +1077,8 @@ const produce = [ }, { foodName: "Pork", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637893/Seasonal/042-pork_kzmixj.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", @@ -1028,7 +1102,8 @@ const produce = [ }, { foodName: "Potato", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Nightshade", @@ -1039,7 +1114,8 @@ const produce = [ }, { foodName: "Pumpkin", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cucurbita", @@ -1050,7 +1126,8 @@ const produce = [ }, { foodName: "Purple Sprouting Broccoli", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -1061,7 +1138,8 @@ const produce = [ }, { foodName: "Quince", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -1072,7 +1150,8 @@ const produce = [ }, { foodName: "Radicchio", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637893/Seasonal/043-red-cabbage_ztkwae.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Daisy", @@ -1096,7 +1175,8 @@ const produce = [ }, { foodName: "Radish", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637893/Seasonal/044-radish_mchuo6.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -1107,7 +1187,8 @@ const produce = [ }, { foodName: "Raspberry", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637893/Seasonal/045-raspberry_ux5ngf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -1118,7 +1199,8 @@ const produce = [ }, { foodName: "Redcurrant", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637894/Seasonal/046-redcurrant_gq6syn.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Ribes", @@ -1129,7 +1211,8 @@ const produce = [ }, { foodName: "Rhubarb", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Buckwheat", @@ -1140,7 +1223,8 @@ const produce = [ }, { foodName: "Runner Bean", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637894/Seasonal/047-beans_er3cme.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Legume", @@ -1151,7 +1235,8 @@ const produce = [ }, { foodName: "Salmon", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637895/Seasonal/048-salmon_judbg6.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", @@ -1162,7 +1247,8 @@ const produce = [ }, { foodName: "Salsify", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Daisy", @@ -1173,7 +1259,8 @@ const produce = [ }, { foodName: "Samphire", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Parsley", @@ -1184,7 +1271,8 @@ const produce = [ }, { foodName: "Sorrel", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637895/Seasonal/049-sorrel_zzzw7z.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "example", @@ -1195,7 +1283,8 @@ const produce = [ }, { foodName: "Spinach", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637895/Seasonal/050-spinach_whzzyi.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Buckwheat", @@ -1206,7 +1295,8 @@ const produce = [ }, { foodName: "Spring Greens", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -1217,7 +1307,8 @@ const produce = [ }, { foodName: "Spring Lamb", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/030-ewe_w2coor.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", @@ -1228,7 +1319,8 @@ const produce = [ }, { foodName: "Spring Onion", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637896/Seasonal/051-spring-onion_eh5trg.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Amaryllis", @@ -1252,7 +1344,8 @@ const produce = [ }, { foodName: "Strawberry", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637897/Seasonal/052-strawberry_pxugsj.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -1263,7 +1356,8 @@ const produce = [ }, { foodName: "Swede", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -1274,7 +1368,8 @@ const produce = [ }, { foodName: "Sweet Potato", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Morning Glory", @@ -1285,7 +1380,8 @@ const produce = [ }, { foodName: "Sweetcorn", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Grass", @@ -1296,7 +1392,8 @@ const produce = [ }, { foodName: "Swiss Chard", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637897/Seasonal/053-chard_p4ydid.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Beet", @@ -1307,7 +1404,8 @@ const produce = [ }, { foodName: "Tayberry", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637890/Seasonal/033-grape_jdq8ux.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "example", @@ -1318,7 +1416,8 @@ const produce = [ }, { foodName: "Tomato", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637880/Seasonal/011-tomato_ighe7m.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -1329,7 +1428,8 @@ const produce = [ }, { foodName: "Tuna", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/028-fish_eqeczk.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie..", family: "Fish", @@ -1340,7 +1440,8 @@ const produce = [ }, { foodName: "Turkey", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", @@ -1351,7 +1452,8 @@ const produce = [ }, { foodName: "Turnip", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -1362,7 +1464,8 @@ const produce = [ }, { foodName: "Venison", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", @@ -1373,7 +1476,8 @@ const produce = [ }, { foodName: "Watercress", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637898/Seasonal/055-watercress_jzk4fu.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -1384,7 +1488,8 @@ const produce = [ }, { foodName: "Watermelon", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/056-watermelon_lpehjq.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cucurbita", @@ -1395,7 +1500,8 @@ const produce = [ }, { foodName: "Whiting", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637890/Seasonal/034-mackerel_f8xvhi.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", From 69723e719b45e8d42c58b1c28593db887d2217ae Mon Sep 17 00:00:00 2001 From: multi-vit <103585624+multi-vit@users.noreply.github.com> Date: Fri, 5 Aug 2022 10:04:48 +0100 Subject: [PATCH 42/82] Add samphire --- db/data.js | 317 ++++++++++++++++++----------------------------------- 1 file changed, 106 insertions(+), 211 deletions(-) diff --git a/db/data.js b/db/data.js index 1df48cc..4e7247d 100644 --- a/db/data.js +++ b/db/data.js @@ -8,8 +8,7 @@ TODO: ADD EASTER EGG LISTINGS. const produce = [ { foodName: "Apple", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/019-apple_zxjdqm.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -27,8 +26,7 @@ const produce = [ }, { foodName: "Apricot", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637881/Seasonal/012-apricot_mj99xa.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -39,8 +37,7 @@ const produce = [ }, { foodName: "Asparagus", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Asparagus", @@ -51,8 +48,7 @@ const produce = [ }, { foodName: "Aubergine", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637877/Seasonal/001-aubergine_g9dkiw.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Nightshade", @@ -63,8 +59,7 @@ const produce = [ }, { foodName: "Banana", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637877/Seasonal/002-bananas_awomgk.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Musa", @@ -88,8 +83,7 @@ const produce = [ }, { foodName: "Basil", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637884/Seasonal/013-basil_hwolf6.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Mint", @@ -100,8 +94,7 @@ const produce = [ }, { foodName: "Beef", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637877/Seasonal/003-beef_sjwsxt.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", @@ -125,8 +118,7 @@ const produce = [ }, { foodName: "Beetroot", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637877/Seasonal/004-beetroot_zeq9bj.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Beet", @@ -145,8 +137,7 @@ const produce = [ }, { foodName: "Blackberry", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637877/Seasonal/005-berry_zflhtr.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -157,8 +148,7 @@ const produce = [ }, { foodName: "Blackcurrants", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "example", @@ -169,8 +159,7 @@ const produce = [ }, { foodName: "Bramley Apple", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Ribes", @@ -181,8 +170,7 @@ const produce = [ }, { foodName: "Broadbean", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637883/Seasonal/014-peas_ck7vlm.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Legume", @@ -193,8 +181,7 @@ const produce = [ }, { foodName: "Broccoli", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637879/Seasonal/006-broccoli_ehpar1.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -205,8 +192,7 @@ const produce = [ }, { foodName: "Brussels Sprouts", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -217,8 +203,7 @@ const produce = [ }, { foodName: "Cabbage", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637880/Seasonal/007-cabbage_xqq68l.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -242,8 +227,7 @@ const produce = [ }, { foodName: "Carrot", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637881/Seasonal/008-carrot_xesp4y.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Carrot", @@ -254,8 +238,7 @@ const produce = [ }, { foodName: "Cauliflower", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -266,8 +249,7 @@ const produce = [ }, { foodName: "Cavolo Nero", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637881/Seasonal/009-kale_wuhokp.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -278,8 +260,7 @@ const produce = [ }, { foodName: "Celeriac", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Parsley", @@ -299,8 +280,7 @@ const produce = [ }, { foodName: "Celery", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637884/Seasonal/015-celery_g1mfru.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Parsley", @@ -319,8 +299,7 @@ const produce = [ }, { foodName: "Cherry", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -331,8 +310,7 @@ const produce = [ }, { foodName: "Chervil", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637885/Seasonal/016-chervil_vtabww.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Parsley", @@ -343,8 +321,7 @@ const produce = [ }, { foodName: "Chestnut", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Beech", @@ -355,8 +332,7 @@ const produce = [ }, { foodName: "Chicory", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Daisy", @@ -367,8 +343,7 @@ const produce = [ }, { foodName: "Clementine", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Citrus", @@ -379,8 +354,7 @@ const produce = [ }, { foodName: "Cod", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", @@ -391,8 +365,7 @@ const produce = [ }, { foodName: "Courgette", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637886/Seasonal/017-courgette_x1jmsl.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cucurbita", @@ -403,8 +376,7 @@ const produce = [ }, { foodName: "Courgette Flower", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637886/Seasonal/017-courgette_x1jmsl.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cucurbita", @@ -415,8 +387,7 @@ const produce = [ }, { foodName: "Crab", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637885/Seasonal/018-crab_oxn7ew.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", @@ -436,8 +407,7 @@ const produce = [ }, { foodName: "Crab Apple", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/019-apple_zxjdqm.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -448,8 +418,7 @@ const produce = [ }, { foodName: "Cranberry", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Heath", @@ -460,8 +429,7 @@ const produce = [ }, { foodName: "Damson", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -472,8 +440,7 @@ const produce = [ }, { foodName: "Date", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Palm", @@ -484,8 +451,7 @@ const produce = [ }, { foodName: "Duck", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", @@ -496,8 +462,7 @@ const produce = [ }, { foodName: "Elderberries", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637877/Seasonal/020-berries_pw9fzh.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Sambucus", @@ -508,8 +473,7 @@ const produce = [ }, { foodName: "Fennel Bulb", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637880/Seasonal/021-fennel_uqqf6p.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "example", @@ -520,8 +484,7 @@ const produce = [ }, { foodName: "Fig", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637882/Seasonal/022-figs_jj1ssf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Parsley", @@ -532,8 +495,7 @@ const produce = [ }, { foodName: "Garlic", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637882/Seasonal/023-garlic_tszkk7.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Amaryllis", @@ -544,8 +506,7 @@ const produce = [ }, { foodName: "Globe Artichoke", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637883/Seasonal/024-artichoke_rh8u1h.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Daisy", @@ -556,8 +517,7 @@ const produce = [ }, { foodName: "Goose", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", @@ -568,8 +528,7 @@ const produce = [ }, { foodName: "Gooseberry", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637883/Seasonal/025-gooseberry_n0c9xl.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Ribes", @@ -580,8 +539,7 @@ const produce = [ }, { foodName: "Grapefruit", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Citrus", @@ -592,8 +550,7 @@ const produce = [ }, { foodName: "Grouse", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/026-chicken_xt4kgm.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", @@ -604,8 +561,7 @@ const produce = [ }, { foodName: "Guinea Fowl", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", @@ -616,8 +572,7 @@ const produce = [ }, { foodName: "Halibut", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/027-halibut_wagn5i.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", @@ -628,8 +583,7 @@ const produce = [ }, { foodName: "Jerusalem Artichoke", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Daisy", @@ -640,8 +594,7 @@ const produce = [ }, { foodName: "Kale", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637881/Seasonal/009-kale_wuhokp.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -652,8 +605,7 @@ const produce = [ }, { foodName: "Kipper", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637890/Seasonal/034-mackerel_f8xvhi.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", @@ -664,8 +616,7 @@ const produce = [ }, { foodName: "Kohlrabi", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/029-kohlrabi_nwtzii.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -676,8 +627,7 @@ const produce = [ }, { foodName: "Lamb", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/030-ewe_w2coor.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", @@ -701,8 +651,7 @@ const produce = [ }, { foodName: "Lamb's Lettuce", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637889/Seasonal/031-greens_rsygez.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Honeysuckle", @@ -721,8 +670,7 @@ const produce = [ }, { foodName: "Leek", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Amaryllis", @@ -741,8 +689,7 @@ const produce = [ }, { foodName: "Lemon", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Citrus", @@ -753,8 +700,7 @@ const produce = [ }, { foodName: "Lettuce", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637889/Seasonal/032-lettuce_k50llo.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Daisy", @@ -774,8 +720,7 @@ const produce = [ }, { foodName: "Loganberry", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637890/Seasonal/033-grape_jdq8ux.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -786,8 +731,7 @@ const produce = [ }, { foodName: "Mackerel", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637890/Seasonal/034-mackerel_f8xvhi.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", @@ -798,8 +742,7 @@ const produce = [ }, { foodName: "Mangetout", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637883/Seasonal/014-peas_ck7vlm.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Legume", @@ -810,8 +753,7 @@ const produce = [ }, { foodName: "Marrow", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637890/Seasonal/035-marrow_hmofph.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cucurbita", @@ -822,8 +764,7 @@ const produce = [ }, { foodName: "Mint", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637890/Seasonal/036-mint_umqpfz.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Mint", @@ -834,8 +775,7 @@ const produce = [ }, { foodName: "Mussels", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", @@ -846,8 +786,7 @@ const produce = [ }, { foodName: "Nectarine", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637880/Seasonal/010-nectarine_vtqysg.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Citrus", @@ -858,8 +797,7 @@ const produce = [ }, { foodName: "New Potatoes", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Nightshade", @@ -870,8 +808,7 @@ const produce = [ }, { foodName: "Onion", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637891/Seasonal/037-onion_tzbdx9.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Amaryllis", @@ -895,8 +832,7 @@ const produce = [ }, { foodName: "Orange", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Citrus", @@ -907,8 +843,7 @@ const produce = [ }, { foodName: "Oyster", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", @@ -928,8 +863,7 @@ const produce = [ }, { foodName: "Pak Choi", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637891/Seasonal/038-pak-choi_ujodbb.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -953,8 +887,7 @@ const produce = [ }, { foodName: "Parsnip", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Parsley", @@ -973,8 +906,7 @@ const produce = [ }, { foodName: "Peach", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637892/Seasonal/039-peach_tjw63g.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -985,8 +917,7 @@ const produce = [ }, { foodName: "Pear", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -997,8 +928,7 @@ const produce = [ }, { foodName: "Peas", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637883/Seasonal/014-peas_ck7vlm.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Legume", @@ -1019,8 +949,7 @@ const produce = [ }, { foodName: "Pepper", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637892/Seasonal/040-peppers_gplnan.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Nightshade", @@ -1040,8 +969,7 @@ const produce = [ }, { foodName: "Plum", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -1052,8 +980,7 @@ const produce = [ }, { foodName: "Pomegranate", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637893/Seasonal/041-pomegranate_xepy6o.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Punica", @@ -1077,8 +1004,7 @@ const produce = [ }, { foodName: "Pork", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637893/Seasonal/042-pork_kzmixj.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", @@ -1102,8 +1028,7 @@ const produce = [ }, { foodName: "Potato", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Nightshade", @@ -1114,8 +1039,7 @@ const produce = [ }, { foodName: "Pumpkin", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cucurbita", @@ -1126,8 +1050,7 @@ const produce = [ }, { foodName: "Purple Sprouting Broccoli", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -1138,8 +1061,7 @@ const produce = [ }, { foodName: "Quince", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -1150,8 +1072,7 @@ const produce = [ }, { foodName: "Radicchio", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637893/Seasonal/043-red-cabbage_ztkwae.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Daisy", @@ -1175,8 +1096,7 @@ const produce = [ }, { foodName: "Radish", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637893/Seasonal/044-radish_mchuo6.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -1187,8 +1107,7 @@ const produce = [ }, { foodName: "Raspberry", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637893/Seasonal/045-raspberry_ux5ngf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -1199,8 +1118,7 @@ const produce = [ }, { foodName: "Redcurrant", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637894/Seasonal/046-redcurrant_gq6syn.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Ribes", @@ -1211,8 +1129,7 @@ const produce = [ }, { foodName: "Rhubarb", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Buckwheat", @@ -1223,8 +1140,7 @@ const produce = [ }, { foodName: "Runner Bean", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637894/Seasonal/047-beans_er3cme.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Legume", @@ -1235,8 +1151,7 @@ const produce = [ }, { foodName: "Salmon", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637895/Seasonal/048-salmon_judbg6.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", @@ -1247,8 +1162,7 @@ const produce = [ }, { foodName: "Salsify", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Daisy", @@ -1260,7 +1174,7 @@ const produce = [ { foodName: "Samphire", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659690222/Seasonal/58-rosemary_tagkf0.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Parsley", @@ -1271,8 +1185,7 @@ const produce = [ }, { foodName: "Sorrel", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637895/Seasonal/049-sorrel_zzzw7z.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "example", @@ -1283,8 +1196,7 @@ const produce = [ }, { foodName: "Spinach", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637895/Seasonal/050-spinach_whzzyi.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Buckwheat", @@ -1295,8 +1207,7 @@ const produce = [ }, { foodName: "Spring Greens", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -1307,8 +1218,7 @@ const produce = [ }, { foodName: "Spring Lamb", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/030-ewe_w2coor.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", @@ -1319,8 +1229,7 @@ const produce = [ }, { foodName: "Spring Onion", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637896/Seasonal/051-spring-onion_eh5trg.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Amaryllis", @@ -1344,8 +1253,7 @@ const produce = [ }, { foodName: "Strawberry", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637897/Seasonal/052-strawberry_pxugsj.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -1356,8 +1264,7 @@ const produce = [ }, { foodName: "Swede", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -1368,8 +1275,7 @@ const produce = [ }, { foodName: "Sweet Potato", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Morning Glory", @@ -1380,8 +1286,7 @@ const produce = [ }, { foodName: "Sweetcorn", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Grass", @@ -1392,8 +1297,7 @@ const produce = [ }, { foodName: "Swiss Chard", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637897/Seasonal/053-chard_p4ydid.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Beet", @@ -1404,8 +1308,7 @@ const produce = [ }, { foodName: "Tayberry", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637890/Seasonal/033-grape_jdq8ux.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "example", @@ -1416,8 +1319,7 @@ const produce = [ }, { foodName: "Tomato", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637880/Seasonal/011-tomato_ighe7m.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -1428,8 +1330,7 @@ const produce = [ }, { foodName: "Tuna", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/028-fish_eqeczk.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie..", family: "Fish", @@ -1440,8 +1341,7 @@ const produce = [ }, { foodName: "Turkey", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", @@ -1452,8 +1352,7 @@ const produce = [ }, { foodName: "Turnip", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -1464,8 +1363,7 @@ const produce = [ }, { foodName: "Venison", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", @@ -1476,8 +1374,7 @@ const produce = [ }, { foodName: "Watercress", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637898/Seasonal/055-watercress_jzk4fu.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -1488,8 +1385,7 @@ const produce = [ }, { foodName: "Watermelon", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/056-watermelon_lpehjq.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cucurbita", @@ -1500,8 +1396,7 @@ const produce = [ }, { foodName: "Whiting", - imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637890/Seasonal/034-mackerel_f8xvhi.png", + imageURL: "https://via.placeholder.com/200x200", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", From 7467015525d32434049c4bba3440f012ace97e74 Mon Sep 17 00:00:00 2001 From: codedresser Date: Fri, 5 Aug 2022 10:32:47 +0100 Subject: [PATCH 43/82] Complete random 5 test working for route and function Co-authored-by: Nathan Lee <100144036+N-LEE-94@users.noreply.github.com> Co-authored-by: Andy Johnson <103585624+multi-vit@users.noreply.github.com> --- app.test.js | 33 +++++++++++++++++++++++- helper_scripts/randomGet.test.js | 43 ++++++++++++++------------------ 2 files changed, 51 insertions(+), 25 deletions(-) diff --git a/app.test.js b/app.test.js index 47a2782..b674f98 100644 --- a/app.test.js +++ b/app.test.js @@ -87,7 +87,7 @@ test("Testing that produce/random returns 5 objects", async () => { expect(response.body.payload.length).toEqual(5); }); -test("Testing that produce/random returns unique objects", async () => { +test("Testing that random produce returns an object with expected key value pairs and the month key contains January string", async () => { const response = await request(app) .get("/produce/random?month=January") .set("Accept", "application/json"); @@ -113,6 +113,37 @@ test("Testing that produce/random returns unique objects", async () => { }); + +test("Testing that random produce returns 5 unique objects from the database for January", async () => { + const response = await request(app) + .get("/produce/random?month=January") + .set("Accept", "application/json"); + expect(response.status).toEqual(200); + + const testArray = response.body.payload; + + let randomResults = []; + + let check = null; + + for (let i = 0; i < testArray.length; i++) { + + if ( + randomResults.some((item) => { + return item.id === testArray[i].id; + }) + ) { + check = false; + } else { + randomResults.push(testArray[i]); + check = true; + } + } + + expect(check).toEqual(true); + +}), + afterAll((done) => { pool.end(done); }); diff --git a/helper_scripts/randomGet.test.js b/helper_scripts/randomGet.test.js index 6f93b34..89064c2 100644 --- a/helper_scripts/randomGet.test.js +++ b/helper_scripts/randomGet.test.js @@ -2,7 +2,6 @@ import { test, expect, describe } from "@jest/globals"; import { getRandom } from "./randomGet.js" import { firstTenData, duplicateData, randomData } from "./testingdata.js" - test("Testing the getRandom to check that it produces 5 objects from an array of 10", () => { const data = firstTenData; @@ -13,37 +12,33 @@ test("Testing the getRandom to check that it produces 5 objects from an array of }); -// test("Testing the getRandom to check that it produces 5 unique objects with no duplicates from an array of 10 (with 5 duplicates)", () => { +test("Testing the getRandom to check that it produces 5 unique objects with no duplicates from an array of 10 (with 5 duplicates)", () => { -// const data = duplicateData; - -// const testArray = getRandom(data); - -// let randomResults = []; + const data = duplicateData; -// let check = null; + const testArray = getRandom(data); -// function randomTest(){ + let randomResults = []; + let check = null; -// for (let i = 0; i < 5; i++) { + for (let i = 0; i < testArray.length; i++) { -// if ( -// testArray.some((item) => { -// return item.id === randomResults[i]; -// }) -// ) { -// check = false; -// } else { -// randomResults.push(allResults[randomNumber]); -// check = true; -// } -// } -// } + if ( + randomResults.some((item) => { + return item.id === testArray[i].id; + }) + ) { + check = false; + } else { + randomResults.push(testArray[i]); + check = true; + } + } -// expect(check).toEqual(true); + expect(check).toEqual(true); -// }); +}); test("Testing the getRandom to check that it produces 5 unique objects with no duplicates from an array of 10 (with 5 duplicates)", () => { From 4c17abe0c23b772f797d03568cb200b3f4110ef0 Mon Sep 17 00:00:00 2001 From: multi-vit <103585624+multi-vit@users.noreply.github.com> Date: Sun, 7 Aug 2022 12:13:35 +0100 Subject: [PATCH 44/82] Fix image urls due to merge issues --- db/data.js | 317 +++++++++++++++++++++++++++++++++++------------------ 1 file changed, 211 insertions(+), 106 deletions(-) diff --git a/db/data.js b/db/data.js index 4e7247d..59f7131 100644 --- a/db/data.js +++ b/db/data.js @@ -8,7 +8,8 @@ TODO: ADD EASTER EGG LISTINGS. const produce = [ { foodName: "Apple", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/019-apple_zxjdqm.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -26,7 +27,8 @@ const produce = [ }, { foodName: "Apricot", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637881/Seasonal/012-apricot_mj99xa.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -37,7 +39,8 @@ const produce = [ }, { foodName: "Asparagus", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Asparagus", @@ -48,7 +51,8 @@ const produce = [ }, { foodName: "Aubergine", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637877/Seasonal/001-aubergine_g9dkiw.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Nightshade", @@ -59,7 +63,8 @@ const produce = [ }, { foodName: "Banana", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637877/Seasonal/002-bananas_awomgk.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Musa", @@ -83,7 +88,8 @@ const produce = [ }, { foodName: "Basil", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637884/Seasonal/013-basil_hwolf6.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Mint", @@ -94,7 +100,8 @@ const produce = [ }, { foodName: "Beef", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637877/Seasonal/003-beef_sjwsxt.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", @@ -118,7 +125,8 @@ const produce = [ }, { foodName: "Beetroot", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637877/Seasonal/004-beetroot_zeq9bj.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Beet", @@ -137,7 +145,8 @@ const produce = [ }, { foodName: "Blackberry", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637877/Seasonal/005-berry_zflhtr.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -148,7 +157,8 @@ const produce = [ }, { foodName: "Blackcurrants", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "example", @@ -159,7 +169,8 @@ const produce = [ }, { foodName: "Bramley Apple", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Ribes", @@ -170,7 +181,8 @@ const produce = [ }, { foodName: "Broadbean", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637883/Seasonal/014-peas_ck7vlm.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Legume", @@ -181,7 +193,8 @@ const produce = [ }, { foodName: "Broccoli", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637879/Seasonal/006-broccoli_ehpar1.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -192,7 +205,8 @@ const produce = [ }, { foodName: "Brussels Sprouts", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -203,7 +217,8 @@ const produce = [ }, { foodName: "Cabbage", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637880/Seasonal/007-cabbage_xqq68l.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -227,7 +242,8 @@ const produce = [ }, { foodName: "Carrot", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637881/Seasonal/008-carrot_xesp4y.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Carrot", @@ -238,7 +254,8 @@ const produce = [ }, { foodName: "Cauliflower", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -249,7 +266,8 @@ const produce = [ }, { foodName: "Cavolo Nero", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637881/Seasonal/009-kale_wuhokp.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -260,7 +278,8 @@ const produce = [ }, { foodName: "Celeriac", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Parsley", @@ -280,7 +299,8 @@ const produce = [ }, { foodName: "Celery", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637884/Seasonal/015-celery_g1mfru.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Parsley", @@ -299,7 +319,8 @@ const produce = [ }, { foodName: "Cherry", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -310,7 +331,8 @@ const produce = [ }, { foodName: "Chervil", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637885/Seasonal/016-chervil_vtabww.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Parsley", @@ -321,7 +343,8 @@ const produce = [ }, { foodName: "Chestnut", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Beech", @@ -332,7 +355,8 @@ const produce = [ }, { foodName: "Chicory", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Daisy", @@ -343,7 +367,8 @@ const produce = [ }, { foodName: "Clementine", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Citrus", @@ -354,7 +379,8 @@ const produce = [ }, { foodName: "Cod", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", @@ -365,7 +391,8 @@ const produce = [ }, { foodName: "Courgette", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637886/Seasonal/017-courgette_x1jmsl.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cucurbita", @@ -376,7 +403,8 @@ const produce = [ }, { foodName: "Courgette Flower", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637886/Seasonal/017-courgette_x1jmsl.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cucurbita", @@ -387,7 +415,8 @@ const produce = [ }, { foodName: "Crab", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637885/Seasonal/018-crab_oxn7ew.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", @@ -407,7 +436,8 @@ const produce = [ }, { foodName: "Crab Apple", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/019-apple_zxjdqm.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -418,7 +448,8 @@ const produce = [ }, { foodName: "Cranberry", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Heath", @@ -429,7 +460,8 @@ const produce = [ }, { foodName: "Damson", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -440,7 +472,8 @@ const produce = [ }, { foodName: "Date", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Palm", @@ -451,7 +484,8 @@ const produce = [ }, { foodName: "Duck", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", @@ -462,7 +496,8 @@ const produce = [ }, { foodName: "Elderberries", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637877/Seasonal/020-berries_pw9fzh.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Sambucus", @@ -473,7 +508,8 @@ const produce = [ }, { foodName: "Fennel Bulb", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637880/Seasonal/021-fennel_uqqf6p.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "example", @@ -484,7 +520,8 @@ const produce = [ }, { foodName: "Fig", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637882/Seasonal/022-figs_jj1ssf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Parsley", @@ -495,7 +532,8 @@ const produce = [ }, { foodName: "Garlic", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637882/Seasonal/023-garlic_tszkk7.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Amaryllis", @@ -506,7 +544,8 @@ const produce = [ }, { foodName: "Globe Artichoke", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637883/Seasonal/024-artichoke_rh8u1h.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Daisy", @@ -517,7 +556,8 @@ const produce = [ }, { foodName: "Goose", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", @@ -528,7 +568,8 @@ const produce = [ }, { foodName: "Gooseberry", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637883/Seasonal/025-gooseberry_n0c9xl.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Ribes", @@ -539,7 +580,8 @@ const produce = [ }, { foodName: "Grapefruit", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Citrus", @@ -550,7 +592,8 @@ const produce = [ }, { foodName: "Grouse", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/026-chicken_xt4kgm.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", @@ -561,7 +604,8 @@ const produce = [ }, { foodName: "Guinea Fowl", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", @@ -572,7 +616,8 @@ const produce = [ }, { foodName: "Halibut", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/027-halibut_wagn5i.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", @@ -583,7 +628,8 @@ const produce = [ }, { foodName: "Jerusalem Artichoke", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Daisy", @@ -594,7 +640,8 @@ const produce = [ }, { foodName: "Kale", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637881/Seasonal/009-kale_wuhokp.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -605,7 +652,8 @@ const produce = [ }, { foodName: "Kipper", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637890/Seasonal/034-mackerel_f8xvhi.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", @@ -616,7 +664,8 @@ const produce = [ }, { foodName: "Kohlrabi", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/029-kohlrabi_nwtzii.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -627,7 +676,8 @@ const produce = [ }, { foodName: "Lamb", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/030-ewe_w2coor.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", @@ -651,7 +701,8 @@ const produce = [ }, { foodName: "Lamb's Lettuce", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637889/Seasonal/031-greens_rsygez.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Honeysuckle", @@ -670,7 +721,8 @@ const produce = [ }, { foodName: "Leek", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Amaryllis", @@ -689,7 +741,8 @@ const produce = [ }, { foodName: "Lemon", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Citrus", @@ -700,7 +753,8 @@ const produce = [ }, { foodName: "Lettuce", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637889/Seasonal/032-lettuce_k50llo.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Daisy", @@ -720,7 +774,8 @@ const produce = [ }, { foodName: "Loganberry", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637890/Seasonal/033-grape_jdq8ux.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -731,7 +786,8 @@ const produce = [ }, { foodName: "Mackerel", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637890/Seasonal/034-mackerel_f8xvhi.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", @@ -742,7 +798,8 @@ const produce = [ }, { foodName: "Mangetout", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637883/Seasonal/014-peas_ck7vlm.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Legume", @@ -753,7 +810,8 @@ const produce = [ }, { foodName: "Marrow", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637890/Seasonal/035-marrow_hmofph.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cucurbita", @@ -764,7 +822,8 @@ const produce = [ }, { foodName: "Mint", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637890/Seasonal/036-mint_umqpfz.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Mint", @@ -775,7 +834,8 @@ const produce = [ }, { foodName: "Mussels", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", @@ -786,7 +846,8 @@ const produce = [ }, { foodName: "Nectarine", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637880/Seasonal/010-nectarine_vtqysg.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Citrus", @@ -797,7 +858,8 @@ const produce = [ }, { foodName: "New Potatoes", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Nightshade", @@ -808,7 +870,8 @@ const produce = [ }, { foodName: "Onion", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637891/Seasonal/037-onion_tzbdx9.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Amaryllis", @@ -832,7 +895,8 @@ const produce = [ }, { foodName: "Orange", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Citrus", @@ -843,7 +907,8 @@ const produce = [ }, { foodName: "Oyster", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", @@ -863,7 +928,8 @@ const produce = [ }, { foodName: "Pak Choi", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637891/Seasonal/038-pak-choi_ujodbb.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -887,7 +953,8 @@ const produce = [ }, { foodName: "Parsnip", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Parsley", @@ -906,7 +973,8 @@ const produce = [ }, { foodName: "Peach", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637892/Seasonal/039-peach_tjw63g.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -917,7 +985,8 @@ const produce = [ }, { foodName: "Pear", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -928,7 +997,8 @@ const produce = [ }, { foodName: "Peas", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637883/Seasonal/014-peas_ck7vlm.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Legume", @@ -949,7 +1019,8 @@ const produce = [ }, { foodName: "Pepper", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637892/Seasonal/040-peppers_gplnan.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Nightshade", @@ -969,7 +1040,8 @@ const produce = [ }, { foodName: "Plum", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -980,7 +1052,8 @@ const produce = [ }, { foodName: "Pomegranate", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637893/Seasonal/041-pomegranate_xepy6o.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Punica", @@ -1004,7 +1077,8 @@ const produce = [ }, { foodName: "Pork", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637893/Seasonal/042-pork_kzmixj.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", @@ -1028,7 +1102,8 @@ const produce = [ }, { foodName: "Potato", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Nightshade", @@ -1039,7 +1114,8 @@ const produce = [ }, { foodName: "Pumpkin", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cucurbita", @@ -1050,7 +1126,8 @@ const produce = [ }, { foodName: "Purple Sprouting Broccoli", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -1061,7 +1138,8 @@ const produce = [ }, { foodName: "Quince", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -1072,7 +1150,8 @@ const produce = [ }, { foodName: "Radicchio", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637893/Seasonal/043-red-cabbage_ztkwae.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Daisy", @@ -1096,7 +1175,8 @@ const produce = [ }, { foodName: "Radish", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637893/Seasonal/044-radish_mchuo6.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -1107,7 +1187,8 @@ const produce = [ }, { foodName: "Raspberry", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637893/Seasonal/045-raspberry_ux5ngf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -1118,7 +1199,8 @@ const produce = [ }, { foodName: "Redcurrant", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637894/Seasonal/046-redcurrant_gq6syn.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Ribes", @@ -1129,7 +1211,8 @@ const produce = [ }, { foodName: "Rhubarb", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Buckwheat", @@ -1140,7 +1223,8 @@ const produce = [ }, { foodName: "Runner Bean", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637894/Seasonal/047-beans_er3cme.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Legume", @@ -1151,7 +1235,8 @@ const produce = [ }, { foodName: "Salmon", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637895/Seasonal/048-salmon_judbg6.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", @@ -1162,7 +1247,8 @@ const produce = [ }, { foodName: "Salsify", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Daisy", @@ -1185,7 +1271,8 @@ const produce = [ }, { foodName: "Sorrel", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637895/Seasonal/049-sorrel_zzzw7z.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "example", @@ -1196,7 +1283,8 @@ const produce = [ }, { foodName: "Spinach", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637895/Seasonal/050-spinach_whzzyi.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Buckwheat", @@ -1207,7 +1295,8 @@ const produce = [ }, { foodName: "Spring Greens", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -1218,7 +1307,8 @@ const produce = [ }, { foodName: "Spring Lamb", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/030-ewe_w2coor.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", @@ -1229,7 +1319,8 @@ const produce = [ }, { foodName: "Spring Onion", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637896/Seasonal/051-spring-onion_eh5trg.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Amaryllis", @@ -1253,7 +1344,8 @@ const produce = [ }, { foodName: "Strawberry", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637897/Seasonal/052-strawberry_pxugsj.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -1264,7 +1356,8 @@ const produce = [ }, { foodName: "Swede", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -1275,7 +1368,8 @@ const produce = [ }, { foodName: "Sweet Potato", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Morning Glory", @@ -1286,7 +1380,8 @@ const produce = [ }, { foodName: "Sweetcorn", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Grass", @@ -1297,7 +1392,8 @@ const produce = [ }, { foodName: "Swiss Chard", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637897/Seasonal/053-chard_p4ydid.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Beet", @@ -1308,7 +1404,8 @@ const produce = [ }, { foodName: "Tayberry", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637890/Seasonal/033-grape_jdq8ux.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "example", @@ -1319,7 +1416,8 @@ const produce = [ }, { foodName: "Tomato", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637880/Seasonal/011-tomato_ighe7m.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -1330,7 +1428,8 @@ const produce = [ }, { foodName: "Tuna", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/028-fish_eqeczk.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie..", family: "Fish", @@ -1341,7 +1440,8 @@ const produce = [ }, { foodName: "Turkey", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", @@ -1352,7 +1452,8 @@ const produce = [ }, { foodName: "Turnip", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -1363,7 +1464,8 @@ const produce = [ }, { foodName: "Venison", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", @@ -1374,7 +1476,8 @@ const produce = [ }, { foodName: "Watercress", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637898/Seasonal/055-watercress_jzk4fu.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -1385,7 +1488,8 @@ const produce = [ }, { foodName: "Watermelon", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/056-watermelon_lpehjq.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cucurbita", @@ -1396,7 +1500,8 @@ const produce = [ }, { foodName: "Whiting", - imageURL: "https://via.placeholder.com/200x200", + imageURL: + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637890/Seasonal/034-mackerel_f8xvhi.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", @@ -1417,4 +1522,4 @@ const produce = [ }, ]; -export default produce; +export default produce; \ No newline at end of file From e90c2f7bfe55ef05ea6a938bbfbed067fce0ac81 Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Tue, 9 Aug 2022 11:23:47 +0100 Subject: [PATCH 45/82] Updated data for August. Co-authored-by: Andy Johnson <103585624+multi-vit@users.noreply.github.com> --- db/data.js | 128 ++++++++++++++++++++++++++--------------------------- 1 file changed, 64 insertions(+), 64 deletions(-) diff --git a/db/data.js b/db/data.js index 59f7131..ad4fe27 100644 --- a/db/data.js +++ b/db/data.js @@ -30,7 +30,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637881/Seasonal/012-apricot_mj99xa.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Apricots are a soft, fragrant stone fruit that range from light yellow to deep orange in colour. Apricot colour isn't always a reliable guide to how it will taste, but try to avoid very pale apricots, or ones with wrinkled or damaged skins. They should feel moderately firm with some give. Their flavour is generally sweet, and sometimes a little tart. Apricots are a good source of fibre and have a high water content. They're a good source of beta carotene, lutein, zeaxanthin, and vitamins C and E. These nutrients can help to promote good eye health. Apricots are great to eat on their own, fresh or baked, or when used in tarts and crumbles. You can also use them to make jams, compotes and chutneys. An alternative to apricots can be peaches or even nectarines. Apricots need a warm climate to thrive, though some variants are able to withstand slightly cooler temperatures. In the summer, most imported apricots on sale come from hot European countries, though can also be shipped from further afield.", family: "Rose", foodType: "Drupe", usedAs: "Fruit", @@ -54,7 +54,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637877/Seasonal/001-aubergine_g9dkiw.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Aubergines are a dark purple berry - though they're functionally used as a vegetable - which are at their cheapest and highest quality in the shops from July to September. They're a good source of fibre, and are also low GI, so won't raise your blood glucose levels. No allergens to aubergine are currently known; they are part of the nightshade family. You can grill, fry, griddle, barbecue and bake aubergines. They're often added to dishes like curries and casseroles. Famous dishes using aubergine include ratatouille and moussaka, and they feature widely in Mediterranean cuisine. They have a mellow flavour that combines well with other ingredients. When grown, they like sunny and warm weather, and do best when grown in a greenhouse in the UK climate.", family: "Nightshade", foodType: "Berry", usedAs: "Vegetable", @@ -66,7 +66,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637877/Seasonal/002-bananas_awomgk.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Bananas are a popular tropical fruit. There are lots of different varieties, but the most popular kind in the UK is the Cavendish. Bananas with small patches of black on their skin are ripe, and can be eaten right away. Bananas with green ends can be ripened at room temperature. Bananas that are green all over are unripe. All bananas are rich in potassium, riboflavin, niacin and fibre, and their high sugar levels mean they can provide a rapid energy boost if eaten as a snack. In addition to being eaten fresh, bananas can be baked into lots of dishes, as well as being baked or fried and served with cream or ice cream. They also make good toppings when sliced for porridge and pancakes. Most bananas won't flower or fruit outdoors in the UK. Some may do so inside a heated greenhouse, but you might find that cropping is infrequent at best.", family: "Musa", foodType: "Berry", usedAs: "Fruit", @@ -91,7 +91,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637884/Seasonal/013-basil_hwolf6.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Basil has a strong, sweet aroma and flavour. It is a herb most strongly associated with Mediterranean cooking, though it does also feature heavily in a lot of Asian cuisines. Mediterranean basil varieties include sweet with large green leaves, Greek, which is peppery in taste with smaller leaves, and purple, which has a milder flavour. Asian varieties include the citrusy lemon basil, Thai, which is like a stronger version of the sweet variety, and holy basil, which is spicy, intense, and best when cooked. Basil has a lot of nutrients, vitamins and minerals. These can be lost somewhat during the drying process. Basil is great for making pesto! Basil will grow all year round, but is at its best in the height of summer. A basil plant will live happily on a sunny windowsill in your house, if you want fresh basil year round.", family: "Mint", foodType: "Herb", usedAs: "Herb", @@ -103,7 +103,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637877/Seasonal/003-beef_sjwsxt.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Beef is the culinary name for meat that comes from cattle. Today, it is one of the most popular meats for human consumption, alongside poultry and pork. There are lots of different cuts of beef which can be used in a wide variety of dishes. While there are health risks associated with over-consuming red meat, beef can also be a really good source of iron, protein, and vitamin B12. Roast beef is a traditional way of serving the meat in the UK. Beef can also be used in curries and tacos, and can also be used in the form of steaks and briskets. The beef industry produces the highest greenhouse gas emissions of any agricultural product, and has a very high environmental impact, being a primary driver of global deforestation.", family: "Meat", foodType: "Meat", usedAs: "Meat", @@ -128,7 +128,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637877/Seasonal/004-beetroot_zeq9bj.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Beetroots are a deep purple root vegetable, which are often sold fresh, pre-cooked, or pickled. They can be eaten raw or cooked, and are popularly used in salads. They are a close relative of chard and spinach, with a good nutritional content. If you don't like pickled beetroots, you might find that you like them roasted, or freshly boiled! Peeled and sliced, beetroot is also a great addition to salads and slaws, or just as a garnish. They can also be used in vegetable smoothies with other foods like carrots. Beetroot generally grows quite well in the UK, with availability that runs from mid-summer through late winter.", family: "Beet", foodType: "Root", usedAs: "Vegetable", @@ -148,7 +148,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637877/Seasonal/005-berry_zflhtr.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "A purplish, black-coloured berry. Very juicy, they can be found growing wild across the UK, and these fruits can be enjoyed straight from the bramble bush or baked into crumbles and pies! Always look for plump, fresh looking berries, avoiding mould or mushy looking fruits. Blackberries are high in fibre and vitamin C. Blackberries are very delicate, so always check when you buy or pick them that the bottom-most layers in your punnets or containers are not getting squashed in transit. Whether served in crumbles, pies, muffins, in jams or compotes, with ice cream, or fresh, they are a versatile and flavoursome fruit. Blackberries and their relatives produce large fruit crops, and cultivated varieties are often a bit easier to control than their wilder relatives. You can grow them along walls and fences, and even in containers for some varieties. You will often be able to find blackberry bushes growing wild in the UK, where they might be referred to as brambles.", family: "Rose", foodType: "Berry", usedAs: "Fruit", @@ -184,7 +184,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637883/Seasonal/014-peas_ck7vlm.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Hardy and adaptable, broad beans are also known as fava beans. They are a great source of protein, carbohydrates, and vitamins A, B1 and B2. Buy broad beans as fresh as possible. Pods should be firm and crisp. Avoid any that feel soft or airy. Broad beans should generally be podded from their velvety jackets before using. You can also double pod the beans - which means to remove the thin skin covering each individual bean inside the pod - by blanching the beans before you pod them. You can also buy podded broad beans frozen. You can also grill broad beans in their pods direct, though be careful biting into them - they can get very hot, and can be hard to chew through! Otherwise, the beans can be puréed with feta or hummus to make dips. You can also use them in risottos, soups and salads. Alternatives include runner beans, French beans, and flat beans. They are at their best from summer through autumn. You can grow trellis and bush varieties, depending on how short you are for space.", family: "Legume", foodType: "Legume", usedAs: "Vegetable", @@ -196,7 +196,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637879/Seasonal/006-broccoli_ehpar1.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Broccoli is a green brassica vegetable which is related to cabbages and cauliflowers. It has tight clusters of deep green buds and thick, edible stems. It was developed from purple sprouting broccoli, and the two variants are quite similar in both taste and nutrition. Go for firm stalks and green plants: yellow broccoli is past its peak. Broccoli deteriorates faster when in contact with the air, so supermarkets often wrap it in cellophane. However, if an unwrapped type looks good in the shops, you can be sure that it has been very recently picked. Broccoli is great when cooked with a drizzle of olive oil or melted butter, though it can also be boiled or steamed. It can be used as a side to things like roast dinners, or added to dishes like pasta bakes. Broccoli is a fast and fairly easy-to-grow crop, ready to harvest in summer and autumn. The sprouting variety is hardy and can overwinter outdoors. It grows best in well-drained, moisture-retentive soil, in full sun or very light shade.", family: "Cabbage", foodType: "Cruciferous", usedAs: "Vegetable", @@ -220,7 +220,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637880/Seasonal/007-cabbage_xqq68l.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "The cabbage family includes a wide variety of different vegetables, from the tightly-packed white, red and green cabbage varieties, to things like pak choi, brussels sprouts and broccoli. Savoy cabbages and Chinese leaf are two very popular varieties that are great to cook with. Cabbage flavours range from savoury to slightly sweet, but all cabbage will smell very pungent if overcooked. Look for cabbages with bright, crisp leaves. Cabbages can be used as a side or in salads and slaws, as well as in things like stir frys and soups, depending on the cabbage variety. Cabbages are fairly easy to grow in the UK, and the many variants means you can often find a type of cabbage to grow or harvest at lots of different times of year.", family: "Cabbage", foodType: "Root", usedAs: "Vegetable", @@ -245,7 +245,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637881/Seasonal/008-carrot_xesp4y.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Carrots are a very versatile root vegetable. They have a sweet flavour, and can be used in a variety of dishes, and can be cooked in many different ways. They are very high in beta-carotene, which is an important nutrient in helping to maintain eye health. Most of the nutrients in carrots are stored just beneath the skin, so if you are peeling your carrots for a recipe, try not to take off too much! Carrots can be cleaned and used raw, either as a snack with hummus or dip, or in things like salads: just slice or grate accordingly. They can also be roasted in things like oil or honey, or boiled, and used as sides to other dishes (popularly in roast dinners). There are a lot of varieties of carrot that you can grow at home, depending on the space available to you. Generally, they can be sown from spring onwards, and harvested all year round.", family: "Carrot", foodType: "Root", usedAs: "Vegetable", @@ -269,7 +269,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637881/Seasonal/009-kale_wuhokp.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "A loose-leafed, dark green cabbage with a tangy and bitter flavour. The aftertaste is sweeter, however. This vegetable originally comes from Tuscany in Italy! When shopping for this vegetable, look for crisp and unblemished leaves with no holes in them. Avoid ones with cores that are split or dry. Cavolo Nero is very versatile, and can be boiled, steamed, put into stir frys, or used raw in salads. An alternative to this food can be loose-leaf cabbage or kale.", family: "Cabbage", foodType: "Cruciferous", usedAs: "Vegetable", @@ -302,7 +302,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637884/Seasonal/015-celery_g1mfru.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "A crunchy stalk vegetable with a high water content that ranges from a darker green to white in colour. Celery has a stronger flavour the darker green it is, and can be eaten raw or cooked. Celery should be tightly-packed and firm for the highest quality, with fresh looking leaves and healthy, even stalks. To use raw in salads, you can cut stalks off from the main base and slice them. Commonly, celery is also chopped and added to soups and stews. For use in stir frys, try slicing them diagonally! If growing celery at home, it is important your soil is moisture-retentive and never dries out. Celery plants will also have to be carefully acclimated to the outdoors after first being established as seedlings. Germination can take some time with celery plants.", family: "Parsley", foodType: "Stem", usedAs: "Vegetable", @@ -334,7 +334,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637885/Seasonal/016-chervil_vtabww.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Chervil is an annual herb that looks like flat leaf parsley. It has finer stems and more delicate leaves, however. It has a faint aniseed flavour, and is used in the French herb mixture fines herbes. Chervil loses its flavour easily when dried or exposed to too much heat, and so is best used fresh, or added at the end of the cooking process. It can go great with chicken and seafood, or as a garnish for steamed baby vegetables.", family: "Parsley", foodType: "Herb", usedAs: "Herb", @@ -394,7 +394,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637886/Seasonal/017-courgette_x1jmsl.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Courgettes are a very popular vegetable from the squash family, making them relatives of foods like cucumbers and melons. It is versatile and easy to cook. They have a deep green skin and firm, pale flesh, and are also known as zucchini in some places. Courgettes do not need to be peeled to be used. Just slice off each end of the courgette, and prepare as your recipe directs. In addition to being cooked, they can also be sliced thinly and used raw. Boiling courgettes can make them mushy, so it is usually best to fry them. You can roast them until tender and lightly golden, or marinate them, before barbecuing or griddling them instead. They are great in stir frys and curries, but can also be used in ratatouille, or as fritters. Courgettes are easy to grow and crop often, but do need a good bit of space, so might not be suitable for everybody to try growing at home, depending on available room.", family: "Cucurbita", foodType: "Gourd", usedAs: "Vegetable", @@ -406,7 +406,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637886/Seasonal/017-courgette_x1jmsl.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Courgette flower is the edible flower of the courgette bush. There are two kinds of flower: the flower with an immature vegetable attached is the female, and the flower on the long stalk is the male. The male flowers are the ones generally sold in bunches for cooking. They are in season over the summer and can be hard to find in supermarkets. Try a local greengrocer instead if you are struggling in the bigger shops. Ideally, use courgette flowers as soon as possible after picking or purchasing, as the flowers begin to close up after a few hours, and should be used within three days maximum. To cook them, try stuffing the flowers with herbs and cheese before frying briefly. You can also lightly batter and deep fry them, or toss in olive oil until just wilted to use in risottos. The flowers go best with cream, cheese, pancetta, pasta and batter. They are often used in Italian cooking.", family: "Cucurbita", foodType: "Gourd", usedAs: "Vegetable", @@ -418,7 +418,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637885/Seasonal/018-crab_oxn7ew.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Crabs are crustaceans with hard exoskeletons and soft, succulent flesh. The most commonly eaten kind in the UK is the common edible brown crab. Female crabs have sweeter flesh than males when cooked. Crabs should feel heavy, but you should not be able to hear any liquid sloshing inside the exoskeleton. If you prefer white meat, buy a male crab. You can also buy live crabs if shopping at a fishmonger. If preparing live crabs, it is important to do so humanely. It is considered most humane to place crabs in a freezer for at least two hours before cooking, as they will become comatose and die. However, this is only considered humane if done quickly in a large freezer at a temperature of at least -18 C. The most common method used in restaurants - piercing underneath the crab's abdominal flap with a knife - should only be done by trained professionals. The procedure should take no more than ten seconds, and must only be carried out after the crab has been desensitised by chilling. To cook, remove the crab from the freezer and plunge into a pan of boiling salted water. Return to the boil and cook for thirty minutes per kilogram of weight. Cool rapidly before dressing. Always make sure you remove the grey gills from the crab, as these are very tough and cannot be digested.", family: "Fish", foodType: "Fish", usedAs: "Fish", @@ -439,7 +439,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/019-apple_zxjdqm.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Crab apples are tiny, sour apples that grow both wild and as cultivated plants. Several varieties grow in the UK, as well as on other continents. Some crab apples are green, some are yellow, some are a very bright red! Generally, they are too sour or astringent to eat raw. However, cooked with lots of sugar, they can make crab apple jelly or crab apple butter. They can also be roasted whole alongside meat. Once the sourness has been masked, they have a very strong apple flavour. They can also be used to make verjuice, which is a tart liquid that can be used instead of vinegar. For a readily available source of crab apples, you are probably going to need access to a tree, whether that is one growing wild or one you have cultivated. Crab apple trees are quite compact, and so can suit smaller gardens well.", family: "Rose", foodType: "Pome", usedAs: "Fruit", @@ -499,7 +499,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637877/Seasonal/020-berries_pw9fzh.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Elderberries are considered dangerous to eat raw or undercooked, so avoid putting them into muffins or apple pies, as they might not cook enough to be safe. However, their flavour also reduces when cooked, so they might not repay the effort it takes to harvest and prepare them in the way that other fruits can. However, they do have a beautiful colour, and so adding them to long-cooked recipes like chutneys, pickles, ketchups, sauces and jams can make for appealing dishes. Too many added can create a bitter flavour, however. Their bitterness can be improved by the addition of sweet spices like cinnamon and nutmeg, and they are great when used to make things like spiced and aged wines. Elderberries are in season and ready for picking from August through October. The juice stains very badly, so if you are going harvesting, maybe bring gloves, and remove the stalks!", family: "Sambucus", foodType: "Berry", usedAs: "Fruit", @@ -511,8 +511,8 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637880/Seasonal/021-fennel_uqqf6p.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", - family: "example", + "Fennel bulb has a strong aniseed flavour that can inspire mixed reactions from people. It has a bulb-like shape that looks similar to celery, with a heavier bottom. When eaten raw, the texture is very crisp and the flavour is strong. Cooked, it mellows out more, and becomes softer. To use fennel in cooking, slice very thinly if using raw. Alternatively, boil or steam - up to twenty minutes for a whole head, or twelve minutes for wedges - or roast for about forty minutes. The younger, smaller bulbs will be more tender. Fennel should feel heavy for its size, and be white with no blemishes. The feathery green tops should be fresh and bright. Avoid plants that have any yellowing to them. Great fennel recipes include fennel gratin and barbecued fennel, as well as fennel risotto. Fennel is at the height of its season from June through until September. Fennel is fairly easy to grow, and prefers well-drained soil and lots of sun.", + family: "Carrot", foodType: "Stem", usedAs: "Vegetable", month: ["June", "July", "August", "September"], @@ -523,7 +523,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637882/Seasonal/022-figs_jj1ssf.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Figs are a fruit with a delicate aroma and a sweet flavour. Originally from Asia, they are now grown across the Mediterranean and there are hundreds of different kinds. They can be grouped into four main colours: white, green, red, and purple/black. Figs have an oval or squat square shape, and thin skin that encloses hundreds of seeds, held in a succulent flesh. Figs are very delicate and need gentle, careful handling, though you can also buy them dried. When shopping for fresh figs, go for plump fruits that feel soft, but not too liquid. Avoid fruits with bruises or splits. At their ripest, they will have a faint bloom. If they smell sour, however, they are past their peak. Figs are best eaten at room temperature, so leave them out of the fridge for an hour before you eat them. Figs perish quickly, so make sure to eat within a day or two of buying them! Figs - dried and fresh - are great as a snack, or when used in baking. You can eat them raw, drizzled with honey, toasted nuts and cream, or use them in salads with goat's cheese, rocket and ham. You can also grill them, roast them whole, or poach them. They do not need cooking for very long!", family: "Parsley", foodType: "Berry", usedAs: "Fruit", @@ -535,7 +535,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637882/Seasonal/023-garlic_tszkk7.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Garlic is a member of the allium family and comes in all shapes and sizes, though generally speaking, the smaller the bulb, the stronger the flavour. Garlic is mainly available in a dried form all year round, but fresh garlic, also known as wet or green garlic, which has a milder flavour, can also be found in some stores when in season between July and October. Garlic is most often seen in Mediterranean and Asian cookery, but is one of the most versatile ingredients for cooking with and can be used to enhance most dishes. Use dried garlic raw in dressings, salsas and butters, roast whole bulbs or separate cloves to serve with roast meat or fry to use as the base for casseroles, soups and sauces. Although garlic is a Mediterranean plant, its hardneck varieties are hardier and therefore easier to grow in the colder UK climate. Grow it in a warm, sunny spot in well-drained soil that does not get too wet in winter. Can be grown in a large container if you are stuck for garden space.", family: "Amaryllis", foodType: "Herb", usedAs: "Herb", @@ -547,7 +547,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637883/Seasonal/024-artichoke_rh8u1h.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "The globe artichoke bears no relation to the tuber-like Jerusalem artichoke, and is considered to be the true artichoke. The tender ends of its leaves and the bas, known as the heart, of the bud are both edible, but the tough outside leaves and furry central choke are not. Globe artichokes are considered a superfood as they are rich in fibre, vitamins and antioxidants. Artichokes make great starters or side dishes. Boil or steam the whole head, scoop out the choke and stuff with garlic and parsley, cheese and bread crumbs then bake in the oven. Alternatively, boil the entire head then pull the leaves off and dip them in a sauce or butter, pulling the leaf through your teeth to remove the tender flesh before discarding the rest. Artichokes like a warm, sunny spot and are best grown in rich, moist (but free-draining) soil. Cover them with a mulch to protect them during cold winter weather and also during spring when the soil is warm and moist.", family: "Daisy", foodType: "Root", usedAs: "Vegetable", @@ -571,7 +571,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637883/Seasonal/025-gooseberry_n0c9xl.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Gooseberries have been a popular British fruit since Elizabethan times and are related to the blackcurrant. They come in many varieties, some tart and some sweeter. Gooseberries are a particularly good source of vitamin C but contain many other vitamins and nutrients. Gooseberries are best used for cooking, but certain varieties can be eaten raw. They are great in crumbles or pies or made into jam, but can also be poached then pureed to make gooseberry fool, ice cream or a savoury sauce for rich roasting joints like pork or goose. Plant them in well fertilised soil over the winter when plants are dormant. Gooseberries thrive in full sunshine but can take a couple of years to crop.", family: "Ribes", foodType: "Berry", usedAs: "Fruit", @@ -595,7 +595,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/026-chicken_xt4kgm.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Grouse is considered the greatest of all game birds and the first day of grouse shooting season, 12th August, is named The Glorious Twelfth and was established by the Game Act in 1831. Grouse is native to Scotland but can be found elsewhere in the UK. Grouse has twice the protein and less than a third of the fat of chicken and is also high in vitamin B and iron. Known for its rich, gamey flavour and distinctive red colour, Grouse are quite small meaning that one bird is enough for one person. The younger the bird, the better the flesh so young birds are best roasted, while older birds are better used in casseroles. To prepare it, remove the wishbone and pull back the skin from the neck to expose the entrance. Cut round it with a sharp knife and snip the bone free at the bottom, then cut the grouse's wings and legs at the second joint. Wipe the cavity and outside of the bird, season inside and push in any desired flavourings, then tie the legs together and season the skin. You can also wrap the breast with pancetta or ham to prevent it drying out.", family: "Meat", foodType: "Fowl", usedAs: "Meat", @@ -619,7 +619,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/027-halibut_wagn5i.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Halibut is the largest flatfish in the ocean and in the UK, mainly lives in the freezing cold waters off the coast of northern Scotland, although it is also occasionally found around Northern Ireland. Halibut is a delicious white-fleshed fish with a firm, meaty texture and like most fish it is high in protein, omega 3 and many vitamins and minerals. Atlantic halibut is an endangered species so consider buying from a reputable fishmonger who sources fish from sustainable stocks, or look for farmed or line-caught North Pacific halibut that has been certified. Steaks from the middle of the fish are best as the tail is full of bones and Halibut can be enjoyed baked, poached or pan fried as the main meat of your dish or flaked and used in fish pie. Halibut has a tendency to dry out quickly when cooking so steaks and fillets should be cooked with wine or stock to retain moisture.", family: "Fish", foodType: "Fish", usedAs: "Fish", @@ -655,7 +655,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637890/Seasonal/034-mackerel_f8xvhi.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "A kipper is a fat herring that has been split in a butterfly shape and cured by salting or brining before being cold smoked. Herrings are one of the most abundant fish species in the world and so are a good choice for those conscious of eating sustainable foods. Like most fish it is high in protein, omega 3 and many vitamins and minerals. Traditionally pale golden, beware of processed kippers that are artificially coloured and flavoured, with a black lining in the stomach cavity, which indicates they are likely to have been made out of season as they will have only recently spawned. Kippers require minimal cooking and are commonly poached for a few minutes. If you prefer a stronger flavour then you may consider grilling your kipper but this is only recommended if you have a well-ventilated kitchen due to the extremely strong smell!", family: "Fish", foodType: "Fish", usedAs: "Fish", @@ -667,7 +667,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/029-kohlrabi_nwtzii.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Kohlrabi looks like a sputnik in vegetable form and is part of the cabbage family. Its name translates from German to turnip cabbage. It has a mild, sweet flavour with a crisp, crunchy texture and can be found in two colours, the more common pale green as well as purple. Kohlrabi is an excellent source of vitamin C and a good source of fibre, vitamin b6 and potassium. You can cook and use the leaves of Kohlrabi like cabbage but the bulb is much more versatile and can be used in salads in a similar way to carrot or broccoli or roasted, steamed or stir fried and used as wedges, noodles or diced. Kohlrabi is more drought resistant than most brassicas and the purple varieties are hardier than green. It thrives in a sunny area in light, fertile and free-draining soil. Sow little and often for a constant supply. In cooler areas and where the soil is heavy clay, make early sowings indoors and transplant outdoors when hardier and the soil has warmed up. Harvest when young, between golf and tennis ball sized, as if you leave them too long they lose their flavour and tenderness.", family: "Cabbage", foodType: "Root", usedAs: "Vegetable", @@ -679,7 +679,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/030-ewe_w2coor.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Lamb is the culinary name for meat which comes from a sheep that is under one year old. When between one and two years old it is sold as hogget and anything over two years old is called mutton, which has a lot more flavour but also tougher flesh that will need slow cooking to tenderise it. The older a lamb, the deeper the colour of its meat. While there are health risks associated with over-consuming red meat, lamb can also be a really good source of iron, protein, and vitamin B12. A versatile meat that is used for more than just roasting, lamb is popularly used in shepherd's pie, curries, moussaka and as kebabs. For quick cooking, choose fillets, steaks and chops and for slow cooking, among the best options are leg, shoulder, shank and neck joints. If it is not homegrown, imported lamb is considered to have the highest carbon footprint of all meats and has very high greenhouse gas emissions regardless of where it is farmed.", family: "Meat", foodType: "Meat", usedAs: "Meat", @@ -704,7 +704,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637889/Seasonal/031-greens_rsygez.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Also known as corn salad or cat grass, lamb's lettuce has a distinctive, tangy flavour and is known for its long spoon-shaped leaves. Its unusual name allegedly comes from the lettuce's similarity to the size and shape of a lamb's tongue. Lamb's lettuce is an excellent source of vitamin A but is also high in vitamin C, E, K and B6 as well as many minerals. Lamb's lettuce is best used as a main ingredient in salads or cooked and served as a side vegetable. Be sure to wash and drain thoroughly before use it can be grainy and gritty. It is quickly perishable and should be used within two days of purchase. Lamb's lettuce thrives in moist soils and cold temperatures so plant them in a shady spot. They do not tolerate drought well so keep them well-watered. To avoid a glut, you should sow little and often.", family: "Honeysuckle", foodType: "Leaf", usedAs: "Vegetable", @@ -756,7 +756,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637889/Seasonal/032-lettuce_k50llo.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Lettuce comes in a huge number of varieties, but are usually either crisp such as iceberg, cos and romaine or floppy such as little gem, butterhead and round. Most have green leaves, although some with red tinges and they all have a delicate, clean flavour. Lettuce is an excellent source of vitamin A as well as being high in minerals and antioxidants. Lettuce is mainly eaten raw in salads, but can also be shredded and added to soups towards the end of cooking or braised and served on the side along with other vegetables. Crisp varieties can also be grilled. Grow lettuces in full sun in moisture-retentive soil, but if it's very hot the lettuces will need shade. It will also need protecting from the cold if sowing early or late. Crisp varieties tend to be hardier but floppy varieties produce less dense growth and so are ideal for growing in small spaces and containers.", family: "Daisy", foodType: "Leaf", usedAs: "Vegetable", @@ -777,7 +777,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637890/Seasonal/033-grape_jdq8ux.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "This summer berry was allegedly developed by accident in 1881 when an amateur plant breeder, named James Logan, planted two blackberries next to an old raspberry plant. The loganberry is a pointed cone shape, bigger than a raspberry and varies in colour from red to purple depending on ripeness. They have a firmer texture and sharper taste than other soft fruits. An excellent source of vitamin C, loganberries were once used by the British navy to prevent scurvy. This also means they can last a long time after being picked, especially if refrigerated. Loganberries can be eaten raw, made into jams and jellies, used in pies and pastries or as sauces for game and duck. They are also popularly used for cider vinegar, vodka, gin or brandy. Rarely seen in shops due to being hard to mechanically harvest, loganberries need a sunny spot in well-drained soil. They can take a year or two to establish and should be kept well watered in their first growing season. They are large plants so will need plenty of space and training against a fence or wall.", family: "Rose", foodType: "Berry", usedAs: "Fruit", @@ -789,7 +789,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637890/Seasonal/034-mackerel_f8xvhi.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Mackerel is a silver-coloured, torpedo-shaped fish with firm flesh. Found around the UK, it is particularly abundant around Scotland. It has received a sustainability certification, making it an ethical choice. Well known for being oily, mackerel is an excellent source of omega-3 fatty acids, protein and vitamins B and D. The flesh of mackerel can spoil easily, particularly in warmer temperatures and so it should be eaten on the day of capture unless preserved, such as salted or smoked. Mackerel is most popularly cooked on a barbecue or grill as it is robust and meaty and holds its form well. It can also be roasted and is typically paired with strong, fragrant flavours such as chilli, garlic or lemongrass. It can also be flaked for use in salads, sandwiches or as fishcakes.", family: "Fish", foodType: "Fish", usedAs: "Fish", @@ -801,7 +801,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637883/Seasonal/014-peas_ck7vlm.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Also known as snow pea or sugar pea, mangetout is a type of garden pea that is picked whilst it is still young, so that the pod is still flat and the peas have barely developed. A sugar snap pea is more fully developed, but the pod can still be eaten. Mangetout literally translates from French as eat all! With a crisp and sweet flavour, mangetout can be enjoyed raw and is very popular in stir frys. If used as a side vegetable it should only be lightly steamed or boiled and will not need as long as most other vegetables. Mangetout should be grown in full sun or partial shade, but will do well in most soil types and their size means they can be grown in containers. They need little fertilisation, but keep them well watered.", family: "Legume", foodType: "Legume", usedAs: "Vegetable", @@ -813,7 +813,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637890/Seasonal/035-marrow_hmofph.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Marrow is simply a courgette that has been left on the plant to grow a little longer. Deep green in colour, it has a firm, pale flesh and mild flavour. Size does matter with marrows and smaller marrows, which should be no bigger than your forearm, actually taste better. Large marrows will taste bitter and have a watery consistency and are best reserved for your local produce competition! Marrow has all the versatility of the courgette and can be used in the same way, but are traditionally stuffed with various fillings or mashed into savoury dishes. More unusually, marrow can make a great chutney for your cheeseboard or grated into cakes! Marrows are best started off indoors but can get very large so are not suitable for all growers depending on space. They need a warm, sunny position away from cold winds and thrive in rich, moisture-retentive soil. They are thirsty plants so will need regular watering.", family: "Cucurbita", foodType: "Gourd", usedAs: "Vegetable", @@ -825,7 +825,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637890/Seasonal/036-mint_umqpfz.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Mint comes in several types, each with their own slightly different flavour and appearance. The two main types are spearmint, which is most commonly used to make mint sauce or jelly and also in tea, and peppermint, which is more popular in sweets and confectionery. Although often consumed in small quantities, mint leaves are rich in vitamins A, C, D and E as well as minerals such as phosphorus. For cooking, mint can be very versatile and is used in sauces, teas, fruit salads, stuffings and Thai dishes such as soups and curries. It can aid digestion and help reduce nausea and outside of cooking, mint is used as a herbal remedy for congestion, allergies and asthma due to its antibacterial and antiinflammatory properties. It is also used for aromatherapy treatments. Mint should be grown in moist, well-drained soil in full sun or partial shade. It is best grown in pots as most varieties are invasive, but this makes it ideal for growers with limited space. If you have a glut then it can be frozen with no added water needed.", family: "Mint", foodType: "Herb", usedAs: "Herb", @@ -849,7 +849,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637880/Seasonal/010-nectarine_vtqysg.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Nectarines are a smooth-skinned stone fruit which come in light pink, yellow and white, and are delicate and sweet. They are similar to peaches, though a little more acidic. They are particularly high in vitamins A, B and C. Nectarines do not ripen after being picked, so make sure to buy fruits that are already ripe. Fruits should feel firm, with a slight give. Avoid any greenish colour fruits, or ones that have damaged or broken skin. Nectarines can be eaten raw, and are often also used in desserts like crumbles, tarts, and crisps. They are also great when poached, though be careful, as overcooking nectarines can impact their flavour and texture. Although hardy in most parts of the UK, nectarines suffer in frost, so take care to choose a sheltered location when planting nectarine trees, or else grow them in moveable pots.", family: "Citrus", foodType: "Citrus", usedAs: "Fruit", @@ -873,7 +873,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637891/Seasonal/037-onion_tzbdx9.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Onions are a versatile, widely used, and essential ingredient in endless recipes. There are a wide variety of onions - from strong yellow onions, to milder red onions, to delicate shallots, to leafy spring onions - and all add great depth of flavour to savoury dishes. Onions contain compounds that can help the body fight inflammation, and they are nutrient-rich. When buying or choosing onions, generally you will want to look for a vegetable with no soft spots or patches of damage. As an alternative to onions, you could also try leeks in recipes! There are innumerable ways to use onions, from salads to chutneys, onion rings to gravy stock, or even serving stuffed or as additions to meals like quiches. White, yellow and brown onions are great all-purpose onions for cooking, though you might not want to use them raw, unless you are looking for a particularly strong onion flavour in your salads. Red onions are sweeter and milder, and generally are more suited to salads, marinades, salsas and roasts. Onions are cold-weather crops, and generally you will want to start sowing them - indoors or outdoors - around late winter and early spring. They will be ready to harvest around late summer or early autumn.", family: "Amaryllis", foodType: "Allium", usedAs: "Vegetable", @@ -931,7 +931,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637891/Seasonal/038-pak-choi_ujodbb.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "A leafy member of the cabbage family, pak choi - also known as bok choy or Chinese celery cabbage - makes for a great addition to stir frys and noodles. The flavour is somewhere between mild cabbage and spinach, and while it can be eaten raw when young, pak choi is often at its best when briefly cooked in recipes. Three main cooking methods for this vegetable include stir frying, steaming, and simmering in water. None of these cooking methods should ever take more than a couple of minutes! Steamed pak choi is great when served with fish, but can also really suit soups, and a variety of other noodle dishes, broths, and stir frys. Try to choose pak choi with unblemished, firm stalks, and healthy looking leaves. Smaller vegetables tend to be more tender. A few alternatives to pak choi might be cabbage or spinach.", family: "Cabbage", foodType: "Leaf", usedAs: "Vegetable", @@ -976,7 +976,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637892/Seasonal/039-peach_tjw63g.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "A velvety-skinned stone fruit, peaches are juicy, sweet and fragrant. They generally have red skin and yellow flesh, though there are white varieties which are more pink in colour. The most common type of peach is spherical in shape and about the size of a tennis ball, though you can find disc-shaped varieties too! Ripe peaches should smell fragrant, and will be yellow around their stems. They will feel firm, but will yield slightly if squeezed. Avoid peaches that feel hard or look bruised. Underripe peaches will soften if stored at room temperature, but their taste won't get much sweeter. If you cut peaches for a raw snack, but aren't going to eat them right away, brush the exposed flesh with lemon juice to prevent browning. Peaches can be eaten raw and added to fruit salads, pavlovas and trifles. They can also be poached or halved and roasted, and served with cream or ice cream too. An alternative to peaches is nectarines.", family: "Rose", foodType: "Drupe", usedAs: "Fruit", @@ -1000,7 +1000,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637883/Seasonal/014-peas_ck7vlm.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "A type of legume, peas grow inside of long pods. As with all legumes, their sugars turn to starch shortly after picking, so they are best eaten after just being picked. Frozen peas are put on ice within three hours of being picked, and their flavour can often be superior to that of fresh peas harvested days previously. Peas are a good source of plant-based protein. They also have a low glycemic index, so can be a good food option if you are keeping an eye on your blood sugar. Legumes are a common allergen, however, so be cautious if you have been diagnosed with a legume allergy. To cook, peas can be boiled or steamed. They don't need very long in the water, and try not to add salt, as this can make them toughen up. A little sugar will bring out their sweetness! Alternatives to peas include mangetout and broad beans.", family: "Legume", foodType: "Legume", usedAs: "Vegetable", @@ -1022,7 +1022,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637892/Seasonal/040-peppers_gplnan.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Also known as bell peppers, sweet peppers, or by their colours - for example, red peppers, yellow peppers, and green peppers. They are a non-hot member of the family that includes all chilli peppers, and vary hugely in size, shape, flavour, and heat content. Green peppers are the unripe state of red peppers, and are more acidic, vegetal and bitter, though these aspects soften when the peppers are cooked. Red, ripe peppers are sweeter and more gentle in flavour. Yellow and orange peppers are separate, individual varieties of peppers, which were specifically bred for their sweet and gentle flavours. Peppers have a very long life, especially when refrigerated. You can tell if a pepper is ageing by checking for signs of puckering on the skin around the stalks. Peppers are great to eat raw, either sliced as a snack, or included in dishes like salads. They can also be cooked into a variety of recipes, and are great stuffed with cheese and other vegetables too. Just make sure when using peppers that you remove the inner, pale membrane, as this part tastes quite bitter.", family: "Nightshade", foodType: "Berry", usedAs: "Vegetable", @@ -1055,7 +1055,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637893/Seasonal/041-pomegranate_xepy6o.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Mainly grown in America, Spain, the Middle East and India, pomegranates originate from the area from Northern India to Iran. They are round with a hard, shiny skin that is often red and sometimes yellow. Inside, their edible white seeds are contained within juicy, ruby-coloured sacs. These sacs are packed in a bitter, pale pith which should not be eaten, and should be peeled away. Look for pomegranates with shiny, solid skin, and avoid any with soft patches. The pomegranates that feel heavy for their size are generally the juiciest ones. Pomegranates can be enjoyed on their own, though they are also often used to decorate and add flavour to a variety of other dishes. They go well with salads, cheeses, duck, fish, chicken and pork. Some pomegranates can be hardy, and it can be possible to grow them in the UK. However, it will take some work to make sure they survive in more northern areas, or during colder months, and they might not fruit as well as hoped in our climate. If buying imported pomegranates, try to buy ones shipped from countries closer to home if possible, as the ecological footprint of getting these to our supermarkets will generally be lower.", family: "Punica", foodType: "Berry", usedAs: "Fruit", @@ -1080,7 +1080,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637893/Seasonal/042-pork_kzmixj.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Pork is a versatile meat, which is tender when cooked correctly, and has a lot of flavour. It is often thought of as a fatty meat, but the fat that pork contains is less saturated than that found in other meats. It is also high in protein, and is a good source of iron, zinc, and B vitamins. When buying pork, look for firm, pale pink flesh, which is damp but not oily. Avoid pork with yellow coloured fat, and look for white fat instead. Trim excess fat from the meat when preparing to cook it. Most cuts of pork can be roasted, baked or grilled, and other cooking methods include pan-frying, stir-frying, stewing and griddling. Hocks and trotters should be boiled to soften the connective tissues. They can then be stuffed and roasted as desired.", family: "Meat", foodType: "Meat", usedAs: "Meat", @@ -1153,7 +1153,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637893/Seasonal/043-red-cabbage_ztkwae.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Radicchio is a forced crop with red and white leaves, and is a relative of the chicory. Its colour depends on how much light it has been exposed to while growing: the more light the plant has seen, the gentler the difference between the red and white areas. Radicchio is shaped like a small cabbage and is most commonly used in salads. It has a bitter flavour that contrasts well with milder leaves, like rocket. The leaves are tender, but a whole head is sturdy enough to be cut and grilled. When buying radicchio, look for crisp leaves with no wilting. Radicchio can be grown year round. An alternative to try might be chicory.", family: "Daisy", foodType: "Leaf", usedAs: "Vegetable", @@ -1178,7 +1178,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637893/Seasonal/044-radish_mchuo6.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Radishes are a crunchy, peppery root vegetable. They are a member of the mustard family, and one of the most popular varieties of radish that you might have seen include the cherry-sized common variety, which has red skin and white flesh. Black radishes are more strongly flavoured, and there are also milder, larger varieties of radish too. Radishes are rich in folic acid and potassium. They are also a good source of vitamin B6, magnesium, and calcium. Look for firm-skinned radishes with no blemishes when shopping. Always make sure to prepare radishes just before using them, as they lose their strength when cut. Common radishes are generally used in salads, though you might also find use for mooki or daikon radishes in stir-frys. British radish season runs from May through October. They are very easy to grow from seed, and can grow in small spaces, if you are limited in where you can garden.", family: "Cabbage", foodType: "Root", usedAs: "Vegetable", @@ -1190,7 +1190,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637893/Seasonal/045-raspberry_ux5ngf.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Raspberries are an intense, usually red berry with a sweet taste that are widely used in a lot of recipes. They grow well in cool and damp climates, and some lesser known varieties can come in colours like black, yellow, and gold. Look for bright, evenly-coloured, and non-mushy berries when shopping. If you are buying a punnet, make sure that the bottom layer of berries has not been crushed by the ones above it. Raspberries pair well with other fruits and other berries, especially in desserts like crumbles and pies, or alongside things like ice cream. They are also good in jams, tarts, cheesecakes and trifles, and you can use them to make coulis, sauces for game, or to flavour white wine vinegar. They are in season from late June to early September. If you have a garden or an allotment, raspberries are quite easy to grow in British climates. ", family: "Rose", foodType: "Berry", usedAs: "Fruit", @@ -1202,7 +1202,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637894/Seasonal/046-redcurrant_gq6syn.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Redcurrants are shiny red berries that grow low on bushes. Their flavour can be tart, but they are still consumable raw, though you might want to add some sugar! They have a high vitamin C content and pair well with other berries. They also go well with goose, venison and lamb. Traditionally, redcurrants are turned into redcurrant jelly, which makes for a great accompaniment to meat. To poach redcurrants, make sure they are only in the water for about four or five minutes, or until starting to burst. You can also use them to make mousses and sorbets. Do not wash them before storing in the fridge, as they will go soggy. You can freeze them though, for later use! They are in season from July through early September generally.", family: "Ribes", foodType: "Berry", usedAs: "Fruit", @@ -1226,7 +1226,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637894/Seasonal/047-beans_er3cme.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Runner beans are a vegetable that originally hails from South America, though they are popularly grown in British gardens. They are stronger in flavour and more coarse than green beans, are longer, and contain purple beans! You will want to use them as soon as possible after buying or picking, as their freshness does not keep for very long. Look for beans which are bright and crisp with firm, fresh-looking pods. To cook, boil runner beans until al dente, so as to be still firm when bitten into. They make a great side to a lot of meals, and can also be added to things like pasta, curries and paella.", family: "Legume", foodType: "Legume", usedAs: "Vegetable", @@ -1238,7 +1238,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637895/Seasonal/048-salmon_judbg6.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Salmon is a fish that is considered “anadromous” which means they live in both fresh and saltwater. They are born in freshwater where they spend a few months to a few years (depending on the species) before moving out to the ocean. Salmon is very low in saturated fat and a good source of protein. It's also one of the best sources of vitamin B12. This fish is bursting in potassium and other nutrients like iron and vitamin D. Salmon is a mild-flavoured fish with a rich and slightly oily taste to it. Baked, grilled, and poached salmon will often taste citrusy and buttery, along with whatever accompanying flavours were added to the dish. Smoked salmon tastes smokey and subtly fishy, and canned salmon can often be oily. The aquatic habitats of the five species of salmon include streams, lakes, rivers, estuaries, marine foreshore areas, and the North Pacific Ocean.", family: "Fish", foodType: "Fish", usedAs: "Fish", @@ -1262,7 +1262,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659690222/Seasonal/58-rosemary_tagkf0.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Samphire is a salty marine vegetable and is delicious when cooked in butter and added to seafood and pasta dishes. Although there are two types of samphire, marsh and rock. Only marsh samphire is widely available fresh. Samphire is known to be nutritionally valuable and has a wide range of benefits that may include its ability to detoxify the body, aid in digestion, protect the immune system, aid weight loss, induce sleep, and boost circulation. Marsh samphire has vibrant green stalks, similar to baby asparagus, with a distinctively crisp and salty taste. It can be used raw in salad, though it tends to be very salty, so is more often boiled or steamed for a few minutes. Samphire prefers a warm sunny position if it can find it, which makes a greenhouse the perfect environment for it to thrive. A greenhouse also provides ample protection from cold, harsh weather conditions including frost.", family: "Parsley", foodType: "Leaf", usedAs: "Vegetable", @@ -1274,7 +1274,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637895/Seasonal/049-sorrel_zzzw7z.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Sorrel is also referred to as spinach dock and is a plant known for its tart taste and powerful health benefits. This vibrant leafy green and its fruit are used to add a sharp, citrusy flavour to soups, sauces, salads, and beverages. Sorrel is a good source of Vitamin A and C and has been used to reduce inflammation. It is also an ingredient in the herbal cancer treatment Essiac. However, it shouldn't be eaten in large quantities as it contains a high amount of oxalic acid. Sorrel is a leafy herb, like parsley or basil or mint, that can be chopped up to use in marinades and dressings, or stirred into soups or casseroles for a bit of fresh flavour. Sorrel thrives in a sunny or partially-shady spot, in fertile and moisture-retentive soil. It can be grown from seed, but as a perennial plant, you could also take a rooted cutting or a division from an existing plant. Sow sorrel seeds in spring, a few in small pots filled with seed compost, cover and water well.", family: "example", foodType: "Leaf", usedAs: "Vegetable", @@ -1286,7 +1286,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637895/Seasonal/050-spinach_whzzyi.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Spinach is a leafy green vegetable that originated in Persia. It belongs to the amaranth family and is related to beets and quinoa. If you're interested in its health-boosting potential, spinach is an easy food to add to your diet. Spinach is rich in many nutrients, including Vitamin A, Vitamin C, Vitamin K, iron, folate, and potassium. Spinach is chock full of fibre too. Spinach may decrease oxidative stress, improve eye health, and help prevent heart disease and cancer. There are three popular ways to cook Spinach: steaming, sauteing and blanching. Either way, this nutrient-dense leafy green vegetable cooks in just minutes for a fast side dish or versatile ingredient. Winter spinach cultivars need a sunny position; summer spinach varieties are better in partial shade so are among the easiest vegetables to grow in shade. Once you've harvested your spinach, all you need to do is water it and wait patiently for the next harvest. Spinach leaves will regrow in just a matter of days.", family: "Buckwheat", foodType: "Leaf", usedAs: "Vegetable", @@ -1322,7 +1322,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637896/Seasonal/051-spring-onion_eh5trg.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Also known as scallions or green onions, spring onions are in fact very young onions, harvested before the bulb has had a chance to swell. Both the long, slender green tops and the small white bulb are edible, and are good either raw or cooked. They have a similar flavour to onions, but are much milder. Spring Onions have antibacterial and antiviral properties, aid digestion and lower blood sugar levels. They are good for your eyes, heart and will generally boost immunity. They can be sliced and eaten raw and crunchy, or cooked. Spring Onions are often thinly sliced and added to salads. Spring onions are easy to grow from seed and will grow in any fertile, well-drained soil, in full sun. For a continual harvest of spring onions in summer, sow at three-week intervals from March to August. To grow spring onions over winter, sow in September and harvest in spring.", family: "Amaryllis", foodType: "Allium", usedAs: "Vegetable", @@ -1347,7 +1347,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637897/Seasonal/052-strawberry_pxugsj.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "A popular sweet, juicy seasonal berry enjoyed in cuisines around the world. But Botanically, the strawberry fruit is considered an “accessory fruit” and is not a true berry. Strawberries are actually a group of fruits (genus Fragaria) containing several varieties and are part of the rose family. Strawberries are usually sweet with a firm and juicy but not tough flesh. The tiny seeds add a light crunch. Flavour, colour, size, and texture can vary depending on the variety of strawberry. They are an excellent source of vitamin C and manganese and also contain decent amounts of folate (vitamin B9) and potassium. The now-common garden strawberry didn't hit its stride until the 18th century, but local wild berries have been eaten since ancient Roman times. Modern strawberries are grown and eaten all over the world and can be served raw, cooked, or dried. Strawberries like fertile, well-drained, slightly acidic soil, and do best in full sun, but will tolerate some shade. Avoid planting in sites prone to frost, which can damage the flowers, or in exposed locations, which make it hard for pollinating insects to reach the flowers.", family: "Rose", foodType: "Berry", usedAs: "Fruit", @@ -1395,7 +1395,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637897/Seasonal/053-chard_p4ydid.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Swiss Chard, or leaf beet, is an attractive vegetable, with leaf stalks in an array of bright colours. The stalks -- which can be white, yellow, red, purple, pink, striped and so on -- resemble flat celery with a sweet taste slightly reminiscent of beets. Swiss chard contains vitamin K, vitamin A and is also a good source of magnesium which helps keep your muscles, bones and nerves healthy. Young leaves can be eaten raw in salads, while larger leaves are delicious cooked. The large, firm leaves are mild, sweet, earthy and just slightly bitter; on the whole, it's a bit milder than spinach. Typically the leaves are boiled for a few minutes. It is similar to spinach but easier to grow. Young chard leaves are delicious eaten fresh and the fully-formed leaves will be ready to harvest about 10-12 weeks after sowing. Cut individual leaves as you need them and the plant will keep producing new growth.", family: "Beet", foodType: "Leaf", usedAs: "Vegetable", @@ -1407,7 +1407,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637890/Seasonal/033-grape_jdq8ux.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Tayberries are a cross between red raspberries and blackberries. They have a strong aromatic flavour and are less acidic than loganberries, which have similar parentage. It is a reliable and prolific cropper, but the fruits can only be harvested by hand as they are very soft, which means you generally won't see tayberries commercially. Tayberries are best appreciated raw. Very soft fruits can be crushed with sugar and served as a sauce over ice cream, or a spread for scones, waffles, pancakes and pikelets. They also make a great jam, though, and can be added alongside other fruits to crumbles and pies. Tayberry wine is also a strong contender, as is tayberry macerated in cider vinegar, vodka, gin or brandy. In the UK, tayberries ripen in late July and are generally then available through August. Commercially available tayberries might have been picked underripe, and so this is a fruit you really will probably need to grow yourself to enjoy. You will need some space to grow them, however, so one way to get your hands on them a little easier might be to seek our artisan growers at markets and fairs.", family: "example", foodType: "Berry", usedAs: "Fruit", @@ -1419,7 +1419,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637880/Seasonal/011-tomato_ighe7m.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Tomatoes are a member of the nightshade family and are in fact fruits! Their affinity for other savoury ingredients means that they are usually used as a vegetable, however. There are thousands of varieties that vary wildly in size, though they almost always have a sweet and gently tangy flavour, and are great raw and cooked. The skin, flesh and seeds can all be eaten, but the leaves are toxic, and so should always be discarded. Today, tomatoes are integral to many dishes in many cuisines. Fantastic as a snack, in a sauce, poached, grilled, baked - endless possibilities! When choosing tomatoes, look for wrinkle-free skins and a strong tomatoey smell. Underripe tomatoes can be reddened by keeping them in a brown paper bag at room temperature, or on a windowsill. The British tomato season runs from June through October, and there are lots of varieties you can grow at home, whether you have a lot of space or only a little. In winter, using canned tomatoes can help save on environmental food miles.", family: "Rose", foodType: "Berry", usedAs: "Vegetable", @@ -1431,7 +1431,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/028-fish_eqeczk.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie..", + "Tuna are a member of the mackerel family, and are generally found in earth's warmer oceans. They can grow up to a massive size - up to 700kg - and their flesh is distinctively meaty, flaky and firm with a rich and strong flavour. Tuna is generally sold in steaks. It dries out quickly, and so should be cooked briefly over a high heat, marinated before cooking, or simmered in sauce. There are a lot of varieties of tuna. However, as a consequence of overfishing, only a handful of these are commercially available. Most of the available tuna are considered to be endangered to the point of extinction - Mediterranean and Atlantic - or to be in decline, like the bluefin tuna. Tuna are in season from May through early September, depending on their variety. You can check whether your tinned tuna is marked as dolphin friendly (which means it was caught by line rather than net, which can often tangle up dolphins and other marine life, causing unnecessary damage to the ecosystem). You can also check whether your tuna is marked as bird friendly (tuna fishing lines have to be tagged with coloured scare tapes, otherwise birds can fail to notice them and also get tangled in the lines). Different varieties of tuna are endangered or suffering severe decline too, however, so checking the kind of tuna being sold can also make a difference. Alternatives to tuna include: herring, tilapia, or mackerel.", family: "Fish", foodType: "Fish", usedAs: "Fish", @@ -1479,7 +1479,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637898/Seasonal/055-watercress_jzk4fu.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Watercress is related to the mustard family and is one of the stronger-tasting salad leaves available. It is pungent and slightly bitter, and is generally sold in bunches or bags if you aren't growing it at home. Watercress is highly nutritious, and contains large amounts of iron, calcium, and vitamins A, C and E. It's available year round, but specifically is at its best from April through September. Look for crisp, dark leaves with no sign of wilting. Watercress is highly perishable, so eat and use it soon after acquiring it. Watercress can be used in salads, soups, tarts and omelettes, as an ingredient in sandwiches, or as a garnish for game. An alternative to watercress is rocket. Watercress is very easy to grow at home, but does need a lot of water, as naturally it is a plant which grows in streams.", family: "Cabbage", foodType: "Leaf", usedAs: "Vegetable", @@ -1491,7 +1491,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/056-watermelon_lpehjq.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Watermelons, unlike most of their other melon relatives, are larger in size, distinctly watery, and are milder in flavour. They have a hard, striped green rind, red flesh, and are sweet. Ripe melons should sound hollow when shaken or slapped. The rind should be dull, and should not really give when pressed. Look for symmetrical melons, and avoid ones which have damaged skins. To prepare, cut in half, and scoop out the seeds. Then, slice as desired. Watermelon is great on its own, added to salads with feta and mint, or when turned into juice. Watermelons have to be imported into the UK, but are at their best from June through August.", family: "Cucurbita", foodType: "Berry", usedAs: "Fruit", @@ -1503,7 +1503,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637890/Seasonal/034-mackerel_f8xvhi.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Whiting is related to cod, but is generally cheaper and a little less flavoursome. Whiting are a small, silvery fish with tender, white, firm flesh. Whiting is low in fat and generally is in season from June through February. As whiting fillets are small, you will generally want to allow two per serving. Buy your whiting as fresh as possible, as the fish becomes flakey and impossible to fillet quickly. You will want to use your whiting within one or two days of purchase. Whiting is great coated in breadcrumbs or battered, as well as in fishcakes, turned to mousse, grilled, fried in butter, or even poached in wine. An alternative to whiting might be hake or seabass.", family: "Fish", foodType: "Fish", usedAs: "Fish", @@ -1522,4 +1522,4 @@ const produce = [ }, ]; -export default produce; \ No newline at end of file +export default produce; From 9a16f44b584641f0c0dbec918eef5c68f401814d Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Tue, 9 Aug 2022 14:58:56 +0100 Subject: [PATCH 46/82] Removed '. --- db/data.js | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/db/data.js b/db/data.js index ad4fe27..b9a7eac 100644 --- a/db/data.js +++ b/db/data.js @@ -30,7 +30,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637881/Seasonal/012-apricot_mj99xa.png", description: - "Apricots are a soft, fragrant stone fruit that range from light yellow to deep orange in colour. Apricot colour isn't always a reliable guide to how it will taste, but try to avoid very pale apricots, or ones with wrinkled or damaged skins. They should feel moderately firm with some give. Their flavour is generally sweet, and sometimes a little tart. Apricots are a good source of fibre and have a high water content. They're a good source of beta carotene, lutein, zeaxanthin, and vitamins C and E. These nutrients can help to promote good eye health. Apricots are great to eat on their own, fresh or baked, or when used in tarts and crumbles. You can also use them to make jams, compotes and chutneys. An alternative to apricots can be peaches or even nectarines. Apricots need a warm climate to thrive, though some variants are able to withstand slightly cooler temperatures. In the summer, most imported apricots on sale come from hot European countries, though can also be shipped from further afield.", + "Apricots are a soft, fragrant stone fruit that range from light yellow to deep orange in colour. Apricot colour is not always a reliable guide to how it will taste, but try to avoid very pale apricots, or ones with wrinkled or damaged skins. They should feel moderately firm with some give. Their flavour is generally sweet, and sometimes a little tart. Apricots are a good source of fibre and have a high water content. They are a good source of beta carotene, lutein, zeaxanthin, and vitamins C and E. These nutrients can help to promote good eye health. Apricots are great to eat on their own, fresh or baked, or when used in tarts and crumbles. You can also use them to make jams, compotes and chutneys. An alternative to apricots can be peaches or even nectarines. Apricots need a warm climate to thrive, though some variants are able to withstand slightly cooler temperatures. In the summer, most imported apricots on sale come from hot European countries, though can also be shipped from further afield.", family: "Rose", foodType: "Drupe", usedAs: "Fruit", @@ -54,7 +54,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637877/Seasonal/001-aubergine_g9dkiw.png", description: - "Aubergines are a dark purple berry - though they're functionally used as a vegetable - which are at their cheapest and highest quality in the shops from July to September. They're a good source of fibre, and are also low GI, so won't raise your blood glucose levels. No allergens to aubergine are currently known; they are part of the nightshade family. You can grill, fry, griddle, barbecue and bake aubergines. They're often added to dishes like curries and casseroles. Famous dishes using aubergine include ratatouille and moussaka, and they feature widely in Mediterranean cuisine. They have a mellow flavour that combines well with other ingredients. When grown, they like sunny and warm weather, and do best when grown in a greenhouse in the UK climate.", + "Aubergines are a dark purple berry - though they are functionally used as a vegetable - which are at their cheapest and highest quality in the shops from July to September. They are a good source of fibre, and are also low GI, so will not raise your blood glucose levels. No allergens to aubergine are currently known; they are part of the nightshade family. You can grill, fry, griddle, barbecue and bake aubergines. They are often added to dishes like curries and casseroles. Famous dishes using aubergine include ratatouille and moussaka, and they feature widely in Mediterranean cuisine. They have a mellow flavour that combines well with other ingredients. When grown, they like sunny and warm weather, and do best when grown in a greenhouse in the UK climate.", family: "Nightshade", foodType: "Berry", usedAs: "Vegetable", @@ -66,7 +66,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637877/Seasonal/002-bananas_awomgk.png", description: - "Bananas are a popular tropical fruit. There are lots of different varieties, but the most popular kind in the UK is the Cavendish. Bananas with small patches of black on their skin are ripe, and can be eaten right away. Bananas with green ends can be ripened at room temperature. Bananas that are green all over are unripe. All bananas are rich in potassium, riboflavin, niacin and fibre, and their high sugar levels mean they can provide a rapid energy boost if eaten as a snack. In addition to being eaten fresh, bananas can be baked into lots of dishes, as well as being baked or fried and served with cream or ice cream. They also make good toppings when sliced for porridge and pancakes. Most bananas won't flower or fruit outdoors in the UK. Some may do so inside a heated greenhouse, but you might find that cropping is infrequent at best.", + "Bananas are a popular tropical fruit. There are lots of different varieties, but the most popular kind in the UK is the Cavendish. Bananas with small patches of black on their skin are ripe, and can be eaten right away. Bananas with green ends can be ripened at room temperature. Bananas that are green all over are unripe. All bananas are rich in potassium, riboflavin, niacin and fibre, and their high sugar levels mean they can provide a rapid energy boost if eaten as a snack. In addition to being eaten fresh, bananas can be baked into lots of dishes, as well as being baked or fried and served with cream or ice cream. They also make good toppings when sliced for porridge and pancakes. Most bananas will not flower or fruit outdoors in the UK. Some may do so inside a heated greenhouse, but you might find that cropping is infrequent at best.", family: "Musa", foodType: "Berry", usedAs: "Fruit", @@ -128,7 +128,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637877/Seasonal/004-beetroot_zeq9bj.png", description: - "Beetroots are a deep purple root vegetable, which are often sold fresh, pre-cooked, or pickled. They can be eaten raw or cooked, and are popularly used in salads. They are a close relative of chard and spinach, with a good nutritional content. If you don't like pickled beetroots, you might find that you like them roasted, or freshly boiled! Peeled and sliced, beetroot is also a great addition to salads and slaws, or just as a garnish. They can also be used in vegetable smoothies with other foods like carrots. Beetroot generally grows quite well in the UK, with availability that runs from mid-summer through late winter.", + "Beetroots are a deep purple root vegetable, which are often sold fresh, pre-cooked, or pickled. They can be eaten raw or cooked, and are popularly used in salads. They are a close relative of chard and spinach, with a good nutritional content. If you do not like pickled beetroots, you might find that you like them roasted, or freshly boiled! Peeled and sliced, beetroot is also a great addition to salads and slaws, or just as a garnish. They can also be used in vegetable smoothies with other foods like carrots. Beetroot generally grows quite well in the UK, with availability that runs from mid-summer through late winter.", family: "Beet", foodType: "Root", usedAs: "Vegetable", @@ -418,7 +418,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637885/Seasonal/018-crab_oxn7ew.png", description: - "Crabs are crustaceans with hard exoskeletons and soft, succulent flesh. The most commonly eaten kind in the UK is the common edible brown crab. Female crabs have sweeter flesh than males when cooked. Crabs should feel heavy, but you should not be able to hear any liquid sloshing inside the exoskeleton. If you prefer white meat, buy a male crab. You can also buy live crabs if shopping at a fishmonger. If preparing live crabs, it is important to do so humanely. It is considered most humane to place crabs in a freezer for at least two hours before cooking, as they will become comatose and die. However, this is only considered humane if done quickly in a large freezer at a temperature of at least -18 C. The most common method used in restaurants - piercing underneath the crab's abdominal flap with a knife - should only be done by trained professionals. The procedure should take no more than ten seconds, and must only be carried out after the crab has been desensitised by chilling. To cook, remove the crab from the freezer and plunge into a pan of boiling salted water. Return to the boil and cook for thirty minutes per kilogram of weight. Cool rapidly before dressing. Always make sure you remove the grey gills from the crab, as these are very tough and cannot be digested.", + "Crabs are crustaceans with hard exoskeletons and soft, succulent flesh. The most commonly eaten kind in the UK is the common edible brown crab. Female crabs have sweeter flesh than males when cooked. Crabs should feel heavy, but you should not be able to hear any liquid sloshing inside the exoskeleton. If you prefer white meat, buy a male crab. You can also buy live crabs if shopping at a fishmonger. If preparing live crabs, it is important to do so humanely. It is considered most humane to place crabs in a freezer for at least two hours before cooking, as they will become comatose and die. However, this is only considered humane if done quickly in a large freezer at a temperature of at least -18 C. The most common method used in restaurants - piercing underneath the abdominal flap with a knife - should only be done by trained professionals. The procedure should take no more than ten seconds, and must only be carried out after the crab has been desensitised by chilling. To cook, remove the crab from the freezer and plunge into a pan of boiling salted water. Return to the boil and cook for thirty minutes per kilogram of weight. Cool rapidly before dressing. Always make sure you remove the grey gills from the crab, as these are very tough and cannot be digested.", family: "Fish", foodType: "Fish", usedAs: "Fish", @@ -523,7 +523,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637882/Seasonal/022-figs_jj1ssf.png", description: - "Figs are a fruit with a delicate aroma and a sweet flavour. Originally from Asia, they are now grown across the Mediterranean and there are hundreds of different kinds. They can be grouped into four main colours: white, green, red, and purple/black. Figs have an oval or squat square shape, and thin skin that encloses hundreds of seeds, held in a succulent flesh. Figs are very delicate and need gentle, careful handling, though you can also buy them dried. When shopping for fresh figs, go for plump fruits that feel soft, but not too liquid. Avoid fruits with bruises or splits. At their ripest, they will have a faint bloom. If they smell sour, however, they are past their peak. Figs are best eaten at room temperature, so leave them out of the fridge for an hour before you eat them. Figs perish quickly, so make sure to eat within a day or two of buying them! Figs - dried and fresh - are great as a snack, or when used in baking. You can eat them raw, drizzled with honey, toasted nuts and cream, or use them in salads with goat's cheese, rocket and ham. You can also grill them, roast them whole, or poach them. They do not need cooking for very long!", + "Figs are a fruit with a delicate aroma and a sweet flavour. Originally from Asia, they are now grown across the Mediterranean and there are hundreds of different kinds. They can be grouped into four main colours: white, green, red, and purple/black. Figs have an oval or squat square shape, and thin skin that encloses hundreds of seeds, held in a succulent flesh. Figs are very delicate and need gentle, careful handling, though you can also buy them dried. When shopping for fresh figs, go for plump fruits that feel soft, but not too liquid. Avoid fruits with bruises or splits. At their ripest, they will have a faint bloom. If they smell sour, however, they are past their peak. Figs are best eaten at room temperature, so leave them out of the fridge for an hour before you eat them. Figs perish quickly, so make sure to eat within a day or two of buying them! Figs - dried and fresh - are great as a snack, or when used in baking. You can eat them raw, drizzled with honey, toasted nuts and cream, or use them in salads with goat cheese, rocket and ham. You can also grill them, roast them whole, or poach them. They do not need cooking for very long!", family: "Parsley", foodType: "Berry", usedAs: "Fruit", @@ -595,7 +595,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/026-chicken_xt4kgm.png", description: - "Grouse is considered the greatest of all game birds and the first day of grouse shooting season, 12th August, is named The Glorious Twelfth and was established by the Game Act in 1831. Grouse is native to Scotland but can be found elsewhere in the UK. Grouse has twice the protein and less than a third of the fat of chicken and is also high in vitamin B and iron. Known for its rich, gamey flavour and distinctive red colour, Grouse are quite small meaning that one bird is enough for one person. The younger the bird, the better the flesh so young birds are best roasted, while older birds are better used in casseroles. To prepare it, remove the wishbone and pull back the skin from the neck to expose the entrance. Cut round it with a sharp knife and snip the bone free at the bottom, then cut the grouse's wings and legs at the second joint. Wipe the cavity and outside of the bird, season inside and push in any desired flavourings, then tie the legs together and season the skin. You can also wrap the breast with pancetta or ham to prevent it drying out.", + "Grouse is considered the greatest of all game birds and the first day of grouse shooting season, 12th August, is named The Glorious Twelfth and was established by the Game Act in 1831. Grouse is native to Scotland but can be found elsewhere in the UK. Grouse has twice the protein and less than a third of the fat of chicken and is also high in vitamin B and iron. Known for its rich, gamey flavour and distinctive red colour, Grouse are quite small meaning that one bird is enough for one person. The younger the bird, the better the flesh so young birds are best roasted, while older birds are better used in casseroles. To prepare it, remove the wishbone and pull back the skin from the neck to expose the entrance. Cut round it with a sharp knife and snip the bone free at the bottom, then cut the wings and legs at the second joint. Wipe the cavity and outside of the bird, season inside and push in any desired flavourings, then tie the legs together and season the skin. You can also wrap the breast with pancetta or ham to prevent it drying out.", family: "Meat", foodType: "Fowl", usedAs: "Meat", @@ -679,7 +679,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/030-ewe_w2coor.png", description: - "Lamb is the culinary name for meat which comes from a sheep that is under one year old. When between one and two years old it is sold as hogget and anything over two years old is called mutton, which has a lot more flavour but also tougher flesh that will need slow cooking to tenderise it. The older a lamb, the deeper the colour of its meat. While there are health risks associated with over-consuming red meat, lamb can also be a really good source of iron, protein, and vitamin B12. A versatile meat that is used for more than just roasting, lamb is popularly used in shepherd's pie, curries, moussaka and as kebabs. For quick cooking, choose fillets, steaks and chops and for slow cooking, among the best options are leg, shoulder, shank and neck joints. If it is not homegrown, imported lamb is considered to have the highest carbon footprint of all meats and has very high greenhouse gas emissions regardless of where it is farmed.", + "Lamb is the culinary name for meat which comes from a sheep that is under one year old. When between one and two years old it is sold as hogget and anything over two years old is called mutton, which has a lot more flavour but also tougher flesh that will need slow cooking to tenderise it. The older a lamb, the deeper the colour of its meat. While there are health risks associated with over-consuming red meat, lamb can also be a really good source of iron, protein, and vitamin B12. A versatile meat that is used for more than just roasting, lamb is popularly used in curries, moussaka and as kebabs. For quick cooking, choose fillets, steaks and chops and for slow cooking, among the best options are leg, shoulder, shank and neck joints. If it is not homegrown, imported lamb is considered to have the highest carbon footprint of all meats and has very high greenhouse gas emissions regardless of where it is farmed.", family: "Meat", foodType: "Meat", usedAs: "Meat", @@ -704,7 +704,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637889/Seasonal/031-greens_rsygez.png", description: - "Also known as corn salad or cat grass, lamb's lettuce has a distinctive, tangy flavour and is known for its long spoon-shaped leaves. Its unusual name allegedly comes from the lettuce's similarity to the size and shape of a lamb's tongue. Lamb's lettuce is an excellent source of vitamin A but is also high in vitamin C, E, K and B6 as well as many minerals. Lamb's lettuce is best used as a main ingredient in salads or cooked and served as a side vegetable. Be sure to wash and drain thoroughly before use it can be grainy and gritty. It is quickly perishable and should be used within two days of purchase. Lamb's lettuce thrives in moist soils and cold temperatures so plant them in a shady spot. They do not tolerate drought well so keep them well-watered. To avoid a glut, you should sow little and often.", + "Also known as corn salad or cat grass, lamb's lettuce has a distinctive, tangy flavour and is known for its long spoon-shaped leaves. Its unusual name allegedly comes from the similarity of the plant to the size and shape of a lamb's tongue. Lamb's lettuce is an excellent source of vitamin A but is also high in vitamin C, E, K and B6 as well as many minerals. Lamb's lettuce is best used as a main ingredient in salads or cooked and served as a side vegetable. Be sure to wash and drain thoroughly before use it can be grainy and gritty. It is quickly perishable and should be used within two days of purchase. Lamb's lettuce thrives in moist soils and cold temperatures so plant them in a shady spot. They do not tolerate drought well so keep them well-watered. To avoid a glut, you should sow little and often.", family: "Honeysuckle", foodType: "Leaf", usedAs: "Vegetable", @@ -756,7 +756,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637889/Seasonal/032-lettuce_k50llo.png", description: - "Lettuce comes in a huge number of varieties, but are usually either crisp such as iceberg, cos and romaine or floppy such as little gem, butterhead and round. Most have green leaves, although some with red tinges and they all have a delicate, clean flavour. Lettuce is an excellent source of vitamin A as well as being high in minerals and antioxidants. Lettuce is mainly eaten raw in salads, but can also be shredded and added to soups towards the end of cooking or braised and served on the side along with other vegetables. Crisp varieties can also be grilled. Grow lettuces in full sun in moisture-retentive soil, but if it's very hot the lettuces will need shade. It will also need protecting from the cold if sowing early or late. Crisp varieties tend to be hardier but floppy varieties produce less dense growth and so are ideal for growing in small spaces and containers.", + "Lettuce comes in a huge number of varieties, but are usually either crisp such as iceberg, cos and romaine or floppy such as little gem, butterhead and round. Most have green leaves, although some with red tinges and they all have a delicate, clean flavour. Lettuce is an excellent source of vitamin A as well as being high in minerals and antioxidants. Lettuce is mainly eaten raw in salads, but can also be shredded and added to soups towards the end of cooking or braised and served on the side along with other vegetables. Crisp varieties can also be grilled. Grow lettuces in full sun in moisture-retentive soil, but if it is very hot the lettuces will need shade. It will also need protecting from the cold if sowing early or late. Crisp varieties tend to be hardier but floppy varieties produce less dense growth and so are ideal for growing in small spaces and containers.", family: "Daisy", foodType: "Leaf", usedAs: "Vegetable", @@ -976,7 +976,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637892/Seasonal/039-peach_tjw63g.png", description: - "A velvety-skinned stone fruit, peaches are juicy, sweet and fragrant. They generally have red skin and yellow flesh, though there are white varieties which are more pink in colour. The most common type of peach is spherical in shape and about the size of a tennis ball, though you can find disc-shaped varieties too! Ripe peaches should smell fragrant, and will be yellow around their stems. They will feel firm, but will yield slightly if squeezed. Avoid peaches that feel hard or look bruised. Underripe peaches will soften if stored at room temperature, but their taste won't get much sweeter. If you cut peaches for a raw snack, but aren't going to eat them right away, brush the exposed flesh with lemon juice to prevent browning. Peaches can be eaten raw and added to fruit salads, pavlovas and trifles. They can also be poached or halved and roasted, and served with cream or ice cream too. An alternative to peaches is nectarines.", + "A velvety-skinned stone fruit, peaches are juicy, sweet and fragrant. They generally have red skin and yellow flesh, though there are white varieties which are more pink in colour. The most common type of peach is spherical in shape and about the size of a tennis ball, though you can find disc-shaped varieties too! Ripe peaches should smell fragrant, and will be yellow around their stems. They will feel firm, but will yield slightly if squeezed. Avoid peaches that feel hard or look bruised. Underripe peaches will soften if stored at room temperature, but their taste will not get much sweeter. If you cut peaches for a raw snack, but are not going to eat them right away, brush the exposed flesh with lemon juice to prevent browning. Peaches can be eaten raw and added to fruit salads, pavlovas and trifles. They can also be poached or halved and roasted, and served with cream or ice cream too. An alternative to peaches is nectarines.", family: "Rose", foodType: "Drupe", usedAs: "Fruit", @@ -1000,7 +1000,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637883/Seasonal/014-peas_ck7vlm.png", description: - "A type of legume, peas grow inside of long pods. As with all legumes, their sugars turn to starch shortly after picking, so they are best eaten after just being picked. Frozen peas are put on ice within three hours of being picked, and their flavour can often be superior to that of fresh peas harvested days previously. Peas are a good source of plant-based protein. They also have a low glycemic index, so can be a good food option if you are keeping an eye on your blood sugar. Legumes are a common allergen, however, so be cautious if you have been diagnosed with a legume allergy. To cook, peas can be boiled or steamed. They don't need very long in the water, and try not to add salt, as this can make them toughen up. A little sugar will bring out their sweetness! Alternatives to peas include mangetout and broad beans.", + "A type of legume, peas grow inside of long pods. As with all legumes, their sugars turn to starch shortly after picking, so they are best eaten after just being picked. Frozen peas are put on ice within three hours of being picked, and their flavour can often be superior to that of fresh peas harvested days previously. Peas are a good source of plant-based protein. They also have a low glycemic index, so can be a good food option if you are keeping an eye on your blood sugar. Legumes are a common allergen, however, so be cautious if you have been diagnosed with a legume allergy. To cook, peas can be boiled or steamed. They do not need very long in the water, and try not to add salt, as this can make them toughen up. A little sugar will bring out their sweetness! Alternatives to peas include mangetout and broad beans.", family: "Legume", foodType: "Legume", usedAs: "Vegetable", @@ -1407,7 +1407,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637890/Seasonal/033-grape_jdq8ux.png", description: - "Tayberries are a cross between red raspberries and blackberries. They have a strong aromatic flavour and are less acidic than loganberries, which have similar parentage. It is a reliable and prolific cropper, but the fruits can only be harvested by hand as they are very soft, which means you generally won't see tayberries commercially. Tayberries are best appreciated raw. Very soft fruits can be crushed with sugar and served as a sauce over ice cream, or a spread for scones, waffles, pancakes and pikelets. They also make a great jam, though, and can be added alongside other fruits to crumbles and pies. Tayberry wine is also a strong contender, as is tayberry macerated in cider vinegar, vodka, gin or brandy. In the UK, tayberries ripen in late July and are generally then available through August. Commercially available tayberries might have been picked underripe, and so this is a fruit you really will probably need to grow yourself to enjoy. You will need some space to grow them, however, so one way to get your hands on them a little easier might be to seek our artisan growers at markets and fairs.", + "Tayberries are a cross between red raspberries and blackberries. They have a strong aromatic flavour and are less acidic than loganberries, which have similar parentage. It is a reliable and prolific cropper, but the fruits can only be harvested by hand as they are very soft, which means you generally will not see tayberries commercially. Tayberries are best appreciated raw. Very soft fruits can be crushed with sugar and served as a sauce over ice cream, or a spread for scones, waffles, pancakes and pikelets. They also make a great jam, though, and can be added alongside other fruits to crumbles and pies. Tayberry wine is also a strong contender, as is tayberry macerated in cider vinegar, vodka, gin or brandy. In the UK, tayberries ripen in late July and are generally then available through August. Commercially available tayberries might have been picked underripe, and so this is a fruit you really will probably need to grow yourself to enjoy. You will need some space to grow them, however, so one way to get your hands on them a little easier might be to seek our artisan growers at markets and fairs.", family: "example", foodType: "Berry", usedAs: "Fruit", @@ -1431,7 +1431,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/028-fish_eqeczk.png", description: - "Tuna are a member of the mackerel family, and are generally found in earth's warmer oceans. They can grow up to a massive size - up to 700kg - and their flesh is distinctively meaty, flaky and firm with a rich and strong flavour. Tuna is generally sold in steaks. It dries out quickly, and so should be cooked briefly over a high heat, marinated before cooking, or simmered in sauce. There are a lot of varieties of tuna. However, as a consequence of overfishing, only a handful of these are commercially available. Most of the available tuna are considered to be endangered to the point of extinction - Mediterranean and Atlantic - or to be in decline, like the bluefin tuna. Tuna are in season from May through early September, depending on their variety. You can check whether your tinned tuna is marked as dolphin friendly (which means it was caught by line rather than net, which can often tangle up dolphins and other marine life, causing unnecessary damage to the ecosystem). You can also check whether your tuna is marked as bird friendly (tuna fishing lines have to be tagged with coloured scare tapes, otherwise birds can fail to notice them and also get tangled in the lines). Different varieties of tuna are endangered or suffering severe decline too, however, so checking the kind of tuna being sold can also make a difference. Alternatives to tuna include: herring, tilapia, or mackerel.", + "Tuna are a member of the mackerel family, and are generally found in our warmer oceans. They can grow up to a massive size - up to 700kg - and their flesh is distinctively meaty, flaky and firm with a rich and strong flavour. Tuna is generally sold in steaks. It dries out quickly, and so should be cooked briefly over a high heat, marinated before cooking, or simmered in sauce. There are a lot of varieties of tuna. However, as a consequence of overfishing, only a handful of these are commercially available. Most of the available tuna are considered to be endangered to the point of extinction - Mediterranean and Atlantic - or to be in decline, like the bluefin tuna. Tuna are in season from May through early September, depending on their variety. You can check whether your tinned tuna is marked as dolphin friendly (which means it was caught by line rather than net, which can often tangle up dolphins and other marine life, causing unnecessary damage to the ecosystem). You can also check whether your tuna is marked as bird friendly (tuna fishing lines have to be tagged with coloured scare tapes, otherwise birds can fail to notice them and also get tangled in the lines). Different varieties of tuna are endangered or suffering severe decline too, however, so checking the kind of tuna being sold can also make a difference. Alternatives to tuna include: herring, tilapia, or mackerel.", family: "Fish", foodType: "Fish", usedAs: "Fish", @@ -1479,7 +1479,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637898/Seasonal/055-watercress_jzk4fu.png", description: - "Watercress is related to the mustard family and is one of the stronger-tasting salad leaves available. It is pungent and slightly bitter, and is generally sold in bunches or bags if you aren't growing it at home. Watercress is highly nutritious, and contains large amounts of iron, calcium, and vitamins A, C and E. It's available year round, but specifically is at its best from April through September. Look for crisp, dark leaves with no sign of wilting. Watercress is highly perishable, so eat and use it soon after acquiring it. Watercress can be used in salads, soups, tarts and omelettes, as an ingredient in sandwiches, or as a garnish for game. An alternative to watercress is rocket. Watercress is very easy to grow at home, but does need a lot of water, as naturally it is a plant which grows in streams.", + "Watercress is related to the mustard family and is one of the stronger-tasting salad leaves available. It is pungent and slightly bitter, and is generally sold in bunches or bags if you are not growing it at home. Watercress is highly nutritious, and contains large amounts of iron, calcium, and vitamins A, C and E. It is available year round, but specifically is at its best from April through September. Look for crisp, dark leaves with no sign of wilting. Watercress is highly perishable, so eat and use it soon after acquiring it. Watercress can be used in salads, soups, tarts and omelettes, as an ingredient in sandwiches, or as a garnish for game. An alternative to watercress is rocket. Watercress is very easy to grow at home, but does need a lot of water, as naturally it is a plant which grows in streams.", family: "Cabbage", foodType: "Leaf", usedAs: "Vegetable", From c541e7fbbb936d62bf09de5101777491270883f7 Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Tue, 9 Aug 2022 15:04:07 +0100 Subject: [PATCH 47/82] Edited lamb's lettuce. --- db/data.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/data.js b/db/data.js index b9a7eac..c3331df 100644 --- a/db/data.js +++ b/db/data.js @@ -704,7 +704,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637889/Seasonal/031-greens_rsygez.png", description: - "Also known as corn salad or cat grass, lamb's lettuce has a distinctive, tangy flavour and is known for its long spoon-shaped leaves. Its unusual name allegedly comes from the similarity of the plant to the size and shape of a lamb's tongue. Lamb's lettuce is an excellent source of vitamin A but is also high in vitamin C, E, K and B6 as well as many minerals. Lamb's lettuce is best used as a main ingredient in salads or cooked and served as a side vegetable. Be sure to wash and drain thoroughly before use it can be grainy and gritty. It is quickly perishable and should be used within two days of purchase. Lamb's lettuce thrives in moist soils and cold temperatures so plant them in a shady spot. They do not tolerate drought well so keep them well-watered. To avoid a glut, you should sow little and often.", + "Also known as corn salad or cat grass, this lettuce has a distinctive, tangy flavour and is known for its long spoon-shaped leaves. Its unusual name allegedly comes from the similarity of the plant to the size and shape of a lamb tongue. It is an excellent source of vitamin A but is also high in vitamin C, E, K and B6 as well as many minerals. It is best used as a main ingredient in salads or cooked and served as a side vegetable. Be sure to wash and drain thoroughly before use it can be grainy and gritty. It is quickly perishable and should be used within two days of purchase. This plant thrives in moist soils and cold temperatures so plant them in a shady spot. They do not tolerate drought well so keep them well-watered. To avoid a glut, you should sow little and often.", family: "Honeysuckle", foodType: "Leaf", usedAs: "Vegetable", From b7bbeabd76885bc2732e46b245c437d2ea77e862 Mon Sep 17 00:00:00 2001 From: gdarar Date: Thu, 11 Aug 2022 09:55:59 +0100 Subject: [PATCH 48/82] Strech Goal/ Recipe API --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index d7cac0e..713317e 100644 --- a/README.md +++ b/README.md @@ -148,6 +148,11 @@ Current models: - getAll +## Stretch Goal/ Recipe API + +//Andy to fill this part out + + ## Other Please refer to Trello for all upcoming tickets related to this repository. From c6d797b76e26f1886935160375b6de2f87303d26 Mon Sep 17 00:00:00 2001 From: fiona Date: Thu, 11 Aug 2022 10:06:12 +0100 Subject: [PATCH 49/82] expanded testing strings to give more context and added a small note on the get five function --- PLAN.md | 3 --- app.test.js | 6 +++--- db/index.js | 3 ++- helper_scripts/randomGet.js | 3 +++ helper_scripts/randomGet.test.js | 4 ++-- models/index.test.js | 6 +++--- routes/index.js | 5 ----- 7 files changed, 13 insertions(+), 17 deletions(-) delete mode 100644 PLAN.md diff --git a/PLAN.md b/PLAN.md deleted file mode 100644 index 4898424..0000000 --- a/PLAN.md +++ /dev/null @@ -1,3 +0,0 @@ -- crud routes -- models -- get by name and get by season, get all \ No newline at end of file diff --git a/app.test.js b/app.test.js index b674f98..1ccd519 100644 --- a/app.test.js +++ b/app.test.js @@ -3,7 +3,7 @@ import { pool } from "./db/index.js"; import request from "supertest"; import { app } from "./app.js"; -test("Testing get all using /produce", async () => { +test("Testing get all function using /produce route", async () => { const response = await request(app) .get("/produce") .set("Accept", "application/json"); @@ -28,7 +28,7 @@ test("Testing get all using /produce", async () => { ); }); -test("Testing get item using a query after produce", async () => { +test("Testing to get a particular item by using a query in the produce route", async () => { const response = await request(app) .get("/produce?item=pear") .set("Accept", "application/json"); @@ -53,7 +53,7 @@ test("Testing get item using a query after produce", async () => { ); }); -test("Testing the get month route using a month query", async () => { +test("Testing to get a particualr month from the produce route using a month query", async () => { const response = await request(app) .get("/produce?month=march") .set("Accept", "application/json"); diff --git a/db/index.js b/db/index.js index 7deb3dd..dbb579f 100644 --- a/db/index.js +++ b/db/index.js @@ -12,5 +12,6 @@ export default function query(text, params, callback) { return pool.query(text, params, callback); } -// Checks that query is a-ok. +// This is our connection to the database- check your PGURI is up to date in the .env variables +//below is a console.log that tests you've set up your connecction - by running dbtest the current time will be printed in the console // console.log(await query("SELECT NOW()")) diff --git a/helper_scripts/randomGet.js b/helper_scripts/randomGet.js index d479165..4092d26 100644 --- a/helper_scripts/randomGet.js +++ b/helper_scripts/randomGet.js @@ -1,3 +1,6 @@ +// this function returns five random objects with no duplicates + + export function getRandom(allResults) { let randomResults = []; let length = allResults.length; diff --git a/helper_scripts/randomGet.test.js b/helper_scripts/randomGet.test.js index 89064c2..05ac93b 100644 --- a/helper_scripts/randomGet.test.js +++ b/helper_scripts/randomGet.test.js @@ -2,7 +2,7 @@ import { test, expect, describe } from "@jest/globals"; import { getRandom } from "./randomGet.js" import { firstTenData, duplicateData, randomData } from "./testingdata.js" -test("Testing the getRandom to check that it produces 5 objects from an array of 10", () => { +test("Testing the getRandom function to check that it produces 5 objects from an array of 10 objects", () => { const data = firstTenData; @@ -12,7 +12,7 @@ test("Testing the getRandom to check that it produces 5 objects from an array of }); -test("Testing the getRandom to check that it produces 5 unique objects with no duplicates from an array of 10 (with 5 duplicates)", () => { +test("Testing the getRandom to check that it produces 5 unique objects with no duplicates from an array of 10 objects (with 5 duplicates)", () => { const data = duplicateData; diff --git a/models/index.test.js b/models/index.test.js index 3413d77..451cd5e 100644 --- a/models/index.test.js +++ b/models/index.test.js @@ -2,7 +2,7 @@ import{ pool } from '../db/index.js' import { getAll, getByItem, getByMonth } from "./index.js"; import { test, expect, describe } from "@jest/globals"; -test('testing the getAll model retrieves all ', async () => { +test('testing the getAll model retrieves all items from the database', async () => { const response= await getAll(); expect(response).toEqual(expect.any(Array)); expect(response).toEqual(expect.arrayContaining([expect.any(Object)])); @@ -10,12 +10,12 @@ test('testing the getAll model retrieves all ', async () => { }) -test('testing for the get by item function', async() => { +test('testing for the get by item function to make sure it returns the item selected', async() => { const response= await getByItem('pear') expect(response).toEqual(expect.arrayContaining([expect.objectContaining({id:expect.any(Number),name:'Pear',imageurl:expect.any(String),description:expect.any(String),family:expect.any(String),foodtype:expect.any(String),usedas:expect.any(String),month:expect.arrayContaining([expect.any(String)]),allergens:expect.any(String)})])); }) -test('testing for the get by a month function ', async() => { +test('testing for the get by a month function to make sure it returns an item expected ', async() => { const response= await getByMonth('march') expect(response).toEqual(expect.arrayContaining([expect.objectContaining({id:expect.any(Number),name:expect.any(String),imageurl:expect.any(String),description:expect.any(String),family:expect.any(String),foodtype:expect.any(String),usedas:expect.any(String),month:expect.arrayContaining(['March']),allergens:expect.any(String)})])); }) diff --git a/routes/index.js b/routes/index.js index 54dafa5..14a82ee 100644 --- a/routes/index.js +++ b/routes/index.js @@ -29,10 +29,5 @@ router.get("/random", async function (req, res) { }); }); -// router.post - -// router.patch - -// router.delete export default router; From 71ff6168a27877a105551013b042f904a339ef02 Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Thu, 11 Aug 2022 14:24:03 +0100 Subject: [PATCH 50/82] Updated README. --- README.md | 168 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 96 insertions(+), 72 deletions(-) diff --git a/README.md b/README.md index 713317e..b18a5e0 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,23 @@ # 12\*\* Seasonality App: Back-End Documentation -This repository holds the back-end documentation for Team 12\*\* (Twelve Exponential) and their 'Seasonality' final project at the School of Code. TODO: INSERT AUTHOR DETAILS AND PROJECT DESCRIPTION HERE, AS WELL AS LINK TO FRONT-END. +This repository holds the back-end documentation for _Seasonal_ by Team 12\*\* (Twelve Exponential). _Seasonal_ is our final project with the [School of Code](https://github.com/SchoolOfCode). In an agile team, over the course of a month, we researched, designed, and built the first iteration of our application, and are currently working on implementing stretch goals. -This documentation file is currently intended to primarily act as a reference point for members of the 12\*\* team, when interacting with the back-end half of the project. +The core aim of _Seasonal_ is to make it easier and more accessible for users to find out what food is in season in the UK during any given month. Users will be immediately provided with foods currently in season on the landing page, and then can navigate to more food currently in season, or can perform searches for different months, items and recipes to see when they're in season, as well as information on cooking, growing, and ecological impact. + +For more details on what we intend on doing next with _Seasonal_, please refer to our project roadmap! + +The front-end for this project can be [found in this linked repository](https://github.com/SchoolOfCode/final-project_front-end-12). + +Our team consists of: + +- Andy Johnson [@multi-vit](https://github.com/multi-vit) +- Fiona Kitchen [@fkit00](https://github.com/fkit00) +- Guiji Darar [@Gdarar](https://github.com/Gdarar) +- Madison Lowe [@madisonlowe](https://github.com/madisonlowe) +- Matthew Miller [@codedresser](https://github.com/codedresser) +- Nathan Lee [@N-LEE-94](https://github.com/N-LEE-94) + +If you have any questions, feel free to get in touch! ## Installation @@ -28,9 +43,7 @@ npm i This will install all the necessary dependencies. -Referring to the `package.json` details, you will notice the following dependencies: dotenv, nodemon, cors, express, pg. TODO: FORMAT AND WORD THIS BETTER. - -You will also notice that `type` is set to `module` and that we are using ES6 import and export syntax. +We are using ES6 import and export syntax. ## Setting Up Your Environment @@ -44,39 +57,69 @@ Inside the root level, where 'loremipsum' is a variable representing your own cr PGURI=loremipsum ``` -TODO: REWORD SECTION ON DATABASE. For our database, we are linked to Heroku. Nathan is the Data-Lord and has main access to the database and keys on his account for this project. +## Scripts and Commands -## Back-End Structure +To run the back-end on localhost, run: + +``` +npm start +``` + +To run our testing suites, run: + +``` +npm test +``` + +To reset the database, run: + +``` +npm run reset +``` -Our server and our database are both hosted on Heroku, but on different instances. +For other useful commands and scripts, please refer to `scripts` in the `package.json` file. -\*\*Server +## Back-End Structure -TODO: WRITE UP ABOUT THESE ONCE THEY'RE FIXED. +We are currently using a relational PostgreSQL database hosted on Heroku, and our back-end is built using Node.js and Express. For testing the back-end, we are currently using Jest and Supertest. -## File Structure +### Directory Structure -In the back-end repository, our files are structured as follows: +In the back-end repository, our key directories and files are structured as follows: -- db - - index.js +``` +-final-project_back-end-12 + - db + - index.js + - data.js - scripts - - createTable.js (the shape of our database can be found here for reference, creates produce table on database) - - deleteTable.js (deletes produce table from database) - - populateTable.js (populates produce table on database) - - dummyData.js (test data, used to make sure our scripts and database are working) - - data.js (all data currently properly capitalised, so remember to make to lower or upper case when querying or displaying) -- routes -- app.js -- index.js -- .env -- .gitignore + - createTable.js + - deleteTable.js + - populateTable.js + - helper_scripts + - randomGet.js + - randomGet.test.js + - testingdata.js + - models + - index.js + - index.test.js + - routes + - index.js + - app.js + - app.test.js + - package.json + - .env + - .gitignore + - README.md +``` ## Data Shape ### Produce Table -For the produce table, our data on the back-end is provided to the database as an array of objects. Each object represents one food entry, and is formatted as thus: +For the produce table, our data on the back-end is provided to the database as an array of objects. + +Each object represents one food entry, and is formatted as thus: ``` { @@ -95,72 +138,53 @@ An example entry: ``` { -name: "aubergine", -imageURL: "https://auberginepic.com" -description: "This is a description of an aubergine. This will be a longer piece of text. It will describe the following things: what the item is, what value it has nutritionally or if there are any allergens, what to make with it, and how to grow it." -family: "Nightshade" -foodType: "Berry" -usedAs: "Vegetable" -month: ["January", "February"] -allergens: "None" +name: "Aubergine", +imageURL: "https://auberginepic.com", +description: "This is a description of an aubergine. This will be a longer piece of text. It will describe the following things: what the item is, what value it has nutritionally or if there are any allergens, what to make with it, and how to grow it.", +family: "Nightshade", +foodType: "Berry", +usedAs: "Vegetable", +month: ["January", "February"], +allergens: "None", } ``` -A more verbose description of what each key-value pair should contain: +### Data Content Guides -``` -{ -name: The name of the food item, -imageURL: A URL for the image or graphic which represents the item, -description: A description - a few short paragraphs maximum - of the item, -family: The actual family of the item, eg. nightshade, mollusc, -usedAs: How a food is used, eg. tomato and aubergine would be “Vegetable” even though they're fruits, -month: The months it’s in season for, -allergens: Anything that is an allergen in the item. This value should come from one of the legally classified 14 -} -``` +For a description of what each key-value pair inside each data object entry should contain, please see below: -### Produce Table: 'Description' Example +- `name`: The name of the food item. +- `imageURL`: A URL for the image or graphic which represents the item. +- `description`: A description - a few short sentences, according to our description content guide - of the item. +- `family`: The actual family of the item, eg. nightshade, mollusc. +- `usedAs`: How a food is used, eg. tomato and aubergine would be “Vegetable” even though they're technically fruits. +- `month`: The months that the item is in season for. +- `allergens`: Anything that is an allergen in the item. -As a content-guide for how the 'description' segment of each object in our `produce` data should be organised, please see the below: +As a content guide for how the 'description' segment of each object in our `produce` data should be organised, please see the below:
-**_The first paragraph should be a short description of the item._** Aubergines are a dark purple berry - though they’re functionally used as a vegetable - which are at their cheapest and highest quality in the shops from July to September. +**_The first part should be a short description of the item._** Aubergines are a dark purple berry - though they’re functionally used as a vegetable - which are at their cheapest and highest quality in the shops from July to September. -**_The second paragraph should mention any allergens or notable nutritional info._** They’re a good source of fibre, and are also low GI, so won’t raise your blood glucose levels. No allergens to aubergine are currently known; they are part of the nightshade family. +**_The second part should mention any allergens or notable nutritional info._** They’re a good source of fibre, and are also low GI, so won’t raise your blood glucose levels. No allergens to aubergine are currently known; they are part of the nightshade family. -**_The third paragraph should mention, broadly, how to cook with it._** You can grill, fry, griddle, barbecue and bake aubergines. They’re often added to dishes like curries and casseroles. Famous dishes using aubergine include ratatouille and moussaka, and they feature widely in Mediterranean cuisine. They have a mellow flavour that combines well with other ingredients. +**_The third part should mention, broadly, how to cook with it._** You can grill, fry, griddle, barbecue and bake aubergines. They’re often added to dishes like curries and casseroles. Famous dishes using aubergine include ratatouille and moussaka, and they feature widely in Mediterranean cuisine. They have a mellow flavour that combines well with other ingredients. -**_The fourth paragraph should briefly outline ideal growing conditions._** When grown, they like sunny and warm weather, and do best when grown in a greenhouse in the UK climate. +**_The fourth part should briefly outline ideal growing conditions._** When grown, they like sunny and warm weather, and do best when grown in a greenhouse in the UK climate.
-## Routes +If any of this information is not available, feel free to substitute as appropriate with more information in one of the other categories, how to pick good examples of the food, or else ommit the section entirely. It's up to personal discretion, keeping in mind at all times our goal of making information readable and accessible to users, without passing prescriptive health advice or judgements. -Current routes: +## Roadmap -- "/" +The stretch goal that we're currently working on is to integrate the recipe arm of our product design. With this stretch goal, users should be able to locate and search for seasonal recipes which match up to different foods in season. -## Models +Following meeting this stretch goal, our next goal will be to integrate a maps API, to allow users to search for local farms and growers near them. -Current models: - -- getAll - -## Stretch Goal/ Recipe API - -//Andy to fill this part out - - -## Other +## Notes for Team Members Please refer to Trello for all upcoming tickets related to this repository. -For any needed credentials, TODO: add where to find credentials once we've sorted them out. - -# NOTES - -Our server and our database are both deployed on Heroku, but on different instances. - -TODO: Update when database and server are fixed. +For any needed credentials, contact a member of the team with server and database access. From 89dd4380f418ffbe915eebee5ae5b612c44c7059 Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Thu, 11 Aug 2022 14:26:35 +0100 Subject: [PATCH 51/82] Updated PLAN.md. --- PLAN.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/PLAN.md b/PLAN.md index 4898424..71bb961 100644 --- a/PLAN.md +++ b/PLAN.md @@ -1,3 +1,3 @@ -- crud routes -- models -- get by name and get by season, get all \ No newline at end of file +This is the planning file for changes on this back-end repo. + +Feel free to use this space to take notes and plan your work! From e23c033fa45b5cbd98e63e70a932709d35b3e771 Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Sun, 14 Aug 2022 10:49:01 +0100 Subject: [PATCH 52/82] Addressed conflicts. --- PLAN.md | 3 --- README.md | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) delete mode 100644 PLAN.md diff --git a/PLAN.md b/PLAN.md deleted file mode 100644 index 71bb961..0000000 --- a/PLAN.md +++ /dev/null @@ -1,3 +0,0 @@ -This is the planning file for changes on this back-end repo. - -Feel free to use this space to take notes and plan your work! diff --git a/README.md b/README.md index b18a5e0..f4b40f3 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Our team consists of: - Matthew Miller [@codedresser](https://github.com/codedresser) - Nathan Lee [@N-LEE-94](https://github.com/N-LEE-94) -If you have any questions, feel free to get in touch! +If you have any questions, feel free to get in touch! Thanks! ## Installation From 3714b4219e935d9cdbc88707b8f7fe7688fdd448 Mon Sep 17 00:00:00 2001 From: multi-vit <103585624+multi-vit@users.noreply.github.com> Date: Fri, 9 Sep 2022 10:49:31 +0100 Subject: [PATCH 53/82] Add allergens route and model Co-authored-by: Madison Lowe <101978552+madisonlowe@users.noreply.github.com> Co-authored-by: Fiona Kitchen <100845392+fkit00@users.noreply.github.com> --- models/index.js | 9 ++++++++- routes/index.js | 12 ++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/models/index.js b/models/index.js index c72f75c..6e31693 100644 --- a/models/index.js +++ b/models/index.js @@ -18,4 +18,11 @@ export async function getByMonth(month) { [month] ); return res.rows; -} \ No newline at end of file +} +export async function getByAllergen(allergen) { + let res = await query( + `SELECT * FROM produce WHERE lower($1) ILIKE allergens;`, + [allergen] + ); + return res.rows; +} diff --git a/routes/index.js b/routes/index.js index 14a82ee..0d65a51 100644 --- a/routes/index.js +++ b/routes/index.js @@ -1,5 +1,10 @@ import express from "express"; -import { getAll, getByItem, getByMonth } from "../models/index.js"; +import { + getAll, + getByItem, + getByMonth, + getByAllergen, +} from "../models/index.js"; import { getRandom } from "../helper_scripts/randomGet.js"; export const router = express.Router(); @@ -13,6 +18,10 @@ router.get("/", async function (req, res) { let result = await getByMonth(req.query.month); return res.json({ success: true, payload: result }); } + if (req.query.allergen !== undefined) { + let result = await getByAllergen(req.query.allergen); + return res.json({ success: true, payload: result }); + } let result = await getAll(); return res.json({ success: true, payload: result }); }); @@ -29,5 +38,4 @@ router.get("/random", async function (req, res) { }); }); - export default router; From 21fa09010210e966341abcc1b820ed500b343342 Mon Sep 17 00:00:00 2001 From: multi-vit <103585624+multi-vit@users.noreply.github.com> Date: Fri, 9 Sep 2022 10:58:22 +0100 Subject: [PATCH 54/82] Add model and route test for allergens Co-authored-by: Madison Lowe <101978552+madisonlowe@users.noreply.github.com> Co-authored-by: Fiona Kitchen <100845392+fkit00@users.noreply.github.com> --- app.test.js | 75 +++++++++++++++++++++------------- models/index.test.js | 96 +++++++++++++++++++++++++++++++++++--------- 2 files changed, 125 insertions(+), 46 deletions(-) diff --git a/app.test.js b/app.test.js index 1ccd519..b4e4330 100644 --- a/app.test.js +++ b/app.test.js @@ -53,7 +53,7 @@ test("Testing to get a particular item by using a query in the produce route", a ); }); -test("Testing to get a particualr month from the produce route using a month query", async () => { +test("Testing to get a particular month from the produce route using a month query", async () => { const response = await request(app) .get("/produce?month=march") .set("Accept", "application/json"); @@ -78,6 +78,30 @@ test("Testing to get a particualr month from the produce route using a month que ); }); +test("Testing to get by allergens using a query in the produce route", async () => { + const response = await request(app) + .get("/produce?allergen=fish") + .set("Accept", "application/json"); + expect(response.status).toEqual(200); + expect(response.body).toEqual( + expect.objectContaining({ + success: true, + payload: expect.arrayContaining([ + expect.objectContaining({ + id: expect.any(Number), + name: expect.any(String), + imageurl: expect.any(String), + description: expect.any(String), + family: expect.any(String), + foodtype: expect.any(String), + usedas: expect.any(String), + month: expect.arrayContaining([expect.any(String)]), + allergens: "Fish", + }), + ]), + }) + ); +}); test("Testing that produce/random returns 5 objects", async () => { const response = await request(app) @@ -110,40 +134,35 @@ test("Testing that random produce returns an object with expected key value pair ]), }) ); - }); - test("Testing that random produce returns 5 unique objects from the database for January", async () => { const response = await request(app) .get("/produce/random?month=January") .set("Accept", "application/json"); expect(response.status).toEqual(200); - const testArray = response.body.payload; - - let randomResults = []; - - let check = null; - - for (let i = 0; i < testArray.length; i++) { - - if ( - randomResults.some((item) => { - return item.id === testArray[i].id; - }) - ) { - check = false; - } else { - randomResults.push(testArray[i]); - check = true; - } - } - - expect(check).toEqual(true); + const testArray = response.body.payload; + + let randomResults = []; + let check = null; + + for (let i = 0; i < testArray.length; i++) { + if ( + randomResults.some((item) => { + return item.id === testArray[i].id; + }) + ) { + check = false; + } else { + randomResults.push(testArray[i]); + check = true; + } + } + + expect(check).toEqual(true); }), - -afterAll((done) => { - pool.end(done); -}); + afterAll((done) => { + pool.end(done); + }); diff --git a/models/index.test.js b/models/index.test.js index 451cd5e..7767e53 100644 --- a/models/index.test.js +++ b/models/index.test.js @@ -1,26 +1,86 @@ -import{ pool } from '../db/index.js' -import { getAll, getByItem, getByMonth } from "./index.js"; +import { pool } from "../db/index.js"; +import { getAll, getByItem, getByMonth, getByAllergen } from "./index.js"; import { test, expect, describe } from "@jest/globals"; -test('testing the getAll model retrieves all items from the database', async () => { - const response= await getAll(); - expect(response).toEqual(expect.any(Array)); +test("testing the getAll model retrieves all items from the database", async () => { + const response = await getAll(); + expect(response).toEqual(expect.any(Array)); expect(response).toEqual(expect.arrayContaining([expect.any(Object)])); - expect(response).toEqual(expect.arrayContaining([expect.objectContaining({id:expect.any(Number),name:expect.any(String),imageurl:expect.any(String),description:expect.any(String),family:expect.any(String),foodtype:expect.any(String),usedas:expect.any(String),month:expect.arrayContaining([expect.any(String)]),allergens:expect.any(String)})])); + expect(response).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + id: expect.any(Number), + name: expect.any(String), + imageurl: expect.any(String), + description: expect.any(String), + family: expect.any(String), + foodtype: expect.any(String), + usedas: expect.any(String), + month: expect.arrayContaining([expect.any(String)]), + allergens: expect.any(String), + }), + ]) + ); +}); -}) +test("testing for the get by item function to make sure it returns the item selected", async () => { + const response = await getByItem("pear"); + expect(response).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + id: expect.any(Number), + name: "Pear", + imageurl: expect.any(String), + description: expect.any(String), + family: expect.any(String), + foodtype: expect.any(String), + usedas: expect.any(String), + month: expect.arrayContaining([expect.any(String)]), + allergens: expect.any(String), + }), + ]) + ); +}); -test('testing for the get by item function to make sure it returns the item selected', async() => { -const response= await getByItem('pear') -expect(response).toEqual(expect.arrayContaining([expect.objectContaining({id:expect.any(Number),name:'Pear',imageurl:expect.any(String),description:expect.any(String),family:expect.any(String),foodtype:expect.any(String),usedas:expect.any(String),month:expect.arrayContaining([expect.any(String)]),allergens:expect.any(String)})])); -}) +test("testing for the get by a month function to make sure it returns an item expected ", async () => { + const response = await getByMonth("march"); + expect(response).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + id: expect.any(Number), + name: expect.any(String), + imageurl: expect.any(String), + description: expect.any(String), + family: expect.any(String), + foodtype: expect.any(String), + usedas: expect.any(String), + month: expect.arrayContaining(["March"]), + allergens: expect.any(String), + }), + ]) + ); +}); -test('testing for the get by a month function to make sure it returns an item expected ', async() => { - const response= await getByMonth('march') - expect(response).toEqual(expect.arrayContaining([expect.objectContaining({id:expect.any(Number),name:expect.any(String),imageurl:expect.any(String),description:expect.any(String),family:expect.any(String),foodtype:expect.any(String),usedas:expect.any(String),month:expect.arrayContaining(['March']),allergens:expect.any(String)})])); - }) +test("testing for the get by allergen function to make sure it returns an item expected ", async () => { + const response = await getByAllergen("fish"); + expect(response).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + id: expect.any(Number), + name: expect.any(String), + imageurl: expect.any(String), + description: expect.any(String), + family: expect.any(String), + foodtype: expect.any(String), + usedas: expect.any(String), + month: expect.any(Array), + allergens: "Fish", + }), + ]) + ); +}); afterAll((done) => { - pool.end() - done() - }); \ No newline at end of file + pool.end(); + done(); +}); From 7c1c4f8b2135ad3bdf0c70fe38632930d8dbdce0 Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Fri, 9 Sep 2022 12:16:28 +0100 Subject: [PATCH 55/82] Added and tested models and routes for more searches. Co-authored-by: Fiona Kitchen <100845392+fkit00@users.noreply.github.com> Co-authored-by: Andy Johnson <103585624+multi-vit@users.noreply.github.com> --- app.test.js | 75 ++++++++++++++++++++++++++++++++++++++++++++ models/index.js | 19 +++++++++++ models/index.test.js | 67 ++++++++++++++++++++++++++++++++++++++- routes/index.js | 15 +++++++++ 4 files changed, 175 insertions(+), 1 deletion(-) diff --git a/app.test.js b/app.test.js index b4e4330..c2b723e 100644 --- a/app.test.js +++ b/app.test.js @@ -103,6 +103,81 @@ test("Testing to get by allergens using a query in the produce route", async () ); }); +test("Testing to getByFamily using a query in the produce route", async () => { + const response = await request(app) + .get("/produce?family=fish") + .set("Accept", "application/json"); + expect(response.status).toEqual(200); + expect(response.body).toEqual( + expect.objectContaining({ + success: true, + payload: expect.arrayContaining([ + expect.objectContaining({ + id: expect.any(Number), + name: expect.any(String), + imageurl: expect.any(String), + description: expect.any(String), + family: "Fish", + foodtype: expect.any(String), + usedas: expect.any(String), + month: expect.arrayContaining([expect.any(String)]), + allergens: expect.any(String), + }), + ]), + }) + ); +}); + +test("Testing to getByFoodType using a query in the produce route", async () => { + const response = await request(app) + .get("/produce?foodType=herb") + .set("Accept", "application/json"); + expect(response.status).toEqual(200); + expect(response.body).toEqual( + expect.objectContaining({ + success: true, + payload: expect.arrayContaining([ + expect.objectContaining({ + id: expect.any(Number), + name: expect.any(String), + imageurl: expect.any(String), + description: expect.any(String), + family: expect.any(String), + foodtype: "Herb", + usedas: expect.any(String), + month: expect.arrayContaining([expect.any(String)]), + allergens: expect.any(String), + }), + ]), + }) + ); +}); + +test("Testing to getByUsedAs using a query in the produce route", async () => { + const response = await request(app) + .get("/produce?usedAs=vegetable") + .set("Accept", "application/json"); + expect(response.status).toEqual(200); + expect(response.body).toEqual( + expect.objectContaining({ + success: true, + payload: expect.arrayContaining([ + expect.objectContaining({ + id: expect.any(Number), + name: expect.any(String), + imageurl: expect.any(String), + description: expect.any(String), + family: expect.any(String), + foodtype: expect.any(String), + usedas: "Vegetable", + month: expect.arrayContaining([expect.any(String)]), + allergens: expect.any(String), + }), + ]), + }) + ); +}); + test("Testing that produce/random returns 5 objects", async () => { const response = await request(app) .get("/produce/random?month=January") diff --git a/models/index.js b/models/index.js index 6e31693..c1469d1 100644 --- a/models/index.js +++ b/models/index.js @@ -26,3 +26,22 @@ export async function getByAllergen(allergen) { ); return res.rows; } +export async function getByFamily(family) { + let res = await query(`SELECT * FROM produce WHERE lower($1) ILIKE family;`, [ + family, + ]); + return res.rows; +} +export async function getByFoodType(foodType) { + let res = await query( + `SELECT * FROM produce WHERE lower($1) ILIKE foodtype;`, + [foodType] + ); + return res.rows; +} +export async function getByUsedAs(usedAs) { + let res = await query(`SELECT * FROM produce WHERE lower($1) ILIKE usedas;`, [ + usedAs, + ]); + return res.rows; +} diff --git a/models/index.test.js b/models/index.test.js index 7767e53..c020529 100644 --- a/models/index.test.js +++ b/models/index.test.js @@ -1,5 +1,13 @@ import { pool } from "../db/index.js"; -import { getAll, getByItem, getByMonth, getByAllergen } from "./index.js"; +import { + getAll, + getByItem, + getByMonth, + getByAllergen, + getByFamily, + getByFoodType, + getByUsedAs, +} from "./index.js"; import { test, expect, describe } from "@jest/globals"; test("testing the getAll model retrieves all items from the database", async () => { @@ -80,6 +88,63 @@ test("testing for the get by allergen function to make sure it returns an item e ); }); +test("testing for the getByFamily function to make sure it returns an item expected ", async () => { + const response = await getByFamily("fish"); + expect(response).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + id: expect.any(Number), + name: expect.any(String), + imageurl: expect.any(String), + description: expect.any(String), + family: "Fish", + foodtype: expect.any(String), + usedas: expect.any(String), + month: expect.any(Array), + allergens: expect.any(String), + }), + ]) + ); +}); + +test("testing for the getByFoodType function to make sure it returns an item expected ", async () => { + const response = await getByFoodType("herb"); + expect(response).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + id: expect.any(Number), + name: expect.any(String), + imageurl: expect.any(String), + description: expect.any(String), + family: expect.any(String), + foodtype: "Herb", + usedas: expect.any(String), + month: expect.any(Array), + allergens: expect.any(String), + }), + ]) + ); +}); + +test("testing for the getByUsedAs function to make sure it returns an item expected ", async () => { + const response = await getByUsedAs("vegetable"); + expect(response).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + id: expect.any(Number), + name: expect.any(String), + imageurl: expect.any(String), + description: expect.any(String), + family: expect.any(String), + foodtype: expect.any(String), + usedas: "Vegetable", + month: expect.any(Array), + allergens: expect.any(String), + }), + ]) + ); +}); + afterAll((done) => { pool.end(); done(); diff --git a/routes/index.js b/routes/index.js index 0d65a51..f61cffb 100644 --- a/routes/index.js +++ b/routes/index.js @@ -4,6 +4,9 @@ import { getByItem, getByMonth, getByAllergen, + getByFamily, + getByFoodType, + getByUsedAs, } from "../models/index.js"; import { getRandom } from "../helper_scripts/randomGet.js"; @@ -22,6 +25,18 @@ router.get("/", async function (req, res) { let result = await getByAllergen(req.query.allergen); return res.json({ success: true, payload: result }); } + if (req.query.family !== undefined) { + let result = await getByFamily(req.query.family); + return res.json({ success: true, payload: result }); + } + if (req.query.foodType !== undefined) { + let result = await getByFoodType(req.query.foodType); + return res.json({ success: true, payload: result }); + } + if (req.query.usedAs !== undefined) { + let result = await getByUsedAs(req.query.usedAs); + return res.json({ success: true, payload: result }); + } let result = await getAll(); return res.json({ success: true, payload: result }); }); From a9b2eeeebbbab6872e06292c37bea5a26a30fce5 Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Tue, 18 Oct 2022 14:25:45 +0100 Subject: [PATCH 56/82] Updating data.js. --- db/data.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/db/data.js b/db/data.js index c3331df..4484632 100644 --- a/db/data.js +++ b/db/data.js @@ -11,7 +11,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/019-apple_zxjdqm.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Apples are one of the most commonly grown tree fruits, and there are over seven thousand varieties of apple, with many of those able to be grown in Britain. Despite this, only a few varieties of apple - around twelve - are sold in our supermarkets, and many apples are imported here from other places. All apples are good sources of vitamins A and C, and fibre. Though apples are available year-round in the UK, they are at their best from September through November. Eating apples can be eaten fresh, with the skin on: just make sure to wash them first! For cooking apples, however, you will want to peel the skin away before coring and slicing them, and then using them in cooked recipes. To keep apples from browning after they have been peeled and cut, brush them in lemon juice, or keep them in a bowl of water and lemon juice. When fresh, apples go really well with cheese or in salads. You can also try stuffing cooking apples with other dried fruits or mincemeat before sprinkling them with sugar or spices and baking. Crumbles, tarts, and sauces are also other great ways of using apples. They are very versatile in their application. If growing an apple tree at home, you will want a sunny spot that is away from any frost pockets in your garden. Once established, apple trees are some of the easiest to grow and care for, and as there are so many varieties of apple plant, you should be able to find one to suit your particular microclimate and garden.", family: "Rose", foodType: "Pome", usedAs: "Fruit", @@ -42,7 +42,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Asparagus take a lot of work to grow, and are considered a vegetable delicacy, which is generally reflected in their price tag. They have a distinct savoury flavour. While British and American varieties are green, French asparagus is purple, and Spanish and Dutch asparagus are generally white, due to the different growing processes. All varieties of asparagus have high levels of vitamins A and C, as well as potassium, iron and calcium. You can import asparagus year round, but British asparagus is available from May through July. When buying asparagus, look for tightly packed, pert tips, and straight, firm shoots. When cooking, the only preparation that asparagus needs is washing. For the larger and more flavourful spears of asparagus, you can cut or snap away the woody ends before cooking. You can also pare down the end of the asparagus if needed, to reveal more tender flesh beneath. Boil or steam asparagus for up to five minutes, or grill with oil and seasalt. Asparagus is easy to grow, but new plants need a few years to establish themselves, and also need to be planted in the ground rather than in pots, so you will need patience to grow them.", family: "Asparagus", foodType: "Stem", usedAs: "Vegetable", @@ -160,7 +160,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Blackcurrants are a tart, dark-coloured berry that are at their peak in early to mid-summer. Recent research has suggested that berries - like blackcurrants - can help to prevent the onset of Alzheimers disease. Blackcurrants are also high in vitamin C. When looking for blackcurrants, make sure to pick ones with shiny and unblemished skins that are firm and plump. Blackcurrants will keep for several days in the fridge, and can also be frozen. They can be added raw to fruit salads, or otherwise can be cooked in some sugared water to sweeten them a little. Be careful not to overcook them, or they will lose their flavour. Blackcurrants are great turned into jams, juices and jellies, or when added to crumbles, tarts and other desserts like ice cream. Blackcurrants are fairly easy to grow, and prefer moist to well-drained soil. They thrive in full sun to partial shade, and can be grown in containers too - so long as you have one big enough!", family: "example", foodType: "Berry", usedAs: "Fruit", @@ -172,7 +172,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Bramley apples are a large, green cooking apple, which are available year round, but are at their height from December through until March. They can be eaten uncooked, but their taste will be very different, so this is not advisable. Like most apples, bramley apples are high in fibre, vitamins and antioxidants. Make sure to select bramley apples which are unblemished and firm. They can be boiled or stewed in a variety of recipes to make sauces and desserts. An alternative in recipes could be other varieties of apples, or pears. Bramley apple trees are naturally quite resistant to disease, very productive, and fairly easy to grow, suiting the British climate. Apples are one of the easiest fruit trees to grow, and tend to be popular with a lot of home gardeners because of this.", family: "Ribes", foodType: "Pome", usedAs: "Fruit", From 9734402b2a5ee8d90fd7670d13df32f324260336 Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Tue, 18 Oct 2022 14:35:05 +0100 Subject: [PATCH 57/82] B-group added to data.js. --- db/data.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/data.js b/db/data.js index 4484632..adad384 100644 --- a/db/data.js +++ b/db/data.js @@ -208,7 +208,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Brussels sprouts are a small, green vegetable which are related to cabbages. Their taste is generally sweet and nutty, though occasionally bitter. They grow on stalks, which they are sometimes also sold on, and can be a divisive vegetable! Look for sprouts with plump, bright green heads. The ones still on their stalks will stay fresher for longer, and an alternative to sprouts can be cabbage. Sprouts can be eaten raw in salads. More commonly, however, they’re cooked and eaten as a seasonal side in colder months. If boiling sprouts, you can cut bigger ones in half or score the bases of medium-sized ones to make sure they cook evenly throughout, though this is not necessary for smaller sprouts. You can also stir fry them, and they can go nicely if cooked with cubed bacon or ham. Sprouts cook quite quickly, so make sure you check on them regularly to avoid them being overcooked and losing their taste. Sprouts are quite slow growing, and will take most of the year to grow. However, they crop from autumn through until spring.", family: "Cabbage", foodType: "Leaf", usedAs: "Vegetable", From fdabdfc45abf95e049e1d3dabd2641b6947ea14a Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Tue, 18 Oct 2022 15:37:05 +0100 Subject: [PATCH 58/82] Added descriptions for data.js. --- db/data.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/db/data.js b/db/data.js index adad384..2945bd8 100644 --- a/db/data.js +++ b/db/data.js @@ -281,7 +281,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "A firm, oddly-shaped, pale vegetable, with a taste somewhat similar to celery. Celeriac is usually enjoyed mashed like potatoes or roasted, though it is a root vegetable which is agreeable to a lot of different winter dishes. When choosing a celeriac, avoid any which look discoloured or which are not fully firm. Alternatives to celeriac include butternut squash, turnips and swede. Celeriac discolours quickly once peeled, so make sure to store any leftovers in a bowl of lemon water, or acidulated water. Celeriac oven chips, remoulade, and cheesy celeriac mash are some great ways to use this vegetable. Celeriac are not too difficult to grow, but they do take a very long time to mature, and need a bit of space.", family: "Parsley", foodType: "Root", usedAs: "Vegetable", @@ -346,7 +346,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Chestnuts are a shiny, dark brown nut, famously associated with autumn and winter. Comforting and crumbly, they should not be eaten raw, so make sure you roast chestnuts before consuming them. Like all nuts, chestnuts are rich in antioxidants, high in fats, and support gut and heart health, though tree nut allergies are the most common type of allergy, and reactions can be severe, so nuts should be handled and prepared with care to avoid cross-contamination. When cooking chestnuts, make sure to rinse them thoroughly before piercing the skin to allow trapped air to escape while they roast. Chestnuts can be added to stuffing, mash, soups, and other recipes, and an alternative could be hazelnut. Chestnut trees can take years to grow, but can crop within five years, so they are not impossible to cultivate.", family: "Beech", foodType: "Nut", usedAs: "Nut", @@ -370,7 +370,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Clementines are a small and sweet citrus fruit which are characterised by their loose and easily-peeled skin. They are in season in the winter, from November through February, though alternatives which may be available in other seasons include oranges, satsumas and mandarins. The outside appearance of the skin of clementines does not indicate quality, so look for fruits which feel heavy, as they will be juicier. Clementines are usually eaten on their own, and are best eaten immediately after being peeled, though segments can also be dipped into melted chocolate. Clementines, like most citrus plants, are not hardy in the UK and do not grow well in our climate, though they can be cultivated in pots in sunnier spots and brought inside over winter.", family: "Citrus", foodType: "Citrus", usedAs: "Fruit", @@ -451,7 +451,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Cranberries are tart, red berries which are most famously used in winter recipes. They are naturally high in a wide range of vitamins and minerals, and can contribute powerfully to a varied and balanced diet. At their best between October and December, cranberries can be used in a wide variety of dishes, such as in making sauces, desserts, to dress meats, and in drinks. Look for plump, firm, bright berries when you’re shopping for fresh cranberries. You can also buy them dried! Cranberries can be grown at home in the UK, whether in pots or as ground shrubs, though they do also grow wild throughout North Europe and North America. ", family: "Heath", foodType: "Berry", usedAs: "Fruit", @@ -475,7 +475,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Dates are one of the oldest cultivated fruits, can be bought dried or fresh, and are sweet, rich and chewy. There are a lot of different varieties of date, which are usually grown in warmer climates like North Africa and the Middle East, but only some of them are exported to the UK. Fresh dates are at their best in winter, around November to January. Whether fresh or dried, dates should look plump and glossy. Dried dates will be ready to eat straight away, but fresh dates may need some further preparation. The UK does not have naturally high enough temperatures to be able to allow date plants to flourish.", family: "Palm", foodType: "Berry", usedAs: "Fruit", From 970a0b01bee0c8340c500c83a3531c4497b78d53 Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Tue, 18 Oct 2022 19:21:04 +0100 Subject: [PATCH 59/82] Descriptions added to data.js. --- db/data.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/db/data.js b/db/data.js index 2945bd8..3a7c429 100644 --- a/db/data.js +++ b/db/data.js @@ -487,7 +487,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Duck meat is dark, rich and flavourful when compared against other meats like chicken. Farmed duck is available all year round, but wild duck is available from October through December. Duck meat is nutritious, with high levels of protein, vitamins, and minerals like zinc and iron. It also has a comparatively high fat content, but fat can be trimmed by removing the skin and the fat layer below it, prior to cooking. Duck is popular in several cuisines, and is often paired with fruits like oranges, cranberries and raspberries. Duck is often roasted, though it can be fried, grilled, and cooked in a variety of other ways. It can also be marinated and smoked, and marinating especially can help with wild duck, which can sometimes be dry. When selecting duck, make sure to look for clear, soft, unblemished skin and flesh.", family: "Meat", foodType: "Fowl", usedAs: "Meat", @@ -559,7 +559,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Goose meat is succulent and rich, and the bird is often used as an alternative to turkey for Christmas meals. Goose has a high fat content, but most of this is contained in the skin, which can be rendered at home to make fat for roasting and frying. Goose is in season from September through January, though you should also be able to find frozen goose all year round. Goose is often roasted, and is commonly served with sharper-flavoured fruit sauces, like apple, cranberry or cherry. When buying goose, look for a bird with a good layer of fat, and plump and unblemished skin.", family: "Meat", foodType: "Fowl", usedAs: "Meat", @@ -607,7 +607,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "A small domesticated bird, which is a little bit gamier in taste than chicken. Guinea fowl originate from Africa, though can be found across Europe. They are at their best in the autumn months, between September and November. Guinea fowl has a lower fat content and a higher fat content than chicken. As guinea fowl is drier than chicken naturally, it can dry out while cooking, so take precautions not to overcook the bird. Wrapping guinea fowl with pancetta can prevent it from drying out, as can marinating it. Guinea fowl is a great option for roasting with stuffing.", family: "Meat", foodType: "Fowl", usedAs: "Meat", From 85a3526afac4dcbaf15bdd3feb49dd5e8861c400 Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Tue, 18 Oct 2022 19:36:50 +0100 Subject: [PATCH 60/82] Data.js for Nov finished up to L. --- db/data.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/data.js b/db/data.js index 3a7c429..493bc40 100644 --- a/db/data.js +++ b/db/data.js @@ -631,7 +631,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Jerusalem artichokes are not true artichokes, but are actually a member of the sunflower family! They are a root vegetable with a crunchy texture and nutty flavour, and resemble ginger. The name does not come from the location of Jerusalem, but instead from the Italian word for sunflower, which is girasole. Jerusalem artichokes can be cooked in much the same way as potatoes or parsnips. Their flesh will discolour if exposed to air, so make sure to keep any leftovers which have been peeled in bowls of acidulated water. Their skins should be light brown, firm and fresh, without any soft or dark patches. The plants are easy to grow, and can be grown from tubers in the spring.", family: "Daisy", foodType: "Root", usedAs: "Vegetable", From 9e5734f3a5be48bae019f905d2c14835df32fdec Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Wed, 19 Oct 2022 11:16:14 +0100 Subject: [PATCH 61/82] November descriptions added to data.js. --- db/data.js | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/db/data.js b/db/data.js index 493bc40..a6587cf 100644 --- a/db/data.js +++ b/db/data.js @@ -724,7 +724,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Leeks are a vegetable in the same family as onions, garlic and chives. The edible part of the plant is a long, stalk-shaped, tightly-packed sheathe of leaves, which is white-green in colour. Leeks are high in nutrients, especially magnesium, and vitamins A, C and K. When buying leeks, look for vegetables with unblemished and firm bases, and bright, crisp green leaves. They are a versatile vegetable, which can be used in much the same way as onions and other alliums in recipes. They make for a great addition to recipes like casseroles, pies, and soups, or alongside fish like salmon, and can be steamed and stir fried. Leeks are fairly easy to grow, and can be grown in containers, but they do take some time and attention to mature. Sown in spring, they can be harvested around autumn and winter.", family: "Amaryllis", foodType: "Root", usedAs: "Vegetable", @@ -837,7 +837,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Mussels are a small shellfish. Similar to oysters, mussels sold in supermarkets and fishmongers are farmed, as care must be taken regarding what they feed on while growing. Fresh mussels are at their height from autumn through spring, though they can be bought frozen, smoked, or bottled year-round. They are a strong source of protein, iron, zinc, selenium, iodine, and omega 3 fatty acids. Alternatives to mussels could include oysters, clams or cockles. Mussels are highly perishable, and should be eaten on the day they are bought. Avoid buying any mussels with chipped or damaged shells. Fresh mussels tend to be tightly closed. Mussels can be used in pastas and soups, and can also be served as a main alongside vegetables.", family: "Fish", foodType: "Fish", usedAs: "Fish", @@ -910,7 +910,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Oysters are considered a luxury food globally for their succulent and delicate flesh and flavouring. There are various kinds of oysters, including natives, Pacific, and rock oysters. Oysters should be eaten from September through April, as during the summer months, oysters are spawning, and their flesh becomes unpleasantly soft. Rock oysters are available year round, however. Live, just-opened oysters have the best flavour, and oysters are often served live and raw on ice with lemon. Shucked - or opened - oysters should be eaten on the day they are opened. Fresh oysters can otherwise be kept in the fridge for up to three days. Rock oysters are cheaper and larger, and are considered better for cooking for this reason. Oysters can be cooked into pies, wrapped with bacon and roasted, or pan fried for a few minutes for serving in other meals.", family: "Fish", foodType: "Fish", usedAs: "Fish", @@ -956,7 +956,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Parsnips are a pale root vegetable which are a member of the carrot family - which you might guess from the shape! They are commonly mashed or roasted. They have an earthy, sweet and gentle flavour. They suit lots of winter recipes like roasts, soups and stews. Alternatives to parsnips in recipes can include carrot or turnip. Young or smaller parsnips do not need peeling before cooking, just make sure to scrub them clean thoroughly. For bigger or older parsnips, peel them thinly before roasting or boiling. Look for firm, non-shrivelled parsnips, and avoid ones with brown patches or bruises. Parsnips are fairly easy to grow and require little maintenance, and can be left in the ground until you are ready to use them. If sown in spring, your parsnips should be ready by autumn.", family: "Parsley", foodType: "Root", usedAs: "Vegetable", @@ -988,7 +988,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Pears are a sweet fruit which are wider at the bottom than the top. There are thousands of varieties, only some of which are sold in the UK. Their flesh is fine, granular, and much more fragile than that of apples, and generally, their taste improves after they have been picked. Pears are delicate and bruise easily, so try to buy firm - but not hard - fruits, so that they can ripen a little at home. Avoid buying pears which look very bruised or mushy. The many varieties of pears also have some variance in flavour. Conference pears are the more commonly-seen pear on sale in the UK. Pears can be eaten raw, but they can also be stuffed and cooked, or peeled and chopped to be added into pies or made into sauces and dressings. Pears can grow in the UK, but should be planted in areas avoiding frost pockets, and it can take them several years to mature and start producing fruit.", family: "Rose", foodType: "Pome", usedAs: "Fruit", @@ -1117,7 +1117,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Pumpkins are an iconic squash, traditionally orange and associated with Halloween and autumn, though they come in various colours and sizes. They are a strong source of fibre, vitamins and minerals, and are in season from October through December. Pumpkins can be tricky to work with, and it can be helpful to cut them into sections to divest them of their flesh for cooking. Make sure to scoop out strings and seeds, and cut the pumpkin into wedges or chunks as required. Pumpkin can be boiled or roasted, and used as mash, in savoury meals, or in sweet desserts like pumpkin pies. Pumpkins grow comparatively quickly, and are not too hard to care for, though they will need a bit of space.", family: "Cucurbita", foodType: "Gourd", usedAs: "Vegetable", @@ -1141,7 +1141,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Quince is a fruit with a smooth, golden skin, which grows in both apple and pear-shaped varieties. They have a hard and bitter flesh, which means they are largely used in cooking, rather than being eaten raw. When cooked, the flesh turns a deep pink colour. They contain high levels of pectin, which makes them a really good contender for jellies, jams, chutneys, and other kinds of preserves. They also suit tarts and pies. Look for quinces with firm and unblemished skins, and try to avoid downy skins on quinces, as this means they are unripe. Quince trees are very adaptable, tolerate a variety of soils, and are hardy in the UK climate, meaning they can be grown here without any special care.", family: "Rose", foodType: "Pome", usedAs: "Fruit", @@ -1250,7 +1250,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Salsify is a root vegetable from the dandelion family, and looks like a long, thin parsnip, with cream-coloured flesh and thick skin. When buying salsify, look for firm vegetables with the green tops still attached. To prepare, scrub the root under cold water to make sure that it is clean. Then, peel, and keep the peeled pieces of salsify in a bowl of water with a bit of lemon juice. Like most root vegetables, salsify can be mashed, roasted and boiled, and used in recipes like soups and stews, and when cooked, it has a similar flavour to oysters. Salsify requires a good soil depth and germination can be hit and miss. However, once germinated, salsify grows easier than carrots and parsnips do.", family: "Daisy", foodType: "Root", usedAs: "Vegetable", @@ -1359,7 +1359,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Swede - which is also known as rutabaga or neeps - is a root vegetable which is often confused with turnip. Swede is round in shape, and has a purple-green skin, with yellow flesh. They can be quite difficult to cut through, but tend to disintegrate if overcooked, so be mindful of cooking times when using swede in recipes. Smaller swedes tend to be a little more tender and sweeter in flavour. To use swede, peel it like you would a potato, and then chunk it for roasting or boiling. As a root vegetable, it can be used in mash, boiled or roasted, and in the place of other root vegetables in recipes like pies and stews. Swedes are a crop which can take a long time to mature, up to half a year. They are very hardy, however, and do well in cool and damp climates.", family: "Cabbage", foodType: "Root", usedAs: "Vegetable", @@ -1371,7 +1371,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Sweet potatoes are tubers with bright orange flesh. When cooked, they have a creamy, buttery texture which is sweet, as their name suggests, though they are sometimes known as yams in the United States. They are rich in fibre and vitamins, and can act as a more nutritional alternative to regular potatoes, though care should be taken when cooking, as sweet potatoes are much more tender than regular potatoes once cooked. Traditionally, sweet potatoes can be boiled, mashed, roasted, and turned into fries, though they are also great added to dishes like curries. Look for unblemished skins and firm tubers when shopping, and alternatives you could consider include potatoes or pumpkins. Sweet potatoes do best when grown under covers, like in a greenhouse or a polytunnel, as they are native to the subtropical Americas, and require warm, sheltered and sunny growing conditions to thrive.", family: "Morning Glory", foodType: "Root", usedAs: "Vegetable", @@ -1455,7 +1455,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Turnips are white root vegetables, though at the tops where they have been exposed to sunlight while growing, they will often have bursts of red, purple or green colouring on their skin. They are a good source of vitamin C and as a root vegetable, have many robust uses and applications in cooking. Turnips can be purchased year round, though baby turnips are in season in June and July, and peak season is October through February. Look for firm, heavy vegetables when purchasing. The smaller and younger the turnip, the more tender the vegetable, and sweeter its flavour. As a root vegetable, turnips can be mashed, roasted, boiled, and used in a variety of recipes where you would use root vegetables. An alternative to turnips could be swede. Turnips are quick and fairly easy to grow from seed, and should be ready within a few weeks. They can be grown in containers outdoors, and so are a good option for gardeners with a variety of spaces available to them.", family: "Cabbage", foodType: "Root", usedAs: "Vegetable", @@ -1467,7 +1467,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "In Britain today, venison specifically refers to deer meat, though in other countries and historically, it could refer to game from any furred animal, or animals like elk and reindeer. It is a dark, lean and tender meat, and age does affect the meat: the younger the animal, the more tender its meat. Additional factors like diet, and how the animal was raised and how it was handled after it was killed, can all affect its meat. Farmed venison is available year round, as is wild roe deer. Wild red and fallow deer are only in season from late October through mid-February, however. Cuts of venison should be chosen according to how you want to cook it, as different cuts from different parts of the animal will have different qualities that will better suit roasting, grilling, barbecuing, or stewing processes, and so on. The market for venison is steadily growing as consumers seek alternatives to traditionally farmed animals like chicken and cows. As deer have only been farmed in the past few decades, and are not domesticated animals, the farming process for many suppliers tends to be less intense and free range. However, increases to scale farming to match demand will not necessarily scale sustainability, as the energy demands of intensive meat farming remain regardless of the meat which is being farmed.", family: "Meat", foodType: "Meat", usedAs: "Meat", From b161d349811b71a36edf51434c0730bc6fd9d0d7 Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Wed, 19 Oct 2022 11:44:36 +0100 Subject: [PATCH 62/82] imageURL strings updated. --- db/data.js | 84 +++++++++++++++++++++++++++--------------------------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/db/data.js b/db/data.js index a6587cf..a2c92bb 100644 --- a/db/data.js +++ b/db/data.js @@ -40,7 +40,7 @@ const produce = [ { foodName: "Asparagus", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175319/Seasonal/001-asparagus_zq5nng.png", description: "Asparagus take a lot of work to grow, and are considered a vegetable delicacy, which is generally reflected in their price tag. They have a distinct savoury flavour. While British and American varieties are green, French asparagus is purple, and Spanish and Dutch asparagus are generally white, due to the different growing processes. All varieties of asparagus have high levels of vitamins A and C, as well as potassium, iron and calcium. You can import asparagus year round, but British asparagus is available from May through July. When buying asparagus, look for tightly packed, pert tips, and straight, firm shoots. When cooking, the only preparation that asparagus needs is washing. For the larger and more flavourful spears of asparagus, you can cut or snap away the woody ends before cooking. You can also pare down the end of the asparagus if needed, to reveal more tender flesh beneath. Boil or steam asparagus for up to five minutes, or grill with oil and seasalt. Asparagus is easy to grow, but new plants need a few years to establish themselves, and also need to be planted in the ground rather than in pots, so you will need patience to grow them.", family: "Asparagus", @@ -158,7 +158,7 @@ const produce = [ { foodName: "Blackcurrants", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175319/Seasonal/002-blackcurrant_vnquni.png", description: "Blackcurrants are a tart, dark-coloured berry that are at their peak in early to mid-summer. Recent research has suggested that berries - like blackcurrants - can help to prevent the onset of Alzheimers disease. Blackcurrants are also high in vitamin C. When looking for blackcurrants, make sure to pick ones with shiny and unblemished skins that are firm and plump. Blackcurrants will keep for several days in the fridge, and can also be frozen. They can be added raw to fruit salads, or otherwise can be cooked in some sugared water to sweeten them a little. Be careful not to overcook them, or they will lose their flavour. Blackcurrants are great turned into jams, juices and jellies, or when added to crumbles, tarts and other desserts like ice cream. Blackcurrants are fairly easy to grow, and prefer moist to well-drained soil. They thrive in full sun to partial shade, and can be grown in containers too - so long as you have one big enough!", family: "example", @@ -170,7 +170,7 @@ const produce = [ { foodName: "Bramley Apple", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175319/Seasonal/003-apple_yzjgbk.png", description: "Bramley apples are a large, green cooking apple, which are available year round, but are at their height from December through until March. They can be eaten uncooked, but their taste will be very different, so this is not advisable. Like most apples, bramley apples are high in fibre, vitamins and antioxidants. Make sure to select bramley apples which are unblemished and firm. They can be boiled or stewed in a variety of recipes to make sauces and desserts. An alternative in recipes could be other varieties of apples, or pears. Bramley apple trees are naturally quite resistant to disease, very productive, and fairly easy to grow, suiting the British climate. Apples are one of the easiest fruit trees to grow, and tend to be popular with a lot of home gardeners because of this.", family: "Ribes", @@ -206,9 +206,9 @@ const produce = [ { foodName: "Brussels Sprouts", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175318/Seasonal/004-brussels-sprouts_zlkp8m.png", description: - "Brussels sprouts are a small, green vegetable which are related to cabbages. Their taste is generally sweet and nutty, though occasionally bitter. They grow on stalks, which they are sometimes also sold on, and can be a divisive vegetable! Look for sprouts with plump, bright green heads. The ones still on their stalks will stay fresher for longer, and an alternative to sprouts can be cabbage. Sprouts can be eaten raw in salads. More commonly, however, they’re cooked and eaten as a seasonal side in colder months. If boiling sprouts, you can cut bigger ones in half or score the bases of medium-sized ones to make sure they cook evenly throughout, though this is not necessary for smaller sprouts. You can also stir fry them, and they can go nicely if cooked with cubed bacon or ham. Sprouts cook quite quickly, so make sure you check on them regularly to avoid them being overcooked and losing their taste. Sprouts are quite slow growing, and will take most of the year to grow. However, they crop from autumn through until spring.", + "Brussels sprouts are a small, green vegetable which are related to cabbages. Their taste is generally sweet and nutty, though occasionally bitter. They grow on stalks, which they are sometimes also sold on, and can be a divisive vegetable! Look for sprouts with plump, bright green heads. The ones still on their stalks will stay fresher for longer, and an alternative to sprouts can be cabbage. Sprouts can be eaten raw in salads. More commonly, however, they are cooked and eaten as a seasonal side in colder months. If boiling sprouts, you can cut bigger ones in half or score the bases of medium-sized ones to make sure they cook evenly throughout, though this is not necessary for smaller sprouts. You can also stir fry them, and they can go nicely if cooked with cubed bacon or ham. Sprouts cook quite quickly, so make sure you check on them regularly to avoid them being overcooked and losing their taste. Sprouts are quite slow growing, and will take most of the year to grow. However, they crop from autumn through until spring.", family: "Cabbage", foodType: "Leaf", usedAs: "Vegetable", @@ -255,7 +255,7 @@ const produce = [ { foodName: "Cauliflower", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175319/Seasonal/005-cauliflower_pkwdkp.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -279,7 +279,7 @@ const produce = [ { foodName: "Celeriac", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175322/Seasonal/037-celery-root_jklewc.png", description: "A firm, oddly-shaped, pale vegetable, with a taste somewhat similar to celery. Celeriac is usually enjoyed mashed like potatoes or roasted, though it is a root vegetable which is agreeable to a lot of different winter dishes. When choosing a celeriac, avoid any which look discoloured or which are not fully firm. Alternatives to celeriac include butternut squash, turnips and swede. Celeriac discolours quickly once peeled, so make sure to store any leftovers in a bowl of lemon water, or acidulated water. Celeriac oven chips, remoulade, and cheesy celeriac mash are some great ways to use this vegetable. Celeriac are not too difficult to grow, but they do take a very long time to mature, and need a bit of space.", family: "Parsley", @@ -320,7 +320,7 @@ const produce = [ { foodName: "Cherry", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175319/Seasonal/006-cherries_hkayof.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -344,7 +344,7 @@ const produce = [ { foodName: "Chestnut", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175319/Seasonal/007-chestnut_g2wdsp.png", description: "Chestnuts are a shiny, dark brown nut, famously associated with autumn and winter. Comforting and crumbly, they should not be eaten raw, so make sure you roast chestnuts before consuming them. Like all nuts, chestnuts are rich in antioxidants, high in fats, and support gut and heart health, though tree nut allergies are the most common type of allergy, and reactions can be severe, so nuts should be handled and prepared with care to avoid cross-contamination. When cooking chestnuts, make sure to rinse them thoroughly before piercing the skin to allow trapped air to escape while they roast. Chestnuts can be added to stuffing, mash, soups, and other recipes, and an alternative could be hazelnut. Chestnut trees can take years to grow, but can crop within five years, so they are not impossible to cultivate.", family: "Beech", @@ -356,7 +356,7 @@ const produce = [ { foodName: "Chicory", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175320/Seasonal/008-chicory_dxp4o2.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Daisy", @@ -368,7 +368,7 @@ const produce = [ { foodName: "Clementine", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175321/Seasonal/021-orange_oafni2.png", description: "Clementines are a small and sweet citrus fruit which are characterised by their loose and easily-peeled skin. They are in season in the winter, from November through February, though alternatives which may be available in other seasons include oranges, satsumas and mandarins. The outside appearance of the skin of clementines does not indicate quality, so look for fruits which feel heavy, as they will be juicier. Clementines are usually eaten on their own, and are best eaten immediately after being peeled, though segments can also be dipped into melted chocolate. Clementines, like most citrus plants, are not hardy in the UK and do not grow well in our climate, though they can be cultivated in pots in sunnier spots and brought inside over winter.", family: "Citrus", @@ -380,7 +380,7 @@ const produce = [ { foodName: "Cod", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/027-halibut_wagn5i.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Fish", @@ -449,7 +449,7 @@ const produce = [ { foodName: "Cranberry", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175320/Seasonal/011-cranberry_h8ovbv.png", description: "Cranberries are tart, red berries which are most famously used in winter recipes. They are naturally high in a wide range of vitamins and minerals, and can contribute powerfully to a varied and balanced diet. At their best between October and December, cranberries can be used in a wide variety of dishes, such as in making sauces, desserts, to dress meats, and in drinks. Look for plump, firm, bright berries when you’re shopping for fresh cranberries. You can also buy them dried! Cranberries can be grown at home in the UK, whether in pots or as ground shrubs, though they do also grow wild throughout North Europe and North America. ", family: "Heath", @@ -461,7 +461,7 @@ const produce = [ { foodName: "Damson", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175319/Seasonal/038-plum-1_btgcjd.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -473,7 +473,7 @@ const produce = [ { foodName: "Date", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175320/Seasonal/012-date-palm_sdx44r.png", description: "Dates are one of the oldest cultivated fruits, can be bought dried or fresh, and are sweet, rich and chewy. There are a lot of different varieties of date, which are usually grown in warmer climates like North Africa and the Middle East, but only some of them are exported to the UK. Fresh dates are at their best in winter, around November to January. Whether fresh or dried, dates should look plump and glossy. Dried dates will be ready to eat straight away, but fresh dates may need some further preparation. The UK does not have naturally high enough temperatures to be able to allow date plants to flourish.", family: "Palm", @@ -485,7 +485,7 @@ const produce = [ { foodName: "Duck", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175320/Seasonal/013-duck_av61dl.png", description: "Duck meat is dark, rich and flavourful when compared against other meats like chicken. Farmed duck is available all year round, but wild duck is available from October through December. Duck meat is nutritious, with high levels of protein, vitamins, and minerals like zinc and iron. It also has a comparatively high fat content, but fat can be trimmed by removing the skin and the fat layer below it, prior to cooking. Duck is popular in several cuisines, and is often paired with fruits like oranges, cranberries and raspberries. Duck is often roasted, though it can be fried, grilled, and cooked in a variety of other ways. It can also be marinated and smoked, and marinating especially can help with wild duck, which can sometimes be dry. When selecting duck, make sure to look for clear, soft, unblemished skin and flesh.", family: "Meat", @@ -557,7 +557,7 @@ const produce = [ { foodName: "Goose", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175320/Seasonal/014-goose_nbtpy1.png", description: "Goose meat is succulent and rich, and the bird is often used as an alternative to turkey for Christmas meals. Goose has a high fat content, but most of this is contained in the skin, which can be rendered at home to make fat for roasting and frying. Goose is in season from September through January, though you should also be able to find frozen goose all year round. Goose is often roasted, and is commonly served with sharper-flavoured fruit sauces, like apple, cranberry or cherry. When buying goose, look for a bird with a good layer of fat, and plump and unblemished skin.", family: "Meat", @@ -581,7 +581,7 @@ const produce = [ { foodName: "Grapefruit", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175320/Seasonal/015-grapefruit_ohykt5.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Citrus", @@ -605,7 +605,7 @@ const produce = [ { foodName: "Guinea Fowl", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175320/Seasonal/016-fowl_ac08xk.png", description: "A small domesticated bird, which is a little bit gamier in taste than chicken. Guinea fowl originate from Africa, though can be found across Europe. They are at their best in the autumn months, between September and November. Guinea fowl has a lower fat content and a higher fat content than chicken. As guinea fowl is drier than chicken naturally, it can dry out while cooking, so take precautions not to overcook the bird. Wrapping guinea fowl with pancetta can prevent it from drying out, as can marinating it. Guinea fowl is a great option for roasting with stuffing.", family: "Meat", @@ -629,7 +629,7 @@ const produce = [ { foodName: "Jerusalem Artichoke", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175319/Seasonal/039-ginger_hevlfq.png", description: "Jerusalem artichokes are not true artichokes, but are actually a member of the sunflower family! They are a root vegetable with a crunchy texture and nutty flavour, and resemble ginger. The name does not come from the location of Jerusalem, but instead from the Italian word for sunflower, which is girasole. Jerusalem artichokes can be cooked in much the same way as potatoes or parsnips. Their flesh will discolour if exposed to air, so make sure to keep any leftovers which have been peeled in bowls of acidulated water. Their skins should be light brown, firm and fresh, without any soft or dark patches. The plants are easy to grow, and can be grown from tubers in the spring.", family: "Daisy", @@ -722,7 +722,7 @@ const produce = [ { foodName: "Leek", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175321/Seasonal/018-leek_dnkjyf.png", description: "Leeks are a vegetable in the same family as onions, garlic and chives. The edible part of the plant is a long, stalk-shaped, tightly-packed sheathe of leaves, which is white-green in colour. Leeks are high in nutrients, especially magnesium, and vitamins A, C and K. When buying leeks, look for vegetables with unblemished and firm bases, and bright, crisp green leaves. They are a versatile vegetable, which can be used in much the same way as onions and other alliums in recipes. They make for a great addition to recipes like casseroles, pies, and soups, or alongside fish like salmon, and can be steamed and stir fried. Leeks are fairly easy to grow, and can be grown in containers, but they do take some time and attention to mature. Sown in spring, they can be harvested around autumn and winter.", family: "Amaryllis", @@ -742,7 +742,7 @@ const produce = [ { foodName: "Lemon", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175320/Seasonal/019-lemon_vk7cd1.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Citrus", @@ -835,7 +835,7 @@ const produce = [ { foodName: "Mussels", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175320/Seasonal/020-mussel_jwayyc.png", description: "Mussels are a small shellfish. Similar to oysters, mussels sold in supermarkets and fishmongers are farmed, as care must be taken regarding what they feed on while growing. Fresh mussels are at their height from autumn through spring, though they can be bought frozen, smoked, or bottled year-round. They are a strong source of protein, iron, zinc, selenium, iodine, and omega 3 fatty acids. Alternatives to mussels could include oysters, clams or cockles. Mussels are highly perishable, and should be eaten on the day they are bought. Avoid buying any mussels with chipped or damaged shells. Fresh mussels tend to be tightly closed. Mussels can be used in pastas and soups, and can also be served as a main alongside vegetables.", family: "Fish", @@ -859,7 +859,7 @@ const produce = [ { foodName: "New Potatoes", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175321/Seasonal/026-potato_tent9c.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Nightshade", @@ -896,7 +896,7 @@ const produce = [ { foodName: "Orange", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175321/Seasonal/021-orange_oafni2.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Citrus", @@ -908,7 +908,7 @@ const produce = [ { foodName: "Oyster", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175321/Seasonal/022-oyster_njpa8x.png", description: "Oysters are considered a luxury food globally for their succulent and delicate flesh and flavouring. There are various kinds of oysters, including natives, Pacific, and rock oysters. Oysters should be eaten from September through April, as during the summer months, oysters are spawning, and their flesh becomes unpleasantly soft. Rock oysters are available year round, however. Live, just-opened oysters have the best flavour, and oysters are often served live and raw on ice with lemon. Shucked - or opened - oysters should be eaten on the day they are opened. Fresh oysters can otherwise be kept in the fridge for up to three days. Rock oysters are cheaper and larger, and are considered better for cooking for this reason. Oysters can be cooked into pies, wrapped with bacon and roasted, or pan fried for a few minutes for serving in other meals.", family: "Fish", @@ -954,7 +954,7 @@ const produce = [ { foodName: "Parsnip", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175321/Seasonal/023-parsnip_zo8cbr.png", description: "Parsnips are a pale root vegetable which are a member of the carrot family - which you might guess from the shape! They are commonly mashed or roasted. They have an earthy, sweet and gentle flavour. They suit lots of winter recipes like roasts, soups and stews. Alternatives to parsnips in recipes can include carrot or turnip. Young or smaller parsnips do not need peeling before cooking, just make sure to scrub them clean thoroughly. For bigger or older parsnips, peel them thinly before roasting or boiling. Look for firm, non-shrivelled parsnips, and avoid ones with brown patches or bruises. Parsnips are fairly easy to grow and require little maintenance, and can be left in the ground until you are ready to use them. If sown in spring, your parsnips should be ready by autumn.", family: "Parsley", @@ -986,7 +986,7 @@ const produce = [ { foodName: "Pear", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175321/Seasonal/024-pear_rbtu1o.png", description: "Pears are a sweet fruit which are wider at the bottom than the top. There are thousands of varieties, only some of which are sold in the UK. Their flesh is fine, granular, and much more fragile than that of apples, and generally, their taste improves after they have been picked. Pears are delicate and bruise easily, so try to buy firm - but not hard - fruits, so that they can ripen a little at home. Avoid buying pears which look very bruised or mushy. The many varieties of pears also have some variance in flavour. Conference pears are the more commonly-seen pear on sale in the UK. Pears can be eaten raw, but they can also be stuffed and cooked, or peeled and chopped to be added into pies or made into sauces and dressings. Pears can grow in the UK, but should be planted in areas avoiding frost pockets, and it can take them several years to mature and start producing fruit.", family: "Rose", @@ -1041,7 +1041,7 @@ const produce = [ { foodName: "Plum", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175321/Seasonal/025-plum_lsppvy.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Rose", @@ -1103,7 +1103,7 @@ const produce = [ { foodName: "Potato", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175321/Seasonal/026-potato_tent9c.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Nightshade", @@ -1115,7 +1115,7 @@ const produce = [ { foodName: "Pumpkin", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175321/Seasonal/027-pumpkin_djp1qo.png", description: "Pumpkins are an iconic squash, traditionally orange and associated with Halloween and autumn, though they come in various colours and sizes. They are a strong source of fibre, vitamins and minerals, and are in season from October through December. Pumpkins can be tricky to work with, and it can be helpful to cut them into sections to divest them of their flesh for cooking. Make sure to scoop out strings and seeds, and cut the pumpkin into wedges or chunks as required. Pumpkin can be boiled or roasted, and used as mash, in savoury meals, or in sweet desserts like pumpkin pies. Pumpkins grow comparatively quickly, and are not too hard to care for, though they will need a bit of space.", family: "Cucurbita", @@ -1127,7 +1127,7 @@ const produce = [ { foodName: "Purple Sprouting Broccoli", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175319/Seasonal/040-broccoli_n360kh.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -1139,7 +1139,7 @@ const produce = [ { foodName: "Quince", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175321/Seasonal/028-quince_l6gzts.png", description: "Quince is a fruit with a smooth, golden skin, which grows in both apple and pear-shaped varieties. They have a hard and bitter flesh, which means they are largely used in cooking, rather than being eaten raw. When cooked, the flesh turns a deep pink colour. They contain high levels of pectin, which makes them a really good contender for jellies, jams, chutneys, and other kinds of preserves. They also suit tarts and pies. Look for quinces with firm and unblemished skins, and try to avoid downy skins on quinces, as this means they are unripe. Quince trees are very adaptable, tolerate a variety of soils, and are hardy in the UK climate, meaning they can be grown here without any special care.", family: "Rose", @@ -1212,7 +1212,7 @@ const produce = [ { foodName: "Rhubarb", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175321/Seasonal/029-rhubarb_syyom4.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Buckwheat", @@ -1248,7 +1248,7 @@ const produce = [ { foodName: "Salsify", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175321/Seasonal/023-parsnip_zo8cbr.png", description: "Salsify is a root vegetable from the dandelion family, and looks like a long, thin parsnip, with cream-coloured flesh and thick skin. When buying salsify, look for firm vegetables with the green tops still attached. To prepare, scrub the root under cold water to make sure that it is clean. Then, peel, and keep the peeled pieces of salsify in a bowl of water with a bit of lemon juice. Like most root vegetables, salsify can be mashed, roasted and boiled, and used in recipes like soups and stews, and when cooked, it has a similar flavour to oysters. Salsify requires a good soil depth and germination can be hit and miss. However, once germinated, salsify grows easier than carrots and parsnips do.", family: "Daisy", @@ -1296,7 +1296,7 @@ const produce = [ { foodName: "Spring Greens", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175319/Seasonal/042-salad_l7a7te.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Cabbage", @@ -1357,7 +1357,7 @@ const produce = [ { foodName: "Swede", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175322/Seasonal/034-turnip_ftdzdb.png", description: "Swede - which is also known as rutabaga or neeps - is a root vegetable which is often confused with turnip. Swede is round in shape, and has a purple-green skin, with yellow flesh. They can be quite difficult to cut through, but tend to disintegrate if overcooked, so be mindful of cooking times when using swede in recipes. Smaller swedes tend to be a little more tender and sweeter in flavour. To use swede, peel it like you would a potato, and then chunk it for roasting or boiling. As a root vegetable, it can be used in mash, boiled or roasted, and in the place of other root vegetables in recipes like pies and stews. Swedes are a crop which can take a long time to mature, up to half a year. They are very hardy, however, and do well in cool and damp climates.", family: "Cabbage", @@ -1369,7 +1369,7 @@ const produce = [ { foodName: "Sweet Potato", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175322/Seasonal/031-sweet-potato_migp92.png", description: "Sweet potatoes are tubers with bright orange flesh. When cooked, they have a creamy, buttery texture which is sweet, as their name suggests, though they are sometimes known as yams in the United States. They are rich in fibre and vitamins, and can act as a more nutritional alternative to regular potatoes, though care should be taken when cooking, as sweet potatoes are much more tender than regular potatoes once cooked. Traditionally, sweet potatoes can be boiled, mashed, roasted, and turned into fries, though they are also great added to dishes like curries. Look for unblemished skins and firm tubers when shopping, and alternatives you could consider include potatoes or pumpkins. Sweet potatoes do best when grown under covers, like in a greenhouse or a polytunnel, as they are native to the subtropical Americas, and require warm, sheltered and sunny growing conditions to thrive.", family: "Morning Glory", @@ -1381,7 +1381,7 @@ const produce = [ { foodName: "Sweetcorn", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175322/Seasonal/032-corn_sjtrrl.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Grass", @@ -1441,7 +1441,7 @@ const produce = [ { foodName: "Turkey", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175322/Seasonal/033-turkey_ars9id.png", description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", family: "Meat", @@ -1453,7 +1453,7 @@ const produce = [ { foodName: "Turnip", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175322/Seasonal/035-turnip-1_qclhjc.png", description: "Turnips are white root vegetables, though at the tops where they have been exposed to sunlight while growing, they will often have bursts of red, purple or green colouring on their skin. They are a good source of vitamin C and as a root vegetable, have many robust uses and applications in cooking. Turnips can be purchased year round, though baby turnips are in season in June and July, and peak season is October through February. Look for firm, heavy vegetables when purchasing. The smaller and younger the turnip, the more tender the vegetable, and sweeter its flavour. As a root vegetable, turnips can be mashed, roasted, boiled, and used in a variety of recipes where you would use root vegetables. An alternative to turnips could be swede. Turnips are quick and fairly easy to grow from seed, and should be ready within a few weeks. They can be grown in containers outdoors, and so are a good option for gardeners with a variety of spaces available to them.", family: "Cabbage", @@ -1465,7 +1465,7 @@ const produce = [ { foodName: "Venison", imageURL: - "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637899/Seasonal/057-organic-food_pikcaf.png", + "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175322/Seasonal/036-deer_nccggr.png", description: "In Britain today, venison specifically refers to deer meat, though in other countries and historically, it could refer to game from any furred animal, or animals like elk and reindeer. It is a dark, lean and tender meat, and age does affect the meat: the younger the animal, the more tender its meat. Additional factors like diet, and how the animal was raised and how it was handled after it was killed, can all affect its meat. Farmed venison is available year round, as is wild roe deer. Wild red and fallow deer are only in season from late October through mid-February, however. Cuts of venison should be chosen according to how you want to cook it, as different cuts from different parts of the animal will have different qualities that will better suit roasting, grilling, barbecuing, or stewing processes, and so on. The market for venison is steadily growing as consumers seek alternatives to traditionally farmed animals like chicken and cows. As deer have only been farmed in the past few decades, and are not domesticated animals, the farming process for many suppliers tends to be less intense and free range. However, increases to scale farming to match demand will not necessarily scale sustainability, as the energy demands of intensive meat farming remain regardless of the meat which is being farmed.", family: "Meat", From 79fe227b53afbcae725a5fae614d7dece1c23f09 Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Wed, 19 Oct 2022 18:07:46 +0100 Subject: [PATCH 63/82] Descriptions complete. --- db/data.js | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/db/data.js b/db/data.js index a2c92bb..3c595f1 100644 --- a/db/data.js +++ b/db/data.js @@ -257,7 +257,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175319/Seasonal/005-cauliflower_pkwdkp.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Cauliflowers are mild-tasting vegetables with generally white heads- though sometimes you can find purple and green varieties - that grow from a central stalk. They belong to the brassica family, like cabbages. Look for cauliflowers with no discolouration in their heads, and crisp leaves. The florets can be served raw in salads, and cauliflower can also be boiled, steamed, or fried, roasted or grilled. It can even be shredded to a consistency resembling rice, or used as a vegetarian alternative to steaks or smaller cuts of meat in recipes that would traditionally utilise meat instead. Cauliflowers take a few months to grow, and do best in moist, rich soil.", family: "Cabbage", foodType: "Cruciferous", usedAs: "Vegetable", @@ -322,7 +322,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175319/Seasonal/006-cherries_hkayof.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Cherries are a small, generally red fruit, which is at its height in the summer. There are hundreds of varieties, which can be sweet, sour, or somewhere between. Sweeter cherries are suitable for eating raw, and the more sour ones are generally used for cooking in things like tarts, crumbles, sauces and other desserts. When shopping for cherries, look for fruits with a deep colouring and firm flesh, but make sure that they are not too hard. Cherries can be grown in the UK climate, and are also suitable to be grown in containers. Traditionally, you would need more than one cherry tree in order for them to pollinate and bear fruit, but newer varieties of cherry trees are often self-pollinating.", family: "Rose", foodType: "Berry", usedAs: "Fruit", @@ -358,7 +358,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175320/Seasonal/008-chicory_dxp4o2.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Chicory is a forced crop, which is grown under the cover of complete darkness, a process which leads to its pure white leaves, tipped with red and yellow. Its leaves have a mildly bitter flavour, and the vegetables themselves are generally small, able to fit in the hand. When buying chicory, try and avoid the ones with green-tipped leaves, as those will be the most bitter. Chicory is often enjoyed in salads, though it can also be grilled, boiled or steamed. Non-forced varieties of chicory can be grown at any time, though they do require the use of a glasshouse. Different varieties of chicory prefer different growing conditions, so it is best to do some further research depending on the kind you would like to grow.", family: "Daisy", foodType: "Leaf", usedAs: "Vegetable", @@ -382,7 +382,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/027-halibut_wagn5i.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Cod is a popular saltwater fish, with succulent, white, flaky flesh. Previously considered somewhat inferior to other types of fish - potentially due to its cheapness and ubiquity - overfishing has led to severe depletion of cod stocks, and in some places, the fish have disappeared entirely. Cod is often trawled or netted, which is a practice that can be very damaging, both to the fish itself and to the seabeds which are trawled. Try to go for line-caught or farmed Pacific cod, that preferably has been certified. Alternatives to cod include haddock, whiting, or tilapia. Cod can be baked, fried, and poached, and served in a variety of ways. Often, it is served with parsley sauce and lemon wedges, and potatoes are a popular side. Cod can also be added to stews, pies and soups, however, or served with other vegetables too.", family: "Fish", foodType: "Fish", usedAs: "Fish", @@ -463,7 +463,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175319/Seasonal/038-plum-1_btgcjd.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Damsons are small, dark, very tart fruits, which are often too strong in flavour to eat raw, but perform brilliantly in jams and jellies and other prepared desserts, or as additions to meat dishes like casseroles. Look for damsons with deep, firm flesh, and make sure to wash them thoroughly before use. They have high antioxidant counts and bioactive compounds, with good concentrations of vitamins A, C and E. Damsons require a lot of moisture, and so care must be taken with the soil that they are grown in. Their trees produce large amounts of fruit once they are established and cropping, however, and require little care after this point, making them a good choice for suitable gardens. ", family: "Rose", foodType: "Drupe", usedAs: "Fruit", @@ -583,7 +583,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175320/Seasonal/015-grapefruit_ohykt5.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Grapefruits are large citrus fruits with a strong, occasionally divisive, sour flavour. While their skins are always yellow, their flesh can vary in colour, from yellow-white to pink to red. They are a good source of fibre and vitamin C, and are thus named because the fruits grow in bunches, much like grapes. Look for grapefruits which are plump and firm, and avoid any which have coarse or damaged skin. Grapefruits which feel heavy for their size will have the highest juice content. Grapefruits can be eaten raw on their own, or added to salads. They can also be sprinkled with sugar to bring out some sweetness, grilled, or used to make things like marmalade. If grapefruits are too strong, alternative citrus options include lemons and oranges.", family: "Citrus", foodType: "Citrus", usedAs: "Fruit", @@ -643,7 +643,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637881/Seasonal/009-kale_wuhokp.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Kale is a dark green leafy vegetable, and is a member of the cabbage family. It comes in two varieties: regular kale, which has smooth leaves, and curly kale, which has crinkly leaves, and is the more common of the two varieties. Kale is very high in a lot of minerals and vitamins, and is a nutritious vegetable which can contribute strongly to a varied and balanced diet. Kale is usually enjoyed boiled or steamed, as the leaves can be somewhat disagreeable and bitter in flavour if eaten raw. However, kale can also be sliced and added to stir fries, soups and risottos, or wilted in a pan and used as a side dish. Cold-hardy and resilient, kale is a great option for growing at home in the UK climate. ", family: "Cabbage", foodType: "Cruciferous", usedAs: "Vegetable", @@ -744,7 +744,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175320/Seasonal/019-lemon_vk7cd1.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Lemons are sour citrus fruits which can be used in a very wide variety of sweet and savoury dishes. They’re bright yellow in colour, and have a very high amount of vitamin C. Though the flesh is a little strong to eat on its own, the skin can be zested and added to lots of different meals, and the juice and flesh are great when cooked into other things. Lemon wedges are a great side to serve with fish and meat, or to be added to trays during roasting to impart flavour. Lemons can be made into lemonade and other juices, or used to flavour things like cakes and dessert sauces. When buying lemons, look for ones with unblemished and brightly coloured skins. As with all citrus plants, lemons are not hardy in the UK and so are not the easiest to grow, but with some care and access to a greenhouse or indoor space to keep your lemon tree in over the winter, you can have success growing lemons.", family: "Citrus", foodType: "Citrus", usedAs: "Fruit", @@ -861,7 +861,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175321/Seasonal/026-potato_tent9c.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "New potatoes are the younger versions of fully-grown potatoes. New potatoes are generally sweeter than fully-grown potatoes, as their sugars have not been converted into starches yet, and they are also better able to keep their shape better when cooked. For this reason, they are often added to salads, or are cooked whole and used as sides to other dishes. New potatoes do not need to be peeled, only scrubbed gently clean before cooking, and they can be either boiled or roasted. Look for firm potatoes which are blemish-free when shopping. Small crops of potatoes can be grown in large, deep containers, though you really will need quite a big container and a lot of soil to get the best outcome!", family: "Nightshade", foodType: "Root", usedAs: "Vegetable", @@ -898,7 +898,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175321/Seasonal/021-orange_oafni2.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "An iconic citrus fruit, which sometimes comes in varieties which are not actually orange-coloured at all. Oranges can be sweet or bitter, and can be tinged with yellow or red. As the various types of oranges ripen at different times, different oranges are available year-round in the UK, though they do all need to be imported, as the UK does not have the correct climate for growing oranges at scale. Oranges are a good source of vitamins and antioxidants, especially vitamin C and citric acid, which are important compounds for encouraging the absorption of iron. Oranges are often eaten raw as a snack, though they can also be turned into juices, added to drinks, or used in fruit salads or to make sauces and marmalades. They are a good addition to the pan when cooking game and fish too. Citrus plants are not hardy in the UK, though you may have some success growing orange trees inside of a greenhouse in particularly sunny spots.", family: "Citrus", foodType: "Citrus", usedAs: "Fruit", @@ -1043,7 +1043,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175321/Seasonal/025-plum_lsppvy.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Plums are a juicy stone fruit that come in several varieties, some sweeter and some more tart. They vary in colour from deep purples and reds, to yellows and greens. They can be eaten raw, and also can be used for cooking. They are a good source of vitamins, minerals, fibre and antioxidants. When buying plums, look for ones with smooth, unblemished skins, and firm flesh that has a little give when squeezed. Plums can be halved and roasted, or poached whole. They can also be cut up, de-stoned, and used in things like tarts and pies. Plums require moist but well-draining soil, and can be demanding of the soil quality they are grown in. They also require full sun, though they are still hardy in the UK climate.", family: "Rose", foodType: "Drupe", usedAs: "Fruit", @@ -1105,7 +1105,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175321/Seasonal/026-potato_tent9c.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Potatoes are an extremely popular root vegetable, with many varieties and many ways they can be cooked. They are technically a member of the nightshade family, like tomatoes and aubergines, and their shapes, colours and sizes can vary massively. Older potatoes should be scrubbed thoroughly before use, and any eyes should be removed, though otherwise, potatoes can be cooked with their skins on - unless you are boiling them for mash, in which case, it is better to peel them too. Any green spots should be removed from potatoes, as these bits will be mildly toxic, much like all above-ground plant growth on the original potato plants! Whether turned into fries, roasted, boiled, mashed, or added to stews, hashes, pies, or the hundreds of other recipes containing potato, they are a very versatile vegetable that you can do a lot with. Potatoes are available all year round, though different varieties are in season at different times. Potatoes can be grown at home with a fair amount of ease, though you will need a lot of soil and a very large, deep container in order to grow them. ", family: "Nightshade", foodType: "Root", usedAs: "Vegetable", @@ -1129,7 +1129,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175319/Seasonal/040-broccoli_n360kh.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "A cousin of broccoli, the leafier, crunchier, purple sprouting variety can be cooked and used in much the same way as the regular green version. As with all cruciferous foods, purple sprouting broccoli is highly nutritious, and a good source of vitamins A, B and C, iron, folic acid, calcium and fibre. The florets can be boiled in water, steamed, or fried with oil. Look for dark green-purple leaves and avoid wilting, and if you need an alternative, consider regular broccoli or cauliflower. Purple sprouting broccoli is extremely hardy, and can tolerate temperatures down below freezing, making them a good option for growing at home in the UK climate. ", family: "Cabbage", foodType: "Cruciferous", usedAs: "Vegetable", @@ -1214,7 +1214,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175321/Seasonal/029-rhubarb_syyom4.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Botanically, rhubarbs are vegetables, but their stalks are used as fruits. There are two varieties - forced and maincrop - which come in colours ranging from pink to deep red with blushes of green. Rhubarb leaves contain poison, so make sure to discard them and not to eat them. Forced rhubarb should be tender enough to eat without much alteration, but maincrop rhubarb can have tough, stringy parts which may need removing. Rhubarbs can be eaten raw, but are especially great performers in desserts, jams, crumbles and pies. They can also be paired with meat dishes, and especially suit fattier meats like pork and duck. Rhubarb is famously grown in the Rhubarb Triangle in Yorkshire, and can be grown quite successfully in the UK.", family: "Buckwheat", foodType: "Stem", usedAs: "Fruit", @@ -1298,7 +1298,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175319/Seasonal/042-salad_l7a7te.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Spring greens are the first young cabbages of the year. They are fresh, loose leafy greens, without the hard heart of regular cabbages. Look for spring greens with firm, fresh leaves, and no wilting. To use, remove the outer leaves, wash gently, then shred for use or cook. They can be added at the end of a stir fry, steamed and served with butter, or used in stews and soups. Take care not to overcook them, however, or they will develop an unpleasant smell and taste. As with cabbages, their older counterpart, spring greens can be grown in the UK climate.", family: "Cabbage", foodType: "Leaf", usedAs: "Vegetable", @@ -1310,7 +1310,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/030-ewe_w2coor.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Spring lamb refers to lamb which is between three and five months old at the point of slaughter. The meat of the animal is very tender at this stage, though it does not have the stronger flavour which develops in older lambs, as it is the grazing period which helps flavour to develop in their flesh. When shopping for lamb, look for firm meat with a velvety texture, and make sure to look for pink colouring. The darker the meat, the older it is. Lamb freezes well, and can be served in a variety of ways, whether roasted, grilled, braised, barbecued, or minced. Grass-fed lamb can have a lower impact on the climate than the processing required to farm some other meats, and to create meat replacement products that are based on foods like soya and almonds. However, animal farming in general consumes massive amounts of energy and resources, and accounts for a huge portion of emissions globally.", family: "Meat", foodType: "Meat", usedAs: "Meat", @@ -1383,7 +1383,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175322/Seasonal/032-corn_sjtrrl.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "Sweetcorn - also known as corn on the cob - is a vegetable which is composed of several rows of tightly-packed kernels, which grow along a tough central core. Sweetcorn is best eaten as fresh as possible, as its sugars turn to starch quite quickly, which can mean it loses some of its taste and quality. Sweetcorn really shines when cooked simply, whether steamed, boiled, roasted or barbecued, and served with a little butter. Cooking times vary depending on the method you are using, but in general, fresh sweetcorn should not take very long to cook at all: a few minutes in boiling water, and up to fifteen if barbecued or roasted. Using salt in the water when cooking sweetcorn will toughen it up, so avoid it if you can, or add a little sugar instead to bring out sweetness. It can be bought fresh on the cob, tinned, or frozen. An alternative to sweetcorn could be a side of peas instead. ", family: "Grass", foodType: "Scientific Anomaly", usedAs: "Vegetable", @@ -1443,7 +1443,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175322/Seasonal/033-turkey_ars9id.png", description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat euismod augue, ac fringilla diam pharetra id. In porttitor convallis nisi vel finibus. Pellentesque at diam venenatis, ornare mi eget, vestibulum arcu. Vivamus consectetur, erat eu semper dapibus, dolor sem suscipit mi, ut dignissim enim nibh vel risus. Sed aliquet, sapien eu congue gravida, lorem metus bibendum mauris, quis maximus nibh erat eu erat. Cras vulputate purus magna, tincidunt porttitor massa vestibulum sed. Nam turpis massa, dictum eu accumsan in, posuere sit amet lorem. Phasellus est sapien, faucibus eget elit et, blandit consequat ex. Proin feugiat arcu a magna iaculis, nec pharetra orci porta. Proin vel orci ante. Aliquam viverra non ligula nec rhoncus. Ut et tincidunt elit. Phasellus non risus in mi vulputate venenatis vitae quis enim. Vestibulum quis dolor venenatis, lobortis diam in, faucibus turpis. Nullam quis pharetra nulla, vestibulum tincidunt ipsum. Donec non ultrices ligula. Quisque at interdum velit. Donec laoreet elit enim, a vulputate risus cursus eu. Duis et est in mi pulvinar rhoncus in ut lorem. Integer nec dolor et velit sollicitudin vehicula. Duis sapien justo, condimentum nec orci eu, dictum dapibus nisl. Praesent ultricies libero vel leo pulvinar molestie.", + "An iconic bird which is most traditionally used at Christmas, though it can be eaten all year round. Turkey has a lot of the same nutritional benefits as chicken, though it also has a lower fat content, meaning that it can be somewhat dry. Ways of combating dryness can include basting the turkey, or alternatively, cooking the turkey more quickly and using dry brines to draw out moisture for the bird to reabsorb. This second method helps to season the meat and crisp the skin simultaneously. Fresh turkey is highly perishable, so if you are planning on using a fresh bird, buy it within two days of when you will be using it. When buying turkey, make sure the flesh is plump, soft, and evenly-coloured. Whole birds should be roasted, but smaller cuts or portions of turkey can be cooked in different ways, the same as other meats and poultry.", family: "Meat", foodType: "Fowl", usedAs: "Meat", From 469384b0278f7f1f282df2cd913b3a4d6d2f9294 Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Wed, 19 Oct 2022 18:08:55 +0100 Subject: [PATCH 64/82] Removed TODO comments. --- db/data.js | 7 ------- 1 file changed, 7 deletions(-) diff --git a/db/data.js b/db/data.js index 3c595f1..ebf6d0a 100644 --- a/db/data.js +++ b/db/data.js @@ -1,10 +1,3 @@ -/* Data drawn from https://www.bbcgoodfood.com/seasonal-calendar. If we want to make this a releasable API at some point in the future, will probably be worth making the data more comprehensive, but this'll do for now. */ - -/* -TODO: ADD DESCRIPTIONS FOR ITEMS WE WANT TO SHOW IN THE APP DEMO. -TODO: ADD EASTER EGG LISTINGS. -*/ - const produce = [ { foodName: "Apple", From c1cab20bbe0eff3b32d09f2a5153b5ffd3e6c829 Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Wed, 19 Oct 2022 18:12:46 +0100 Subject: [PATCH 65/82] Syntax edits. --- db/data.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/db/data.js b/db/data.js index ebf6d0a..7432a70 100644 --- a/db/data.js +++ b/db/data.js @@ -47,7 +47,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637877/Seasonal/001-aubergine_g9dkiw.png", description: - "Aubergines are a dark purple berry - though they are functionally used as a vegetable - which are at their cheapest and highest quality in the shops from July to September. They are a good source of fibre, and are also low GI, so will not raise your blood glucose levels. No allergens to aubergine are currently known; they are part of the nightshade family. You can grill, fry, griddle, barbecue and bake aubergines. They are often added to dishes like curries and casseroles. Famous dishes using aubergine include ratatouille and moussaka, and they feature widely in Mediterranean cuisine. They have a mellow flavour that combines well with other ingredients. When grown, they like sunny and warm weather, and do best when grown in a greenhouse in the UK climate.", + "Aubergines are a dark purple berry - though they are functionally used as a vegetable - which are at their cheapest and highest quality in the shops from July to September. They are a good source of fibre, and are also low GI, so will not raise your blood glucose levels. No allergens to aubergine are currently known: they are part of the nightshade family. You can grill, fry, griddle, barbecue and bake aubergines. They are often added to dishes like curries and casseroles. Famous dishes using aubergine include ratatouille and moussaka, and they feature widely in Mediterranean cuisine. They have a mellow flavour that combines well with other ingredients. When grown, they like sunny and warm weather, and do best when grown in a greenhouse in the UK climate.", family: "Nightshade", foodType: "Berry", usedAs: "Vegetable", @@ -697,7 +697,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637889/Seasonal/031-greens_rsygez.png", description: - "Also known as corn salad or cat grass, this lettuce has a distinctive, tangy flavour and is known for its long spoon-shaped leaves. Its unusual name allegedly comes from the similarity of the plant to the size and shape of a lamb tongue. It is an excellent source of vitamin A but is also high in vitamin C, E, K and B6 as well as many minerals. It is best used as a main ingredient in salads or cooked and served as a side vegetable. Be sure to wash and drain thoroughly before use it can be grainy and gritty. It is quickly perishable and should be used within two days of purchase. This plant thrives in moist soils and cold temperatures so plant them in a shady spot. They do not tolerate drought well so keep them well-watered. To avoid a glut, you should sow little and often.", + "Also known as corn salad or cat grass, this lettuce has a distinctive, tangy flavour and is known for its long spoon-shaped leaves. Its unusual name allegedly comes from the similarity of the plant to the size and shape of a lamb tongue. It is an excellent source of vitamin A but is also high in vitamin C, E, K and B6, as well as many minerals. It is best used as a main ingredient in salads or cooked and served as a side vegetable. Be sure to wash and drain thoroughly before use it can be grainy and gritty. It is quickly perishable and should be used within two days of purchase. This plant thrives in moist soils and cold temperatures so plant them in a shady spot. They do not tolerate drought well so keep them well-watered. To avoid ending up with too many, you should sow little and often.", family: "Honeysuckle", foodType: "Leaf", usedAs: "Vegetable", @@ -1231,7 +1231,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637895/Seasonal/048-salmon_judbg6.png", description: - "Salmon is a fish that is considered “anadromous” which means they live in both fresh and saltwater. They are born in freshwater where they spend a few months to a few years (depending on the species) before moving out to the ocean. Salmon is very low in saturated fat and a good source of protein. It's also one of the best sources of vitamin B12. This fish is bursting in potassium and other nutrients like iron and vitamin D. Salmon is a mild-flavoured fish with a rich and slightly oily taste to it. Baked, grilled, and poached salmon will often taste citrusy and buttery, along with whatever accompanying flavours were added to the dish. Smoked salmon tastes smokey and subtly fishy, and canned salmon can often be oily. The aquatic habitats of the five species of salmon include streams, lakes, rivers, estuaries, marine foreshore areas, and the North Pacific Ocean.", + "Salmon is a fish that is considered “anadromous” which means they live in both fresh and saltwater. They are born in freshwater where they spend a few months to a few years (depending on the species) before moving out to the ocean. Salmon is very low in saturated fat and a good source of protein. It is also one of the best sources of vitamin B12. This fish is bursting in potassium and other nutrients like iron and vitamin D. Salmon is a mild-flavoured fish with a rich and slightly oily taste to it. Baked, grilled, and poached salmon will often taste citrusy and buttery, along with whatever accompanying flavours were added to the dish. Smoked salmon tastes smokey and subtly fishy, and canned salmon can often be oily. The aquatic habitats of the five species of salmon include streams, lakes, rivers, estuaries, marine foreshore areas, and the North Pacific Ocean.", family: "Fish", foodType: "Fish", usedAs: "Fish", @@ -1267,7 +1267,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637895/Seasonal/049-sorrel_zzzw7z.png", description: - "Sorrel is also referred to as spinach dock and is a plant known for its tart taste and powerful health benefits. This vibrant leafy green and its fruit are used to add a sharp, citrusy flavour to soups, sauces, salads, and beverages. Sorrel is a good source of Vitamin A and C and has been used to reduce inflammation. It is also an ingredient in the herbal cancer treatment Essiac. However, it shouldn't be eaten in large quantities as it contains a high amount of oxalic acid. Sorrel is a leafy herb, like parsley or basil or mint, that can be chopped up to use in marinades and dressings, or stirred into soups or casseroles for a bit of fresh flavour. Sorrel thrives in a sunny or partially-shady spot, in fertile and moisture-retentive soil. It can be grown from seed, but as a perennial plant, you could also take a rooted cutting or a division from an existing plant. Sow sorrel seeds in spring, a few in small pots filled with seed compost, cover and water well.", + "Sorrel is also referred to as spinach dock and is a plant known for its tart taste and powerful health benefits. This vibrant leafy green and its fruit are used to add a sharp, citrusy flavour to soups, sauces, salads, and beverages. Sorrel is a good source of Vitamin A and C and has been used to reduce inflammation. It is also an ingredient in the herbal cancer treatment Essiac. However, it should not be eaten in large quantities as it contains a high amount of oxalic acid. Sorrel is a leafy herb, like parsley or basil or mint, that can be chopped up to use in marinades and dressings, or stirred into soups or casseroles for a bit of fresh flavour. Sorrel thrives in a sunny or partially-shady spot, in fertile and moisture-retentive soil. It can be grown from seed, but as a perennial plant, you could also take a rooted cutting or a division from an existing plant. Sow sorrel seeds in spring, a few in small pots filled with seed compost, cover and water well.", family: "example", foodType: "Leaf", usedAs: "Vegetable", @@ -1279,7 +1279,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637895/Seasonal/050-spinach_whzzyi.png", description: - "Spinach is a leafy green vegetable that originated in Persia. It belongs to the amaranth family and is related to beets and quinoa. If you're interested in its health-boosting potential, spinach is an easy food to add to your diet. Spinach is rich in many nutrients, including Vitamin A, Vitamin C, Vitamin K, iron, folate, and potassium. Spinach is chock full of fibre too. Spinach may decrease oxidative stress, improve eye health, and help prevent heart disease and cancer. There are three popular ways to cook Spinach: steaming, sauteing and blanching. Either way, this nutrient-dense leafy green vegetable cooks in just minutes for a fast side dish or versatile ingredient. Winter spinach cultivars need a sunny position; summer spinach varieties are better in partial shade so are among the easiest vegetables to grow in shade. Once you've harvested your spinach, all you need to do is water it and wait patiently for the next harvest. Spinach leaves will regrow in just a matter of days.", + "Spinach is a leafy green vegetable that originated in Persia. It belongs to the amaranth family and is related to beets and quinoa. If you are interested in its health-boosting potential, spinach is an easy food to add to your diet. Spinach is rich in many nutrients, including Vitamin A, Vitamin C, Vitamin K, iron, folate, and potassium. Spinach is chock full of fibre too. Spinach may decrease oxidative stress, improve eye health, and help prevent heart disease and cancer. There are three popular ways to cook Spinach: steaming, sauteing and blanching. Either way, this nutrient-dense leafy green vegetable cooks in just minutes for a fast side dish or versatile ingredient. Winter spinach cultivars need a sunny position; summer spinach varieties are better in partial shade so are among the easiest vegetables to grow in shade. Once you have harvested your spinach, all you need to do is water it and wait patiently for the next harvest. Spinach leaves will regrow in just a matter of days.", family: "Buckwheat", foodType: "Leaf", usedAs: "Vegetable", @@ -1340,7 +1340,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637897/Seasonal/052-strawberry_pxugsj.png", description: - "A popular sweet, juicy seasonal berry enjoyed in cuisines around the world. But Botanically, the strawberry fruit is considered an “accessory fruit” and is not a true berry. Strawberries are actually a group of fruits (genus Fragaria) containing several varieties and are part of the rose family. Strawberries are usually sweet with a firm and juicy but not tough flesh. The tiny seeds add a light crunch. Flavour, colour, size, and texture can vary depending on the variety of strawberry. They are an excellent source of vitamin C and manganese and also contain decent amounts of folate (vitamin B9) and potassium. The now-common garden strawberry didn't hit its stride until the 18th century, but local wild berries have been eaten since ancient Roman times. Modern strawberries are grown and eaten all over the world and can be served raw, cooked, or dried. Strawberries like fertile, well-drained, slightly acidic soil, and do best in full sun, but will tolerate some shade. Avoid planting in sites prone to frost, which can damage the flowers, or in exposed locations, which make it hard for pollinating insects to reach the flowers.", + "A popular sweet, juicy seasonal berry enjoyed in cuisines around the world. But Botanically, the strawberry fruit is considered an “accessory fruit” and is not a true berry. Strawberries are actually a group of fruits (genus Fragaria) containing several varieties and are part of the rose family. Strawberries are usually sweet with a firm and juicy but not tough flesh. The tiny seeds add a light crunch. Flavour, colour, size, and texture can vary depending on the variety of strawberry. They are an excellent source of vitamin C and manganese and also contain decent amounts of folate (vitamin B9) and potassium. The now-common garden strawberry did not hit its stride until the 18th century, but local wild berries have been eaten since ancient Roman times. Modern strawberries are grown and eaten all over the world and can be served raw, cooked, or dried. Strawberries like fertile, well-drained, slightly acidic soil, and do best in full sun, but will tolerate some shade. Avoid planting in sites prone to frost, which can damage the flowers, or in exposed locations, which make it hard for pollinating insects to reach the flowers.", family: "Rose", foodType: "Berry", usedAs: "Fruit", @@ -1388,7 +1388,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637897/Seasonal/053-chard_p4ydid.png", description: - "Swiss Chard, or leaf beet, is an attractive vegetable, with leaf stalks in an array of bright colours. The stalks -- which can be white, yellow, red, purple, pink, striped and so on -- resemble flat celery with a sweet taste slightly reminiscent of beets. Swiss chard contains vitamin K, vitamin A and is also a good source of magnesium which helps keep your muscles, bones and nerves healthy. Young leaves can be eaten raw in salads, while larger leaves are delicious cooked. The large, firm leaves are mild, sweet, earthy and just slightly bitter; on the whole, it's a bit milder than spinach. Typically the leaves are boiled for a few minutes. It is similar to spinach but easier to grow. Young chard leaves are delicious eaten fresh and the fully-formed leaves will be ready to harvest about 10-12 weeks after sowing. Cut individual leaves as you need them and the plant will keep producing new growth.", + "Swiss Chard, or leaf beet, is an attractive vegetable, with leaf stalks in an array of bright colours. The stalks - which can be white, yellow, red, purple, pink, striped and so on - resemble flat celery with a sweet taste slightly reminiscent of beets. Swiss chard contains vitamin K, vitamin A and is also a good source of magnesium which helps keep your muscles, bones and nerves healthy. Young leaves can be eaten raw in salads, while larger leaves are delicious cooked. The large, firm leaves are mild, sweet, earthy and just slightly bitter; on the whole, it is a bit milder than spinach. Typically the leaves are boiled for a few minutes. It is similar to spinach but easier to grow. Young chard leaves are delicious eaten fresh and the fully-formed leaves will be ready to harvest about 10-12 weeks after sowing. Cut individual leaves as you need them and the plant will keep producing new growth.", family: "Beet", foodType: "Leaf", usedAs: "Vegetable", From 636adf204d71e9d051ccedd041ae8cfe7744c52b Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Wed, 19 Oct 2022 20:25:10 +0100 Subject: [PATCH 66/82] Updated syntax. --- db/dummyData.js | 79 ++++++++++++++++++++++++++++++------------------- 1 file changed, 48 insertions(+), 31 deletions(-) diff --git a/db/dummyData.js b/db/dummyData.js index f6085dd..50c3c6c 100644 --- a/db/dummyData.js +++ b/db/dummyData.js @@ -1,36 +1,53 @@ - - const dummyProduce= [{ +const dummyProduce = [ + { foodName: "Banana", - imageURL: "https://images.immediate.co.uk/production/volatile/sites/30/2020/02/bananas-d5a7b4c.jpg?webp=true&quality=90&resize=277%2C251", - description: "Bananas are a popular tropical fruit that can be eaten on their own or incorporated into cooking. Find out how to select, store, prepare and cook with bananas", + imageURL: + "https://images.immediate.co.uk/production/volatile/sites/30/2020/02/bananas-d5a7b4c.jpg?webp=true&quality=90&resize=277%2C251", + description: + "Bananas are a popular tropical fruit that can be eaten on their own or incorporated into cooking. Find out how to select, store, prepare and cook with bananas", family: "Musaceae", foodType: "fruit", usedAs: "fruit", - month:["jan","feb","march","april","may","june","july","august","sept","oct","nov","dec"], - allergens: "none"}, - { - foodName: "carrot", - imageURL: "https://images.immediate.co.uk/production/volatile/sites/30/2020/02/carrot_0-125e0c9.jpg?webp=true&quality=90&resize=408%2C370", - description: "The carrot, with its distinctive bright orange colour, is one of the most versatile root vegetables around – a result of its sweet flavour, which means it can be used raw or cooked, in sweet or savoury dishes.", - family: "Apiaceae" , - foodType: "vegetable", - usedAs: "vegetable", - month: ["may","june","july","august","sept"], - allergens: "none" - } - , - { - foodName: "aubergine", - imageURL: "https://images.immediate.co.uk/production/volatile/sites/30/2020/02/aubergine-356f89b.jpg?webp=true&quality=90&resize=408%2C370", - description: "Although it’s technically a fruit (a berry, to be exact), the aubergine is used as a vegetable. ", - family: "berry", - foodType: "fruit", - usedAs: "vegetable", - month:["may","june","july","august","sept","oct"], - allergens: "nightshade" - }, - -] - -export default dummyProduce + month: [ + "jan", + "feb", + "march", + "april", + "may", + "june", + "july", + "august", + "sept", + "oct", + "nov", + "dec", + ], + allergens: "none", + }, + { + foodName: "carrot", + imageURL: + "https://images.immediate.co.uk/production/volatile/sites/30/2020/02/carrot_0-125e0c9.jpg?webp=true&quality=90&resize=408%2C370", + description: + "The carrot, with its distinctive bright orange colour, is one of the most versatile root vegetables around - a result of its sweet flavour, which means it can be used raw or cooked, in sweet or savoury dishes.", + family: "Apiaceae", + foodType: "vegetable", + usedAs: "vegetable", + month: ["may", "june", "july", "august", "sept"], + allergens: "none", + }, + { + foodName: "aubergine", + imageURL: + "https://images.immediate.co.uk/production/volatile/sites/30/2020/02/aubergine-356f89b.jpg?webp=true&quality=90&resize=408%2C370", + description: + "Although it is technically a fruit (a berry, to be exact), the aubergine is used as a vegetable. ", + family: "berry", + foodType: "fruit", + usedAs: "vegetable", + month: ["may", "june", "july", "august", "sept", "oct"], + allergens: "nightshade", + }, +]; +export default dummyProduce; From dbff461d7e0e69a91a45aeee19af179c86e65c77 Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Wed, 19 Oct 2022 20:35:00 +0100 Subject: [PATCH 67/82] Tidied comments. --- app.js | 2 +- db/index.js | 10 ++++++++-- helper_scripts/randomGet.js | 5 ++--- routes/index.js | 2 +- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/app.js b/app.js index 860f0e5..47c7c94 100644 --- a/app.js +++ b/app.js @@ -13,7 +13,7 @@ app.use("/produce", router); app.get("/", (req, res) => { res.send( - "Go to /produce to get all items, or use ?item= or ?month= to query specifically, or /produce/random if you're feeling lucky" + "Go to /produce to get all items, or use ?item= or ?month= to query specifically, or /produce/random if you're feeling lucky." ); }); diff --git a/db/index.js b/db/index.js index dbb579f..cafeb5f 100644 --- a/db/index.js +++ b/db/index.js @@ -12,6 +12,12 @@ export default function query(text, params, callback) { return pool.query(text, params, callback); } -// This is our connection to the database- check your PGURI is up to date in the .env variables -//below is a console.log that tests you've set up your connecction - by running dbtest the current time will be printed in the console +/* +This is our connection to the database. +Check your PGURI is up to date in .env. + +Below is a console.log that tests you've set up your connecction. +By running dbtest, the current time will be printed in the console. +*/ + // console.log(await query("SELECT NOW()")) diff --git a/helper_scripts/randomGet.js b/helper_scripts/randomGet.js index 4092d26..1232a1f 100644 --- a/helper_scripts/randomGet.js +++ b/helper_scripts/randomGet.js @@ -1,5 +1,4 @@ -// this function returns five random objects with no duplicates - +// Returns five random items with no duplicates. export function getRandom(allResults) { let randomResults = []; @@ -22,4 +21,4 @@ export function getRandom(allResults) { } return randomResults; } -}; \ No newline at end of file +} diff --git a/routes/index.js b/routes/index.js index f61cffb..dbd07e5 100644 --- a/routes/index.js +++ b/routes/index.js @@ -49,7 +49,7 @@ router.get("/random", async function (req, res) { } return res.json({ success: false, - payload: "Sorry, no random food for you today", + payload: "Sorry, no random food for you today.", }); }); From 024206414204aa1732ca0434e391d1c25fb571ce Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Wed, 19 Oct 2022 20:38:29 +0100 Subject: [PATCH 68/82] Updated docs. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f4b40f3..891b146 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,7 @@ For other useful commands and scripts, please refer to `scripts` in the `package ## Back-End Structure -We are currently using a relational PostgreSQL database hosted on Heroku, and our back-end is built using Node.js and Express. For testing the back-end, we are currently using Jest and Supertest. +We are currently using a relational PostgreSQL database hosted on Cyclic, and our back-end is built using Node.js and Express. For testing the back-end, we are currently using Jest and Supertest. ### Directory Structure From 994f2255c9b4a2f3cbf919c4282b9d1efed2ed94 Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Thu, 20 Oct 2022 10:10:23 +0100 Subject: [PATCH 69/82] Quick check of data.js. --- db/data.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/db/data.js b/db/data.js index 7432a70..f09f434 100644 --- a/db/data.js +++ b/db/data.js @@ -47,7 +47,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637877/Seasonal/001-aubergine_g9dkiw.png", description: - "Aubergines are a dark purple berry - though they are functionally used as a vegetable - which are at their cheapest and highest quality in the shops from July to September. They are a good source of fibre, and are also low GI, so will not raise your blood glucose levels. No allergens to aubergine are currently known: they are part of the nightshade family. You can grill, fry, griddle, barbecue and bake aubergines. They are often added to dishes like curries and casseroles. Famous dishes using aubergine include ratatouille and moussaka, and they feature widely in Mediterranean cuisine. They have a mellow flavour that combines well with other ingredients. When grown, they like sunny and warm weather, and do best when grown in a greenhouse in the UK climate.", + "Aubergines are a dark purple berry - though they are functionally used as a vegetable - which are at their cheapest and highest quality in the shops from July to September. They are a good source of fibre, and are also low GI, so will not raise your blood glucose levels. No allergens to aubergine are currently known. They are part of the nightshade family. You can grill, fry, griddle, barbecue and bake aubergines. They are often added to dishes like curries and casseroles. Famous dishes using aubergine include ratatouille and moussaka, and they feature widely in Mediterranean cuisine. They have a mellow flavour that combines well with other ingredients. When grown, they like sunny and warm weather, and do best when grown in a greenhouse in the UK climate.", family: "Nightshade", foodType: "Berry", usedAs: "Vegetable", @@ -444,7 +444,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175320/Seasonal/011-cranberry_h8ovbv.png", description: - "Cranberries are tart, red berries which are most famously used in winter recipes. They are naturally high in a wide range of vitamins and minerals, and can contribute powerfully to a varied and balanced diet. At their best between October and December, cranberries can be used in a wide variety of dishes, such as in making sauces, desserts, to dress meats, and in drinks. Look for plump, firm, bright berries when you’re shopping for fresh cranberries. You can also buy them dried! Cranberries can be grown at home in the UK, whether in pots or as ground shrubs, though they do also grow wild throughout North Europe and North America. ", + "Cranberries are tart, red berries which are most famously used in winter recipes. They are naturally high in a wide range of vitamins and minerals, and can contribute powerfully to a varied and balanced diet. At their best between October and December, cranberries can be used in a wide variety of dishes, such as in making sauces, desserts, to dress meats, and in drinks. Look for plump, firm, bright berries when you are shopping for fresh cranberries. You can also buy them dried! Cranberries can be grown at home in the UK, whether in pots or as ground shrubs, though they do also grow wild throughout North Europe and North America. ", family: "Heath", foodType: "Berry", usedAs: "Fruit", @@ -660,7 +660,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/029-kohlrabi_nwtzii.png", description: - "Kohlrabi looks like a sputnik in vegetable form and is part of the cabbage family. Its name translates from German to turnip cabbage. It has a mild, sweet flavour with a crisp, crunchy texture and can be found in two colours, the more common pale green as well as purple. Kohlrabi is an excellent source of vitamin C and a good source of fibre, vitamin b6 and potassium. You can cook and use the leaves of Kohlrabi like cabbage but the bulb is much more versatile and can be used in salads in a similar way to carrot or broccoli or roasted, steamed or stir fried and used as wedges, noodles or diced. Kohlrabi is more drought resistant than most brassicas and the purple varieties are hardier than green. It thrives in a sunny area in light, fertile and free-draining soil. Sow little and often for a constant supply. In cooler areas and where the soil is heavy clay, make early sowings indoors and transplant outdoors when hardier and the soil has warmed up. Harvest when young, between golf and tennis ball sized, as if you leave them too long they lose their flavour and tenderness.", + "Kohlrabi is part of the cabbage family. Its name translates from German to turnip cabbage. It has a mild, sweet flavour with a crisp, crunchy texture and can be found in two colours, the more common pale green as well as purple. Kohlrabi is an excellent source of vitamin C and a good source of fibre, vitamin b6 and potassium. You can cook and use the leaves of Kohlrabi like cabbage but the bulb is much more versatile and can be used in salads in a similar way to carrot or broccoli or roasted, steamed or stir fried and used as wedges, noodles or diced. Kohlrabi is more drought resistant than most brassicas and the purple varieties are hardier than green. It thrives in a sunny area in light, fertile and free-draining soil. Sow little and often for a constant supply. In cooler areas and where the soil is heavy clay, make early sowings indoors and transplant outdoors when hardier and the soil has warmed up. Harvest when young, between golf and tennis ball sized, as if you leave them too long they lose their flavour and tenderness.", family: "Cabbage", foodType: "Root", usedAs: "Vegetable", @@ -672,7 +672,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/030-ewe_w2coor.png", description: - "Lamb is the culinary name for meat which comes from a sheep that is under one year old. When between one and two years old it is sold as hogget and anything over two years old is called mutton, which has a lot more flavour but also tougher flesh that will need slow cooking to tenderise it. The older a lamb, the deeper the colour of its meat. While there are health risks associated with over-consuming red meat, lamb can also be a really good source of iron, protein, and vitamin B12. A versatile meat that is used for more than just roasting, lamb is popularly used in curries, moussaka and as kebabs. For quick cooking, choose fillets, steaks and chops and for slow cooking, among the best options are leg, shoulder, shank and neck joints. If it is not homegrown, imported lamb is considered to have the highest carbon footprint of all meats and has very high greenhouse gas emissions regardless of where it is farmed.", + "Lamb is the culinary name for meat which comes from a sheep that is under one year old. When between one and two years old, it is sold as hogget, and anything over two years old is called mutton, which has a lot more flavour but also tougher flesh that will need slow cooking to tenderise it. The older a lamb, the deeper the colour of its meat. While there are health risks associated with over-consuming red meat, lamb can also be a really good source of iron, protein, and vitamin B12. A versatile meat that is used for more than just roasting, lamb is popularly used in curries, moussaka and as kebabs. For quick cooking, choose fillets, steaks and chops and for slow cooking, among the best options are leg, shoulder, shank and neck joints. If it is not homegrown, imported lamb is considered to have the highest carbon footprint of all meats, and has very high greenhouse gas emissions regardless of where it is farmed.", family: "Meat", foodType: "Meat", usedAs: "Meat", @@ -737,7 +737,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175320/Seasonal/019-lemon_vk7cd1.png", description: - "Lemons are sour citrus fruits which can be used in a very wide variety of sweet and savoury dishes. They’re bright yellow in colour, and have a very high amount of vitamin C. Though the flesh is a little strong to eat on its own, the skin can be zested and added to lots of different meals, and the juice and flesh are great when cooked into other things. Lemon wedges are a great side to serve with fish and meat, or to be added to trays during roasting to impart flavour. Lemons can be made into lemonade and other juices, or used to flavour things like cakes and dessert sauces. When buying lemons, look for ones with unblemished and brightly coloured skins. As with all citrus plants, lemons are not hardy in the UK and so are not the easiest to grow, but with some care and access to a greenhouse or indoor space to keep your lemon tree in over the winter, you can have success growing lemons.", + "Lemons are sour citrus fruits which can be used in a very wide variety of sweet and savoury dishes. They are bright yellow in colour, and have a very high amount of vitamin C. Though the flesh is a little strong to eat on its own, the skin can be zested and added to lots of different meals, and the juice and flesh are great when cooked into other things. Lemon wedges are a great side to serve with fish and meat, or to be added to trays during roasting to impart flavour. Lemons can be made into lemonade and other juices, or used to flavour things like cakes and dessert sauces. When buying lemons, look for ones with unblemished and brightly coloured skins. As with all citrus plants, lemons are not hardy in the UK and so are not the easiest to grow, but with some care and access to a greenhouse or indoor space to keep your lemon tree in over the winter, you can have success growing lemons.", family: "Citrus", foodType: "Citrus", usedAs: "Fruit", @@ -749,7 +749,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637889/Seasonal/032-lettuce_k50llo.png", description: - "Lettuce comes in a huge number of varieties, but are usually either crisp such as iceberg, cos and romaine or floppy such as little gem, butterhead and round. Most have green leaves, although some with red tinges and they all have a delicate, clean flavour. Lettuce is an excellent source of vitamin A as well as being high in minerals and antioxidants. Lettuce is mainly eaten raw in salads, but can also be shredded and added to soups towards the end of cooking or braised and served on the side along with other vegetables. Crisp varieties can also be grilled. Grow lettuces in full sun in moisture-retentive soil, but if it is very hot the lettuces will need shade. It will also need protecting from the cold if sowing early or late. Crisp varieties tend to be hardier but floppy varieties produce less dense growth and so are ideal for growing in small spaces and containers.", + "Lettuce comes in a huge number of varieties, but are usually either crisp such as iceberg, cos and romaine, or floppy such as little gem, butterhead and round. Most have green leaves, although some with red tinges and they all have a delicate, clean flavour. Lettuce is an excellent source of vitamin A as well as being high in minerals and antioxidants. Lettuce is mainly eaten raw in salads, but can also be shredded and added to soups towards the end of cooking or braised and served on the side along with other vegetables. Crisp varieties can also be grilled. Grow lettuces in full sun in moisture-retentive soil, but if it is very hot the lettuces will need shade. It will also need protecting from the cold if sowing early or late. Crisp varieties tend to be hardier but floppy varieties produce less dense growth and so are ideal for growing in small spaces and containers.", family: "Daisy", foodType: "Leaf", usedAs: "Vegetable", @@ -1015,7 +1015,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637892/Seasonal/040-peppers_gplnan.png", description: - "Also known as bell peppers, sweet peppers, or by their colours - for example, red peppers, yellow peppers, and green peppers. They are a non-hot member of the family that includes all chilli peppers, and vary hugely in size, shape, flavour, and heat content. Green peppers are the unripe state of red peppers, and are more acidic, vegetal and bitter, though these aspects soften when the peppers are cooked. Red, ripe peppers are sweeter and more gentle in flavour. Yellow and orange peppers are separate, individual varieties of peppers, which were specifically bred for their sweet and gentle flavours. Peppers have a very long life, especially when refrigerated. You can tell if a pepper is ageing by checking for signs of puckering on the skin around the stalks. Peppers are great to eat raw, either sliced as a snack, or included in dishes like salads. They can also be cooked into a variety of recipes, and are great stuffed with cheese and other vegetables too. Just make sure when using peppers that you remove the inner, pale membrane, as this part tastes quite bitter.", + "Also known as bell peppers, sweet peppers, or by their colours - for example, red peppers, yellow peppers, and green peppers. They are a non-hot member of the family that includes all chilli peppers, and vary hugely in size, shape, flavour, and heat content. Green peppers are the unripe state of red peppers, and are more acidic, vegetal and bitter, though these aspects soften when the peppers are cooked. Red, ripe peppers are sweeter and more gentle in flavour. Yellow and orange peppers are separate, individual varieties of peppers, which were specifically bred for their sweet and gentle flavours. Peppers have a very long life, especially when refrigerated. You can tell if a pepper is aged by checking for signs of puckering on the skin around the stalks. Peppers are great to eat raw, either sliced as a snack, or included in dishes like salads. They can also be cooked into a variety of recipes, and are great stuffed with cheese and other vegetables too. Just make sure when using peppers that you remove the inner, pale membrane, as this part tastes quite bitter.", family: "Nightshade", foodType: "Berry", usedAs: "Vegetable", @@ -1231,7 +1231,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637895/Seasonal/048-salmon_judbg6.png", description: - "Salmon is a fish that is considered “anadromous” which means they live in both fresh and saltwater. They are born in freshwater where they spend a few months to a few years (depending on the species) before moving out to the ocean. Salmon is very low in saturated fat and a good source of protein. It is also one of the best sources of vitamin B12. This fish is bursting in potassium and other nutrients like iron and vitamin D. Salmon is a mild-flavoured fish with a rich and slightly oily taste to it. Baked, grilled, and poached salmon will often taste citrusy and buttery, along with whatever accompanying flavours were added to the dish. Smoked salmon tastes smokey and subtly fishy, and canned salmon can often be oily. The aquatic habitats of the five species of salmon include streams, lakes, rivers, estuaries, marine foreshore areas, and the North Pacific Ocean.", + "Salmon is a fish that is considered anadromous, which means they live in both fresh and saltwater. They are born in freshwater where they spend a few months to a few years (depending on the species) before moving out to the ocean. Salmon is very low in saturated fat and a good source of protein. It is also one of the best sources of vitamin B12. This fish is bursting in potassium and other nutrients like iron and vitamin D. Salmon is a mild-flavoured fish with a rich and slightly oily taste to it. Baked, grilled, and poached salmon will often taste citrusy and buttery, along with whatever accompanying flavours were added to the dish. Smoked salmon tastes smokey and subtly fishy, and canned salmon can often be oily. The aquatic habitats of the five species of salmon include streams, lakes, rivers, estuaries, marine foreshore areas, and the North Pacific Ocean.", family: "Fish", foodType: "Fish", usedAs: "Fish", @@ -1303,7 +1303,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/030-ewe_w2coor.png", description: - "Spring lamb refers to lamb which is between three and five months old at the point of slaughter. The meat of the animal is very tender at this stage, though it does not have the stronger flavour which develops in older lambs, as it is the grazing period which helps flavour to develop in their flesh. When shopping for lamb, look for firm meat with a velvety texture, and make sure to look for pink colouring. The darker the meat, the older it is. Lamb freezes well, and can be served in a variety of ways, whether roasted, grilled, braised, barbecued, or minced. Grass-fed lamb can have a lower impact on the climate than the processing required to farm some other meats, and to create meat replacement products that are based on foods like soya and almonds. However, animal farming in general consumes massive amounts of energy and resources, and accounts for a huge portion of emissions globally.", + "Spring lamb refers to lamb which is between three and five months old at the point of slaughter. The meat of the animal is very tender at this stage, though it does not have the stronger flavour which develops in older lambs, as it is the grazing period which helps flavour to develop in their flesh. When shopping for lamb, look for firm meat with a velvety texture, and make sure to look for pink colouring. The darker the meat, the older it is. Lamb freezes well, and can be served in a variety of ways, whether roasted, grilled, braised, barbecued, or minced. Grass-fed lamb can have a lower impact on the climate than the processing required to create meat replacement products that are based on foods like soya and almonds. However, sheep farming overall has one of the highest ecological impacts of all kinds of meat farming, and animal farming in general consumes massive amounts of energy and resources, and accounts for a huge portion of emissions globally.", family: "Meat", foodType: "Meat", usedAs: "Meat", @@ -1376,7 +1376,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175322/Seasonal/032-corn_sjtrrl.png", description: - "Sweetcorn - also known as corn on the cob - is a vegetable which is composed of several rows of tightly-packed kernels, which grow along a tough central core. Sweetcorn is best eaten as fresh as possible, as its sugars turn to starch quite quickly, which can mean it loses some of its taste and quality. Sweetcorn really shines when cooked simply, whether steamed, boiled, roasted or barbecued, and served with a little butter. Cooking times vary depending on the method you are using, but in general, fresh sweetcorn should not take very long to cook at all: a few minutes in boiling water, and up to fifteen if barbecued or roasted. Using salt in the water when cooking sweetcorn will toughen it up, so avoid it if you can, or add a little sugar instead to bring out sweetness. It can be bought fresh on the cob, tinned, or frozen. An alternative to sweetcorn could be a side of peas instead. ", + "Sweetcorn - also known as corn on the cob - is a vegetable which is composed of several rows of tightly-packed kernels, which grow along a tough central core. Sweetcorn is best eaten as fresh as possible, as its sugars turn to starch quite quickly, which can mean it loses some of its taste and quality. Sweetcorn really shines when cooked simply, whether steamed, boiled, roasted or barbecued, and served with a little butter. Cooking times vary depending on the method you are using, but in general, fresh sweetcorn should not take very long to cook at all: a few minutes in boiling water, and up to fifteen if barbecued or roasted. Using salt in the water when cooking sweetcorn will toughen it up, so avoid it if you can, or add a little sugar instead to bring out sweetness. It can be bought fresh on the cob, tinned, or frozen. An alternative to sweetcorn could be a side of peas instead.", family: "Grass", foodType: "Scientific Anomaly", usedAs: "Vegetable", From 860c7c0abb810a1080288dd5c06b889d1f47e799 Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Thu, 20 Oct 2022 10:46:28 +0100 Subject: [PATCH 70/82] Cherries plurality error. --- db/data.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/data.js b/db/data.js index f09f434..fcc5e52 100644 --- a/db/data.js +++ b/db/data.js @@ -315,7 +315,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175319/Seasonal/006-cherries_hkayof.png", description: - "Cherries are a small, generally red fruit, which is at its height in the summer. There are hundreds of varieties, which can be sweet, sour, or somewhere between. Sweeter cherries are suitable for eating raw, and the more sour ones are generally used for cooking in things like tarts, crumbles, sauces and other desserts. When shopping for cherries, look for fruits with a deep colouring and firm flesh, but make sure that they are not too hard. Cherries can be grown in the UK climate, and are also suitable to be grown in containers. Traditionally, you would need more than one cherry tree in order for them to pollinate and bear fruit, but newer varieties of cherry trees are often self-pollinating.", + "Cherries are a small, generally red fruit, which are at their height in the summer. There are hundreds of varieties, which can be sweet, sour, or somewhere between. Sweeter cherries are suitable for eating raw, and the more sour ones are generally used for cooking in things like tarts, crumbles, sauces and other desserts. When shopping for cherries, look for fruits with a deep colouring and firm flesh, but make sure that they are not too hard. Cherries can be grown in the UK climate, and are also suitable to be grown in containers. Traditionally, you would need more than one cherry tree in order for them to pollinate and bear fruit, but newer varieties of cherry trees are often self-pollinating.", family: "Rose", foodType: "Berry", usedAs: "Fruit", From 2beac4c6bfb21c3ea32622c5c4579315632eb7bc Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Thu, 20 Oct 2022 10:48:19 +0100 Subject: [PATCH 71/82] Added apostrophe. --- db/data.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/data.js b/db/data.js index fcc5e52..5ff5484 100644 --- a/db/data.js +++ b/db/data.js @@ -153,7 +153,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175319/Seasonal/002-blackcurrant_vnquni.png", description: - "Blackcurrants are a tart, dark-coloured berry that are at their peak in early to mid-summer. Recent research has suggested that berries - like blackcurrants - can help to prevent the onset of Alzheimers disease. Blackcurrants are also high in vitamin C. When looking for blackcurrants, make sure to pick ones with shiny and unblemished skins that are firm and plump. Blackcurrants will keep for several days in the fridge, and can also be frozen. They can be added raw to fruit salads, or otherwise can be cooked in some sugared water to sweeten them a little. Be careful not to overcook them, or they will lose their flavour. Blackcurrants are great turned into jams, juices and jellies, or when added to crumbles, tarts and other desserts like ice cream. Blackcurrants are fairly easy to grow, and prefer moist to well-drained soil. They thrive in full sun to partial shade, and can be grown in containers too - so long as you have one big enough!", + "Blackcurrants are a tart, dark-coloured berry that are at their peak in early to mid-summer. Recent research has suggested that berries - like blackcurrants - can help to prevent the onset of Alzheimer's disease. Blackcurrants are also high in vitamin C. When looking for blackcurrants, make sure to pick ones with shiny and unblemished skins that are firm and plump. Blackcurrants will keep for several days in the fridge, and can also be frozen. They can be added raw to fruit salads, or otherwise can be cooked in some sugared water to sweeten them a little. Be careful not to overcook them, or they will lose their flavour. Blackcurrants are great turned into jams, juices and jellies, or when added to crumbles, tarts and other desserts like ice cream. Blackcurrants are fairly easy to grow, and prefer moist to well-drained soil. They thrive in full sun to partial shade, and can be grown in containers too - so long as you have one big enough!", family: "example", foodType: "Berry", usedAs: "Fruit", From 8b06223431730721572cda62717ac484d352e183 Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Thu, 20 Oct 2022 10:53:48 +0100 Subject: [PATCH 72/82] Guinea fowl edit. --- db/data.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/data.js b/db/data.js index 5ff5484..951343b 100644 --- a/db/data.js +++ b/db/data.js @@ -600,7 +600,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175320/Seasonal/016-fowl_ac08xk.png", description: - "A small domesticated bird, which is a little bit gamier in taste than chicken. Guinea fowl originate from Africa, though can be found across Europe. They are at their best in the autumn months, between September and November. Guinea fowl has a lower fat content and a higher fat content than chicken. As guinea fowl is drier than chicken naturally, it can dry out while cooking, so take precautions not to overcook the bird. Wrapping guinea fowl with pancetta can prevent it from drying out, as can marinating it. Guinea fowl is a great option for roasting with stuffing.", + "A small domesticated bird, which is a little bit gamier in taste than chicken. Guinea fowl originate from Africa, though can be found across Europe. They are at their best in the autumn months, between September and November. Guinea fowl has a lower fat content than chicken. As guinea fowl is drier than chicken naturally, it can dry out while cooking, so take precautions not to overcook the bird. Wrapping guinea fowl with pancetta can prevent it from drying out, as can marinating it. Guinea fowl is a great option for roasting with stuffing.", family: "Meat", foodType: "Fowl", usedAs: "Meat", From d5f365cfdacd39acd7e749e43934df626d5a22de Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Thu, 20 Oct 2022 11:00:45 +0100 Subject: [PATCH 73/82] Removed space. --- db/data.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/data.js b/db/data.js index 951343b..b6fd343 100644 --- a/db/data.js +++ b/db/data.js @@ -636,7 +636,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637881/Seasonal/009-kale_wuhokp.png", description: - "Kale is a dark green leafy vegetable, and is a member of the cabbage family. It comes in two varieties: regular kale, which has smooth leaves, and curly kale, which has crinkly leaves, and is the more common of the two varieties. Kale is very high in a lot of minerals and vitamins, and is a nutritious vegetable which can contribute strongly to a varied and balanced diet. Kale is usually enjoyed boiled or steamed, as the leaves can be somewhat disagreeable and bitter in flavour if eaten raw. However, kale can also be sliced and added to stir fries, soups and risottos, or wilted in a pan and used as a side dish. Cold-hardy and resilient, kale is a great option for growing at home in the UK climate. ", + "Kale is a dark green leafy vegetable, and is a member of the cabbage family. It comes in two varieties: regular kale, which has smooth leaves, and curly kale, which has crinkly leaves, and is the more common of the two varieties. Kale is very high in a lot of minerals and vitamins, and is a nutritious vegetable which can contribute strongly to a varied and balanced diet. Kale is usually enjoyed boiled or steamed, as the leaves can be somewhat disagreeable and bitter in flavour if eaten raw. However, kale can also be sliced and added to stir fries, soups and risottos, or wilted in a pan and used as a side dish. Cold-hardy and resilient, kale is a great option for growing at home in the UK climate.", family: "Cabbage", foodType: "Cruciferous", usedAs: "Vegetable", From 85a9114ead370f1c4f81d9db294007dbb3e1ca79 Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Thu, 20 Oct 2022 11:03:26 +0100 Subject: [PATCH 74/82] Sputnik satellite lore reinstated. --- db/data.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/data.js b/db/data.js index b6fd343..c596219 100644 --- a/db/data.js +++ b/db/data.js @@ -660,7 +660,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637887/Seasonal/029-kohlrabi_nwtzii.png", description: - "Kohlrabi is part of the cabbage family. Its name translates from German to turnip cabbage. It has a mild, sweet flavour with a crisp, crunchy texture and can be found in two colours, the more common pale green as well as purple. Kohlrabi is an excellent source of vitamin C and a good source of fibre, vitamin b6 and potassium. You can cook and use the leaves of Kohlrabi like cabbage but the bulb is much more versatile and can be used in salads in a similar way to carrot or broccoli or roasted, steamed or stir fried and used as wedges, noodles or diced. Kohlrabi is more drought resistant than most brassicas and the purple varieties are hardier than green. It thrives in a sunny area in light, fertile and free-draining soil. Sow little and often for a constant supply. In cooler areas and where the soil is heavy clay, make early sowings indoors and transplant outdoors when hardier and the soil has warmed up. Harvest when young, between golf and tennis ball sized, as if you leave them too long they lose their flavour and tenderness.", + "Kohlrabi is part of the cabbage family. Its name translates from German to turnip cabbage, and in shape, they somewhat resemble a Sputnik satellite. It has a mild, sweet flavour with a crisp, crunchy texture and can be found in two colours, the more common pale green as well as purple. Kohlrabi is an excellent source of vitamin C and a good source of fibre, vitamin b6 and potassium. You can cook and use the leaves of Kohlrabi like cabbage but the bulb is much more versatile and can be used in salads in a similar way to carrot or broccoli or roasted, steamed or stir fried and used as wedges, noodles or diced. Kohlrabi is more drought resistant than most brassicas and the purple varieties are hardier than green. It thrives in a sunny area in light, fertile and free-draining soil. Sow little and often for a constant supply. In cooler areas and where the soil is heavy clay, make early sowings indoors and transplant outdoors when hardier and the soil has warmed up. Harvest when young, between golf and tennis ball sized, as if you leave them too long they lose their flavour and tenderness.", family: "Cabbage", foodType: "Root", usedAs: "Vegetable", From 846026a057a09c0b3512a6b8b314d06e8448ec26 Mon Sep 17 00:00:00 2001 From: madisonlowe Date: Thu, 20 Oct 2022 11:54:10 +0100 Subject: [PATCH 75/82] Updated changes. --- db/data.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/db/data.js b/db/data.js index c596219..dd7d338 100644 --- a/db/data.js +++ b/db/data.js @@ -891,7 +891,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175321/Seasonal/021-orange_oafni2.png", description: - "An iconic citrus fruit, which sometimes comes in varieties which are not actually orange-coloured at all. Oranges can be sweet or bitter, and can be tinged with yellow or red. As the various types of oranges ripen at different times, different oranges are available year-round in the UK, though they do all need to be imported, as the UK does not have the correct climate for growing oranges at scale. Oranges are a good source of vitamins and antioxidants, especially vitamin C and citric acid, which are important compounds for encouraging the absorption of iron. Oranges are often eaten raw as a snack, though they can also be turned into juices, added to drinks, or used in fruit salads or to make sauces and marmalades. They are a good addition to the pan when cooking game and fish too. Citrus plants are not hardy in the UK, though you may have some success growing orange trees inside of a greenhouse in particularly sunny spots.", + "An iconic citrus fruit, which sometimes comes in varieties which are not actually orange-coloured at all. Oranges can be sweet or bitter, and can be tinged with yellow or red. As the various types of oranges ripen at different times, different oranges are available year-round in the UK, though they do all need to be imported, as the UK does not have the correct climate for growing oranges at scale. Oranges are a good source of vitamins and antioxidants, especially vitamin C and citric acid, which are important compounds for encouraging the absorption of iron. Oranges are often eaten raw as a snack, though they can also be turned into juices, added to drinks, used in fruit salads, or made into sauces and marmalades. They are a good addition to the pan when cooking game and fish too. Citrus plants are not hardy in the UK, though you may have some success growing orange trees inside of a greenhouse in particularly sunny spots.", family: "Citrus", foodType: "Citrus", usedAs: "Fruit", @@ -949,7 +949,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175321/Seasonal/023-parsnip_zo8cbr.png", description: - "Parsnips are a pale root vegetable which are a member of the carrot family - which you might guess from the shape! They are commonly mashed or roasted. They have an earthy, sweet and gentle flavour. They suit lots of winter recipes like roasts, soups and stews. Alternatives to parsnips in recipes can include carrot or turnip. Young or smaller parsnips do not need peeling before cooking, just make sure to scrub them clean thoroughly. For bigger or older parsnips, peel them thinly before roasting or boiling. Look for firm, non-shrivelled parsnips, and avoid ones with brown patches or bruises. Parsnips are fairly easy to grow and require little maintenance, and can be left in the ground until you are ready to use them. If sown in spring, your parsnips should be ready by autumn.", + "Parsnips are a pale root vegetable and are a member of the carrot family - which you might guess from the shape! They are commonly mashed or roasted. They have an earthy, sweet and gentle flavour. They suit lots of winter recipes like roasts, soups and stews. Alternatives to parsnips in recipes can include carrot or turnip. Young or smaller parsnips do not need peeling before cooking, just make sure to scrub them clean thoroughly. For bigger or older parsnips, peel them thinly before roasting or boiling. Look for firm, non-shrivelled parsnips, and avoid ones with brown patches or bruises. Parsnips are fairly easy to grow and require little maintenance, and can be left in the ground until you are ready to use them. If sown in spring, your parsnips should be ready by autumn.", family: "Parsley", foodType: "Root", usedAs: "Vegetable", @@ -1098,7 +1098,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175321/Seasonal/026-potato_tent9c.png", description: - "Potatoes are an extremely popular root vegetable, with many varieties and many ways they can be cooked. They are technically a member of the nightshade family, like tomatoes and aubergines, and their shapes, colours and sizes can vary massively. Older potatoes should be scrubbed thoroughly before use, and any eyes should be removed, though otherwise, potatoes can be cooked with their skins on - unless you are boiling them for mash, in which case, it is better to peel them too. Any green spots should be removed from potatoes, as these bits will be mildly toxic, much like all above-ground plant growth on the original potato plants! Whether turned into fries, roasted, boiled, mashed, or added to stews, hashes, pies, or the hundreds of other recipes containing potato, they are a very versatile vegetable that you can do a lot with. Potatoes are available all year round, though different varieties are in season at different times. Potatoes can be grown at home with a fair amount of ease, though you will need a lot of soil and a very large, deep container in order to grow them. ", + "Potatoes are an extremely popular root vegetable, with many varieties and many ways they can be cooked. They are technically a member of the nightshade family, like tomatoes and aubergines, and their shapes, colours and sizes can vary massively. Older potatoes should be scrubbed thoroughly before use, and any eyes should be removed, though otherwise, potatoes can be cooked with their skins on - unless you are boiling them for mash, in which case, it is better to peel them too. Any green spots should be removed from potatoes, as these bits will be mildly toxic, much like all above-ground plant growth on the original potato plants! Whether turned into fries, roasted, boiled, mashed, or added to stews, hashes, pies, or the hundreds of other recipes containing potato, they are a very versatile vegetable that you can do a lot with. Potatoes are available all year round, though different varieties are in season at different times. Potatoes can be grown at home with a fair amount of ease, though you will need a lot of soil and a very large, deep container in order to grow them.", family: "Nightshade", foodType: "Root", usedAs: "Vegetable", @@ -1122,7 +1122,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175319/Seasonal/040-broccoli_n360kh.png", description: - "A cousin of broccoli, the leafier, crunchier, purple sprouting variety can be cooked and used in much the same way as the regular green version. As with all cruciferous foods, purple sprouting broccoli is highly nutritious, and a good source of vitamins A, B and C, iron, folic acid, calcium and fibre. The florets can be boiled in water, steamed, or fried with oil. Look for dark green-purple leaves and avoid wilting, and if you need an alternative, consider regular broccoli or cauliflower. Purple sprouting broccoli is extremely hardy, and can tolerate temperatures down below freezing, making them a good option for growing at home in the UK climate. ", + "A cousin of broccoli, the leafier, crunchier, purple sprouting variety can be cooked and used in much the same way as the regular green version. As with all cruciferous foods, purple sprouting broccoli is highly nutritious, and a good source of vitamins A, B and C, iron, folic acid, calcium and fibre. The florets can be boiled in water, steamed, or fried with oil. Look for dark green-purple leaves and avoid wilting, and if you need an alternative, consider regular broccoli or cauliflower. Purple sprouting broccoli is extremely hardy, and can tolerate temperatures down below freezing, making them a good option for growing at home in the UK climate.", family: "Cabbage", foodType: "Cruciferous", usedAs: "Vegetable", @@ -1183,7 +1183,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637893/Seasonal/045-raspberry_ux5ngf.png", description: - "Raspberries are an intense, usually red berry with a sweet taste that are widely used in a lot of recipes. They grow well in cool and damp climates, and some lesser known varieties can come in colours like black, yellow, and gold. Look for bright, evenly-coloured, and non-mushy berries when shopping. If you are buying a punnet, make sure that the bottom layer of berries has not been crushed by the ones above it. Raspberries pair well with other fruits and other berries, especially in desserts like crumbles and pies, or alongside things like ice cream. They are also good in jams, tarts, cheesecakes and trifles, and you can use them to make coulis, sauces for game, or to flavour white wine vinegar. They are in season from late June to early September. If you have a garden or an allotment, raspberries are quite easy to grow in British climates. ", + "Raspberries are an intense, usually red berry with a sweet taste that are widely used in a lot of recipes. They grow well in cool and damp climates, and some lesser known varieties can come in colours like black, yellow, and gold. Look for bright, evenly-coloured, and non-mushy berries when shopping. If you are buying a punnet, make sure that the bottom layer of berries has not been crushed by the ones above it. Raspberries pair well with other fruits and other berries, especially in desserts like crumbles and pies, or alongside things like ice cream. They are also good in jams, tarts, cheesecakes and trifles, and you can use them to make coulis, sauces for game, or to flavour white wine vinegar. They are in season from late June to early September. If you have a garden or an allotment, raspberries are quite easy to grow in British climates.", family: "Rose", foodType: "Berry", usedAs: "Fruit", @@ -1267,7 +1267,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637895/Seasonal/049-sorrel_zzzw7z.png", description: - "Sorrel is also referred to as spinach dock and is a plant known for its tart taste and powerful health benefits. This vibrant leafy green and its fruit are used to add a sharp, citrusy flavour to soups, sauces, salads, and beverages. Sorrel is a good source of Vitamin A and C and has been used to reduce inflammation. It is also an ingredient in the herbal cancer treatment Essiac. However, it should not be eaten in large quantities as it contains a high amount of oxalic acid. Sorrel is a leafy herb, like parsley or basil or mint, that can be chopped up to use in marinades and dressings, or stirred into soups or casseroles for a bit of fresh flavour. Sorrel thrives in a sunny or partially-shady spot, in fertile and moisture-retentive soil. It can be grown from seed, but as a perennial plant, you could also take a rooted cutting or a division from an existing plant. Sow sorrel seeds in spring, a few in small pots filled with seed compost, cover and water well.", + "Sorrel is also referred to as spinach dock and is a plant known for its tart taste and powerful health benefits. This vibrant leafy green and its fruit are used to add a sharp, citrusy flavour to soups, sauces, salads, and beverages. Sorrel is a good source of vitamin A and C, and has been used to reduce inflammation. It is also an ingredient in the herbal cancer treatment Essiac. However, it should not be eaten in large quantities as it contains a high amount of oxalic acid. Sorrel is a leafy herb, like parsley or basil or mint, that can be chopped up to use in marinades and dressings, or stirred into soups or casseroles for a bit of fresh flavour. Sorrel thrives in a sunny or partially-shady spot, in fertile and moisture-retentive soil. It can be grown from seed, but as a perennial plant, you could also take a rooted cutting or a division from an existing plant. Sow sorrel seeds in spring, a few in small pots filled with seed compost, cover and water well.", family: "example", foodType: "Leaf", usedAs: "Vegetable", @@ -1279,7 +1279,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637895/Seasonal/050-spinach_whzzyi.png", description: - "Spinach is a leafy green vegetable that originated in Persia. It belongs to the amaranth family and is related to beets and quinoa. If you are interested in its health-boosting potential, spinach is an easy food to add to your diet. Spinach is rich in many nutrients, including Vitamin A, Vitamin C, Vitamin K, iron, folate, and potassium. Spinach is chock full of fibre too. Spinach may decrease oxidative stress, improve eye health, and help prevent heart disease and cancer. There are three popular ways to cook Spinach: steaming, sauteing and blanching. Either way, this nutrient-dense leafy green vegetable cooks in just minutes for a fast side dish or versatile ingredient. Winter spinach cultivars need a sunny position; summer spinach varieties are better in partial shade so are among the easiest vegetables to grow in shade. Once you have harvested your spinach, all you need to do is water it and wait patiently for the next harvest. Spinach leaves will regrow in just a matter of days.", + "Spinach is a leafy green vegetable that originated in Persia. It belongs to the amaranth family and is related to beets and quinoa. If you are interested in its health-boosting potential, spinach is an easy food to add to your diet. Spinach is rich in many nutrients, including vitamins A, C and K, iron, folate, and potassium. Spinach is chock-full of fibre too. Spinach may decrease oxidative stress, improve eye health, and help prevent heart disease and cancer. There are three popular ways to cook Spinach: steaming, sauteing and blanching. Either way, this nutrient-dense leafy green vegetable cooks in just minutes for a fast side dish or versatile ingredient. Winter spinach cultivars need a sunny position: summer spinach varieties are better in partial shade, so are among the easiest vegetables to grow in shade. Once you have harvested your spinach, all you need to do is water it and wait patiently for the next harvest. Spinach leaves will regrow in just a matter of days.", family: "Buckwheat", foodType: "Leaf", usedAs: "Vegetable", @@ -1291,7 +1291,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175319/Seasonal/042-salad_l7a7te.png", description: - "Spring greens are the first young cabbages of the year. They are fresh, loose leafy greens, without the hard heart of regular cabbages. Look for spring greens with firm, fresh leaves, and no wilting. To use, remove the outer leaves, wash gently, then shred for use or cook. They can be added at the end of a stir fry, steamed and served with butter, or used in stews and soups. Take care not to overcook them, however, or they will develop an unpleasant smell and taste. As with cabbages, their older counterpart, spring greens can be grown in the UK climate.", + "Spring greens are the first young cabbages of the year. They are fresh, loose leafy greens, without the hard heart of regular cabbages. Look for spring greens with firm, fresh leaves, and no wilting. To use, remove the outer leaves, wash gently, then shred for use or cooking. They can be added at the end of a stir fry, steamed and served with butter, or used in stews and soups. Take care not to overcook them, however, or they will develop an unpleasant smell and taste. As with cabbages, their older counterpart, spring greens can be grown in the UK climate.", family: "Cabbage", foodType: "Leaf", usedAs: "Vegetable", @@ -1340,7 +1340,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637897/Seasonal/052-strawberry_pxugsj.png", description: - "A popular sweet, juicy seasonal berry enjoyed in cuisines around the world. But Botanically, the strawberry fruit is considered an “accessory fruit” and is not a true berry. Strawberries are actually a group of fruits (genus Fragaria) containing several varieties and are part of the rose family. Strawberries are usually sweet with a firm and juicy but not tough flesh. The tiny seeds add a light crunch. Flavour, colour, size, and texture can vary depending on the variety of strawberry. They are an excellent source of vitamin C and manganese and also contain decent amounts of folate (vitamin B9) and potassium. The now-common garden strawberry did not hit its stride until the 18th century, but local wild berries have been eaten since ancient Roman times. Modern strawberries are grown and eaten all over the world and can be served raw, cooked, or dried. Strawberries like fertile, well-drained, slightly acidic soil, and do best in full sun, but will tolerate some shade. Avoid planting in sites prone to frost, which can damage the flowers, or in exposed locations, which make it hard for pollinating insects to reach the flowers.", + "A popular sweet, juicy seasonal berry enjoyed in cuisines around the world. But Botanically, the strawberry fruit is considered an accessory fruit and is not a true berry. Strawberries are actually a group of fruits (genus Fragaria) containing several varieties and are part of the rose family. Strawberries are usually sweet with a firm and juicy but not tough flesh. The tiny seeds add a light crunch. Flavour, colour, size, and texture can vary depending on the variety of strawberry. They are an excellent source of vitamin C and manganese and also contain decent amounts of folate (vitamin B9) and potassium. The now-common garden strawberry did not hit its stride until the 18th century, but local wild berries have been eaten since ancient Roman times. Modern strawberries are grown and eaten all over the world and can be served raw, cooked, or dried. Strawberries like fertile, well-drained, slightly acidic soil, and do best in full sun, but will tolerate some shade. Avoid planting in sites prone to frost, which can damage the flowers, or in exposed locations, which make it hard for pollinating insects to reach the flowers.", family: "Rose", foodType: "Berry", usedAs: "Fruit", @@ -1388,7 +1388,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1659637897/Seasonal/053-chard_p4ydid.png", description: - "Swiss Chard, or leaf beet, is an attractive vegetable, with leaf stalks in an array of bright colours. The stalks - which can be white, yellow, red, purple, pink, striped and so on - resemble flat celery with a sweet taste slightly reminiscent of beets. Swiss chard contains vitamin K, vitamin A and is also a good source of magnesium which helps keep your muscles, bones and nerves healthy. Young leaves can be eaten raw in salads, while larger leaves are delicious cooked. The large, firm leaves are mild, sweet, earthy and just slightly bitter; on the whole, it is a bit milder than spinach. Typically the leaves are boiled for a few minutes. It is similar to spinach but easier to grow. Young chard leaves are delicious eaten fresh and the fully-formed leaves will be ready to harvest about 10-12 weeks after sowing. Cut individual leaves as you need them and the plant will keep producing new growth.", + "Swiss Chard, or leaf beet, is an attractive vegetable, with leaf stalks in an array of bright colours. The stalks - which can be white, yellow, red, purple, pink, striped and so on - resemble flat celery with a sweet taste slightly reminiscent of beets. Swiss chard contains vitamins K and A, and is also a good source of magnesium which helps keep your muscles, bones and nerves healthy. Young leaves can be eaten raw in salads, while larger leaves are delicious cooked. The large, firm leaves are mild, sweet, earthy and just slightly bitter; on the whole, it is a bit milder than spinach. Typically the leaves are boiled for a few minutes. It is similar to spinach but easier to grow. Young chard leaves are delicious eaten fresh and the fully-formed leaves will be ready to harvest about 10-12 weeks after sowing. Cut individual leaves as you need them and the plant will keep producing new growth.", family: "Beet", foodType: "Leaf", usedAs: "Vegetable", @@ -1460,7 +1460,7 @@ const produce = [ imageURL: "https://res.cloudinary.com/dvpop7e9w/image/upload/v1666175322/Seasonal/036-deer_nccggr.png", description: - "In Britain today, venison specifically refers to deer meat, though in other countries and historically, it could refer to game from any furred animal, or animals like elk and reindeer. It is a dark, lean and tender meat, and age does affect the meat: the younger the animal, the more tender its meat. Additional factors like diet, and how the animal was raised and how it was handled after it was killed, can all affect its meat. Farmed venison is available year round, as is wild roe deer. Wild red and fallow deer are only in season from late October through mid-February, however. Cuts of venison should be chosen according to how you want to cook it, as different cuts from different parts of the animal will have different qualities that will better suit roasting, grilling, barbecuing, or stewing processes, and so on. The market for venison is steadily growing as consumers seek alternatives to traditionally farmed animals like chicken and cows. As deer have only been farmed in the past few decades, and are not domesticated animals, the farming process for many suppliers tends to be less intense and free range. However, increases to scale farming to match demand will not necessarily scale sustainability, as the energy demands of intensive meat farming remain regardless of the meat which is being farmed.", + "In Britain today, venison specifically refers to deer meat, though in other countries and historically, it could refer to game from any furred animal, or animals like elk and reindeer. It is a dark, lean and tender meat, and age does affect the meat: the younger the animal, the more tender its meat. Additional factors like diet, how the animal was raised, and how it was handled after it was killed can all affect its meat. Farmed venison is available year round, as is wild roe deer. Wild red and fallow deer are only in season from late October through mid-February, however. Cuts of venison should be chosen according to how you want to cook it, as different cuts from different parts of the animal will have different qualities that will better suit roasting, grilling, barbecuing, or stewing processes, and so on. The market for venison is steadily growing as consumers seek alternatives to traditionally farmed animals like chicken and cows. As deer have only been farmed in the past few decades, and are not domesticated animals, the farming process for many suppliers tends to be less intense and free range. However, increases to scale farming to match demand will not necessarily scale sustainability, as the energy demands of intensive meat farming remain regardless of the meat which is being farmed.", family: "Meat", foodType: "Meat", usedAs: "Meat", From 251c74dd0d511ea859fc4d1397a816576bd952d7 Mon Sep 17 00:00:00 2001 From: Andy Johnson Date: Wed, 27 Nov 2024 14:22:06 +0000 Subject: [PATCH 76/82] Remove unnecessary success boolean from response --- routes/index.js | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/routes/index.js b/routes/index.js index dbd07e5..1a4593e 100644 --- a/routes/index.js +++ b/routes/index.js @@ -15,41 +15,40 @@ export const router = express.Router(); router.get("/", async function (req, res) { if (req.query.item !== undefined) { let result = await getByItem(req.query.item); - return res.json({ success: true, payload: result }); + return res.json({ payload: result }); } if (req.query.month !== undefined) { let result = await getByMonth(req.query.month); - return res.json({ success: true, payload: result }); + return res.json({ payload: result }); } if (req.query.allergen !== undefined) { let result = await getByAllergen(req.query.allergen); - return res.json({ success: true, payload: result }); + return res.json({ payload: result }); } if (req.query.family !== undefined) { let result = await getByFamily(req.query.family); - return res.json({ success: true, payload: result }); + return res.json({ payload: result }); } if (req.query.foodType !== undefined) { let result = await getByFoodType(req.query.foodType); - return res.json({ success: true, payload: result }); + return res.json({ payload: result }); } if (req.query.usedAs !== undefined) { let result = await getByUsedAs(req.query.usedAs); - return res.json({ success: true, payload: result }); + return res.json({ payload: result }); } let result = await getAll(); - return res.json({ success: true, payload: result }); + return res.json({ payload: result }); }); router.get("/random", async function (req, res) { if (req.query.month !== undefined) { let allResults = await getByMonth(req.query.month); let result = getRandom(allResults); - return res.json({ success: true, payload: result }); + return res.json({ payload: result }); } - return res.json({ - success: false, - payload: "Sorry, no random food for you today.", + return res.status(400).json({ + payload: "Please provide a month to query by (e.g. ?month=November)", }); }); From 7ef38a07490db68cca58bfce970d4e0d5b23805e Mon Sep 17 00:00:00 2001 From: Andy Johnson Date: Wed, 27 Nov 2024 14:22:52 +0000 Subject: [PATCH 77/82] Update tests to no longer expect success boolean --- app.test.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/app.test.js b/app.test.js index c2b723e..729f215 100644 --- a/app.test.js +++ b/app.test.js @@ -10,7 +10,7 @@ test("Testing get all function using /produce route", async () => { expect(response.status).toEqual(200); expect(response.body).toEqual( expect.objectContaining({ - success: true, + payload: expect.arrayContaining([ expect.objectContaining({ id: expect.any(Number), @@ -35,7 +35,7 @@ test("Testing to get a particular item by using a query in the produce route", a expect(response.status).toEqual(200); expect(response.body).toEqual( expect.objectContaining({ - success: true, + payload: expect.arrayContaining([ expect.objectContaining({ id: expect.any(Number), @@ -60,7 +60,7 @@ test("Testing to get a particular month from the produce route using a month que expect(response.status).toEqual(200); expect(response.body).toEqual( expect.objectContaining({ - success: true, + payload: expect.arrayContaining([ expect.objectContaining({ id: expect.any(Number), @@ -85,7 +85,7 @@ test("Testing to get by allergens using a query in the produce route", async () expect(response.status).toEqual(200); expect(response.body).toEqual( expect.objectContaining({ - success: true, + payload: expect.arrayContaining([ expect.objectContaining({ id: expect.any(Number), @@ -110,7 +110,7 @@ test("Testing to getByFamily using a query in the produce route", async () => { expect(response.status).toEqual(200); expect(response.body).toEqual( expect.objectContaining({ - success: true, + payload: expect.arrayContaining([ expect.objectContaining({ id: expect.any(Number), @@ -135,7 +135,7 @@ test("Testing to getByFoodType using a query in the produce route", async () => expect(response.status).toEqual(200); expect(response.body).toEqual( expect.objectContaining({ - success: true, + payload: expect.arrayContaining([ expect.objectContaining({ id: expect.any(Number), @@ -160,7 +160,7 @@ test("Testing to getByUsedAs using a query in the produce route", async () => { expect(response.status).toEqual(200); expect(response.body).toEqual( expect.objectContaining({ - success: true, + payload: expect.arrayContaining([ expect.objectContaining({ id: expect.any(Number), @@ -193,7 +193,7 @@ test("Testing that random produce returns an object with expected key value pair expect(response.status).toEqual(200); expect(response.body).toEqual( expect.objectContaining({ - success: true, + payload: expect.arrayContaining([ expect.objectContaining({ id: expect.any(Number), From 74c38c1337b81e5cc13ebe710e6918d6a87fec6b Mon Sep 17 00:00:00 2001 From: Andy Johnson Date: Wed, 27 Nov 2024 14:23:06 +0000 Subject: [PATCH 78/82] Remove console log --- models/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/models/index.js b/models/index.js index c1469d1..2b8c8b3 100644 --- a/models/index.js +++ b/models/index.js @@ -1,7 +1,6 @@ import query from "../db/index.js"; export async function getAll() { - console.log(`getAll Model reached`); let res = await query(`SELECT * FROM produce`); return res.rows; } From 77fc3d8de74d1e62d7c30b221e918478c50f8a6b Mon Sep 17 00:00:00 2001 From: Andy Johnson Date: Wed, 27 Nov 2024 14:23:15 +0000 Subject: [PATCH 79/82] Make query function async --- db/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/index.js b/db/index.js index cafeb5f..f66c63c 100644 --- a/db/index.js +++ b/db/index.js @@ -8,7 +8,7 @@ export const pool = new pg.Pool({ ssl: { rejectUnauthorized: false }, }); -export default function query(text, params, callback) { +export default async function query(text, params, callback) { return pool.query(text, params, callback); } From 43c167f3261891202128e024e9a12101ae8d2bf1 Mon Sep 17 00:00:00 2001 From: Andy Johnson Date: Wed, 27 Nov 2024 14:23:42 +0000 Subject: [PATCH 80/82] Run npm audit to squash vulnerabilities --- package-lock.json | 1571 +++++++++++++++++++++------------------------ package.json | 6 +- 2 files changed, 720 insertions(+), 857 deletions(-) diff --git a/package-lock.json b/package-lock.json index c28266b..c9e8715 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,14 +10,14 @@ "license": "ISC", "dependencies": { "cors": "^2.8.5", - "dotenv": "^16.0.1", "express": "^4.18.1", "pg": "^8.7.3", "supertest": "^6.2.4" }, "devDependencies": { + "dotenv": "^16.0.1", "jest": "^28.1.3", - "nodemon": "^2.0.19" + "nodemon": "^3.1.7" } }, "node_modules/@ampproject/remapping": { @@ -34,12 +34,15 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.18.6" + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -84,61 +87,43 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/core/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.10.tgz", - "integrity": "sha512-0+sW7e3HjQbiHbj1NeU/vN8ornohYlacAfZIaXhdoGweQqgcNy69COVciYYqEXJ/v+9OBA7Frxm4CVAuNqKeNA==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", + "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.18.10", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" + "@babel/parser": "^7.26.2", + "@babel/types": "^7.26.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -163,10 +148,11 @@ } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -180,31 +166,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", - "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", - "dev": true, - "dependencies": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-module-imports": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", @@ -270,19 +231,21 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", - "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -310,75 +273,15 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/@babel/parser": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@babel/types": "^7.26.0" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.10.tgz", - "integrity": "sha512-TYk3OA0HKL6qNryUayb5UUEhM/rkOQozIBEA5ITXh5DWrSp0TlUQXMyZmnWxG/DizSWBeeQ0Zbc5z8UGaaqoeg==", - "dev": true, "bin": { "parser": "bin/babel-parser.js" }, @@ -549,72 +452,48 @@ } }, "node_modules/@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.10.tgz", - "integrity": "sha512-J7ycxg0/K9XCtLyHf0cz2DqDihonJeIo+z+HEdRe9YuT8TY4A66i+Ab2/xZCEW7Ro60bPCBBfqqboHSamoV3+g==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.10", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10", - "debug": "^4.1.0", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", + "debug": "^4.3.1", "globals": "^11.1.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/traverse/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/traverse/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/@babel/types": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz", - "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.18.10", - "@babel/helper-validator-identifier": "^7.18.6", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -953,10 +832,11 @@ } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -968,13 +848,14 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@sinclair/typebox": { @@ -1195,7 +1076,8 @@ "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "license": "MIT" }, "node_modules/asynckit": { "version": "0.4.0", @@ -1309,20 +1191,21 @@ } }, "node_modules/body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", "dependencies": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "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.10.3", - "raw-body": "2.5.1", + "qs": "6.13.0", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -1335,6 +1218,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -1342,7 +1226,8 @@ "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/brace-expansion": { "version": "1.1.11", @@ -1355,12 +1240,13 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -1421,17 +1307,25 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "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" @@ -1635,9 +1529,10 @@ } }, "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -1658,9 +1553,10 @@ "dev": true }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -1671,9 +1567,10 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "node_modules/cookiejar": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", - "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "license": "MIT" }, "node_modules/cors": { "version": "2.8.5", @@ -1688,10 +1585,11 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -1702,12 +1600,20 @@ } }, "node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/dedent": { @@ -1725,6 +1631,23 @@ "node": ">=0.10.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==", + "license": "MIT", + "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/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -1737,6 +1660,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -1745,6 +1669,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -1760,9 +1685,10 @@ } }, "node_modules/dezalgo": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", - "integrity": "sha512-K7i4zNfT2kgQz3GylDw40ot9GAE47sFZ9EXHFSPP6zONLgH6kWXE0KWJchkbQJLBkRazq4APwZ4OwiFFlT95OQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "license": "ISC", "dependencies": { "asap": "^2.0.0", "wrappy": "1" @@ -1781,6 +1707,7 @@ "version": "16.0.1", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz", "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==", + "dev": true, "engines": { "node": ">=12" } @@ -1788,7 +1715,8 @@ "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==" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" }, "node_modules/electron-to-chromium": { "version": "1.4.210", @@ -1815,9 +1743,10 @@ "dev": true }, "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==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -1831,6 +1760,27 @@ "is-arrayish": "^0.2.1" } }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -1843,7 +1793,8 @@ "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==" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" }, "node_modules/escape-string-regexp": { "version": "2.0.0", @@ -1871,6 +1822,7 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -1924,36 +1876,37 @@ } }, "node_modules/express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", + "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.0", + "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", + "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "0.1.10", "proxy-addr": "~2.0.7", - "qs": "6.10.3", + "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "0.19.0", + "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -1998,10 +1951,11 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -2010,12 +1964,13 @@ } }, "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", "dependencies": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -2030,6 +1985,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -2037,7 +1993,8 @@ "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/find-up": { "version": "4.1.0", @@ -2066,30 +2023,20 @@ } }, "node_modules/formidable": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.0.1.tgz", - "integrity": "sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", + "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", + "license": "MIT", "dependencies": { - "dezalgo": "1.0.3", - "hexoid": "1.0.0", - "once": "1.4.0", - "qs": "6.9.3" + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0", + "qs": "^6.11.0" }, "funding": { "url": "https://ko-fi.com/tunnckoCore/commissions" } }, - "node_modules/formidable/node_modules/qs": { - "version": "6.9.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz", - "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==", - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -2102,6 +2049,7 @@ "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -2127,9 +2075,13 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/gensync": { "version": "1.0.0-beta.2", @@ -2150,13 +2102,19 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "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" @@ -2224,6 +2182,18 @@ "node": ">=4" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", @@ -2234,6 +2204,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "dependencies": { "function-bind": "^1.1.1" }, @@ -2250,10 +2221,35 @@ "node": ">=4" } }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -2261,6 +2257,18 @@ "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==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/hexoid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", @@ -2279,6 +2287,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -2303,6 +2312,7 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -2441,6 +2451,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -2489,10 +2500,11 @@ } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -2546,29 +2558,6 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-source-maps/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/istanbul-reports": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", @@ -3043,21 +3032,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/jest-util": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", @@ -3165,7 +3139,8 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-yaml": { "version": "3.14.1", @@ -3181,15 +3156,16 @@ } }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-parse-even-better-errors": { @@ -3199,10 +3175,11 @@ "dev": true }, "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -3246,17 +3223,6 @@ "node": ">=8" } }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -3273,10 +3239,11 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -3294,14 +3261,19 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", "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==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/merge-stream": { "version": "2.0.0", @@ -3318,12 +3290,13 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -3334,6 +3307,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -3413,19 +3387,19 @@ "dev": true }, "node_modules/nodemon": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.19.tgz", - "integrity": "sha512-4pv1f2bMDj0Eeg/MhGqxrtveeQ5/G/UVe9iO6uTZzjnRluSA4PVWf8CW99LUPwGB3eNIA7zUFoP77YuI7hOc0A==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.7.tgz", + "integrity": "sha512-hLj7fuMow6f0lbB0cD14Lz2xNjwsyruH251Pk4t/yIitCFJbmY1myuLlHm/q06aST4jg6EgAh74PIBBrRqpVAQ==", "dev": true, - "hasInstallScript": true, + "license": "MIT", "dependencies": { "chokidar": "^3.5.2", - "debug": "^3.2.7", + "debug": "^4", "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "pstree.remy": "^1.1.8", - "semver": "^5.7.1", - "simple-update-notifier": "^1.0.7", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", "supports-color": "^5.5.0", "touch": "^3.1.0", "undefsafe": "^2.0.5" @@ -3434,7 +3408,7 @@ "nodemon": "bin/nodemon.js" }, "engines": { - "node": ">=8.10.0" + "node": ">=10" }, "funding": { "type": "opencollective", @@ -3486,9 +3460,13 @@ } }, "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3497,6 +3475,7 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -3605,6 +3584,7 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -3643,9 +3623,10 @@ "dev": true }, "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==" + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", + "license": "MIT" }, "node_modules/pg": { "version": "8.7.3", @@ -3854,11 +3835,12 @@ "dev": true }, "node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -3871,14 +3853,16 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "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==", + "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -4013,21 +3997,26 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" }, "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", "bin": { - "semver": "bin/semver" + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -4051,33 +4040,63 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/send/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==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "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==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", "dependencies": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.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==", + "license": "MIT", + "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==" + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" }, "node_modules/shebang-command": { "version": "2.0.0", @@ -4101,13 +4120,18 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "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==", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "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" @@ -4120,24 +4144,16 @@ "dev": true }, "node_modules/simple-update-notifier": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", - "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", "dev": true, + "license": "MIT", "dependencies": { - "semver": "~7.0.0" + "semver": "^7.5.3" }, "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/simple-update-notifier/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "node": ">=10" } }, "node_modules/sisteransi": { @@ -4204,6 +4220,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -4306,22 +4323,6 @@ "node": ">=6.4.0 <13 || >=14" } }, - "node_modules/superagent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/superagent/node_modules/mime": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", @@ -4333,25 +4334,6 @@ "node": ">=4.0.0" } }, - "node_modules/superagent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/superagent/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/supertest": { "version": "6.2.4", "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.2.4.tgz", @@ -4458,20 +4440,12 @@ "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -4483,6 +4457,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", "engines": { "node": ">=0.6" } @@ -4524,6 +4499,7 @@ "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -4542,6 +4518,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -4683,11 +4660,6 @@ "node": ">=10" } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/yargs": { "version": "17.5.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", @@ -4740,12 +4712,14 @@ } }, "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, "requires": { - "@babel/highlight": "^7.18.6" + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" } }, "@babel/compat-data": { @@ -4777,49 +4751,36 @@ "semver": "^6.3.0" }, "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } }, "@babel/generator": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.10.tgz", - "integrity": "sha512-0+sW7e3HjQbiHbj1NeU/vN8ornohYlacAfZIaXhdoGweQqgcNy69COVciYYqEXJ/v+9OBA7Frxm4CVAuNqKeNA==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", + "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", "dev": true, "requires": { - "@babel/types": "^7.18.10", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" + "@babel/parser": "^7.26.2", + "@babel/types": "^7.26.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" }, "dependencies": { "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "requires": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" } } } @@ -4837,9 +4798,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } @@ -4850,25 +4811,6 @@ "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", "dev": true }, - "@babel/helper-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", - "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", - "dev": true, - "requires": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, "@babel/helper-module-imports": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", @@ -4919,15 +4861,15 @@ } }, "@babel/helper-string-parser": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", - "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "dev": true }, "@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true }, "@babel/helper-validator-option": { @@ -4947,66 +4889,15 @@ "@babel/types": "^7.18.9" } }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "@babel/parser": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - } + "@babel/types": "^7.26.0" } }, - "@babel/parser": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.10.tgz", - "integrity": "sha512-TYk3OA0HKL6qNryUayb5UUEhM/rkOQozIBEA5ITXh5DWrSp0TlUQXMyZmnWxG/DizSWBeeQ0Zbc5z8UGaaqoeg==", - "dev": true - }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", @@ -5125,60 +5016,39 @@ } }, "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", "dev": true, "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" } }, "@babel/traverse": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.10.tgz", - "integrity": "sha512-J7ycxg0/K9XCtLyHf0cz2DqDihonJeIo+z+HEdRe9YuT8TY4A66i+Ab2/xZCEW7Ro60bPCBBfqqboHSamoV3+g==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", "dev": true, "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.10", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10", - "debug": "^4.1.0", + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", + "debug": "^4.3.1", "globals": "^11.1.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } } }, "@babel/types": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz", - "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", "dev": true, "requires": { - "@babel/helper-string-parser": "^7.18.10", - "@babel/helper-validator-identifier": "^7.18.6", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" } }, "@bcoe/v8-coverage": { @@ -5444,9 +5314,9 @@ "dev": true }, "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true }, "@jridgewell/sourcemap-codec": { @@ -5456,13 +5326,13 @@ "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "@sinclair/typebox": { @@ -5752,20 +5622,20 @@ "dev": true }, "body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "requires": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "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.10.3", - "raw-body": "2.5.1", + "qs": "6.13.0", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -5796,12 +5666,12 @@ } }, "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "browserslist": { @@ -5842,12 +5712,15 @@ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" }, "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "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" } }, "callsites": { @@ -5995,9 +5868,9 @@ } }, "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" }, "convert-source-map": { "version": "1.8.0", @@ -6017,9 +5890,9 @@ } }, "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==" }, "cookie-signature": { "version": "1.0.6", @@ -6027,9 +5900,9 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "cookiejar": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", - "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==" }, "cors": { "version": "2.8.5", @@ -6041,9 +5914,9 @@ } }, "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "requires": { "path-key": "^3.1.0", @@ -6052,12 +5925,11 @@ } }, "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "requires": { - "ms": "^2.1.1" + "ms": "^2.1.3" } }, "dedent": { @@ -6072,6 +5944,16 @@ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true }, + "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==", + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -6094,9 +5976,9 @@ "dev": true }, "dezalgo": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", - "integrity": "sha512-K7i4zNfT2kgQz3GylDw40ot9GAE47sFZ9EXHFSPP6zONLgH6kWXE0KWJchkbQJLBkRazq4APwZ4OwiFFlT95OQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", "requires": { "asap": "^2.0.0", "wrappy": "1" @@ -6111,7 +5993,8 @@ "dotenv": { "version": "16.0.1", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz", - "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==" + "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==", + "dev": true }, "ee-first": { "version": "1.1.1", @@ -6137,9 +6020,9 @@ "dev": true }, "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==" }, "error-ex": { "version": "1.3.2", @@ -6150,6 +6033,19 @@ "is-arrayish": "^0.2.1" } }, + "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==", + "requires": { + "get-intrinsic": "^1.2.4" + } + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -6215,36 +6111,36 @@ } }, "express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.0", + "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", + "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "0.1.10", "proxy-addr": "~2.0.7", - "qs": "6.10.3", + "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "0.19.0", + "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -6288,21 +6184,21 @@ } }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "requires": { "to-regex-range": "^5.0.1" } }, "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "requires": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -6346,21 +6242,14 @@ } }, "formidable": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.0.1.tgz", - "integrity": "sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", + "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", "requires": { - "dezalgo": "1.0.3", - "hexoid": "1.0.0", - "once": "1.4.0", - "qs": "6.9.3" - }, - "dependencies": { - "qs": { - "version": "6.9.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz", - "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==" - } + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0", + "qs": "^6.11.0" } }, "forwarded": { @@ -6387,9 +6276,9 @@ "optional": true }, "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" }, "gensync": { "version": "1.0.0-beta.2", @@ -6404,13 +6293,15 @@ "dev": true }, "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" } }, "get-package-type": { @@ -6454,6 +6345,14 @@ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "requires": { + "get-intrinsic": "^1.1.3" + } + }, "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", @@ -6464,6 +6363,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -6474,11 +6374,32 @@ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, + "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==", + "requires": { + "es-define-property": "^1.0.0" + } + }, + "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==" + }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "requires": { + "function-bind": "^1.1.2" + } + }, "hexoid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", @@ -6647,9 +6568,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } @@ -6691,23 +6612,6 @@ "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", "source-map": "^0.6.1" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } } }, "istanbul-reports": { @@ -7070,17 +6974,6 @@ "natural-compare": "^1.4.0", "pretty-format": "^28.1.3", "semver": "^7.3.5" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "jest-util": { @@ -7180,9 +7073,9 @@ } }, "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", "dev": true }, "json-parse-even-better-errors": { @@ -7192,9 +7085,9 @@ "dev": true }, "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true }, "kleur": { @@ -7224,14 +7117,6 @@ "p-locate": "^4.1.0" } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -7242,9 +7127,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } @@ -7264,9 +7149,9 @@ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" }, "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==" }, "merge-stream": { "version": "2.0.0", @@ -7280,12 +7165,12 @@ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" }, "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "requires": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" } }, @@ -7351,18 +7236,18 @@ "dev": true }, "nodemon": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.19.tgz", - "integrity": "sha512-4pv1f2bMDj0Eeg/MhGqxrtveeQ5/G/UVe9iO6uTZzjnRluSA4PVWf8CW99LUPwGB3eNIA7zUFoP77YuI7hOc0A==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.7.tgz", + "integrity": "sha512-hLj7fuMow6f0lbB0cD14Lz2xNjwsyruH251Pk4t/yIitCFJbmY1myuLlHm/q06aST4jg6EgAh74PIBBrRqpVAQ==", "dev": true, "requires": { "chokidar": "^3.5.2", - "debug": "^3.2.7", + "debug": "^4", "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "pstree.remy": "^1.1.8", - "semver": "^5.7.1", - "simple-update-notifier": "^1.0.7", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", "supports-color": "^5.5.0", "touch": "^3.1.0", "undefsafe": "^2.0.5" @@ -7398,9 +7283,9 @@ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" }, "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==" }, "on-finished": { "version": "2.4.1", @@ -7509,9 +7394,9 @@ "dev": true }, "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==" + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" }, "pg": { "version": "8.7.3", @@ -7664,11 +7549,11 @@ "dev": true }, "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "requires": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" } }, "range-parser": { @@ -7677,9 +7562,9 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "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==", "requires": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -7770,15 +7655,14 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==" }, "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "requires": { "debug": "2.6.9", "depd": "2.0.0", @@ -7809,18 +7693,36 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" } } }, "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==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "requires": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" + } + }, + "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==", + "requires": { + "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" } }, "setprototypeof": { @@ -7844,13 +7746,14 @@ "dev": true }, "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "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==", "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" } }, "signal-exit": { @@ -7860,20 +7763,12 @@ "dev": true }, "simple-update-notifier": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", - "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", "dev": true, "requires": { - "semver": "~7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } + "semver": "^7.5.3" } }, "sisteransi": { @@ -8003,31 +7898,10 @@ "semver": "^7.3.7" }, "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, "mime": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } } } }, @@ -8109,12 +7983,6 @@ "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -8261,11 +8129,6 @@ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "yargs": { "version": "17.5.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", diff --git a/package.json b/package.json index 8c5f482..8a820d3 100644 --- a/package.json +++ b/package.json @@ -1,19 +1,19 @@ { "dependencies": { "cors": "^2.8.5", - "dotenv": "^16.0.1", "express": "^4.18.1", "pg": "^8.7.3", "supertest": "^6.2.4" }, "devDependencies": { + "dotenv": "^16.0.1", "jest": "^28.1.3", - "nodemon": "^2.0.19" + "nodemon": "^3.1.7" }, "name": "final-project_back-end-12", "description": "[![Open in Visual Studio Code](https://classroom.github.com/assets/open-in-vscode-c66648af7eb3fe8bc4f294546bfd86ef473780cde1dea487d3c4ff354943c9ae.svg)](https://classroom.github.com/online_ide?assignment_repo_id=8143654&assignment_repo_type=AssignmentRepo)\r # final-project_back-end", "version": "1.0.0", - "main": "index.js", + "main": "app.js", "type": "module", "scripts": { "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js", From 79be3bc1b6d88dcb4a722ec0b7a51dc6e96d1bde Mon Sep 17 00:00:00 2001 From: Andy Johnson Date: Wed, 27 Nov 2024 14:23:51 +0000 Subject: [PATCH 81/82] Remove procfile as no longer needed for deploy --- procfile | 1 - 1 file changed, 1 deletion(-) delete mode 100644 procfile diff --git a/procfile b/procfile deleted file mode 100644 index 9b1ef5b..0000000 --- a/procfile +++ /dev/null @@ -1 +0,0 @@ -web:node ./app.js \ No newline at end of file From b16abb9ac22bf638fd93bd6efe75bf00da35f568 Mon Sep 17 00:00:00 2001 From: Andy Johnson Date: Wed, 27 Nov 2024 14:24:17 +0000 Subject: [PATCH 82/82] Update README to reference new deploy locations and correct spelling mistake --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 891b146..2f1753b 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,7 @@ For other useful commands and scripts, please refer to `scripts` in the `package ## Back-End Structure -We are currently using a relational PostgreSQL database hosted on Cyclic, and our back-end is built using Node.js and Express. For testing the back-end, we are currently using Jest and Supertest. +We are currently using a relational PostgreSQL database hosted on ~~Cyclic~~ Supabase, and our back-end is built using Node.js and Express, hosted on Lade. For testing the back-end, we are currently using Jest and Supertest. ### Directory Structure @@ -175,7 +175,7 @@ As a content guide for how the 'description' segment of each object in our `prod -If any of this information is not available, feel free to substitute as appropriate with more information in one of the other categories, how to pick good examples of the food, or else ommit the section entirely. It's up to personal discretion, keeping in mind at all times our goal of making information readable and accessible to users, without passing prescriptive health advice or judgements. +If any of this information is not available, feel free to substitute as appropriate with more information in one of the other categories, how to pick good examples of the food, or else omit the section entirely. It's up to personal discretion, keeping in mind at all times our goal of making information readable and accessible to users, without passing prescriptive health advice or judgements. ## Roadmap