From 5cb42c7e3b2cf6dc6a646e2dbff6429b943ef4c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabrice=20PENHO=C3=8BT?= Date: Fri, 28 Jan 2022 17:37:19 +0100 Subject: [PATCH] Modifications back et front end pour rendre le site 100 % statique. --- README.md | 2 +- app.js | 2 +- controllers/group.js | 2 +- controllers/questionnaire.js | 17 +- controllers/tag.js | 19 +- front/public/.htaccess | 2 +- front/public/404.html | 5 +- front/public/a-propos.html | 7 +- front/public/accueil.html | 71 - front/public/{ => admin}/gestion-groups.html | 37 +- front/public/{ => admin}/gestion-quizs.html | 39 +- .../{ => admin}/gestion-utilisateurs.html | 37 +- front/public/admin/gestion.html | 58 + .../{connexion.html => admin/index.html} | 35 +- front/public/admin/sortie.html | 44 + front/public/aurevoir.html | 45 - front/public/compte.html | 164 -- front/public/contact.html | 5 +- front/public/credits.html | 5 +- front/public/donnees.html | 5 +- front/public/gestion.html | 59 - front/public/inscription.html | 75 - front/public/login.html | 44 - front/public/merci.html | 9 +- front/public/newlogin.html | 45 - front/public/participer-financement.html | 5 +- front/public/robots.txt | 2 +- front/public/sortie.html | 45 - front/public/stop-mail.html | 45 - front/public/validation.html | 103 -- front/src/group.js | 14 +- front/src/groupElement.js | 18 +- front/src/index.js | 6 +- front/src/manageQuestionnaires.js | 97 +- front/src/questionnaire.js | 11 +- front/src/tools/everywhere.js | 7 +- front/webpack.config.js | 2 +- package-lock.json | 1441 +++++++---------- tools/file.js | 20 +- views/wikilerni/config/fr.js | 8 +- views/wikilerni/home.pug | 30 - .../includes/listing-questionnaires.pug | 7 +- views/wikilerni/layout.pug | 9 +- views/wikilerni/newQuestionnaires.pug | 10 +- views/wikilerni/quiz-element.pug | 46 +- views/wikilerni/quiz-group.pug | 29 +- views/wikilerni/quiz.pug | 22 +- views/wikilerni/tag.pug | 5 - views/wikilerni/tagsList.pug | 6 +- 49 files changed, 914 insertions(+), 1907 deletions(-) delete mode 100644 front/public/accueil.html rename front/public/{ => admin}/gestion-groups.html (65%) rename front/public/{ => admin}/gestion-quizs.html (88%) rename front/public/{ => admin}/gestion-utilisateurs.html (80%) create mode 100644 front/public/admin/gestion.html rename front/public/{connexion.html => admin/index.html} (68%) create mode 100644 front/public/admin/sortie.html delete mode 100644 front/public/aurevoir.html delete mode 100644 front/public/compte.html delete mode 100644 front/public/gestion.html delete mode 100644 front/public/inscription.html delete mode 100644 front/public/login.html delete mode 100644 front/public/newlogin.html delete mode 100644 front/public/sortie.html delete mode 100644 front/public/stop-mail.html delete mode 100644 front/public/validation.html diff --git a/README.md b/README.md index c063f8b..f741272 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Vous trouverez sur ce dépôt le code source du projet WikiLerni que vous pouvez visiter sur cette page : https://www.wikilerni.com -Le backend est développé avec Node.js v12/Express. +Le backend est développé avec Node.js v14/Express. Le frontend en "Vanilla.js" + Babel.js pour gérer les anciens navigateurs. Le code est fourni tel quel, sachant qu'il reste encore beaucoup de choses à faire et qu'il s'agit d'un développement spécifique pas forcément réutilisable en entier par ailleurs. Une partie du code peut être réutilisée pour un générateur de quizs de type QCM par exemple. À vous de voir. diff --git a/app.js b/app.js index 1cd3e69..01d6784 100644 --- a/app.js +++ b/app.js @@ -50,7 +50,7 @@ app.use("/api/cron", cronRoutes); // Évalue de la durée de la réponse (!= durée script, car fonctions asynchrones continuent). Mettre next() après réponse des contrôleurs... à contrôler ! // Capture aussi les url inconnues en retournant une erreur 404. -// Je peux aussi recevoir des messages à afficher dans les logs venant des "cron". +// Je peux aussi recevoir des messages à afficher dans les logs liés aux "cron". app.use((req, res, next) => { try diff --git a/controllers/group.js b/controllers/group.js index f25fc80..b5a1b3a 100644 --- a/controllers/group.js +++ b/controllers/group.js @@ -338,7 +338,7 @@ const creaGroupHTML = async (id, preview = false) => pageTitle: txtGroups.groupsName+" "+group.Group.title, contentTitle: group.Group.title+"("+txtGroups.groupsName+")", group: group, - linkCanonical: config.siteUrl+"/"+configQuestionnaires.dirWebGroups+"/"+group.Group.slug+".html" + linkCanonical: config.siteUrlProd+"/"+configQuestionnaires.dirWebGroups+"/"+group.Group.slug+".html" } const html=await compiledFunction(pageDatas); if(preview === false) diff --git a/controllers/questionnaire.js b/controllers/questionnaire.js index c9a8b32..b11f725 100644 --- a/controllers/questionnaire.js +++ b/controllers/questionnaire.js @@ -83,6 +83,7 @@ exports.modify = async (req, res, next) => { const db = require("../models/index"); const questionnaire=await searchQuestionnaireById(req.params.id); + if(!questionnaire) { const Err=new Error; @@ -406,9 +407,10 @@ exports.checkQuestionnairesNeedToBePublished = async (req, res, next) => const creaQuestionnaireJson = async (id) => { const db=require("../models/index"); + console.log("j'arrive ici avec "+id); const Questionnaire=await db["Questionnaire"].findByPk(id); if(Questionnaire) - { + { let datas={ Questionnaire }; const Tags=await db["QuestionnaireClassification"].findAll({ where: { QuestionnaireId: Questionnaire.id }, attributes: ["TagId"] }); if(Tags) @@ -566,7 +568,7 @@ const creaQuestionnaireHTML = async (id, preview=false) => pageTitle: questionnaire.Questionnaire.title+" ("+txtQuestionnaire.questionnairesName+")", contentTitle: questionnaire.Questionnaire.title, questionnaire: questionnaire, - linkCanonical: config.siteUrl+"/"+config.dirWebQuestionnaires+"/"+questionnaire.Questionnaire.slug+".html" + linkCanonical: config.siteUrlProd+"/"+config.dirWebQuestionnaires+"/"+questionnaire.Questionnaire.slug+".html" } const html=await compiledFunction(pageDatas); if(preview===false) @@ -620,7 +622,7 @@ const creaQuestionnaireInGroupHTML = async (questionnaire, preview=false) => questionnaire: questionnaire, group: groupInfos, nextQuestionnaire: nextQuestionnaire, - linkCanonical: config.siteUrl+"/"+config.dirWebQuestionnaires+"/"+questionnaire.Questionnaire.slug+".html" + linkCanonical: config.siteUrlProd+"/"+config.dirWebQuestionnaires+"/"+questionnaire.Questionnaire.slug+".html" } const html=await compiledFunction(pageDatas); if(preview===false) @@ -815,7 +817,7 @@ const creaNewQuestionnairesHTML = async (Questionnaires) => pageTitle: txtGeneral.siteHTMLTitle, contentTitle: config.siteName, questionnaires: questionnaires, - linkCanonical: config.siteUrl + linkCanonical: config.siteUrlProd } let html=await compiledFunction(pageDatas); await toolFile.createHTML(config.dirHTML, "index", html); @@ -823,9 +825,14 @@ const creaNewQuestionnairesHTML = async (Questionnaires) => compiledFunction=pug.compileFile("./views/"+config.theme+"/newQuestionnaires.pug"); pageDatas.metaDescription=configTpl.newQuestionnairesIntro; pageDatas.pageTitle=configTpl.newQuestionnairesTitle; - pageDatas.linkCanonical=config.siteUrl+"/"+configQuestionnaires.dirWebNews; + pageDatas.linkCanonical=config.siteUrlProd+"/"+configQuestionnaires.dirWebNews; html=await compiledFunction(pageDatas); await toolFile.createHTML(configQuestionnaires.dirHTMLNews, "index", html); + // + le flux ATOM + compiledFunction=pug.compileFile("./views/"+config.theme+"/atom.pug"); + //console.log(pageDatas.questionnaires); + const xml=await compiledFunction(pageDatas); + await toolFile.createXML(config.dirHTML, "atom", xml); return true; } diff --git a/controllers/tag.js b/controllers/tag.js index 1710ecc..a6a772f 100644 --- a/controllers/tag.js +++ b/controllers/tag.js @@ -24,12 +24,15 @@ exports.checkTags = async (req, res, next) => { if(req.body.QuestionnaireId==undefined) throw { message: txtTag.neededParams }; + const tagsCurrent=await getUsedTagsQuestionnaire(req.body.QuestionnaireId); - if(tagsCurrent===false) + if(tagsCurrent === false) throw { message: txtTag.tagsForQuestionnaireNotFound }; + const tagsReceived=req.body.classification.split(",");// ! peut être vide si pas/plus de classement souhaité for(let i in tagsReceived) tagsReceived[i]=tagsReceived[i].trim().toLowerCase();// ! gestion de la casse différente pour JS, pas pour Mysql + // les tags jusqu'ici associés sont-ils toujours utilisés ? let deleteLink; for (let i in tagsCurrent) @@ -37,6 +40,7 @@ exports.checkTags = async (req, res, next) => if(tagsReceived.indexOf(tagsCurrent[i].name.toLowerCase()) === -1) deleteLink=await unlinkTagQuestionnaire(tagsCurrent[i].id, req.body.QuestionnaireId); } + // parmis les tags envoyés, certains sont-ils nouveaux pour ce questionnaire ? let findTag=false, creaLink; for(i in tagsReceived) @@ -57,10 +61,13 @@ exports.checkTags = async (req, res, next) => } findTag=false; } - await ctrlQuestionnaire.creaQuestionnaireJson(req.body.QuestionnaireId);// attendre avant de répondre pour que cela soit pris en compte au réaffichage. - if(req.method=="PUT") + + // normalement il faut attendre avant de répondre pour que cela soit pris en compte au réaffichage. + await ctrlQuestionnaire.creaQuestionnaireJson(req.body.QuestionnaireId); + + if(req.method == "PUT") res.status(200).json({ message: txtGeneral.updateOkMessage }); - else if(req.method=="POST") + else if(req.method == "POST") res.status(201).json({ message: txtGeneral.addOkMessage, id:req.body.QuestionnaireId }); next(); } @@ -174,7 +181,7 @@ const creaUsedTagsHTML = async (tags) => pageTitle: configTpl.tagListTitle, contentTitle: config.siteName, tags: tags, - linkCanonical: config.siteUrl+"/"+configQuestionnaire.dirWebTags + linkCanonical: config.siteUrlProd+"/"+configQuestionnaire.dirWebTags } html=await compiledFunction(pageDatas); await toolFile.createHTML(configQuestionnaire.dirHTMLTags, "themes", html); @@ -265,7 +272,7 @@ const creaQuestionnairesTagHTML = async (id, Questionnaires) => pageTitle: config.siteName+" - "+tag.name, contentTitle: config.siteName+" : "+txtTag.tagMetaDescription+tag.name, tagInfos: tag, - linkCanonical: config.siteUrl+"/"+configQuestionnaire.dirWebTags+"/"+tag.slug+".html" + linkCanonical: config.siteUrlProd+"/"+configQuestionnaire.dirWebTags+"/"+tag.slug+".html" } const nbPages=Math.ceil(Questionnaires.length / configTpl.maxQuestionnairesByPage); pageDatas.nbPages=nbPages; diff --git a/front/public/.htaccess b/front/public/.htaccess index 81d59d7..08ba7c2 100644 --- a/front/public/.htaccess +++ b/front/public/.htaccess @@ -47,4 +47,4 @@ deny from all # erreur 404 -ErrorDocument 404 /404.html +ErrorDocument 404 /404.html \ No newline at end of file diff --git a/front/public/404.html b/front/public/404.html index af5a5d3..8bbb978 100644 --- a/front/public/404.html +++ b/front/public/404.html @@ -6,11 +6,12 @@ WikiLerni : page non trouvée - + + @@ -20,7 +21,7 @@ diff --git a/front/public/a-propos.html b/front/public/a-propos.html index bbd4b26..deb6e66 100644 --- a/front/public/a-propos.html +++ b/front/public/a-propos.html @@ -5,12 +5,13 @@ Tout savoir sur WikiLerni - + + @@ -20,7 +21,7 @@ @@ -100,7 +101,7 @@ Ensuite, si vous avez les moyens, vous pouvez participer au financement du projet, pour lui permettre de perdurer.

Et WikiLerni n’ayant pas les moyens des grandes sociétés pour communiquer, vous pouvez aussi en parler autour de vous, en ligne ou dans la vie de tous les jours. Vous le savez sans doute, rien ne vaut le bouche-à-oreille !

-

Tester gratuitement WikiLerni.

+ diff --git a/front/public/accueil.html b/front/public/accueil.html deleted file mode 100644 index 785f2d0..0000000 --- a/front/public/accueil.html +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - Mon WikiLerni - - - - - - - - - -
- WikiLerni (logo) - -
- -
- -
- - - -
- -
- -

Votre jardin WikiLerni

- -

