diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 00000000..13566b81 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/db-course-theme1.iml b/.idea/db-course-theme1.iml new file mode 100644 index 00000000..d6ebd480 --- /dev/null +++ b/.idea/db-course-theme1.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 00000000..47478b91 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 00000000..5d412a89 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..35eb1ddf --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index 12b64ef4..e3ce2157 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -1,113 +1,122 @@ // .vuepress/config.js module.exports = { - plugins: [ - '@vuepress/back-to-top', - '@vuepress/pwa', - { - serviceWorker: true, - updatePopup: true - }, - , - ['container', { - type: 'vue', - before: '
',
-      after: '
' - }] - ], - port: 3030, - base: '/docs/', - theme: 'cool', - // dest: 'dist', - head: [ - ['link', { rel: 'icon', href: '/favicon.ico' }], - ['link', { rel: 'stylesheet', href: 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.5.1/katex.min.css' }], - ['link', {href: 'https://fonts.googleapis.com/icon?family=Material+Icons', rel :'stylesheet'}], - - ], - themeConfig: { - // logo: './myAvatar.png', - sidebar: [ - - { - title: 'Вступ', - path:"/intro/" - }, + plugins: [ + '@vuepress/back-to-top', + '@vuepress/pwa', + { + serviceWorker: true, + updatePopup: true + }, + , + ['container', { + type: 'vue', + before: '
',
+            after: '
' + }] + ], + port: 3030, + // base: 'edu_db_labs_group1', + theme: 'cool', + // dest: 'dist', + head: [ + ['link', {rel: 'icon', href: '/favicon.ico'}], + ['link', {rel: 'stylesheet', href: 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.5.1/katex.min.css'}], + ['link', {href: 'https://fonts.googleapis.com/icon?family=Material+Icons', rel: 'stylesheet'}], - { - title: 'Розроблення вимог до системи', - path:"/requirements/", - }, + ], + themeConfig: { + // logo: './myAvatar.png', + sidebar: [ - { - title: 'Проєктування архітектури системи', - path:"/design/" - }, + { + title: 'Вступ', + path: "/intro/" + }, - { - title: 'Реалізація інформаційного та програмного забезпечення', - path:"/software/" - }, + { + title: 'Розроблення вимог до системи', + path: "/requirements/", + children: [ + '/requirements/state-of-the-art', + '/requirements/stakeholders-needs', + ] + }, - { - title: 'Тестування працездатності системи', - path:"/test/" - }, - - { - title: 'Висновки', - path:"/conclusion/" - }, - - { - title: 'API', - path:"/api/" - } + { + title: 'Розроблення вимог до функціональности системи', + path:"/use cases/" + }, - ], - sidebarDepth: 2, - displayAllHeaders: true, // Default: false + { + title: 'Проєктування архітектури системи', + path: "/design/" + }, + { + title: 'Реалізація інформаційного та програмного забезпечення', + path: "/software/" + }, - nav: [ - { text: 'Початок', link: '/' }, - ], + { + title: 'Тестування працездатності системи', + path: "/test/" + }, - lastUpdated: 'Останнє оновлення', // string | boolean - // Assumes GitHub. Can also be a full GitLab url. - repo: 'https://github.com/boldak/edu-dis-labs', - // Customising the header label - // Defaults to "GitHub"/"GitLab"/"Bitbucket" depending on `themeConfig.repo` - repoLabel: 'Github', - - // Optional options for generating "Edit this page" link - - // if your docs are in a different repo from your main project: - // docsRepo: 'boldak/dis-edu', - // if your docs are not at the root of the repo: - docsDir: 'docs', - // if your docs are in a specific branch (defaults to 'master'): - docsBranch: 'master', - // defaults to false, set to true to enable - // editLinks: true, - // custom text for edit link. Defaults to "Edit this page" - // editLinkText: 'Ви можете покращити цю сторінку' - - }, - title: 'Назва проєкту', - description: 'Лабораторні роботи з дисципліни "Розподілені інформаційні системи"', - configureWebpack: { - resolve: { - alias: { - '@alias': '../img' - } - } - }, - markdown: { - extendMarkdown: md => { - md.set({ html: true }) - md.use(require('markdown-it-katex')) - md.use(require('markdown-it-plantuml')) - md.use(require('markdown-it-admonition')) + { + title: 'Висновки', + path: "/conclusion/" + }, + + { + title: 'API', + path: "/api/" + } + + ], + sidebarDepth: 2, + displayAllHeaders: true, // Default: false + + + nav: [ + {text: 'Початок', link: '/'}, + ], + + lastUpdated: 'Останнє оновлення', // string | boolean + // Assumes GitHub. Can also be a full GitLab url. + repo: 'https://github.com/Oksuzova/db-course-theme1', + // Customising the header label + // Defaults to "GitHub"/"GitLab"/"Bitbucket" depending on `themeConfig.repo` + repoLabel: 'Github', + + // Optional options for generating "Edit this page" link + + // if your docs are in a different repo from your main project: + // docsRepo: 'boldak/dis-edu', + // if your docs are not at the root of the repo: + docsDir: 'docs', + // if your docs are in a specific branch (defaults to 'master'): + docsBranch: 'master', + // defaults to false, set to true to enable + // editLinks: true, + // custom text for edit link. Defaults to "Edit this page" + // editLinkText: 'Ви можете покращити цю сторінку' + + }, + title: '1.Система організації та управління опитуваннями експертів', + description: 'Лабораторні роботи з дисципліни "Розподілені інформаційні системи"', + configureWebpack: { + resolve: { + alias: { + '@alias': '../img' + } + } + }, + markdown: { + extendMarkdown: md => { + md.set({html: true}) + md.use(require('markdown-it-katex')) + md.use(require('markdown-it-plantuml')) + md.use(require('markdown-it-admonition')) + } } - } } \ No newline at end of file diff --git a/docs/README.md b/docs/README.md index 499febf7..2f63a0ad 100644 --- a/docs/README.md +++ b/docs/README.md @@ -3,17 +3,26 @@ home: true actionText: Розпочати → actionLink: /intro/ -footer: "ECL 2.0 Licensed | Copyright © [YYYY] [Your Name]" +footer: "ECL 2.0 Licensed | Copyright © [2024] [Tanya Oks]" --- **Виконали:** -*студенти [X]-го курсу, групи (шифр групи)* +*студентка 2-го курсу, групи ІО-з21)* + **Оксюзова Тетяна** Telegram -**[ім’я ПРІЗВИЩЕ] [Посилання email, tg, fb]** +*студентка 2-го курсу, групи ІО-з21)* + **Морозова Єлізавета** Telegram -**[ім’я ПРІЗВИЩЕ] [Посилання email, tg, fb]** +*студент 2-го курсу, групи ІО-з21)* + **Булах Лєонід** Telegram + +*студент 2-го курсу, групи ІО-з21)* + **Батюк Богдан** Telegram + +*студент 2-го курсу, групи ІО-з21)* + **Османов Ізмаїл** Telegram **Керівник** diff --git a/docs/answers_for_lq/lab1.md b/docs/answers_for_lq/lab1.md new file mode 100644 index 00000000..55d62028 --- /dev/null +++ b/docs/answers_for_lq/lab1.md @@ -0,0 +1,30 @@ +# Відповіді на питання + +## Які категорії користувачів можуть приймати участь у проекті? +Категорії користувачів, що можуть приймати участь у проекті, залежать від специфіки проекту. Загалом, це можуть бути: +- Розробники +- Тестувальники +- Кінцеві користувачі +- Адміністратори системи +- Проектні менеджери +- Стейкхолдери + +## Етапи розробки баз даних +Етапи розробки баз даних зазвичай включають: +1. Збір вимог +2. Концептуальне проектування +3. Логічне проектування +4. Фізичне проектування +5. Імплементація +6. Тестування +7. Розгортання +8. Супровід і оновлення + +## Що означає "концептуальна модель"? +Концептуальна модель у контексті баз даних — це високорівнева структурна модель, що використовується для організації інформації та деталізації бізнес-правил. Вона узагальнює і представляє дані незалежно від того, як вони будуть збережені фізично. + +## Де визначаються ситуації, що не входять у список передумов? +Ситуації, що не входять у список передумов, зазвичай визначаються у специфікації вимог або під час аналізу ризиків проекту. Це може включати в себе: +- Непередбачувані використання системи +- Можливі випадки відмови або помилки +- Ризики, пов'язані з безпекою та конфіденційністю diff --git a/docs/answers_for_lq/lab2.md b/docs/answers_for_lq/lab2.md new file mode 100644 index 00000000..f8da9108 --- /dev/null +++ b/docs/answers_for_lq/lab2.md @@ -0,0 +1,68 @@ +# Відповіді на питання + +## Які категорії користувачів можуть приймати участь у проекті? +Категорії користувачів, що можуть приймати участь у проекті, залежать від специфіки проекту. Загалом, це можуть бути: +- Розробники +- Тестувальники +- Кінцеві користувачі +- Адміністратори системи +- Проектні менеджери +- Стейкхолдери + +## Що представляє собою діаграма Use Case? +Діаграма Use Case є частиною UML (Unified Modeling Language) і використовується для ілюстрації функціональних вимог до системи. Вона показує, як різні користувачі (актори) взаємодіють із системою для досягнення певних цілей. + +## Етапи розробки баз даних +Етапи розробки баз даних зазвичай включають: +1. Збір вимог +2. Концептуальне проектування +3. Логічне проектування +4. Фізичне проектування +5. Реалізація +6. Тестування +7. Розгортання +8. Підтримка та обслуговування + +## Які види відношень застосовуються в UML? +У UML використовуються різні типи відношень, включаючи: +- Асоціації +- Наслідування +- Залежності +- Агрегація +- Композиція + +## Де ініціюється і закінчується процес взаємодії відповідно до сценарію прецедента? +Процес взаємодії зазвичай ініціюється коли актор звертається до системи з певною метою (початок Use Case) і закінчується коли ця мета досягнута або коли процес переривається (кінець Use Case). + +## Яке зображення має прецедент на діаграмі UML? +На діаграмі UML прецедент зображується у вигляді овалу з назвою в середині. + +## З яких частин складається специфікація Use Case? +Специфікація Use Case зазвичай включає: +- Назву +- Опис +- Передумови +- Основний сценарій взаємодії +- Розширення (альтернативні сценарії) +- Виключення (умови виходу або помилки) + +## Де визначаються ситуації, що не входять у список передумов? +Ситуації, які не входять у список передумов, зазвичай розглядаються у рамках аналізу вимог і ризиків проекту, де вони визначаються як потенційні ризики або виключення. + +## Які повноваження може мати Actor? +Actor (актор) може мати різні повноваження залежно від його ролі у системі, включаючи: +- Доступ до певних функцій системи +- Вплив на зміни в системі +- Виконання специфічних операцій або процесів + +## На основі чого відбувається виділення сутностей проекту? +Виділення сутностей проекту зазвичай відбувається на основі аналізу бізнес-процесів, вимог до системи та інформаційних потреб користувачів. + +## Яке призначення прецедентів? +Призначення прецедентів полягає у визначенні та документуванні функціональних вимог, які система має виконувати для досягнення бізнес-цілей користувачів або замовників. + +## Які стосунки можливі між актором і елементом Use Case? +Між актором і елементом Use Case можливі такі стосунки: +- Асоціація (актор взаємодіє з Use Case) +- Залежність (актор залежить від результатів Use Case) +- Розширення (актор може ініціювати додаткові сценарії Use Case) diff --git a/docs/answers_for_lq/lab3.md b/docs/answers_for_lq/lab3.md new file mode 100644 index 00000000..5129ad4c --- /dev/null +++ b/docs/answers_for_lq/lab3.md @@ -0,0 +1,63 @@ +# Відповіді на питання + +## 1. Що таке бізнес моделювання? +Бізнес моделювання — це процес абстрагування та структурування ключових аспектів бізнесу для аналізу, покращення, та візуалізації бізнес-процесів та взаємодій усередині компанії. + +## 2. Призначення бізнес моделювання? +Бізнес моделювання використовується для: +- Оптимізації бізнес-процесів +- Виявлення та усунення неефективностей +- Підтримки рішень щодо стратегічних змін у компанії + +## 3. Де використовується бізнес моделювання? +Бізнес моделювання використовується в багатьох сферах, включаючи: +- Управління процесами +- Стратегічне планування +- Розвиток нових продуктів +- Інформаційні технології для розробки систем + +## 4. Що таке бізнес-сутність? +Бізнес-сутність — це основний компонент бізнес-моделі, який представляє інформацію або об'єкт реального світу, що має значення для організації. + +## 5. Для чого використовується бізнес-сутність? +Бізнес-сутність використовується для: +- Структурування інформації в системах +- Управління даними +- Моделювання бізнес-процесів + +## 6. Як визначити бізнес-сутність? +Бізнес-сутність визначається через її атрибути та взаємодії з іншими сутностями. Часто для цього аналізуються бізнес-процеси та вимоги до інформаційних потреб. + +## 7. Які існують зв’язки між бізнес-сутностями? +Між бізнес-сутностями можуть бути такі зв’язки: +- Асоціації +- Агрегації +- Композиції +- Спадкування + +## 8. Що таке асоціативний зв’язок? Як він відображається? +Асоціативний зв’язок відображає взаємовідносини між двома сутностями, де одна сутність може асоціюватися з багатьма іншими. На діаграмах відображається лінією, що з'єднує сутності. + +## 9. Що таке зв’язок агрегація? Як він відображається? +Агрегація — це вид асоціації, що представляє відносини "ціле-частина". На діаграмах відображається лінією з порожньою ромбовидною фігурою на кінці, що вказує на "ціле". + +## 10. Що таке зв’язок композиція? Як він відображається? +Композиція — сильніший вид агрегації, де частини не можуть існувати без цілого. На діаграмах відображається лінією з заповненою ромбовидною фігурою на кінці. + +## 11. Що таке зв’язок спадкування? Як він відображається? +Зв’язок спадкування використовується для визначення ієрархічних відносин між сутностями, де одна сутність успадковує характеристики іншої. На діаграмах відображається як лінія зі стрілкою, що вказує на базову сутність. + +## 12. Що таке атрибути бізнес-сутності? +Атрибути бізнес-сутності — це характеристики або властивості, що визначають дані та можуть бути збережені та оброблені в рамках бізнес-моделі. + +## 13. Для чого існують атрибути бізнес-об’єктів? +Атрибути бізнес-об’єктів слугують для деталізації та структурування інформації, яка потрібна для обробки та управління бізнес-процесами. + +## 14. Що таке словник предметної області? +Словник предметної області — це документ або база даних, що містить описи всіх термінів та понять, що використовуються у певній області діяльності. + +## Для чого використовується словник предметної області? +Словник предметної області використовується для: +- Забезпечення узгодженості в термінології +- Полегшення спілкування та взаєморозуміння між учасниками проекту +- Навчання нових членів команди diff --git a/docs/design/README.md b/docs/design/README.md index 4d91190f..9affbde2 100644 --- a/docs/design/README.md +++ b/docs/design/README.md @@ -1,86 +1,159 @@ -# Проєктування системи +# Проєктування бази даних +## Модель бізнес-об'єктів -Вбудовування зображень діаграм здійснюється з використанням сервісу [plantuml.com](https://plantuml.com/). - -В markdown-файлі використовується опис діаграми - -```md - -
@startuml -participant Client +entity Role +entity Role.id +entity Role.name + +entity User +entity User.id +entity User.nickname +entity User.email +entity User.password +entity User.roleId + +entity Survey +entity Survey.id +entity Survey.name +entity Survey.startDate +entity Survey.endDate + +entity AssignedSurvey +entity AssignedSurvey.surveyId +entity AssignedSurvey.userId + +entity Question +entity Question.id +entity Question.description +entity Question.number +entity Question.survey + +entity Answer +entity Answer.id +entity Answer.option +entity Answer.questionId + +entity Statistic +entity Statistic.id +entity Statistic.surveyId + +Role.id --r-* Role +Role.name --r-* Role + +User.id --u-* User +User.nickname --u-* User +User.password --u-* User +User.email --u-* User +User.roleId --u-* User + +Survey.id --d-* Survey +Survey.name --d-* Survey +Survey.startDate --d-* Survey +Survey.endDate --d-* Survey + +AssignedSurvey.surveyId --d-* AssignedSurvey +AssignedSurvey.userId --d-* AssignedSurvey + +Question.id --d-* Question +Question.description --d-* Question +Question.number --d-* Question +Question.survey --d-* Question + +Answer.id --u-* Answer +Answer.option --u-* Answer +Answer.questionId --u-* Answer + +Statistic.id --u-* Statistic +Statistic.surveyId --u-* Statistic + +User "0,*" -l- "1" Role +Survey "0,*" -- "1" User +Survey "1" -l- "1,3" Question +Survey "1" -r- "0,*" AssignedSurvey +Question "1,3" -- "1" Answer +Survey "1" -- "1" Statistic -participant SR as "Service Registry" - -participant Service - -Service -> SR : register -SR -> SR -SR --> Service -... +@enduml -SR -> Service: heartbeat -SR <-- Service: health -... + -Client -> SR: find -Client <-- SR: service endpoint -Client -> Service: request -Client <-- Service: response +
+@startuml +entity Role { +id: INT +name: TEXT +} + +entity User { +id: INT +nickname: TEXT +email: TEXT +password: TEXT +roleId: INT +} + +entity Survey { +id: INT +name: TEXT +startDate: DATE +endDate: DATE +} + +entity AssignedSurvey { +surveyId: INT +userId: INT +} + +entity Question { +id: INT +description: TEXT +number: NUMBER +surveyId: INT +} + +entity Answer { +id: INT +option: TEXT +questionId: INT +} + +entity Statistic { +id: INT +surveyId: INT +} + +User "0," -d- "1" Role : roleId +User "0," -l- "1" AssignedSurvey : userId +Survey "1" -l- "1,3" Question : surveyId +Survey "1" -u- "0,*" AssignedSurvey : surveyId +Question "1,3" -- "1" Answer : questionId +Survey "1" -- "1" Statistic : surveyId @enduml -
-``` + -яка буде відображена наступним чином +## Реляційна схема -
-@startuml - - @startuml - -participant Client - -participant SR as "Service Registry" - -participant Service - -Service -> SR : register -SR -> SR -SR --> Service -... - -SR -> Service: heartbeat -SR <-- Service: health -... - -Client -> SR: find -Client <-- SR: service endpoint -Client -> Service: request -Client <-- Service: response - - - -@enduml - -
- - + + \ No newline at end of file diff --git a/docs/design/relational_schema.png b/docs/design/relational_schema.png new file mode 100644 index 00000000..650383d0 Binary files /dev/null and b/docs/design/relational_schema.png differ diff --git a/docs/requirements/README.md b/docs/requirements/README.md index b56ec92f..434a19f0 100644 --- a/docs/requirements/README.md +++ b/docs/requirements/README.md @@ -1,25 +1,4 @@ -# Розроблення вимог до системи +# Розроблення загальних вимог до системи -## Основні визначення - -*[Розділ містить визначення термінів та скорочень, які використовуються при аналізі предметної області.]* - -## Підходи та способи вирішення завдання - -*[Розділ містить опис підходів, моделей та способів вирішення завдання.]* - -## Порівняльна характеристика існуючих засобів вирішення завдання - -*[Розділ містить опис існуючих програм, інформаційних систем, сервісів, тощо, призначених для вирішення -завдання. Дається порівняльна характеристика властивостей FURPS:* -- *Functionality (функциональні вимоги)* -- *Usability (вимоги до зручності роботи)* -- *Reliability (вимоги до надійності)* -- *Performance (вимоги до продуктивності)* -- *Supportability (вимоги до підтримки)* - - *(у вигляді таблиці).]* - -## Висновки - -*[Робляться висновки щодо доцільності розробки нової або модифікації існуючої інформаційної системи, необхідності та способів інтеграції з системами(сервісами) третіх сторін, тощо.]* \ No newline at end of file +- [Аналіз предметної області](/requirements/state-of-the-art.md) +- [Запити зацікавлених осіб](/requirements/stakeholders-needs.md) \ No newline at end of file diff --git a/docs/requirements/stakeholders-needs.md b/docs/requirements/stakeholders-needs.md new file mode 100644 index 00000000..99d7395c --- /dev/null +++ b/docs/requirements/stakeholders-needs.md @@ -0,0 +1,275 @@ +# Запити зацікавлених осіб + +## Вступ + +Цей розділ містить інформацію для тих, хто зацікавлений у знайомстві з проєктом. +Тут задокументовано інформацію про цільову аудиторію продукту, визначення, пов'язані з розробкою якісного +ПЗ, [характеристику процесів опитування експертів](#характеристика-процесів-опитування), а також сформульовано вимоги +щодо: + +- [Функціональності](#функціональність) +- [Практичності](#практичність) +- [Надійності](#надійність) +- [Продуктивності](#продуктивність) +- [Експлуатаційної придатності](#експлуатаційна-придатність) + +## Мета + +Дослідження цільової аудиторії продукту, аналіз вимог та запитів від різних груп зацікавлених осіб, а також визначення +вимог до функціональності, практичності, надійності, продуктивності та зручності використання для створення сучасного і +зручного програмного забезпечення для керування проєктами. + +## Контекст + +У цьому документі описується загальний порядок роботи з комерційними та некомерційними проєктами на +основі [наведених нижче прикладів](#характеристика-ділових-процесів) і висвітлюються всі переваги нашого інструменту. + +## Основні визначення та скорочення + +[Метод опитування експертів](#Метод опитування експертів) - також відомий як метод експертних оцінок або метод Delphi, є +технікою збору інформації, яка передбачає залучення фахівців у певній галузі для отримання надійних прогнозів, оцінок +або рекомендацій. + +[ISO 9126](https://what.com.ua/iakist-programnogo-zabezpechen/4/) - є міжнародним стандартом для оцінки якості +продукту (ПЗ). Він розділений на чотири частини, в яких розглядаються наступні теми: + +- Зовнішні показники +- Внутрішні показники +- Модель якості +- Показники якості програмного забезпечення + +[FURPS](https://www.dstu.dp.ua/Portal/Data/3/19/3-19-kl26.pdf) - це абревіатура, яка характеризує: + +- функціональність (**F**unctionality) +- практичність (**U**sability) +- надійність (**R**eliability) +- продуктивність (**P**erformance) +- експлуатаційну придатність (**S**upportability) + + програмного забезпечення комп’ютерних систем і також використовується для визначення багатьох пов’язаних систем і + послуг. + +[UML (Unified Modeling Language)](https://uk.wikipedia.org/wiki/Unified_Modeling_Language) - невід'ємною частиною +уніфікованого процесу розробки програмного забезпечення. UML є мовою широкого профілю, це відкритий стандарт, що +використовує графічні позначення для створення абстрактної моделі системи, яка називається UML-моделлю. + +Інші визначення знаходяться [тут](/requirements/state-of-the-art.md). + +### Посилання + +1. [Зацікавлені сторони (особи)](https://uk.wikipedia.org/wiki/%D0%97%D0%B0%D1%86%D1%96%D0%BA%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D1%96_%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%B8) +2. [Бізнес-процеси](https://pidru4niki.com/1471121353661/ekonomika/analiz_biznes-protsesiv_pidpriyemstva) +3. [ISO 9126](https://what.com.ua/iakist-programnogo-zabezpechen/4/) +4. [FURPS](https://www.dstu.dp.ua/Portal/Data/3/19/3-19-kl26.pdf) +5. [UML (Unified Modeling Language)](https://uk.wikipedia.org/wiki/Unified_Modeling_Language) + +## Короткий зміст + +- [Характеристика процесів опитування](#характеристика-процесів-опитування) + - [Login the User](#Login) + - [Logout the User](#Logout_User) + - [Passing a Survey](#TakeSurvey) + - [Editing Answers](#EditAnswers) + - [Creating a Survey](#CreateSurvey) + - [Edit Survey](#EditSurvey) + - [Assign Survey](#AssignSurvey) + - [Unassign Survey From Expert](#UnassignSurveyFromExpert) + - [View Statistics](#ViewStatistics) + - [Filter By Name](#FilterByName) + - [Add Question](#AddQuestion) + - [Remove Question](#RemoveQuestion) + - [Remove Survey](#RemoveSurvey) + +## Характеристика процесів опитування + +Для ефективного управління процесом опитування, потрібно розуміти, як працює сама система +**_Зовнішнім фактором_**, тобто користувачем є: + +- **Експерт** - це особа, яка в нашому випадку проходить опитування. Таким чином відповідає на певні запитання + +**_Внутрішніми факторами_**, тобто управляючим є: + +- **Адміністратор** - це особа, яка може керувати опитуваннями та експертами. + +--- + +Для оптимального співробітництва між бізнес-акторами, бізнес-робітниками та системою складено наступні бізнес-сценарії: + +| ID: | **Login** | +|:----------------------|:---------------------------------------------------------------------------------------| +| **Назва** | Авторизувати користувача | +| **Учасники** | Система, користувач | +| **Передумови** | Користувач зареєстрований, користувач не увійшов в обліковий запис | +| **Результат** | Користувач увійшов в обліковий запис | +| **Виключні ситуації** | EX02.01 Облікового доступу користувача не існує
EX02.02 Користувач ввів хибні дані | + +| ID: | **Logout_User** | +|:----------------------|:----------------------------------------------------------------| +| **Назва** | Вийти з облікового запису | +| **Учасники** | Система, користувач | +| **Передумови** | Користувач зареєстрований, користувач увійшов в обліковий запис | +| **Результат** | Користувач вийшов з облікового запису | +| **Виключні ситуації** | Відсутні | + +| ID: | **TakeSurvey** | +|:----------------------|:----------------------------------------------------------------------------------------------------------------------------| +| **Назва** | Проходження опитування експертом | +| **Учасники** | Система, експерт | +| **Передумови** | Користувач зареєстрований як експерт, опитування доступне для проходження | +| **Результат** | Експерт надав відповіді на всі питання опитування; Відповіді експерта збережені в системі; Результати опитування зараховані | +| **Виключні ситуації** | EX02.01: Опитування вже пройдено, EX02.02: Експерт не має права проходити опитування. | + +| ID: | **EditAnswers** | +|:----------------------|:--------------------------------------------------------------------------------------------------------| +| **Назва** | Редагування експертом своїх відповідей на опитування | +| **Учасники** | Система, експерт | +| **Передумови** | Експерт авторизований в системі, Опитування, на яке експерт надав відповіді, доступне для редагування | +| **Результат** | Експерт відредагував свої відповіді на опитування; Відредаговані відповіді експерта збережені в системі | +| **Виключні ситуації** | EX03.01: Опитування більше не доступне для редагування. + +| ID: | **CreateSurvey** | +|:----------------------|:----------------------------------------------------------------------------------------| +| **Назва** | Створення опитування адміністратором | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі | +| **Результат** | Адміністратор створив нове опитування, Опитування доступне користувачам для проходження | +| **Виключні ситуації** | EX04.01: Опитування з такою назвою вже існує | + +| ID: | **EditSurvey** | +|:----------------------|:------------------------------------------------------------------------------------------------------------------| +| **Назва** | Редагування опитування адміністратором | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі, Опитування, яке адміністратор хоче відредагувати, доступне для редагування | +| **Результат** | Адміністратор успішно відредагував опитування, Зміни внесені до опитування в базі даних | +| **Виключні ситуації** | EX05.01: Опитування більше не доступне для редагування | + +| ID: | **AssignSurvey** | +|:----------------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **Назва** | Призначення опитування експерту | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі,
Опитування, яке адміністратор хоче призначити, доступне для призначення,
Експерт, якому адміністратор хоче призначити опитування, зареєстрований в системі | +| **Результат** | Опитування успішно призначено експерту, Експерт бачить призначене опитування в списку опитувань | +| **Виключні ситуації** | EX06.01: Експерт вже призначений до цього опитування | + +| ID: | **UnassignSurveyFromExpert** | +|:----------------------|:-------------------------------------------------------------------------------------------------------------------------| +| **Назва** | Зняти опитування з експерта | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі,
Опитування доступне для редагування,
Експерт призначений до опитування | +| **Результат** | Опитування успішно знято з обраного експерта, Експерт не бачить опитування в списку опитувань | +| **Виключні ситуації** | EX07.01: Експерт не призначений до цього опитування. | + +| ID: | **ViewStatistics** | +|:----------------------|:------------------------------------------------------------------------------------------------------------------------------------| +| **Назва** | Перегляд адміністратором статистики відповідей на опитування | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі,
Опитування, для якого адміністратор хоче переглянути статистику, доступне для перегляду | +| **Результат** | Адміністратор успішно переглянув статистику відповідей на вибране опитування | +| **Виключні ситуації** | EX08.01: Опитування більше не доступне для перегляду статистики | + +| ID: | **FilterByName** | +|:----------------------|:------------------------------------------------------------| +| **Назва** | Пошук опитування за назвою | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі | +| **Результат** | Адміністратор успішно знайшов опитування за вказаною назвою | +| **Виключні ситуації** | EX09.01: Опитувань з такою назвою не знайдено. | + +| ID: | **AddQuestion** | +|:----------------------|:---------------------------------------------------------------------------| +| **Назва** | Додавання нового питання до опитування | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі, Опитування доступне для редагування | +| **Результат** | Адміністратор успішно додав нове питання до опитування | +| **Виключні ситуації** | EX10.01: Опитування більше не доступне для редагування. | + +| ID: | **RemoveQuestion** | +|:----------------------|:---------------------------------------------------------------------------| +| **Назва** | Додавання нового питання до опитування | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі, Опитування доступне для редагування | +| **Результат** | Адміністратор успішно видалив питання з опитування | +| **Виключні ситуації** | EX11.01: Опитування більше не доступне для редагування. | + +| ID: | **RemoveSurvey** | +|:----------------------|:---------------------------------------------------------------------------| +| **Назва** | Видалення опитування | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі, Опитування доступне для редагування | +| **Результат** | Адміністратор успішно видалив опитування | +| **Виключні ситуації** | EX12.01: Опитування більше не доступне для редагування. | + +## Короткий огляд продукту + +Система організації та управління опитуваннями експертів - це комплекс інструментів і методів, які допомагають збирати, +аналізувати та інтерпретувати думки та думки експертів з певної галузі знань. + +Основні категорії користувачів системи: + +* Експерт - користувач, який може відповідати на певні запитання під час опитування. +* Адміністратор - це особа, яка контролює проходження опитування. + +## Функціональність + +Функціональні вимоги системи представлені через інтерфейси для різних типів користувачів. Це дозволяє визначити, які +можливості доступні для кожної категорії користувачів, аналізувати їх взаємодію та чітко встановлювати межі системи, щоб +забезпечити необхідний функціонал для виконання окремих завдань. + +### Інтерфейс експерта + +Інтерфейс експерта представляє собою базовий набір функцій системи для користувача. + +* увійти в обліковий запис +* вийти з облікового запису +* проходження опитування експертом +* редагування своїх відповідей на опитування + +### Інтерфейс адміністратора системи + +Інтерфейс адміністратора передбачає ширші можливості керування системою. + +* створення опитування +* редагування опитування +* призначення опитування експерту +* зняти опитування з експерта +* перегляд статистики відповідей на опитування +* пошук опитування за назвою +* додавання нового питання до опитування +* видалення нового питання до опитування +* видалення опитування + +## Практичність + +- Простий мінімалістичний дизайн інтерфейсу, інтуїтивність +- Зрозуміла та приємна до вивчення документація, яка при цьому покриває всі можливості сервісу +- Підтримка використання гарячих клавіш +- Можливість бекапів (повернення видалених даних і відновлення доступу до аккаунту) +- Використання графічних методів відображення прогресу опитування есперта (схеми, графіки, діаграми) +- Можливість відновлення паролю +- Адаптивніть під різні роздільні здатності дисплеїв + +## Надійність + +- Авторизація користувачів +- Чітке розділення можливостей користувачів відповідно до їх ролі +- Система повідомлення адміністраторів про проблеми в роботі опитування +- Регулярне створення резервних копій даних +- Автоматичний блок надмірної та/або незвичної активності +- Стійкість до високого трафіку + +## Продуктивність + +- Швидкий обмін даними +- Ефективне використання оперативної пам'яті, інтернет трафіку тощо +- Використання облачних сервісів +- Використання багатопоточності +- Гнучке налаштування лімітів використовуваних ресурсів кожного проєкту окремо +- Висока пропускна здатність + +## Експлуатаційна придатність + +- Постійна технічна підтримка сервісу, швидкий зворотній зв'язок +- Низький поріг входження для апаратного та програмного забезпечення +- Постійне впровадження оновлень +- Активне тестування +- Готовність до роботи в екстримальних умовах diff --git a/docs/requirements/state-of-the-art.md b/docs/requirements/state-of-the-art.md new file mode 100644 index 00000000..839dec8f --- /dev/null +++ b/docs/requirements/state-of-the-art.md @@ -0,0 +1,201 @@ +# Аналіз предметної області + +## Вступ + +*У цьому розділі ми поглибимо наше розуміння предметної області, пов'язаної з організацією та управлінням опитуваннями +експертів. Ми розглянемо ключові визначення, різноманітні підходи та методи вирішення завдань, а також проведемо +порівняльний аналіз існуючих інструментів управління експертними опитуваннями.* + +*Цей аналіз допоможе нам краще зрозуміти потреби та вимоги користувачів у сфері опитування експертів, а також визначити +оптимальні підходи та інструменти для досягнення поставлених цілей. В результаті ми зможемо розробити більш ефективну та +зручну систему для організації та проведення експертних опитувань.* + +## Основні визначення + +### Експертне опитування + +Експертне опитування – це метод збору й обробки думок фахівців (експертів) з певної галузі з метою отримання +узагальнених оцінок, прогнозів чи рекомендацій щодо складних проблем, які неможливо вирішити лише за допомогою +традиційних методів дослідження.[[1]](#link1) + +### Експерт + +Експерт - висококваліфікований спеціаліст, який має вищу освіту, відповідну кваліфікацію і професійні знання з +питань, що досліджуються, виконує службові обов'язки, пов'язані з провадженням діяльності у відповідній галузі, +безпосередньо проводить експертизу та несе персональну відповідальність за достовірність і повноту аналізу, +обґрунтованість висновків відповідно до завдання на проведення експертизи.[[2]](#link2) + +### Основні характеристики експерту + +Показники екпертного потенціалу [[2]](#link2): + +- Значний досвід роботи +- Високий рівень інтелекту +- Престижна освіта +- Активна наукова діяльність +- Існування публікацій у престижних виданнях +- Визнання колег +- Високий особистий статус + +### Переваги та недоліки експертного опитування + +Переваги [[3]](#link3): + +- Дозволяє отримати інформацію з проблем, які неможливо дослідити традиційними методами. +- Забезпечує різнобічне й неупереджене освітлення проблеми. +- Може використовуватися для прогнозування й оцінки ризиків. +- Сприяє кращому розумінню складних проблем. + +Недоліки: + +- Результати опитування залежать від компетентності й об'єктивності експертів. +- Можливі упередження з боку експертів. +- Висока вартість проведення опитування. + +### Застосування експертних опитувань + +Експертне опитування використовується в різних галузях, таких як [[4]](#link4): + +- Наука й техніка: Прогнозування науково-технічного прогресу, оцінка перспектив розвитку галузей науки й техніки, + розробка нових продуктів і технологій. +- Економіка: Оцінка перспектив розвитку галузей економіки, визначення ризиків інвестиційних проектів, розробка + економічних прогнозів. +- Соціологія: Вивчення суспільної думки, оцінка соціальних проблем, прогнозування соціальних змін. +- Управління: Прийняття управлінських рішень, оцінка ефективності діяльності підприємств та організацій, розробка + стратегій розвитку. + +## Підходи до проведення експертного опитування + +Існує декілька підходів до проведення експертного опитування, які можна використовувати залежно від мети дослідження, +наявних ресурсів та інших факторів. [[5]](#link5) + +- Кількісний підхід: Цей підхід використовується, коли важливо отримати кількісні дані, наприклад, оцінки експертів + щодо ймовірності певної події або важливості певного фактора. Для збору даних використовуються анкети, що містять + закриті питання з фіксованими варіантами відповідей. +- Якісний підхід: Цей підхід використовується, коли важливо отримати більш глибоке розуміння думок експертів, їхні + міркування та аргументи. Для збору даних використовуються інтерв'ю, фокус-групи або інші методи, що дозволяють + експертам вільно висловлювати свої думки. +- Комбінований підхід: Цей підхід поєднує в собі елементи кількісного й якісного підходів. Він може бути корисним, + коли необхідно отримати як кількісні дані, так і більш детальне розуміння думок експертів. +### Способи проведення експертного опитування + +Класифікація: + +Існує декілька класифікацій видів експертного опитування, але найпоширенішою є класифікація за способом проведення [[6]](#link6): + +- Анкетування: Експертам надається анкета з чітко сформульованими питаннями, на які вони дають письмові відповіді. + Цей метод є найпростішим й найдешевшим, але він не дозволяє отримати глибоке розуміння думок експертів. +- Інтерв'ю: Експертів опитують у формі усного інтерв'ю, яке може бути вільним або структурованим. Цей метод дозволяє + отримати більш детальну інформацію, адже експерти мають можливість пояснити свої думки й аргументувати свої позиції. +- Метод Дельфі: Експерти послідовно й анонімно отримують результати опитування інших експертів, що дає їм можливість + скоригувати свої початкові оцінки. Цей метод використовується для зменшення впливу упередженостей й отримання більш + консенсусної думки експертів. +- Метод колективної генерації ідей: Експерти збираються разом, щоб обговорити проблему й виробити спільні ідеї та + рішення. Цей метод може бути корисним для генерування нових й нестандартних ідей. + +### Вибір методу опитування + +Вибір методу опитування залежить від мети дослідження, наявних ресурсів та інших факторів. Важливо враховувати такі +аспекти[[7]](#link7): + +- Кількість експертів: Якщо вам потрібно опитувати велику кількість експертів, то анкетування може бути найкращим + вибором. Якщо ж вам потрібно опитувати лише декілька експертів, то інтерв'ю може бути більш продуктивним. +- Необхідний рівень деталізації: Якщо вам потрібна детальна інформація, то інтерв'ю або метод Дельфі можуть бути + кращими виборами. Якщо ж вам достатньо загальної інформації, то анкетування може бути достатнім. +- Наявність бюджету: Інтерв'ю й метод Дельфі можуть бути більш дорогими, ніж анкетування, адже вони потребують + більше часу й ресурсів. + +### Анкетування: опис, методи, переваги та недоліки + +Анкетування - це метод збору інформації шляхом опитування респондентів за допомогою анкет. Анкети - це письмові +набори запитань, на які респонденти дають відповіді. Цей метод використовується для вивчення думок, поглядів, поведінки +та інших характеристик людей[[8]](#link8). + +Методи анкетування + +Існує два основних методи анкетування: + +- Очне анкетування: Респонденти заповнюють анкети в присутності інтерв'юера. Цей метод дозволяє інтерв'юеру + контролювати + процес заповнення анкети й ставити уточнюючі запитання. +- Заочне анкетування: Респонденти заповнюють анкети самостійно, без присутності інтерв'юера. Цей метод може бути + більш + зручним для респондентів, але він не дозволяє інтерв'юеру контролювати процес заповнення анкети. + +## Порівняльна характеристика існуючих засобів вирішення завдання + +**[SurveyMonkey](https://www.surveymonkey.com/)** — Це популярна платформа для опитування, яка пропонує безкоштовний та +платний плани. SurveyMonkey має широкий спектр функцій, які дозволяють створювати складні опитування, збирати дані та +аналізувати результати. + +**[Google Forms](https://www.google.com/forms/)** — Це безкоштовна платформа для опитування від Google. Google Forms має +простіший інтерфейс користувача, ніж SurveyMonkey, але він все одно пропонує широкий спектр функцій. + +**[Qualtrics](https://www.qualtrics.com/)** — Це потужна платформа для опитування, яка пропонує широкий спектр функцій, +включаючи можливість створювати розгалужені опитування, використовувати логіку опитування та збирати мультимедійні дані. +Qualtrics має платні плани. + +**[Alchemer](https://www.alchemer.com/)** — це платна платформа опитувань, яка пропонує широкий спектр функцій, +включаючи можливість створювати анкети, збирати відповіді, аналізувати дані та багато іншого. + +🟢 - критерій виконано +🟠 - критерій виконано не повністю +🔴 - критерій не виконано + +| Властивості | Наша система | SurveyMonkey | Google Forms | Qualtrics | Alchemer | +|--------------------------------|:------------:|:------------:|:------------:|:---------:|:--------:| +| **Функціональні вимоги** | | | | | | +| Створення опитування | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | +| Збір даних | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | +| Аналіз даних | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | +| **Вимоги до зручності роботи** | | | | | | +| Інтерфейс користувача | 🟢 | 🟠 | 🟠 | 🟢 | 🟢 | +| Створення опитування | 🟢 | 🟢 | 🟢 | 🟢 | 🟠 | +| Налаштування дизайну | 🟢 | 🟢 | 🔴 | 🔴 | 🟢 | +| Зручність аналізу | 🟢 | 🟠 | 🟢 | 🟢 | 🟢 | +| Підтримка мов | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | +| **Вимоги до надійності** | | | | | | +| Захист даних | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | +| Резервне копіювання даних | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | +| Доступність | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | +| Відновлення після збоїв | 🟢 | 🟢 | 🟠 | 🟢 | 🟢 | +| Безпека | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | +| **Вимоги до продуктивності** | | | | | | +| Швидкість створення опитування | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | +| Швидкість збору даних | 🟢 | 🟢 | 🟢 | 🔴 | 🟢 | +| Час обробки даних | 🟢 | 🟢 | 🟢 | 🟢 | 🟠 | +| Масштабованість | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | +| Пропускна здатність | 🟢 | 🟢 | 🟢 | 🟢 | 🟠 | +| **Вимоги до підтримки** | | | | | | +| Ресурси самообслуговування | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | +| Підтримка електронною поштою | 🟢 | 🟢 | 🔴 | 🟢 | 🟢 | +| Підтримка чату | 🟢 | 🟢 | 🔴 | 🟢 | 🟢 | +| Години роботи підтримки | 🟢 | 🟢 | 🟢 | 🟠 | 🟢 | +| Мови підтримки | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | + +## Висновки + +Система організації та управління опитуваннями експертів має важливе значення для аналізу бізнес-процесів та вивчення +вимог ринку. Серед наведених систем найбільш привабливим варіантом для вирішення цієї задачі є "SurveyMonkey", +незважаючи на деякі його недоліки. Серед цих недоліків можна відзначити складний інтерфейс та обмеження на проведення +опитувань серед великої кількості людей лише у платній версії. З цими обмеженнями на увазі, розробка власної системи, де +клієнти можуть отримувати доступ до опитувань безкоштовно, має сенс. + +## Посилання + +1. + Експертне опитування +2. + Експерт +3. + Переваги та недоліки експертного опитування +4. + Застосування експертних опитувань +5. + Підходи до проведення експертного опитування +6. + Способи проведення експертного опитування +7. + Вибір методу опитування +8. + Анкетування: опис, методи, переваги та недоліки diff --git a/docs/software/README.md b/docs/software/README.md index 2362239d..bac3f339 100644 --- a/docs/software/README.md +++ b/docs/software/README.md @@ -1,3 +1,157 @@ # Реалізація інформаційного та програмного забезпечення +```sql + +-- MySQL Workbench Forward Engineering + +SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; +SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; +SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'; + +-- ----------------------------------------------------- +-- Schema mydb +-- ----------------------------------------------------- +-- ----------------------------------------------------- +-- Schema db_course +-- ----------------------------------------------------- + +-- ----------------------------------------------------- +-- Schema db_course +-- ----------------------------------------------------- +CREATE SCHEMA IF NOT EXISTS `db_course` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci ; +USE `db_course` ; + +-- ----------------------------------------------------- +-- Table `db_course`.`survey` +-- ----------------------------------------------------- +DROP TABLE IF EXISTS `db_course`.`survey` ; + +CREATE TABLE IF NOT EXISTS `db_course`.`survey` ( +`id` INT NOT NULL AUTO_INCREMENT, +`name` VARCHAR(255) NOT NULL, +`startDate` DATE NOT NULL, +`endDate` DATE NOT NULL, +PRIMARY KEY (`id`)) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8mb4 +COLLATE = utf8mb4_0900_ai_ci; + + +-- ----------------------------------------------------- +-- Table `db_course`.`question` +-- ----------------------------------------------------- +DROP TABLE IF EXISTS `db_course`.`question` ; + +CREATE TABLE IF NOT EXISTS `db_course`.`question` ( +`id` INT NOT NULL AUTO_INCREMENT, +`description` TEXT NOT NULL, +`number` INT NOT NULL, +`surveyId` INT NULL DEFAULT NULL, +PRIMARY KEY (`id`), +INDEX `surveyId` (`surveyId` ASC) VISIBLE, +CONSTRAINT `question_ibfk_1` +FOREIGN KEY (`surveyId`) +REFERENCES `db_course`.`survey` (`id`)) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8mb4 +COLLATE = utf8mb4_0900_ai_ci; + + +-- ----------------------------------------------------- +-- Table `db_course`.`answer` +-- ----------------------------------------------------- +DROP TABLE IF EXISTS `db_course`.`answer` ; + +CREATE TABLE IF NOT EXISTS `db_course`.`answer` ( +`id` INT NOT NULL AUTO_INCREMENT, +`option` TEXT NOT NULL, +`questionId` INT NULL DEFAULT NULL, +PRIMARY KEY (`id`), +INDEX `questionId` (`questionId` ASC) VISIBLE, +CONSTRAINT `answer_ibfk_1` +FOREIGN KEY (`questionId`) +REFERENCES `db_course`.`question` (`id`)) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8mb4 +COLLATE = utf8mb4_0900_ai_ci; + + +-- ----------------------------------------------------- +-- Table `db_course`.`role` +-- ----------------------------------------------------- +DROP TABLE IF EXISTS `db_course`.`role` ; + +CREATE TABLE IF NOT EXISTS `db_course`.`role` ( +`id` INT NOT NULL AUTO_INCREMENT, +`name` VARCHAR(255) NOT NULL, +PRIMARY KEY (`id`)) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8mb4 +COLLATE = utf8mb4_0900_ai_ci; + + +-- ----------------------------------------------------- +-- Table `db_course`.`user` +-- ----------------------------------------------------- +DROP TABLE IF EXISTS `db_course`.`user` ; + +CREATE TABLE IF NOT EXISTS `db_course`.`user` ( +`id` INT NOT NULL AUTO_INCREMENT, +`nickname` VARCHAR(255) NOT NULL, +`email` VARCHAR(255) NOT NULL, +`password` VARCHAR(255) NOT NULL, +`roleId` INT NULL DEFAULT NULL, +PRIMARY KEY (`id`), +INDEX `roleId` (`roleId` ASC) VISIBLE, +CONSTRAINT `user_ibfk_1` +FOREIGN KEY (`roleId`) +REFERENCES `db_course`.`role` (`id`)) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8mb4 +COLLATE = utf8mb4_0900_ai_ci; + + +-- ----------------------------------------------------- +-- Table `db_course`.`assignedsurvey` +-- ----------------------------------------------------- +DROP TABLE IF EXISTS `db_course`.`assignedsurvey` ; + +CREATE TABLE IF NOT EXISTS `db_course`.`assignedsurvey` ( +`surveyId` INT NOT NULL, +`userId` INT NOT NULL, +PRIMARY KEY (`surveyId`, `userId`), +INDEX `userId` (`userId` ASC) VISIBLE, +CONSTRAINT `assignedsurvey_ibfk_1` +FOREIGN KEY (`surveyId`) +REFERENCES `db_course`.`survey` (`id`), +CONSTRAINT `assignedsurvey_ibfk_2` +FOREIGN KEY (`userId`) +REFERENCES `db_course`.`user` (`id`)) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8mb4 +COLLATE = utf8mb4_0900_ai_ci; + + +-- ----------------------------------------------------- +-- Table `db_course`.`statistic` +-- ----------------------------------------------------- +DROP TABLE IF EXISTS `db_course`.`statistic` ; + +CREATE TABLE IF NOT EXISTS `db_course`.`statistic` ( +`id` INT NOT NULL AUTO_INCREMENT, +`surveyId` INT NULL DEFAULT NULL, +PRIMARY KEY (`id`), +INDEX `surveyId` (`surveyId` ASC) VISIBLE, +CONSTRAINT `statistic_ibfk_1` +FOREIGN KEY (`surveyId`) +REFERENCES `db_course`.`survey` (`id`)) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8mb4 +COLLATE = utf8mb4_0900_ai_ci; + + +SET SQL_MODE=@OLD_SQL_MODE; +SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; +SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; +``` diff --git a/docs/use cases/README.md b/docs/use cases/README.md new file mode 100644 index 00000000..0c24c5a0 --- /dev/null +++ b/docs/use cases/README.md @@ -0,0 +1,580 @@ +# Модель прецедентів + +## Загальна схема + +
+ +@startuml + +actor "Користувач" as User +actor "Експерт" as Expert +actor "Адміністратор" as Admin + +Expert --u-|> User +Admin --u-|> Expert + +usecase "Login\nВхід у систему" as Login +usecase "Registration\nРеєстрація у системі" as Registration + +usecase "TakeSurvey\nПроходити опитування" as TakeSurvey +usecase "EditAnswers\nРедагувати відповіді" as EditAnswers + +usecase "CreateSurvey\nСтворювати опитування" as CreateSurvey +usecase "EditSurvey\nРедагувати опитування" as EditSurvey +usecase "AssignSurvey\Призначати опитування" as AssignSurvey +usecase "ViewStatistics\nПереглядати статистику" as ViewStatistics + +User -d-> Login +User -l-> Registration + +Expert -u-> TakeSurvey +Expert -l-> EditAnswers + +Admin -d-> CreateSurvey +Admin -r-> EditSurvey +Admin -l-> AssignSurvey +Admin -u-> ViewStatistics + +@enduml + +
+ +## Схема використання для Користувача + +
+ +@startuml + +actor "Користувач" as User + +usecase "Login\nВхід у систему" as Login +usecase "Registration\nРеєстрація у системі" as Registration + +User --> Login +User --> Registration +Login .u.> RecoveryPassword +Registration .u.> RegistrationWithEmail +@enduml +
+ +## Схема використання для Експерта + +
+ +@startuml + +actor "Експерт" as Expert + +usecase "TakeSurvey\nПроходити опитування" as TakeSurvey +usecase "EditAnswers\nРедагувати відповіді" as EditAnswers +usecase "SaveAnswers\nЗберегти опитування" as SaveAnswers + +Expert -r-> TakeSurvey +Expert -l-> EditAnswers +TakeSurvey .u.> SaveAnswers + +@enduml + +
+ +## Схема використання для Адміністратора + +
+ +@startuml + +actor "Адміністратор" as Admin + +usecase "CreateSurvey\n Створювати опитування" as CreateSurvey +usecase "EditSurvey\n Редагувати опитування" as EditSurvey +usecase "AssignSurvey\ Призначати опитування" as AssignSurvey +usecase "ViewStatistics\n Переглядати статистику" as ViewStatistics + +usecase "AddQuestion\n Додати питання" as AddQuestion +usecase "RemoveQuestion\ Видалити питання" as RemoveQuestion +usecase "RemoveSurvey\ Видалити опитування" as RemoveSurvey +usecase "UnassignSurveyFromExpert\n Знімати опитування з експерту" as UnassignSurveyFromExpert +usecase "FilterByName\n Пошук опитування за назвою" as FilterByName + +Admin -u-> CreateSurvey +Admin -d-> EditSurvey +Admin -l-> AssignSurvey +Admin -r-> ViewStatistics + +CreateSurvey <. AddQuestion : Extends +EditSurvey <.d. RemoveQuestion : Extends +EditSurvey <.r. RemoveSurvey : Extends +AssignSurvey <.l. UnassignSurveyFromExpert : Extends +ViewStatistics <.r. FilterByName : Extends + +@enduml + +
+ +## Сценарії використання + +### Зареєструвати користувача + +| ID: | **Registration** | +|:----------------------|:--------------------------------------------------------------------------| +| **Назва** | Зареєструвати користувача | +| **Учасники** | Система, користувач | +| **Передумови** | Користувач незареєстрований | +| **Результат** | Створено новий обліковий запис | +| **Виключні ситуації** | EX01.01 Обліковий запис вже існує
EX.01.02 Користував ввів хибні дані | + +@startuml + +|Користувач| +start; +: Натискає на кнопку реєстрації; + +|Система| +: Відкриває форму для реєстрації; + +|Користувач| +: Вводить дані для реєстрації; +: Підтверджує дані "Зареєструватися" +(можлива EX01.01, EX.01.02); + +|Система| +: Заносить дані користувача в базу даних; +: Створює новий обліковий запис; + +|Користувач| +: stop; +@enduml + +### Авторизувати користувача + +| ID: | **Login** | +|:----------------------|:---------------------------------------------------------------------------------------| +| **Назва** | Авторизувати користувача | +| **Учасники** | Система, користувач | +| **Передумови** | Користувач зареєстрований, користувач не увійшов в обліковий запис | +| **Результат** | Користувач увійшов в обліковий запис | +| **Виключні ситуації** | EX02.01 Облікового доступу користувача не існує
EX02.02 Користувач ввів хибні дані | + +@startuml + +|Користувач| +start; +:Користувач натискає на кнопку авторизації; +:Користувач вводить данні; +:Користувач підтверджує дані +(можлива EX.02.01 EX02.02); + +|Система| +:Система дає запит до бази даних; +:Перевіряє наявність облікового запису користувача в системі; +:Надає доступ до особистого кабінету користувача; +:Завантажує користувачу головну сторінку; + +|Користувач| +:Користувач увійшов в обліковий запис; + +stop; + +@enduml + +### Вийти з облікового запису + +| ID: | **Logout_User** | +|:----------------------|:----------------------------------------------------------------| +| **Назва** | Вийти з облікового запису | +| **Учасники** | Система, користувач | +| **Передумови** | Користувач зареєстрований, користувач увійшов в обліковий запис | +| **Результат** | Користувач вийшов з облікового запису | +| **Виключні ситуації** | Відсутні | + +@startuml + +|Користувач| +start; +: Переходить на особисту сторінку; +: \tНатискає кнопку\n"Вихід з облікового запису"; + +|Система| +: \tБлокує користувачу доступ\nдо особистого кабінету; + +|Користувач| +: Користувач бачить сторінку авторізації; +stop; + +@enduml + +### Проходити опитування + +| ID: | **TakeSurvey** | +|:----------------------|:----------------------------------------------------------------------------------------------------------------------------| +| **Назва** | Проходження опитування експертом | +| **Учасники** | Система, експерт | +| **Передумови** | Користувач зареєстрований як експерт, опитування доступне для проходження | +| **Результат** | Експерт надав відповіді на всі питання опитування; Відповіді експерта збережені в системі; Результати опитування зараховані | +| **Виключні ситуації** | EX02.01: Опитування вже пройдено, EX02.02: Експерт не має права проходити опитування. | +| + +@startuml + +|Експерт| +start; +: Авторизується в системі; +: Вибирає доступне опитування; + +|Система| +: Відкриває опитування; +: Відображає питання; + +|Експерт| +: Відповідає на питання; +: Відправляє відповіді "Надіслати" +(можлива EX02.01, EX02.02); + +|Система| +: Зберігає відповіді експерта; +: Зараховує результати опитування; + +|Експерт| +: stop; + +@enduml + +### Редагувати опитування + +| ID: | **EditAnswers** | +|:----------------------|:--------------------------------------------------------------------------------------------------------| +| **Назва** | Редагування експертом своїх відповідей на опитування | +| **Учасники** | Система, експерт | +| **Передумови** | Експерт авторизований в системі, Опитування, на яке експерт надав відповіді, доступне для редагування | +| **Результат** | Експерт відредагував свої відповіді на опитування; Відредаговані відповіді експерта збережені в системі | +| **Виключні ситуації** | EX03.01: Опитування більше не доступне для редагування. | +| + +@startuml + +|Експерт| +start; +: Вибирає опитування; +: Переглядає свої відповіді; +: Вибирає відповідь для редагування; +: Вносить зміни до відповіді; +: Зберігає зміни "Зберегти" (можлива EX03.01); + +|Система| +: Зберігає відредаговані відповіді експерта; + +|Експерт| +: stop; + +@enduml + +### Створювати опитування + +| ID: | **CreateSurvey** | +|:----------------------|:----------------------------------------------------------------------------------------| +| **Назва** | Створення опитування адміністратором | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі | +| **Результат** | Адміністратор створив нове опитування, Опитування доступне користувачам для проходження | +| **Виключні ситуації** | EX04.01: Опитування з такою назвою вже існує | + +@startuml +|Адміністратор| +: start; +: Відкриває форму створення опитування; +: Вводить назву та опис опитування; +: Додає питання; +: Вводить варіанти відповідей; +: Встановлює дату початку та закінчення опитування; +: Натискає кнопку "Створити" (можлива EX04.01); + +|Система| +: Створює опитування в базі даних; +: Відображає створене опитування; + +|Адміністратор| +: Переглядає опитування; +: Редагує опитування (за бажанням); +: Закриває форму створення опитування; + +|Адміністратор| +: stop; +@enduml + +### Редагувати опитування + +| ID: | **EditSurvey** | +|:----------------------|:------------------------------------------------------------------------------------------------------------------| +| **Назва** | Редагування опитування адміністратором | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі, Опитування, яке адміністратор хоче відредагувати, доступне для редагування | +| **Результат** | Адміністратор успішно відредагував опитування, Зміни внесені до опитування в базі даних | +| **Виключні ситуації** | EX05.01: Опитування більше не доступне для редагування | + +@startuml + +|Адміністратор| +start; +: Відкриває список опитувань; +: Вибирає опитування для редагування; +: Відкриває опитування; +: Вносить зміни до назви, опису, питань, варіантів відповідей, дати початку/закінчення; +: Натискає кнопку "Зберегти" (можлива EX05.01); + +|Система| +: Зберігає відредаговані дані опитування; +: Відображає відредаговане опитування; + +|Адміністратор| +: Переглядає відредаговане опитування; +: Редагує опитування далі (за бажанням); +: Закриває форму редагування; + +|Адміністратор| +: stop; +@enduml + +### Призначення опитування експерту + +| ID: | **AssignSurvey** | +|:----------------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **Назва** | Призначення опитування експерту | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі,
Опитування, яке адміністратор хоче призначити, доступне для призначення,
Експерт, якому адміністратор хоче призначити опитування, зареєстрований в системі | +| **Результат** | Опитування успішно призначено експерту, Експерт бачить призначене опитування в списку опитувань | +| **Виключні ситуації** | EX06.01: Експерт вже призначений до цього опитування | + +@startuml + +|Адміністратор| +start; +: Відкриває список опитувань; +: Вибирає опитування для призначення; +: Відкриває список експертів; +: Вибирає експерта; +: Натискає кнопку "Призначити" (можлива EX06.01); + +|Система| +: Перевіряє доступність експерта; +: Призначає опитування експерту; +: Відправляє експерту повідомлення про призначення; + +|Адміністратор| +: Переглядає список призначених експертів; +: Закриває форму призначення; + +|Адміністратор| +: stop; +@enduml + +### Зняти опитування з експерта + +| ID: | **UnassignSurveyFromExpert** | +|:----------------------|:-------------------------------------------------------------------------------------------------------------------------| +| **Назва** | Зняти опитування з експерта | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі,
Опитування доступне для редагування,
Експерт призначений до опитування | +| **Результат** | Опитування успішно знято з обраного експерта, Експерт не бачить опитування в списку опитувань | +| **Виключні ситуації** | EX07.01: Експерт не призначений до цього опитування. | + +@startuml + +|Адміністратор| + +start; +: Авторизується в системі; +: Відкриває список опитувань; +: Вибирає опитування; +: Переглядає список призначених експертів; +: Вибирає експерта; +: Натискає кнопку "Зняти" (можлива EX08.01); + +|Система| +: Знімає опитування з експерта; +: Видаляє зняте опитцвання зі списку опитувань експерта; + +|Адміністратор| +: Переглядає оновлений список призначених експертів; +: Закриває форму редагування; + +|Адміністратор| +: stop; +@enduml + +### Перегляд адміністратором статистики відповідей на опитування + +| ID: | **ViewStatistics** | +|:----------------------|:------------------------------------------------------------------------------------------------------------------------------------| +| **Назва** | Перегляд адміністратором статистики відповідей на опитування | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі,
Опитування, для якого адміністратор хоче переглянути статистику, доступне для перегляду | +| **Результат** | Адміністратор успішно переглянув статистику відповідей на вибране опитування | +| **Виключні ситуації** | EX08.01: Опитування більше не доступне для перегляду статистики | + +@startuml + +|Адміністратор| +start; +: Авторизується в системі; +: Відкриває список опитувань; +: Вибирає опитування для перегляду статистики; + +|Система| +: Відображає статистику відповідей на опитування: +: Кількість відповідей; +: Відсотки відповідей на кожне питання; + +|Адміністратор| +: Закриває вікно зі статистикою; + +|Адміністратор| +: stop; +@enduml + +### Пошук опитування за назвою + +| ID: | **FilterByName** | +|:----------------------|:------------------------------------------------------------| +| **Назва** | Пошук опитування за назвою | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі | +| **Результат** | Адміністратор успішно знайшов опитування за вказаною назвою | +| **Виключні ситуації** | EX09.01: Опитувань з такою назвою не знайдено. | + +@startuml + +|Адміністратор| +start; +: Відкриває форму пошуку; +: Вводить назву опитування; +: Натискає кнопку "Пошук"; + +|Система| +: Шукає опитування за вказаною назвою; +: Відображає список знайдених опитувань; + +|Адміністратор| +: Вибирає опитування зі списку (якщо знайдено); +: Переглядає результати пошуку; +: Закриває форму пошуку; + +|Адміністратор| +: stop; +@enduml + +### Додавання нового питання до опитування + +| ID: | **AddQuestion** | +|:----------------------|:---------------------------------------------------------------------------| +| **Назва** | Додавання нового питання до опитування | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі, Опитування доступне для редагування | +| **Результат** | Адміністратор успішно додав нове питання до опитування | +| **Виключні ситуації** | EX10.01: Опитування більше не доступне для редагування. | + +@startuml + +|Адміністратор| +start; +: Відкриває список опитувань; +: Вибирає опитування для редагування; +: Відкриває форму додавання питання; +: Вводить текст питання; +: Вводить варіанти відповідей; +: Натискає кнопку "Додати" (можлива EX10.01); + +|Система| +: Додає нове питання до опитування; +: Відображає оновлене опитування; + +|Адміністратор| +: Переглядає оновлене опитування; +: Редагує опитування далі (за бажанням); +: Закриває форму додавання питання; + +|Адміністратор| +: stop; +@enduml + +### Видалення питання до опитування + +| ID: | **RemoveQuestion** | +|:----------------------|:---------------------------------------------------------------------------| +| **Назва** | Додавання нового питання до опитування | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі, Опитування доступне для редагування | +| **Результат** | Адміністратор успішно видалив питання з опитування | +| **Виключні ситуації** | EX11.01: Опитування більше не доступне для редагування. | + +@startuml + +|Адміністратор| +start; +: Відкриває список опитувань; +: Вибирає опитування для редагування; +: Відкриває опитування; +: Вибирає питання для видалення; +: Натискає кнопку "Видалити" (можлива EX11.01); + +|Система| +: Видаляє питання з опитування; +: Відображає оновлене опитування; + +|Адміністратор| +: Переглядає оновлене опитування; +: Редагує опитування далі (за бажанням); +: Закриває форму додавання питання; + +|Адміністратор| +: stop; +@enduml + +### Видалення опитування + +| ID: | **RemoveSurvey** | +|:----------------------|:---------------------------------------------------------------------------| +| **Назва** | Видалення опитування | +| **Учасники** | Система, Адміністратор | +| **Передумови** | Адміністратор авторизований в системі, Опитування доступне для редагування | +| **Результат** | Адміністратор успішно видалив опитування | +| **Виключні ситуації** | EX12.01: Опитування більше не доступне для редагування. | + +@startuml + +|Адміністратор| +start; +: Відкриває список опитувань; +: Вибирає опитування для видалення; +: Натискає кнопку "Видалити" (можлива EX12.01); + +|Система| +: Перевіряє, чи можна видалити опитування; +: Видаляє опитування; + +|Адміністратор| +: Переглядає оновлений список опитувань; + +|Адміністратор| +: stop; + +@enduml \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 99fc92d4..37ddf23b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "dis-edu", + "name": "edu_db_labs_group1", "version": "2.1.0", "lockfileVersion": 1, "requires": true, @@ -1767,39 +1767,11 @@ "glob-to-regexp": "^0.3.0" } }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "dependencies": { - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - } - } - }, "@nodelib/fs.stat": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -1878,27 +1850,6 @@ "@babel/types": "^7.3.0" } }, - "@types/debug": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", - "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", - "dev": true, - "requires": { - "@types/ms": "*" - } - }, - "@types/extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/extend/-/extend-3.0.1.tgz", - "integrity": "sha512-R1g/VyKFFI2HLC1QGAeTtCBWCo6n75l41OnsVYNbmKG+kempOESaodf6BeJyUM3Q0rKa/NQcTHbB2+66lNnxLw==", - "dev": true - }, - "@types/github-slugger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/github-slugger/-/github-slugger-1.3.0.tgz", - "integrity": "sha512-J/rMZa7RqiH/rT29TEVZO4nBoDP9XJOjnbbIofg7GQKs4JIduEO3WLpte+6WeUz/TcrXKlY+bM7FYrp8yFB+3g==", - "dev": true - }, "@types/glob": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz", @@ -1946,26 +1897,11 @@ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" }, - "@types/mdast": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", - "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", - "dev": true, - "requires": { - "@types/unist": "*" - } - }, "@types/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" }, - "@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", - "dev": true - }, "@types/node": { "version": "16.7.6", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.6.tgz", @@ -1988,12 +1924,6 @@ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, - "@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", - "dev": true - }, "@types/yargs": { "version": "16.0.4", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", @@ -2766,12 +2696,6 @@ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" }, - "arg": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", - "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==", - "dev": true - }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -3161,12 +3085,6 @@ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" }, - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "dev": true - }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -3868,12 +3786,6 @@ "lodash": "^4.17.15" } }, - "ccount": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.0.tgz", - "integrity": "sha512-VOR0NWFYX65n9gELQdcpqsie5L5ihBXuZGAgaPEp/U7IOSjnPMEH6geE+2f6lcekaNEfWzAHS45mPvSo5bqsUA==", - "dev": true - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -3890,24 +3802,6 @@ "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true }, - "character-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.0.tgz", - "integrity": "sha512-oHqMj3eAuJ77/P5PaIRcqk+C3hdfNwyCD2DAUcD5gyXkegAuF2USC40CEqPscDk4I8FRGMTojGJQkXDsN5QlJA==", - "dev": true - }, - "character-entities-legacy": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-2.0.0.tgz", - "integrity": "sha512-YwaEtEvWLpFa6Wh3uVLrvirA/ahr9fki/NUd/Bd4OR6EdJ8D22hovYQEOUCBfQfcqnC4IAMGMsHXY1eXgL4ZZA==", - "dev": true - }, - "character-reference-invalid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.0.tgz", - "integrity": "sha512-pE3Z15lLRxDzWJy7bBHBopRwfI20sbrMVLQTC7xsPglCHf4Wv1e167OgYAFP78co2XlhojDyAqA+IAJse27//g==", - "dev": true - }, "chart.js": { "version": "2.9.4", "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.9.4.tgz", @@ -4225,12 +4119,6 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" }, - "comment-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.2.4.tgz", - "integrity": "sha512-pm0b+qv+CkWNriSTMsfnjChF9kH0kxz55y44Wo5le9qLxMj5xDQAaEd9ZN1ovSuk9CsrncWaFwgpOMg7ClJwkw==", - "dev": true - }, "common-sequence": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/common-sequence/-/common-sequence-2.0.2.tgz", @@ -5782,15 +5670,6 @@ "zepto": "^1.2.0" } }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, "dom-converter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", @@ -6430,15 +6309,6 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "fastq": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.12.0.tgz", - "integrity": "sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, "faye-websocket": { "version": "0.11.4", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", @@ -6742,12 +6612,6 @@ "assert-plus": "^1.0.0" } }, - "github-slugger": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.4.0.tgz", - "integrity": "sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==", - "dev": true - }, "glob": { "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", @@ -7504,22 +7368,6 @@ } } }, - "is-alphabetical": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.0.tgz", - "integrity": "sha512-5OV8Toyq3oh4eq6sbWTYzlGdnMT/DPI5I0zxUBxjiigQsZycpkKF3kskkao3JyYGuYDHvhgJF+DrjMQp9SX86w==", - "dev": true - }, - "is-alphanumerical": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.0.tgz", - "integrity": "sha512-t+2GlJ+hO9yagJ+jU3+HSh80VKvz/3cG2cxbGGm4S0hjKuhWQXgPVUVOZz3tqZzMjhmphZ+1TIJTlRZRoe6GCQ==", - "dev": true, - "requires": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" - } - }, "is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", @@ -7631,12 +7479,6 @@ "has-tostringtag": "^1.0.0" } }, - "is-decimal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.0.tgz", - "integrity": "sha512-QfrfjQV0LjoWQ1K1XSoEZkTAzSa14RKVMa5zg3SdAfzEmQzRM4+tbSFWb78creCeA9rNBzaZal92opi1TwPWZw==", - "dev": true - }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", @@ -7688,12 +7530,6 @@ "is-extglob": "^2.1.1" } }, - "is-hexadecimal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.0.tgz", - "integrity": "sha512-vGOtYkiaxwIiR0+Ng/zNId+ZZehGfINwTzdrDqc6iubbnQWhnPuYymOzOKUDqa2cSl59yHnEh2h6MvRLQsyNug==", - "dev": true - }, "is-installed-globally": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", @@ -9928,157 +9764,6 @@ "walk-back": "^5.0.0" } }, - "jsdoc-md": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/jsdoc-md/-/jsdoc-md-11.0.2.tgz", - "integrity": "sha512-HIQL3tJ4vpCCDmSZR9XuwfuKPVRMroXAs3smbf6vygnYevibjSqqzTEJ6bWBVke8plHkLs1nHwKt4F+ClgVZ/A==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/core": "^7.15.0", - "arg": "^5.0.0", - "comment-parser": "^1.2.3", - "doctrine": "^3.0.0", - "github-slugger": "^1.3.0", - "globby": "^12.0.0", - "kleur": "^4.1.4", - "mdast-util-inject": "^1.1.0", - "remark-behead": "^2.3.3", - "remark-gfm": "^2.0.0", - "remark-parse": "^10.0.0", - "remark-stringify": "^10.0.0", - "remark-toc": "^8.0.0", - "trim-newlines": "^4.0.2", - "unified": "^10.1.0", - "unist-util-remove-position": "^4.0.1" - }, - "dependencies": { - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "array-union": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", - "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", - "dev": true - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globby": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-12.0.2.tgz", - "integrity": "sha512-lAsmb/5Lww4r7MM9nCCliDZVIKbZTavrsunAsHLr9oHthrZP1qi7/gAnHOsUs9bLvEt2vKVJhHmxuL7QbDuPdQ==", - "dev": true, - "requires": { - "array-union": "^3.0.1", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.7", - "ignore": "^5.1.8", - "merge2": "^1.4.1", - "slash": "^4.0.0" - } - }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "kleur": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", - "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - } - } - }, "jsdoc-parse": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/jsdoc-parse/-/jsdoc-parse-6.0.1.tgz", @@ -10405,12 +10090,6 @@ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" }, - "lodash.iteratee": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.iteratee/-/lodash.iteratee-4.7.0.tgz", - "integrity": "sha1-vkF32yiajMw8CZDx2ya1si/BVUw=", - "dev": true - }, "lodash.kebabcase": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", @@ -10466,12 +10145,6 @@ "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==" }, - "longest-streak": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.0.0.tgz", - "integrity": "sha512-XhUjWR5CFaQ03JOP+iSDS9koy8T5jfoImCZ4XprElw3BXsSk4MpVYOLw/6LTDKZhO13PlAXnB5gS4MHQTpkSOw==", - "dev": true - }, "lower-case": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", @@ -10594,12 +10267,6 @@ "resolved": "https://registry.npmjs.org/markdown-it-task-lists/-/markdown-it-task-lists-2.1.1.tgz", "integrity": "sha512-TxFAc76Jnhb2OUu+n3yz9RMu4CwGfaT788br6HhEDlvWfdeJcLUsxk1Hgw2yJio0OXsxv7pyIPmvECY7bMbluA==" }, - "markdown-table": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.1.tgz", - "integrity": "sha512-CBbaYXKSGnE1uLRpKA1SWgIRb2PQrpkllNWpZtZe6VojOJ4ysqiq7/2glYcmKsOYN09QgH/HEBX5hIshAeiK6A==", - "dev": true - }, "marked": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/marked/-/marked-2.1.3.tgz", @@ -10621,291 +10288,60 @@ "safe-buffer": "^5.1.2" } }, - "mdast-util-find-and-replace": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.1.0.tgz", - "integrity": "sha512-1w1jbqAd13oU78QPBf5223+xB+37ecNtQ1JElq2feWols5oEYAl+SgNDnOZipe7NfLemoEt362yUS15/wip4mw==", - "dev": true, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "requires": { - "escape-string-regexp": "^5.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^4.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "dev": true - }, - "unist-util-visit-parents": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-4.1.1.tgz", - "integrity": "sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - } + "errno": "^0.1.3", + "readable-stream": "^2.0.1" } }, - "mdast-util-from-markdown": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.0.0.tgz", - "integrity": "sha512-uj2G60sb7z1PNOeElFwCC9b/Se/lFXuLhVKFOAY2EHz/VvgbupTQRNXPoZl7rGpXYL6BNZgcgaybrlSWbo7n/g==", - "dev": true, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "mdast-util-to-string": "^3.0.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "parse-entities": "^3.0.0", - "unist-util-stringify-position": "^3.0.0" + "source-map": "^0.6.1" }, "dependencies": { - "mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", - "dev": true + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, - "mdast-util-gfm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-1.0.0.tgz", - "integrity": "sha512-JY4qImsTqivQ0Gl3qvdaizCpomFaNrHnjEhNjNNKeNEA5jZHAJDYu1+yO4V9jn4/ti8GrKdAScaT4F71knoxsA==", - "dev": true, - "requires": { - "mdast-util-gfm-autolink-literal": "^1.0.0", - "mdast-util-gfm-strikethrough": "^1.0.0", - "mdast-util-gfm-table": "^1.0.0", - "mdast-util-gfm-task-list-item": "^1.0.0" - } + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true }, - "mdast-util-gfm-autolink-literal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.1.tgz", - "integrity": "sha512-dCUDNYXCytIonTHIUOZXp5S3FWd1XAt6IVH1fBfH6BbUF9U+9m1T9XllfHPvKJCccKNI+0RlYmQJ0rfMTDxEtA==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "ccount": "^2.0.0", - "mdast-util-find-and-replace": "^2.0.0", - "micromark-util-character": "^1.0.0" - } - }, - "mdast-util-gfm-strikethrough": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.0.tgz", - "integrity": "sha512-gM9ipBUdRxYa6Yq1Hd8Otg6jEn/dRxFZ1F9ZX4QHosHOexLGqNZO2dh0A+YFbUEd10RcKjnjb4jOfJJzoXXUew==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.3", - "mdast-util-to-markdown": "^1.0.0" - } - }, - "mdast-util-gfm-table": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.1.tgz", - "integrity": "sha512-NByKuaSg5+M6r9DZBPXFUmhMHGFf9u+WE76EeStN01ghi8hpnydiWBXr+qj0XCRWI7SAMNtEjGvip6zci9axQA==", - "dev": true, - "requires": { - "markdown-table": "^3.0.0", - "mdast-util-to-markdown": "^1.0.0" - } - }, - "mdast-util-gfm-task-list-item": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.0.tgz", - "integrity": "sha512-dwkzOTjQe8JCCHVE3Cb0pLHTYLudf7t9WCAnb20jI8/dW+VHjgWhjtIUVA3oigNkssgjEwX+i+3XesUdCnXGyA==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.3", - "mdast-util-to-markdown": "^1.0.0" - } - }, - "mdast-util-inject": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-inject/-/mdast-util-inject-1.1.0.tgz", - "integrity": "sha1-2wa4tYW+lZotzS+H9HK6m3VvNnU=", - "dev": true, - "requires": { - "mdast-util-to-string": "^1.0.0" - } - }, - "mdast-util-to-markdown": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.2.1.tgz", - "integrity": "sha512-yj0UexEfdH0Zqw9CztzC5+J6OZKgCY6K0ommn56SBlPKIV3NGqk1Wo/zw1Q0e/kHb50wmQ8O9cwbOl7vmaJjxg==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "longest-streak": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "parse-entities": "^3.0.0", - "unist-util-visit": "^4.0.0", - "zwitch": "^2.0.0" - }, - "dependencies": { - "mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", - "dev": true - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "dev": true - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - } - } - }, - "mdast-util-to-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", - "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", - "dev": true - }, - "mdast-util-toc": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-toc/-/mdast-util-toc-6.1.0.tgz", - "integrity": "sha512-0PuqZELXZl4ms1sF7Lqigrqik4Ll3UhbI+jdTrfw7pZ9QPawgl7LD4GQ8MkU7bT/EwiVqChNTbifa2jLLKo76A==", - "dev": true, - "requires": { - "@types/extend": "^3.0.0", - "@types/github-slugger": "^1.0.0", - "@types/mdast": "^3.0.0", - "extend": "^3.0.0", - "github-slugger": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "unist-util-is": "^5.0.0", - "unist-util-visit": "^3.0.0" - }, - "dependencies": { - "mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", - "dev": true - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "dev": true - }, - "unist-util-visit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-3.1.0.tgz", - "integrity": "sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^4.0.0" - } - }, - "unist-util-visit-parents": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-4.1.1.tgz", - "integrity": "sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - } - } - }, - "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" - }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "merge-source-map": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", - "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", - "requires": { - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" }, "mermaid": { "version": "8.12.0", @@ -10928,312 +10364,6 @@ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, - "micromark": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.0.5.tgz", - "integrity": "sha512-QfjERBnPw0G9mxhOCkkbRP0n8SX8lIBLrEKeEVceviUukqVMv3hWE4AgNTOK/W6GWqtPvvIHg2Apl3j1Dxm6aQ==", - "dev": true, - "requires": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "parse-entities": "^3.0.0" - }, - "dependencies": { - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "micromark-core-commonmark": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.1.tgz", - "integrity": "sha512-vEOw8hcQ3nwHkKKNIyP9wBi8M50zjNajtmI+cCUWcVfJS+v5/3WCh4PLKf7PPRZFUutjzl4ZjlHwBWUKfb/SkA==", - "dev": true, - "requires": { - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "parse-entities": "^3.0.0" - } - }, - "micromark-extension-gfm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-1.0.0.tgz", - "integrity": "sha512-OjqbQPL1Vec/4l5hnC8WnMNmWwgrT9JvzR2udqIGrGKecZsdwY9GAWZ5482CuD12SXuHNj8aS8epni6ip0Pwog==", - "dev": true, - "requires": { - "micromark-extension-gfm-autolink-literal": "^1.0.0", - "micromark-extension-gfm-strikethrough": "^1.0.0", - "micromark-extension-gfm-table": "^1.0.0", - "micromark-extension-gfm-tagfilter": "^1.0.0", - "micromark-extension-gfm-task-list-item": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-extension-gfm-autolink-literal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.0.tgz", - "integrity": "sha512-t+K0aPK32mXypVTEKV+WRfoT/Rb7MERDgHZVRr56NXpyQQhgMk72QnK4NljYUlrgbuesH+MxiPQwThzqRDIwvA==", - "dev": true, - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-extension-gfm-strikethrough": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.1.tgz", - "integrity": "sha512-fzGYXWz9HPWH1uHqYwdyR8XpEtuoYVHUjTdPQTnl3ETVZOQe1NXMwE3RA7AMqeON52hG+kO9g1/P1+pLONBSMQ==", - "dev": true, - "requires": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-extension-gfm-table": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.0.tgz", - "integrity": "sha512-OATRuHDgEAT/aaJJRSdU12V+s01kNSnJ0jumdfLq5mPy0F5DkR3zbTSFLH4tjVYM0/kEG6umxIhHY62mFe4z5Q==", - "dev": true, - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-extension-gfm-tagfilter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.0.tgz", - "integrity": "sha512-GGUZhzQrOdHR8RHU2ru6K+4LMlj+pBdNuXRtw5prOflDOk2hHqDB0xEgej1AHJ2VETeycX7tzQh2EmaTUOmSKg==", - "dev": true, - "requires": { - "micromark-util-types": "^1.0.0" - } - }, - "micromark-extension-gfm-task-list-item": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.0.tgz", - "integrity": "sha512-3tkHCq1NNwijtwpjYba9+rl1yvQ4xYg8iQpUAfTJRyq8MtIEsBUF/vW6B9Gh8Qwy1hE2FmpyHhP4jnFAt61zLg==", - "dev": true, - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-factory-destination": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz", - "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==", - "dev": true, - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-factory-label": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.0.tgz", - "integrity": "sha512-XWEucVZb+qBCe2jmlOnWr6sWSY6NHx+wtpgYFsm4G+dufOf6tTQRRo0bdO7XSlGPu5fyjpJenth6Ksnc5Mwfww==", - "dev": true, - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-factory-space": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz", - "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==", - "dev": true, - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-factory-title": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.0.tgz", - "integrity": "sha512-flvC7Gx0dWVWorXuBl09Cr3wB5FTuYec8pMGVySIp2ZlqTcIjN/lFohZcP0EG//krTptm34kozHk7aK/CleCfA==", - "dev": true, - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-factory-whitespace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz", - "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==", - "dev": true, - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-util-character": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz", - "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==", - "dev": true, - "requires": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-util-chunked": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz", - "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==", - "dev": true, - "requires": { - "micromark-util-symbol": "^1.0.0" - } - }, - "micromark-util-classify-character": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz", - "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==", - "dev": true, - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-util-combine-extensions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz", - "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==", - "dev": true, - "requires": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-util-decode-numeric-character-reference": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz", - "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==", - "dev": true, - "requires": { - "micromark-util-symbol": "^1.0.0" - } - }, - "micromark-util-encode": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.0.tgz", - "integrity": "sha512-cJpFVM768h6zkd8qJ1LNRrITfY4gwFt+tziPcIf71Ui8yFzY9wG3snZQqiWVq93PG4Sw6YOtcNiKJfVIs9qfGg==", - "dev": true - }, - "micromark-util-html-tag-name": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.0.0.tgz", - "integrity": "sha512-NenEKIshW2ZI/ERv9HtFNsrn3llSPZtY337LID/24WeLqMzeZhBEE6BQ0vS2ZBjshm5n40chKtJ3qjAbVV8S0g==", - "dev": true - }, - "micromark-util-normalize-identifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz", - "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==", - "dev": true, - "requires": { - "micromark-util-symbol": "^1.0.0" - } - }, - "micromark-util-resolve-all": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz", - "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==", - "dev": true, - "requires": { - "micromark-util-types": "^1.0.0" - } - }, - "micromark-util-sanitize-uri": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.0.0.tgz", - "integrity": "sha512-cCxvBKlmac4rxCGx6ejlIviRaMKZc0fWm5HdCHEeDWRSkn44l6NdYVRyU+0nT1XC72EQJMZV8IPHF+jTr56lAg==", - "dev": true, - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "micromark-util-subtokenize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.0.tgz", - "integrity": "sha512-EsnG2qscmcN5XhkqQBZni/4oQbLFjz9yk3ZM/P8a3YUjwV6+6On2wehr1ALx0MxK3+XXXLTzuBKHDFeDFYRdgQ==", - "dev": true, - "requires": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-util-symbol": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.0.tgz", - "integrity": "sha512-NZA01jHRNCt4KlOROn8/bGi6vvpEmlXld7EHcRH+aYWUfL3Wc8JLUNNlqUMKa0hhz6GrpUWsHtzPmKof57v0gQ==", - "dev": true - }, - "micromark-util-types": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.1.tgz", - "integrity": "sha512-UT0ylWEEy80RFYzK9pEaugTqaxoD/j0Y9WhHpSyitxd99zjoQz7JJ+iKuhPAgOW2MiPSUAx+c09dcqokeyaROA==", - "dev": true - }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -11913,20 +11043,6 @@ "safe-buffer": "^5.1.1" } }, - "parse-entities": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-3.0.0.tgz", - "integrity": "sha512-AJlcIFDNPEP33KyJLguv0xJc83BNvjxwpuUIcetyXUsLpVXAUCePJ5kIoYtEN2R1ac0cYaRu/vk9dVFkewHQhQ==", - "dev": true, - "requires": { - "character-entities": "^2.0.0", - "character-entities-legacy": "^2.0.0", - "character-reference-invalid": "^2.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0", - "is-hexadecimal": "^2.0.0" - } - }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -12851,12 +11967,6 @@ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -13121,64 +12231,6 @@ "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" }, - "remark-behead": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/remark-behead/-/remark-behead-2.3.3.tgz", - "integrity": "sha512-quY6Of8Bwj4pgrG/Qce6a/sMMzFc0XxbfeYko+mPjOScIB+TKw3T0Y2GUcIEL8+xbQgAnCylkPQNt9haCEWK9w==", - "dev": true, - "requires": { - "unist-util-find": "^1.0.1", - "unist-util-find-all-after": "^3.0.1", - "unist-util-find-all-before": "^2.0.5", - "unist-util-find-all-between": "^2.0.0", - "unist-util-visit": "^2.0.3" - } - }, - "remark-gfm": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-2.0.0.tgz", - "integrity": "sha512-waIv4Tjcd2CTUDxKRYzuPyIHw1FoX4H2GjXAzXV9PxQWb+dU4fJivd/FZ+nxyzPARrqTjMIkwIwPoWNbpBhjcQ==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-gfm": "^1.0.0", - "micromark-extension-gfm": "^1.0.0", - "unified": "^10.0.0" - } - }, - "remark-parse": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.0.tgz", - "integrity": "sha512-07ei47p2Xl7Bqbn9H2VYQYirnAFJPwdMuypdozWsSbnmrkgA2e2sZLZdnDNrrsxR4onmIzH/J6KXqKxCuqHtPQ==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "unified": "^10.0.0" - } - }, - "remark-stringify": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-10.0.0.tgz", - "integrity": "sha512-3LAQqJ/qiUxkWc7fUcVuB7RtIT38rvmxfmJG8z1TiE/D8zi3JGQ2tTcTJu9Tptdpb7gFwU0whRi5q1FbFOb9yA==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.0.0", - "unified": "^10.0.0" - } - }, - "remark-toc": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/remark-toc/-/remark-toc-8.0.0.tgz", - "integrity": "sha512-chuNL5FNQL3tj9i/JxQn9yczmaQi7BMj8ml7z79+pMqy4HDNRMv/ST52zYugbLX08bISsUCTdKZ9Nrqii3qYqw==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-toc": "^6.0.0", - "unified": "^10.0.0" - } - }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -13366,12 +12418,6 @@ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, "rgb-regex": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", @@ -13404,15 +12450,6 @@ "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.1.tgz", "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==" }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, "run-queue": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", @@ -14744,18 +13781,6 @@ "punycode": "^2.1.1" } }, - "trim-newlines": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.0.2.tgz", - "integrity": "sha512-GJtWyq9InR/2HRiLZgpIKv+ufIKrVrvjQWEj7PxAXNc5dwbNJkqhAUoAGgzRmULAnoOM5EIpveYd3J2VeSAIew==", - "dev": true - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "dev": true - }, "tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", @@ -14889,35 +13914,6 @@ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "dev": true - } - } - }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -14963,171 +13959,6 @@ "crypto-random-string": "^2.0.0" } }, - "unist-util-find": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unist-util-find/-/unist-util-find-1.0.2.tgz", - "integrity": "sha512-ft06UDYzqi9o9RmGP0sZWI/zvLLQiBW2/MD+rW6mDqbOWDcmknGX9orQPspfuGRYWr8eSJAmfsBcvOpfGRJseA==", - "dev": true, - "requires": { - "lodash.iteratee": "^4.5.0", - "unist-util-visit": "^1.1.0" - }, - "dependencies": { - "unist-util-visit": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", - "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", - "dev": true, - "requires": { - "unist-util-visit-parents": "^2.0.0" - } - } - } - }, - "unist-util-find-all-after": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz", - "integrity": "sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ==", - "dev": true, - "requires": { - "unist-util-is": "^4.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "dev": true - } - } - }, - "unist-util-find-all-before": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/unist-util-find-all-before/-/unist-util-find-all-before-2.0.5.tgz", - "integrity": "sha512-lYakZyw3trON5qbsOsmtRARZTyKcQN8pkoMKLy558Nt8WhlqGAnRSD9qLrISkMKbS+0nhj8LiebgoheUtQXOZw==", - "dev": true, - "requires": { - "unist-util-is": "^4.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "dev": true - } - } - }, - "unist-util-find-all-between": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unist-util-find-all-between/-/unist-util-find-all-between-2.1.0.tgz", - "integrity": "sha512-OCCUtDD8UHKeODw3TPXyFDxPCbpgBzbGTTaDpR68nvxkwiVcawBqMVrokfBMvUi7ij2F5q7S4s4Jq5dvkcBt+w==", - "dev": true, - "requires": { - "unist-util-find": "^1.0.1", - "unist-util-is": "^4.0.2" - }, - "dependencies": { - "unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "dev": true - } - } - }, - "unist-util-is": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", - "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", - "dev": true - }, - "unist-util-remove-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-4.0.1.tgz", - "integrity": "sha512-0yDkppiIhDlPrfHELgB+NLQD5mfjup3a8UYclHruTJWmY74je8g+CIFr79x5f6AkmzSwlvKLbs63hC0meOMowQ==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-visit": "^4.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "dev": true - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - } - } - }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0" - } - }, - "unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "dev": true - }, - "unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } - } - }, - "unist-util-visit-parents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", - "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", - "dev": true, - "requires": { - "unist-util-is": "^3.0.0" - } - }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -15412,36 +14243,6 @@ "extsprintf": "^1.2.0" } }, - "vfile": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.1.0.tgz", - "integrity": "sha512-4o7/DJjEaFPYSh0ckv5kcYkJTHQgCKdL8ozMM1jLAxO9ox95IzveDPXCZp08HamdWq8JXTkClDvfAKaeLQeKtg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true - } - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } - }, "vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", @@ -16497,12 +15298,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/zepto/-/zepto-1.2.0.tgz", "integrity": "sha1-4Se9nmb9hGvl6rSME5SIL3wOT5g=" - }, - "zwitch": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz", - "integrity": "sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==", - "dev": true } } } diff --git a/package.json b/package.json index a4dc595a..6a583791 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,13 @@ { - "name": "dis-edu", + "name": "edu_db_labs_group1", "version": "2.1.0", "main": "index.js", "description": "Databases course work template", - "repository": "https://github.com/boldak/dis-edu", + "repository": "https://github.com/Oksuzova/db-course-theme1", "author": "Andrey Boldak ", "license": "ECL 2.0", "scripts": { - "test":"jest", + "test": "jest", "docs:api": "jsdoc2md src/**/*.js > docs/api/README.md", "docs:dev": "npm run docs:api && npx vuepress dev docs", "docs:build": "npm run docs:api && npx vuepress build docs", @@ -23,5 +23,4 @@ "jest": "^27.1.0", "jsdoc-to-markdown": "^7.0.1" } - } diff --git a/publish.sh b/publish.sh index 8dcaea4c..787f3bda 100644 --- a/publish.sh +++ b/publish.sh @@ -20,6 +20,6 @@ git commit -m 'deploy' # git push -f git@github.com:boldak/.github.io.git master # if you are deploying to https://.github.io/ -git push -f https://github.com/boldak/dis-edu.git master:gh-pages +git push -f https://github.com/Oksuzova/db-course-theme1.git master:gh-pages cd -