diff --git a/.eslintignore b/.eslintignore
new file mode 100644
index 00000000..9fe50007
--- /dev/null
+++ b/.eslintignore
@@ -0,0 +1,6 @@
+# Ignore minified libraries
+apps/voting-app/public/*.min.js
+# Ignore test runner files?
+apps/**/assertion-analyser.js
+apps/**/test-runner.js
+apps/**/fcctesting.js
diff --git a/.eslintrc.json b/.eslintrc.json
new file mode 100644
index 00000000..6ff8a2d5
--- /dev/null
+++ b/.eslintrc.json
@@ -0,0 +1,42 @@
+{
+ "env": {
+ "es2021": true,
+ "browser": true,
+ "mocha": true,
+ "node": true
+ },
+ "globals": {
+ "Promise": true,
+ "window": true,
+ "$": true,
+ "ga": true,
+ "jQuery": true,
+ "router": true
+ },
+ "extends": ["eslint:recommended", "prettier"],
+ "overrides": [
+ {
+ "files": ["apps/secure-real-time-multiplayer-game/tests/1_unit-tests.js"],
+ "parserOptions": {
+ "sourceType": "module"
+ }
+ },
+ {
+ "files": ["**/*.jsx"],
+ "settings": {
+ "react": {
+ "version": "15.7.0"
+ }
+ },
+ "rules": {
+ "react/no-string-refs": "off"
+ },
+ "extends": ["plugin:react/recommended"],
+ "parserOptions": {
+ "ecmaFeatures": {
+ "jsx": true
+ }
+ }
+ }
+ ]
+}
diff --git a/.github/workflows/node-ci.yml b/.github/workflows/node-ci.yml
index 34735b2a..3c8b92be 100644
--- a/.github/workflows/node-ci.yml
+++ b/.github/workflows/node-ci.yml
@@ -29,5 +29,8 @@ jobs:
- name: Install Dependencies
run: npm ci
+ - name: Lint Files
+ run: npm run lint
+
- name: Run Tests
run: npm run test-local-or-ci
diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 00000000..2c652fea
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,9 @@
+{
+ "endOfLine": "lf",
+ "semi": true,
+ "singleQuote": true,
+ "jsxSingleQuote": true,
+ "tabWidth": 2,
+ "trailingComma": "none",
+ "arrowParens": "avoid"
+}
diff --git a/apps/american-british-translator/components/translator.js b/apps/american-british-translator/components/translator.js
index 91b90ca7..53bfd054 100644
--- a/apps/american-british-translator/components/translator.js
+++ b/apps/american-british-translator/components/translator.js
@@ -5,11 +5,11 @@ const britishOnly = require('./british-only.js')
class Translator {
- static replaceCurry(word, replacement, highlight, adjustCase = false) {
+ static replaceCurry(_, replacement, highlight, adjustCase = false) {
if(adjustCase) {
replacement = replacement.replace(/^([a-z])/ig, letter => letter.toUpperCase());
}
- return (word) => {
+ return () => {
if(highlight) {
return `${replacement}`.replace(/\s/g,"\0");
} else {
@@ -35,14 +35,14 @@ class Translator {
// Title Replacement
for([american, british] of Object.entries(americanToBritishTitles) ) {
- american = american.replace('.', '\.');
+ american = american.replace('.', '\\.');
input = input.replace(new RegExp(`\\b${american}`,'gi'),
Translator.replaceCurry(american,british,highlight, true));
}
// Time Replacement, colon to period replacement
if(highlight) {
- input = input.replace(/(\d{1,2}):(\d{1,2})/gi, '\$1.\$2');
+ input = input.replace(/(\d{1,2}):(\d{1,2})/gi, '$1.$2');
} else {
input = input.replace(/(?<=\d{1,2}):(?=\d{1,2})/gi, '.');
}
@@ -76,7 +76,7 @@ class Translator {
// Time Replacement, period to colon replacement
if(highlight) {
- input = input.replace(/(\d{1,2}).(\d{1,2})/gi, '\$1:\$2');
+ input = input.replace(/(\d{1,2}).(\d{1,2})/gi, '$1:$2');
} else {
input = input.replace(/(?<=\d{1,2})\.(?=\d{1,2})/gi, ':');
}
diff --git a/apps/american-british-translator/routes/api.js b/apps/american-british-translator/routes/api.js
index c95f2373..31fd5155 100644
--- a/apps/american-british-translator/routes/api.js
+++ b/apps/american-british-translator/routes/api.js
@@ -15,7 +15,7 @@ module.exports = function (app) {
app.route('/api/translate')
.post((req, res) => {
let text = req.body.text;
- if(!req.body.hasOwnProperty('text') || !req.body.locale) {
+ if(!("text" in req.body) || !req.body.locale) {
return res.json({ error: 'Required field(s) missing' });
}
diff --git a/apps/american-british-translator/server.js b/apps/american-british-translator/server.js
index 60f2d490..1c6b7dd3 100644
--- a/apps/american-british-translator/server.js
+++ b/apps/american-british-translator/server.js
@@ -1,7 +1,6 @@
require('dotenv').config();
const express = require('express');
const bodyParser = require('body-parser');
-const expect = require('chai').expect;
const cors = require('cors');
const fccTestingRoutes = require('./routes/fcctesting.js');
@@ -29,7 +28,7 @@ fccTestingRoutes(app);
userRoutes(app);
// 404 Not Found Middleware
-app.use(function(req, res, next) {
+app.use(function(req, res) {
res.status(404)
.type('text')
.send('Not Found');
diff --git a/apps/american-british-translator/tests/2_functional-tests.js b/apps/american-british-translator/tests/2_functional-tests.js
index 74f7c9d3..347b816a 100644
--- a/apps/american-british-translator/tests/2_functional-tests.js
+++ b/apps/american-british-translator/tests/2_functional-tests.js
@@ -13,8 +13,6 @@ const server = require('../server.js');
chai.use(chaiHttp);
-let Translator = require('../components/translator.js');
-
suite('Functional Tests', () => {
suite('"POST" to /api/translate', () => {
diff --git a/apps/anonymous-message-board/controllers/replyHandler.js b/apps/anonymous-message-board/controllers/replyHandler.js
index 43f9c971..37a89653 100644
--- a/apps/anonymous-message-board/controllers/replyHandler.js
+++ b/apps/anonymous-message-board/controllers/replyHandler.js
@@ -52,7 +52,7 @@ function ReplyHandler() {
$set: { bumped_on: now },
$push: { replies: reply },
},
- (err, doc) => {}
+ () => {}
);
}
);
@@ -73,7 +73,7 @@ function ReplyHandler() {
"replies._id": new ObjectId(req.body.reply_id),
},
{ $set: { "replies.$.reported": true } },
- (err, doc) => {}
+ () => {}
);
}
);
diff --git a/apps/anonymous-message-board/controllers/threadHandler.js b/apps/anonymous-message-board/controllers/threadHandler.js
index 5fa2eca9..06858e28 100644
--- a/apps/anonymous-message-board/controllers/threadHandler.js
+++ b/apps/anonymous-message-board/controllers/threadHandler.js
@@ -73,7 +73,7 @@ function ThreadHandler() {
collection.findOneAndUpdate(
{ _id: new ObjectId(req.body.report_id) },
{ $set: { reported: true } },
- (err, doc) => {}
+ () => {}
);
}
);
diff --git a/apps/anonymous-message-board/routes/api.js b/apps/anonymous-message-board/routes/api.js
index 0890da29..38eb8665 100644
--- a/apps/anonymous-message-board/routes/api.js
+++ b/apps/anonymous-message-board/routes/api.js
@@ -8,7 +8,6 @@
'use strict';
-const expect = require('chai').expect;
const ThreadHandler = require('../controllers/threadHandler.js');
const ReplyHandler = require('../controllers/replyHandler.js');
diff --git a/apps/anonymous-message-board/server.js b/apps/anonymous-message-board/server.js
index 97daf8c6..4ca0a595 100644
--- a/apps/anonymous-message-board/server.js
+++ b/apps/anonymous-message-board/server.js
@@ -1,7 +1,6 @@
require('dotenv').config();
const express = require('express');
const bodyParser = require('body-parser');
-const expect = require('chai').expect;
const cors = require('cors');
const helmet = require('helmet');
@@ -46,7 +45,7 @@ fccTestingRoutes(app);
apiRoutes(app);
// 404 Not Found middleware
-app.use(function(req, res, next) {
+app.use(function(req, res) {
res.status(404)
.type('text')
.send('Not Found');
diff --git a/apps/build-a-pinterest-clone/client/index.jsx b/apps/build-a-pinterest-clone/client/index.jsx
index bd77c21f..3998c332 100644
--- a/apps/build-a-pinterest-clone/client/index.jsx
+++ b/apps/build-a-pinterest-clone/client/index.jsx
@@ -10,6 +10,11 @@ var Nav = require('./navbar.jsx');
var appUrl = window.location.origin;
+/**
+ * TODO: I assume at some point we'll bump the React version.
+ * When we do, we'll need to update this.
+ */
+// eslint-disable-next-line react/no-deprecated
var App = React.createClass({
componentDidMount: function () {
var self = this;
@@ -83,7 +88,7 @@ var App = React.createClass({
deletePic: function(index) {
var self = this;
var id = this.state.pics[index]._id;
- Ajax.delete(appUrl + '/api/pics/' + id, {}, function(err, d){
+ Ajax.delete(appUrl + '/api/pics/' + id, {}, function(){
var pics = self.state.pics;
pics.splice(index,1);
self.setState({pics: pics});
diff --git a/apps/build-a-pinterest-clone/client/navbar.jsx b/apps/build-a-pinterest-clone/client/navbar.jsx
index d75e163a..040d0503 100644
--- a/apps/build-a-pinterest-clone/client/navbar.jsx
+++ b/apps/build-a-pinterest-clone/client/navbar.jsx
@@ -1,5 +1,10 @@
var React = require('react');
+/**
+ * TODO: I assume at some point we'll bump the React version.
+ * When we do, we'll need to update this.
+ */
+// eslint-disable-next-line react/no-deprecated
module.exports = React.createClass({
submit: function(e) {
e.preventDefault();
@@ -13,6 +18,7 @@ module.exports = React.createClass({
var hideIfLoggedOut = this.props.loggedIn ? '' : ' hide';
var hideIfLoggedIn = this.props.loggedIn ? ' hide' : '';
var dOL = this.props.setPageDisabled;
+ var myPics;
var all = myPics = '';
switch (this.props.page) {
case 'all' :
diff --git a/apps/build-a-pinterest-clone/client/pic.jsx b/apps/build-a-pinterest-clone/client/pic.jsx
index 803d1bb4..657450fd 100644
--- a/apps/build-a-pinterest-clone/client/pic.jsx
+++ b/apps/build-a-pinterest-clone/client/pic.jsx
@@ -1,6 +1,10 @@
var React = require('react');
-var appUrl = window.location.origin;
+/**
+ * TODO: I assume at some point we'll bump the React version.
+ * When we do, we'll need to update this.
+ */
+// eslint-disable-next-line react/no-deprecated
module.exports = React.createClass({
render: function() {
var likeClass = this.props.liked ? "liked btn btn-default btn-sm" : 'like btn btn-default btn-sm';
diff --git a/apps/chart-the-stock-market/index.js b/apps/chart-the-stock-market/index.js
index 1d6a96e1..a476e672 100644
--- a/apps/chart-the-stock-market/index.js
+++ b/apps/chart-the-stock-market/index.js
@@ -24,7 +24,7 @@ io.on('connection', function(socket) {
emitStockData();
socket.on('newStock', function(stock) {
- if(!currentStockData.hasOwnProperty(stock.symbol) && Object.keys(currentStockData).length < 4) {
+ if(!(stock.symbol in currentStockData) && Object.keys(currentStockData).length < 4) {
const requestUrl = `https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=${stock.symbol}&apikey=${process.env.APIKEY}`;
https.get(requestUrl, res => {
@@ -60,7 +60,7 @@ io.on('connection', function(socket) {
socket.on('deleteStock', function(stock) {
console.log('delete' + stock);
console.log(stock.symbol);
- if(currentStockData.hasOwnProperty(stock.symbol)) {
+ if(stock.symbol in currentStockData) {
delete currentStockData[stock.symbol];
emitStockData();
diff --git a/apps/chart-the-stock-market/public/stocks.js b/apps/chart-the-stock-market/public/stocks.js
index d37c56b7..50446426 100644
--- a/apps/chart-the-stock-market/public/stocks.js
+++ b/apps/chart-the-stock-market/public/stocks.js
@@ -1,3 +1,4 @@
+/* global io, Chart */
var stockData = {};
/////////// socket connection ////////////
diff --git a/apps/exercise-tracker/routes/api.js b/apps/exercise-tracker/routes/api.js
index 871f636d..cce945a4 100644
--- a/apps/exercise-tracker/routes/api.js
+++ b/apps/exercise-tracker/routes/api.js
@@ -3,7 +3,7 @@ const Exercises = require('../models/exercises');
const router = require('express').Router();
-router.get('/users', (req, res, next) => {
+router.get('/users', (req, res) => {
Users.find({}, (err, data) => {
res.json(data)
})
diff --git a/apps/exercise-tracker/server.js b/apps/exercise-tracker/server.js
index 6bb0077c..457f70f2 100644
--- a/apps/exercise-tracker/server.js
+++ b/apps/exercise-tracker/server.js
@@ -27,7 +27,7 @@ app.use((req, res, next) => {
})
// Error Handling middleware
-app.use((err, req, res, next) => {
+app.use((err, req, res) => {
let errCode, errMessage
if (err.errors) {
diff --git a/apps/file-metadata-microservice/server.js b/apps/file-metadata-microservice/server.js
index 1ebb9fa5..eeb9c8d4 100644
--- a/apps/file-metadata-microservice/server.js
+++ b/apps/file-metadata-microservice/server.js
@@ -30,7 +30,7 @@ app.post('/api/fileanalyse',upload.single('upfile'), function(req, res){
// 404-NOT FOUND Middleware
- app.use(function(req, res, next){
+ app.use(function(req, res){
res.status(404);
res.type('txt').send('Not found');
});
diff --git a/apps/forum-proxy/server.js b/apps/forum-proxy/server.js
index 8d2cfe4b..154f3c90 100644
--- a/apps/forum-proxy/server.js
+++ b/apps/forum-proxy/server.js
@@ -21,11 +21,11 @@ app.get('/latest', (req, res, next) => {
app.use((req, res) => res.status(404).send('not found'));
-app.use((err, req, res, next) => res.status(500).json(err));
+app.use((err, req, res) => res.status(500).json(err));
const portNum = process.env.PORT || 3000;
-const listener = app.listen(portNum, function() {
+app.listen(portNum, function() {
console.log(`Your app is listening on port ${portNum}`);
});
diff --git a/apps/image-search-abstraction-layer/public/imageSearch.js b/apps/image-search-abstraction-layer/public/imageSearch.js
index 27bf70f8..f6bd342b 100644
--- a/apps/image-search-abstraction-layer/public/imageSearch.js
+++ b/apps/image-search-abstraction-layer/public/imageSearch.js
@@ -19,7 +19,7 @@ function enableInputs() {
page.removeAttribute('disabled');
size.removeAttribute('disabled');
updateURL();
- } else if(selected = "recent") {
+ } else if(selected == "recent") {
query.setAttribute('disabled', "true");
page.setAttribute('disabled', "true");
size.setAttribute('disabled', "true");
diff --git a/apps/issue-tracker/models/issue.js b/apps/issue-tracker/models/issue.js
index fab3918f..f81a013b 100644
--- a/apps/issue-tracker/models/issue.js
+++ b/apps/issue-tracker/models/issue.js
@@ -19,7 +19,7 @@ const IssueSchema = new mongoose.Schema({
// Hide project and __v fields from JSON
// Ref: https://stackoverflow.com/a/17063594/1420506
IssueSchema.set('toJSON', {
- transform: function(doc, ret, options) {
+ transform: function(doc, ret) {
delete ret.project;
delete ret.__v;
return ret;
diff --git a/apps/issue-tracker/routes/api.js b/apps/issue-tracker/routes/api.js
index 2abf066b..c1eebdb2 100644
--- a/apps/issue-tracker/routes/api.js
+++ b/apps/issue-tracker/routes/api.js
@@ -8,13 +8,10 @@
'use strict';
-const expect = require('chai').expect;
-const MongoClient = require('mongodb');
-const ObjectId = require('mongodb').ObjectID;
const IssueModel = require('../models/issue').IssueModel;
const mongoose = require('mongoose');
-const connection = mongoose.connect(process.env.DB, {
+mongoose.connect(process.env.DB, {
useNewUrlParser: true,
useUnifiedTopology: true
});
@@ -46,7 +43,7 @@ module.exports = function (app) {
// Build Query
let query = { project: project }; // We always filter by project
field_list.forEach(field => {
- if(req.query.hasOwnProperty(field)) {
+ if(field in req.query) {
query[field] = req.query[field];
}
})
@@ -61,7 +58,7 @@ module.exports = function (app) {
// check required fields
let missing_fields = ['issue_title', 'issue_text', 'created_by']
- .filter( field => !req.body.hasOwnProperty(field))
+ .filter( field => !(field in req.body))
.join(',');
if(missing_fields) {
@@ -102,7 +99,7 @@ module.exports = function (app) {
let update = {};
let count = 0;
updatable_fields.forEach(field => {
- if(req.body.hasOwnProperty(field)) {
+ if(field in req.body) {
update[field] = req.body[field];
count++;
}
diff --git a/apps/issue-tracker/server.js b/apps/issue-tracker/server.js
index 8437dbf1..fb2db464 100644
--- a/apps/issue-tracker/server.js
+++ b/apps/issue-tracker/server.js
@@ -3,7 +3,6 @@
require('dotenv').config();
const express = require('express');
const bodyParser = require('body-parser');
-const expect = require('chai').expect;
const cors = require('cors');
const apiRoutes = require('./routes/api.js');
@@ -40,7 +39,7 @@ fccTestingRoutes(app);
apiRoutes(app);
//404 Not Found Middleware
-app.use(function(req, res, next) {
+app.use(function(req, res) {
res.status(404)
.type('text')
.send('Not Found');
diff --git a/apps/manage-a-book-trading-club/.eslintrc.json b/apps/manage-a-book-trading-club/.eslintrc.json
deleted file mode 100644
index f83a784e..00000000
--- a/apps/manage-a-book-trading-club/.eslintrc.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "extends": "airbnb-base",
- "rules": {
- "no-console": 0,
- "no-underscore-dangle": 0,
- "strict": 0
- }
-}
diff --git a/apps/manage-a-book-trading-club/server.js b/apps/manage-a-book-trading-club/server.js
index cd7d6112..2381d8da 100644
--- a/apps/manage-a-book-trading-club/server.js
+++ b/apps/manage-a-book-trading-club/server.js
@@ -8,6 +8,6 @@ const app = require('./app/app');
const portNum = process.env.PORT || 3000;
-const server = app.listen(portNum, () => {
+app.listen(portNum, () => {
console.log(`server listening on port ${portNum}`);
});
diff --git a/apps/metric-imperial-converter/controllers/convertHandler.js b/apps/metric-imperial-converter/controllers/convertHandler.js
index 925fb09c..9c9e2bcc 100644
--- a/apps/metric-imperial-converter/controllers/convertHandler.js
+++ b/apps/metric-imperial-converter/controllers/convertHandler.js
@@ -114,7 +114,7 @@ function ConvertHandler() {
}
// If unit exists, return it
- if(units.hasOwnProperty(unit)) {
+ if(unit in units) {
if(unit === "l") {
return "L";
}
diff --git a/apps/metric-imperial-converter/routes/api.js b/apps/metric-imperial-converter/routes/api.js
index dd680801..6c674ef9 100644
--- a/apps/metric-imperial-converter/routes/api.js
+++ b/apps/metric-imperial-converter/routes/api.js
@@ -8,7 +8,6 @@
'use strict';
-const expect = require('chai').expect;
const ConvertHandler = require('../controllers/convertHandler.js');
module.exports = function (app) {
diff --git a/apps/metric-imperial-converter/server.js b/apps/metric-imperial-converter/server.js
index 570bd737..099b03c3 100644
--- a/apps/metric-imperial-converter/server.js
+++ b/apps/metric-imperial-converter/server.js
@@ -2,7 +2,6 @@
const express = require('express');
const bodyParser = require('body-parser');
-const expect = require('chai').expect;
const cors = require('cors');
require('dotenv').config();
@@ -32,7 +31,7 @@ fccTestingRoutes(app);
apiRoutes(app);
//404 Not Found Middleware
-app.use(function(req, res, next) {
+app.use(function(req, res) {
res.status(404)
.type('text')
.send('Not Found');
diff --git a/apps/p2p-video-chat-application/public/client.js b/apps/p2p-video-chat-application/public/client.js
index 3ecc9201..29763b41 100644
--- a/apps/p2p-video-chat-application/public/client.js
+++ b/apps/p2p-video-chat-application/public/client.js
@@ -20,11 +20,11 @@ $(document).ready(function () {
const localVideo = document.querySelector("#localVideo");
localVideo.srcObject = stream;
- localVideo.onloadedmetadata = function (e) {
+ localVideo.onloadedmetadata = function () {
localVideo.play();
};
- const room = prompt("Type a room name");
+ let room = prompt("Type a room name");
while ($.trim(room) === "") room = prompt("Type a room name");
@@ -90,7 +90,7 @@ $(document).ready(function () {
console.log("Streaming Remote Video!");
const remoteVideo = document.querySelector("#remoteVideo");
remoteVideo.srcObject = stream;
- remoteVideo.onloadedmetadata = function (e) {
+ remoteVideo.onloadedmetadata = function () {
remoteVideo.play();
};
});
diff --git a/apps/p2p-video-chat-application/server.js b/apps/p2p-video-chat-application/server.js
index 1f1ca6df..2d9f6169 100644
--- a/apps/p2p-video-chat-application/server.js
+++ b/apps/p2p-video-chat-application/server.js
@@ -22,7 +22,6 @@ io.on('connection',function(socket){
io.in(room).clients(function(error, clients){
if (error) {
throw error;
- return;
}
if(clients.length >= 2)
@@ -56,7 +55,6 @@ io.on('connection',function(socket){
io.in(roomMessage.room).clients(function(error, clients){
if (error) {
throw error;
- return;
}
if(clients.indexOf(socket.id)!==-1) {
diff --git a/apps/personal-library/public/client.js b/apps/personal-library/public/client.js
index 1f1f9612..63c0e744 100644
--- a/apps/personal-library/public/client.js
+++ b/apps/personal-library/public/client.js
@@ -50,7 +50,7 @@ $( document ).ready(function() {
type: 'post',
dataType: 'json',
data: $('#newCommentForm').serialize(),
- success: function(data) {
+ success: function() {
comments.unshift(newComment); //adds new comment to top of list
$('#detailComments').html(comments.join(''));
}
@@ -63,7 +63,7 @@ $( document ).ready(function() {
type: 'post',
dataType: 'json',
data: $('#newBookForm').serialize(),
- success: function(data) {
+ success: function() {
//update list
}
});
@@ -75,7 +75,7 @@ $( document ).ready(function() {
type: 'delete',
dataType: 'json',
data: $('#newBookForm').serialize(),
- success: function(data) {
+ success: function() {
//update list
}
});
diff --git a/apps/personal-library/routes/api.js b/apps/personal-library/routes/api.js
index 77a2d23a..2a14e7a6 100644
--- a/apps/personal-library/routes/api.js
+++ b/apps/personal-library/routes/api.js
@@ -8,8 +8,6 @@
"use strict";
-const MongoClient = require("mongodb").MongoClient;
-const ObjectId = require("mongodb").ObjectId;
const MONGODB_CONNECTION_STRING = process.env.DB;
const Mongoose = require("mongoose");
const BookModel = require("../db/BookModel").BookModel;
@@ -106,7 +104,7 @@ module.exports = function (app) {
res.status(200).send("no book exists");
return;
}
- const deleted = await BookModel.deleteOne({ _id: bookid });
+ await BookModel.deleteOne({ _id: bookid });
res.status(200).send("delete successful");
});
};
diff --git a/apps/personal-library/server.js b/apps/personal-library/server.js
index 30ccd142..1974a854 100644
--- a/apps/personal-library/server.js
+++ b/apps/personal-library/server.js
@@ -31,7 +31,7 @@ fccTestingRoutes(app);
apiRoutes(app);
//404 Not Found Middleware
-app.use(function(req, res, next) {
+app.use(function(req, res) {
res.status(404)
.type('text')
.send('Not Found');
diff --git a/apps/personal-library/tests/1_unit-tests.js b/apps/personal-library/tests/1_unit-tests.js
deleted file mode 100644
index 68d800c7..00000000
--- a/apps/personal-library/tests/1_unit-tests.js
+++ /dev/null
@@ -1,8 +0,0 @@
-const chai = require('chai');
-const assert = chai.assert;
-
-suite('Unit Tests', function(){
-
- //No unit tests needed for this project
-
-});
\ No newline at end of file
diff --git a/apps/personal-library/tests/2_functional-tests.js b/apps/personal-library/tests/2_functional-tests.js
index 1ae04e98..8ab72bb4 100644
--- a/apps/personal-library/tests/2_functional-tests.js
+++ b/apps/personal-library/tests/2_functional-tests.js
@@ -10,11 +10,10 @@ const chaiHttp = require("chai-http");
const chai = require("chai");
const assert = chai.assert;
const server = require("../server");
-const assertionAnalyser = require("../assertion-analyser");
chai.use(chaiHttp);
-let id1, id2;
+let id1;
const idFake = "5f665eb46e296f6b9b6a504d"
suite("Functional Tests", function () {
diff --git a/apps/request-header-parser-microservice/server.js b/apps/request-header-parser-microservice/server.js
index 3ec04498..07884e16 100644
--- a/apps/request-header-parser-microservice/server.js
+++ b/apps/request-header-parser-microservice/server.js
@@ -25,7 +25,7 @@ app.route('/api/whoami')
});
// 404 Not Found Middleware
-app.use(function(req, res, next) {
+app.use(function(req, res) {
res.status(404)
.type('text')
.send('Not Found');
diff --git a/apps/secure-real-time-multiplayer-game/server.js b/apps/secure-real-time-multiplayer-game/server.js
index d155837a..89c13ebe 100644
--- a/apps/secure-real-time-multiplayer-game/server.js
+++ b/apps/secure-real-time-multiplayer-game/server.js
@@ -1,7 +1,6 @@
require('dotenv').config();
const express = require('express');
const bodyParser = require('body-parser');
-const expect = require('chai');
const helmet = require('helmet');
const cors = require('cors');
const socket = require('socket.io');
@@ -32,7 +31,7 @@ app.route('/')
fccTestingRoutes(app);
// 404 Not Found Middleware
-app.use(function(req, res, next) {
+app.use(function(req, res) {
res.status(404)
.type('text')
.send('Not Found');
diff --git a/apps/secure-real-time-multiplayer-game/tests/1_unit-tests.js b/apps/secure-real-time-multiplayer-game/tests/1_unit-tests.js
index 530f0a98..f52f81f1 100644
--- a/apps/secure-real-time-multiplayer-game/tests/1_unit-tests.js
+++ b/apps/secure-real-time-multiplayer-game/tests/1_unit-tests.js
@@ -6,9 +6,8 @@
* with [Ctrl + `] (backtick) and run the command `npm run test`.
*
*/
-
-import Player from '../public/Player.mjs';
-import Collectible from '../public/Collectible.mjs';
+import Player from "../public/Player.mjs";
+import Collectible from "../public/Collectible.mjs";
const chai = require('chai');
const assert = chai.assert;
const { JSDOM } = require('jsdom');
@@ -93,8 +92,8 @@ suite('Unit Tests', () => {
const testArr = [ testPlayer1, testPlayer2 ];
// Account for possible space
- assert.match(testPlayer1.calculateRank(testArr), /Rank\: 1\s?\/\s?2/);
- assert.match(testPlayer2.calculateRank(testArr), /Rank\: 2\s?\/\s?2/);
+ assert.match(testPlayer1.calculateRank(testArr), /Rank: 1\s?\/\s?2/);
+ assert.match(testPlayer2.calculateRank(testArr), /Rank: 2\s?\/\s?2/);
done();
});
});
diff --git a/apps/stock-price-checker-proxy/server.js b/apps/stock-price-checker-proxy/server.js
index c4b97935..28ace7bf 100644
--- a/apps/stock-price-checker-proxy/server.js
+++ b/apps/stock-price-checker-proxy/server.js
@@ -12,7 +12,7 @@ app.get("/", (req, res) => {
res.sendFile(__dirname + "/views/index.html");
});
-app.use((err, req, res, next) => {
+app.use((err, req, res) => {
if (err) {
console.log(err.message, err.stack);
res.status(500).json({ status: "internal server error" });
@@ -21,6 +21,6 @@ app.use((err, req, res, next) => {
const portNum = process.env.PORT || 3000;
-const listener = app.listen(portNum, () => {
+app.listen(portNum, () => {
console.log("stock proxy is listening on port " + portNum);
});
diff --git a/apps/stock-price-checker/routes/api.js b/apps/stock-price-checker/routes/api.js
index 81b4ebc3..586d3a8e 100644
--- a/apps/stock-price-checker/routes/api.js
+++ b/apps/stock-price-checker/routes/api.js
@@ -8,7 +8,6 @@
'use strict';
-var expect = require('chai').expect;
var StockHandler = require('../controllers/stockHandler.js');
module.exports = function (app) {
diff --git a/apps/stock-price-checker/server.js b/apps/stock-price-checker/server.js
index 720a901b..f671b47f 100644
--- a/apps/stock-price-checker/server.js
+++ b/apps/stock-price-checker/server.js
@@ -3,7 +3,6 @@
require('dotenv').config();
var express = require('express');
var bodyParser = require('body-parser');
-var expect = require('chai').expect;
var cors = require('cors');
var helmet = require('helmet');
@@ -41,7 +40,7 @@ fccTestingRoutes(app);
apiRoutes(app);
//404 Not Found Middleware
-app.use(function(req, res, next) {
+app.use(function(req, res) {
res.status(404)
.type('text')
.send('Not Found');
diff --git a/apps/stock-price-checker/tests/1_unit-tests.js b/apps/stock-price-checker/tests/1_unit-tests.js
deleted file mode 100644
index 1e7f2062..00000000
--- a/apps/stock-price-checker/tests/1_unit-tests.js
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
-*
-*
-* FILL IN EACH UNIT TEST BELOW COMPLETELY
-* -----[Keep the tests in the same order!]----
-* (if additional are added, keep them at the very end!)
-*/
-
-var chai = require('chai');
-var StockHandler = require('../controllers/stockHandler.js');
-
-var stockPrices = new StockHandler();
-
-suite('Unit Tests', function(){
-
- suite('Function convertHandler.getNum(input)', function() {
-
- });
-
-});
\ No newline at end of file
diff --git a/apps/stock-price-checker/tests/2_functional-tests.js b/apps/stock-price-checker/tests/2_functional-tests.js
index 33da9c80..58055004 100644
--- a/apps/stock-price-checker/tests/2_functional-tests.js
+++ b/apps/stock-price-checker/tests/2_functional-tests.js
@@ -65,15 +65,12 @@ suite('Functional Tests', function() {
done();
});
});
-
- var rel_likes;
-
+
test('2 stocks', function(done) {
chai.request(server)
.get('/api/stock-prices')
.query({stock: ['goog','msft']})
.end(function(err, res){
- rel_likes = Math.abs(res.body.stockData[0].rel_likes);
assert.equal(res.status, 200);
assert.isArray(res.body.stockData);
assert.property(res.body.stockData[0], 'stock');
diff --git a/apps/sudoku-solver/controllers/puzzle-strings.js b/apps/sudoku-solver/controllers/puzzle-strings.js
index c58405cb..debb51c3 100644
--- a/apps/sudoku-solver/controllers/puzzle-strings.js
+++ b/apps/sudoku-solver/controllers/puzzle-strings.js
@@ -1,4 +1,4 @@
-export const puzzlesAndSolutions = [
+const puzzlesAndSolutions = [
[
'1.5..2.84..63.12.7.2..5.....9..1....8.2.3674.3.7.2..9.47...8..1..16....926914.37.',
'135762984946381257728459613694517832812936745357824196473298561581673429269145378'
@@ -20,3 +20,5 @@ export const puzzlesAndSolutions = [
'827549163531672894649831527496157382218396475753284916962415738185763249374928651'
]
];
+
+module.exports = puzzlesAndSolutions;
diff --git a/apps/sudoku-solver/controllers/sudoku-solver.js b/apps/sudoku-solver/controllers/sudoku-solver.js
index 781b6427..6cb6f9e0 100644
--- a/apps/sudoku-solver/controllers/sudoku-solver.js
+++ b/apps/sudoku-solver/controllers/sudoku-solver.js
@@ -88,7 +88,7 @@ class SudokuSolver {
}
}
- exportString(input) {
+ exportString() {
let output = "";
for (let row = 0; row < WIDTH; row++) {
for (let col = 0; col < HEIGHT; col++) {
diff --git a/apps/sudoku-solver/server.js b/apps/sudoku-solver/server.js
index 8c221f15..064dab85 100644
--- a/apps/sudoku-solver/server.js
+++ b/apps/sudoku-solver/server.js
@@ -1,7 +1,6 @@
require('dotenv').config();
const express = require('express');
const bodyParser = require('body-parser');
-const expect = require('chai').expect;
const cors = require('cors');
const fccTestingRoutes = require('./routes/fcctesting.js');
@@ -29,7 +28,7 @@ fccTestingRoutes(app);
apiRoutes(app);
//404 Not Found Middleware
-app.use(function(req, res, next) {
+app.use(function(req, res) {
res.status(404)
.type('text')
.send('Not Found');
diff --git a/apps/sudoku-solver/tests/1_unit-tests.js b/apps/sudoku-solver/tests/1_unit-tests.js
index 8ce655fb..51354baa 100644
--- a/apps/sudoku-solver/tests/1_unit-tests.js
+++ b/apps/sudoku-solver/tests/1_unit-tests.js
@@ -22,7 +22,7 @@ suite('UnitTests', () => {
test('Valid Characters, length of 81', (done) => {
const input = '..9..5.1.85.4....2432......1...69.83.9.....6.62.71...9......1945....4.37.4.3..6..';
- let [err, errString] = solver.validate(input);
+ let [err] = solver.validate(input);
assert.isFalse(err);
done();
@@ -63,7 +63,6 @@ suite('UnitTests', () => {
test('Valid placement for a row', done => {
const input = '..9..5.1.85.4....2432......1...69.83.9.....6.62.71...9......1945....4.37.4.3..6..';
const row = 0;
- const col = 0;
const value = 3;
assert.isTrue(solver.checkRowPlacement(input, row, value));
@@ -74,7 +73,6 @@ suite('UnitTests', () => {
test('Invalid placement for a row', done => {
const input = '..9..5.1.85.4....2432......1...69.83.9.....6.62.71...9......1945....4.37.4.3..6..';
const row = 0;
- const col = 0;
const value = 9;
assert.isFalse(solver.checkRowPlacement(input, row, value));
@@ -88,7 +86,6 @@ suite('UnitTests', () => {
test('Valid placement for a column', done => {
const input = '..9..5.1.85.4....2432......1...69.83.9.....6.62.71...9......1945....4.37.4.3..6..';
const row = 0;
- const col = 0;
const value = 3;
assert.isTrue(solver.checkRowPlacement(input, row, value));
@@ -99,7 +96,6 @@ suite('UnitTests', () => {
test('Invalid placement for a column', done => {
const input = '..9..5.1.85.4....2432......1...69.83.9.....6.62.71...9......1945....4.37.4.3..6..';
const row = 0;
- const col = 0;
const value = 9;
assert.isFalse(solver.checkRowPlacement(input, row, value));
diff --git a/apps/timestamp-microservice/server.js b/apps/timestamp-microservice/server.js
index ff5da60e..3768237b 100644
--- a/apps/timestamp-microservice/server.js
+++ b/apps/timestamp-microservice/server.js
@@ -41,7 +41,7 @@ app.route(['/api/timestamp/:date?', '/api/:date?']).get((req, res) => {
});
// 404 Not Found Middleware
-app.use((req, res, next) => {
+app.use((req, res) => {
res.status(404).type('text').send('Not Found');
});
diff --git a/apps/twitch-proxy/server.js b/apps/twitch-proxy/server.js
index 14ae3dd8..8159ef44 100644
--- a/apps/twitch-proxy/server.js
+++ b/apps/twitch-proxy/server.js
@@ -202,7 +202,7 @@ app.use(function(req, res) {
sendData(req, res, null, { status: 404, error: "not found" });
});
-app.use(function(err, req, res, next) {
+app.use(function(err, req, res) {
log.error(`!! ${err.message || err.msg || err.error}`);
err.status = err.status || 500;
err.error = err.error || "internal server error";
diff --git a/apps/twitch-proxy/static-data/update.js b/apps/twitch-proxy/static-data/update.js
index 7e8ad285..7a7a18da 100644
--- a/apps/twitch-proxy/static-data/update.js
+++ b/apps/twitch-proxy/static-data/update.js
@@ -73,7 +73,7 @@ const getKrakenUserData = async user => {
});
};
const getAllKrakenData = async () =>
- Promise.all(_users.map(getKrakenUserData)).then((data, i) => {
+ Promise.all(_users.map(getKrakenUserData)).then((data) => {
const out = {};
data.forEach((d, i) => {
out[_users[i]] = d;
diff --git a/apps/voting-app/app.js b/apps/voting-app/app.js
index 6b0a68cd..37d05a25 100644
--- a/apps/voting-app/app.js
+++ b/apps/voting-app/app.js
@@ -89,7 +89,7 @@ mongo.connect(process.env.MONGO_URI, function(err, client) {
options[optionArray[i]] = 0;
}
- polls.insert({ 'creator':app.locals.user, 'question': req.body.newquestion, 'options': options }, function(err, result) {
+ polls.insert({ 'creator':app.locals.user, 'question': req.body.newquestion, 'options': options }, function() {
return mypolls(req, res);
});
});
@@ -105,7 +105,7 @@ mongo.connect(process.env.MONGO_URI, function(err, client) {
});
app.get('/delete/:id', function(req, res){
- polls.remove({ _id : ObjectID(req.params.id)}, function(err, result) {
+ polls.remove({ _id : ObjectID(req.params.id)}, function() {
return mypolls(req, res);
});
});
diff --git a/apps/weather-proxy/server.js b/apps/weather-proxy/server.js
index ae54e012..2ddda79b 100644
--- a/apps/weather-proxy/server.js
+++ b/apps/weather-proxy/server.js
@@ -10,19 +10,19 @@ var weatherAPI = 'http://api.openweathermap.org/data/2.5/weather?units=metric&ap
function replaceIconsWithLinks(data){
for(var i = 0; i < data.weather.length; ++i){
- if(data.weather[0].hasOwnProperty('icon')){
+ if('icon' in data.weather[0]){
data.weather[0].icon = imgLinks[data.weather[0].icon];
}
}
}
-function getBestCachedData(lon, lat){
+function getBestCachedData(){
var fs = require('fs');
var obj = JSON.parse(fs.readFileSync('./data/cache.json', 'utf8'));
return obj;
}
-function addToCache(data){
+function addToCache(){
//For now does nothing. We aren't saving data.
}
@@ -67,7 +67,7 @@ app.get("/api/current", function(req, res) {
console.log("REQUEST:" + req.body);
console.log("REQUESTED URL:" + url);
}
- if(data.hasOwnProperty('weather')){
+ if('weather' in data){
addToCache(data);
} else {
data = getBestCachedData(longitude, latitude);
diff --git a/package-lock.json b/package-lock.json
index d47cb059..1cb124cf 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -38,8 +38,11 @@
},
"devDependencies": {
"concurrently": "7.0.0",
+ "eslint-config-prettier": "^8.3.0",
+ "eslint-plugin-react": "^7.28.0",
"jest": "27.4.7",
"npm-run-all": "4.1.5",
+ "prettier": "^2.5.1",
"wait-port": "0.2.9"
},
"engines": {
@@ -2383,6 +2386,108 @@
"kuler": "^2.0.0"
}
},
+ "node_modules/@eslint/eslintrc": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz",
+ "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.2.0",
+ "globals": "^13.9.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.0.4",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/@eslint/eslintrc/node_modules/globals": {
+ "version": "13.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz",
+ "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz",
+ "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.4"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true,
+ "peer": 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",
@@ -2901,6 +3006,16 @@
"node": ">=0.4.0"
}
},
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "peer": true,
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
"node_modules/acorn-node": {
"version": "1.8.2",
"resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
@@ -3093,6 +3208,25 @@
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz",
"integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY="
},
+ "node_modules/array-includes": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz",
+ "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1",
+ "get-intrinsic": "^1.1.1",
+ "is-string": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/array-unique": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
@@ -3101,6 +3235,23 @@
"node": ">=0.10.0"
}
},
+ "node_modules/array.prototype.flatmap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz",
+ "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/arraybuffer.slice": {
"version": "0.0.7",
"resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
@@ -5941,6 +6092,19 @@
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
"integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
},
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
"node_modules/doctypes": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz",
@@ -6326,6 +6490,322 @@
"source-map": "~0.6.1"
}
},
+ "node_modules/eslint": {
+ "version": "8.8.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.8.0.tgz",
+ "integrity": "sha512-H3KXAzQGBH1plhYS3okDix2ZthuYJlQQEGE5k0IKuEqUSiyu4AmxxlJ2MtTYeJ3xB4jDhcYCwGOg2TXYdnDXlQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@eslint/eslintrc": "^1.0.5",
+ "@humanwhocodes/config-array": "^0.9.2",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.1.0",
+ "eslint-utils": "^3.0.0",
+ "eslint-visitor-keys": "^3.2.0",
+ "espree": "^9.3.0",
+ "esquery": "^1.4.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "functional-red-black-tree": "^1.0.1",
+ "glob-parent": "^6.0.1",
+ "globals": "^13.6.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.0.4",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "regexpp": "^3.2.0",
+ "strip-ansi": "^6.0.1",
+ "strip-json-comments": "^3.1.0",
+ "text-table": "^0.2.0",
+ "v8-compile-cache": "^2.0.3"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-config-prettier": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz",
+ "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==",
+ "dev": true,
+ "bin": {
+ "eslint-config-prettier": "bin/cli.js"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-react": {
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz",
+ "integrity": "sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw==",
+ "dev": true,
+ "dependencies": {
+ "array-includes": "^3.1.4",
+ "array.prototype.flatmap": "^1.2.5",
+ "doctrine": "^2.1.0",
+ "estraverse": "^5.3.0",
+ "jsx-ast-utils": "^2.4.1 || ^3.0.0",
+ "minimatch": "^3.0.4",
+ "object.entries": "^1.1.5",
+ "object.fromentries": "^2.0.5",
+ "object.hasown": "^1.1.0",
+ "object.values": "^1.1.5",
+ "prop-types": "^15.7.2",
+ "resolve": "^2.0.0-next.3",
+ "semver": "^6.3.0",
+ "string.prototype.matchall": "^4.0.6"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/resolve": {
+ "version": "2.0.0-next.3",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz",
+ "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==",
+ "dev": true,
+ "dependencies": {
+ "is-core-module": "^2.2.0",
+ "path-parse": "^1.0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz",
+ "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/eslint-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^2.0.0"
+ },
+ "engines": {
+ "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=5"
+ }
+ },
+ "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz",
+ "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/eslint/node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/eslint/node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/eslint/node_modules/globals": {
+ "version": "13.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz",
+ "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/eslint/node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/eslint/node_modules/optionator": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/eslint/node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/eslint/node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/eslint/node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/espree": {
+ "version": "9.3.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz",
+ "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "acorn": "^8.7.0",
+ "acorn-jsx": "^5.3.1",
+ "eslint-visitor-keys": "^3.1.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
"node_modules/esprima": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
@@ -6338,6 +6818,32 @@
"node": ">=4"
}
},
+ "node_modules/esquery": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
+ "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
"node_modules/estraverse": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
@@ -7175,6 +7681,19 @@
"resolved": "apps/file-metadata-microservice",
"link": true
},
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
"node_modules/file-stream-rotator": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/file-stream-rotator/-/file-stream-rotator-0.4.1.tgz",
@@ -7353,6 +7872,27 @@
"flat": "cli.js"
}
},
+ "node_modules/flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz",
+ "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==",
+ "dev": true,
+ "peer": true
+ },
"node_modules/fn.name": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz",
@@ -7473,6 +8013,13 @@
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
+ "node_modules/functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true,
+ "peer": true
+ },
"node_modules/gensync": {
"version": "1.0.0-beta.2",
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
@@ -8155,6 +8702,16 @@
}
]
},
+ "node_modules/ignore": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
+ "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
"node_modules/imagesearch": {
"resolved": "apps/image-search-abstraction-layer",
"link": true
@@ -8172,6 +8729,33 @@
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
"integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
},
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/import-fresh/node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/import-local": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
@@ -9565,6 +10149,13 @@
"jsonify": "~0.0.0"
}
},
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true,
+ "peer": true
+ },
"node_modules/json-stringify-safe": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
@@ -9638,6 +10229,19 @@
"promise": "^7.0.1"
}
},
+ "node_modules/jsx-ast-utils": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz",
+ "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==",
+ "dev": true,
+ "dependencies": {
+ "array-includes": "^3.1.3",
+ "object.assign": "^4.1.2"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
"node_modules/kareem": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz",
@@ -9770,6 +10374,13 @@
"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz",
"integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8="
},
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true,
+ "peer": true
+ },
"node_modules/log-symbols": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
@@ -10954,6 +11565,50 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/object.entries": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz",
+ "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.fromentries": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz",
+ "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.hasown": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz",
+ "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/object.pick": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
@@ -10965,6 +11620,23 @@
"node": ">=0.10.0"
}
},
+ "node_modules/object.values": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz",
+ "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/on-finished": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
@@ -11124,6 +11796,19 @@
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
"integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
},
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/parents": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz",
@@ -11439,6 +12124,18 @@
"node": ">=0.10.0"
}
},
+ "node_modules/prettier": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz",
+ "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==",
+ "dev": true,
+ "bin": {
+ "prettier": "bin-prettier.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
"node_modules/pretty-format": {
"version": "27.4.6",
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.6.tgz",
@@ -11932,6 +12629,35 @@
"resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz",
"integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw=="
},
+ "node_modules/regexp.prototype.flags": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz",
+ "integrity": "sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/regexpp": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
+ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ }
+ },
"node_modules/regexpu-core": {
"version": "4.8.0",
"resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz",
@@ -13095,6 +13821,25 @@
"node": ">=8"
}
},
+ "node_modules/string.prototype.matchall": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz",
+ "integrity": "sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1",
+ "get-intrinsic": "^1.1.1",
+ "has-symbols": "^1.0.2",
+ "internal-slot": "^1.0.3",
+ "regexp.prototype.flags": "^1.3.1",
+ "side-channel": "^1.0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/string.prototype.padend": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz",
@@ -13351,6 +14096,13 @@
"resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz",
"integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg=="
},
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true,
+ "peer": true
+ },
"node_modules/throat": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz",
@@ -14049,6 +14801,13 @@
"uuid": "bin/uuid"
}
},
+ "node_modules/v8-compile-cache": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
+ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
+ "dev": true,
+ "peer": true
+ },
"node_modules/v8-to-istanbul": {
"version": "8.1.1",
"resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz",
@@ -16052,22 +16811,102 @@
"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
- },
- "@dabh/diagnostics": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz",
- "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==",
+ "@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
+ },
+ "@dabh/diagnostics": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz",
+ "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==",
+ "requires": {
+ "colorspace": "1.1.x",
+ "enabled": "2.0.x",
+ "kuler": "^2.0.0"
+ }
+ },
+ "@eslint/eslintrc": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz",
+ "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.2.0",
+ "globals": "^13.9.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.0.4",
+ "strip-json-comments": "^3.1.1"
+ },
+ "dependencies": {
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true,
+ "peer": true
+ },
+ "globals": {
+ "version": "13.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz",
+ "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "type-fest": "^0.20.2"
+ }
+ },
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "dev": true,
+ "peer": true
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
+ "type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "peer": true
+ }
+ }
+ },
+ "@humanwhocodes/config-array": {
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz",
+ "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==",
+ "dev": true,
+ "peer": true,
"requires": {
- "colorspace": "1.1.x",
- "enabled": "2.0.x",
- "kuler": "^2.0.0"
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.4"
}
},
+ "@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true,
+ "peer": 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",
@@ -16512,6 +17351,14 @@
}
}
},
+ "acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "peer": true,
+ "requires": {}
+ },
"acorn-node": {
"version": "1.8.2",
"resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
@@ -16677,11 +17524,35 @@
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz",
"integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY="
},
+ "array-includes": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz",
+ "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1",
+ "get-intrinsic": "^1.1.1",
+ "is-string": "^1.0.7"
+ }
+ },
"array-unique": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
"integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
},
+ "array.prototype.flatmap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz",
+ "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.0"
+ }
+ },
"arraybuffer.slice": {
"version": "0.0.7",
"resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
@@ -19134,6 +20005,16 @@
}
}
},
+ "doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
"doctypes": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz",
@@ -19435,11 +20316,270 @@
"source-map": "~0.6.1"
}
},
+ "eslint": {
+ "version": "8.8.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.8.0.tgz",
+ "integrity": "sha512-H3KXAzQGBH1plhYS3okDix2ZthuYJlQQEGE5k0IKuEqUSiyu4AmxxlJ2MtTYeJ3xB4jDhcYCwGOg2TXYdnDXlQ==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "@eslint/eslintrc": "^1.0.5",
+ "@humanwhocodes/config-array": "^0.9.2",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.1.0",
+ "eslint-utils": "^3.0.0",
+ "eslint-visitor-keys": "^3.2.0",
+ "espree": "^9.3.0",
+ "esquery": "^1.4.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "functional-red-black-tree": "^1.0.1",
+ "glob-parent": "^6.0.1",
+ "globals": "^13.6.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.0.4",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "regexpp": "^3.2.0",
+ "strip-ansi": "^6.0.1",
+ "strip-json-comments": "^3.1.0",
+ "text-table": "^0.2.0",
+ "v8-compile-cache": "^2.0.3"
+ },
+ "dependencies": {
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true,
+ "peer": true
+ },
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "peer": true
+ },
+ "glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "is-glob": "^4.0.3"
+ }
+ },
+ "globals": {
+ "version": "13.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz",
+ "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "type-fest": "^0.20.2"
+ }
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
+ "levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ }
+ },
+ "optionator": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.3"
+ }
+ },
+ "prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "peer": true
+ },
+ "type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "prelude-ls": "^1.2.1"
+ }
+ },
+ "type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "peer": true
+ }
+ }
+ },
+ "eslint-config-prettier": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz",
+ "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==",
+ "dev": true,
+ "requires": {}
+ },
+ "eslint-plugin-react": {
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz",
+ "integrity": "sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw==",
+ "dev": true,
+ "requires": {
+ "array-includes": "^3.1.4",
+ "array.prototype.flatmap": "^1.2.5",
+ "doctrine": "^2.1.0",
+ "estraverse": "^5.3.0",
+ "jsx-ast-utils": "^2.4.1 || ^3.0.0",
+ "minimatch": "^3.0.4",
+ "object.entries": "^1.1.5",
+ "object.fromentries": "^2.0.5",
+ "object.hasown": "^1.1.0",
+ "object.values": "^1.1.5",
+ "prop-types": "^15.7.2",
+ "resolve": "^2.0.0-next.3",
+ "semver": "^6.3.0",
+ "string.prototype.matchall": "^4.0.6"
+ },
+ "dependencies": {
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "resolve": {
+ "version": "2.0.0-next.3",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz",
+ "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==",
+ "dev": true,
+ "requires": {
+ "is-core-module": "^2.2.0",
+ "path-parse": "^1.0.6"
+ }
+ }
+ }
+ },
+ "eslint-scope": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz",
+ "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ }
+ },
+ "eslint-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "eslint-visitor-keys": "^2.0.0"
+ },
+ "dependencies": {
+ "eslint-visitor-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "dev": true,
+ "peer": true
+ }
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz",
+ "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==",
+ "dev": true,
+ "peer": true
+ },
+ "espree": {
+ "version": "9.3.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz",
+ "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "acorn": "^8.7.0",
+ "acorn-jsx": "^5.3.1",
+ "eslint-visitor-keys": "^3.1.0"
+ }
+ },
"esprima": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
},
+ "esquery": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
+ "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "estraverse": "^5.1.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "estraverse": "^5.2.0"
+ }
+ },
"estraverse": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
@@ -20366,6 +21506,16 @@
}
}
},
+ "file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "flat-cache": "^3.0.4"
+ }
+ },
"file-stream-rotator": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/file-stream-rotator/-/file-stream-rotator-0.4.1.tgz",
@@ -20509,6 +21659,24 @@
"resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
"integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ=="
},
+ "flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ }
+ },
+ "flatted": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz",
+ "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==",
+ "dev": true,
+ "peer": true
+ },
"fn.name": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz",
@@ -20583,6 +21751,13 @@
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true,
+ "peer": true
+ },
"gensync": {
"version": "1.0.0-beta.2",
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
@@ -21091,6 +22266,13 @@
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
},
+ "ignore": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
+ "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
+ "dev": true,
+ "peer": true
+ },
"imagesearch": {
"version": "file:apps/image-search-abstraction-layer",
"requires": {
@@ -21114,6 +22296,26 @@
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
"integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
},
+ "import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "dependencies": {
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "peer": true
+ }
+ }
+ },
"import-local": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
@@ -22175,6 +23377,13 @@
"jsonify": "~0.0.0"
}
},
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true,
+ "peer": true
+ },
"json-stringify-safe": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
@@ -22227,6 +23436,16 @@
"promise": "^7.0.1"
}
},
+ "jsx-ast-utils": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz",
+ "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==",
+ "dev": true,
+ "requires": {
+ "array-includes": "^3.1.3",
+ "object.assign": "^4.1.2"
+ }
+ },
"kareem": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz",
@@ -22337,6 +23556,13 @@
"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz",
"integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8="
},
+ "lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true,
+ "peer": true
+ },
"log-symbols": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
@@ -23252,6 +24478,38 @@
"object-keys": "^1.1.1"
}
},
+ "object.entries": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz",
+ "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1"
+ }
+ },
+ "object.fromentries": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz",
+ "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1"
+ }
+ },
+ "object.hasown": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz",
+ "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1"
+ }
+ },
"object.pick": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
@@ -23260,6 +24518,17 @@
"isobject": "^3.0.1"
}
},
+ "object.values": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz",
+ "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1"
+ }
+ },
"on-finished": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
@@ -23392,6 +24661,16 @@
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
"integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
},
+ "parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "callsites": "^3.0.0"
+ }
+ },
"parents": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz",
@@ -23730,6 +25009,12 @@
"resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
"integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw="
},
+ "prettier": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz",
+ "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==",
+ "dev": true
+ },
"pretty-format": {
"version": "27.4.6",
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.6.tgz",
@@ -24160,6 +25445,23 @@
"resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz",
"integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw=="
},
+ "regexp.prototype.flags": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz",
+ "integrity": "sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ }
+ },
+ "regexpp": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
+ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
+ "dev": true,
+ "peer": true
+ },
"regexpu-core": {
"version": "4.8.0",
"resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz",
@@ -25255,6 +26557,22 @@
"strip-ansi": "^6.0.1"
}
},
+ "string.prototype.matchall": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz",
+ "integrity": "sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1",
+ "get-intrinsic": "^1.1.1",
+ "has-symbols": "^1.0.2",
+ "internal-slot": "^1.0.3",
+ "regexp.prototype.flags": "^1.3.1",
+ "side-channel": "^1.0.4"
+ }
+ },
"string.prototype.padend": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz",
@@ -25460,6 +26778,13 @@
"resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz",
"integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg=="
},
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true,
+ "peer": true
+ },
"throat": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz",
@@ -26006,6 +27331,13 @@
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
},
+ "v8-compile-cache": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
+ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
+ "dev": true,
+ "peer": true
+ },
"v8-to-istanbul": {
"version": "8.1.1",
"resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz",
diff --git a/package.json b/package.json
index 4d98024a..0ebbb595 100644
--- a/package.json
+++ b/package.json
@@ -7,6 +7,7 @@
},
"description": "Example projects for the freeCodeCamp.org curriculum",
"scripts": {
+ "lint": "eslint apps --max-warnings 0",
"start": "pm2 start ecosystem.config.js",
"reload": "pm2 reload ecosystem.config.js",
"restart": "pm2 restart ecosystem.config.js",
@@ -42,8 +43,11 @@
},
"devDependencies": {
"concurrently": "7.0.0",
+ "eslint-config-prettier": "^8.3.0",
+ "eslint-plugin-react": "^7.28.0",
"jest": "27.4.7",
"npm-run-all": "4.1.5",
+ "prettier": "^2.5.1",
"wait-port": "0.2.9"
},
"dependencies": {