-
- -
-
- -
- -
- - - - \ No newline at end of file diff --git a/front/public/gestion-groups.html b/front/public/admin/gestion-groups.html similarity index 65% rename from front/public/gestion-groups.html rename to front/public/admin/gestion-groups.html index f75aee2..f1a219c 100644 --- a/front/public/gestion-groups.html +++ b/front/public/admin/gestion-groups.html @@ -5,23 +5,22 @@ Gestion des groupes de quizs - - - - - + + + + +
- WikiLerni (logo) + WikiLerni (logo)
@@ -30,10 +29,10 @@
@@ -72,10 +71,10 @@ diff --git a/front/public/gestion-quizs.html b/front/public/admin/gestion-quizs.html similarity index 88% rename from front/public/gestion-quizs.html rename to front/public/admin/gestion-quizs.html index b321c6e..102dad1 100644 --- a/front/public/gestion-quizs.html +++ b/front/public/admin/gestion-quizs.html @@ -5,23 +5,22 @@ Gestion des quizs - - - - - + + + + +
- WikiLerni (logo) + WikiLerni (logo)
@@ -30,10 +29,10 @@
@@ -49,7 +48,7 @@

Informations du quiz

- +
@@ -183,10 +182,10 @@ diff --git a/front/public/gestion-utilisateurs.html b/front/public/admin/gestion-utilisateurs.html similarity index 80% rename from front/public/gestion-utilisateurs.html rename to front/public/admin/gestion-utilisateurs.html index 4df5b15..b943b8c 100644 --- a/front/public/gestion-utilisateurs.html +++ b/front/public/admin/gestion-utilisateurs.html @@ -5,23 +5,22 @@ Gestion des abonnés - - - - - + + + + +
- WikiLerni (logo) + WikiLerni (logo)
@@ -30,10 +29,10 @@
@@ -123,10 +122,10 @@ diff --git a/front/public/admin/gestion.html b/front/public/admin/gestion.html new file mode 100644 index 0000000..41f82ff --- /dev/null +++ b/front/public/admin/gestion.html @@ -0,0 +1,58 @@ + + + + + + + + Mon WikiLerni + + + + + + + + + +
+ WikiLerni (logo) + +
+ +
+ +
+ + + + + +
+ + + + \ No newline at end of file diff --git a/front/public/connexion.html b/front/public/admin/index.html similarity index 68% rename from front/public/connexion.html rename to front/public/admin/index.html index 0a427b3..1f0edbf 100644 --- a/front/public/connexion.html +++ b/front/public/admin/index.html @@ -5,28 +5,27 @@ Se connecter à WikiLerni - - - - - + + + + +
- WikiLerni (logo) + WikiLerni (logo)
- Logo WikiLerni + Logo WikiLerni

Cultivons notre jardin !

@@ -59,12 +58,12 @@
-
Pas encore de compte ? Créez-le en cliquant ici.
+
Pas encore de compte ? Créez-le en cliquant ici.

Besoin d’aide ?

Si vous avez oublié votre mot de passe, il vous suffit de cocher la case « Je souhaite recevoir un lien de connexion par e-mail ». Un lien valide pendant une courte durée vous permettra de vous connecter au site.

-

Si vous ne vous souvenez pas non plus de l’adresse e-mail utilisée sur ce site ou que vous n’y avez plus accès, vous pouvez me contacter, en fournissant des informations permettant de vous identifier.

+

Si vous ne vous souvenez pas non plus de l’adresse e-mail utilisée sur ce site ou que vous n’y avez plus accès, vous pouvez me contacter, en fournissant des informations permettant de vous identifier.

La case « Je souhaite ne pas avoir à me connecter à chaque fois. » vous permettra de rester connecté jusqu’à 6 mois, pour peu que vous utilisiez le même navigateur internet sur le même ordinateur.

@@ -72,10 +71,10 @@ diff --git a/front/public/admin/sortie.html b/front/public/admin/sortie.html new file mode 100644 index 0000000..0bbf7a9 --- /dev/null +++ b/front/public/admin/sortie.html @@ -0,0 +1,44 @@ + + + + + + + Déconnexion WikiLerni + + + + + + + + + +
+ WikiLerni (logo) + +
+ +
+ Logo WikiLerni +

Cultivons notre jardin !

+

Au revoir !

+

Si vous voyez ce message, c’est qu’un problème a été rencontré durant la déconnexion.
N’hésitez pas à nous prévenir si le problème persiste.

+
+ + + + \ No newline at end of file diff --git a/front/public/aurevoir.html b/front/public/aurevoir.html deleted file mode 100644 index eaf6352..0000000 --- a/front/public/aurevoir.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - Validation de la suppression de votre compte - - - - - - - - - -
- WikiLerni (logo) - -
- -
- Logo WikiLerni -

Cultivons notre jardin !

-

Validation de la suppression de votre compte

-

Si vous voyez ce message, c’est que votre lien de validation n’est pas valide ou a expiré. Vous pouvez en demander un nouveau en cliquant ici.

-
- - - - \ No newline at end of file diff --git a/front/public/compte.html b/front/public/compte.html deleted file mode 100644 index 58b926e..0000000 --- a/front/public/compte.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - Mon compte WikiLerni - - - - - - - - - -
- WikiLerni (logo) - -
- -
- -
- - - -
-

Votre compte WikiLerni

-
-
-
-
-
-
-
Laisser vide sauf si vous souhaitez le changer.
-
-

Quels jours de la semaine souhaitez-vous recevoir des e-mails (nouveaux articles ou quizs) ?

-
    -
  • - -
  • -
  • - -
  • -
  • - -
  • -
  • - -
  • -
  • - -
  • -
  • - -
  • -
  • - -
  • -
-
-
    -
  • - -
  • -
-
-
-
- -
-

Les utilisateurs que vous avez parrainés

-
-

Vous pouvez parrainer d’autres utilisateurs. Pour ce faire, demandez-leur de saisir lors de l’inscription votre adresse e-mail ou encore le code suivant : .

-

À chaque fois qu’un utilisateur que vous avez parrainé souscrit ou renouvelle un abonnement payant, son abonnement comme le vôtre se trouve prolongé gratuitement de 30 jours. Cet avantage restera valable tant que cet utilisateur et vous-mêmes garderez votre compte WikiLerni.

-
-

Pour l’instant, aucune personne ne s’est inscrite, en vous désignant comme « parrain ».

-
- -
-

Votre abonnement

-
-
-
    -
  • - -
  • -
  • - -
  • -
  • - -
  • -
  • - -
  • - -
  • - -
  • -
-
-
- -
-

Paiement de votre abonnement de soutien à 9 € TTC.

- -
-
-

Paiement de votre abonnement de soutien à 18 € TTC.

- -
-
-

Paiement de votre abonnement de soutien à 36 € TTC.

- -
-
-

Paiement de votre abonnement de soutien à 54 € TTC.

- -
-

En cliquant sur le bouton de paiement, vous serez dirigé vers l’outil de facturation et de paiement en ligne.
Lors de votre premier abonnement, vous devrez y créer un compte client qui est distinct de votre compte utilisateur WikiLerni. Vous pouvez y utiliser un mot de passe différent.
Les années suivantes, lors de vos renouvellements, vous pourrez vous reconnecter à ce compte client.

-
-
-

Prix libre ?

-

WikiLerni pratique le « prix libre », c’est-à-dire que vous pouvez choisir quel montant vous êtes prêt à payer pour continuer à utiliser WikiLerni.

-

Il ne s’agit pas vraiment d’un don, mais d’un financement participatif. Sans cela, le site WikiLerni cessera son activité et vous ne pourrez donc plus l’utiliser.

-

Vous pouvez donc choisir en conscience ce que vous pouvez et souhaitez payer ce semestre pour WikiLerni, sachant que ce choix ne vous engagera pas pour les futurs renouvellements.

-

Une fois sélectionné le montant qui vous convient, il vous faudra cocher la case de validation des Conditions Générales de Vente, pour voir apparaître un bouton de paiement qui vous mènera sur l’outil de facturation et paiement en ligne de la société WebPortage.

-

Dédicacez des articles WikiLerni

-

Au-delà de la possibilité d’utiliser WikiLerni pendant 6 mois supplémentaires, à partir de l’abonnement à 3 € TTC/mois, pour vous remercier vous pourrez demander à apposer votre nom sur la page d’un ou plusieurs des articles publiés sur WikiLerni.

-

Il peut s’agir de votre nom / pseudo ou de celui de la personne à qui vous le dédicacez. Je vous contacterai pour vous demander et c’est évidemment facultatif !

Si vous souhaitez apposer le nom, voire le lien internet d’une activité commerciale ou associative, c’est aussi possible dans certaines conditions, mais merci de commencer par me contacter pour avis.

-

WikiLerni s’adapte à vous

-

Vous aimez WikiLerni, mais ne pouvez vraiment pas payer ? Vous préférez un autre montant ou un autre moyen de paiement (chèque, virement) ? Ou encore vous avez besoin d’explications ? Alors contactez-moi. Je me ferai un plaisir de vous répondre et d’essayer de m’adapter à votre situation.

-
-
- -
-
- - - - \ No newline at end of file diff --git a/front/public/contact.html b/front/public/contact.html index a261725..bb06788 100644 --- a/front/public/contact.html +++ b/front/public/contact.html @@ -5,11 +5,12 @@ WikiLerni : page de contact - + + @@ -19,7 +20,7 @@ diff --git a/front/public/credits.html b/front/public/credits.html index 84381b8..6c1e4a2 100644 --- a/front/public/credits.html +++ b/front/public/credits.html @@ -5,12 +5,13 @@ Qui sont les créateurs de WikiLerni et avec quelles licences ? - + + @@ -20,7 +21,7 @@ diff --git a/front/public/donnees.html b/front/public/donnees.html index 23e027f..a6b0783 100644 --- a/front/public/donnees.html +++ b/front/public/donnees.html @@ -5,12 +5,13 @@ WikiLerni et vos données personnelles - + + @@ -20,7 +21,7 @@ diff --git a/front/public/gestion.html b/front/public/gestion.html deleted file mode 100644 index 204071b..0000000 --- a/front/public/gestion.html +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - Mon WikiLerni - - - - - - - - - -
- WikiLerni (logo) - -
- -
- -
- - - - - -
- - - - \ No newline at end of file diff --git a/front/public/inscription.html b/front/public/inscription.html deleted file mode 100644 index b881a8a..0000000 --- a/front/public/inscription.html +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - Créer son compte WikiLerni - - - - - - - - - - -
- WikiLerni (logo) - -
- -
- Logo WikiLerni -

Cultivons notre jardin !

-
- -
- -

Créer votre compte WIKILERNI

- - -
-
- - -
-
- -
- -
-
-
- -
-

Besoin d’aide ?

-

Votre compte WikiLerni va vous permettre de recevoir régulièrement par e-mail des suggestions d’articles lisibles en quelques minutes sur des thèmes variés : arts, cinéma, littérature, musique, mythologie, sciences, etc. Ces lectures sont suivies de quizs vous permettant de tester ce que vous en avez retenu.

-

La création de votre compte est gratuite et sans engagement et vous pouvez ensuite stopper les envois en un clic. Elle vous permet de tester WikiLerni durant une période de 15 jours. Libre à vous ensuite de vous abonner ou pas.

-

Pour créer votre compte, saisissez juste votre adresse e-mail et acceptez les Conditions Générales d’Utilisation. Vous recevrez un lien de validation sur l’adresse e-mail saisie, qui doit donc être valide.

-

Une fois cliqué sur ce lien, vous serez invité à compléter vos informations (choix d’un pseudo, mot de passe…).

-
- -
- - - \ No newline at end of file diff --git a/front/public/login.html b/front/public/login.html deleted file mode 100644 index 21868e5..0000000 --- a/front/public/login.html +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - Tester votre lien de connexion - - - - - - - - - -
- WikiLerni (logo) - -
- -
- Logo WikiLerni -

Cultivons notre jardin !

-
Si vous voyez ce message, c'est que votre lien de connexion n'est pas valide ou a expiré. Vous pouvez en demander un nouveau en cliquant ici.
-
- - - - \ No newline at end of file diff --git a/front/public/merci.html b/front/public/merci.html index 2336525..babd387 100644 --- a/front/public/merci.html +++ b/front/public/merci.html @@ -5,11 +5,12 @@ WikiLerni : remerciement - + + @@ -19,7 +20,7 @@ @@ -34,8 +35,8 @@

Merci !

Votre paiement vient d’être enregistré. Merci à vous !

-

Normalement, vous avez reçu une facture par e-mail et votre abonnement vient d’être prolongé.

-

Si jamais ce n’est pas le cas et que vous avez une quelconque question, n’hésitez pas à me prévenir.

+

Normalement, vous avez aussi reçu une facture par e-mail.

+

Si jamais ce n’est pas le cas ou que vous avez une quelconque question, n’hésitez pas à me prévenir.

Tirelire diff --git a/front/public/newlogin.html b/front/public/newlogin.html deleted file mode 100644 index bf1984f..0000000 --- a/front/public/newlogin.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - Lien pour changer vos informations de connexion - - - - - - - - - -
- WikiLerni (logo) - -
- -
- Logo WikiLerni -

Cultivons notre jardin !

-

Validation de vos nouveaux identifiants

-

Si vous voyez ce message, c’est que votre lien de validation n’est pas valide ou a expiré. Vous pouvez en demander un nouveau en cliquant ici.

-
- - - - \ No newline at end of file diff --git a/front/public/participer-financement.html b/front/public/participer-financement.html index 5f9ab11..fd759fc 100644 --- a/front/public/participer-financement.html +++ b/front/public/participer-financement.html @@ -5,12 +5,13 @@ Prix libre et financement participatif de WikiLerni - + + @@ -20,7 +21,7 @@ diff --git a/front/public/robots.txt b/front/public/robots.txt index 77470cb..6f27bb6 100644 --- a/front/public/robots.txt +++ b/front/public/robots.txt @@ -1,2 +1,2 @@ User-agent: * -Disallow: / \ No newline at end of file +Disallow: \ No newline at end of file diff --git a/front/public/sortie.html b/front/public/sortie.html deleted file mode 100644 index a6636af..0000000 --- a/front/public/sortie.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - Déconnexion WikiLerni - - - - - - - - - -
- WikiLerni (logo) - -
- -
- Logo WikiLerni -

Cultivons notre jardin !

-

Au revoir !

-

Si vous voyez ce message, c’est qu’un problème a été rencontré durant la déconnexion.
N’hésitez pas à nous prévenir si le problème persiste.

-
- - - - \ No newline at end of file diff --git a/front/public/stop-mail.html b/front/public/stop-mail.html deleted file mode 100644 index 992a943..0000000 --- a/front/public/stop-mail.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - Ne plus recevoir d'e-mail de WikiLerni - - - - - - - - - -
- WikiLerni (logo) - -
- -
- Logo WikiLerni -

Cultivons notre jardin !

-

Stopper l’envoi des e-mails

-

Si vous voyez ce message, c’est que votre lien de désabonnement n’a pas fonctionné correctement. Vous pouvez accéder à votre compte pour désactiver les envois.

-
- - - - \ No newline at end of file diff --git a/front/public/validation.html b/front/public/validation.html deleted file mode 100644 index f44ac56..0000000 --- a/front/public/validation.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - Valider la création de votre compte WikiLerni - - - - - - - - - -
- WikiLerni (logo) - -
- -
- Logo WikiLerni -

Cultivons notre jardin !

-

Valider la création de votre compte

-
- -
-

Personnalisez votre abonnement

-
- -
- -
- -
Au moins 8 caractères. Générer un mot de passe.
-
- - - -
-

Quels jours de la semaine souhaitez-vous recevoir des e-mails (nouveaux articles ou quizs) ?

-
    -
  • - -
  • -
  • - -
  • -
  • - -
  • -
  • - -
  • -
  • - -
  • -
  • - -
  • -
  • - -
  • -
-
-
- -
-
-
- -
-

Besoin d'aide ?

-

Votre pseudonyme est complétement libre, mais servira à personnaliser certains affichages.

-

Votre mot de passe doit compter au moins 8 caractères. Si vous manquez d’inspiration, cliquez sur le lien « Générer un mot de passe » pour en obtenir un. Si vous ne choisissez pas de mot de passe, vous ne pourrez vous connecter à votre compte que via des liens de connexion envoyés sur votre adresse e-mail.

- -

Vous pouvez sélectionner les jours de la semaine où vous acceptez de recevoir des mails de WikiLerni.
Chaque jour sélectionné, vous recevrez soit une « graine de savoir » WikiLerni, soit un quiz permettant de tester ce que vous avez retenu des envois des jours précédents. S’il n’y a plus de nouveautés, vous recevrez un quiz au hasard parmi ceux déjà envoyés.

-

Toutes les informations ci-dessus pourront être modifiées par la suite.

-
- -
- - - - \ No newline at end of file diff --git a/front/src/group.js b/front/src/group.js index 350c192..0ef1805 100644 --- a/front/src/group.js +++ b/front/src/group.js @@ -46,6 +46,7 @@ const initialise = async () => { // Si JS activé, on affiche le bouton de soumission du formulaire : beginAnswer(); + /* isConnected=await checkSession(["user"]);// "user" car seuls les utilisateurs de base peuvent enregistrer leurs réponses aux quizs // Si l'utilisateur est connecté et a déjà répondu à ce quiz, on affiche ses précédentes réponses à la place du texte servant à expliquer le topo aux nouveaux if(isConnected) @@ -54,7 +55,7 @@ const initialise = async () => updateAccountLink(user.status, configTemplate);// lien vers le compte adapté pour les utilisateurs connectés checkPreviousResponses(user); } - else + else */ loadMatomo(); } catch(e) @@ -117,7 +118,7 @@ myForm.addEventListener("submit", function(e) // Affichage du résultat, suivant si l'utilisateur est connecté ou pas et son score : let getOuput=checkAnswerOuput(answer); - if(isConnected) + /*if(isConnected) { // Si l'utilisateur est connecté, on passe son résultat au serveur pour le sauvegarder. const xhrSaveAnswer = new XMLHttpRequest(); @@ -147,19 +148,19 @@ myForm.addEventListener("submit", function(e) } else { // Si internaute non connecté, on enregistre le résultat côté client pour permettre de le retrouver au moment de la création du compte ou de la connexion. - if(saveAnswer(answer)) + /*if(saveAnswer(answer)) { getOuput+="

"+wantToSaveResponses+"

"; addElement(divResponse, "p", getOuput, "", ["success"]); document.querySelector(".subscribeBtns").style.display="block"; } - else // Mais inutile de proposer de créer un compte si le stockage local ne fonctionne pas + else // Mais inutile de proposer de créer un compte si le stockage local ne fonctionne pas */ addElement(divResponse, "p", getOuput, "", ["success"]); // Puis on le redirige vers son résultat : window.location.hash=""; const here=window.location;// window.location à ajouter pour ne pas quitter la page en mode "preview"... window.location.hash="response"; - } + //} // + Affichage des textes d'explications pour chaque question const explanations=document.querySelectorAll(".help"); for(let i in explanations) @@ -173,6 +174,7 @@ myForm.addEventListener("submit", function(e) } }) +/* // Fonction vérifiant les précédentes réponses de l'utilisateur. // Utile si connecté lors du premier chargement de la page, puis après une nouvelle réponse. const checkPreviousResponses = (user) => @@ -223,4 +225,4 @@ const checkPreviousResponses = (user) => } xhrPreviousRes.setRequestHeader("Authorization", "Bearer "+user.token); xhrPreviousRes.send(); -} \ No newline at end of file +} */ \ No newline at end of file diff --git a/front/src/groupElement.js b/front/src/groupElement.js index 043906e..8f0c8c1 100644 --- a/front/src/groupElement.js +++ b/front/src/groupElement.js @@ -24,14 +24,15 @@ const { needUniqueEmail } = require("../../lang/"+lang+"/user"); // Principaux éléments du DOM manipulés : const btnSubmit=document.getElementById("submitDatas"); const divResponse=document.getElementById("response"); -const emailInput=document.getElementById("email"); -const myForm=document.getElementById("subscription"); +// const emailInput=document.getElementById("email"); +// const myForm=document.getElementById("subscription"); // Test de connexion de l'utilisateur + affichage formulaire d'inscription : const initialise = async () => { try { + /* let isConnected=await checkSession(), user; if(isConnected) { @@ -39,11 +40,11 @@ const initialise = async () => updateAccountLink(user.status, configTemplate);// lien vers le compte adapté pour les utilisateurs connectés } else - { + { */ loadMatomo(); - setAttributesToInputs(configUsers, myForm); - myForm.style.display="block"; - } + //setAttributesToInputs(configUsers, myForm); + //myForm.style.display="block"; + //} } catch(e) { @@ -54,6 +55,7 @@ const initialise = async () => initialise(); helloDev(); +/* // Test si l'e-mail saisi est déjà utilisé par un autre compte. // Si c'est le cas, la validation du formulaire est bloquée. emailInput.addEventListener("focus", function(e) @@ -85,7 +87,7 @@ emailInput.addEventListener("blur", function(e) const datas={ emailTest:emailValue }; xhr.send(JSON.stringify(datas)); } -}); +}) // Traitement de l'envoi des données d'inscription : myForm.addEventListener("submit", function(e) @@ -133,4 +135,4 @@ myForm.addEventListener("submit", function(e) addElement(divResponse, "p", serverError, "", ["error"]); console.error(e); } -}); \ No newline at end of file +});;*/ \ No newline at end of file diff --git a/front/src/index.js b/front/src/index.js index 6bf0de3..79b7c63 100644 --- a/front/src/index.js +++ b/front/src/index.js @@ -18,14 +18,14 @@ const initialise = async () => { try { - const isConnected=await checkSession(); - if(isConnected) + /* const isConnected=await checkSession(); + if(isConnected) { // on change le lien d'accès au compte const user=getLocaly("user", true); updateAccountLink(user.status, configTemplate); } - else + else*/ loadMatomo(); } catch(e) diff --git a/front/src/manageQuestionnaires.js b/front/src/manageQuestionnaires.js index 4bd3dae..0e888e2 100644 --- a/front/src/manageQuestionnaires.js +++ b/front/src/manageQuestionnaires.js @@ -153,7 +153,7 @@ const sendLinkForm = (token) => addElement(divLinks, "p", response.message, "", ["success"], "", false); hideAllForms(); window.location.assign("#linksList"); - showNextQuestionnaires(token);// peut avoir évolué suivant ce qui s'est passé + //showNextQuestionnaires(token);// peut avoir évolué suivant ce qui s'est passé } else if (response.errors) { @@ -180,7 +180,7 @@ const showFormIllustrationInfos = (Illustration) => // Puis on affiche celui concerné formIllustration.style.display="block"; // + Les contraintes de champ & valeurs par défaut - setAttributesToInputs(configIllustrations.Illustration, formIllustration); + setAttributesToInputs(configIllustrations.Illustration, formIllustration); // Mais le champ file n'est plus requis, quand un fichier existe déjà formIllustration.elements["image"].removeAttribute("required"); for(let data in Illustration) @@ -261,7 +261,7 @@ const sendIllustrationForm = (token) => addElement(divIllustrations, "p", response.message, "", ["success"], "", false); hideAllForms(); window.location.assign("#illustrationsList"); - showNextQuestionnaires(token);// peut avoir évolué suivant ce qui s'est passé + //showNextQuestionnaires(token);// peut avoir évolué suivant ce qui s'est passé } else if (response.errors) { @@ -376,7 +376,7 @@ const sendQuestionForm = (token) => addElement(divQuestions, "p", response.message, "", ["success"], "", false); hideAllForms(); window.location.assign("#questionsList"); - showNextQuestionnaires(token);// car peut avoir évolué suivant ce qui s'est passé + //showNextQuestionnaires(token);// car peut avoir évolué suivant ce qui s'est passé } else if (response.errors) { @@ -457,6 +457,7 @@ const showFormQuestionnaireInfos = (id, token) => xhrGetInfos.send(); } +/* // Affiche les questionnaires bientôt publiés. const showNextQuestionnaires = (token) => { @@ -496,7 +497,7 @@ const showNextQuestionnaires = (token) => } xhrNextQuestionnaires.setRequestHeader("Authorization", "Bearer "+token); xhrNextQuestionnaires.send(); -} +}*/ const initialise = async () => { @@ -512,8 +513,8 @@ const initialise = async () => removeLocaly("message"); } const user=getLocaly("user", true); - // Mise à jour du lien "compte" du header : - updateAccountLink(user.status, configTemplate); + /// Mise à jour du lien "compte" du header (plus utile) + /// updateAccountLink(user.status, configTemplate); // Initialisation des formulaires : setAttributesToInputs(configQuestionnaires, formSearch); setAttributesToInputs(configQuestionnaires.Questionnaire, formQuestionnaire); @@ -526,7 +527,7 @@ const initialise = async () => if(urlDatas && urlDatas.id!==undefined) showFormQuestionnaireInfos(urlDatas.id, user.token); // les prochaines publications : - showNextQuestionnaires(user.token); + //showNextQuestionnaires(user.token); // Lancement d'une recherche : formSearch.addEventListener("submit", function(e) { @@ -654,14 +655,14 @@ const initialise = async () => { e.preventDefault(); divResponse.innerHTML=""; - let datas=getDatasFromInputs(formQuestionnaire); + const datas=getDatasFromInputs(formQuestionnaire); if(!isEmpty(datas.rankInGroup) && isEmpty(datas.GroupId)) addElement(divResponse, "p", needGroupIfRank, "", ["error"]); else { if(isEmpty(datas.rankInGroup) && !isEmpty(datas.GroupId)) datas.rankInGroup=1; - const xhrQuestionnaireDatas = new XMLHttpRequest(); + const xhrQuestionnaireDatas=new XMLHttpRequest(); if(!isEmpty(datas.id) && (datas.deleteOk!==undefined)) xhrQuestionnaireDatas.open("DELETE", apiUrl+configQuestionnaires.questionnaireRoutes+"/"+datas.id); else if(!isEmpty(datas.id)) @@ -672,42 +673,50 @@ const initialise = async () => { if (this.readyState == XMLHttpRequest.DONE) { - let response=JSON.parse(this.responseText); - if (this.status === 201 && response.id != undefined) - { - addElement(divResponse, "p", addOkMessage, "", ["success"]); - datas.id=response.id; - showNextQuestionnaires(user.token);// peut avoir évolué suivant ce qui s'est passé - } - else if (this.status === 200 && response.message != undefined) - { - if(Array.isArray(response.message)) - response.message = response.message.join("
"); + //if(this.responseText !== "") + //{ + const response=JSON.parse(this.responseText); + if (this.status === 201 && response.id != undefined) + { + addElement(divResponse, "p", addOkMessage, "", ["success"]); + datas.id=response.id; + //showNextQuestionnaires(user.token);// peut avoir évolué suivant ce qui s'est passé + } + else if (this.status === 200 && response.message != undefined) + { + if(Array.isArray(response.message)) + response.message = response.message.join("
"); + else + response.message = response.message; + addElement(divResponse, "p", response.message, "", ["success"]); + //showNextQuestionnaires(user.token);// peut avoir évolué suivant ce qui s'est passé + } + else if (response.errors) + { + if(Array.isArray(response.errors)) + response.errors = response.errors.join("
"); + else + response.errors = serverError; + addElement(divResponse, "p", response.errors, "", ["error"]); + } else - response.message = response.message; - addElement(divResponse, "p", response.message, "", ["success"]); - showNextQuestionnaires(user.token);// peut avoir évolué suivant ce qui s'est passé - } - else if (response.errors) - { - if(Array.isArray(response.errors)) - response.errors = response.errors.join("
"); - else - response.errors = serverError; - addElement(divResponse, "p", response.errors, "", ["error"]); - } - else - addElement(divResponse, "p", serverError, "", ["error"]); - if(datas.deleteOk === undefined && response.errors === undefined) - showFormQuestionnaireInfos(datas.id, user.token);// on actualise les données - else if (response.errors === undefined) - { - formQuestionnaire.reset(); - divLinks.innerHTML=""; - divIllustrations.innerHTML=""; - divQuestions.innerHTML=""; - } + addElement(divResponse, "p", serverError, "", ["error"]); + + if(datas.deleteOk === undefined && response.errors === undefined) + showFormQuestionnaireInfos(datas.id, user.token);// on actualise les données + else if (response.errors === undefined) + { + formQuestionnaire.reset(); + divLinks.innerHTML=""; + divIllustrations.innerHTML=""; + divQuestions.innerHTML=""; + } + //} + //else + //console.error("je n'ai rien reçu du serveur"); } + //else if (this.readyState == XMLHttpRequest.DONE && this.responseText === "") + // console.error("je n'ai rien reçu du serveur 2"); } xhrQuestionnaireDatas.setRequestHeader("Content-Type", "application/json"); xhrQuestionnaireDatas.setRequestHeader("Authorization", "Bearer "+user.token); diff --git a/front/src/questionnaire.js b/front/src/questionnaire.js index dcf7de6..2bafc1b 100644 --- a/front/src/questionnaire.js +++ b/front/src/questionnaire.js @@ -38,6 +38,7 @@ const initialise = async () => try { btnShow.style.display="inline";// bouton caché si JS inactif, car JS nécessaire pour vérifier les réponses + /* isConnected=await checkSession(["user"]);// "user" car seuls les utilisateurs de base peuvent enregistrer leurs réponses aux quizs // Si l'utilisateur est connecté et a déjà répondu à ce quiz, on affiche ses précédentes réponses à la place du texte servant à expliquer le topo aux nouveaux if(isConnected) @@ -46,7 +47,7 @@ const initialise = async () => updateAccountLink(user.status, configTemplate);// lien vers le compte adapté pour les utilisateurs connectés checkPreviousResponses(user); } - else + else */ loadMatomo(); } catch(e) @@ -144,6 +145,7 @@ myForm.addEventListener("submit", function(e) // Affichage du résultat, suivant si l'utilisateur est connecté ou pas et son score : let getOuput=checkAnswerOuput(answer); + /* if(isConnected) { // Si l'utilisateur est connecté, on enregistre son résultat sur le serveur. @@ -180,13 +182,13 @@ myForm.addEventListener("submit", function(e) addElement(divResponse, "p", getOuput, "", ["info"]); document.querySelector(".subscribeBtns").style.display="block"; } - else // inutile de proposer de créer un compte si le stockage local ne fonctionne pas + else // inutile de proposer de créer un compte si le stockage local ne fonctionne pas*/ addElement(divResponse, "p", getOuput, "", ["info"]); // on redirige vers le résultat window.location.hash=""; const here=window.location;// window.location à ajouter pour ne pas quitter la page en mode "preview"... window.location.assign(here+"response"); - } + //} // + affichage des textes d'explications pour chaque question const explanations=document.querySelectorAll(".help"); for(let i in explanations) @@ -202,6 +204,7 @@ myForm.addEventListener("submit", function(e) } }) +/* // Fonction vérifiant les précédentes réponses de l'utilisateur // Utile si connecté lors du premier chargement de la page, puis après une nouvelle réponse const checkPreviousResponses = (user) => @@ -253,4 +256,4 @@ const checkPreviousResponses = (user) => } xhrPreviousRes.setRequestHeader("Authorization", "Bearer "+user.token); xhrPreviousRes.send(); -} \ No newline at end of file +}*/ \ No newline at end of file diff --git a/front/src/tools/everywhere.js b/front/src/tools/everywhere.js index b5ba889..696a2a4 100644 --- a/front/src/tools/everywhere.js +++ b/front/src/tools/everywhere.js @@ -8,7 +8,8 @@ export const helloDev = () => export const updateAccountLink = (status, configTemplate) => { - const link=document.getElementById("accountHeadLink"); - const homePage=status+"HomePage"; - link.href="/"+configTemplate[homePage]; + //const link=document.getElementById("accountHeadLink"); + //const homePage=status+"HomePage"; + //link.href="/"+configTemplate[homePage]; + //console.log("je suis connecté"); } \ No newline at end of file diff --git a/front/webpack.config.js b/front/webpack.config.js index 218d139..b763039 100644 --- a/front/webpack.config.js +++ b/front/webpack.config.js @@ -49,5 +49,5 @@ module.exports = devServer: { static: path.resolve(__dirname, "./public") - } + }, }; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 2f65072..4e72794 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,17 +33,17 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.0.tgz", - "integrity": "sha512-TEHWXf0xxpi9wKVyBCmRcSSDjbJ/cl6LUdlbYUHEaNQUJGhreJbZrXT6sR4+fZLxVUJqNRB4KyOvjuy/D9009A==", + "version": "7.16.12", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.12.tgz", + "integrity": "sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A==", "bin": { "parser": "bin/babel-parser.js" }, @@ -52,11 +52,11 @@ } }, "node_modules/@babel/types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", - "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", + "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", "dependencies": { - "@babel/helper-validator-identifier": "^7.15.7", + "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -64,9 +64,9 @@ } }, "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.6.tgz", - "integrity": "sha512-qK1ECws8UxuPqOA8F5LFD90vyVU33W7N3hGfgsOVfrJaRVc8McC3JClTDHpeSbL9CBrOHly/4GsNPAvIgNZE+g==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.8.tgz", + "integrity": "sha512-CMGKi28CF+qlbXh26hDe6NxCd7amqeAzEqnS6IHeO6LoaKyM/n+Xw3HT1COdq8cuioOdlKdqn/hCmqPUOMOywg==", "dependencies": { "detect-libc": "^1.0.3", "https-proxy-agent": "^5.0.0", @@ -104,9 +104,9 @@ } }, "node_modules/@types/node": { - "version": "16.11.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz", - "integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==" + "version": "17.0.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.12.tgz", + "integrity": "sha512-4YpbAsnJXWYK/fpTVFlMIcUIho2AYCi4wg5aNPrG1ng7fn/1/RZfCIpRCiBX+12RVa34RluilnvCqD+g3KiSiA==" }, "node_modules/abbrev": { "version": "1.1.1", @@ -148,9 +148,9 @@ } }, "node_modules/agent-base/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dependencies": { "ms": "2.1.2" }, @@ -177,50 +177,6 @@ "string-width": "^4.1.0" } }, - "node_modules/ansi-align/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/ansi-align/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/ansi-align/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/ansi-align/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/ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", @@ -315,25 +271,6 @@ "node": ">= 6" } }, - "node_modules/are-we-there-yet/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/are-we-there-yet/node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -432,11 +369,6 @@ "readable-stream": "^3.4.0" } }, - "node_modules/bl/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/bl/node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -450,25 +382,6 @@ "node": ">= 6" } }, - "node_modules/bl/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/bl/node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -483,20 +396,20 @@ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, "node_modules/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", + "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", "dependencies": { - "bytes": "3.1.0", + "bytes": "3.1.1", "content-type": "~1.0.4", "debug": "2.6.9", "depd": "~1.1.2", - "http-errors": "1.7.2", + "http-errors": "1.8.1", "iconv-lite": "0.4.24", "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "qs": "6.9.6", + "raw-body": "2.4.2", + "type-is": "~1.6.18" }, "engines": { "node": ">= 0.8" @@ -524,50 +437,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/boxen/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/boxen/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/boxen/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/boxen/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/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -635,9 +504,9 @@ } }, "node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", "engines": { "node": ">= 0.8" } @@ -697,9 +566,9 @@ } }, "node_modules/camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "engines": { "node": ">=10" @@ -762,10 +631,16 @@ } }, "node_modules/chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "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", @@ -860,6 +735,15 @@ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/cliui/node_modules/string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -958,9 +842,9 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "node_modules/color-string": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz", - "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz", + "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==", "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -1018,6 +902,11 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/concat-stream/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==" + }, "node_modules/concat-stream/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -1068,11 +957,11 @@ } }, "node_modules/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "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.1.2" + "safe-buffer": "5.2.1" }, "engines": { "node": ">= 0.6" @@ -1087,9 +976,9 @@ } }, "node_modules/cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", "engines": { "node": ">= 0.6" } @@ -1132,9 +1021,9 @@ } }, "node_modules/date-format": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz", - "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.3.tgz", + "integrity": "sha512-7P3FyqDcfeznLZp2b+OMitV9Sz2lUnsT87WaTat9nVwqsBkTzPG3lPLNwW3en6F4pHUiWzr6vb8CLhjdK9bcxQ==", "engines": { "node": ">=4.0" } @@ -1325,8 +1214,7 @@ "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 + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/encodeurl": { "version": "1.0.2", @@ -1429,16 +1317,16 @@ } }, "node_modules/express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz", + "integrity": "sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==", "dependencies": { "accepts": "~1.3.7", "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", + "body-parser": "1.19.1", + "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.0", + "cookie": "0.4.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "~1.1.2", @@ -1452,13 +1340,13 @@ "on-finished": "~2.3.0", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", + "proxy-addr": "~2.0.7", + "qs": "6.9.6", "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", "statuses": "~1.5.0", "type-is": "~1.6.18", "utils-merge": "1.0.1", @@ -1525,9 +1413,9 @@ } }, "node_modules/flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", + "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==" }, "node_modules/forwarded": { "version": "0.2.0", @@ -1605,9 +1493,9 @@ "integrity": "sha1-C1lj69DKcOO8jGdmk0oCGCHIuFc=" }, "node_modules/gauge": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.1.tgz", - "integrity": "sha512-6STz6KdQgxO4S/ko+AbjlFGGdGcknluoqU+79GOFCDqqyYj5OanQf9AjxwN0jCidtT+ziPMmPSt9E4hfQ0CwIQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.2", @@ -1615,8 +1503,8 @@ "has-unicode": "^2.0.1", "object-assign": "^4.1.1", "signal-exit": "^3.0.0", - "string-width": "^1.0.1 || ^2.0.0", - "strip-ansi": "^3.0.1 || ^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", "wide-align": "^1.1.2" }, "engines": { @@ -1769,9 +1657,9 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, "node_modules/has": { "version": "1.0.3", @@ -1839,15 +1727,15 @@ "dev": true }, "node_modules/http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dependencies": { "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "toidentifier": "1.0.1" }, "engines": { "node": ">= 0.6" @@ -1866,9 +1754,9 @@ } }, "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dependencies": { "ms": "2.1.2" }, @@ -1958,9 +1846,9 @@ } }, "node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { "version": "1.3.8", @@ -2018,9 +1906,9 @@ } }, "node_modules/is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", "dependencies": { "has": "^1.0.3" }, @@ -2047,11 +1935,11 @@ } }, "node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "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==", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/is-glob": { @@ -2342,24 +2230,24 @@ "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" }, "node_modules/log4js": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz", - "integrity": "sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.1.tgz", + "integrity": "sha512-iUiYnXqAmNKiIZ1XSAitQ4TmNs8CdZYTAWINARF3LjnsLN8tY5m0vRwd6uuWj/yNY0YHxeZodnbmxKFUOM2rMg==", "dependencies": { - "date-format": "^3.0.0", - "debug": "^4.1.1", - "flatted": "^2.0.1", - "rfdc": "^1.1.4", - "streamroller": "^2.2.4" + "date-format": "^4.0.3", + "debug": "^4.3.3", + "flatted": "^3.2.4", + "rfdc": "^1.3.0", + "streamroller": "^3.0.2" }, "engines": { "node": ">=8.0" } }, "node_modules/log4js/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dependencies": { "ms": "2.1.2" }, @@ -2498,19 +2386,19 @@ } }, "node_modules/mime-db": { - "version": "1.50.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", - "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.33", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", - "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "dependencies": { - "mime-db": "1.50.0" + "mime-db": "1.51.0" }, "engines": { "node": ">= 0.6" @@ -2544,9 +2432,9 @@ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "node_modules/minipass": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz", - "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", "dependencies": { "yallist": "^4.0.0" }, @@ -2591,9 +2479,9 @@ } }, "node_modules/moment-timezone": { - "version": "0.5.33", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.33.tgz", - "integrity": "sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w==", + "version": "0.5.34", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.34.tgz", + "integrity": "sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg==", "dependencies": { "moment": ">= 2.9.0" }, @@ -2607,9 +2495,9 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "node_modules/multer": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.3.tgz", - "integrity": "sha512-np0YLKncuZoTzufbkM6wEKp68EhWJXcU6fq6QqrSwkckd2LlMgd1UqhUJLj6NS/5sZ8dE8LYDWslsltJznnXlg==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4.tgz", + "integrity": "sha512-2wY2+xD4udX612aMqMcB8Ws2Voq6NIUPEtD1be6m411T4uDH/VtL9i//xvcyFlTVfRdaBsk7hV5tgrGQqhuBiw==", "dependencies": { "append-field": "^1.0.0", "busboy": "^0.2.11", @@ -2625,9 +2513,9 @@ } }, "node_modules/mysql2": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.3.2.tgz", - "integrity": "sha512-JUSA50rt/nSew8aq8xe3pRk5Q4y/M5QdSJn7Ey3ndOlPp2KXuialQ0sS35DNhPT5Z5PnOiIwSSQvKkl1WorqRA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.3.3.tgz", + "integrity": "sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA==", "dependencies": { "denque": "^2.0.1", "generate-function": "^2.3.1", @@ -2719,40 +2607,48 @@ "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" }, "node_modules/node-fetch": { - "version": "2.6.6", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", - "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dependencies": { "whatwg-url": "^5.0.0" }, "engines": { "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, "node_modules/nodemailer": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.0.tgz", - "integrity": "sha512-AtiTVUFHLiiDnMQ43zi0YgkzHOEWUkhDgPlBXrsDzJiJvB29Alo4OKxHQ0ugF3gRqRQIneCLtZU3yiUo7pItZw==", + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.2.tgz", + "integrity": "sha512-Dz7zVwlef4k5R71fdmxwR8Q39fiboGbu3xgswkzGwczUfjp873rVxt1O46+Fh0j1ORnAC6L9+heI8uUpO6DT7Q==", "engines": { "node": ">=6.0.0" } }, "node_modules/nodemon": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.14.tgz", - "integrity": "sha512-frcpDx+PviKEQRSYzwhckuO2zoHcBYLHI754RE9z5h1RGtrngerc04mLpQQCPWBkH/2ObrX7We9YiwVSYZpFJQ==", + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.15.tgz", + "integrity": "sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==", "dev": true, "hasInstallScript": true, "dependencies": { - "chokidar": "^3.2.2", - "debug": "^3.2.6", + "chokidar": "^3.5.2", + "debug": "^3.2.7", "ignore-by-default": "^1.0.1", "minimatch": "^3.0.4", - "pstree.remy": "^1.1.7", + "pstree.remy": "^1.1.8", "semver": "^5.7.1", "supports-color": "^5.5.0", "touch": "^3.1.0", - "undefsafe": "^2.0.3", + "undefsafe": "^2.0.5", "update-notifier": "^5.1.0" }, "bin": { @@ -2978,9 +2874,9 @@ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "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" @@ -3109,6 +3005,11 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/prebuild-install/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==" + }, "node_modules/prebuild-install/node_modules/simple-get": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", @@ -3336,11 +3237,14 @@ } }, "node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "version": "6.9.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", + "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==", "engines": { "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/range-parser": { @@ -3352,12 +3256,12 @@ } }, "node_modules/raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", + "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", + "bytes": "3.1.1", + "http-errors": "1.8.1", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, @@ -3442,12 +3346,16 @@ "dev": true }, "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3490,9 +3398,23 @@ } }, "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==" + "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", @@ -3535,9 +3457,9 @@ } }, "node_modules/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", "dependencies": { "debug": "2.6.9", "depd": "~1.1.2", @@ -3546,9 +3468,9 @@ "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.7.2", + "http-errors": "1.8.1", "mime": "1.6.0", - "ms": "2.1.1", + "ms": "2.1.3", "on-finished": "~2.3.0", "range-parser": "~1.2.1", "statuses": "~1.5.0" @@ -3558,9 +3480,9 @@ } }, "node_modules/send/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/seq-queue": { "version": "0.0.5", @@ -3568,9 +3490,9 @@ "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" }, "node_modules/sequelize": { - "version": "5.22.4", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-5.22.4.tgz", - "integrity": "sha512-xFQQ38HPg7EyDRDA+NdzMSRWbo9m6Z/RxpjnkBl3ggyQG+jRrup48x0jaw4Ox42h56wFnXOBC2NZOkTJfZeWCw==", + "version": "5.22.5", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-5.22.5.tgz", + "integrity": "sha512-ySIHof18sJbeVG4zjEvsDL490cd9S14/IhkCrZR/g0C/FPlZq1AzEJVeSAo++9/sgJH2eERltAIGqYQNgVqX/A==", "dependencies": { "bluebird": "^3.5.0", "cls-bluebird": "^2.1.0", @@ -3584,8 +3506,8 @@ "semver": "^6.3.0", "sequelize-pool": "^2.3.0", "toposort-class": "^1.0.1", - "uuid": "^3.3.3", - "validator": "^10.11.0", + "uuid": "^8.3.2", + "validator": "^13.7.0", "wkx": "^0.4.8" }, "engines": { @@ -3656,9 +3578,9 @@ } }, "node_modules/sequelize/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dependencies": { "ms": "2.1.2" }, @@ -3685,14 +3607,14 @@ } }, "node_modules/serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.1" + "send": "0.17.2" }, "engines": { "node": ">= 0.8.0" @@ -3704,9 +3626,9 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "node_modules/sharp": { "version": "0.25.4", @@ -3801,6 +3723,11 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/sharp/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==" + }, "node_modules/sharp/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -3845,9 +3772,9 @@ "dev": true }, "node_modules/signal-exit": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", - "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==" + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==" }, "node_modules/simple-concat": { "version": "1.0.1", @@ -3869,9 +3796,9 @@ ] }, "node_modules/simple-get": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.0.tgz", - "integrity": "sha512-ZalZGexYr3TA0SwySsr5HlgOOinS4Jsa8YB2GJ6lUNAazyAu4KG/VmzMTwAt2YVXzzVj8QmefmAonZIK2BSGcQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", "funding": [ { "type": "github", @@ -3901,9 +3828,9 @@ } }, "node_modules/slugify": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.1.tgz", - "integrity": "sha512-5ofqMTbetNhxlzjYYLBaZFQd6oiTuSkQlyfPEFIMwgUABlZQ0hbk5xIV9Ydd5jghWeRoO7GkiJliUvTpLOjNRA==", + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.5.tgz", + "integrity": "sha512-8mo9bslnBO3tr5PEVFzMPIWwWnipGS0xVbYf65zxDqfNwmzYn1LpiKNrR6DlClusuvo+hDHd1zKpmfAe83NQSQ==", "engines": { "node": ">=8.0.0" } @@ -3925,30 +3852,22 @@ } }, "node_modules/streamroller": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz", - "integrity": "sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.2.tgz", + "integrity": "sha512-ur6y5S5dopOaRXBuRIZ1u6GC5bcEXHRZKgfBjfCglMhmIf+roVCECjvkEYzNQOXIN2/JPnkMPW/8B3CZoKaEPA==", "dependencies": { - "date-format": "^2.1.0", + "date-format": "^4.0.3", "debug": "^4.1.1", - "fs-extra": "^8.1.0" + "fs-extra": "^10.0.0" }, "engines": { "node": ">=8.0" } }, - "node_modules/streamroller/node_modules/date-format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", - "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", - "engines": { - "node": ">=4.0" - } - }, "node_modules/streamroller/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dependencies": { "ms": "2.1.2" }, @@ -3962,24 +3881,16 @@ } }, "node_modules/streamroller/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "dependencies": { "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/streamroller/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "node": ">=12" } }, "node_modules/streamroller/node_modules/ms": { @@ -3987,14 +3898,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/streamroller/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/streamsearch": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", @@ -4009,34 +3912,35 @@ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" }, "node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/strip-json-comments": { @@ -4064,6 +3968,17 @@ "node": ">=4" } }, + "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==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/tar": { "version": "6.1.11", "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", @@ -4124,25 +4039,6 @@ "node": ">= 6" } }, - "node_modules/tar-stream/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/tar-stream/node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -4202,9 +4098,9 @@ } }, "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "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" } @@ -4406,18 +4302,17 @@ } }, "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "bin": { - "uuid": "bin/uuid" + "uuid": "dist/bin/uuid" } }, "node_modules/validator": { - "version": "10.11.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz", - "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==", + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", + "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==", "engines": { "node": ">= 0.10" } @@ -4483,50 +4378,6 @@ "node": ">=8" } }, - "node_modules/widest-line/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/widest-line/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/widest-line/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/widest-line/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/with": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", @@ -4566,50 +4417,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi/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/wrap-ansi/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/wrap-ansi/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/wrap-ansi/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/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -4707,6 +4514,15 @@ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/yargs/node_modules/string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -4736,28 +4552,28 @@ }, "dependencies": { "@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==" + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" }, "@babel/parser": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.0.tgz", - "integrity": "sha512-TEHWXf0xxpi9wKVyBCmRcSSDjbJ/cl6LUdlbYUHEaNQUJGhreJbZrXT6sR4+fZLxVUJqNRB4KyOvjuy/D9009A==" + "version": "7.16.12", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.12.tgz", + "integrity": "sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A==" }, "@babel/types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", - "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", + "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", "requires": { - "@babel/helper-validator-identifier": "^7.15.7", + "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" } }, "@mapbox/node-pre-gyp": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.6.tgz", - "integrity": "sha512-qK1ECws8UxuPqOA8F5LFD90vyVU33W7N3hGfgsOVfrJaRVc8McC3JClTDHpeSbL9CBrOHly/4GsNPAvIgNZE+g==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.8.tgz", + "integrity": "sha512-CMGKi28CF+qlbXh26hDe6NxCd7amqeAzEqnS6IHeO6LoaKyM/n+Xw3HT1COdq8cuioOdlKdqn/hCmqPUOMOywg==", "requires": { "detect-libc": "^1.0.3", "https-proxy-agent": "^5.0.0", @@ -4786,9 +4602,9 @@ } }, "@types/node": { - "version": "16.11.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz", - "integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==" + "version": "17.0.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.12.tgz", + "integrity": "sha512-4YpbAsnJXWYK/fpTVFlMIcUIho2AYCi4wg5aNPrG1ng7fn/1/RZfCIpRCiBX+12RVa34RluilnvCqD+g3KiSiA==" }, "abbrev": { "version": "1.1.1", @@ -4818,9 +4634,9 @@ }, "dependencies": { "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { "ms": "2.1.2" } @@ -4839,40 +4655,6 @@ "dev": true, "requires": { "string-width": "^4.1.0" - }, - "dependencies": { - "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 - }, - "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 - }, - "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" - } - } } }, "ansi-regex": { @@ -4950,11 +4732,6 @@ "util-deprecate": "^1.0.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==" - }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -5028,11 +4805,6 @@ "readable-stream": "^3.4.0" }, "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -5043,11 +4815,6 @@ "util-deprecate": "^1.0.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==" - }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -5064,20 +4831,20 @@ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", + "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", "requires": { - "bytes": "3.1.0", + "bytes": "3.1.1", "content-type": "~1.0.4", "debug": "2.6.9", "depd": "~1.1.2", - "http-errors": "1.7.2", + "http-errors": "1.8.1", "iconv-lite": "0.4.24", "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "qs": "6.9.6", + "raw-body": "2.4.2", + "type-is": "~1.6.18" } }, "boxen": { @@ -5094,40 +4861,6 @@ "type-fest": "^0.20.2", "widest-line": "^3.1.0", "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "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 - }, - "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 - }, - "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" - } - } } }, "brace-expansion": { @@ -5177,9 +4910,9 @@ } }, "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==" }, "cacheable-request": { "version": "6.1.0", @@ -5223,9 +4956,9 @@ } }, "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true }, "chalk": { @@ -5269,9 +5002,9 @@ "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" }, "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "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", @@ -5347,6 +5080,12 @@ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -5434,9 +5173,9 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "color-string": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz", - "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz", + "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==", "requires": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -5488,6 +5227,11 @@ "util-deprecate": "~1.0.1" } }, + "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==" + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -5537,11 +5281,11 @@ } }, "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "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.1.2" + "safe-buffer": "5.2.1" } }, "content-type": { @@ -5550,9 +5294,9 @@ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" }, "cookie-signature": { "version": "1.0.6", @@ -5586,9 +5330,9 @@ } }, "date-format": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz", - "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==" + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.3.tgz", + "integrity": "sha512-7P3FyqDcfeznLZp2b+OMitV9Sz2lUnsT87WaTat9nVwqsBkTzPG3lPLNwW3en6F4pHUiWzr6vb8CLhjdK9bcxQ==" }, "debug": { "version": "2.6.9", @@ -5739,8 +5483,7 @@ "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 + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "encodeurl": { "version": "1.0.2", @@ -5831,16 +5574,16 @@ "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" }, "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz", + "integrity": "sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==", "requires": { "accepts": "~1.3.7", "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", + "body-parser": "1.19.1", + "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.0", + "cookie": "0.4.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "~1.1.2", @@ -5854,13 +5597,13 @@ "on-finished": "~2.3.0", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", + "proxy-addr": "~2.0.7", + "qs": "6.9.6", "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", "statuses": "~1.5.0", "type-is": "~1.6.18", "utils-merge": "1.0.1", @@ -5917,9 +5660,9 @@ } }, "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", + "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==" }, "forwarded": { "version": "0.2.0", @@ -5978,9 +5721,9 @@ "integrity": "sha1-C1lj69DKcOO8jGdmk0oCGCHIuFc=" }, "gauge": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.1.tgz", - "integrity": "sha512-6STz6KdQgxO4S/ko+AbjlFGGdGcknluoqU+79GOFCDqqyYj5OanQf9AjxwN0jCidtT+ziPMmPSt9E4hfQ0CwIQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", "requires": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.2", @@ -5988,8 +5731,8 @@ "has-unicode": "^2.0.1", "object-assign": "^4.1.1", "signal-exit": "^3.0.0", - "string-width": "^1.0.1 || ^2.0.0", - "strip-ansi": "^3.0.1 || ^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", "wide-align": "^1.1.2" } }, @@ -6107,9 +5850,9 @@ } }, "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, "has": { "version": "1.0.3", @@ -6156,15 +5899,15 @@ "dev": true }, "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "requires": { "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "toidentifier": "1.0.1" } }, "https-proxy-agent": { @@ -6177,9 +5920,9 @@ }, "dependencies": { "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { "ms": "2.1.2" } @@ -6237,9 +5980,9 @@ } }, "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { "version": "1.3.8", @@ -6285,9 +6028,9 @@ } }, "is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", "requires": { "has": "^1.0.3" } @@ -6308,9 +6051,9 @@ "dev": true }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "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==" }, "is-glob": { "version": "4.0.3", @@ -6549,21 +6292,21 @@ "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" }, "log4js": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz", - "integrity": "sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.1.tgz", + "integrity": "sha512-iUiYnXqAmNKiIZ1XSAitQ4TmNs8CdZYTAWINARF3LjnsLN8tY5m0vRwd6uuWj/yNY0YHxeZodnbmxKFUOM2rMg==", "requires": { - "date-format": "^3.0.0", - "debug": "^4.1.1", - "flatted": "^2.0.1", - "rfdc": "^1.1.4", - "streamroller": "^2.2.4" + "date-format": "^4.0.3", + "debug": "^4.3.3", + "flatted": "^3.2.4", + "rfdc": "^1.3.0", + "streamroller": "^3.0.2" }, "dependencies": { "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { "ms": "2.1.2" } @@ -6673,16 +6416,16 @@ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { - "version": "1.50.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", - "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==" + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" }, "mime-types": { - "version": "2.1.33", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", - "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "requires": { - "mime-db": "1.50.0" + "mime-db": "1.51.0" } }, "mimic-response": { @@ -6704,9 +6447,9 @@ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "minipass": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz", - "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", "requires": { "yallist": "^4.0.0" } @@ -6739,9 +6482,9 @@ "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" }, "moment-timezone": { - "version": "0.5.33", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.33.tgz", - "integrity": "sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w==", + "version": "0.5.34", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.34.tgz", + "integrity": "sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg==", "requires": { "moment": ">= 2.9.0" } @@ -6752,9 +6495,9 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "multer": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.3.tgz", - "integrity": "sha512-np0YLKncuZoTzufbkM6wEKp68EhWJXcU6fq6QqrSwkckd2LlMgd1UqhUJLj6NS/5sZ8dE8LYDWslsltJznnXlg==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4.tgz", + "integrity": "sha512-2wY2+xD4udX612aMqMcB8Ws2Voq6NIUPEtD1be6m411T4uDH/VtL9i//xvcyFlTVfRdaBsk7hV5tgrGQqhuBiw==", "requires": { "append-field": "^1.0.0", "busboy": "^0.2.11", @@ -6767,9 +6510,9 @@ } }, "mysql2": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.3.2.tgz", - "integrity": "sha512-JUSA50rt/nSew8aq8xe3pRk5Q4y/M5QdSJn7Ey3ndOlPp2KXuialQ0sS35DNhPT5Z5PnOiIwSSQvKkl1WorqRA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.3.3.tgz", + "integrity": "sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA==", "requires": { "denque": "^2.0.1", "generate-function": "^2.3.1", @@ -6852,33 +6595,33 @@ "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" }, "node-fetch": { - "version": "2.6.6", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", - "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "requires": { "whatwg-url": "^5.0.0" } }, "nodemailer": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.0.tgz", - "integrity": "sha512-AtiTVUFHLiiDnMQ43zi0YgkzHOEWUkhDgPlBXrsDzJiJvB29Alo4OKxHQ0ugF3gRqRQIneCLtZU3yiUo7pItZw==" + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.2.tgz", + "integrity": "sha512-Dz7zVwlef4k5R71fdmxwR8Q39fiboGbu3xgswkzGwczUfjp873rVxt1O46+Fh0j1ORnAC6L9+heI8uUpO6DT7Q==" }, "nodemon": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.14.tgz", - "integrity": "sha512-frcpDx+PviKEQRSYzwhckuO2zoHcBYLHI754RE9z5h1RGtrngerc04mLpQQCPWBkH/2ObrX7We9YiwVSYZpFJQ==", + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.15.tgz", + "integrity": "sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==", "dev": true, "requires": { - "chokidar": "^3.2.2", - "debug": "^3.2.6", + "chokidar": "^3.5.2", + "debug": "^3.2.7", "ignore-by-default": "^1.0.1", "minimatch": "^3.0.4", - "pstree.remy": "^1.1.7", + "pstree.remy": "^1.1.8", "semver": "^5.7.1", "supports-color": "^5.5.0", "touch": "^3.1.0", - "undefsafe": "^2.0.3", + "undefsafe": "^2.0.5", "update-notifier": "^5.1.0" }, "dependencies": { @@ -7044,9 +6787,9 @@ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, "prebuild-install": { @@ -7151,6 +6894,11 @@ "util-deprecate": "~1.0.1" } }, + "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==" + }, "simple-get": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", @@ -7365,9 +7113,9 @@ } }, "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + "version": "6.9.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", + "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==" }, "range-parser": { "version": "1.2.1", @@ -7375,12 +7123,12 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", + "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", + "bytes": "3.1.1", + "http-errors": "1.8.1", "iconv-lite": "0.4.24", "unpipe": "1.0.0" } @@ -7447,12 +7195,13 @@ "dev": true }, "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, "responselike": { @@ -7486,9 +7235,9 @@ } }, "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==" + "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", @@ -7521,9 +7270,9 @@ } }, "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", "requires": { "debug": "2.6.9", "depd": "~1.1.2", @@ -7532,18 +7281,18 @@ "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.7.2", + "http-errors": "1.8.1", "mime": "1.6.0", - "ms": "2.1.1", + "ms": "2.1.3", "on-finished": "~2.3.0", "range-parser": "~1.2.1", "statuses": "~1.5.0" }, "dependencies": { "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" } } }, @@ -7553,9 +7302,9 @@ "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" }, "sequelize": { - "version": "5.22.4", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-5.22.4.tgz", - "integrity": "sha512-xFQQ38HPg7EyDRDA+NdzMSRWbo9m6Z/RxpjnkBl3ggyQG+jRrup48x0jaw4Ox42h56wFnXOBC2NZOkTJfZeWCw==", + "version": "5.22.5", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-5.22.5.tgz", + "integrity": "sha512-ySIHof18sJbeVG4zjEvsDL490cd9S14/IhkCrZR/g0C/FPlZq1AzEJVeSAo++9/sgJH2eERltAIGqYQNgVqX/A==", "requires": { "bluebird": "^3.5.0", "cls-bluebird": "^2.1.0", @@ -7569,15 +7318,15 @@ "semver": "^6.3.0", "sequelize-pool": "^2.3.0", "toposort-class": "^1.0.1", - "uuid": "^3.3.3", - "validator": "^10.11.0", + "uuid": "^8.3.2", + "validator": "^13.7.0", "wkx": "^0.4.8" }, "dependencies": { "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { "ms": "2.1.2" } @@ -7644,14 +7393,14 @@ "integrity": "sha512-Ibz08vnXvkZ8LJTiUOxRcj1Ckdn7qafNZ2t59jYHMX1VIebTAOYefWdRYFt6z6+hy52WGthAHAoLc9hvk3onqA==" }, "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.1" + "send": "0.17.2" } }, "set-blocking": { @@ -7660,9 +7409,9 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "sharp": { "version": "0.25.4", @@ -7747,6 +7496,11 @@ "util-deprecate": "~1.0.1" } }, + "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==" + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -7787,9 +7541,9 @@ "dev": true }, "signal-exit": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", - "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==" + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==" }, "simple-concat": { "version": "1.0.1", @@ -7797,9 +7551,9 @@ "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" }, "simple-get": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.0.tgz", - "integrity": "sha512-ZalZGexYr3TA0SwySsr5HlgOOinS4Jsa8YB2GJ6lUNAazyAu4KG/VmzMTwAt2YVXzzVj8QmefmAonZIK2BSGcQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", "requires": { "decompress-response": "^6.0.0", "once": "^1.3.1", @@ -7815,9 +7569,9 @@ } }, "slugify": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.1.tgz", - "integrity": "sha512-5ofqMTbetNhxlzjYYLBaZFQd6oiTuSkQlyfPEFIMwgUABlZQ0hbk5xIV9Ydd5jghWeRoO7GkiJliUvTpLOjNRA==" + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.5.tgz", + "integrity": "sha512-8mo9bslnBO3tr5PEVFzMPIWwWnipGS0xVbYf65zxDqfNwmzYn1LpiKNrR6DlClusuvo+hDHd1zKpmfAe83NQSQ==" }, "sqlstring": { "version": "2.3.2", @@ -7830,55 +7584,37 @@ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, "streamroller": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz", - "integrity": "sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.2.tgz", + "integrity": "sha512-ur6y5S5dopOaRXBuRIZ1u6GC5bcEXHRZKgfBjfCglMhmIf+roVCECjvkEYzNQOXIN2/JPnkMPW/8B3CZoKaEPA==", "requires": { - "date-format": "^2.1.0", + "date-format": "^4.0.3", "debug": "^4.1.1", - "fs-extra": "^8.1.0" + "fs-extra": "^10.0.0" }, "dependencies": { - "date-format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", - "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==" - }, "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { "ms": "2.1.2" } }, "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "requires": { "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "requires": { - "graceful-fs": "^4.1.6" + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" } } }, @@ -7893,26 +7629,27 @@ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^5.0.1" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" } } }, @@ -7935,6 +7672,11 @@ "has-flag": "^3.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==" + }, "tar": { "version": "6.1.11", "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", @@ -7995,11 +7737,6 @@ "util-deprecate": "^1.0.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==" - }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -8041,9 +7778,9 @@ } }, "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, "token-stream": { "version": "1.0.0", @@ -8199,14 +7936,14 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, "validator": { - "version": "10.11.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz", - "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==" + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", + "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==" }, "vary": { "version": "1.1.2", @@ -8258,40 +7995,6 @@ "dev": true, "requires": { "string-width": "^4.0.0" - }, - "dependencies": { - "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 - }, - "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 - }, - "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" - } - } } }, "with": { @@ -8322,40 +8025,6 @@ "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "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 - }, - "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 - }, - "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" - } - } } }, "wrappy": { @@ -8427,6 +8096,12 @@ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", diff --git a/tools/file.js b/tools/file.js index 5496955..1c90f93 100644 --- a/tools/file.js +++ b/tools/file.js @@ -38,8 +38,26 @@ class ToolFile return false; } } + + // Reçoit du code XML et l'enregistre dans un fichier (à mutualiser avec précédente) + static async createXML(dir, file, xml) + { + try + { + let myFile=""+file;// "file" peut être un nombre = bug avec endsWith + myFile=(myFile.endsWith(".xml")) ? myFile : myFile+".xml"; + const path=dir+"/"+myFile; + await fs.outputFile(path, xml);// créé récursivement les répertoires si besoin + return true; + } + catch (err) + { + console.error(err); + return false; + } + } - // Vérifie si un fichier existe dans une répertoir + // Vérifie si un fichier existe dans un répertoire static async checkIfFileExist(dir, file) { try diff --git a/views/wikilerni/config/fr.js b/views/wikilerni/config/fr.js index 1d6e651..e869a46 100644 --- a/views/wikilerni/config/fr.js +++ b/views/wikilerni/config/fr.js @@ -5,7 +5,6 @@ module.exports = [ { anchor: "Contact", attributes: { href:"/contact.html", rel: "nofollow" } }, { anchor: "Parcourir", attributes: { href:"/quizs/", id:"indexHeadLink", title:"Les dernières publications" } }, - { anchor: "Mon compte", attributes: { href:"/connexion.html", id: "accountHeadLink", title:"Accéder ou créez votre compte WikiLerni" } }, { anchor: "À propos", attributes: { href:"/a-propos.html", title:"En savoir + sur WikiLerni" } }, { anchor: "Accueil", attributes: { href:"/", title:"Page d'accueil" } } ], @@ -42,7 +41,7 @@ module.exports = /* Page d'accueil */ homePageTxt: "Page d'accueil", homeTitle1: "De nature curieuse ?", - homeP1: "Avec WikiLerni, vous apprenez régulièrement de nouvelles choses.
Vous recevez de courts articles, lisibles en quelques minutes.
Des quizs vous permettent ensuite de tester ce que vous avez retenu.
De jour en jour de nouvelles graines de culture sont ainsi semées dans votre jardin.", + homeP1: "Avec WikiLerni, vous apprenez régulièrement de nouvelles choses.
Vous découvrez de courts articles, lisibles en quelques minutes.
Des quizs vous permettent ensuite de tester ce que vous avez retenu.
De jour en jour de nouvelles graines de culture sont ainsi semées dans votre jardin.", homeTitle2: "La culture générale en liberté", homeP2: "Pas de faits alternatifs, tous les contenus sont sourcés par des articles Wikipédia.
Et tout comme sur Wikipédia, le logiciel et le contenu publié sur WikiLerni sont partagés sous licences libres.
Le tout sans publicité, ni commercialisation de vos données.
Sur WikiLerni, vous cultivez votre jardin en toute tranquillité.", homeBtnAboutTxt: "En savoir plus sur WikiLerni ?", @@ -51,7 +50,7 @@ module.exports = /* Page dernières publications... */ newQuestionnairesTitle: "Culture générale - apprenez de nouvelles choses avec WikiLerni", newQuestionnairesIntro: "WikiLerni : testez vos connaissances et apprenez de nouvelles choses avec WikiLerni.", - newsListTitle: "

Avec WikiLerni, vous apprenez chaque jour quelque chose de nouveau
Si dessous les dernières publications. Vous pouvez aussi parcourir le site par thèmes ou mots-clés.

", + newsListTitle: "

Avec WikiLerni, vous pouvez toujours apprendre quelque chose de nouveau
Si dessous les dernières publications. Vous pouvez aussi parcourir le site par thèmes ou mots-clés.

", /* Plan du site, liste des tags */ tagListTitle: "Culture générale - des articles et quizs sur de nombreux thèmes !", tagListMetaDesc: "WikiLerni : découvrir les différents thèmes abordés par WikiLerni. Inxex du site.", @@ -62,11 +61,12 @@ module.exports = quizElementSubcriptionFormTitle: "Recevez les prochains articles WikiLerni", explanationTitle: "Vous découvrez WikiLerni ?", explanationTxt: "

Le principe est simple : vous commencez par lire l’article Wikipédia dont le lien vous est proposé. Puis vous afficher le quiz pour vérifier ce que vous avez retenu de votre lecture. Suivant les questions, une ou plusieurs réponses peuvent être correctes et doivent donc être cochées. C’est toujours le contenu de l’article Wikipédia qui fait foi concernant les « bonnes » réponses. C’est une façon de tester à la fois votre capacité d’attention et votre mémoire. Les articles de Wikipédia peuvent évoluer, donc n’hésitez pas à me signaler une erreur.

WikiLerni vous propose d’autres solutions pour améliorer votre culture générale. Pour en savoir plus, cliquez sur le bouton ci-dessous.

", - explanationElementTxt: "

WikiLerni vous propose de recevoir par e-mail à la fréquence choisie, de courts articles lisibles en quelques minutes et portant sur des sujets très variés de culture générale (arts, histoire, littérature, sciences, etc.).

Ces articles sont basés sur une ou plusieurs pages de Wikipédia (fournies en lien), dont ils extraient certaines informations.

Chaque série d’articles est suivie d’un quiz permettant de tester ce que vous en avez retenu.

Vous apprenez ainsi régulièrement de nouvelles choses très simplement.

", + explanationElementTxt: "

WikiLerni vous propose de découvrir de courts articles lisibles en quelques minutes et portant sur des sujets très variés de culture générale (arts, histoire, littérature, sciences, etc.).

Ces articles sont basés sur une ou plusieurs pages de Wikipédia (fournies en lien), dont ils extraient certaines informations.

Chaque série d’articles est suivie d’un quiz permettant de tester ce que vous en avez retenu.

Vous apprenez ainsi régulièrement de nouvelles choses très simplement.

", /* Autres */ illustrationDir : "/img/quizs/", twitterAccount: "WikiLerni", maxQuestionnairesByPage: 12, + maxQuestionnairesFeed: 5, maxQuestionnairesSiteHomePage: 3, nbQuestionnairesUserHomePage : 3, }; \ No newline at end of file diff --git a/views/wikilerni/home.pug b/views/wikilerni/home.pug index c65ea27..8650c45 100644 --- a/views/wikilerni/home.pug +++ b/views/wikilerni/home.pug @@ -2,45 +2,15 @@ extends layout.pug block append scripts script(src="/JS/polyfill.app.js" defer) - script(src="/JS/subscribe.app.js" defer) - block content - div(id="home" class="cardboard") p img(id="logo" src="/themes/wikilerni/img/wikilerni-purple-2-512.png" alt="Logo WikiLerni") h2(class="cardboard") #{config.siteName+" - "+configTpl.siteSlogan} - div(class="engraved framed") h3 #{configTpl.homeTitle1} p !{configTpl.homeP1} h3 #{configTpl.homeTitle2} p !{configTpl.homeP2} - //p - // a(href="/"+configTpl.aboutPage class="button cardboard" title=configTpl.homeBtnAboutTxt) #{configTpl.homeBtnAboutTxt} - - div(class="engraved framed") - // Formulaire d'inscription : - noscript - div - strong #{configTpl.noJSNotification} - - const cguOkLabel = txtUser.formsCGUOkLabel.replace("#link", "/"+configTpl.cguPage); - form(id="subscription" method="POST" class="needJS") - h3 #{configTpl.homeSubcriptionFormTitle} - fieldset - label(for="email") #{txtUser.formsEmailLabel} - input(id="email" type="email" name="email" placeholder=txtUser.formsEmailPlaceholder class="cardboard") - input(id="email2" type="email" name="email2" placeholder=txtUser.formsEmail2Placeholder class="needJS") - div#emailMessage - ul(class="checkbox_li") - li(class="checkbox_li") - label(for="cguOk" class="check") - input(type="checkbox" id="cguOk" name="cguOk" value="true") - div(class="checkbox_override") - span !{cguOkLabel} - div(class="input_wrapper") - input(id="submitDatas" type="submit" value=txtUser.formsSubmitTxt class="cardboard") - div(id="response") - - nbQuestionnairesList=configTpl.maxQuestionnairesSiteHomePage; include includes/listing-questionnaires.pug \ No newline at end of file diff --git a/views/wikilerni/includes/listing-questionnaires.pug b/views/wikilerni/includes/listing-questionnaires.pug index 878afd5..0c7450c 100644 --- a/views/wikilerni/includes/listing-questionnaires.pug +++ b/views/wikilerni/includes/listing-questionnaires.pug @@ -1,4 +1,3 @@ -//- boucles listant des questionnaires, utilisées pour différentes pages div(id="triple-column") - // je commence par répartir les éléments entre les 3 colonnes @@ -8,7 +7,6 @@ div(id="triple-column") nbMaxQuestionnairesCol=questionnaires.length; else nbMaxQuestionnairesCol=nbQuestionnairesList; - for(let i in questionnaires) { if(tot < nbQuestionnairesList) @@ -36,11 +34,10 @@ div(id="triple-column") if(tool.isEmpty(questionnaire.Illustrations[0].title)===false) imgAttributes.title=questionnaire.Illustrations[0].title; let introduction=tool.shortenIfLongerThan(striptags(questionnaire.Questionnaire.introduction.replace("
", " ").replace("

", " ")), 200); - + div(class="quiz cardboard" style="transform: rotate("+rotation+"deg);") h3 - a(href="/quiz/"+questionnaire.Questionnaire.slug+".html") #{questionnaire.Questionnaire.title} - + a(href="/quiz/"+questionnaire.Questionnaire.slug+".html") #{questionnaire.Questionnaire.title} div(class="quiz-image-wrapper" style="background-image: url('/img/quizs/"+questionnaire.Illustrations[0].url+"')") a(href="/quiz/"+questionnaire.Questionnaire.slug+".html") img(src="/img/quizs/"+questionnaire.Illustrations[0].url)&attributes(imgAttributes) diff --git a/views/wikilerni/layout.pug b/views/wikilerni/layout.pug index 59d29ac..d1d44ee 100644 --- a/views/wikilerni/layout.pug +++ b/views/wikilerni/layout.pug @@ -13,8 +13,7 @@ html(lang=(pageLang) ? pageLang : config.adminLang) title #{pageTitle} else title #{config.siteName} - base(href=config.siteUrl) - // Version lisible des scripts : https://gitlab.com/lefablab/wikilerni/-/tree/master/front/src + // Version lisible des scripts : https://forge.chapril.org/Fab_Blab/WikiLerni/src/branch/master/front/src block scripts link(rel="stylesheet" href="/themes/wikilerni/css/style.css") block css @@ -22,12 +21,10 @@ html(lang=(pageLang) ? pageLang : config.adminLang) link(rel="apple-touch-icon" sizes="57x57" href="/img/apple-icon-57x57.png") link(rel="icon" type="image/png" sizes="192x192" href="/img/android-icon-192x192.png") link(rel="icon" type="image/png" sizes="32x32" href="/img/favicon-32x32.png") + link(rel="alternate" type="application/atom+xml" title=config.siteName href="/atom.xml") if(linkCanonical) link(rel="canonical" href=linkCanonical) - - body(class="cardboard") - header(class="cardboard") a(href="/" title=configTpl.homePageTxt) img(src="/themes/wikilerni/img/wikilerni-purple-2-128.png" alt=config.siteName+" (logo)") @@ -36,9 +33,7 @@ html(lang=(pageLang) ? pageLang : config.adminLang) for item in configTpl.headLinks li a(href="/"+item.url)&attributes(item.attributes) #{item.anchor} - block content - - const nbItemFoot = configTpl.footLinks.length; footer(class="cardboard") ul(id="footLinks") diff --git a/views/wikilerni/newQuestionnaires.pug b/views/wikilerni/newQuestionnaires.pug index ceb437f..33bb088 100644 --- a/views/wikilerni/newQuestionnaires.pug +++ b/views/wikilerni/newQuestionnaires.pug @@ -1,18 +1,14 @@ extends layout.pug - block append scripts script(src="/JS/polyfill.app.js" defer) - script(src="/JS/index.app.js" defer) - + script(src="/JS/index.app.js" defer) block content - div(id="prompt" class="cardboard") p img(id="logo" src="/themes/wikilerni/img/wikilerni-purple-2-512.png" alt="Logo WikiLerni") h2(class="cardboard") #{config.siteName+" - "+configTpl.siteSlogan} div#listsIntro !{configTpl.newsListTitle} - p - a(href="/"+configTpl.subscribePage class="button cardboard" title=configTpl.homeBtnSubscribeTxt) #{configTpl.homeBtnSubscribeTxt} - + // p + // a(href="/"+configTpl.subscribePage class="button cardboard" title=configTpl.homeBtnSubscribeTxt) #{configTpl.homeBtnSubscribeTxt} - nbQuestionnairesList=configTpl.maxQuestionnairesByPage; include includes/listing-questionnaires.pug \ No newline at end of file diff --git a/views/wikilerni/quiz-element.pug b/views/wikilerni/quiz-element.pug index 7bf620d..746e39f 100644 --- a/views/wikilerni/quiz-element.pug +++ b/views/wikilerni/quiz-element.pug @@ -1,11 +1,8 @@ extends layout.pug - block append scripts script(src="/JS/polyfill.app.js" defer) - script(src="/JS/groupElement.app.js" defer) - + script(src="/JS/groupElement.app.js" defer) block content - div(id="tags" class="cardboard") ul li @@ -13,7 +10,6 @@ block content for tag in questionnaire.Tags li a(href="/quizs/"+tag.slug+".html") #{tag.name} - - const imgAttributes = { alt: txtIllustration.defaultAlt, style: "opacity: 0.0;" }; if(questionnaire.Illustrations!=undefined && questionnaire.Illustrations.length!==0) @@ -25,15 +21,12 @@ block content } const publishedAtTxt=tool.dateFormat(questionnaire.Questionnaire.publishingAt, questionnaire.Questionnaire.language); const updatedAtTxt=tool.dateFormat(questionnaire.Questionnaire.updatedAt, questionnaire.Questionnaire.language); - if(questionnaire.Illustrations != undefined && questionnaire.Illustrations.length !== 0) div(id="content-picture" class="cardboard") div(style="background-image: url('/img/quizs/"+questionnaire.Illustrations[0].url+"');") img(src="/img/quizs/"+questionnaire.Illustrations[0].url)&attributes(imgAttributes) - //- Important : ici, on garde volontairement le html saisi car lien possible vers auteur de l'illustration : if(questionnaire.Illustrations[0].caption) p !{questionnaire.Illustrations[0].caption} - div(id="content-side") div(id="content-title") h1(class="cardboard") @@ -43,15 +36,10 @@ block content a(href="/img/quizs/"+questionnaire.Illustrations[0].url target="_blank" rel="noopener") img(src="/img/quizs/min/"+questionnaire.Illustrations[0].url class="thumb")&attributes(imgAttributes) div(id="content-title-corner") - div(id="content" class="cardboard") p(id="author-date") #{txtQuestionnaire.publishedBy} #{author}#{txtQuestionnaire.publishedAt} #{publishedAtTxt}. #{txtQuestionnaire.lastUpdated}#{updatedAtTxt}. - - //- Important : ici, on garde volontairement le html ! if(questionnaire.Questionnaire.introduction) div#introduction !{questionnaire.Questionnaire.introduction} - - //- Les sources de l'article if(questionnaire.Links != undefined && questionnaire.Links.length !== 0) div#quizElementLinks h4 #{configTpl.quizElementLinksIntro} @@ -59,8 +47,6 @@ block content for link in questionnaire.Links li a(href=link.url target="_blank" rel="noopener" title=link.anchor+" ("+txtGeneral.alertNewWindow+")") #{link.anchor} - - // Lien vers l'élément suivant ou le quiz du groupe, si je suis arrivé à la fin : - let nextLink={}; if(nextQuestionnaire != null && nextQuestionnaire.Questionnaire.isPublished) @@ -81,33 +67,8 @@ block content a(href=nextLink.href title=nextLink.title) #{nextLink.title} div#nextLink a(href=nextLink.href class="button cardboard" title=nextLink.title) !{"➔ "+nextLink.anchor} - - // Formulaire d'inscription : - noscript - div - strong #{configTpl.noJSNotification} - - const cguOkLabel = txtUser.formsCGUOkLabel.replace("#link", "/"+configTpl.cguPage); - div#quizElementSignupForm - form(id="subscription" method="POST" class="needJS") - h3 #{configTpl.quizElementSubcriptionFormTitle} - fieldset - label(for="email") #{txtUser.formsEmailLabel} - input(id="email" type="email" name="email" placeholder=txtUser.formsEmailPlaceholder class="cardboard") - input(id="email2" type="email" name="email2" placeholder=txtUser.formsEmail2Placeholder class="needJS") - div#emailMessage - ul(class="checkbox_li") - li(class="checkbox_li") - label(for="cguOk" class="check") - input(type="checkbox" id="cguOk" name="cguOk" value="true") - div(class="checkbox_override") - span !{cguOkLabel} - div(class="input_wrapper") - input(id="submitDatas" type="submit" value=txtUser.formsSubmitTxt class="cardboard") - div(id="response") - div#licence - p !{configTpl.licenceTxt} - + p !{configTpl.licenceTxt} div#zerozozio a(href="mailto:?to=&subject="+questionnaire.Questionnaire.title+"&body="+txtQuestionnaire.btnShareQuizMailBody+linkCanonical rel="nofollow noopener" title=txtQuestionnaire.btnShareQuizTxt+"e-mail* ("+txtGeneral.alertNewWindow+")" target="_blank") img(src="/themes/wikilerni/img/email.png" alt=txtQuestionnaire.btnShareQuizTxt+"mail") @@ -118,8 +79,7 @@ block content a(href="https://www.linkedin.com/shareArticle?mini=true&url="+linkCanonical+";title="+questionnaire.Questionnaire.title rel="nofollow noopener" title=txtQuestionnaire.btnShareQuizTxt+"LinkedIn ("+txtGeneral.alertNewWindow+")" target="_blank") img(src="/themes/wikilerni/img/linkedin.png" alt=txtQuestionnaire.btnShareQuizTxt+"LinkedIn") a(href="https://twitter.com/intent/tweet?url="+linkCanonical+"&text="+questionnaire.Questionnaire.title+" via @"+configTpl.twitterAccount rel="nofollow noopener" title=txtQuestionnaire.btnShareQuizTxt+"twitter ("+txtGeneral.alertNewWindow+")" target="_blank") - img(src="/themes/wikilerni/img/twitter.png" alt=txtQuestionnaire.btnShareQuizTxt+"twitter") - + img(src="/themes/wikilerni/img/twitter.png" alt=txtQuestionnaire.btnShareQuizTxt+"twitter") div#explanations(class="engraved framed") h3#explanationsTitle #{configTpl.explanationTitle} div#explanationsContent diff --git a/views/wikilerni/quiz-group.pug b/views/wikilerni/quiz-group.pug index 9c5a015..8ef0666 100644 --- a/views/wikilerni/quiz-group.pug +++ b/views/wikilerni/quiz-group.pug @@ -1,12 +1,8 @@ extends layout.pug - block append scripts script(src="/JS/polyfill.app.js" defer) - script(src="/JS/group.app.js" defer) - + script(src="/JS/group.app.js" defer) block content - - // Il n'y a pas d'illustration spécifique au groupe, donc on reprend celle du premier élément du groupe de quizs - if(group.Questionnaires.length !==0) { @@ -26,10 +22,8 @@ block content div(id="content-picture" class="cardboard") div(style="background-image: url('/img/quizs/"+group.Questionnaires[0].Illustrations[0].url+"');") img(src="/img/quizs/"+group.Questionnaires[0].Illustrations[0].url)&attributes(imgAttributes) - //- Important : ici, on garde volontairement le html saisi car lien possible vers auteur de l'illustration : if(group.Questionnaires[0].Illustrations[0].caption) p !{group.Questionnaires[0].Illustrations[0].caption} - div(id="content-side") div(id="content-title") h1(class="cardboard") @@ -39,27 +33,22 @@ block content a(href="/img/quizs/"+group.Questionnaires[0].Illustrations[0].url target="_blank" rel="noopener") img(src="/img/quizs/min/"+group.Questionnaires[0].Illustrations[0].url class="thumb")&attributes(imgAttributes) div(id="content-title-corner") - div(id="content" class="cardboard") p(id="author-date") #{txtGroups.publishedBy} #{author} #{txtGroups.publishedAt} #{publishedAtTxt}. #{txtGroups.lastUpdated} #{updatedAtTxt}. - //- Important : ici, on garde volontairement le html, car cela est accepté pour l'introduction. div#introduction if(group.Group.introduction) div !{group.Group.introduction} - - // Formulaire du quiz noscript div strong #{configTpl.noJSNotification} - form(id="group" method="POST") h2 #{group.Group.title} div#response - div(class="subscribeBtns") - p - a(class="button cardboard" href=configTpl.subscribePage) #{txtGeneral.btnProposeSubscribe} - p - a(class="button cardboard" href=configTpl.connectionPage) #{txtGeneral.btnProposeConnection} + // div(class="subscribeBtns") + // p + // a(class="button cardboard" href=configTpl.subscribePage) #{txtGeneral.btnProposeSubscribe} + // p + // a(class="button cardboard" href=configTpl.connectionPage) #{txtGeneral.btnProposeConnection} for questionnaire in group.Questionnaires for question in questionnaire.Questions p(id="question_"+question.Question.id) #{question.Question.text} @@ -81,14 +70,11 @@ block content input(type="hidden" name="isCorrect_response_"+response.id id="isCorrect_response_"+response.id value=""+response.isCorrect) input(type="hidden" name="question_id_response_"+response.id id="question_id_response_"+response.id value=question.Question.id) input(name="groupId" id="groupId" value=group.Group.id type="hidden") - // Bouton submit caché si pas de JS, car nécessaire au traitement de la réponse p span(class="input_wrapper") input(id="checkResponses" type="submit" value=txtGroups.btnSendResponse class="cardboard needJS" title=txtGroups.btnSendResponse) - div#licence p !{configTpl.licenceTxt} - div#zerozozio a(href="mailto:?to=&subject="+group.Group.title+"&body="+txtQuestionnaire.btnShareQuizMailBody+linkCanonical rel="nofollow noopener" title=txtQuestionnaire.btnShareQuizTxt+"e-mail* ("+txtGeneral.alertNewWindow+")" target="_blank") img(src="/themes/wikilerni/img/email.png" alt=txtQuestionnaire.btnShareQuizTxt+"mail") @@ -100,13 +86,10 @@ block content img(src="/themes/wikilerni/img/linkedin.png" alt=txtQuestionnaire.btnShareQuizTxt+"LinkedIn") a(href="https://twitter.com/intent/tweet?url="+linkCanonical+"&text="+group.Group.title+" via @"+configTpl.twitterAccount rel="nofollow noopener" title=txtQuestionnaire.btnShareQuizTxt+"twitter ("+txtGeneral.alertNewWindow+")" target="_blank") img(src="/themes/wikilerni/img/twitter.png" alt=txtQuestionnaire.btnShareQuizTxt+"twitter") - div#explanations(class="engraved framed") h3#explanationsTitle #{configTpl.explanationTitle} p.info !{txtGroups.commonIntroTxt} - // - lien vers premier élément du groupe (html autorisé pour permettre les symboles unicodes) div#explanationsContent - if(group.Questionnaires.length !==0) div#links a(href="/"+configQuestionnaires.dirWebQuestionnaires+"/"+group.Questionnaires[0].Questionnaire.slug+".html" class="button cardboard" title=group.Questionnaires[0].Questionnaire.title) !{"← "+txtGroups.linkFirstElementGroup} \ No newline at end of file diff --git a/views/wikilerni/quiz.pug b/views/wikilerni/quiz.pug index 770ae77..363d8e4 100644 --- a/views/wikilerni/quiz.pug +++ b/views/wikilerni/quiz.pug @@ -1,11 +1,8 @@ extends layout.pug - block append scripts script(src="/JS/polyfill.app.js" defer) script(src="/JS/questionnaire.app.js" defer) - block content - div(id="tags" class="cardboard") ul li @@ -13,7 +10,6 @@ block content for tag in questionnaire.Tags li a(href="/quizs/"+tag.slug+".html") #{tag.name} - - const imgAttributes = { alt: txtIllustration.defaultAlt, style: "opacity: 0.0;" }; if(questionnaire.Illustrations!=undefined && questionnaire.Illustrations.length!==0) @@ -25,15 +21,13 @@ block content } const publishedAtTxt=tool.dateFormat(questionnaire.Questionnaire.publishingAt, questionnaire.Questionnaire.language); const updatedAtTxt=tool.dateFormat(questionnaire.Questionnaire.updatedAt, questionnaire.Questionnaire.language); - + if(questionnaire.Illustrations!=undefined && questionnaire.Illustrations.length!==0) div(id="content-picture" class="cardboard") div(style="background-image: url('/img/quizs/"+questionnaire.Illustrations[0].url+"');") img(src="/img/quizs/"+questionnaire.Illustrations[0].url)&attributes(imgAttributes) - //- Important : ici, on garde volontairement le html saisi car lien possible vers auteur de l'illustration : if(questionnaire.Illustrations[0].caption) p !{questionnaire.Illustrations[0].caption} - div(id="content-side") div(id="content-top-decoration" class="cardboard") #{txtQuestionnaire.estimatedTime} #{txtQuestionnaire.estimatedTimeOption[questionnaire.Questionnaire.estimatedTime]}. div(id="content-title") @@ -46,10 +40,8 @@ block content div(id="content-title-corner") div(id="content" class="cardboard") p(id="author-date") #{txtQuestionnaire.publishedBy} #{author}#{txtQuestionnaire.publishedAt} #{publishedAtTxt}. #{txtQuestionnaire.lastUpdated}#{updatedAtTxt}. - //- Important : ici, on garde volontairement le html, car cela est accepté pour l'introduction if(questionnaire.Questionnaire.introduction) div#introduction !{questionnaire.Questionnaire.introduction} - div#links for link in questionnaire.Links p @@ -57,19 +49,12 @@ block content div#show p a(class="button cardboard" href="#questionnaire" id="showQuestionnaire" title=txtQuestionnaire.btnShowQuestionnaire) #{txtQuestionnaire.btnShowQuestionnaire} - noscript div strong #{configTpl.noJSNotification} - form(id="questionnaire" method="POST" class="needJS") h2 #{questionnaire.Questionnaire.title} div#response - div(class="subscribeBtns") - p - a(class="button cardboard" href=configTpl.subscribePage) #{txtQuestionnaire.btnProposeSubscribe} - p - a(class="button cardboard" href=configTpl.connectionPage) #{txtQuestionnaire.btnProposeConnection} for question in questionnaire.Questions p(id="question_"+question.Question.id) #{question.Question.text} if(question.Question.explanation) @@ -91,10 +76,8 @@ block content p span(class="input_wrapper") input(id="checkResponses" type="submit" value=txtQuestionnaire.btnSendResponse class="cardboard" title=txtQuestionnaire.btnSendResponse) - div#licence p !{configTpl.licenceTxt} - div#zerozozio a(href="mailto:?to=&subject="+questionnaire.Questionnaire.title+"&body="+txtQuestionnaire.btnShareQuizMailBody+linkCanonical rel="nofollow noopener" title=txtQuestionnaire.btnShareQuizTxt+"e-mail* ("+txtGeneral.alertNewWindow+")" target="_blank") img(src="/themes/wikilerni/img/email.png" alt=txtQuestionnaire.btnShareQuizTxt+"mail") @@ -105,8 +88,7 @@ block content a(href="https://www.linkedin.com/shareArticle?mini=true&url="+linkCanonical+";title="+questionnaire.Questionnaire.title rel="nofollow noopener" title=txtQuestionnaire.btnShareQuizTxt+"LinkedIn ("+txtGeneral.alertNewWindow+")" target="_blank") img(src="/themes/wikilerni/img/linkedin.png" alt=txtQuestionnaire.btnShareQuizTxt+"LinkedIn") a(href="https://twitter.com/intent/tweet?url="+linkCanonical+"&text="+questionnaire.Questionnaire.title+" via @"+configTpl.twitterAccount rel="nofollow noopener" title=txtQuestionnaire.btnShareQuizTxt+"twitter ("+txtGeneral.alertNewWindow+")" target="_blank") - img(src="/themes/wikilerni/img/twitter.png" alt=txtQuestionnaire.btnShareQuizTxt+"twitter") - + img(src="/themes/wikilerni/img/twitter.png" alt=txtQuestionnaire.btnShareQuizTxt+"twitter") div#explanations(class="engraved framed") h3#explanationsTitle #{configTpl.explanationTitle} div#explanationsContent diff --git a/views/wikilerni/tag.pug b/views/wikilerni/tag.pug index 9dc9f2c..2b82e30 100644 --- a/views/wikilerni/tag.pug +++ b/views/wikilerni/tag.pug @@ -1,20 +1,15 @@ extends layout.pug - block append scripts script(src="/JS/polyfill.app.js" defer) script(src="/JS/index.app.js" defer) - block content - div(id="prompt" class="cardboard") p img(id="logo" src="/themes/wikilerni/img/wikilerni-purple-2-512.png" alt="Logo WikiLerni") h2(class="cardboard") #{config.siteName+" - "+configTpl.siteSlogan} p #{txtTag.tagMetaDescription+tagInfos.name} - - nbQuestionnairesList=configTpl.maxQuestionnairesByPage; include includes/listing-questionnaires.pug - nav#pagination div if(page!==1 && page!==2) diff --git a/views/wikilerni/tagsList.pug b/views/wikilerni/tagsList.pug index a463015..4f97270 100644 --- a/views/wikilerni/tagsList.pug +++ b/views/wikilerni/tagsList.pug @@ -1,17 +1,13 @@ extends layout.pug - block append scripts script(src="/JS/polyfill.app.js" defer) - script(src="/JS/index.app.js" defer) - + script(src="/JS/index.app.js" defer) block content - div(id="prompt" class="cardboard") p img(id="logo" src="/themes/wikilerni/img/wikilerni-purple-2-512.png" alt="Logo WikiLerni") h2(class="cardboard") #{config.siteName+" - "+configTpl.siteSlogan} div#listsIntro !{configTpl.tagListIntro} - nav(id="tagsList") for tag in tags div