From 79f570a22d7ab50a5fd51943b21f72a6f351ab7c Mon Sep 17 00:00:00 2001 From: "jakob.dieterle" <jakob.dieterle@stud.uni-goettingen.de> Date: Fri, 23 Sep 2022 11:55:43 +0000 Subject: [PATCH] Revert "Resolve "Replace Toggle buttons with switches" by making the toggle buttons..." This reverts commit 721d9883a0363e31414cdaf35dcdcebb611e7c74 --- .gitlab-ci.yml | 4 +- frontend/package.json | 1 - .../submission_notes/CorrectionHelpCard.vue | 9 +- .../submission_notes/base/SubmissionLine.vue | 17 +- .../AnnotatedSubmissionTopToolbar.vue | 28 +- .../ToggleFeedbackVisibilityButton.vue | 28 +- frontend/yarn.lock | 69 +- grady/.coveragerc | 14 - grady/.dockerignore | 30 - grady/.editorconfig | 37 - grady/.gitignore | 47 - grady/.gitlab-ci.yml | 240 - grady/.gitlab/issue_templates/Bug.md | 28 - grady/.gitlab/issue_templates/Feature.md | 14 - grady/.pre-commit-config.yaml | 10 - grady/.pylintrc | 20 - grady/Dockerfile | 41 - grady/LICENSE | 21 - grady/Makefile | 43 - grady/Pipfile | 40 - grady/Pipfile.lock | 1129 -- grady/README.md | 247 - grady/core/__init__.py | 1 - grady/core/admin.py | 17 - grady/core/apps.py | 9 - .../management/commands/extractsubmissions.py | 13 - grady/core/management/commands/importer.py | 10 - .../core/management/commands/maketestdata.py | 10 - .../management/commands/replaceusernames.py | 30 - .../commands/setstudentpasswords.py | 44 - grady/core/management/commands/usermod.py | 37 - grady/core/migrations/0001_initial.py | 261 - .../migrations/0002_auto_20191202_1018.py | 22 - .../migrations/0003_auto_20191203_1445.py | 18 - .../core/migrations/0004_feedback_modified.py | 18 - .../migrations/0005_auto_20200707_1456.py | 47 - .../migrations/0005_auto_20200929_1202.py | 19 - .../migrations/0006_auto_20200810_1115.py | 17 - .../migrations/0006_auto_20201027_1234.py | 18 - .../migrations/0007_auto_20200922_1026.py | 23 - .../migrations/0008_auto_20200922_1148.py | 19 - .../0009_submissiontype_exam_type.py | 19 - grady/core/migrations/0010_group_examtype.py | 19 - .../migrations/0011_auto_20201103_1211.py | 18 - .../migrations/0012_auto_20201103_1228.py | 17 - .../migrations/0013_auto_20201103_1248.py | 21 - .../migrations/0014_merge_20201123_1252.py | 14 - grady/core/migrations/0015_group_exam_type.py | 19 - .../migrations/0016_auto_20210902_1140.py | 18 - grady/core/migrations/__init__.py | 0 grady/core/models/__init__.py | 13 - grady/core/models/assignment.py | 111 - grady/core/models/exam_type.py | 44 - grady/core/models/feedback.py | 94 - grady/core/models/group.py | 14 - grady/core/models/label.py | 21 - grady/core/models/student_info.py | 140 - grady/core/models/submission.py | 89 - grady/core/models/submission_type.py | 128 - grady/core/models/test.py | 44 - grady/core/models/user_account.py | 109 - grady/core/permissions.py | 62 - grady/core/serializers/__init__.py | 11 - grady/core/serializers/assignment.py | 73 - grady/core/serializers/common_serializers.py | 104 - grady/core/serializers/feedback.py | 252 - grady/core/serializers/generic.py | 18 - grady/core/serializers/label.py | 14 - grady/core/serializers/student.py | 81 - grady/core/serializers/submission.py | 69 - grady/core/serializers/submission_type.py | 68 - grady/core/serializers/tutor.py | 63 - grady/core/signals.py | 73 - grady/core/templates/index.html | 18 - grady/core/tests/__init__.py | 0 grady/core/tests/test_access_rights.py | 163 - grady/core/tests/test_assignment_views.py | 317 - grady/core/tests/test_auth.py | 71 - grady/core/tests/test_commands.py | 39 - .../core/tests/test_configuration_viewset.py | 58 - grady/core/tests/test_examlist.py | 49 - grady/core/tests/test_export.py | 238 - grady/core/tests/test_factory.py | 52 - grady/core/tests/test_feedback.py | 703 - grady/core/tests/test_functional_views.py | 1 - grady/core/tests/test_import_views.py | 82 - grady/core/tests/test_labels.py | 48 - grady/core/tests/test_student_page.py | 264 - .../tests/test_student_reviewer_viewset.py | 156 - grady/core/tests/test_submissiontypeview.py | 102 - grady/core/tests/test_tutor_api_endpoints.py | 256 - grady/core/tests/test_user_account_views.py | 170 - grady/core/urls.py | 63 - grady/core/views/__init__.py | 7 - grady/core/views/assignment.py | 126 - grady/core/views/common_views.py | 434 - grady/core/views/export.py | 79 - grady/core/views/feedback.py | 123 - grady/core/views/group.py | 14 - grady/core/views/importer.py | 25 - grady/core/views/label.py | 56 - grady/core/views/util.py | 41 - grady/deploy.sh | 13 - grady/docker-compose.yml | 27 - .../Entity Relation Model.erdplus | 1 - .../Database Design/Relational Schema.erdplus | 1 - grady/docs/Database Design/er-model.graphml | 121 - .../erdplus-diagram-pdf-export.pdf | Bin 193138 -> 0 bytes .../erdplus-er-model-export.pdf | Bin 608737 -> 0 bytes grady/docs/core_uml.png | Bin 306987 -> 0 bytes grady/docs/deployment.md | 11 - grady/docs/feedback.api.json | 43 - grady/frontend/.browserslistrc | 3 - grady/frontend/.eslintrc.js | 36 - grady/frontend/.gitignore | 24 - grady/frontend/.postcssrc.js | 5 - grady/frontend/@types/v-clipboard/index.d.ts | 2 - grady/frontend/README.md | 31 - grady/frontend/nightwatch.json | 12 - grady/frontend/nightwatch_globals.js | 3 - grady/frontend/package-lock.json | 12267 ---------------- grady/frontend/package.json | 41 - grady/frontend/src/App.vue | 48 - grady/frontend/src/api.ts | 324 - grady/frontend/src/assets/brand.svg | 241 - grady/frontend/src/assets/fonts.css | 48 - .../src/assets/fonts/Material-Icons.woff2 | Bin 60840 -> 0 bytes .../src/assets/fonts/roboto-black.woff2 | Bin 11012 -> 0 bytes .../src/assets/fonts/roboto-bold.woff2 | Bin 11020 -> 0 bytes .../src/assets/fonts/roboto-light.woff2 | Bin 11180 -> 0 bytes .../src/assets/fonts/roboto-medium.woff2 | Bin 11056 -> 0 bytes .../src/assets/fonts/roboto-regular.woff2 | Bin 11016 -> 0 bytes .../src/assets/fonts/roboto-thin.woff2 | Bin 10984 -> 0 bytes grady/frontend/src/assets/material-icons.css | 23 - grady/frontend/src/class-component-hooks.ts | 8 - grady/frontend/src/components/AutoLogout.vue | 117 - grady/frontend/src/components/BaseLayout.vue | 199 - grady/frontend/src/components/ChangeLog.vue | 91 - .../src/components/CorrectionStatistics.vue | 73 - .../src/components/FreeLocksButton.vue | 54 - grady/frontend/src/components/GDPRNotice.vue | 151 - .../frontend/src/components/ImportDialog.vue | 108 - .../src/components/InstanceActions.vue | 75 - .../src/components/LabelStatistics.vue | 159 - .../frontend/src/components/MathRenderer.vue | 51 - .../src/components/PasswordChangeDialog.vue | 147 - .../src/components/RegisterDialog.vue | 149 - .../src/components/SubmissionTests.vue | 72 - .../frontend/src/components/TwoPaneLayout.vue | 52 - grady/frontend/src/components/UserOptions.vue | 87 - .../src/components/export/DataExport.vue | 116 - .../src/components/export/ExportDialog.vue | 95 - .../src/components/export/InstanceExport.vue | 94 - .../feedback_labels/FeedbackLabel.vue | 38 - .../feedback_labels/FeedbackLabelForm.vue | 175 - .../feedback_labels/FeedbackLabelList.vue | 36 - .../feedback_labels/FeedbackLabelTab.vue | 115 - .../feedback_labels/FeedbackLabelUpdater.vue | 70 - .../feedback_labels/LabelSelector.vue | 229 - .../feedback_list/FeedbackListHelpCard.vue | 58 - .../feedback_list/FeedbackSearchOptions.vue | 192 - .../feedback_list/FeedbackTable.vue | 203 - .../instance_config/ConfigDialog.vue | 110 - .../components/mixins/commentLabelSelector.ts | 132 - .../src/components/mixins/exportMixin.ts | 100 - .../components/student/ExamInformation.vue | 40 - .../src/components/student/SubmissionList.vue | 76 - .../components/student_list/StudentList.vue | 324 - .../student_list/StudentListHelpCard.vue | 31 - .../student_list/StudentListMenu.vue | 94 - .../student_list/StudentListReverseMapper.vue | 45 - .../submission_notes/CorrectionHelpCard.vue | 37 - .../RouteChangeConfirmation.vue | 70 - .../submission_notes/SubmissionCorrection.vue | 257 - .../base/BaseAnnotatedSubmission.vue | 38 - .../submission_notes/base/CommentForm.vue | 154 - .../submission_notes/base/FeedbackComment.vue | 340 - .../submission_notes/base/SubmissionLine.vue | 90 - .../AnnotatedSubmissionBottomToolbar.vue | 227 - .../AnnotatedSubmissionTopToolbar.vue | 239 - .../ToggleFeedbackVisibilityButton.vue | 39 - .../submission_type/SubmissionType.vue | 174 - .../SubmissionTypesOverview.vue | 85 - .../submission_type/solution/Solution.vue | 219 - .../solution/SolutionComment.vue | 238 - .../subscriptions/SubscriptionEnded.vue | 43 - .../subscriptions/SubscriptionForList.vue | 74 - .../subscriptions/SubscriptionList.vue | 189 - .../subscriptions/SubscriptionsForStage.vue | 48 - .../src/components/tutor_list/RoleSelect.vue | 48 - .../src/components/tutor_list/TutorList.vue | 224 - grady/frontend/src/main.ts | 38 - grady/frontend/src/models.ts | 922 -- .../frontend/src/pages/ExamSelectionPage.vue | 121 - grady/frontend/src/pages/LayoutSelector.vue | 58 - grady/frontend/src/pages/Login.vue | 158 - grady/frontend/src/pages/PageNotFound.vue | 46 - .../frontend/src/pages/StartPageSelector.vue | 39 - grady/frontend/src/pages/Statistics.vue | 29 - .../src/pages/StudentSubmissionSideView.vue | 109 - .../src/pages/SubscriptionWorkPage.vue | 124 - .../src/pages/base/FeedbackHistoryPage.vue | 35 - .../pages/base/TutorReviewerBaseLayout.vue | 79 - .../src/pages/reviewer/ReviewerLayout.vue | 52 - .../src/pages/reviewer/ReviewerStartPage.vue | 93 - .../pages/reviewer/StudentOverviewPage.vue | 74 - .../src/pages/reviewer/TutorOverviewPage.vue | 24 - .../src/pages/student/StudentLayout.vue | 95 - .../src/pages/student/StudentPage.vue | 47 - .../pages/student/StudentSubmissionPage.vue | 195 - .../frontend/src/pages/tutor/TutorLayout.vue | 37 - .../src/pages/tutor/TutorStartPage.vue | 39 - grady/frontend/src/router/index.ts | 191 - grady/frontend/src/shims-tsx.d.ts | 14 - grady/frontend/src/shims-vue.d.ts | 4 - grady/frontend/src/store/actions.ts | 103 - grady/frontend/src/store/getters.ts | 30 - grady/frontend/src/store/grady_speak.ts | 25 - .../frontend/src/store/modules/assignments.ts | 193 - .../src/store/modules/authentication.ts | 143 - grady/frontend/src/store/modules/config.ts | 61 - .../src/store/modules/feedback-labels.ts | 60 - .../modules/feedback_list/feedback-table.ts | 108 - .../src/store/modules/student-page.ts | 92 - .../src/store/modules/submission-notes.ts | 266 - .../src/store/modules/tutor-overview.ts | 71 - grady/frontend/src/store/modules/ui.ts | 38 - grady/frontend/src/store/mutations.ts | 85 - grady/frontend/src/store/store.ts | 94 - grady/frontend/src/util/form-rules.ts | 5 - grady/frontend/src/util/helpers.ts | 173 - grady/frontend/src/util/interceptor.ts | 23 - grady/frontend/src/util/shortkeys.ts | 26 - grady/frontend/tsconfig.json | 42 - grady/frontend/vue.config.js | 23 - grady/frontend/yarn.lock | 8283 ----------- grady/functional_tests/.gitignore | 3 - grady/functional_tests/__init__.py | 0 grady/functional_tests/data/hektor.json | 36 - grady/functional_tests/test_auto_logout.py | 66 - grady/functional_tests/test_export_modal.py | 143 - .../test_feedback_creation.py | 357 - .../test_feedback_label_system.py | 386 - .../functional_tests/test_feedback_update.py | 80 - grady/functional_tests/test_front_pages.py | 100 - grady/functional_tests/test_import.py | 45 - grady/functional_tests/test_login_page.py | 160 - grady/functional_tests/test_multiple_exams.py | 161 - .../test_solution_comments.py | 141 - grady/functional_tests/util.py | 221 - grady/grady/settings/__init__.py | 8 - grady/grady/settings/default.py | 230 - grady/grady/settings/live.py | 70 - grady/grady/settings/test.py | 4 - grady/grady/settings/url_hack.py | 17 - grady/grady/urls.py | 16 - grady/grady/wsgi.py | 16 - grady/manage.py | 22 - grady/settings/live.py | 4 +- grady/setup.cfg | 7 - grady/swagger-api-specification.json | 1 - grady/util/__init__.py | 0 grady/util/factories.py | 525 - grady/util/factory_boys.py | 115 - grady/util/format_index.py | 16 - grady/util/importer.py | 225 - grady/util/messages.py | 26 - grady/yarn.lock | 4 - 268 files changed, 80 insertions(+), 44161 deletions(-) delete mode 100644 grady/.coveragerc delete mode 100644 grady/.dockerignore delete mode 100644 grady/.editorconfig delete mode 100644 grady/.gitignore delete mode 100644 grady/.gitlab-ci.yml delete mode 100644 grady/.gitlab/issue_templates/Bug.md delete mode 100644 grady/.gitlab/issue_templates/Feature.md delete mode 100644 grady/.pre-commit-config.yaml delete mode 100644 grady/.pylintrc delete mode 100644 grady/Dockerfile delete mode 100644 grady/LICENSE delete mode 100644 grady/Makefile delete mode 100644 grady/Pipfile delete mode 100644 grady/Pipfile.lock delete mode 100644 grady/README.md delete mode 100644 grady/core/__init__.py delete mode 100644 grady/core/admin.py delete mode 100644 grady/core/apps.py delete mode 100644 grady/core/management/commands/extractsubmissions.py delete mode 100644 grady/core/management/commands/importer.py delete mode 100644 grady/core/management/commands/maketestdata.py delete mode 100644 grady/core/management/commands/replaceusernames.py delete mode 100644 grady/core/management/commands/setstudentpasswords.py delete mode 100644 grady/core/management/commands/usermod.py delete mode 100644 grady/core/migrations/0001_initial.py delete mode 100644 grady/core/migrations/0002_auto_20191202_1018.py delete mode 100644 grady/core/migrations/0003_auto_20191203_1445.py delete mode 100644 grady/core/migrations/0004_feedback_modified.py delete mode 100644 grady/core/migrations/0005_auto_20200707_1456.py delete mode 100644 grady/core/migrations/0005_auto_20200929_1202.py delete mode 100644 grady/core/migrations/0006_auto_20200810_1115.py delete mode 100644 grady/core/migrations/0006_auto_20201027_1234.py delete mode 100644 grady/core/migrations/0007_auto_20200922_1026.py delete mode 100644 grady/core/migrations/0008_auto_20200922_1148.py delete mode 100644 grady/core/migrations/0009_submissiontype_exam_type.py delete mode 100644 grady/core/migrations/0010_group_examtype.py delete mode 100644 grady/core/migrations/0011_auto_20201103_1211.py delete mode 100644 grady/core/migrations/0012_auto_20201103_1228.py delete mode 100644 grady/core/migrations/0013_auto_20201103_1248.py delete mode 100644 grady/core/migrations/0014_merge_20201123_1252.py delete mode 100644 grady/core/migrations/0015_group_exam_type.py delete mode 100644 grady/core/migrations/0016_auto_20210902_1140.py delete mode 100644 grady/core/migrations/__init__.py delete mode 100644 grady/core/models/__init__.py delete mode 100644 grady/core/models/assignment.py delete mode 100644 grady/core/models/exam_type.py delete mode 100644 grady/core/models/feedback.py delete mode 100644 grady/core/models/group.py delete mode 100644 grady/core/models/label.py delete mode 100644 grady/core/models/student_info.py delete mode 100644 grady/core/models/submission.py delete mode 100644 grady/core/models/submission_type.py delete mode 100644 grady/core/models/test.py delete mode 100644 grady/core/models/user_account.py delete mode 100644 grady/core/permissions.py delete mode 100644 grady/core/serializers/__init__.py delete mode 100644 grady/core/serializers/assignment.py delete mode 100644 grady/core/serializers/common_serializers.py delete mode 100644 grady/core/serializers/feedback.py delete mode 100644 grady/core/serializers/generic.py delete mode 100644 grady/core/serializers/label.py delete mode 100644 grady/core/serializers/student.py delete mode 100644 grady/core/serializers/submission.py delete mode 100644 grady/core/serializers/submission_type.py delete mode 100644 grady/core/serializers/tutor.py delete mode 100644 grady/core/signals.py delete mode 100644 grady/core/templates/index.html delete mode 100644 grady/core/tests/__init__.py delete mode 100644 grady/core/tests/test_access_rights.py delete mode 100644 grady/core/tests/test_assignment_views.py delete mode 100644 grady/core/tests/test_auth.py delete mode 100644 grady/core/tests/test_commands.py delete mode 100644 grady/core/tests/test_configuration_viewset.py delete mode 100644 grady/core/tests/test_examlist.py delete mode 100644 grady/core/tests/test_export.py delete mode 100644 grady/core/tests/test_factory.py delete mode 100644 grady/core/tests/test_feedback.py delete mode 100644 grady/core/tests/test_functional_views.py delete mode 100644 grady/core/tests/test_import_views.py delete mode 100644 grady/core/tests/test_labels.py delete mode 100644 grady/core/tests/test_student_page.py delete mode 100644 grady/core/tests/test_student_reviewer_viewset.py delete mode 100644 grady/core/tests/test_submissiontypeview.py delete mode 100644 grady/core/tests/test_tutor_api_endpoints.py delete mode 100644 grady/core/tests/test_user_account_views.py delete mode 100644 grady/core/urls.py delete mode 100644 grady/core/views/__init__.py delete mode 100644 grady/core/views/assignment.py delete mode 100644 grady/core/views/common_views.py delete mode 100644 grady/core/views/export.py delete mode 100644 grady/core/views/feedback.py delete mode 100644 grady/core/views/group.py delete mode 100644 grady/core/views/importer.py delete mode 100644 grady/core/views/label.py delete mode 100644 grady/core/views/util.py delete mode 100755 grady/deploy.sh delete mode 100644 grady/docker-compose.yml delete mode 100644 grady/docs/Database Design/Entity Relation Model.erdplus delete mode 100644 grady/docs/Database Design/Relational Schema.erdplus delete mode 100644 grady/docs/Database Design/er-model.graphml delete mode 100644 grady/docs/Database Design/erdplus-diagram-pdf-export.pdf delete mode 100644 grady/docs/Database Design/erdplus-er-model-export.pdf delete mode 100644 grady/docs/core_uml.png delete mode 100644 grady/docs/deployment.md delete mode 100644 grady/docs/feedback.api.json delete mode 100644 grady/frontend/.browserslistrc delete mode 100644 grady/frontend/.eslintrc.js delete mode 100644 grady/frontend/.gitignore delete mode 100644 grady/frontend/.postcssrc.js delete mode 100644 grady/frontend/@types/v-clipboard/index.d.ts delete mode 100644 grady/frontend/README.md delete mode 100644 grady/frontend/nightwatch.json delete mode 100644 grady/frontend/nightwatch_globals.js delete mode 100644 grady/frontend/package-lock.json delete mode 100644 grady/frontend/package.json delete mode 100644 grady/frontend/src/App.vue delete mode 100644 grady/frontend/src/api.ts delete mode 100644 grady/frontend/src/assets/brand.svg delete mode 100644 grady/frontend/src/assets/fonts.css delete mode 100644 grady/frontend/src/assets/fonts/Material-Icons.woff2 delete mode 100644 grady/frontend/src/assets/fonts/roboto-black.woff2 delete mode 100644 grady/frontend/src/assets/fonts/roboto-bold.woff2 delete mode 100644 grady/frontend/src/assets/fonts/roboto-light.woff2 delete mode 100644 grady/frontend/src/assets/fonts/roboto-medium.woff2 delete mode 100644 grady/frontend/src/assets/fonts/roboto-regular.woff2 delete mode 100644 grady/frontend/src/assets/fonts/roboto-thin.woff2 delete mode 100644 grady/frontend/src/assets/material-icons.css delete mode 100644 grady/frontend/src/class-component-hooks.ts delete mode 100644 grady/frontend/src/components/AutoLogout.vue delete mode 100644 grady/frontend/src/components/BaseLayout.vue delete mode 100644 grady/frontend/src/components/ChangeLog.vue delete mode 100644 grady/frontend/src/components/CorrectionStatistics.vue delete mode 100644 grady/frontend/src/components/FreeLocksButton.vue delete mode 100644 grady/frontend/src/components/GDPRNotice.vue delete mode 100644 grady/frontend/src/components/ImportDialog.vue delete mode 100644 grady/frontend/src/components/InstanceActions.vue delete mode 100644 grady/frontend/src/components/LabelStatistics.vue delete mode 100644 grady/frontend/src/components/MathRenderer.vue delete mode 100644 grady/frontend/src/components/PasswordChangeDialog.vue delete mode 100644 grady/frontend/src/components/RegisterDialog.vue delete mode 100644 grady/frontend/src/components/SubmissionTests.vue delete mode 100644 grady/frontend/src/components/TwoPaneLayout.vue delete mode 100644 grady/frontend/src/components/UserOptions.vue delete mode 100644 grady/frontend/src/components/export/DataExport.vue delete mode 100644 grady/frontend/src/components/export/ExportDialog.vue delete mode 100644 grady/frontend/src/components/export/InstanceExport.vue delete mode 100644 grady/frontend/src/components/feedback_labels/FeedbackLabel.vue delete mode 100644 grady/frontend/src/components/feedback_labels/FeedbackLabelForm.vue delete mode 100644 grady/frontend/src/components/feedback_labels/FeedbackLabelList.vue delete mode 100644 grady/frontend/src/components/feedback_labels/FeedbackLabelTab.vue delete mode 100644 grady/frontend/src/components/feedback_labels/FeedbackLabelUpdater.vue delete mode 100644 grady/frontend/src/components/feedback_labels/LabelSelector.vue delete mode 100644 grady/frontend/src/components/feedback_list/FeedbackListHelpCard.vue delete mode 100644 grady/frontend/src/components/feedback_list/FeedbackSearchOptions.vue delete mode 100644 grady/frontend/src/components/feedback_list/FeedbackTable.vue delete mode 100644 grady/frontend/src/components/instance_config/ConfigDialog.vue delete mode 100644 grady/frontend/src/components/mixins/commentLabelSelector.ts delete mode 100644 grady/frontend/src/components/mixins/exportMixin.ts delete mode 100644 grady/frontend/src/components/student/ExamInformation.vue delete mode 100644 grady/frontend/src/components/student/SubmissionList.vue delete mode 100644 grady/frontend/src/components/student_list/StudentList.vue delete mode 100644 grady/frontend/src/components/student_list/StudentListHelpCard.vue delete mode 100644 grady/frontend/src/components/student_list/StudentListMenu.vue delete mode 100644 grady/frontend/src/components/student_list/StudentListReverseMapper.vue delete mode 100644 grady/frontend/src/components/submission_notes/CorrectionHelpCard.vue delete mode 100644 grady/frontend/src/components/submission_notes/RouteChangeConfirmation.vue delete mode 100644 grady/frontend/src/components/submission_notes/SubmissionCorrection.vue delete mode 100644 grady/frontend/src/components/submission_notes/base/BaseAnnotatedSubmission.vue delete mode 100644 grady/frontend/src/components/submission_notes/base/CommentForm.vue delete mode 100644 grady/frontend/src/components/submission_notes/base/FeedbackComment.vue delete mode 100644 grady/frontend/src/components/submission_notes/base/SubmissionLine.vue delete mode 100644 grady/frontend/src/components/submission_notes/toolbars/AnnotatedSubmissionBottomToolbar.vue delete mode 100644 grady/frontend/src/components/submission_notes/toolbars/AnnotatedSubmissionTopToolbar.vue delete mode 100644 grady/frontend/src/components/submission_notes/toolbars/ToggleFeedbackVisibilityButton.vue delete mode 100644 grady/frontend/src/components/submission_type/SubmissionType.vue delete mode 100644 grady/frontend/src/components/submission_type/SubmissionTypesOverview.vue delete mode 100644 grady/frontend/src/components/submission_type/solution/Solution.vue delete mode 100644 grady/frontend/src/components/submission_type/solution/SolutionComment.vue delete mode 100644 grady/frontend/src/components/subscriptions/SubscriptionEnded.vue delete mode 100644 grady/frontend/src/components/subscriptions/SubscriptionForList.vue delete mode 100644 grady/frontend/src/components/subscriptions/SubscriptionList.vue delete mode 100644 grady/frontend/src/components/subscriptions/SubscriptionsForStage.vue delete mode 100644 grady/frontend/src/components/tutor_list/RoleSelect.vue delete mode 100644 grady/frontend/src/components/tutor_list/TutorList.vue delete mode 100644 grady/frontend/src/main.ts delete mode 100644 grady/frontend/src/models.ts delete mode 100644 grady/frontend/src/pages/ExamSelectionPage.vue delete mode 100644 grady/frontend/src/pages/LayoutSelector.vue delete mode 100644 grady/frontend/src/pages/Login.vue delete mode 100644 grady/frontend/src/pages/PageNotFound.vue delete mode 100644 grady/frontend/src/pages/StartPageSelector.vue delete mode 100644 grady/frontend/src/pages/Statistics.vue delete mode 100644 grady/frontend/src/pages/StudentSubmissionSideView.vue delete mode 100644 grady/frontend/src/pages/SubscriptionWorkPage.vue delete mode 100644 grady/frontend/src/pages/base/FeedbackHistoryPage.vue delete mode 100644 grady/frontend/src/pages/base/TutorReviewerBaseLayout.vue delete mode 100644 grady/frontend/src/pages/reviewer/ReviewerLayout.vue delete mode 100644 grady/frontend/src/pages/reviewer/ReviewerStartPage.vue delete mode 100644 grady/frontend/src/pages/reviewer/StudentOverviewPage.vue delete mode 100644 grady/frontend/src/pages/reviewer/TutorOverviewPage.vue delete mode 100644 grady/frontend/src/pages/student/StudentLayout.vue delete mode 100644 grady/frontend/src/pages/student/StudentPage.vue delete mode 100644 grady/frontend/src/pages/student/StudentSubmissionPage.vue delete mode 100644 grady/frontend/src/pages/tutor/TutorLayout.vue delete mode 100644 grady/frontend/src/pages/tutor/TutorStartPage.vue delete mode 100644 grady/frontend/src/router/index.ts delete mode 100644 grady/frontend/src/shims-tsx.d.ts delete mode 100644 grady/frontend/src/shims-vue.d.ts delete mode 100644 grady/frontend/src/store/actions.ts delete mode 100644 grady/frontend/src/store/getters.ts delete mode 100644 grady/frontend/src/store/grady_speak.ts delete mode 100644 grady/frontend/src/store/modules/assignments.ts delete mode 100644 grady/frontend/src/store/modules/authentication.ts delete mode 100644 grady/frontend/src/store/modules/config.ts delete mode 100644 grady/frontend/src/store/modules/feedback-labels.ts delete mode 100644 grady/frontend/src/store/modules/feedback_list/feedback-table.ts delete mode 100644 grady/frontend/src/store/modules/student-page.ts delete mode 100644 grady/frontend/src/store/modules/submission-notes.ts delete mode 100644 grady/frontend/src/store/modules/tutor-overview.ts delete mode 100644 grady/frontend/src/store/modules/ui.ts delete mode 100644 grady/frontend/src/store/mutations.ts delete mode 100644 grady/frontend/src/store/store.ts delete mode 100644 grady/frontend/src/util/form-rules.ts delete mode 100644 grady/frontend/src/util/helpers.ts delete mode 100644 grady/frontend/src/util/interceptor.ts delete mode 100644 grady/frontend/src/util/shortkeys.ts delete mode 100644 grady/frontend/tsconfig.json delete mode 100644 grady/frontend/vue.config.js delete mode 100644 grady/frontend/yarn.lock delete mode 100644 grady/functional_tests/.gitignore delete mode 100644 grady/functional_tests/__init__.py delete mode 100644 grady/functional_tests/data/hektor.json delete mode 100644 grady/functional_tests/test_auto_logout.py delete mode 100644 grady/functional_tests/test_export_modal.py delete mode 100644 grady/functional_tests/test_feedback_creation.py delete mode 100644 grady/functional_tests/test_feedback_label_system.py delete mode 100644 grady/functional_tests/test_feedback_update.py delete mode 100644 grady/functional_tests/test_front_pages.py delete mode 100644 grady/functional_tests/test_import.py delete mode 100644 grady/functional_tests/test_login_page.py delete mode 100644 grady/functional_tests/test_multiple_exams.py delete mode 100644 grady/functional_tests/test_solution_comments.py delete mode 100644 grady/functional_tests/util.py delete mode 100644 grady/grady/settings/__init__.py delete mode 100644 grady/grady/settings/default.py delete mode 100644 grady/grady/settings/live.py delete mode 100644 grady/grady/settings/test.py delete mode 100644 grady/grady/settings/url_hack.py delete mode 100644 grady/grady/urls.py delete mode 100644 grady/grady/wsgi.py delete mode 100755 grady/manage.py delete mode 100644 grady/setup.cfg delete mode 100644 grady/swagger-api-specification.json delete mode 100644 grady/util/__init__.py delete mode 100644 grady/util/factories.py delete mode 100644 grady/util/factory_boys.py delete mode 100644 grady/util/format_index.py delete mode 100644 grady/util/importer.py delete mode 100644 grady/util/messages.py delete mode 100644 grady/yarn.lock diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 095a9f5a..a235b565 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -82,12 +82,10 @@ build_test_image: - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY - docker pull $DEV_IMAGE_BASE || true - docker build --network=host --cache-from $DEV_IMAGE_BASE -t $DEV_IMAGE_BASE --target node . - - docker push $DEV_IMAGE_BASE - - docker image prune --filter label=stage=intermediate - docker pull $DEV_IMAGE || true - docker build --network=host --cache-from $DEV_IMAGE --cache-from $DEV_IMAGE_BASE -t $DEV_IMAGE . + - docker push $DEV_IMAGE_BASE - docker push $DEV_IMAGE - - docker image prune --filter label=stage=intermediate tags: - docker interruptible: true diff --git a/frontend/package.json b/frontend/package.json index ef5d5cd8..6ed231a3 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -13,7 +13,6 @@ "axios": "^0.18.0", "file-saver": "^2.0.2", "highlight.js": "^9.12.0", - "marked": "^4.0.18", "v-clipboard": "^2.0.1", "vue": "^2.6.12", "vue-class-component": "^6.0.0", diff --git a/frontend/src/components/submission_notes/CorrectionHelpCard.vue b/frontend/src/components/submission_notes/CorrectionHelpCard.vue index 21783f53..0be45efe 100644 --- a/frontend/src/components/submission_notes/CorrectionHelpCard.vue +++ b/frontend/src/components/submission_notes/CorrectionHelpCard.vue @@ -5,13 +5,6 @@ <h3>Tips on using the correction interface</h3> </v-card-title> <v-card-text> - Markdown is rendered by default. <br> - Select the math button to choose to have math rendered or not. <br> - In case you need the un-rendered markdown, click the "Copy to Clipboard" button. <br> - Cick on the individual line numbers in order to add comments for a specific line. <br> - After adding feedback to a line, clicking the "Hide feedback" button will hide it or show it. <br> - When feedback is hidden, the lines that contain feedback will be highlighted in red. <br> - <!-- ------THE OLD FLAVOR TEXT, SAVED IN CASE IT IS NEEDED FOR SOME REASON ------- Never trade an ale. The sea-dog leads with yellow fever, crush the captain's quarters until it waves.<br> Ho-ho-ho! malaria of life.<br> @@ -26,7 +19,7 @@ The scallywag loots with passion, crush the bikini atoll before it falls.<br> The sea leads with treasure, ransack the brig until it dies.<br> The parrot robs with desolation, view the seychelles before it screams.<br> - The warm anchor quirky blows the landlubber.<br> --> + The warm anchor quirky blows the landlubber.<br> </v-card-text> </v-card> </template> diff --git a/frontend/src/components/submission_notes/base/SubmissionLine.vue b/frontend/src/components/submission_notes/base/SubmissionLine.vue index 48d25b9f..ee553796 100644 --- a/frontend/src/components/submission_notes/base/SubmissionLine.vue +++ b/frontend/src/components/submission_notes/base/SubmissionLine.vue @@ -16,12 +16,7 @@ </td> <td class="code-cell-content pl-2"> <!-- eslint-disable-next-line --> - <span - :key="key" - class="code-line" - v-html="html" - /> - + <span class="code-line" :key="key" v-html="code"/> <slot /> </td> </div> @@ -51,9 +46,7 @@ export default { }, data () { return { - key: 0, - html: '', - markdowned: true + key: 0 } }, computed: { @@ -65,10 +58,6 @@ export default { subNotesEventBus.$on('resetSubmission', () => { this.key++ }) - const { marked } = require('marked') - this.html = marked.parse(this.code) - - }, methods: { toggleEditor () { @@ -88,7 +77,7 @@ export default { } .code-line { - white-space: normal; + white-space: pre-wrap; font-family: monospace; } diff --git a/frontend/src/components/submission_notes/toolbars/AnnotatedSubmissionTopToolbar.vue b/frontend/src/components/submission_notes/toolbars/AnnotatedSubmissionTopToolbar.vue index c576b0f0..4f42298d 100644 --- a/frontend/src/components/submission_notes/toolbars/AnnotatedSubmissionTopToolbar.vue +++ b/frontend/src/components/submission_notes/toolbars/AnnotatedSubmissionTopToolbar.vue @@ -24,32 +24,11 @@ <v-spacer /> <toggle-feedback-visibility-button /> <div v-if="isMarkdown"> - <v-btn - v-if="mathIsRendered" - large - text - color="info" - title="Math is being rendered" - :style="{backgroundColor: '#cce7ff'}" - @click="$emit('input', !mathIsRendered)" - > - <v-icon> - functions - </v-icon> - </v-btn> - <v-btn - v-else - large - text - color="grey" - title="Math is not being rendered" - @click="$emit('input', !mathIsRendered)" - > - <v-icon> - functions - </v-icon> + <v-btn @click="$emit('input', !mathIsRendered)"> + {{ mathIsRendered ? 'Reset Math' : 'Render Math' }} </v-btn> </div> + <v-spacer /> <v-tooltip v-if="sourceCodeAvailable" top @@ -80,7 +59,6 @@ <v-btn v-if="showClipboard" icon - text v-on="on" @click="copyToClipboard" > diff --git a/frontend/src/components/submission_notes/toolbars/ToggleFeedbackVisibilityButton.vue b/frontend/src/components/submission_notes/toolbars/ToggleFeedbackVisibilityButton.vue index 05b5587a..453a5ea8 100644 --- a/frontend/src/components/submission_notes/toolbars/ToggleFeedbackVisibilityButton.vue +++ b/frontend/src/components/submission_notes/toolbars/ToggleFeedbackVisibilityButton.vue @@ -1,32 +1,16 @@ <template> <v-btn - v-if="showFeedback" id="feedback-visibility-toggle" - class="me-3" text color="info" - large - title="Feedback is on" - :style="{backgroundColor: '#cce7ff'}" @click="showFeedback = !showFeedback" > - <v-icon> - rate_review - </v-icon> - </v-btn> - <v-btn - v-else - id="feedback-visibility-toggle" - class="me-3" - text - large - color="grey" - title="Feedback is off" - @click="showFeedback = !showFeedback" - > - <v-icon> - rate_review - </v-icon> + <div v-if="showFeedback"> + Hide Feedback + </div> + <div v-else> + Show Feedback + </div> </v-btn> </template> diff --git a/frontend/yarn.lock b/frontend/yarn.lock index 9e0f0a76..f13a22aa 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -2416,7 +2416,7 @@ domain-browser@^1.1.1: resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== -domelementtype@1: +domelementtype@1, domelementtype@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== @@ -2569,6 +2569,26 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + errno@^0.1.3, errno@~0.1.7: version "0.1.8" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" @@ -4278,6 +4298,48 @@ is-negative-zero@^2.0.1: resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== +is-number-object@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" + integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== + dependencies: + has-tostringtag "^1.0.0" + +is-negative-zero@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + +is-number-object@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" + integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== + +is-negative-zero@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + +is-number-object@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" + integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== + +is-negative-zero@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + +is-number-object@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" + integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== + +is-negative-zero@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + is-number-object@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" @@ -4772,11 +4834,6 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -marked@^4.0.18: - version "4.0.18" - resolved "https://registry.yarnpkg.com/marked/-/marked-4.0.18.tgz#cd0ac54b2e5610cfb90e8fd46ccaa8292c9ed569" - integrity sha512-wbLDJ7Zh0sqA0Vdg6aqlbT+yPxqLblpAZh1mK2+AO2twQkPywvvqQNfEPVwSSRjZ7dZcdeVBIAgiO7MMp3Dszw== - md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" diff --git a/grady/.coveragerc b/grady/.coveragerc deleted file mode 100644 index f578fcfa..00000000 --- a/grady/.coveragerc +++ /dev/null @@ -1,14 +0,0 @@ -[run] -branch = True -source = core,util.factories -omit = - core/migrations/* - core/apps.py - core/admin.py - core/tests/* - -[report] -ignore_errors = False - -[html] -directory = public diff --git a/grady/.dockerignore b/grady/.dockerignore deleted file mode 100644 index 41a3cce3..00000000 --- a/grady/.dockerignore +++ /dev/null @@ -1,30 +0,0 @@ -# Common -.git -Dockerfile - -# Django -*/db.sqlite3 -*/__pycache__* -*.pyc -*.pyo -*.pyd -*/env* -.venv -.ipynb_checkpoints -pip-log.txt -pip-delete-this-directory.txt -.tox -.coverage -.coverage.* -.cache -coverage.xml -*,cover -*.log -static/ -public/ - - -# node -*/node_modules -*/npm-debug.log -*/dist diff --git a/grady/.editorconfig b/grady/.editorconfig deleted file mode 100644 index 73622a70..00000000 --- a/grady/.editorconfig +++ /dev/null @@ -1,37 +0,0 @@ - -# top-most EditorConfig file -root = true - -# Unix-style newlines with a newline ending every file -[*] -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true - -# Python specific settigs -[*.py] -indent_style = space -indent_size = 4 -charset = utf-8 - -# html specific settigs -[*.html] -indent_style = space -indent_size = 2 -charset = utf-8 - -# Tab indentation (no size specified) -[Makefile] -indent_style = tab - -# Matches the exact files either package.json or .travis.yml -[{package.json,.travis.yml}] -indent_style = space -indent_size = 2 - -# Frontend -[*.{js,jsx,ts,tsx,vue}] -indent_style = space -indent_size = 2 -trim_trailing_whitespace = true -insert_final_newline = true diff --git a/grady/.gitignore b/grady/.gitignore deleted file mode 100644 index efc87898..00000000 --- a/grady/.gitignore +++ /dev/null @@ -1,47 +0,0 @@ -# python specific -*.DS_Store -*.egg-info -*.pot -*.py[co] -.tox/ -*.ipynb -.ipynb_checkpoints/ -__pycache__ -MANIFEST -.coverage -cache/ -.mypy_cache/ - -# Django specific -dist/ -docs/_build/ -docs/locale/ -tests/coverage_html/ -tests/.coverage -build/ -tests/report/ -*.sqlite3 -static/ - -# project specific -env-grady/ -env/ -.venv/ -scripts/ -coverage_html/ -.public/ -*.csv -.importer* -*.sublime-* -.idea/ -.vscode/ -anon-export/ -public/ -geckodriver.log -.screenshots - -# node -node_modules -secret -dump.sql -.pytest_cache/ diff --git a/grady/.gitlab-ci.yml b/grady/.gitlab-ci.yml deleted file mode 100644 index a235b565..00000000 --- a/grady/.gitlab-ci.yml +++ /dev/null @@ -1,240 +0,0 @@ -stages: - - build - - test - - build_image - - pages - - staging - -variables: - WORKON_HOME: .pipenv/venvs - PIP_CACHE_DIR: .pipenv/pipcache - DEV_IMAGE: $CI_REGISTRY_IMAGE/dev-image - DEV_IMAGE_BASE: $CI_REGISTRY_IMAGE/dev-image-base - RELEASE_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG - DOCKER_DRIVER: overlay2 - DOCKER_TLS_CERTDIR: "" - POSTGRES_DB: $CI_POSTGRES_DB - POSTGRES_USER: $CI_POSTGRES_USER - POSTGRES_PASSWORD: $CI_POSTGRES_PASSWORD - -include: - template: Dependency-Scanning.gitlab-ci.yml - -cache: - key: "pip-cache" - paths: - - "$PIP_CACHE_DIR" - - # ========================== Build Testing section =========================== # -build_test_env: - image: python:3.8 - stage: build - script: - - pip install pipenv - - pipenv install --dev - artifacts: - paths: - - .pipenv - expire_in: 1 day - cache: - key: "$CI_PIPELINE_ID" - paths: - - "$WORKON_HOME" - tags: - - docker - interruptible: true - - -build_frontend: - image: node:fermium - stage: build - variables: - VUE_APP_CI: 'true' - script: - - cd frontend - - yarn - - yarn build - artifacts: - paths: - - frontend/dist - - frontend/node_modules/ - expire_in: 1 days - cache: - key: "$CI_PIPELINE_ID" - paths: - - frontend/dist - - frontend/node_modules/ - tags: - - docker - interruptible: true - -build_test_image: - image: docker:latest - stage: build - only: - - branches - services: - - docker:dind - variables: - DOCKER_HOST: tcp://docker:2375/ - DOCKER_DRIVER: overlay2 - script: - - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY - - docker pull $DEV_IMAGE_BASE || true - - docker build --network=host --cache-from $DEV_IMAGE_BASE -t $DEV_IMAGE_BASE --target node . - - docker pull $DEV_IMAGE || true - - docker build --network=host --cache-from $DEV_IMAGE --cache-from $DEV_IMAGE_BASE -t $DEV_IMAGE . - - docker push $DEV_IMAGE_BASE - - docker push $DEV_IMAGE - tags: - - docker - interruptible: true - -# ============================== Testing section ============================= # -# ----------------------------- Backend subsection --------------------------- # -.test_template_virtualenv: &test_definition_virtualenv - image: python:3.8 - before_script: - - pip install pipenv - - VENV=$(pipenv --venv) - - source $VENV/bin/activate - dependencies: - - build_test_env - cache: - key: "$CI_PIPELINE_ID" - tags: - - docker - interruptible: true - needs: - - build_test_env - -test_pytest: - <<: *test_definition_virtualenv - stage: test - services: - - postgres:13 - script: - - pytest --cov --ds=grady.settings.test core/tests - artifacts: - paths: - - .coverage - cache: - key: "$CI_JOB_NAME" - paths: - - .coverage - -test_flake8: - <<: *test_definition_virtualenv - stage: test - script: - - flake8 --exclude=migrations core util functional_tests - -# ----------------------------- Frontend subsection -------------------------- # -.test_template_frontend: &test_definition_frontend - image: docker.gitlab.gwdg.de/grady-corp/python-geckodriver:master - before_script: - - pip install pipenv - - VENV=$(pipenv --venv) - - source $VENV/bin/activate - dependencies: - - build_test_env - - build_frontend - cache: - key: "$CI_PIPELINE_ID" - tags: - - docker - interruptible: true - needs: - - build_frontend - - build_test_env - -test_frontend: - <<: *test_definition_frontend - stage: test - services: - - postgres:13 - script: - - cp frontend/dist/index.html core/templates - - python util/format_index.py - - python manage.py collectstatic --no-input - - HEADLESS_TESTS=True pytest --ds=grady.settings.test functional_tests - artifacts: - paths: - - functional_tests/screenshots/ - when: on_failure - expire_in: 30 days - retry: 2 - -# =========================== Build Image section ============================ # - -build_release_image: - image: docker:latest - stage: build_image - only: - - tags - services: - - docker:dind - variables: - DOCKER_HOST: tcp://docker:2375/ - DOCKER_DRIVER: overlay2 - script: - - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY - - docker pull $DEV_IMAGE_BASE || true - - docker pull $DEV_IMAGE || true - - docker build --cache-from $DEV_IMAGE --cache-from $DEV_IMAGE_BASE -t $RELEASE_IMAGE . - - docker push $RELEASE_IMAGE - tags: - - docker - -# =========================== Gitlab pages section =========================== # -pages: - <<: *test_definition_virtualenv - stage: - pages - script: - - coverage html -d public - dependencies: - - test_pytest - - build_test_env - artifacts: - paths: - - public - only: - - master - interruptible: true - needs: - - test_pytest - - build_test_env - -# ============================== Staging section ============================= # -.staging_template: &staging_definition - stage: staging - image: docker:latest - only: - - master - when: manual - before_script: - - apk add --update py-pip && pip install docker-compose - tags: - - grady-staging - -staging: - <<: *staging_definition - environment: - name: review/$CI_COMMIT_REF_NAME - url: https://staging.grady.janmax.org - on_stop: staging_stop - script: - - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY - - docker-compose stop - - docker-compose pull - - docker-compose up -d --force-recreate - -staging_stop: - <<: *staging_definition - script: - - docker-compose rm --force --stop - when: manual - environment: - name: review/$CI_COMMIT_REF_NAME - action: stop diff --git a/grady/.gitlab/issue_templates/Bug.md b/grady/.gitlab/issue_templates/Bug.md deleted file mode 100644 index 34f76c3a..00000000 --- a/grady/.gitlab/issue_templates/Bug.md +++ /dev/null @@ -1,28 +0,0 @@ -#### Summary - - - -#### Steps to reproduce - - - -#### Example Project - - - -#### What is the current bug behavior? - - - -#### What is the expected correct behavior? - - - -#### Relevant logs and/or screenshots - - - -#### Possible fixes - -/label Bug -/label ~"Needs assignment" diff --git a/grady/.gitlab/issue_templates/Feature.md b/grady/.gitlab/issue_templates/Feature.md deleted file mode 100644 index 000831fe..00000000 --- a/grady/.gitlab/issue_templates/Feature.md +++ /dev/null @@ -1,14 +0,0 @@ -### Description / Overview - -### Use cases - -(Who is this for?) - -### Links / references - -### Feature checklist - -(Make sure these are completed before closing the issue, with a link to the -relevant commit.) - -/label ~"Feature proposal" diff --git a/grady/.pre-commit-config.yaml b/grady/.pre-commit-config.yaml deleted file mode 100644 index 16e0bdac..00000000 --- a/grady/.pre-commit-config.yaml +++ /dev/null @@ -1,10 +0,0 @@ -- repo: git@github.com:pre-commit/pre-commit-hooks - sha: v1.1.1 - hooks: - - id: trailing-whitespace - - id: end-of-file-fixer - - id: debug-statements - - id: flake8 - args: - - --exclude=*/migrations/*,docs/*,grady/* - - id: check-added-large-files diff --git a/grady/.pylintrc b/grady/.pylintrc deleted file mode 100644 index 2bfbcef1..00000000 --- a/grady/.pylintrc +++ /dev/null @@ -1,20 +0,0 @@ -[MASTER] - -# Add files or directories to the blacklist. They should be base names, not -# paths. -ignore=CVS, migrations, static, env, docs, manage.py - -# Use multiple processes to speed up Pylint. -jobs=4 - -# Pickle collected data for later comparisons. -persistent=yes - -# When enabled, pylint would attempt to guess common misconfiguration and emit -# user-friendly hints instead of false-positive error messages -suggestion-mode=yes - -# List of plugins (as comma separated values of python modules names) to load, -# usually to register additional checkers. -load-plugins=pylint_django - diff --git a/grady/Dockerfile b/grady/Dockerfile deleted file mode 100644 index 36d0e47d..00000000 --- a/grady/Dockerfile +++ /dev/null @@ -1,41 +0,0 @@ -FROM node:fermium as node - -WORKDIR /app/ -COPY frontend/package.json . -COPY frontend/yarn.lock . -RUN yarn - -# CACHED -COPY frontend/ . -RUN yarn build - -FROM alpine:edge - -WORKDIR /code - -# This set is needed otherwise the postgres driver wont work -RUN apk update \ - && apk add build-base gcc curl libzmq musl-dev zeromq-dev python3 python3-dev py3-pip \ - && apk add --no-cache postgresql-dev git - -# Create symlink for python -RUN ln -sf python3 /usr/bin/python - -RUN pip install pipenv -COPY Pipfile . -COPY Pipfile.lock . -RUN pipenv install --system --deploy && rm -rf /root/.cache - -# CACHED -COPY . . -COPY --from=node /app/dist /code/frontend/dist -COPY --from=node /app/dist/index.html /code/core/templates/index.html - -ENV PYTHONUNBUFFERED 1 -RUN python util/format_index.py -RUN python manage.py collectstatic --noinput - -# Reduces image size -RUN apk del build-base musl-dev python3-dev zeromq-dev - -CMD ["./deploy.sh"] diff --git a/grady/LICENSE b/grady/LICENSE deleted file mode 100644 index 9b744fc0..00000000 --- a/grady/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 Jan Maximilian Michal - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/grady/Makefile b/grady/Makefile deleted file mode 100644 index ba608333..00000000 --- a/grady/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -APP_LIST ?= core grady util -DB_NAME = postgres - -.ONESHELL: - -.PHONY: run install migrations-check isort isort-check test teste2e - -run: - python manage.py runserver 0.0.0.0:8000 - -migrations-check: - python manage.py makemigrations --check --dry-run - -isort: - isort -rc $(APP_LIST) - -isort-check: - isort -c -rc $(APP_LIST) - -migrate: - python manage.py migrate - -test: - pytest --ds=grady.settings core/tests - -frontend/dist: $(shell find frontend/src -type f) - yarn --cwd frontend build - -teste2e: frontend/dist - set -e - cp frontend/dist/index.html core/templates - trap "git checkout core/templates/index.html" EXIT - python util/format_index.py - python manage.py collectstatic --no-input - HEADLESS_TESTS=$(headless) pytest --ds=grady.settings $(path) - -coverage: - set -e - DJANGO_SETTINGS_MODULE=grady.settings pytest --cov - coverage html - -db: - docker run -d --name $(DB_NAME) -p 5432:5432 -e POSTGRES_PASSWORD=postgres postgres:13 diff --git a/grady/Pipfile b/grady/Pipfile deleted file mode 100644 index cf502961..00000000 --- a/grady/Pipfile +++ /dev/null @@ -1,40 +0,0 @@ -[[source]] -name = "pypi" -url = "https://pypi.org/simple" -verify_ssl = true - -[dev-packages] -flake8 = "~=3.9.0" -pre-commit = "~=1.13.0" -pytest = "~=6.1.0" -pytest-cov = "~=2.10.1" -pytest-xdist = "~=2.1.0" -pytest-django = "~=3.10.0" -selenium = "~=3.141.0" -factory-boy = "~=3.0.1" -Faker = "~=4.1.3" - -[packages] -pyzmq = "~=22.3.0" -django-cors-headers = "~=3.5.0" -django-extensions = "~=3.0.9" -djangorestframework-jwt = "~=1.11.0" -djangorestframework = "~=3.11.0" -django-silk = "~=4.1.0" -djangorestframework-camel-case = {git = "https://gitlab.gwdg.de/grady-corp/djangorestframework-camel-case.git"} -drf-yasg = "~=1.17.1" -gunicorn = "~=20.0.4" -psycopg2-binary = "~=2.8.6" -whitenoise = "~=5.2.0" -xlrd = "~=1.2.0" -JSON-log-formatter = "~=0.3.0" -xkcdpass = "~=1.17.3" -django-constance = {extras = ["database"],version = "~=2.7.0"} -semver = "~=2.10.2" -Django = "~=3.1.1" -nbformat = "~=5.0.7" -nbconvert = "~=6.4.5" - - -[requires] -python_version = "3.8" diff --git a/grady/Pipfile.lock b/grady/Pipfile.lock deleted file mode 100644 index 90161f53..00000000 --- a/grady/Pipfile.lock +++ /dev/null @@ -1,1129 +0,0 @@ -{ - "_meta": { - "hash": { - "sha256": "29b8205fd2ddf3d002a61251a9f6750cc38666561e5cbf5350ff9f3403079c7d" - }, - "pipfile-spec": 6, - "requires": { - "python_version": "3.8" - }, - "sources": [ - { - "name": "pypi", - "url": "https://pypi.org/simple", - "verify_ssl": true - } - ] - }, - "default": { - "asgiref": { - "hashes": [ - "sha256:45a429524fba18aba9d512498b19d220c4d628e75b40cf5c627524dbaebc5cc1", - "sha256:fddeea3c53fa99d0cdb613c3941cc6e52d822491fc2753fba25768fb5bf4e865" - ], - "markers": "python_version >= '3.7'", - "version": "==3.5.1" - }, - "attrs": { - "hashes": [ - "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4", - "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==21.4.0" - }, - "autopep8": { - "hashes": [ - "sha256:44f0932855039d2c15c4510d6df665e4730f2b8582704fa48f9c55bd3e17d979", - "sha256:ed77137193bbac52d029a52c59bec1b0629b5a186c495f1eb21b126ac466083f" - ], - "version": "==1.6.0" - }, - "beautifulsoup4": { - "hashes": [ - "sha256:58d5c3d29f5a36ffeb94f02f0d786cd53014cf9b3b3951d42e0080d8a9498d30", - "sha256:ad9aa55b65ef2808eb405f46cf74df7fcb7044d5cbc26487f96eb2ef2e436693" - ], - "markers": "python_version >= '3.6'", - "version": "==4.11.1" - }, - "bleach": { - "hashes": [ - "sha256:08a1fe86d253b5c88c92cc3d810fd8048a16d15762e1e5b74d502256e5926aa1", - "sha256:c6d6cc054bdc9c83b48b8083e236e5f00f238428666d2ce2e083eaa5fd568565" - ], - "markers": "python_version >= '3.7'", - "version": "==5.0.0" - }, - "certifi": { - "hashes": [ - "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872", - "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569" - ], - "version": "==2021.10.8" - }, - "charset-normalizer": { - "hashes": [ - "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597", - "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df" - ], - "markers": "python_version >= '3'", - "version": "==2.0.12" - }, - "coreapi": { - "hashes": [ - "sha256:46145fcc1f7017c076a2ef684969b641d18a2991051fddec9458ad3f78ffc1cb", - "sha256:bf39d118d6d3e171f10df9ede5666f63ad80bba9a29a8ec17726a66cf52ee6f3" - ], - "version": "==2.3.3" - }, - "coreschema": { - "hashes": [ - "sha256:5e6ef7bf38c1525d5e55a895934ab4273548629f16aed5c0a6caa74ebf45551f", - "sha256:9503506007d482ab0867ba14724b93c18a33b22b6d19fb419ef2d239dd4a1607" - ], - "version": "==0.0.4" - }, - "defusedxml": { - "hashes": [ - "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", - "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==0.7.1" - }, - "django": { - "hashes": [ - "sha256:0fabc786489af16ad87a8c170ba9d42bfd23f7b699bd5ef05675864e8d012859", - "sha256:72a4a5a136a214c39cf016ccdd6b69e2aa08c7479c66d93f3a9b5e4bb9d8a347" - ], - "index": "pypi", - "version": "==3.1.14" - }, - "django-constance": { - "extras": [ - "database" - ], - "hashes": [ - "sha256:62bdb1a3aef20d80e18d832b30ffcc6626762c538817a5a3571bcefa5a55c849", - "sha256:866a7356d3f8ee08374285e97c1edae70edaa3df6eaf7b2e9699f7cde8a88f3b" - ], - "index": "pypi", - "version": "==2.7.0" - }, - "django-cors-headers": { - "hashes": [ - "sha256:9322255c296d5f75089571f29e520c83ff9693df17aa3cf9f6a4bea7c6740169", - "sha256:db82b2840f667d47872ae3e4a4e0a0d72fbecb42779b8aa233fa8bb965f7836a" - ], - "index": "pypi", - "version": "==3.5.0" - }, - "django-extensions": { - "hashes": [ - "sha256:6809c89ca952f0e08d4e0766bc0101dfaf508d7649aced1180c091d737046ea7", - "sha256:dc663652ac9460fd06580a973576820430c6d428720e874ae46b041fa63e0efa" - ], - "index": "pypi", - "version": "==3.0.9" - }, - "django-picklefield": { - "hashes": [ - "sha256:15ccba592ca953b9edf9532e64640329cd47b136b7f8f10f2939caa5f9ce4287", - "sha256:3c702a54fde2d322fe5b2f39b8f78d9f655b8f77944ab26f703be6c0ed335a35" - ], - "version": "==3.0.1" - }, - "django-silk": { - "hashes": [ - "sha256:a331e55618fa62eaf3cf5a63f31bc1e91205efbeeca5e587c577498b0e251ed8" - ], - "index": "pypi", - "version": "==4.1.0" - }, - "djangorestframework": { - "hashes": [ - "sha256:5cc724dc4b076463497837269107e1995b1fbc917468d1b92d188fd1af9ea789", - "sha256:a5967b68a04e0d97d10f4df228e30f5a2d82ba63b9d03e1759f84993b7bf1b53" - ], - "index": "pypi", - "version": "==3.11.2" - }, - "djangorestframework-camel-case": { - "git": "https://gitlab.gwdg.de/grady-corp/djangorestframework-camel-case.git", - "ref": "39ae6bbde19d3fadc5b60505395c51f44b22a069" - }, - "djangorestframework-jwt": { - "hashes": [ - "sha256:5efe33032f3a4518a300dc51a51c92145ad95fb6f4b272e5aa24701db67936a7", - "sha256:ab15dfbbe535eede8e2e53adaf52ef0cf018ee27dbfad10cbc4cbec2ab63d38c" - ], - "index": "pypi", - "version": "==1.11.0" - }, - "drf-yasg": { - "hashes": [ - "sha256:5572e9d5baab9f6b49318169df9789f7399d0e3c7bdac8fdb8dfccf1d5d2b1ca", - "sha256:7d7af27ad16e18507e9392b2afd6b218fbffc432ec8dbea053099a2241e184ff" - ], - "index": "pypi", - "version": "==1.17.1" - }, - "entrypoints": { - "hashes": [ - "sha256:b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4", - "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f" - ], - "markers": "python_version >= '3.6'", - "version": "==0.4" - }, - "gprof2dot": { - "hashes": [ - "sha256:1223189383b53dcc8ecfd45787ac48c0ed7b4dbc16ee8b88695d053eea1acabf" - ], - "version": "==2021.2.21" - }, - "gunicorn": { - "hashes": [ - "sha256:1904bb2b8a43658807108d59c3f3d56c2b6121a701161de0ddf9ad140073c626", - "sha256:cd4a810dd51bf497552cf3f863b575dabd73d6ad6a91075b65936b151cbf4f9c" - ], - "index": "pypi", - "version": "==20.0.4" - }, - "idna": { - "hashes": [ - "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff", - "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d" - ], - "markers": "python_version >= '3'", - "version": "==3.3" - }, - "importlib-resources": { - "hashes": [ - "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3", - "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8" - ], - "markers": "python_version < '3.9'", - "version": "==5.7.1" - }, - "inflection": { - "hashes": [ - "sha256:1a29730d366e996aaacffb2f1f1cb9593dc38e2ddd30c91250c6dde09ea9b417", - "sha256:f38b2b640938a4f35ade69ac3d053042959b62a0f1076a5bbaa1b9526605a8a2" - ], - "markers": "python_version >= '3.5'", - "version": "==0.5.1" - }, - "ipython-genutils": { - "hashes": [ - "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8", - "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8" - ], - "version": "==0.2.0" - }, - "itypes": { - "hashes": [ - "sha256:03da6872ca89d29aef62773672b2d408f490f80db48b23079a4b194c86dd04c6", - "sha256:af886f129dea4a2a1e3d36595a2d139589e4dd287f5cab0b40e799ee81570ff1" - ], - "version": "==1.2.0" - }, - "jinja2": { - "hashes": [ - "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852", - "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61" - ], - "markers": "python_version >= '3.7'", - "version": "==3.1.2" - }, - "json-log-formatter": { - "hashes": [ - "sha256:03029bddba697d2f6c81419a80f1c58d3a89ae715336c6a88b370e7d2c983198" - ], - "index": "pypi", - "version": "==0.3.1" - }, - "jsonschema": { - "hashes": [ - "sha256:71b5e39324422543546572954ce71c67728922c104902cb7ce252e522235b33f", - "sha256:7c6d882619340c3347a1bf7315e147e6d3dae439033ae6383d6acb908c101dfc" - ], - "markers": "python_version >= '3.7'", - "version": "==4.5.1" - }, - "jupyter-client": { - "hashes": [ - "sha256:05d4ff6a0ade25138c6bb0fbeac7ddc26b5fe835e7dd816b64b4a45b931bdc0b", - "sha256:404abe552540aff3527e66e16beb114b6b4ff58479d51a301f4eb9701e4f52ef" - ], - "markers": "python_version >= '3.7'", - "version": "==7.3.1" - }, - "jupyter-core": { - "hashes": [ - "sha256:a6de44b16b7b31d7271130c71a6792c4040f077011961138afed5e5e73181aec", - "sha256:e7f5212177af7ab34179690140f188aa9bf3d322d8155ed972cbded19f55b6f3" - ], - "markers": "python_version >= '3.7'", - "version": "==4.10.0" - }, - "jupyterlab-pygments": { - "hashes": [ - "sha256:2405800db07c9f770863bcf8049a529c3dd4d3e28536638bd7c1c01d2748309f", - "sha256:7405d7fde60819d905a9fa8ce89e4cd830e318cdad22a0030f7a901da705585d" - ], - "markers": "python_version >= '3.7'", - "version": "==0.2.2" - }, - "markupsafe": { - "hashes": [ - "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003", - "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88", - "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5", - "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7", - "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a", - "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603", - "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1", - "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135", - "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247", - "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6", - "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601", - "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77", - "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02", - "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e", - "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63", - "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f", - "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980", - "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b", - "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812", - "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff", - "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96", - "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1", - "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925", - "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a", - "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6", - "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e", - "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f", - "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4", - "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f", - "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3", - "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c", - "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a", - "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417", - "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a", - "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a", - "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37", - "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452", - "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933", - "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a", - "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7" - ], - "markers": "python_version >= '3.7'", - "version": "==2.1.1" - }, - "mistune": { - "hashes": [ - "sha256:59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e", - "sha256:88a1051873018da288eee8538d476dffe1262495144b33ecb586c4ab266bb8d4" - ], - "version": "==0.8.4" - }, - "nbclient": { - "hashes": [ - "sha256:40c52c9b5e3c31faecaee69f202b3f53e38d7c1c563de0fadde9d7eda0fdafe8", - "sha256:47ac905af59379913c1f8f541098d2550153cf8dc58553cbe18c702b181518b0" - ], - "markers": "python_version >= '3.7'", - "version": "==0.5.13" - }, - "nbconvert": { - "hashes": [ - "sha256:21163a8e2073c07109ca8f398836e45efdba2aacea68d6f75a8a545fef070d4e", - "sha256:e01d219f55cc79f9701c834d605e8aa3acf35725345d3942e3983937f368ce14" - ], - "index": "pypi", - "version": "==6.4.5" - }, - "nbformat": { - "hashes": [ - "sha256:aa9450c16d29286dc69b92ea4913c1bffe86488f90184445996ccc03a2f60382", - "sha256:f545b22138865bfbcc6b1ffe89ed5a2b8e2dc5d4fe876f2ca60d8e6f702a30f8" - ], - "index": "pypi", - "version": "==5.0.8" - }, - "nest-asyncio": { - "hashes": [ - "sha256:b98e3ec1b246135e4642eceffa5a6c23a3ab12c82ff816a92c612d68205813b2", - "sha256:e442291cd942698be619823a17a86a5759eabe1f8613084790de189fe9e16d65" - ], - "markers": "python_version >= '3.5'", - "version": "==1.5.5" - }, - "packaging": { - "hashes": [ - "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb", - "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522" - ], - "markers": "python_version >= '3.6'", - "version": "==21.3" - }, - "pandocfilters": { - "hashes": [ - "sha256:0b679503337d233b4339a817bfc8c50064e2eff681314376a47cb582305a7a38", - "sha256:33aae3f25fd1a026079f5d27bdd52496f0e0803b3469282162bafdcbdf6ef14f" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.5.0" - }, - "psycopg2-binary": { - "hashes": [ - "sha256:0deac2af1a587ae12836aa07970f5cb91964f05a7c6cdb69d8425ff4c15d4e2c", - "sha256:0e4dc3d5996760104746e6cfcdb519d9d2cd27c738296525d5867ea695774e67", - "sha256:11b9c0ebce097180129e422379b824ae21c8f2a6596b159c7659e2e5a00e1aa0", - "sha256:15978a1fbd225583dd8cdaf37e67ccc278b5abecb4caf6b2d6b8e2b948e953f6", - "sha256:1fabed9ea2acc4efe4671b92c669a213db744d2af8a9fc5d69a8e9bc14b7a9db", - "sha256:2dac98e85565d5688e8ab7bdea5446674a83a3945a8f416ad0110018d1501b94", - "sha256:42ec1035841b389e8cc3692277a0bd81cdfe0b65d575a2c8862cec7a80e62e52", - "sha256:6422f2ff0919fd720195f64ffd8f924c1395d30f9a495f31e2392c2efafb5056", - "sha256:6a32f3a4cb2f6e1a0b15215f448e8ce2da192fd4ff35084d80d5e39da683e79b", - "sha256:7312e931b90fe14f925729cde58022f5d034241918a5c4f9797cac62f6b3a9dd", - "sha256:7d92a09b788cbb1aec325af5fcba9fed7203897bbd9269d5691bb1e3bce29550", - "sha256:833709a5c66ca52f1d21d41865a637223b368c0ee76ea54ca5bad6f2526c7679", - "sha256:89705f45ce07b2dfa806ee84439ec67c5d9a0ef20154e0e475e2b2ed392a5b83", - "sha256:8cd0fb36c7412996859cb4606a35969dd01f4ea34d9812a141cd920c3b18be77", - "sha256:950bc22bb56ee6ff142a2cb9ee980b571dd0912b0334aa3fe0fe3788d860bea2", - "sha256:a0c50db33c32594305b0ef9abc0cb7db13de7621d2cadf8392a1d9b3c437ef77", - "sha256:a0eb43a07386c3f1f1ebb4dc7aafb13f67188eab896e7397aa1ee95a9c884eb2", - "sha256:aaa4213c862f0ef00022751161df35804127b78adf4a2755b9f991a507e425fd", - "sha256:ac0c682111fbf404525dfc0f18a8b5f11be52657d4f96e9fcb75daf4f3984859", - "sha256:ad20d2eb875aaa1ea6d0f2916949f5c08a19c74d05b16ce6ebf6d24f2c9f75d1", - "sha256:b4afc542c0ac0db720cf516dd20c0846f71c248d2b3d21013aa0d4ef9c71ca25", - "sha256:b8a3715b3c4e604bcc94c90a825cd7f5635417453b253499664f784fc4da0152", - "sha256:ba28584e6bca48c59eecbf7efb1576ca214b47f05194646b081717fa628dfddf", - "sha256:ba381aec3a5dc29634f20692349d73f2d21f17653bda1decf0b52b11d694541f", - "sha256:bd1be66dde2b82f80afb9459fc618216753f67109b859a361cf7def5c7968729", - "sha256:c2507d796fca339c8fb03216364cca68d87e037c1f774977c8fc377627d01c71", - "sha256:cec7e622ebc545dbb4564e483dd20e4e404da17ae07e06f3e780b2dacd5cee66", - "sha256:d14b140a4439d816e3b1229a4a525df917d6ea22a0771a2a78332273fd9528a4", - "sha256:d1b4ab59e02d9008efe10ceabd0b31e79519da6fb67f7d8e8977118832d0f449", - "sha256:d5227b229005a696cc67676e24c214740efd90b148de5733419ac9aaba3773da", - "sha256:e1f57aa70d3f7cc6947fd88636a481638263ba04a742b4a37dd25c373e41491a", - "sha256:e74a55f6bad0e7d3968399deb50f61f4db1926acf4a6d83beaaa7df986f48b1c", - "sha256:e82aba2188b9ba309fd8e271702bd0d0fc9148ae3150532bbb474f4590039ffb", - "sha256:ee69dad2c7155756ad114c02db06002f4cded41132cc51378e57aad79cc8e4f4", - "sha256:f5ab93a2cb2d8338b1674be43b442a7f544a0971da062a5da774ed40587f18f5" - ], - "index": "pypi", - "version": "==2.8.6" - }, - "pycodestyle": { - "hashes": [ - "sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20", - "sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==2.8.0" - }, - "pygments": { - "hashes": [ - "sha256:5eb116118f9612ff1ee89ac96437bb6b49e8f04d8a13b514ba26f620208e26eb", - "sha256:dc9c10fb40944260f6ed4c688ece0cd2048414940f1cea51b8b226318411c519" - ], - "markers": "python_version >= '3.6'", - "version": "==2.12.0" - }, - "pyjwt": { - "hashes": [ - "sha256:5c6eca3c2940464d106b99ba83b00c6add741c9becaec087fb7ccdefea71350e", - "sha256:8d59a976fb773f3e6a39c85636357c4f0e242707394cadadd9814f5cbaa20e96" - ], - "version": "==1.7.1" - }, - "pyparsing": { - "hashes": [ - "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb", - "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc" - ], - "markers": "python_full_version >= '3.6.8'", - "version": "==3.0.9" - }, - "pyrsistent": { - "hashes": [ - "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c", - "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc", - "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e", - "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26", - "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec", - "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286", - "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045", - "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec", - "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8", - "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c", - "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca", - "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22", - "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a", - "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96", - "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc", - "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1", - "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07", - "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6", - "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b", - "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5", - "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6" - ], - "markers": "python_version >= '3.7'", - "version": "==0.18.1" - }, - "python-dateutil": { - "hashes": [ - "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", - "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2.8.2" - }, - "pytz": { - "hashes": [ - "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7", - "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c" - ], - "version": "==2022.1" - }, - "pyzmq": { - "hashes": [ - "sha256:08c4e315a76ef26eb833511ebf3fa87d182152adf43dedee8d79f998a2162a0b", - "sha256:0ca6cd58f62a2751728016d40082008d3b3412a7f28ddfb4a2f0d3c130f69e74", - "sha256:1621e7a2af72cced1f6ec8ca8ca91d0f76ac236ab2e8828ac8fe909512d566cb", - "sha256:18cd854b423fce44951c3a4d3e686bac8f1243d954f579e120a1714096637cc0", - "sha256:2841997a0d85b998cbafecb4183caf51fd19c4357075dfd33eb7efea57e4c149", - "sha256:2b97502c16a5ec611cd52410bdfaab264997c627a46b0f98d3f666227fd1ea2d", - "sha256:3a4c9886d61d386b2b493377d980f502186cd71d501fffdba52bd2a0880cef4f", - "sha256:3c1895c95be92600233e476fe283f042e71cf8f0b938aabf21b7aafa62a8dac9", - "sha256:42abddebe2c6a35180ca549fadc7228d23c1e1f76167c5ebc8a936b5804ea2df", - "sha256:468bd59a588e276961a918a3060948ae68f6ff5a7fa10bb2f9160c18fe341067", - "sha256:480b9931bfb08bf8b094edd4836271d4d6b44150da051547d8c7113bf947a8b0", - "sha256:53f4fd13976789ffafedd4d46f954c7bb01146121812b72b4ddca286034df966", - "sha256:62bcade20813796c426409a3e7423862d50ff0639f5a2a95be4b85b09a618666", - "sha256:67db33bea0a29d03e6eeec55a8190e033318cee3cbc732ba8fd939617cbf762d", - "sha256:6b217b8f9dfb6628f74b94bdaf9f7408708cb02167d644edca33f38746ca12dd", - "sha256:7661fc1d5cb73481cf710a1418a4e1e301ed7d5d924f91c67ba84b2a1b89defd", - "sha256:76c532fd68b93998aab92356be280deec5de8f8fe59cd28763d2cc8a58747b7f", - "sha256:79244b9e97948eaf38695f4b8e6fc63b14b78cc37f403c6642ba555517ac1268", - "sha256:7c58f598d9fcc52772b89a92d72bf8829c12d09746a6d2c724c5b30076c1f11d", - "sha256:7dc09198e4073e6015d9a8ea093fc348d4e59de49382476940c3dd9ae156fba8", - "sha256:80e043a89c6cadefd3a0712f8a1322038e819ebe9dbac7eca3bce1721bcb63bf", - "sha256:851977788b9caa8ed011f5f643d3ee8653af02c5fc723fa350db5125abf2be7b", - "sha256:8eddc033e716f8c91c6a2112f0a8ebc5e00532b4a6ae1eb0ccc48e027f9c671c", - "sha256:902319cfe23366595d3fa769b5b751e6ee6750a0a64c5d9f757d624b2ac3519e", - "sha256:954e73c9cd4d6ae319f1c936ad159072b6d356a92dcbbabfd6e6204b9a79d356", - "sha256:ab888624ed68930442a3f3b0b921ad7439c51ba122dbc8c386e6487a658e4a4e", - "sha256:acebba1a23fb9d72b42471c3771b6f2f18dcd46df77482612054bd45c07dfa36", - "sha256:b4ebed0977f92320f6686c96e9e8dd29eed199eb8d066936bac991afc37cbb70", - "sha256:badb868fff14cfd0e200eaa845887b1011146a7d26d579aaa7f966c203736b92", - "sha256:be4e0f229cf3a71f9ecd633566bd6f80d9fa6afaaff5489492be63fe459ef98c", - "sha256:c0f84360dcca3481e8674393bdf931f9f10470988f87311b19d23cda869bb6b7", - "sha256:c1e41b32d6f7f9c26bc731a8b529ff592f31fc8b6ef2be9fa74abd05c8a342d7", - "sha256:c88fa7410e9fc471e0858638f403739ee869924dd8e4ae26748496466e27ac59", - "sha256:cf98fd7a6c8aaa08dbc699ffae33fd71175696d78028281bc7b832b26f00ca57", - "sha256:d072f7dfbdb184f0786d63bda26e8a0882041b1e393fbe98940395f7fab4c5e2", - "sha256:d1b5d457acbadcf8b27561deeaa386b0217f47626b29672fa7bd31deb6e91e1b", - "sha256:d3dcb5548ead4f1123851a5ced467791f6986d68c656bc63bfff1bf9e36671e2", - "sha256:d6157793719de168b199194f6b6173f0ccd3bf3499e6870fac17086072e39115", - "sha256:d728b08448e5ac3e4d886b165385a262883c34b84a7fe1166277fe675e1c197a", - "sha256:de8df0684398bd74ad160afdc2a118ca28384ac6f5e234eb0508858d8d2d9364", - "sha256:e6a02cf7271ee94674a44f4e62aa061d2d049001c844657740e156596298b70b", - "sha256:ea12133df25e3a6918718fbb9a510c6ee5d3fdd5a346320421aac3882f4feeea", - "sha256:ea5a79e808baef98c48c884effce05c31a0698c1057de8fc1c688891043c1ce1", - "sha256:f43b4a2e6218371dd4f41e547bd919ceeb6ebf4abf31a7a0669cd11cd91ea973", - "sha256:f762442bab706fd874064ca218b33a1d8e40d4938e96c24dafd9b12e28017f45", - "sha256:f89468059ebc519a7acde1ee50b779019535db8dcf9b8c162ef669257fef7a93", - "sha256:f907c7359ce8bf7f7e63c82f75ad0223384105f5126f313400b7e8004d9b33c3" - ], - "index": "pypi", - "version": "==22.3.0" - }, - "requests": { - "hashes": [ - "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61", - "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==2.27.1" - }, - "ruamel.yaml": { - "hashes": [ - "sha256:742b35d3d665023981bd6d16b3d24248ce5df75fdb4e2924e93a05c1f8b61ca7", - "sha256:8b7ce697a2f212752a35c1ac414471dc16c424c9573be4926b56ff3f5d23b7af" - ], - "markers": "python_version >= '3'", - "version": "==0.17.21" - }, - "ruamel.yaml.clib": { - "hashes": [ - "sha256:0847201b767447fc33b9c235780d3aa90357d20dd6108b92be544427bea197dd", - "sha256:1070ba9dd7f9370d0513d649420c3b362ac2d687fe78c6e888f5b12bf8bc7bee", - "sha256:1866cf2c284a03b9524a5cc00daca56d80057c5ce3cdc86a52020f4c720856f0", - "sha256:221eca6f35076c6ae472a531afa1c223b9c29377e62936f61bc8e6e8bdc5f9e7", - "sha256:31ea73e564a7b5fbbe8188ab8b334393e06d997914a4e184975348f204790277", - "sha256:3fb9575a5acd13031c57a62cc7823e5d2ff8bc3835ba4d94b921b4e6ee664104", - "sha256:4ff604ce439abb20794f05613c374759ce10e3595d1867764dd1ae675b85acbd", - "sha256:6e7be2c5bcb297f5b82fee9c665eb2eb7001d1050deaba8471842979293a80b0", - "sha256:72a2b8b2ff0a627496aad76f37a652bcef400fd861721744201ef1b45199ab78", - "sha256:77df077d32921ad46f34816a9a16e6356d8100374579bc35e15bab5d4e9377de", - "sha256:78988ed190206672da0f5d50c61afef8f67daa718d614377dcd5e3ed85ab4a99", - "sha256:7b2927e92feb51d830f531de4ccb11b320255ee95e791022555971c466af4527", - "sha256:7f7ecb53ae6848f959db6ae93bdff1740e651809780822270eab111500842a84", - "sha256:825d5fccef6da42f3c8eccd4281af399f21c02b32d98e113dbc631ea6a6ecbc7", - "sha256:846fc8336443106fe23f9b6d6b8c14a53d38cef9a375149d61f99d78782ea468", - "sha256:89221ec6d6026f8ae859c09b9718799fea22c0e8da8b766b0b2c9a9ba2db326b", - "sha256:9efef4aab5353387b07f6b22ace0867032b900d8e91674b5d8ea9150db5cae94", - "sha256:a32f8d81ea0c6173ab1b3da956869114cae53ba1e9f72374032e33ba3118c233", - "sha256:a49e0161897901d1ac9c4a79984b8410f450565bbad64dbfcbf76152743a0cdb", - "sha256:ada3f400d9923a190ea8b59c8f60680c4ef8a4b0dfae134d2f2ff68429adfab5", - "sha256:bf75d28fa071645c529b5474a550a44686821decebdd00e21127ef1fd566eabe", - "sha256:cfdb9389d888c5b74af297e51ce357b800dd844898af9d4a547ffc143fa56751", - "sha256:d67f273097c368265a7b81e152e07fb90ed395df6e552b9fa858c6d2c9f42502", - "sha256:dc6a613d6c74eef5a14a214d433d06291526145431c3b964f5e16529b1842bed", - "sha256:de9c6b8a1ba52919ae919f3ae96abb72b994dd0350226e28f3686cb4f142165c" - ], - "markers": "python_version < '3.11' and platform_python_implementation == 'CPython'", - "version": "==0.2.6" - }, - "semver": { - "hashes": [ - "sha256:21e80ca738975ed513cba859db0a0d2faca2380aef1962f48272ebf9a8a44bd4", - "sha256:c0a4a9d1e45557297a722ee9bac3de2ec2ea79016b6ffcaca609b0bc62cf4276" - ], - "index": "pypi", - "version": "==2.10.2" - }, - "setuptools": { - "hashes": [ - "sha256:5534570b9980fc650d45c62877ff603c7aaaf24893371708736cc016bd221c3c", - "sha256:ca6ba73b7fd5f734ae70ece8c4c1f7062b07f3352f6428f6277e27c8f5c64237" - ], - "markers": "python_version >= '3.7'", - "version": "==62.2.0" - }, - "six": { - "hashes": [ - "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", - "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.16.0" - }, - "soupsieve": { - "hashes": [ - "sha256:3b2503d3c7084a42b1ebd08116e5f81aadfaea95863628c80a3b774a11b7c759", - "sha256:fc53893b3da2c33de295667a0e19f078c14bf86544af307354de5fcf12a3f30d" - ], - "markers": "python_version >= '3.6'", - "version": "==2.3.2.post1" - }, - "sqlparse": { - "hashes": [ - "sha256:0c00730c74263a94e5a9919ade150dfc3b19c574389985446148402998287dae", - "sha256:48719e356bb8b42991bdbb1e8b83223757b93789c00910a616a071910ca4a64d" - ], - "markers": "python_version >= '3.5'", - "version": "==0.4.2" - }, - "testpath": { - "hashes": [ - "sha256:2f1b97e6442c02681ebe01bd84f531028a7caea1af3825000f52345c30285e0f", - "sha256:8ada9f80a2ac6fb0391aa7cdb1a7d11cfa8429f693eda83f74dde570fe6fa639" - ], - "markers": "python_version >= '3.5'", - "version": "==0.6.0" - }, - "toml": { - "hashes": [ - "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", - "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" - ], - "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==0.10.2" - }, - "tornado": { - "hashes": [ - "sha256:0a00ff4561e2929a2c37ce706cb8233b7907e0cdc22eab98888aca5dd3775feb", - "sha256:0d321a39c36e5f2c4ff12b4ed58d41390460f798422c4504e09eb5678e09998c", - "sha256:1e8225a1070cd8eec59a996c43229fe8f95689cb16e552d130b9793cb570a288", - "sha256:20241b3cb4f425e971cb0a8e4ffc9b0a861530ae3c52f2b0434e6c1b57e9fd95", - "sha256:25ad220258349a12ae87ede08a7b04aca51237721f63b1808d39bdb4b2164558", - "sha256:33892118b165401f291070100d6d09359ca74addda679b60390b09f8ef325ffe", - "sha256:33c6e81d7bd55b468d2e793517c909b139960b6c790a60b7991b9b6b76fb9791", - "sha256:3447475585bae2e77ecb832fc0300c3695516a47d46cefa0528181a34c5b9d3d", - "sha256:34ca2dac9e4d7afb0bed4677512e36a52f09caa6fded70b4e3e1c89dbd92c326", - "sha256:3e63498f680547ed24d2c71e6497f24bca791aca2fe116dbc2bd0ac7f191691b", - "sha256:548430be2740e327b3fe0201abe471f314741efcb0067ec4f2d7dcfb4825f3e4", - "sha256:6196a5c39286cc37c024cd78834fb9345e464525d8991c21e908cc046d1cc02c", - "sha256:61b32d06ae8a036a6607805e6720ef00a3c98207038444ba7fd3d169cd998910", - "sha256:6286efab1ed6e74b7028327365cf7346b1d777d63ab30e21a0f4d5b275fc17d5", - "sha256:65d98939f1a2e74b58839f8c4dab3b6b3c1ce84972ae712be02845e65391ac7c", - "sha256:66324e4e1beede9ac79e60f88de548da58b1f8ab4b2f1354d8375774f997e6c0", - "sha256:6c77c9937962577a6a76917845d06af6ab9197702a42e1346d8ae2e76b5e3675", - "sha256:70dec29e8ac485dbf57481baee40781c63e381bebea080991893cd297742b8fd", - "sha256:7250a3fa399f08ec9cb3f7b1b987955d17e044f1ade821b32e5f435130250d7f", - "sha256:748290bf9112b581c525e6e6d3820621ff020ed95af6f17fedef416b27ed564c", - "sha256:7da13da6f985aab7f6f28debab00c67ff9cbacd588e8477034c0652ac141feea", - "sha256:8f959b26f2634a091bb42241c3ed8d3cedb506e7c27b8dd5c7b9f745318ddbb6", - "sha256:9de9e5188a782be6b1ce866e8a51bc76a0fbaa0e16613823fc38e4fc2556ad05", - "sha256:a48900ecea1cbb71b8c71c620dee15b62f85f7c14189bdeee54966fbd9a0c5bd", - "sha256:b87936fd2c317b6ee08a5741ea06b9d11a6074ef4cc42e031bc6403f82a32575", - "sha256:c77da1263aa361938476f04c4b6c8916001b90b2c2fdd92d8d535e1af48fba5a", - "sha256:cb5ec8eead331e3bb4ce8066cf06d2dfef1bfb1b2a73082dfe8a161301b76e37", - "sha256:cc0ee35043162abbf717b7df924597ade8e5395e7b66d18270116f8745ceb795", - "sha256:d14d30e7f46a0476efb0deb5b61343b1526f73ebb5ed84f23dc794bdb88f9d9f", - "sha256:d371e811d6b156d82aa5f9a4e08b58debf97c302a35714f6f45e35139c332e32", - "sha256:d3d20ea5782ba63ed13bc2b8c291a053c8d807a8fa927d941bd718468f7b950c", - "sha256:d3f7594930c423fd9f5d1a76bee85a2c36fd8b4b16921cae7e965f22575e9c01", - "sha256:dcef026f608f678c118779cd6591c8af6e9b4155c44e0d1bc0c87c036fb8c8c4", - "sha256:e0791ac58d91ac58f694d8d2957884df8e4e2f6687cdf367ef7eb7497f79eaa2", - "sha256:e385b637ac3acaae8022e7e47dfa7b83d3620e432e3ecb9a3f7f58f150e50921", - "sha256:e519d64089b0876c7b467274468709dadf11e41d65f63bba207e04217f47c085", - "sha256:e7229e60ac41a1202444497ddde70a48d33909e484f96eb0da9baf8dc68541df", - "sha256:ed3ad863b1b40cd1d4bd21e7498329ccaece75db5a5bf58cd3c9f130843e7102", - "sha256:f0ba29bafd8e7e22920567ce0d232c26d4d47c8b5cf4ed7b562b5db39fa199c5", - "sha256:fa2ba70284fa42c2a5ecb35e322e68823288a4251f9ba9cc77be04ae15eada68", - "sha256:fba85b6cd9c39be262fcd23865652920832b61583de2a2ca907dbd8e8a8c81e5" - ], - "markers": "python_version >= '3.5'", - "version": "==6.1" - }, - "traitlets": { - "hashes": [ - "sha256:60474f39bf1d39a11e0233090b99af3acee93bbc2281777e61dd8c87da8a0014", - "sha256:9dd4025123fbe018a2092b2ad6984792f53ea3362c698f37473258b1fa97b0bc" - ], - "markers": "python_version >= '3.7'", - "version": "==5.2.0" - }, - "uritemplate": { - "hashes": [ - "sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0", - "sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e" - ], - "markers": "python_version >= '3.6'", - "version": "==4.1.1" - }, - "urllib3": { - "hashes": [ - "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14", - "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", - "version": "==1.26.9" - }, - "webencodings": { - "hashes": [ - "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", - "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923" - ], - "version": "==0.5.1" - }, - "whitenoise": { - "hashes": [ - "sha256:05ce0be39ad85740a78750c86a93485c40f08ad8c62a6006de0233765996e5c7", - "sha256:05d00198c777028d72d8b0bbd234db605ef6d60e9410125124002518a48e515d" - ], - "index": "pypi", - "version": "==5.2.0" - }, - "xkcdpass": { - "hashes": [ - "sha256:9e89291c927671ef5616a9c9ebaa118b7b1b844e188474d53529d1be8a961a3e" - ], - "index": "pypi", - "version": "==1.17.6" - }, - "xlrd": { - "hashes": [ - "sha256:546eb36cee8db40c3eaa46c351e67ffee6eeb5fa2650b71bc4c758a29a1b29b2", - "sha256:e551fb498759fa3a5384a94ccd4c3c02eb7c00ea424426e212ac0c57be9dfbde" - ], - "index": "pypi", - "version": "==1.2.0" - }, - "zipp": { - "hashes": [ - "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad", - "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099" - ], - "markers": "python_version < '3.10'", - "version": "==3.8.0" - } - }, - "develop": { - "aspy.yaml": { - "hashes": [ - "sha256:463372c043f70160a9ec950c3f1e4c3a82db5fca01d334b6bc89c7164d744bdc", - "sha256:e7c742382eff2caed61f87a39d13f99109088e5e93f04d76eb8d4b28aa143f45" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.3.0" - }, - "attrs": { - "hashes": [ - "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4", - "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==21.4.0" - }, - "cached-property": { - "hashes": [ - "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130", - "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0" - ], - "version": "==1.5.2" - }, - "cfgv": { - "hashes": [ - "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426", - "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736" - ], - "markers": "python_full_version >= '3.6.1'", - "version": "==3.3.1" - }, - "coverage": { - "hashes": [ - "sha256:03e2a7826086b91ef345ff18742ee9fc47a6839ccd517061ef8fa1976e652ce9", - "sha256:07e6db90cd9686c767dcc593dff16c8c09f9814f5e9c51034066cad3373b914d", - "sha256:18d520c6860515a771708937d2f78f63cc47ab3b80cb78e86573b0a760161faf", - "sha256:1ebf730d2381158ecf3dfd4453fbca0613e16eaa547b4170e2450c9707665ce7", - "sha256:21b7745788866028adeb1e0eca3bf1101109e2dc58456cb49d2d9b99a8c516e6", - "sha256:26e2deacd414fc2f97dd9f7676ee3eaecd299ca751412d89f40bc01557a6b1b4", - "sha256:2c6dbb42f3ad25760010c45191e9757e7dce981cbfb90e42feef301d71540059", - "sha256:2fea046bfb455510e05be95e879f0e768d45c10c11509e20e06d8fcaa31d9e39", - "sha256:34626a7eee2a3da12af0507780bb51eb52dca0e1751fd1471d0810539cefb536", - "sha256:37d1141ad6b2466a7b53a22e08fe76994c2d35a5b6b469590424a9953155afac", - "sha256:46191097ebc381fbf89bdce207a6c107ac4ec0890d8d20f3360345ff5976155c", - "sha256:4dd8bafa458b5c7d061540f1ee9f18025a68e2d8471b3e858a9dad47c8d41903", - "sha256:4e21876082ed887baed0146fe222f861b5815455ada3b33b890f4105d806128d", - "sha256:58303469e9a272b4abdb9e302a780072c0633cdcc0165db7eec0f9e32f901e05", - "sha256:5ca5aeb4344b30d0bec47481536b8ba1181d50dbe783b0e4ad03c95dc1296684", - "sha256:68353fe7cdf91f109fc7d474461b46e7f1f14e533e911a2a2cbb8b0fc8613cf1", - "sha256:6f89d05e028d274ce4fa1a86887b071ae1755082ef94a6740238cd7a8178804f", - "sha256:7a15dc0a14008f1da3d1ebd44bdda3e357dbabdf5a0b5034d38fcde0b5c234b7", - "sha256:8bdde1177f2311ee552f47ae6e5aa7750c0e3291ca6b75f71f7ffe1f1dab3dca", - "sha256:8ce257cac556cb03be4a248d92ed36904a59a4a5ff55a994e92214cde15c5bad", - "sha256:8cf5cfcb1521dc3255d845d9dca3ff204b3229401994ef8d1984b32746bb45ca", - "sha256:8fbbdc8d55990eac1b0919ca69eb5a988a802b854488c34b8f37f3e2025fa90d", - "sha256:9548f10d8be799551eb3a9c74bbf2b4934ddb330e08a73320123c07f95cc2d92", - "sha256:96f8a1cb43ca1422f36492bebe63312d396491a9165ed3b9231e778d43a7fca4", - "sha256:9b27d894748475fa858f9597c0ee1d4829f44683f3813633aaf94b19cb5453cf", - "sha256:9baff2a45ae1f17c8078452e9e5962e518eab705e50a0aa8083733ea7d45f3a6", - "sha256:a2a8b8bcc399edb4347a5ca8b9b87e7524c0967b335fbb08a83c8421489ddee1", - "sha256:acf53bc2cf7282ab9b8ba346746afe703474004d9e566ad164c91a7a59f188a4", - "sha256:b0be84e5a6209858a1d3e8d1806c46214e867ce1b0fd32e4ea03f4bd8b2e3359", - "sha256:b31651d018b23ec463e95cf10070d0b2c548aa950a03d0b559eaa11c7e5a6fa3", - "sha256:b78e5afb39941572209f71866aa0b206c12f0109835aa0d601e41552f9b3e620", - "sha256:c76aeef1b95aff3905fb2ae2d96e319caca5b76fa41d3470b19d4e4a3a313512", - "sha256:dd035edafefee4d573140a76fdc785dc38829fe5a455c4bb12bac8c20cfc3d69", - "sha256:dd6fe30bd519694b356cbfcaca9bd5c1737cddd20778c6a581ae20dc8c04def2", - "sha256:e5f4e1edcf57ce94e5475fe09e5afa3e3145081318e5fd1a43a6b4539a97e518", - "sha256:ec6bc7fe73a938933d4178c9b23c4e0568e43e220aef9472c4f6044bfc6dd0f0", - "sha256:f1555ea6d6da108e1999b2463ea1003fe03f29213e459145e70edbaf3e004aaa", - "sha256:f5fa5803f47e095d7ad8443d28b01d48c0359484fec1b9d8606d0e3282084bc4", - "sha256:f7331dbf301b7289013175087636bbaf5b2405e57259dd2c42fdcc9fcc47325e", - "sha256:f9987b0354b06d4df0f4d3e0ec1ae76d7ce7cbca9a2f98c25041eb79eec766f1", - "sha256:fd9e830e9d8d89b20ab1e5af09b32d33e1a08ef4c4e14411e559556fd788e6b2" - ], - "markers": "python_version >= '3.7'", - "version": "==6.3.2" - }, - "distlib": { - "hashes": [ - "sha256:6564fe0a8f51e734df6333d08b8b94d4ea8ee6b99b5ed50613f731fd4089f34b", - "sha256:e4b58818180336dc9c529bfb9a0b58728ffc09ad92027a3f30b7cd91e3458579" - ], - "version": "==0.3.4" - }, - "execnet": { - "hashes": [ - "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5", - "sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==1.9.0" - }, - "factory-boy": { - "hashes": [ - "sha256:2ce2f665045d9f15145a6310565fcb8255d52fc6fd867f3b783b3ac3de6cf10e" - ], - "index": "pypi", - "version": "==3.0.1" - }, - "faker": { - "hashes": [ - "sha256:179418909da04b04000eab5463c403895faed2849d36ef8d9cbda72cc44797a0", - "sha256:edffca9d8106fffc23ccef15797665fa8aebec4c0eeb3fd6d43cd23540978d5b" - ], - "index": "pypi", - "version": "==4.1.8" - }, - "filelock": { - "hashes": [ - "sha256:9cd540a9352e432c7246a48fe4e8712b10acb1df2ad1f30e8c070b82ae1fed85", - "sha256:f8314284bfffbdcfa0ff3d7992b023d4c628ced6feb957351d4c48d059f56bc0" - ], - "markers": "python_version >= '3.7'", - "version": "==3.6.0" - }, - "flake8": { - "hashes": [ - "sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b", - "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907" - ], - "index": "pypi", - "version": "==3.9.2" - }, - "identify": { - "hashes": [ - "sha256:3acfe15a96e4272b4ec5662ee3e231ceba976ef63fd9980ed2ce9cc415df393f", - "sha256:c83af514ea50bf2be2c4a3f2fb349442b59dc87284558ae9ff54191bff3541d2" - ], - "markers": "python_version >= '3.7'", - "version": "==2.5.0" - }, - "importlib-metadata": { - "hashes": [ - "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6", - "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539" - ], - "markers": "python_version >= '3.7'", - "version": "==4.11.3" - }, - "iniconfig": { - "hashes": [ - "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3", - "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32" - ], - "version": "==1.1.1" - }, - "mccabe": { - "hashes": [ - "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", - "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f" - ], - "version": "==0.6.1" - }, - "nodeenv": { - "hashes": [ - "sha256:3ef13ff90291ba2a4a7a4ff9a979b63ffdd00a464dbe04acf0ea6471517a4c2b", - "sha256:621e6b7076565ddcacd2db0294c0381e01fd28945ab36bcf00f41c5daf63bef7" - ], - "version": "==1.6.0" - }, - "packaging": { - "hashes": [ - "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb", - "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522" - ], - "markers": "python_version >= '3.6'", - "version": "==21.3" - }, - "platformdirs": { - "hashes": [ - "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788", - "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19" - ], - "markers": "python_version >= '3.7'", - "version": "==2.5.2" - }, - "pluggy": { - "hashes": [ - "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0", - "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==0.13.1" - }, - "pre-commit": { - "hashes": [ - "sha256:33bb9bf599c334d458fa9e311bde54e0c306a651473b6a36fdb36a61c8605c89", - "sha256:e233f5cf3230ae9ed9ada132e9cf6890e18cc937adc669353fb64394f6e80c17" - ], - "index": "pypi", - "version": "==1.13.0" - }, - "py": { - "hashes": [ - "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719", - "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==1.11.0" - }, - "pycodestyle": { - "hashes": [ - "sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20", - "sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==2.8.0" - }, - "pyflakes": { - "hashes": [ - "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3", - "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2.3.1" - }, - "pyparsing": { - "hashes": [ - "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb", - "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc" - ], - "markers": "python_full_version >= '3.6.8'", - "version": "==3.0.9" - }, - "pytest": { - "hashes": [ - "sha256:4288fed0d9153d9646bfcdf0c0428197dba1ecb27a33bb6e031d002fa88653fe", - "sha256:c0a7e94a8cdbc5422a51ccdad8e6f1024795939cc89159a0ae7f0b316ad3823e" - ], - "index": "pypi", - "version": "==6.1.2" - }, - "pytest-cov": { - "hashes": [ - "sha256:45ec2d5182f89a81fc3eb29e3d1ed3113b9e9a873bcddb2a71faaab066110191", - "sha256:47bd0ce14056fdd79f93e1713f88fad7bdcc583dcd7783da86ef2f085a0bb88e" - ], - "index": "pypi", - "version": "==2.10.1" - }, - "pytest-django": { - "hashes": [ - "sha256:4de6dbd077ed8606616958f77655fed0d5e3ee45159475671c7fa67596c6dba6", - "sha256:c33e3d3da14d8409b125d825d4e74da17bb252191bf6fc3da6856e27a8b73ea4" - ], - "index": "pypi", - "version": "==3.10.0" - }, - "pytest-forked": { - "hashes": [ - "sha256:8b67587c8f98cbbadfdd804539ed5455b6ed03802203485dd2f53c1422d7440e", - "sha256:bbbb6717efc886b9d64537b41fb1497cfaf3c9601276be8da2cccfea5a3c8ad8" - ], - "markers": "python_version >= '3.6'", - "version": "==1.4.0" - }, - "pytest-xdist": { - "hashes": [ - "sha256:7c629016b3bb006b88ac68e2b31551e7becf173c76b977768848e2bbed594d90", - "sha256:82d938f1a24186520e2d9d3a64ef7d9ac7ecdf1a0659e095d18e596b8cbd0672" - ], - "index": "pypi", - "version": "==2.1.0" - }, - "python-dateutil": { - "hashes": [ - "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", - "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2.8.2" - }, - "pyyaml": { - "hashes": [ - "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293", - "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b", - "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57", - "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b", - "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4", - "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07", - "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba", - "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9", - "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287", - "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513", - "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0", - "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0", - "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92", - "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f", - "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2", - "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc", - "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c", - "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86", - "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4", - "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c", - "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34", - "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b", - "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c", - "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb", - "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737", - "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3", - "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d", - "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53", - "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78", - "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803", - "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a", - "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174", - "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5" - ], - "markers": "python_version >= '3.6'", - "version": "==6.0" - }, - "selenium": { - "hashes": [ - "sha256:2d7131d7bc5a5b99a2d9b04aaf2612c411b03b8ca1b1ee8d3de5845a9be2cb3c", - "sha256:deaf32b60ad91a4611b98d8002757f29e6f2c2d5fcaf202e1c9ad06d6772300d" - ], - "index": "pypi", - "version": "==3.141.0" - }, - "six": { - "hashes": [ - "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", - "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.16.0" - }, - "text-unidecode": { - "hashes": [ - "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8", - "sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93" - ], - "version": "==1.3" - }, - "toml": { - "hashes": [ - "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", - "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" - ], - "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==0.10.2" - }, - "urllib3": { - "hashes": [ - "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14", - "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", - "version": "==1.26.9" - }, - "virtualenv": { - "hashes": [ - "sha256:e617f16e25b42eb4f6e74096b9c9e37713cf10bf30168fb4a739f3fa8f898a3a", - "sha256:ef589a79795589aada0c1c5b319486797c03b67ac3984c48c669c0e4f50df3a5" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==20.14.1" - }, - "zipp": { - "hashes": [ - "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad", - "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099" - ], - "markers": "python_version < '3.10'", - "version": "==3.8.0" - } - } -} diff --git a/grady/README.md b/grady/README.md deleted file mode 100644 index b9db2c13..00000000 --- a/grady/README.md +++ /dev/null @@ -1,247 +0,0 @@ -![](frontend/src/assets/brand.svg) - -# Grady - will correct you! - - -The intention of this tool is to simplify the exam correcting process at the -University of Goettingen. It is deployed as a web application consisting -of a Django-Rest backend and a Vue.js frontend. - -[![pipeline status](https://gitlab.gwdg.de/j.michal/grady/badges/master/pipeline.svg)](https://gitlab.gwdg.de/j.michal/grady/commits/master) [![coverage report](https://gitlab.gwdg.de/j.michal/grady/badges/master/coverage.svg)](https://gitlab.gwdg.de/j.michal/grady/commits/master) - -## Overview - -Grady has three basic functions for the three types of users - -* Reviewers can - * edit feedback that has been provided by tutors - * mark feedback as final if it should not be modified (only final feedback is - shown to students) - * delete feedback (submission will be reassigned) -* Tutors can - * request a submission that they have to correct and submit feedback for it - * delete their own feedback - * review feedback of other tutors - * they do not see which student submitted the solution -* Students can - * review their final feedback and score in the post exam review - -An overview over the database can be found in the docs folder. - - -## Contributing - - -Feature proposals are welcome! If you experienced any bugs or otherwise -unexpected behavior please submit an issue using the issue templates. - -It is of course possible to contribute but currently there is no standardized -way since the project is in a very early stage and fairly small. If you feel the -need to help us out anyway, please contact us via our university email -addresses. - - -## Development - -### Dependencies - - -Make sure the following packages and tools are installed: - -- Python 3.8 -- [Pipenv](https://docs.pipenv.org/en/latest/) -- [Docker](https://www.docker.com/) or a local installation of [Postgres](https://www.postgresql.org/) -- `npm` or `yarn` (you can use `npm` to install `yarn`) -- `make` - -These are required to set up the project. All other application dependencies are -listed in the `Pipfile` files. These will be -installed automatically during the installation process. - -### Installing - -To set up a new development instance perform the following steps: - -1. Create a virtual environment with a Python3.6 interpreter and install -all relevant dependencies: - -```shell script -pipenv install --dev -``` - -2. Set the environment variable `DJANGO_DEV` to `True` like this: -```shell script -export DJANGO_DEV=True -``` - -3. Enter a shell in the virtual environment: -```shell script -pipenv shell -``` - -4. Set up a Postgres 9.5 database. If you have docker installed the - easiest way is to just run it in a docker container, like this: -```shell script - docker run -d --rm --name postgres -p 5432:5432 postgres:13 - -``` - -Alternatively, take a look at the Makefile targets that should make your -life easier, e.g `make db`. - -And apply database migrations once the database is up: -```shell script -python manage.py migrate -``` - -5. Create a superuser if necessary: -```shell script -python manage.py createsuperuser -``` -More users can be added in the admin interface. You should be able -to reach it via <http://localhost:8000/admin>. - -7. Everything is set. You can start the development server with: -```shell script -python manage.py runserver -``` - -8. Congratulations! Your backend should now be up an running. To setup the frontend - see the README in the `frontend` folder. - -### Testing - -> "Code without tests is broken by design." -- (Jacob Kaplan-Moss, Django core developer) - -Well, currently this repository lacks tests, thats true. But that will change as -this work until now is merely a prototype that will be developed further. However, -the few existing tests can be seen as examples and can be found in the `tests.py` -file of each app (currently only `core`). You can run those tests with -```shell script -make test -``` -or if you want a coverage report as well you can run: -```shell script -make coverage -``` - -If you'd like to run the functional tests, simply run: -```shell script -make teste2e path=functional_tests -``` - -or -```shell script -make teste2e path=functional_tests headless=True -``` -for headless mode (Note: You might need to install additional dependencies). - - make teste2e - -Notice that this will always issue a complete rebuild of the frontend. If you want to run tests without building the -frontend anew, use - - make teste2e-nc - - -## Production - -In order to run the app in production, a server with -[Docker](https://www.docker.com/) is needed. To make routing to the -respective instances easier, we recommend running [traefik](https://traefik.io/) -as a reverse proxy on the server. For easier configuration of the containers -we recommend using `docker-compose`. The following guide will assume both these -dependencies are available. - -### Setting up a new instance -Simply copy the following `docker-compose.yml` onto your production server: -```yaml -version: "3" - -services: - - postgres: - image: postgres:13 - labels: - traefik.enable: "false" - networks: - - internal - volumes: - - ./database:/var/lib/postgresql/data - - grady: - image: docker.gitlab.gwdg.de/j.michal/grady:master - restart: always - entrypoint: - - ./deploy.sh - volumes: - - ./secret:/code/secret - environment: - GRADY_INSTANCE: ${INSTANCE} - SCRIPT_NAME: ${URLPATH} - networks: - - internal - - proxy - labels: - traefik.backend: ${INSTANCE} - traefik.enable: "true" - traefik.frontend.rule: Host:${GRADY_HOST};PathPrefix:${URLPATH} - traefik.docker.network: proxy - traefik.port: "8000" - depends_on: - - postgres - -networks: - proxy: - external: true - internal: - external: false -``` - -and set the `INSTANCE`, `URLPATH`, `GRADY_HOST` variables either directly in the -compose file or within an `.env` file in the same directory as the `docker-compose.yml` -(it will be automatically loaded by `docker-compose`). -Login to gwdg gitlab docker registry by entering: -```commandline -docker login docker.gitlab.gwdg.de -``` -Running -```commandline -docker-compose pull -docker-compose up -d -``` -will download the latest postgres and grady images and run them in the background. - -### Importing exam data -#### Exam data structure -In order to import the exam data it must be in a specific format. -You need the following: - -1. A .json file file containing the output of the converted ILIAS export which is - generated by [hektor](https://gitlab.gwdg.de/j.michal/hektor) -2. A plain text file containing one username per line. A new **reviewer** account - will be created with the corresponding username and a randomly - generated password. The passwords are written to a `.importer_passwords` file. - This step should not be skipped because a reviewer account is necessary in order - to activate the tutor accounts. - - -#### Importing exam data -In order to create reviewer accounts, open an interactive shell session in the running container: -```commandline -$ docker exec -it <container_id> /bin/sh -``` - -While in the shell, create a new file containing one username per line: -```commandline -$ echo "user1\nuser2" > reviewers -``` - -After creating the file, call the importer script: -```commandline -$ python manage.py importer -``` - -Keep in mind that you can import exam data in two ways. You can either import the .json file using the importer or you can use the frontend to import data in a more user-friendly way. In either case, you will have to use the importer in order to create the reviewer accounts. - -When logging in to an instance that has no data imported you will automatically be prompted to import some data. If you are on an instance that already has data, you can find the import dialog in the dropdown menu next to the logout button. In the import dialog, simply select the .json file and upload it. This procedure may take a while depending on the file size. diff --git a/grady/core/__init__.py b/grady/core/__init__.py deleted file mode 100644 index 17acc4cd..00000000 --- a/grady/core/__init__.py +++ /dev/null @@ -1 +0,0 @@ -default_app_config = 'core.apps.CoreConfig' diff --git a/grady/core/admin.py b/grady/core/admin.py deleted file mode 100644 index 79001a88..00000000 --- a/grady/core/admin.py +++ /dev/null @@ -1,17 +0,0 @@ -from django.contrib import admin -from django.contrib.auth.models import Group - -from core.models import (ExamType, Feedback, StudentInfo, Submission, - SubmissionType, Test, UserAccount) - -# Stuff we needwant -admin.site.register(UserAccount) -admin.site.register(SubmissionType) -admin.site.register(Feedback) -admin.site.register(Test) -admin.site.register(ExamType) -admin.site.register(Submission) -admin.site.register(StudentInfo) - -# ... and stuff we don't needwant -admin.site.unregister(Group) diff --git a/grady/core/apps.py b/grady/core/apps.py deleted file mode 100644 index 17b18064..00000000 --- a/grady/core/apps.py +++ /dev/null @@ -1,9 +0,0 @@ -from django.apps import AppConfig - - -class CoreConfig(AppConfig): - name = 'core' - verbose_name = 'where everything comes together' - - def ready(self): - import core.signals # noqa diff --git a/grady/core/management/commands/extractsubmissions.py b/grady/core/management/commands/extractsubmissions.py deleted file mode 100644 index 1e25c4ca..00000000 --- a/grady/core/management/commands/extractsubmissions.py +++ /dev/null @@ -1,13 +0,0 @@ -from django.core.management.base import BaseCommand - -from core import models - - -class Command(BaseCommand): - help = 'Extract all submissions from this instance' - - def handle(self, *args, **kwargs): - for submission in models.Submission.objects.filter( - feedback__isnull=False).order_by('type'): - print(submission.feedback.score, repr(submission.text), - file=open(str(submission.type).replace(' ', '_'), 'a')) diff --git a/grady/core/management/commands/importer.py b/grady/core/management/commands/importer.py deleted file mode 100644 index 1d0bd87c..00000000 --- a/grady/core/management/commands/importer.py +++ /dev/null @@ -1,10 +0,0 @@ -from django.core.management.base import BaseCommand - -import util.importer - - -class Command(BaseCommand): - help = 'Start the Grady command line importer' - - def handle(self, *args, **kwargs): - util.importer.start() diff --git a/grady/core/management/commands/maketestdata.py b/grady/core/management/commands/maketestdata.py deleted file mode 100644 index 075cf243..00000000 --- a/grady/core/management/commands/maketestdata.py +++ /dev/null @@ -1,10 +0,0 @@ -from django.core.management.base import BaseCommand - -from util.factories import init_test_instance - - -class Command(BaseCommand): - help = 'Creates some initial test data for the application' - - def handle(self, *args, **options): - init_test_instance() diff --git a/grady/core/management/commands/replaceusernames.py b/grady/core/management/commands/replaceusernames.py deleted file mode 100644 index cf1fe74d..00000000 --- a/grady/core/management/commands/replaceusernames.py +++ /dev/null @@ -1,30 +0,0 @@ -import argparse -import json -import sys - -from django.contrib.auth import get_user_model -from django.core.management.base import BaseCommand - - -class Command(BaseCommand): - help = ('replaces all usernames based on a ' - 'matrikel_no -> new_name dict (input should be JSON)') - - def add_arguments(self, parser): - parser.add_argument( - 'matno2username_dict', - help='the mapping as a JSON file', - default=sys.stdin, - type=argparse.FileType('r') - ) - - def _handle(self, matno2username_dict, **kwargs): - matno2username = json.JSONDecoder().decode(matno2username_dict.read()) - for student in get_user_model().get_students(): - if student.student.matrikel_no in matno2username: - new_name = matno2username[student.student.matrikel_no] - student.username = new_name - student.save() - - def handle(self, *args, **options): - self._handle(*args, **options) diff --git a/grady/core/management/commands/setstudentpasswords.py b/grady/core/management/commands/setstudentpasswords.py deleted file mode 100644 index 1fe56916..00000000 --- a/grady/core/management/commands/setstudentpasswords.py +++ /dev/null @@ -1,44 +0,0 @@ -import csv -import re -import secrets -import sys - -from django.contrib.auth import get_user_model -from django.core.management.base import BaseCommand - - -class Command(BaseCommand): - help = ('All student passwords will be changed' - 'and a list of these password will be printed') - - def add_arguments(self, parser): - parser.add_argument( - 'instance', - help="Name of the instance that generated the passwords" - ) - - def _handle(self, *args, output=sys.stdout, instance="", **kwargs): - with open('/usr/share/dict/words') as f: - # strip punctuation - words = set(re.sub(r"[^a-z]", "\n", f.read().lower()).split('\n')) - choose_from = list({word.strip().lower() - for word in words if 5 < len(word) < 8}) - - writer = csv.writer(output) - writer.writerow( - ['Name', 'Matrikel', 'Username', 'password', 'instance']) - - for student in get_user_model().get_students(): - password = '-'.join(secrets.choice(choose_from) for _ in range(3)) - - student.set_password(password) - student.save() - - if not student.fullname: - student.fullname = '__no_name__' - - writer.writerow([student.fullname, student.student.matrikel_no, - student.username, password, instance]) - - def handle(self, *args, **options): - self._handle(*args, **options) diff --git a/grady/core/management/commands/usermod.py b/grady/core/management/commands/usermod.py deleted file mode 100644 index 14a95621..00000000 --- a/grady/core/management/commands/usermod.py +++ /dev/null @@ -1,37 +0,0 @@ -from django.contrib.auth import get_user_model -from django.core.management.base import BaseCommand - - -class Command(BaseCommand): - help = 'All user accounts will be disabled' - - def add_arguments(self, parser): - parser.add_argument( - 'switch', - choices=('enable', 'disable'), - default='enable', - help='enable all users (enable) or disable all (disable)' - ) - filter_group = parser.add_mutually_exclusive_group() - filter_group.add_argument( - '--exclude', - default=(), - nargs='+', - help='Provide all users you want to exclude from the operation' - ) - filter_group.add_argument( - '--include', - help=('Provide users you want to operate on' - 'Everything else is untouched'), - nargs='+', - default=()) - - def handle(self, switch, exclude=None, include=None, *args, **kwargs): - if include: - for user in get_user_model().objects.filter(username__in=include): - user.is_active = switch == 'enable' - user.save() - else: # this includes nothing set - for user in get_user_model().objects.exclude(username__in=exclude): - user.is_active = switch == 'enable' - user.save() diff --git a/grady/core/migrations/0001_initial.py b/grady/core/migrations/0001_initial.py deleted file mode 100644 index 3624c16e..00000000 --- a/grady/core/migrations/0001_initial.py +++ /dev/null @@ -1,261 +0,0 @@ -# Generated by Django 2.1.11 on 2019-12-01 16:48 - -import core.models.student_info -import core.models.user_account -from django.conf import settings -import django.contrib.auth.models -import django.contrib.auth.validators -import django.core.validators -from django.db import migrations, models -import django.db.models.deletion -import django.utils.timezone -import uuid - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('auth', '0009_alter_user_last_name_max_length'), - ] - - operations = [ - migrations.CreateModel( - name='UserAccount', - fields=[ - ('password', models.CharField(max_length=128, verbose_name='password')), - ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), - ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), - ('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')), - ('first_name', models.CharField(blank=True, max_length=30, verbose_name='first name')), - ('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')), - ('email', models.EmailField(blank=True, max_length=254, verbose_name='email address')), - ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')), - ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')), - ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), - ('role', models.CharField(choices=[('Student', 'student'), ('Tutor', 'tutor'), ('Reviewer', 'reviewer')], max_length=50)), - ('user_id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), - ('fullname', models.CharField(blank=True, max_length=70, verbose_name='full name')), - ('is_admin', models.BooleanField(default=False)), - ], - options={ - 'verbose_name': 'user', - 'verbose_name_plural': 'users', - 'abstract': False, - }, - managers=[ - ('objects', django.contrib.auth.models.UserManager()), - ('corrector', core.models.user_account.TutorReviewerManager()), - ], - ), - migrations.CreateModel( - name='ExamType', - fields=[ - ('exam_type_id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), - ('module_reference', models.CharField(max_length=50, unique=True)), - ('total_score', models.PositiveIntegerField()), - ('pass_score', models.PositiveIntegerField()), - ('pass_only', models.BooleanField(default=False)), - ], - options={ - 'verbose_name': 'ExamType', - 'verbose_name_plural': 'ExamTypes', - }, - ), - migrations.CreateModel( - name='Feedback', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('score', models.DecimalField(decimal_places=2, default=0, max_digits=5)), - ('created', models.DateTimeField(auto_now_add=True)), - ('is_final', models.BooleanField(default=False)), - ('final_by_reviewer', models.BooleanField(default=False)), - ], - options={ - 'verbose_name': 'Feedback', - 'verbose_name_plural': 'Feedback Set', - }, - ), - migrations.CreateModel( - name='FeedbackComment', - fields=[ - ('comment_id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), - ('text', models.TextField(blank=True)), - ('created', models.DateTimeField(auto_now_add=True)), - ('modified', models.DateTimeField(auto_now=True)), - ('visible_to_student', models.BooleanField(default=True)), - ('of_line', models.PositiveIntegerField(default=0)), - ('of_feedback', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='feedback_lines', to='core.Feedback')), - ('of_tutor', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='comment_list', to=settings.AUTH_USER_MODEL)), - ], - options={ - 'verbose_name': 'Feedback Comment', - 'verbose_name_plural': 'Feedback Comments', - 'ordering': ('created',), - }, - ), - migrations.CreateModel( - name='FeedbackLabel', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=50, unique=True)), - ('description', models.TextField()), - ('colour', models.CharField(default='#b0b0b0', max_length=7, validators=[django.core.validators.RegexValidator(code='nomatch', message='Colour must be in format: #[0-9A-F]{7}', regex='^#[0-9A-F]{6}$')])), - ('feedback', models.ManyToManyField(related_name='labels', to='core.Feedback')), - ('feedback_comments', models.ManyToManyField(related_name='labels', to='core.FeedbackComment')), - ], - ), - migrations.CreateModel( - name='Group', - fields=[ - ('group_id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), - ('name', models.CharField(max_length=120)), - ], - ), - migrations.CreateModel( - name='MetaSubmission', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('done_assignments', models.PositiveIntegerField(default=0)), - ('has_active_assignment', models.BooleanField(default=False)), - ('has_feedback', models.BooleanField(default=False)), - ('has_final_feedback', models.BooleanField(default=False)), - ('feedback_authors', models.ManyToManyField(to=settings.AUTH_USER_MODEL)), - ], - ), - migrations.CreateModel( - name='SolutionComment', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('text', models.TextField()), - ('created', models.DateTimeField(auto_now_add=True)), - ('modified', models.DateTimeField(auto_now=True)), - ('of_line', models.PositiveIntegerField()), - ], - ), - migrations.CreateModel( - name='StudentInfo', - fields=[ - ('student_id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), - ('has_logged_in', models.BooleanField(default=False)), - ('matrikel_no', models.CharField(default=core.models.student_info.random_matrikel_no, max_length=30, unique=True)), - ('total_score', models.PositiveIntegerField(default=0)), - ('passes_exam', models.BooleanField(default=False)), - ('exam', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='students', to='core.ExamType')), - ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='student', to=settings.AUTH_USER_MODEL)), - ], - options={ - 'verbose_name': 'Student', - 'verbose_name_plural': 'Student Set', - }, - ), - migrations.CreateModel( - name='Submission', - fields=[ - ('submission_id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), - ('seen_by_student', models.BooleanField(default=False)), - ('text', models.TextField(blank=True)), - ('source_code', models.TextField(blank=True, editable=False, null=True)), - ('source_code_available', models.BooleanField(default=False, editable=False)), - ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='submissions', to='core.StudentInfo')), - ], - options={ - 'verbose_name': 'Submission', - 'verbose_name_plural': 'Submission Set', - 'ordering': ('type__name',), - }, - ), - migrations.CreateModel( - name='SubmissionType', - fields=[ - ('submission_type_id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), - ('name', models.CharField(max_length=100, unique=True)), - ('full_score', models.PositiveIntegerField(default=0)), - ('description', models.TextField()), - ('solution', models.TextField()), - ('programming_language', models.CharField(choices=[('c', 'C syntax highlighting'), ('java', 'Java syntax highlighting'), ('mipsasm', 'Mips syntax highlighting'), ('haskell', 'Haskell syntax highlighting'), ('python', 'Python syntax highlighting'), ('plaintext', 'No syntax highlighting')], default='c', max_length=25)), - ], - options={ - 'verbose_name': 'SubmissionType', - 'verbose_name_plural': 'SubmissionType Set', - }, - ), - migrations.CreateModel( - name='Test', - fields=[ - ('test_id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), - ('name', models.CharField(max_length=30)), - ('label', models.CharField(max_length=50)), - ('annotation', models.TextField()), - ('submission', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='tests', to='core.Submission')), - ], - options={ - 'verbose_name': 'Test', - 'verbose_name_plural': 'Tests', - }, - ), - migrations.CreateModel( - name='TutorSubmissionAssignment', - fields=[ - ('assignment_id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), - ('stage', models.CharField(choices=[('feedback-creation', 'No feedback was ever assigned'), ('feedback-validation', 'Feedback exists but is not validated'), ('feedback-review', 'Review by exam reviewer required')], default='feedback-creation', max_length=60)), - ('is_done', models.BooleanField(default=False)), - ('created', models.DateTimeField(auto_now_add=True)), - ('owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='assignments', to=settings.AUTH_USER_MODEL)), - ('submission', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='assignments', to='core.Submission')), - ], - ), - migrations.AddField( - model_name='submission', - name='type', - field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='submissions', to='core.SubmissionType'), - ), - migrations.AddField( - model_name='solutioncomment', - name='of_submission_type', - field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='solution_comments', to='core.SubmissionType'), - ), - migrations.AddField( - model_name='solutioncomment', - name='of_user', - field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='solution_comments', to=settings.AUTH_USER_MODEL), - ), - migrations.AddField( - model_name='metasubmission', - name='submission', - field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='meta', to='core.Submission'), - ), - migrations.AddField( - model_name='feedback', - name='of_submission', - field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='feedback', to='core.Submission'), - ), - migrations.AddField( - model_name='useraccount', - name='group', - field=models.ManyToManyField(blank=True, related_name='group', to='core.Group'), - ), - migrations.AddField( - model_name='useraccount', - name='groups', - field=models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups'), - ), - migrations.AddField( - model_name='useraccount', - name='user_permissions', - field=models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions'), - ), - migrations.AlterUniqueTogether( - name='test', - unique_together={('submission', 'name')}, - ), - migrations.AlterUniqueTogether( - name='submission', - unique_together={('type', 'student')}, - ), - migrations.AlterUniqueTogether( - name='feedbackcomment', - unique_together={('of_line', 'of_tutor', 'of_feedback')}, - ), - ] diff --git a/grady/core/migrations/0002_auto_20191202_1018.py b/grady/core/migrations/0002_auto_20191202_1018.py deleted file mode 100644 index 07cfd2d1..00000000 --- a/grady/core/migrations/0002_auto_20191202_1018.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 2.1.11 on 2019-12-02 10:18 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0001_initial'), - ] - - operations = [ - migrations.RemoveField( - model_name='useraccount', - name='group', - ), - migrations.AddField( - model_name='useraccount', - name='exercise_groups', - field=models.ManyToManyField(blank=True, related_name='users', to='core.Group'), - ), - ] diff --git a/grady/core/migrations/0003_auto_20191203_1445.py b/grady/core/migrations/0003_auto_20191203_1445.py deleted file mode 100644 index 5abadff6..00000000 --- a/grady/core/migrations/0003_auto_20191203_1445.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.1.11 on 2019-12-03 14:45 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0002_auto_20191202_1018'), - ] - - operations = [ - migrations.AlterField( - model_name='submissiontype', - name='programming_language', - field=models.CharField(choices=[('c', 'C syntax highlighting'), ('java', 'Java syntax highlighting'), ('mipsasm', 'Mips syntax highlighting'), ('haskell', 'Haskell syntax highlighting'), ('python', 'Python syntax highlighting'), ('markdown', 'Markdown syntax highlighting with asciimath rendering'), ('plaintext', 'No syntax highlighting')], default='c', max_length=25), - ), - ] diff --git a/grady/core/migrations/0004_feedback_modified.py b/grady/core/migrations/0004_feedback_modified.py deleted file mode 100644 index 0364705d..00000000 --- a/grady/core/migrations/0004_feedback_modified.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.1.14 on 2020-04-14 18:38 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0003_auto_20191203_1445'), - ] - - operations = [ - migrations.AddField( - model_name='feedback', - name='modified', - field=models.DateTimeField(auto_now=True), - ), - ] diff --git a/grady/core/migrations/0005_auto_20200707_1456.py b/grady/core/migrations/0005_auto_20200707_1456.py deleted file mode 100644 index 63d03d44..00000000 --- a/grady/core/migrations/0005_auto_20200707_1456.py +++ /dev/null @@ -1,47 +0,0 @@ -# Generated by Django 2.2.12 on 2020-07-07 14:56 - -import core.models.user_account -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0004_feedback_modified'), - ] - - operations = [ - migrations.RemoveField( - model_name='studentinfo', - name='exam', - ), - migrations.RemoveField( - model_name='studentinfo', - name='passes_exam', - ), - migrations.RemoveField( - model_name='studentinfo', - name='total_score', - ), - migrations.AlterField( - model_name='useraccount', - name='exercise_groups', - field=models.ManyToManyField(blank=True, default=core.models.user_account.group_default, related_name='users', to='core.Group'), - ), - migrations.CreateModel( - name='StudentsExam', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('total_score', models.PositiveIntegerField(default=0)), - ('passes_exam', models.BooleanField(default=False)), - ('exam', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='exam', to='core.ExamType')), - ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='students', to='core.StudentInfo')), - ], - ), - migrations.AddField( - model_name='studentinfo', - name='exams', - field=models.ManyToManyField(blank=True, related_name='exams', to='core.StudentsExam'), - ), - ] diff --git a/grady/core/migrations/0005_auto_20200929_1202.py b/grady/core/migrations/0005_auto_20200929_1202.py deleted file mode 100644 index a4dab173..00000000 --- a/grady/core/migrations/0005_auto_20200929_1202.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.2.16 on 2020-09-29 12:02 - -import core.models.user_account -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0004_feedback_modified'), - ] - - operations = [ - migrations.AlterField( - model_name='useraccount', - name='exercise_groups', - field=models.ManyToManyField(blank=True, default=core.models.user_account.group_default, related_name='users', to='core.Group'), - ), - ] diff --git a/grady/core/migrations/0006_auto_20200810_1115.py b/grady/core/migrations/0006_auto_20200810_1115.py deleted file mode 100644 index e9d7d8d1..00000000 --- a/grady/core/migrations/0006_auto_20200810_1115.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 2.2.12 on 2020-08-10 11:15 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0005_auto_20200707_1456'), - ] - - operations = [ - migrations.RenameModel( - old_name='StudentsExam', - new_name='ExamInfo', - ), - ] diff --git a/grady/core/migrations/0006_auto_20201027_1234.py b/grady/core/migrations/0006_auto_20201027_1234.py deleted file mode 100644 index b3cb85ea..00000000 --- a/grady/core/migrations/0006_auto_20201027_1234.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.1.2 on 2020-10-27 12:34 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0005_auto_20200929_1202'), - ] - - operations = [ - migrations.AlterField( - model_name='useraccount', - name='first_name', - field=models.CharField(blank=True, max_length=150, verbose_name='first name'), - ), - ] diff --git a/grady/core/migrations/0007_auto_20200922_1026.py b/grady/core/migrations/0007_auto_20200922_1026.py deleted file mode 100644 index a077aaa5..00000000 --- a/grady/core/migrations/0007_auto_20200922_1026.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 2.2.12 on 2020-09-22 10:26 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0006_auto_20200810_1115'), - ] - - operations = [ - migrations.RemoveField( - model_name='studentinfo', - name='exams', - ), - migrations.AlterField( - model_name='examinfo', - name='student', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='exams', to='core.StudentInfo'), - ), - ] diff --git a/grady/core/migrations/0008_auto_20200922_1148.py b/grady/core/migrations/0008_auto_20200922_1148.py deleted file mode 100644 index 7426432e..00000000 --- a/grady/core/migrations/0008_auto_20200922_1148.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.2.12 on 2020-09-22 11:48 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0007_auto_20200922_1026'), - ] - - operations = [ - migrations.AlterField( - model_name='examinfo', - name='exam', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='exam_infos', to='core.ExamType'), - ), - ] diff --git a/grady/core/migrations/0009_submissiontype_exam_type.py b/grady/core/migrations/0009_submissiontype_exam_type.py deleted file mode 100644 index eaa876ff..00000000 --- a/grady/core/migrations/0009_submissiontype_exam_type.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.2.16 on 2020-10-22 11:57 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0008_auto_20200922_1148'), - ] - - operations = [ - migrations.AddField( - model_name='submissiontype', - name='exam_type', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='submission_types', to='core.ExamType'), - ), - ] diff --git a/grady/core/migrations/0010_group_examtype.py b/grady/core/migrations/0010_group_examtype.py deleted file mode 100644 index 1c9e45ff..00000000 --- a/grady/core/migrations/0010_group_examtype.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.2.16 on 2020-11-03 11:54 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0009_submissiontype_exam_type'), - ] - - operations = [ - migrations.AddField( - model_name='group', - name='examType', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='groups', to='core.ExamType'), - ), - ] diff --git a/grady/core/migrations/0011_auto_20201103_1211.py b/grady/core/migrations/0011_auto_20201103_1211.py deleted file mode 100644 index 5a42817f..00000000 --- a/grady/core/migrations/0011_auto_20201103_1211.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.16 on 2020-11-03 12:11 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0010_group_examtype'), - ] - - operations = [ - migrations.RenameField( - model_name='group', - old_name='examType', - new_name='exam_type', - ), - ] diff --git a/grady/core/migrations/0012_auto_20201103_1228.py b/grady/core/migrations/0012_auto_20201103_1228.py deleted file mode 100644 index 6de5b385..00000000 --- a/grady/core/migrations/0012_auto_20201103_1228.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 2.2.16 on 2020-11-03 12:28 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0011_auto_20201103_1211'), - ] - - operations = [ - migrations.AlterModelOptions( - name='group', - options={'verbose_name': 'Group', 'verbose_name_plural': 'Groups'}, - ), - ] diff --git a/grady/core/migrations/0013_auto_20201103_1248.py b/grady/core/migrations/0013_auto_20201103_1248.py deleted file mode 100644 index 8e36cd62..00000000 --- a/grady/core/migrations/0013_auto_20201103_1248.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 2.2.16 on 2020-11-03 12:48 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0012_auto_20201103_1228'), - ] - - operations = [ - migrations.AlterModelOptions( - name='group', - options={}, - ), - migrations.RemoveField( - model_name='group', - name='exam_type', - ), - ] diff --git a/grady/core/migrations/0014_merge_20201123_1252.py b/grady/core/migrations/0014_merge_20201123_1252.py deleted file mode 100644 index e89e1ffc..00000000 --- a/grady/core/migrations/0014_merge_20201123_1252.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 3.1.3 on 2020-11-23 12:52 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0013_auto_20201103_1248'), - ('core', '0006_auto_20201027_1234'), - ] - - operations = [ - ] diff --git a/grady/core/migrations/0015_group_exam_type.py b/grady/core/migrations/0015_group_exam_type.py deleted file mode 100644 index 87662145..00000000 --- a/grady/core/migrations/0015_group_exam_type.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 3.1.7 on 2021-09-02 11:36 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0014_merge_20201123_1252'), - ] - - operations = [ - migrations.AddField( - model_name='group', - name='exam_type', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='groups', to='core.examtype'), - ), - ] diff --git a/grady/core/migrations/0016_auto_20210902_1140.py b/grady/core/migrations/0016_auto_20210902_1140.py deleted file mode 100644 index 4f975a55..00000000 --- a/grady/core/migrations/0016_auto_20210902_1140.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.1.7 on 2021-09-02 11:40 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0015_group_exam_type'), - ] - - operations = [ - migrations.RenameField( - model_name='group', - old_name='exam_type', - new_name='exam', - ), - ] diff --git a/grady/core/migrations/__init__.py b/grady/core/migrations/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/grady/core/models/__init__.py b/grady/core/models/__init__.py deleted file mode 100644 index 432bbb04..00000000 --- a/grady/core/models/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ -from .group import Group # noqa -from .exam_type import ExamType # noqa -from .submission_type import SubmissionType, SolutionComment # noqa -from .user_account import UserAccount, TutorReviewerManager # noqa -from .user_account import UserAccount, TutorReviewerManager # noqa -from .student_info import StudentInfo, random_matrikel_no, ExamInfo # noqa -from .test import Test # noqa -from .submission import Submission, MetaSubmission # noqa -from .feedback import Feedback, FeedbackComment # noqa -from .assignment import (DeletionOfDoneAssignmentsNotPermitted, TutorSubmissionAssignment, # noqa - CanOnlyCallFinishOnUnfinishedAssignments, SubmissionTypeDepleted, # noqa - NotMoreThanTwoOpenAssignmentsAllowed) # noqa -from .label import FeedbackLabel # noqa diff --git a/grady/core/models/assignment.py b/grady/core/models/assignment.py deleted file mode 100644 index 8936bf9a..00000000 --- a/grady/core/models/assignment.py +++ /dev/null @@ -1,111 +0,0 @@ -import logging -import uuid - -import constance -from django.db import models - -from core.models import Submission, UserAccount, MetaSubmission - -log = logging.getLogger(__name__) -config = constance.config - - -class DeletionOfDoneAssignmentsNotPermitted(Exception): - pass - - -class CanOnlyCallFinishOnUnfinishedAssignments(Exception): - pass - - -class SubmissionTypeDepleted(Exception): - pass - - -class NotMoreThanTwoOpenAssignmentsAllowed(Exception): - pass - - -class TutorSubmissionAssignmentManager(models.Manager): - - @staticmethod - def available_assignments(create_assignment_options): - stage = create_assignment_options['stage'] - owner = create_assignment_options['owner'] - submission_type = create_assignment_options['submission_type'] - group = create_assignment_options.get('group') - - stage = TutorSubmissionAssignment.assignment_count_on_stage[stage] - candidates = MetaSubmission.objects.filter( - submission__type__pk=submission_type, - done_assignments=stage, - has_final_feedback=False, - has_active_assignment=False, - ).exclude( - feedback_authors=owner - ) - if group is not None: - candidates = candidates.filter( - submission__student__user__exercise_groups__pk=group - ) - return candidates - - -class TutorSubmissionAssignment(models.Model): - objects = TutorSubmissionAssignmentManager() - - FEEDBACK_CREATION = 'feedback-creation' - FEEDBACK_VALIDATION = 'feedback-validation' - FEEDBACK_REVIEW = 'feedback-review' - - stages = ( - (FEEDBACK_CREATION, 'No feedback was ever assigned'), - (FEEDBACK_VALIDATION, 'Feedback exists but is not validated'), - (FEEDBACK_REVIEW, 'Review by exam reviewer required'), - ) - - assignment_count_on_stage = { - FEEDBACK_CREATION: 0, - FEEDBACK_VALIDATION: 1, - FEEDBACK_REVIEW: 2, - } - - owner = models.ForeignKey(UserAccount, - on_delete=models.CASCADE, - related_name='assignments') - - assignment_id = models.UUIDField(primary_key=True, - default=uuid.uuid4, - editable=False) - submission = models.ForeignKey(Submission, - on_delete=models.CASCADE, - related_name='assignments') - - stage = models.CharField(choices=stages, - max_length=60, - default=FEEDBACK_CREATION) - - is_done = models.BooleanField(default=False) - created = models.DateTimeField(auto_now_add=True) - - def __str__(self): - return (f'{self.owner} assigned to {self.submission}' - f' (done={self.is_done})') - - def finish(self): - self.refresh_from_db() - if self.is_done: - raise CanOnlyCallFinishOnUnfinishedAssignments() - - meta = self.submission.meta - meta.feedback_authors.add(self.owner) - meta.done_assignments += 1 - meta.has_active_assignment = False - self.is_done = True - self.save() - meta.save() - - def delete(self, *args, **kwargs): - if self.is_done: - raise DeletionOfDoneAssignmentsNotPermitted() - super().delete(*args, **kwargs) diff --git a/grady/core/models/exam_type.py b/grady/core/models/exam_type.py deleted file mode 100644 index bf9ab0a7..00000000 --- a/grady/core/models/exam_type.py +++ /dev/null @@ -1,44 +0,0 @@ - -import logging -import uuid - -import constance -from django.db import models - -log = logging.getLogger(__name__) -config = constance.config - - -class ExamType(models.Model): - """A model that contains information about the module a submission can - belong to. The information is not needed and is currently, just used to - detect if students already have enough points to pass an exam. - - It is NOT intended to use this for including different exams regarding - submissions types. - - Attributes - ---------- - module_reference : CharField - a unique reference that identifies a module within the university - pass_only : BooleanField - True if no grade is given - pass_score : PositiveIntegerField - minimum score for (just) passing - total_score : PositiveIntegerField - maximum score for the exam (currently never used anywhere) - """ - class Meta: - verbose_name = "ExamType" - verbose_name_plural = "ExamTypes" - - def __str__(self) -> str: - return self.module_reference - - exam_type_id = models.UUIDField(primary_key=True, - default=uuid.uuid4, - editable=False) - module_reference = models.CharField(max_length=50, unique=True) - total_score = models.PositiveIntegerField() - pass_score = models.PositiveIntegerField() - pass_only = models.BooleanField(default=False) diff --git a/grady/core/models/feedback.py b/grady/core/models/feedback.py deleted file mode 100644 index 6a83bbe9..00000000 --- a/grady/core/models/feedback.py +++ /dev/null @@ -1,94 +0,0 @@ -import logging -import uuid - -import constance -from django.contrib.auth import get_user_model -from django.db import models - -from core.models.submission import Submission - -log = logging.getLogger(__name__) -config = constance.config - - -class Feedback(models.Model): - """ - Attributes - ---------- - score : PositiveIntegerField - A score that has been assigned to he submission. Is final if it was - accepted. - created : DateTimeField - When the feedback was initially created - modified: DateTimeField - Timestamp indicating the last time the feedback was saved - of_submission : OneToOneField - The submission this feedback belongs to. It finally determines how many - points a student receives for his submission. - origin : IntegerField - Of whom was this feedback originally created. She below for the choices - final_by_reviewer: BooleanField - Whether or not this feedback was set to final by a reviewer once - """ - score = models.DecimalField(max_digits=5, decimal_places=2, default=0) - created = models.DateTimeField(auto_now_add=True) - modified = models.DateTimeField(auto_now=True) - is_final = models.BooleanField(default=False) - final_by_reviewer = models.BooleanField(default=False) - - of_submission = models.OneToOneField( - Submission, - on_delete=models.CASCADE, - related_name='feedback') - - # the denominators that are allowed for the decimal score interpreted as a fraction - ALLOWED_DENOMINATORS = [1, 2] - - class Meta: - verbose_name = "Feedback" - verbose_name_plural = "Feedback Set" - - def __str__(self) -> str: - return 'Feedback for {}'.format(self.of_submission) - - def is_full_score(self) -> bool: - return self.of_submission.type.full_score == self.score - - def get_full_score(self) -> int: - return self.of_submission.type.full_score - - -class FeedbackComment(models.Model): - """ This Class contains the Feedback for a specific line of a Submission""" - comment_id = models.UUIDField(primary_key=True, - default=uuid.uuid4, - editable=False) - text = models.TextField(blank=True) - created = models.DateTimeField(auto_now_add=True) - modified = models.DateTimeField(auto_now=True) - - visible_to_student = models.BooleanField(default=True) - - of_line = models.PositiveIntegerField(default=0) - of_tutor = models.ForeignKey( - get_user_model(), - related_name="comment_list", - on_delete=models.PROTECT - ) - of_feedback = models.ForeignKey( - Feedback, - related_name="feedback_lines", - on_delete=models.CASCADE, - null=True - ) - - class Meta: - verbose_name = "Feedback Comment" - verbose_name_plural = "Feedback Comments" - ordering = ('created',) - unique_together = ('of_line', 'of_tutor', 'of_feedback') - - def __str__(self): - return 'Comment on line {} of tutor {}: "{}"'.format(self.of_line, - self.of_tutor, - self.text) diff --git a/grady/core/models/group.py b/grady/core/models/group.py deleted file mode 100644 index f03b8181..00000000 --- a/grady/core/models/group.py +++ /dev/null @@ -1,14 +0,0 @@ -from django.db import models -from core.models.exam_type import ExamType -import uuid - - -class Group(models.Model): - group_id = models.UUIDField(primary_key=True, - default=uuid.uuid4, - editable=False) - name = models.CharField(max_length=120) - exam = models.ForeignKey(ExamType, - on_delete=models.CASCADE, - related_name='groups', - null=True) diff --git a/grady/core/models/label.py b/grady/core/models/label.py deleted file mode 100644 index 731b241b..00000000 --- a/grady/core/models/label.py +++ /dev/null @@ -1,21 +0,0 @@ -import logging - -from django.core.validators import RegexValidator -from django.db import models - -from core.models.feedback import Feedback, FeedbackComment - -log = logging.getLogger(__name__) - -HexColourValidator = RegexValidator( - regex='^#[0-9A-F]{6}$', - message='Colour must be in format: #[0-9A-F]{7}', - code='nomatch') - - -class FeedbackLabel(models.Model): - name = models.CharField(max_length=50, unique=True) - description = models.TextField() - colour = models.CharField(validators=[HexColourValidator], max_length=7, default='#b0b0b0') - feedback = models.ManyToManyField(Feedback, related_name='labels') - feedback_comments = models.ManyToManyField(FeedbackComment, related_name='labels') diff --git a/grady/core/models/student_info.py b/grady/core/models/student_info.py deleted file mode 100644 index 1b57910d..00000000 --- a/grady/core/models/student_info.py +++ /dev/null @@ -1,140 +0,0 @@ -import logging -import uuid -from collections import OrderedDict -from random import randrange -from typing import Dict - -import constance -from django.contrib.auth import get_user_model -from django.db import models -from django.db.models import BooleanField, F, When, Sum, QuerySet, Value, Case -from django.db.models.functions import Coalesce - -from core.models.submission_type import SubmissionType -from core.models.exam_type import ExamType - -log = logging.getLogger(__name__) -config = constance.config - - -def random_matrikel_no() -> str: - """Use as a default value for student's matriculation number. - - Returns: - str: an eight digit number - """ - return str(10_000_000 + randrange(90_000_000)) - - -class ExamInfo(models.Model): - exam = models.ForeignKey(ExamType, - on_delete=models.CASCADE, - related_name='exam_infos', - null=False) - - student = models.ForeignKey('StudentInfo', - on_delete=models.CASCADE, - related_name='exams', - null=False) - - total_score = models.PositiveIntegerField(default=0) - passes_exam = models.BooleanField(default=False) - - def update_total_score(self): - ''' This helper is invoked after feedback changes ''' - self.total_score = self.student.submissions.aggregate( - Sum('feedback__score'))['feedback__score__sum'] or 0 - if self.exam is not None: - self.passes_exam = self.total_score >= self.exam.pass_score - self.save() - - def score_per_submission(self) -> Dict[str, int]: - """ TODO: get rid of it and use an annotation. """ - if self.student.submissions.all(): - return OrderedDict({ - s.type.name: s.feedback.score if hasattr(s, 'feedback') else 0 - for s in self.student.submissions.filter(type__exam_type=self.exam) - .order_by('type__name') - }) - - return OrderedDict({ - t.name: 0 for t in SubmissionType.objects.all() - }) - - -class StudentInfo(models.Model): - """ - The StudentInfo model includes all information of a student, that we got - from the E-Learning output, along with some useful classmethods that - provide specially annotated QuerySets. - - Information like email (if given), and the username are stored in the - associated user model. - - Attributes: - exams (ManyToManyField): - Module the student wants te be graded in, or different exercise - assignments for one module. - - has_logged_in (BooleanField): - Login is permitted once. If this is set the user can not log in. - - matrikel_no (CharField): - The matriculation number of the student - """ - student_id = models.UUIDField(primary_key=True, - default=uuid.uuid4, - editable=False) - has_logged_in = models.BooleanField(default=False) - matrikel_no = models.CharField(unique=True, - max_length=30, - default=random_matrikel_no) - - user = models.OneToOneField(get_user_model(), - on_delete=models.CASCADE, - related_name='student') - - def add_exam(self, exam): - exam_info = ExamInfo(exam=exam, student=self) - exam_info.save() - self.exams.add(exam_info) - - @classmethod - def get_annotated_score_submission_list(cls) -> QuerySet: - """Can be used to quickly annotate a user with the necessary - information on the overall score of a student and if he does not need - any more correction. - - A student is done if - * module type was pass_only and student has enough points - * every submission got accepted feedback - - Returns - ------- - QuerySet - the annotated QuerySet as described above. - """ - return cls.objects.annotate( - overall_score=Coalesce(Sum('submissions__feedback__score'), - Value(0)), - ).annotate( - done=Case( - When(exam__pass_score__lt=F('overall_score'), then=Value(1)), - default=Value(0), - output_field=BooleanField() - ) - ).order_by('user__username') - - def disable(self): - """The student won't be able to login in anymore, but his current - session can be continued until s/he logs out. - """ - self.has_logged_in = True - self.save() - - def __str__(self) -> str: - return self.user.username - - class Meta: - verbose_name = "Student" - verbose_name_plural = "Student Set" diff --git a/grady/core/models/submission.py b/grady/core/models/submission.py deleted file mode 100644 index f2f98dfe..00000000 --- a/grady/core/models/submission.py +++ /dev/null @@ -1,89 +0,0 @@ -import logging -import uuid - -import constance -from django.contrib.auth import get_user_model -from django.db import models - -from core.models.submission_type import SubmissionType - -log = logging.getLogger(__name__) -config = constance.config - - -class Submission(models.Model): - """The answer of a student to a specific question. Holds the answer and - very often serves as ForeignKey. - - With the method assign_tutor feedback for a submission can be created and a - tutor will be assigned to this feedback permanently (unless deleted by a - reviewer or if it gets reassigned). There cannot be more than ONE feedback - per Submission. - - Attributes - ---------- - seen_by_student : BooleanField - True if the student saw his accepted feedback. - student : ForgeignKey - The student how cause all of this - text : TextField - The code/text submitted by the student - source_code : TextField - If the original "source code" is not easily displayable (like Jupyter Notebooks), - it's converted to readable source code and the original is saved in this field - source_code_available : BooleanField - Whether there is original source code available under `source_code` or not - type : OneToOneField - Relation to the type containing meta information - """ - submission_id = models.UUIDField(primary_key=True, - default=uuid.uuid4, - editable=False) - seen_by_student = models.BooleanField(default=False) - text = models.TextField(blank=True) - source_code = models.TextField(null=True, blank=True, editable=False) - source_code_available = models.BooleanField(default=False, editable=False) - type = models.ForeignKey( - SubmissionType, - on_delete=models.PROTECT, - related_name='submissions') - student = models.ForeignKey( - 'StudentInfo', - on_delete=models.CASCADE, - related_name='submissions') - - class Meta: - verbose_name = "Submission" - verbose_name_plural = "Submission Set" - unique_together = (('type', 'student'),) - ordering = ('type__name',) - - def __str__(self) -> str: - return "Submission {}".format(self.pk) - - -class MetaSubmission(models.Model): - - submission = models.OneToOneField('submission', - related_name='meta', - on_delete=models.CASCADE) - done_assignments = models.PositiveIntegerField(default=0) - has_active_assignment = models.BooleanField(default=False) - - # Managed by signal! - has_feedback = models.BooleanField(default=False) - # Managed by signal! - has_final_feedback = models.BooleanField(default=False) - - feedback_authors = models.ManyToManyField(get_user_model()) - - def __str__(self): - return f''' Submission Meta of {self.submission} - - done_assignments = {self.done_assignments} - has_active_assignment = {self.has_active_assignment} - has_feedback = {self.has_feedback} - has_final_feedback = {self.has_final_feedback} - feedback_authors = {self.feedback_authors.values_list('username', - flat=True)} - ''' diff --git a/grady/core/models/submission_type.py b/grady/core/models/submission_type.py deleted file mode 100644 index c37cbfa8..00000000 --- a/grady/core/models/submission_type.py +++ /dev/null @@ -1,128 +0,0 @@ -import logging -import uuid - -import constance -from django.db import models -from django.db.models import (Case, Count, IntegerField, Q, - Value, When) -from django.db.models.query import QuerySet -from core.models.exam_type import ExamType - - -log = logging.getLogger(__name__) -config = constance.config - - -class SubmissionType(models.Model): - """This model mostly holds meta information about the kind of task that was - presented to the student. It serves as a foreign key for the submissions - that are of this type. This model is currently NOT exposed directly in a - view. - - Attributes - ---------- - description : TextField - The task description the student had to fulfill. The content may be - HTML formatted. - full_score : PositiveIntegerField - Maximum score one can get on that one - name : CharField - The original title of the exam. This is wildly used as an identifier by - the preprocessing scripts. - solution : TextField - A sample solution or a correction guideline - """ - - C = 'c' - JAVA = 'java' - MIPS = 'mipsasm' - HASKELL = 'haskell' - TEXT = 'plaintext' - PYTHON = 'python' - MARKDOWN = 'markdown' - - LANGUAGE_CHOICES = ( - (C, 'C syntax highlighting'), - (JAVA, 'Java syntax highlighting'), - (MIPS, 'Mips syntax highlighting'), - (HASKELL, 'Haskell syntax highlighting'), - (PYTHON, 'Python syntax highlighting'), - (MARKDOWN, 'Markdown syntax highlighting with asciimath rendering'), - (TEXT, 'No syntax highlighting'), - ) - - submission_type_id = models.UUIDField(primary_key=True, - default=uuid.uuid4, - editable=False) - name = models.CharField(max_length=100, unique=True) - full_score = models.PositiveIntegerField(default=0) - description = models.TextField() - solution = models.TextField() - exam_type = models.ForeignKey(ExamType, - on_delete=models.CASCADE, - related_name='submission_types', - null=True) - programming_language = models.CharField(max_length=25, - choices=LANGUAGE_CHOICES, - default=C) - - def __str__(self) -> str: - return self.name - - class Meta: - verbose_name = "SubmissionType" - verbose_name_plural = "SubmissionType Set" - - @classmethod - def get_annotated_feedback_count(cls) -> QuerySet: - """ Annotates submission lists with counts - - The following fields are annotated: - * number of submissions per submission type - * count of received *accepted* feedback per submission type - * and finally the progress on each submission type as percentage - - The QuerySet that is return is ordered by name lexicographically. - - Returns: - The annotated QuerySet as described above - """ - return cls.objects\ - .annotate( # to display only manual - feedback_final=Count( - Case(When( - Q(submissions__meta__has_final_feedback=True), - then=Value(1)), output_field=IntegerField()) - ), - feedback_in_validation=Count( - Case(When( - Q(submissions__meta__done_assignments=1) & - Q(submissions__meta__has_final_feedback=False), - then=Value(1)), output_field=IntegerField()) - ), - feedback_in_conflict=Count( - Case(When( - Q(submissions__meta__done_assignments=2) & - Q(submissions__meta__has_final_feedback=False), - then=Value(1)), output_field=IntegerField()) - ), - submission_count=Count('submissions'), - ).order_by('name') - - -class SolutionComment(models.Model): - text = models.TextField() - created = models.DateTimeField(auto_now_add=True) - modified = models.DateTimeField(auto_now=True) - - of_line = models.PositiveIntegerField() - of_user = models.ForeignKey( - 'UserAccount', - related_name="solution_comments", - on_delete=models.PROTECT - ) - of_submission_type = models.ForeignKey( - SubmissionType, - related_name="solution_comments", - on_delete=models.PROTECT, - ) diff --git a/grady/core/models/test.py b/grady/core/models/test.py deleted file mode 100644 index b43d3b2c..00000000 --- a/grady/core/models/test.py +++ /dev/null @@ -1,44 +0,0 @@ -import logging -import uuid - -import constance -from django.db import models - -log = logging.getLogger(__name__) -config = constance.config - - -class Test(models.Model): - """Tests contain information that has been unapproved by automated tests, - and directly belongs to a submission. Often certain Feedback was already - given by information provided by these tests. - - Attributes - ---------- - annotation : TextField - All the output of the test (e.g. compiler output) - label : CharField - Indicates SUCCES or FAILURE - name : CharField - The name of the test that was performed - submission : ForeignKey - The submission the tests where unapproved on - """ - test_id = models.UUIDField(primary_key=True, - default=uuid.uuid4, - editable=False) - - name = models.CharField(max_length=30) - label = models.CharField(max_length=50) - annotation = models.TextField() - submission = models.ForeignKey('submission', - related_name='tests', - on_delete=models.CASCADE,) - - class Meta: - verbose_name = "Test" - verbose_name_plural = "Tests" - unique_together = (('submission', 'name'),) - - def __str__(self) -> str: - return f'{self.name} {self.label}' diff --git a/grady/core/models/user_account.py b/grady/core/models/user_account.py deleted file mode 100644 index 281d1747..00000000 --- a/grady/core/models/user_account.py +++ /dev/null @@ -1,109 +0,0 @@ -import logging -import uuid - -import constance -from django.contrib.auth.models import AbstractUser, UserManager -from django.db import models -from django.db.models import (Case, Count, IntegerField, Q, - Value, When) -from django.apps import apps - -from core.models import Group - -log = logging.getLogger(__name__) -config = constance.config - - -class TutorReviewerManager(UserManager): - - def get_queryset(self): - return super().get_queryset().filter( - Q(role=UserAccount.TUTOR) | Q(role=UserAccount.REVIEWER)) - - def with_feedback_count(self): - def _get_counter(stage): - return Count(Case( - When( - Q(assignments__stage=stage) & - Q(assignments__is_done=True), - then=Value(1))), - output_field=IntegerField()) - - assignment_model = apps.get_model('core', 'TutorSubmissionAssignment') # noqa - - return self.get_queryset() \ - .annotate(feedback_created=_get_counter( - assignment_model.FEEDBACK_CREATION)) \ - .annotate(feedback_validated=_get_counter( - assignment_model.FEEDBACK_VALIDATION)) - - -def group_default(): - return [Group.objects.get_or_create(name="Default Group")[0].pk] - - -class UserAccount(AbstractUser): - """ - An abstract base class implementing a fully featured User model with - admin-compliant permissions. - - Username and password are required. Other fields are optional. - """ - - STUDENT = 'Student' - TUTOR = 'Tutor' - REVIEWER = 'Reviewer' - - ROLE_CHOICES = ( - (STUDENT, 'student'), - (TUTOR, 'tutor'), - (REVIEWER, 'reviewer') - ) - - # Fields - role = models.CharField(max_length=50, choices=ROLE_CHOICES) - user_id = models.UUIDField(primary_key=True, - default=uuid.uuid4, - editable=False) - - exercise_groups = models.ManyToManyField(Group, - blank=True, - related_name='users', - default=group_default) - - fullname = models.CharField('full name', max_length=70, blank=True) - is_admin = models.BooleanField(default=False) - - # Managers - objects = UserManager() - corrector = TutorReviewerManager() - - # Helper methods - def is_student(self): - return self.role == 'Student' - - def is_tutor(self): - return self.role == 'Tutor' - - def is_reviewer(self): - return self.role == 'Reviewer' - - def set_groups(self, groups): - if groups == [] or groups is None: - self.exercise_groups.set(group_default()) - else: - self.exercise_groups.set(groups) - - # All of these methods are deprecated and should be replaced by custom - # Managers (see tutor manager) - @classmethod - def get_students(cls): - return cls.objects.filter(role=cls.STUDENT) - - @classmethod - def get_tutors(cls): - return cls.objects.filter(role=cls.TUTOR) - - @classmethod - def get_reviewers(cls): - return cls.objects.filter(role=cls.REVIEWER) diff --git a/grady/core/permissions.py b/grady/core/permissions.py deleted file mode 100644 index af557db0..00000000 --- a/grady/core/permissions.py +++ /dev/null @@ -1,62 +0,0 @@ -import logging - -import constance -from django.http import HttpRequest -from django.views import View -from rest_framework import permissions - -log = logging.getLogger(__name__) -config = constance.config - - -class IsUserRoleGenericPermission(permissions.BasePermission): - """ Generic class that encapsulates how to identify someone - as a member of a user Group """ - - def has_permission(self, request: HttpRequest, view: View) -> bool: - """ required by BasePermission. Check if user is instance of any - of the models provided in class' models attribute """ - assert self.roles is not None, ( - "'%s' has to include a `roles` attribute" - % self.__class__.__name__ - ) - - user = request.user - is_authorized = user.is_superuser or (user.is_authenticated and - user.role in self.roles) - - return is_authorized - - -class IsStudent(IsUserRoleGenericPermission): - """ Has student permissions """ - roles = ('Student', ) - - -class IsReviewer(IsUserRoleGenericPermission): - """ Has reviewer permissions """ - roles = ('Reviewer', ) - - -class IsTutor(IsUserRoleGenericPermission): - """ Has tutor permissions """ - roles = ('Tutor', ) - - -class IsTutorOrReviewer(IsUserRoleGenericPermission): - """ Has tutor or reviewer permissions """ - roles = ('Tutor', 'Reviewer') - - -class GenericIsConfigEnabled(permissions.BasePermission): - """ - Generic class that encapsulates how to check if a runtime config is set. - """ - def has_permission(self, request, view) -> bool: - assert self.required_configs is not None, "Need to include at least one config attribute" - - return all(getattr(config, cfg) for cfg in self.required_configs) - - -class SolutionsEnabledToStudents(GenericIsConfigEnabled): - required_configs = ["SHOW_SOLUTION_TO_STUDENTS"] diff --git a/grady/core/serializers/__init__.py b/grady/core/serializers/__init__.py deleted file mode 100644 index a607259e..00000000 --- a/grady/core/serializers/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -from .common_serializers import * # noqa -from .submission_type import (SubmissionTypeListSerializer, SubmissionTypeSerializer, # noqa - SolutionCommentSerializer) # noqa -from .feedback import (FeedbackSerializer, FeedbackWithStudentSerializer, # noqa - FeedbackCommentSerializer, # noqa - VisibleCommentFeedbackSerializer) # noqa -from .assignment import * # noqa -from .student import * # noqa -from .submission import * # noqa -from .tutor import CorrectorSerializer # noqa -from .label import LabelSerializer # noqa diff --git a/grady/core/serializers/assignment.py b/grady/core/serializers/assignment.py deleted file mode 100644 index 02c3c0a6..00000000 --- a/grady/core/serializers/assignment.py +++ /dev/null @@ -1,73 +0,0 @@ -import secrets - -from rest_framework import serializers - -from core import models -from core.models import (Submission, TutorSubmissionAssignment) -from core.serializers import (DynamicFieldsModelSerializer, FeedbackSerializer, - TestSerializer) - - -class SubmissionAssignmentSerializer(DynamicFieldsModelSerializer): - full_score = serializers.ReadOnlyField(source='type.full_score') - tests = TestSerializer(many=True, read_only=True) - - class Meta: - model = Submission - fields = ('pk', 'type', 'text', 'full_score', 'tests', 'source_code_available') - read_only_fields = ('text', 'type') - - -class AssignmentSerializer(DynamicFieldsModelSerializer): - of_tutor = serializers.CharField(source='owner.username') - - class Meta: - model = TutorSubmissionAssignment - fields = ('pk', 'submission', 'is_done', 'owner', 'stage', 'of_tutor') - read_only_fields = ('is_done', 'submission', 'owner') - - -class AssignmentDetailSerializer(AssignmentSerializer): - feedback = FeedbackSerializer(source='submission.feedback', read_only=True) - submission = SubmissionAssignmentSerializer(read_only=True) - submission_type = serializers.UUIDField(write_only=True) - group = serializers.UUIDField(write_only=True, required=False) - - class Meta: - model = TutorSubmissionAssignment - fields = ('pk', 'submission', 'feedback', 'is_done', - 'owner', 'stage', 'submission_type', 'group') - read_only_fields = ('is_done', 'submission', 'owner') - - def create(self, validated_data): - owner = self.context['request'].user - - open_assignments = TutorSubmissionAssignment.objects.filter( - owner=owner, - is_done=False, - ) - - if len(open_assignments) > 2: - raise models.NotMoreThanTwoOpenAssignmentsAllowed( - 'Not more than two active assignments allowed' - ) - - candidates = TutorSubmissionAssignment.objects.available_assignments({ - **validated_data, - 'owner': owner - }) - - length = len(candidates) - - if length == 0: - raise models.SubmissionTypeDepleted( - 'There are no submissions left for the given criteria' - ) - - index = secrets.choice(range(length)) - - return TutorSubmissionAssignment.objects.create( - submission=candidates[index].submission, - owner=owner, - stage=validated_data.get('stage') - ) diff --git a/grady/core/serializers/common_serializers.py b/grady/core/serializers/common_serializers.py deleted file mode 100644 index c70c5116..00000000 --- a/grady/core/serializers/common_serializers.py +++ /dev/null @@ -1,104 +0,0 @@ -import logging -from collections import defaultdict - -import django.contrib.auth.password_validation as validators -from django.core import exceptions -from django.db.models.manager import Manager -from rest_framework import serializers -from rest_framework.utils import html - -from core import models - -from .generic import DynamicFieldsModelSerializer - -log = logging.getLogger(__name__) - - -class ExamSerializer(DynamicFieldsModelSerializer): - - class Meta: - model = models.ExamType - fields = ('pk', 'module_reference', 'total_score', - 'pass_score', 'pass_only',) - - -class GroupSerializer(serializers.ModelSerializer): - exam = ExamSerializer(many=False) - - class Meta: - model = models.Group - fields = ('pk', 'name', 'exam') - - -class TestSerializer(DynamicFieldsModelSerializer): - - class Meta: - model = models.Test - fields = ('pk', 'name', 'label', 'annotation') - - -class UserAccountSerializer(DynamicFieldsModelSerializer): - exercise_groups = GroupSerializer(many=True) - - def validate(self, data): - password = data.get('password') - - try: - if password is not None: - validators.validate_password(password=password, - user=self.instance) - except exceptions.ValidationError as err: - raise serializers.ValidationError({'password': list(err.messages)}) - return data - - class Meta: - model = models.UserAccount - fields = ('pk', 'username', 'role', 'is_admin', 'password', 'exercise_groups') - read_only_fields = ('pk', 'username', 'role', 'is_admin', 'exercise_groups') - extra_kwargs = {'password': {'write_only': True}} - - -class CommentDictionarySerializer(serializers.ListSerializer): - - def to_internal_value(self, comment_dict): - """ Converts a line_no -> comment list dictionary back to a list - of comments. Currently we do not have any information about the - feedback since it is not available in this scope. Feedback is - responsible to add it later on update/creation """ - if html.is_html_input(comment_dict): - comment_dict = html.parse_html_list(comment_dict) - - if not isinstance(comment_dict, dict): - raise serializers.ValidationError( - 'Comments have to be provided as a dict' - 'with: line -> list of comments' - ) - - ret = [] - errors = [] - - for line, comment in comment_dict.items(): - try: - comment['of_line'] = line - validated = self.child.run_validation(comment) - except serializers.ValidationError as err: - errors.append(err.detail) - else: - ret.append(validated) - errors.append({}) - - if any(errors): - raise serializers.ValidationError(errors) - - return ret - - def to_representation(self, comments): - """ Provides a dict where all the keys correspond to lines and contain - a list of comments on that line. """ - if isinstance(comments, Manager): - comments = comments.all() - - ret = defaultdict(list) - for comment in comments: - ret[comment.of_line].append(self.child.to_representation(comment)) - return ret diff --git a/grady/core/serializers/feedback.py b/grady/core/serializers/feedback.py deleted file mode 100644 index d67db180..00000000 --- a/grady/core/serializers/feedback.py +++ /dev/null @@ -1,252 +0,0 @@ -import logging - -import constance -from django.db import transaction -from rest_framework import serializers - -from core import models -from core.models import Feedback, UserAccount -from core.serializers import CommentDictionarySerializer -from util.factories import GradyUserFactory - -from .generic import DynamicFieldsModelSerializer - -config = constance.config -log = logging.getLogger(__name__) -user_factory = GradyUserFactory() - - -class FeedbackCommentSerializer(DynamicFieldsModelSerializer): - of_tutor = serializers.StringRelatedField(source='of_tutor.username') - labels = serializers.PrimaryKeyRelatedField(many=True, required=False, - queryset=models.FeedbackLabel.objects.all()) - - class Meta: - model = models.FeedbackComment - fields = ('pk', - 'text', - 'created', - 'modified', - 'of_tutor', - 'of_line', - 'labels', - 'visible_to_student') - # visible_to_student is kept in sync with modified, such that the latest modified - # comment is the one that is visible - read_only_fields = ('created', 'of_tutor', 'visible_to_student') - extra_kwargs = { - 'of_feedback': {'write_only': True}, - 'of_line': {'write_only': True}, - } - list_serializer_class = CommentDictionarySerializer - - -class FeedbackSerializer(DynamicFieldsModelSerializer): - feedback_lines = FeedbackCommentSerializer(many=True, required=False) - of_submission_type = serializers.ReadOnlyField( - source='of_submission.type.pk') - feedback_stage_for_user = serializers.SerializerMethodField() - labels = serializers.PrimaryKeyRelatedField(many=True, required=False, - queryset=models.FeedbackLabel.objects.all()) - - def get_feedback_stage_for_user(self, obj): - """ Search for the assignment of this feedback and report in which - stage the tutor has worked on it. - - TODO Note: This method is unorthodox since it mingles the rather dump - feedback object with assignment logic. The reverse lookups in the - method are not pre-fetched. Remove if possible. """ - if 'request' not in self.context: - return - - # This is only required for tutors - user = self.context['request'].user - if user.role == models.UserAccount.REVIEWER: - return None - - assignments = obj.of_submission.assignments.filter(owner=user) - - if assignments.count() == 0: - return None - - return assignments[0].stage - - @transaction.atomic - def create(self, validated_data) -> Feedback: - submission = validated_data.pop('of_submission') - feedback_lines = validated_data.pop('feedback_lines', []) - labels = validated_data.pop('labels', []) - user = self.context['request'].user - if config.SINGLE_CORRECTION: - is_final = True - validated_data.pop('is_final') - else: - is_final = validated_data.pop('is_final', False) - final_by_reviewer = is_final and \ - user.role == UserAccount.REVIEWER - feedback = Feedback.objects.create(of_submission=submission, - is_final=is_final, - final_by_reviewer=final_by_reviewer, - **validated_data) - for label in labels: - feedback.labels.add(label) - - submission.meta.feedback_authors.add(self.context['request'].user) - - for comment in feedback_lines: - labels = comment.pop('labels', []) - comment_instance = models.FeedbackComment.objects.create( - of_feedback=feedback, - of_tutor=self.context['request'].user, - **comment - ) - comment_instance.labels.set(labels) - - return feedback - - @transaction.atomic - def update(self, feedback, validated_data): - user = self.context['request'].user - - if user.role == UserAccount.REVIEWER: - feedback.final_by_reviewer = self.context['request'].data['is_final'] - - for comment in validated_data.pop('feedback_lines', []): - labels = comment.pop('labels', None) - comment_instance, _ = models.FeedbackComment.objects.update_or_create( - of_feedback=feedback, - of_tutor=self.context['request'].user, - of_line=comment.get('of_line'), - defaults={'text': comment.get('text')}) - - if labels is not None: - comment_instance.labels.set(labels) - - # Set all feedback final for when single correction is active - if config.SINGLE_CORRECTION: - feedback.is_final = True - validated_data['is_final'] = True - - return super().update(feedback, validated_data) - - def validate_of_submission(self, submission): - feedback = self.instance - if feedback is not None and feedback.of_submission.pk != submission.pk: - raise serializers.ValidationError( - 'It is not allowed to update this field.') - - return submission - - def validate_is_final(self, is_final): - feedback = self.instance - if feedback is None: - return is_final - - user = self.context['request'].user - meta = feedback.of_submission.meta - user_in_authors = meta.feedback_authors.filter(user_id=user.user_id).exists() - allowed_assignment_count = 3 if user_in_authors else 2 - if meta.done_assignments >= allowed_assignment_count and not is_final: - raise serializers.ValidationError( - 'Conflict resolutions must be final' - ) - - return is_final - - def validate(self, data): - if self.instance: - score = data.get('score', self.instance.score) - submission = data.get('of_submission', self.instance.of_submission) - else: - try: - score = data.get('score') - submission = data.get('of_submission') - except KeyError: - raise serializers.ValidationError( - 'You need a score and a submission.') - - if not 0 <= score <= submission.type.full_score: - raise serializers.ValidationError( - f'Score has to be in range [0..{submission.type.full_score}].') - - if score.as_integer_ratio()[1] not in Feedback.ALLOWED_DENOMINATORS: - raise serializers.ValidationError( - f'For fractional scores, the denominator must be one of ' - f'{Feedback.ALLOWED_DENOMINATORS}' - ) - - has_full_score = score == submission.type.full_score - has_feedback_lines = ('feedback_lines' in data and - len(data['feedback_lines']) > 0 or - self.instance is not None and - self.instance.feedback_lines.count() > 0) - - has_label_attached = ('labels' in data and len(data['labels']) > 0 or - self.instance is not None and - self.instance.labels.count() > 0) - - labels_get_deleted = 'labels' in data and len(data['labels']) == 0 - - # a non-full scored feedback is considered valid if there is - # at least one comment line or a label attached to the feedback - if not (has_full_score or has_feedback_lines or - (has_label_attached and not labels_get_deleted)): - raise serializers.ValidationError( - 'Sorry, you have to explain why this does not get full score') - - if hasattr(submission, 'feedback') and not self.instance: - raise serializers.ValidationError( - 'Feedback for this submission already exists') - - for comment in data.get('feedback_lines', {}): - lines_in_submission = len(submission.text.split('\n')) - - if comment['text'] == '' and 'labels' not in comment: - raise serializers.ValidationError( - "Cannot create feedback with an empty comment attached to it" - ) - if not 0 < comment['of_line'] <= lines_in_submission: - raise serializers.ValidationError( - "Cannot comment line number %d of %d" % ( - comment['of_line'], lines_in_submission)) - - return data - - class Meta: - model = Feedback - fields = ('pk', 'of_submission', 'is_final', 'score', 'feedback_lines', - 'created', 'modified', 'of_submission_type', 'feedback_stage_for_user', 'labels') - - -class FeedbackWithStudentSerializer(FeedbackSerializer): - of_student = serializers.ReadOnlyField(source='of_submission.student.user.fullname') - - class Meta: - model = Feedback - fields = ('pk', 'of_submission', 'is_final', 'score', 'feedback_lines', 'of_student', - 'created', 'modified', 'of_submission_type', 'feedback_stage_for_user', 'labels') - - -class VisibleCommentFeedbackSerializer(FeedbackSerializer): - feedback_lines = serializers.SerializerMethodField() - of_submission_type = serializers.ReadOnlyField( - source='of_submission.type.pk') - - def get_feedback_lines(self, feedback): - comments = feedback.feedback_lines.filter(visible_to_student=True) - serializer = FeedbackCommentSerializer( - comments, - many=True, - fields=('pk', 'text', 'created', 'modified', 'of_line', 'labels') - ) - # this is a weird hack because, for some reason, serializer.data - # just won't contain the correct data. Instead .data returns a list - # containing just the `of_line` attr of the serialized comments - # after long debugging i found that for inexplicable reasons - # `data.serializer._data` contains the correct data. No clue why. - return serializer.data.serializer._data - - class Meta: - model = Feedback - fields = ('pk', 'of_submission', 'is_final', 'score', 'feedback_lines', - 'created', 'of_submission_type', 'labels') diff --git a/grady/core/serializers/generic.py b/grady/core/serializers/generic.py deleted file mode 100644 index 944c7a30..00000000 --- a/grady/core/serializers/generic.py +++ /dev/null @@ -1,18 +0,0 @@ -from rest_framework import serializers - - -class DynamicFieldsModelSerializer(serializers.ModelSerializer): - - def __init__(self, *args, **kwargs): - # Don't pass the 'fields' arg up to the superclass - fields = kwargs.pop('fields', None) - - # Instantiate the superclass normally - super(DynamicFieldsModelSerializer, self).__init__(*args, **kwargs) - - if fields is not None: - # Drop any fields that are not specified in the `fields` argument. - allowed = set(fields) - existing = set(self.fields) - for field_name in existing - allowed: - self.fields.pop(field_name) diff --git a/grady/core/serializers/label.py b/grady/core/serializers/label.py deleted file mode 100644 index 9aad4762..00000000 --- a/grady/core/serializers/label.py +++ /dev/null @@ -1,14 +0,0 @@ -from rest_framework import serializers - -from core.models import FeedbackLabel - - -class LabelSerializer(serializers.ModelSerializer): - class Meta: - model = FeedbackLabel - fields = ( - 'pk', - 'name', - 'description', - 'colour' - ) diff --git a/grady/core/serializers/student.py b/grady/core/serializers/student.py deleted file mode 100644 index 54a234a4..00000000 --- a/grady/core/serializers/student.py +++ /dev/null @@ -1,81 +0,0 @@ -from rest_framework import serializers - -from core.models import StudentInfo, ExamInfo -from core.serializers import DynamicFieldsModelSerializer, ExamSerializer -from core.serializers.submission import (SubmissionListSerializer, - SubmissionNoTextFieldsSerializer, - SubmissionNoTypeSerializer) - - -class ExamInfoListSerializer(DynamicFieldsModelSerializer): - - class Meta: - model = ExamInfo - fields = ('exam', 'student', 'total_score', 'passes_exam') - - -class StudentInfoSerializer(DynamicFieldsModelSerializer): - name = serializers.ReadOnlyField(source='user.fullname') - matrikel_no = serializers.ReadOnlyField(source='user.matrikel_no') - exams = ExamInfoListSerializer(many=True) - submissions = SubmissionListSerializer(many=True) - - class Meta: - model = StudentInfo - fields = ('pk', - 'name', - 'user', - 'matrikel_no', - 'submissions', - 'exams') - - -class StudentInfoForListViewSerializer(DynamicFieldsModelSerializer): - name = serializers.ReadOnlyField(source='user.fullname') - user = serializers.ReadOnlyField(source='user.username') - user_pk = serializers.ReadOnlyField(source='user.pk') - exams = serializers.ReadOnlyField(source='exams.module_reference') - submissions = SubmissionNoTextFieldsSerializer(many=True) - is_active = serializers.BooleanField(source='user.is_active') - - class Meta: - model = StudentInfo - fields = ('pk', - 'name', - 'user', - 'user_pk', - 'exams', - 'submissions', - 'matrikel_no', - 'is_active') - - -class StudentExportSerializer(DynamicFieldsModelSerializer): - name = serializers.ReadOnlyField(source='user.fullname') - user = serializers.ReadOnlyField(source='user.username') - user_pk = serializers.ReadOnlyField(source='user.pk') - exams = ExamInfoListSerializer(many=True) - email = serializers.ReadOnlyField(source='user.email') - is_active = serializers.BooleanField(source='user.is_active') - submissions = SubmissionNoTypeSerializer(many=True) - - class Meta: - model = StudentInfo - fields = ('pk', - 'name', - 'user', - 'user_pk', - 'exams', - 'email', - 'submissions', - 'matrikel_no', - 'is_active') - - -class ExamInfoSerializer(DynamicFieldsModelSerializer): - exam = ExamSerializer() - student = StudentInfoSerializer() - - class Meta: - model = ExamInfo - fields = ('exam', 'student', 'total_score', 'passes_exam') diff --git a/grady/core/serializers/submission.py b/grady/core/serializers/submission.py deleted file mode 100644 index b7b789d2..00000000 --- a/grady/core/serializers/submission.py +++ /dev/null @@ -1,69 +0,0 @@ -from rest_framework import serializers - -from core.models import Submission -from core.serializers import (DynamicFieldsModelSerializer, FeedbackSerializer, - SubmissionTypeListSerializer, - SubmissionTypeSerializer, TestSerializer, - VisibleCommentFeedbackSerializer) - - -class SubmissionNoTextFieldsSerializer(DynamicFieldsModelSerializer): - score = serializers.ReadOnlyField(source='feedback.score') - final = serializers.ReadOnlyField(source='feedback.is_final') - full_score = serializers.ReadOnlyField(source='type.full_score') - - class Meta: - model = Submission - fields = ('pk', 'type', 'score', 'final', 'full_score') - - -class StudentSubmissionSerializer(DynamicFieldsModelSerializer): - type = SubmissionTypeSerializer( - # exclude solution from Type information - fields=(('pk', - 'name', - 'full_score', - 'description', - 'programming_language'))) - feedback = VisibleCommentFeedbackSerializer() - tests = TestSerializer(many=True) - - class Meta: - model = Submission - fields = ('pk', 'type', 'text', 'feedback', 'tests', 'source_code_available') - - -class StudentSubmissionWithSolutionSerializer(StudentSubmissionSerializer): - type = SubmissionTypeSerializer() - - class Meta: - model = Submission - fields = ('pk', 'type', 'text', 'feedback', 'tests', 'source_code_available') - - -class SubmissionNoTypeSerializer(DynamicFieldsModelSerializer): - feedback = FeedbackSerializer() - full_score = serializers.ReadOnlyField(source='type.full_score') - tests = TestSerializer(many=True) - - class Meta: - model = Submission - fields = ('pk', 'type', 'full_score', 'text', 'feedback', 'tests', 'source_code_available') - - -class SubmissionNoTypeWithStudentSerializer(SubmissionNoTypeSerializer): - of_student = serializers.ReadOnlyField(source='student.user.fullname') - - class Meta: - model = Submission - fields = ('pk', 'type', 'full_score', 'text', 'feedback', - 'tests', 'of_student', 'source_code_available') - - -class SubmissionListSerializer(DynamicFieldsModelSerializer): - type = SubmissionTypeListSerializer(fields=('pk', 'name', 'full_score')) - feedback = FeedbackSerializer() - - class Meta: - model = Submission - fields = ('pk', 'type', 'feedback') diff --git a/grady/core/serializers/submission_type.py b/grady/core/serializers/submission_type.py deleted file mode 100644 index d60e44fb..00000000 --- a/grady/core/serializers/submission_type.py +++ /dev/null @@ -1,68 +0,0 @@ -import logging - -from rest_framework import serializers -from rest_framework.exceptions import ValidationError - -from core import models -from core.serializers import (DynamicFieldsModelSerializer, CommentDictionarySerializer, - ExamSerializer) - -log = logging.getLogger(__name__) - - -class SolutionCommentSerializer(DynamicFieldsModelSerializer): - of_user = serializers.StringRelatedField(source='of_user.username') - - def validate(self, attrs): - super().validate(attrs) - submission_type = attrs.get('of_submission_type') - of_line = attrs.get('of_line') - if self.instance: - submission_type = self.instance.of_submission_type - of_line = self.instance.of_line - - max_line_number = len(submission_type.solution.split('\n')) - - if not (0 < of_line <= max_line_number): - raise ValidationError('Invalid line number for comment') - return attrs - - def create(self, validated_data): - validated_data['of_user'] = self.context['request'].user - return super().create(validated_data) - - class Meta: - model = models.SolutionComment - fields = ( - 'pk', - 'text', - 'created', - 'of_user', - 'of_line', - 'of_submission_type' - ) - read_only_fields = ('pk', 'created', 'of_user') - list_serializer_class = CommentDictionarySerializer - - -class SubmissionTypeListSerializer(DynamicFieldsModelSerializer): - - class Meta: - model = models.SubmissionType - fields = ('pk', 'name', 'full_score') - - -class SubmissionTypeSerializer(DynamicFieldsModelSerializer): - solution_comments = SolutionCommentSerializer(many=True, required=False) - exam_type = ExamSerializer() - - class Meta: - model = models.SubmissionType - fields = ('pk', - 'name', - 'exam_type', - 'full_score', - 'description', - 'solution', - 'programming_language', - 'solution_comments') diff --git a/grady/core/serializers/tutor.py b/grady/core/serializers/tutor.py deleted file mode 100644 index b2eff1e8..00000000 --- a/grady/core/serializers/tutor.py +++ /dev/null @@ -1,63 +0,0 @@ -import logging - -import django.contrib.auth.password_validation as validators -from django.core import exceptions -from rest_framework import serializers - -from core import models -from util.factories import GradyUserFactory - -from .generic import DynamicFieldsModelSerializer - -log = logging.getLogger(__name__) -user_factory = GradyUserFactory() - - -class CorrectorSerializer(DynamicFieldsModelSerializer): - feedback_created = serializers.SerializerMethodField() - feedback_validated = serializers.SerializerMethodField() - password = serializers.CharField( - style={'input_type': 'password'}, - write_only=True, - required=False - ) - role = serializers.CharField(read_only=True) - - def get_feedback_created(self, t): - ''' It is required that this field was previously annotated ''' - return t.feedback_created if hasattr(t, 'feedback_created') else 0 - - def get_feedback_validated(self, t): - ''' It is required that this field was previously annotated ''' - return t.feedback_validated if hasattr(t, 'feedback_validated') else 0 - - def create(self, validated_data) -> models.UserAccount: - log_validated_data = dict(validated_data) - log_validated_data['password'] = '******' - log.info("Crating tutor from data %s", log_validated_data) - return user_factory.make_tutor( - username=validated_data['username'], - password=validated_data.get('password'), - is_active=validated_data.get('is_active', False)) - - def validate(self, data): - user = models.UserAccount(**data) - password = data.get('password') - - try: - if password is not None: - validators.validate_password(password=password, user=user) - except exceptions.ValidationError as err: - raise serializers.ValidationError({'password': list(err.messages)}) - return data - - class Meta: - model = models.UserAccount - fields = ('pk', - 'password', - 'is_active', - 'username', - 'feedback_created', - 'feedback_validated', - 'exercise_groups', - 'role') diff --git a/grady/core/signals.py b/grady/core/signals.py deleted file mode 100644 index b857cb0b..00000000 --- a/grady/core/signals.py +++ /dev/null @@ -1,73 +0,0 @@ -import logging - -from django.db.models.signals import post_save, pre_delete, pre_save -from django.dispatch import receiver - -from core import models -from core.models import (Feedback, FeedbackComment, MetaSubmission, Submission, - TutorSubmissionAssignment) - -log = logging.getLogger(__name__) - - -@receiver(post_save, sender=Submission) -def create_meta_after_submission_create(sender, instance, created, **kwargs): - log.debug('SIGNAL -- create_meta_after_submission_create') - if created: - MetaSubmission.objects.create(submission=instance) - - -@receiver(post_save, sender=TutorSubmissionAssignment) -def update_active_after_assignment_save(sender, instance, created, **kwargs): - """ Assignments are created undone therefore save that no other - should use it. If it is already set to done it is not active. - """ - log.debug('SIGNAL -- update_active_after_assignment_save') - meta = instance.submission.meta - meta.has_active_assignment = created and not instance.is_done - meta.save() - - -@receiver(pre_delete, sender=TutorSubmissionAssignment) -def remove_active_assignment_on_delete(sender, instance, **kwargs): - log.debug('SIGNAL -- remove_active_assignment_on_delete') - if instance.is_done: - raise models.DeletionOfDoneAssignmentsNotPermitted() - meta = instance.submission.meta - meta.has_active_assignment = False - meta.save() - - -@receiver(post_save, sender=Feedback) -def update_after_feedback_save(sender, instance, created, **kwargs): - """ Do the following steps when feedback is saved: - - - set that feedback exists - - copy the final status of the feedback - - set all assignments of the submission done and remove active status - """ - log.debug('SIGNAL -- update_after_feedback_save') - meta = instance.of_submission.meta - meta.has_feedback = True - meta.has_final_feedback = instance.is_final or instance.final_by_reviewer - meta.save() - - -@receiver(post_save, sender=Feedback) -def update_student_score(sender, instance, **kwargs): - student = instance.of_submission.student - - for exam_info in student.exams.all(): - exam_info.update_total_score() - log.debug('SIGNAL -- Scores of student %s were updated)', student) - - -@receiver(pre_save, sender=FeedbackComment) -def set_comment_visibility_after_conflict(sender, instance, **kwargs): - log.debug('SIGNAL -- set_comment_visibility_after_conflict') - comments_on_the_same_line = FeedbackComment.objects.filter( - of_line=instance.of_line, - of_feedback=instance.of_feedback, - ) - comments_on_the_same_line.update(visible_to_student=False) - instance.visible_to_student = True diff --git a/grady/core/templates/index.html b/grady/core/templates/index.html deleted file mode 100644 index c94bda45..00000000 --- a/grady/core/templates/index.html +++ /dev/null @@ -1,18 +0,0 @@ -{% load static %} -<!DOCTYPE html><html><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Grady</title><script>MathJax = { - loader: {load: ['input/asciimath', 'output/chtml', 'input/tex']}, - asciimath: { - delimiters: [['$', '$']] - }, - options: { - skipHtmlTags: [// HTML tags that won't be searched for math - 'script', 'noscript', 'style', 'textarea', 'pre', - 'code', 'annotation', 'annotation-xml' - ], - includeHtmlTags: { // HTML tags that can appear within math - br: '\n', wbr: '', '#comment': '' - }, - ignoreHtmlClass: 'tex2jax_ignore', // class that marks tags not to search - processHtmlClass: 'latex', // class that marks tags that should be searched - } - };</script><script id=MathJax-script async src=https://grady.informatik.uni-goettingen.de/static/mathjax/es5/startup.js></script><link href={% static 'css/app.456a8c3b.css' %} rel=preload as=style><link href={% static 'css/chunk-vendors.7792972f.css' %} rel=preload as=style><link href={% static 'js/app.fa6788ea.js' %} rel=preload as=script><link href={% static 'js/chunk-vendors.a2099867.js' %} rel=preload as=script><link href={% static 'css/chunk-vendors.7792972f.css' %} rel=stylesheet><link href={% static 'css/app.456a8c3b.css' %} rel=stylesheet></head><body class=tex2jax_ignore><noscript><strong>We're sorry but frontend doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script src={% static 'js/chunk-vendors.a2099867.js' %}></script><script src={% static 'js/app.fa6788ea.js' %}></script></body></html> \ No newline at end of file diff --git a/grady/core/tests/__init__.py b/grady/core/tests/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/grady/core/tests/test_access_rights.py b/grady/core/tests/test_access_rights.py deleted file mode 100644 index 4fbe8575..00000000 --- a/grady/core/tests/test_access_rights.py +++ /dev/null @@ -1,163 +0,0 @@ -from django.urls import reverse -from rest_framework import status -from rest_framework.test import (APIRequestFactory, APITestCase, - force_authenticate) - -from core.views import (ExamApiViewSet, StudentReviewerApiViewSet, - StudentSelfApiView, CorrectorApiViewSet) -from util.factories import GradyUserFactory, make_exams - - -class AccessRightsOfStudentAPIViewTests(APITestCase): - """ All tests that ensure that only students can see what students - should see belong here """ - - @classmethod - def setUpTestData(cls): - cls.factory = APIRequestFactory() - cls.user_factory = GradyUserFactory() - - def setUp(self): - self.exam = make_exams(exams=[{ - 'module_reference': 'Test Exam 01', - 'total_score': 100, - 'pass_score': 60, - }])[0] - self.student = self.user_factory.make_student(exam=self.exam) - self.tutor = self.user_factory.make_tutor(exam=self.exam) - self.reviewer = self.user_factory.make_reviewer(exam=self.exam) - self.request = self.factory.get(reverse('student-page')) - self.view = StudentSelfApiView.as_view() - - def test_unauthenticated_access_denied(self): - response = self.view(self.request) - self.assertEqual(status.HTTP_401_UNAUTHORIZED, response.status_code) - - def test_tutor_has_no_access(self): - force_authenticate(self.request, user=self.tutor) - response = self.view(self.request) - self.assertEqual(status.HTTP_403_FORBIDDEN, response.status_code) - - def test_reviewer_has_no_access(self): - force_authenticate(self.request, user=self.reviewer) - response = self.view(self.request) - self.assertEqual(status.HTTP_403_FORBIDDEN, response.status_code) - - def test_student_is_authorized(self): - force_authenticate(self.request, user=self.student) - response = self.view(self.request) - self.assertEqual(status.HTTP_200_OK, response.status_code) - - -class AccessRightsOfTutorAPIViewTests(APITestCase): - """ Tests to ensure that only Reviewers have access to the TutorList - information """ - @classmethod - def setUpTestData(cls): - cls.factory = APIRequestFactory() - cls.user_factory = GradyUserFactory() - - def setUp(self): - self.exam = make_exams(exams=[{ - 'module_reference': 'Test Exam 01', - 'total_score': 100, - 'pass_score': 60, - }])[0] - self.student = self.user_factory.make_student(exam=self.exam) - self.tutor = self.user_factory.make_tutor(exam=self.exam) - self.reviewer = self.user_factory.make_reviewer(exam=self.exam) - self.request = self.factory.get(reverse('corrector-list')) - self.view = CorrectorApiViewSet.as_view({'get': 'list'}) - - def test_unauthenticated_access_denied(self): - response = self.view(self.request) - self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED) - - def test_student_has_no_access(self): - force_authenticate(self.request, user=self.student) - response = self.view(self.request) - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) - - def test_tutor_has_no_access(self): - force_authenticate(self.request, user=self.tutor) - response = self.view(self.request) - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) - - def test_reviewer_has_access(self): - force_authenticate(self.request, user=self.reviewer) - response = self.view(self.request) - self.assertEqual(response.status_code, status.HTTP_200_OK) - - -class AccessRightsOfStudentReviewerAPIViewTest(APITestCase): - """ Tests to ensure that only Reviewers have access to the - StudentReviewerApi endpoint information""" - - @classmethod - def setUpTestData(cls): - cls.factory = APIRequestFactory() - cls.user_factory = GradyUserFactory() - - def setUp(self): - self.exam = make_exams(exams=[{ - 'module_reference': 'Test Exam 01', - 'total_score': 100, - 'pass_score': 60, - }])[0] - self.student = self.user_factory.make_student(exam=self.exam) - self.tutor = self.user_factory.make_tutor(exam=self.exam) - self.reviewer = self.user_factory.make_reviewer(exam=self.exam) - self.request = self.factory.get(reverse('student-list')) - self.view = StudentReviewerApiViewSet.as_view({'get': 'list'}) - - def test_unauthenticated_access_denied(self): - response = self.view(self.request) - self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED) - - def test_student_has_no_access(self): - force_authenticate(self.request, user=self.student) - response = self.view(self.request) - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) - - def test_reviewer_has_access(self): - force_authenticate(self.request, user=self.reviewer) - response = self.view(self.request) - self.assertEqual(response.status_code, status.HTTP_200_OK) - - -class AccessRightsOfExamTypeAPIViewTest(APITestCase): - """ In older versions students had no access rights, but since multiple exams can now be - imported and the examselection page is necessary, everyone needs access.""" - - @classmethod - def setUpTestData(cls): - cls.factory = APIRequestFactory() - cls.user_factory = GradyUserFactory() - - def setUp(self): - self.exam = make_exams(exams=[{ - 'module_reference': 'Test Exam 01', - 'total_score': 100, - 'pass_score': 60, - }])[0] - self.student = self.user_factory.make_student(exam=self.exam) - self.tutor = self.user_factory.make_tutor(exam=self.exam) - self.reviewer = self.user_factory.make_reviewer(exam=self.exam) - self.request = self.factory.get(reverse('examtype-list')) - self.view = ExamApiViewSet.as_view({'get': 'list'}) - - def test_student_has_access(self): - force_authenticate(self.request, user=self.student) - response = self.view(self.request) - self.assertEqual(response.status_code, status.HTTP_200_OK) - - # TODO see issue #90 for details - # def test_tutor_has_no_access(self): - # force_authenticate(self.request, user=self.tutor) - # response = self.view(self.request) - # self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) - - def test_reviewer_has_access(self): - force_authenticate(self.request, user=self.reviewer) - response = self.view(self.request) - self.assertEqual(response.status_code, status.HTTP_200_OK) diff --git a/grady/core/tests/test_assignment_views.py b/grady/core/tests/test_assignment_views.py deleted file mode 100644 index a205d97c..00000000 --- a/grady/core/tests/test_assignment_views.py +++ /dev/null @@ -1,317 +0,0 @@ -from rest_framework import status -from rest_framework.test import APIClient, APITestCase - -from core import models -from core.models import (TutorSubmissionAssignment) -from util.factories import make_test_data, make_exams - - -class TestApiEndpoints(APITestCase): - - @classmethod - def setUpTestData(cls): - exams = make_exams([{ - 'module_reference': 'Test Exam 01', - 'total_score': 100, - 'pass_score': 60, - }] - ) - cls.data = make_test_data(data_dict={ - 'exams': [{ - 'module_reference': 'Test Exam 01', - 'total_score': 100, - 'pass_score': 60, - 'exam_type_id': exams[0].exam_type_id - }], - 'submission_types': [ - { - 'name': '01. Sort this or that', - 'full_score': 35, - 'description': 'Very complicated', - 'solution': 'Trivial!', - 'exam_type': exams[0] - }, - { - 'name': '02. Merge this or that or maybe even this', - 'full_score': 35, - 'description': 'Very complicated', - 'solution': 'Trivial!', - 'exam_type': exams[0] - } - ], - 'students': [ - { - 'username': 'student01', - 'password': 'p', - 'exam': 'Test Exam 01' - }, - { - 'username': 'student02', - 'password': 'p', - 'exam': 'Test Exam 01' - } - ], - 'tutors': [ - {'username': 'tutor01', 'password': 'p'}, - {'username': 'tutor02', 'password': 'p'} - ], - 'reviewers': [ - {'username': 'reviewer', 'password': 'p'} - ], - 'submissions': [ - { - 'text': 'function blabl\n' - ' on multi lines\n' - ' for blabla in bla:\n' - ' lorem ipsum und so\n', - 'type': '01. Sort this or that', - 'user': 'student01', - 'feedback': { - 'score': 5, - 'is_final': True, - 'feedback_lines': { - '1': [{ - 'text': 'This is very bad!', - 'of_tutor': 'tutor01' - }], - } - - } - }, - { - 'text': 'function blabl\n' - ' asasxasx\n' - ' lorem ipsum und so\n', - 'type': '02. Merge this or that or maybe even this', - 'user': 'student01' - }, - { - 'text': 'function blabl\n' - ' on multi lines\n' - ' asasxasx\n' - ' lorem ipsum und so\n', - 'type': '01. Sort this or that', - 'user': 'student02' - }, - { - 'text': 'function lorem ipsum etc\n', - 'type': '02. Merge this or that or maybe even this', - 'user': 'student02' - }, - ]} - ) - - def setUp(self): - self.client = APIClient() - - def test_tutor_gets_an_assignment(self): - self.client.force_authenticate(user=self.data['tutors'][0]) - - response = self.client.post('/api/assignment/', { - "submission_type": self.data['submission_types'][0].pk, - "stage": "feedback-creation", - }) - self.assertEqual(status.HTTP_201_CREATED, response.status_code) - - # we should simply test if any newly created assignment is unfinished - def test_first_work_assignment_was_created_unfinished(self): - self.client.force_authenticate(user=self.data['tutors'][0]) - - self.client.post('/api/assignment/', { - "submission_type": self.data['submission_types'][0].pk, - "stage": "feedback-creation", - }) - self.assertFalse(TutorSubmissionAssignment.objects.first().is_done) - - def test_assignment_raises_error_when_depleted(self): - self.data['submissions'][0].delete() - self.data['submissions'][2].delete() - - self.client.force_authenticate(user=self.data['tutors'][0]) - - response = self.client.post('/api/assignment/', { - "submission_type": self.data['submission_types'][0].pk, - "stage": "feedback-creation", - }) - self.assertEqual(status.HTTP_404_NOT_FOUND, response.status_code) - - def test_assignment_delete_of_done_not_permitted(self): - self.client.force_authenticate(user=self.data['tutors'][0]) - - self.client.post('/api/assignment/', { - "submission_type": self.data['submission_types'][0].pk, - "stage": "feedback-creation", - }) - first = TutorSubmissionAssignment.objects.first() - first.is_done = True - first.save() - - self.assertRaises(models.DeletionOfDoneAssignmentsNotPermitted, - first.delete) - - def test_assignment_delete_undone_permitted(self): - self.client.force_authenticate(user=self.data['tutors'][0]) - - self.client.post('/api/assignment/', { - "submission_type": self.data['submission_types'][0].pk, - "stage": "feedback-creation", - }) - first = TutorSubmissionAssignment.objects.first() - first.delete() - - self.assertEqual(0, TutorSubmissionAssignment.objects.all().count()) - - def tutor_can_release_own_unfinished_assignments(self): - self.client.force_authenticate(user=self.data['tutors'][0]) - - response = self.client.post('/api/assignment/', { - "submission_type": self.data['submission_types'][0].pk, - "stage": "feedback-creation", - }) - self.assertEqual(status.HTTP_201_CREATED, response.status_code) - - response = self.client.post('/api/assignment/', { - "submission_type": self.data['submission_types'][0].pk, - "stage": "feedback-creation", - }) - self.assertEqual(status.HTTP_201_CREATED, response.status_code) - self.client.post( - f'/api/assignment/{response.data["pk"]}/finish/', { - "score": 23, - "of_submission": response.data['submission']['pk'], - "feedback_lines": { - 1: {"text": "< some string >", "labels": []}, - 2: {"text": "< some string >", "labels": []} - }, - "labels": [], - } - ) - self.assertEqual(2, TutorSubmissionAssignment.objects.all().count()) - self.assertEqual(1, TutorSubmissionAssignment.objects.filter(is_done=True).count()) - - self.client.force_authenticate(user=self.data['tutors'][1]) - - response = self.client.post('/api/assignment/', { - "submission_type": self.data['submission_types'][0].pk, - "stage": "feedback-creation", - }) - self.assertEqual(status.HTTP_201_CREATED, response.status_code) - - response = self.client.delete('/api/assignment/') - self.assertEqual(status.HTTP_204_NO_CONTENT, response.status_code) - self.assertEqual(2, TutorSubmissionAssignment.objects.all().count()) - - def test_two_tutors_cant_have_assignments_for_same_submission(self): - self.client.force_authenticate(user=self.data['tutors'][0]) - - assignment_fst_tutor = self.client.post('/api/assignment/', { - "submission_type": self.data['submission_types'][1].pk, - "stage": "feedback-creation", - }).data - - self.client.force_authenticate(user=self.data['tutors'][1]) - - assignment_snd_tutor = self.client.post('/api/assignment/', { - "submission_type": self.data['submission_types'][1].pk, - "stage": "feedback-creation", - }).data - - self.assertNotEqual(assignment_fst_tutor['submission']['pk'], - assignment_snd_tutor['submission']['pk']) - - def test_reviewer_can_get_active_assignments(self): - self.client.force_authenticate(user=self.data['tutors'][0]) - - assignment = self.client.post('/api/assignment/', { - "submission_type": self.data['submission_types'][0].pk, - "stage": "feedback-creation", - }).data - - # tutors shouldn't have access - res = self.client.get('/api/assignment/active/') - self.assertEqual(status.HTTP_403_FORBIDDEN, res.status_code) - - self.client.force_authenticate(user=self.data['reviewers'][0]) - - active_assignments = self.client.get('/api/assignment/active/').data - self.assertIn(assignment['pk'], [assignment['pk'] for assignment in active_assignments]) - - def test_reviewer_can_delete_active_assignments(self): - self.client.force_authenticate(user=self.data['tutors'][0]) - - assignment = self.client.post('/api/assignment/', { - "submission_type": self.data['submission_types'][0].pk, - "stage": "feedback-creation", - }).data - - # tutors shouldn't have access - res = self.client.delete('/api/assignment/active/') - self.assertEqual(status.HTTP_403_FORBIDDEN, res.status_code) - - self.client.force_authenticate(user=self.data['reviewers'][0]) - - res = self.client.delete('/api/assignment/active/') - self.assertEqual(status.HTTP_204_NO_CONTENT, res.status_code) - self.assertNotIn( - assignment['pk'], - [assignment.pk for assignment - in TutorSubmissionAssignment.objects.filter(is_done=False)] - ) - - def test_all_stages_of_the_subscription(self): - self.client.force_authenticate(user=self.data['tutors'][0]) - - response = self.client.post('/api/assignment/', { - "submission_type": self.data['submission_types'][0].pk, - "stage": "feedback-creation", - }) - self.assertEqual(status.HTTP_201_CREATED, response.status_code) - response = self.client.post( - f'/api/assignment/{response.data["pk"]}/finish/', { - "score": 23, - "of_submission": response.data['submission']['pk'], - "feedback_lines": { - 1: {"text": "< some string >", "labels": []}, - 2: {"text": "< some string >", "labels": []} - }, - "labels": [], - } - ) - self.assertEqual(status.HTTP_201_CREATED, response.status_code) - - # some other tutor reviews it - self.client.force_authenticate(user=self.data['tutors'][1]) - - response = self.client.post('/api/assignment/', { - "submission_type": self.data['submission_types'][0].pk, - "stage": "feedback-validation", - }) - - self.assertEqual(status.HTTP_201_CREATED, response.status_code) - submission_id_in_database = models.Feedback.objects.filter( - is_final=False).first().of_submission.submission_id - submission_id_in_response = response.data['submission']['pk'] - - self.assertEqual( - str(submission_id_in_database), - submission_id_in_response) - - assignment = models.TutorSubmissionAssignment.objects.get(pk=response.data['pk']) - self.assertFalse(assignment.is_done) - response = self.client.post( - f'/api/assignment/{assignment.pk}/finish/', { - "score": 20, - "is_final": True, - "feedback_lines": { - 2: {"text": "< some addition by second tutor>"}, - } - } - ) - - assignment.refresh_from_db() - meta = assignment.submission.meta - self.assertEqual(status.HTTP_200_OK, response.status_code) - self.assertEqual(2, len(response.data['feedback_lines'][2])) - self.assertTrue(assignment.is_done) - self.assertIn(self.data['tutors'][0], meta.feedback_authors.all()) - self.assertIn(self.data['tutors'][1], meta.feedback_authors.all()) diff --git a/grady/core/tests/test_auth.py b/grady/core/tests/test_auth.py deleted file mode 100644 index 38780f25..00000000 --- a/grady/core/tests/test_auth.py +++ /dev/null @@ -1,71 +0,0 @@ -import pytest -import os - -from rest_framework.test import APIClient, APITestCase -from constance.test import override_config -from core.models import UserAccount - - -class AuthTests(APITestCase): - - @classmethod - def setUpTestData(cls): - cls.credentials = {'username': 'user', 'password': 'p'} - cls.user = UserAccount.objects.create( - username=cls.credentials['username']) - cls.user.set_password(cls.credentials['password']) - cls.user.save() - cls.client = APIClient() - - def test_get_token(self): - response = self.client.post('/api/get-token/', self.credentials) - self.assertContains(response, 'token') - - def test_refresh_token(self): - token = self.client.post('/api/get-token/', self.credentials).data - response = self.client.post('/api/refresh-token/', token) - self.assertContains(response, 'token') - - @override_config(REGISTRATION_PASSWORD='pw') - def test_registration_correct_password(self): - credentials = { - 'username': 'john-doe', - 'password': 'safeandsound', - 'registration_password': 'pw', - } - response = self.client.post('/api/corrector/register/', credentials) - self.assertEqual(201, response.status_code) - - @override_config(REGISTRATION_PASSWORD='wrong_pw') - def test_registration_wrong_password(self): - credentials = { - 'username': 'john-doe', - 'password': 'safeandsound', - 'registration_password': 'pw', - } - response = self.client.post('/api/corrector/register/', credentials) - self.assertEqual(403, response.status_code) - - @pytest.mark.skipif(os.environ.get('DJANGO_DEV', False), - reason="No password strengths checks in dev") - @override_config(REGISTRATION_PASSWORD='pw') - def test_password_is_strong_enough(self): - response = self.client.post('/api/corrector/register/', { - 'username': 'hans', - 'password': 'weak', - 'registration_password': 'pw', - }) - - self.assertEqual(400, response.status_code) - self.assertIn('password', response.data) - - @override_config(REGISTRATION_PASSWORD='pw') - def test_cannot_register_active(self): - response = self.client.post('/api/corrector/register/', { - 'username': 'hans', - 'password': 'safeandsound', - 'registration_password': 'pw', - 'is_active': True - }) - - self.assertEqual(403, response.status_code) diff --git a/grady/core/tests/test_commands.py b/grady/core/tests/test_commands.py deleted file mode 100644 index e313c5a3..00000000 --- a/grady/core/tests/test_commands.py +++ /dev/null @@ -1,39 +0,0 @@ -import json -import tempfile - -from django.contrib.auth import get_user_model -from django.core.management import call_command -from django.test import TestCase - -from util.factories import GradyUserFactory, make_exams - - -class CommandsTestCase(TestCase): - - factory = GradyUserFactory() - - def test_usermod(self): - self.factory.make_tutor(username='otto') - args = ['disable'] - opts = {'include': ('otto',)} - call_command('usermod', *args, **opts) - - someone = get_user_model().objects.get(username='otto') - self.assertFalse(someone.is_active) - - def test_replaceusernames(self): - self.exam = make_exams(exams=[{ - 'module_reference': 'Test Exam 01', - 'total_score': 100, - 'pass_score': 60, - }])[0] - self.factory.make_student(identifier=88884444, username='before', exam=self.exam) - - with tempfile.NamedTemporaryFile() as matno2username: - matno2username.write(json.dumps({'88884444': 'after'}).encode()) - matno2username.flush() - args = [matno2username.name] - call_command('replaceusernames', *args, **{}) - - student = get_user_model().objects.get(student__matrikel_no=88884444) - self.assertEqual('after', student.username) diff --git a/grady/core/tests/test_configuration_viewset.py b/grady/core/tests/test_configuration_viewset.py deleted file mode 100644 index 23cc354b..00000000 --- a/grady/core/tests/test_configuration_viewset.py +++ /dev/null @@ -1,58 +0,0 @@ -import constance - -from rest_framework import status -from rest_framework.test import APITestCase -from util.factories import GradyUserFactory, make_exams - -config = constance.config - - -class ConfigurationViewTestCase(APITestCase): - factory = GradyUserFactory() - - @classmethod - def setUpTestData(cls): - cls.exam = make_exams(exams=[{ - 'module_reference': 'Test Exam 01', - 'total_score': 100, - 'pass_score': 60, - }])[0] - cls.student = cls.factory.make_student(exam=cls.exam) - cls.reviewer = cls.factory.make_reviewer(exam=cls.exam) - - def setUp(self): - self.client.force_authenticate(user=self.reviewer) - self.rev_list_response = self.client.get('/api/config/') - - self.client.force_authenticate(user=self.student) - self.stud_list_response = self.client.get('/api/config/') - - stud_patch_data = { - "singleCorrection": True, - } - - rev_patch_data = { - "exerciseMode": True, - "showSolutionToStudents": False - } - - self.client.force_authenticate(user=self.reviewer) - self.rev_patch_response = self.client.patch('/api/config/change_config/', rev_patch_data) - - self.client.force_authenticate(user=self.student) - self.stud_patch_response = self.client.patch('/api/config/change_config/', stud_patch_data) - - def test_student_can_access(self): - self.assertEqual(status.HTTP_200_OK, self.stud_list_response.status_code) - - def test_reviewer_can_access(self): - self.assertEqual(status.HTTP_200_OK, self.rev_list_response.status_code) - - def test_student_can_not_patch_config(self): - self.assertEqual(status.HTTP_403_FORBIDDEN, self.stud_patch_response.status_code) - self.assertEqual(False, config.SINGLE_CORRECTION) - - def test_reviewers_can_patch_config(self): - self.assertEqual(status.HTTP_206_PARTIAL_CONTENT, self.rev_patch_response.status_code) - self.assertEqual(True, config.EXERCISE_MODE) - self.assertEqual(False, config.SHOW_SOLUTION_TO_STUDENTS) diff --git a/grady/core/tests/test_examlist.py b/grady/core/tests/test_examlist.py deleted file mode 100644 index b5be17cc..00000000 --- a/grady/core/tests/test_examlist.py +++ /dev/null @@ -1,49 +0,0 @@ -""" Tests that we can receive information about what exams where written """ - -from django.urls import reverse -from rest_framework import status -from rest_framework.test import (APIRequestFactory, APITestCase, - force_authenticate) - -from core.models import ExamType -from core.views import ExamApiViewSet -from util.factories import GradyUserFactory - - -class ExamListTest(APITestCase): - """ briefly tests if we are able to retrieve data, and get correct fields - """ - @classmethod - def setUpTestData(cls): - cls.factory = APIRequestFactory() - cls.user_factory = GradyUserFactory() - - def setUp(self): - self.request = self.factory.get(reverse('examtype-list')) - self.examtype = ExamType.objects.create(module_reference='B.Inf.9000', - total_score=90, - pass_score=45) - force_authenticate(self.request, - self.user_factory.make_reviewer()) - self.view = ExamApiViewSet.as_view({'get': 'list'}) - self.response = self.view(self.request) - - def test_can_access_when_authenticated(self): - self.assertEqual(self.response.status_code, status.HTTP_200_OK) - - def test_getting_all_available_exams(self): - self.assertEqual(1, len(self.response.data)) - - # Tests concerning exam data - def test_exam_data_contains_module_reference(self): - self.assertEqual('B.Inf.9000', - self.response.data[0]["module_reference"]) - - def test_exam_data_contains_total_score(self): - self.assertEqual(90, self.response.data[0]["total_score"]) - - def test_exam_data_contains_pass_score(self): - self.assertEqual(45, self.response.data[0]["pass_score"]) - - def test_exam_data_contains_pass_only_field(self): - self.assertEqual(False, self.response.data[0]["pass_only"]) diff --git a/grady/core/tests/test_export.py b/grady/core/tests/test_export.py deleted file mode 100644 index 3768a277..00000000 --- a/grady/core/tests/test_export.py +++ /dev/null @@ -1,238 +0,0 @@ -from rest_framework import status -from rest_framework.test import APIClient, APITestCase - -from util.factories import make_test_data, make_exams - - -def make_data(): - exams = make_exams([{ - 'module_reference': 'Test Exam 01', - 'total_score': 100, - 'pass_score': 60, - 'pass_only': True - }] - ) - return make_test_data(data_dict={ - 'exams': [{ - 'module_reference': 'Test Exam 01', - 'total_score': 100, - 'pass_score': 60, - 'pass_only': True, - 'exam_type_id': exams[0].exam_type_id - }], - 'submission_types': [ - { - 'name': '01. Sort', - 'full_score': 35, - 'description': 'Very complicated', - 'solution': 'Trivial!', - 'programming_language': 'Haskell', - 'exam_type': exams[0] - }, - { - 'name': '02. Shuffle', - 'full_score': 35, - 'description': 'Very complicated', - 'solution': 'Trivial!', - 'exam_type': exams[0] - } - ], - 'students': [ - {'username': 'student01', 'exam': 'Test Exam 01'}, - {'username': 'student02', 'exam': 'Test Exam 01'} - ], - 'tutors': [{ - 'username': 'tutor01' - }], - 'reviewers': [ - {'username': 'reviewer'} - ], - 'submissions': [ - { - 'text': 'function blabl\n' - ' on multi lines\n' - ' for blabla in bla:\n' - ' lorem ipsum und so\n', - 'type': '01. Sort', - 'user': 'student01', - 'feedback': { - 'score': 5, - 'is_final': True, - 'feedback_lines': { - '1': [{ - 'text': 'This is very bad!', - 'of_tutor': 'reviewer' - }], - } - - } - }, - { - 'text': 'not much', - 'type': '02. Shuffle', - 'user': 'student01' - }, - { - 'text': 'function blabl\n' - ' asasxasx\n' - ' lorem ipsum und so\n', - 'type': '01. Sort', - 'user': 'student02' - }, - { - 'text': 'not much to see here', - 'type': '02. Shuffle', - 'user': 'student02' - } - ]} - ) - - -class ExportInstanceTest(APITestCase): - @classmethod - def setUpTestData(cls): - cls.data = make_data() - - def setUp(self): - self.client = APIClient() - self.client.force_login(user=self.data['reviewers'][0]) - self.response = self.client.get('/api/instance/export/') - - def test_can_access(self): - self.assertEqual(status.HTTP_200_OK, self.response.status_code) - - def test_data_is_correct(self): - instance = self.response.json() - - # examTypes fields - self.assertIn('examTypes', instance) - self.assertIn('pk', instance['examTypes'][0]) - self.assertEqual('Test Exam 01', instance['examTypes'][0]['moduleReference']) - self.assertEqual(100, instance['examTypes'][0]['totalScore']) - self.assertEqual(60, instance['examTypes'][0]['passScore']) - self.assertEqual(True, instance['examTypes'][0]['passOnly']) - - # submissionTypes fields - self.assertIn('submissionTypes', instance) - self.assertEqual(2, len(instance['submissionTypes'])) - self.assertIn('pk', instance['submissionTypes'][0]) - self.assertEqual('01. Sort', instance['submissionTypes'][0]['name']) - self.assertEqual(35, instance['submissionTypes'][0]['fullScore']) - self.assertEqual('Very complicated', instance['submissionTypes'][0]['description']) - self.assertEqual('Trivial!', instance['submissionTypes'][0]['solution']) - self.assertEqual('Haskell', instance['submissionTypes'][0]['programmingLanguage']) - - # students fields - self.assertIn('students', instance) - self.assertEqual(2, len(instance['students'])) - self.assertIn('pk', instance['students'][0]) - self.assertIn('userPk', instance['students'][0]) - self.assertIn('exams', instance['students'][0]) - student_users = [s['user'] for s in instance['students']] - self.assertIn('student01', student_users) - self.assertIn('student02', student_users) - self.assertLess(0, len(instance['students'][1]['submissions'])) - - # students[submissions] nested - self.assertIn('submissions', instance['students'][1]) - self.assertLess(0, len(instance['students'][1]['submissions'])) - self.assertIn('pk', instance['students'][1]['submissions'][0]) - self.assertIn('function blabl', instance['students'][1]['submissions'][0]['text']) - self.assertIn('type', instance['students'][1]['submissions'][0]) - self.assertIn('tests', instance['students'][1]['submissions'][0]) - - # students[submissions][feedback] nested - submissions = instance['students'][0]['submissions'] - self.assertIn('feedback', submissions[0]) - self.assertLess(0, len(submissions[0]['feedback'])) - self.assertEqual(5, submissions[0]['feedback']['score']) - self.assertEqual(True, submissions[0]['feedback']['isFinal']) - self.assertIn('created', submissions[0]['feedback']) - - # students[submissions][feedback][feedbackLines] nested - feedback = instance['students'][0]['submissions'][0]['feedback'] - self.assertIn('feedbackLines', feedback) - self.assertLess(0, len(feedback['feedbackLines'])) - self.assertIn('1', feedback['feedbackLines']) - self.assertIn('pk', feedback['feedbackLines']['1'][0]) - self.assertEqual('This is very bad!', feedback['feedbackLines']['1'][0]['text']) - self.assertEqual('reviewer', feedback['feedbackLines']['1'][0]['ofTutor']) - - # reviewers fields - self.assertIn('reviewers', instance) - self.assertLess(0, len(instance['reviewers'])) - self.assertIn('pk', instance['reviewers'][0]) - self.assertEqual('reviewer', instance['reviewers'][0]['username']) - - # tutors fields - self.assertIn('tutors', instance) - self.assertLess(0, len(instance['tutors'])) - tutor_names = [t['username'] for t in instance['tutors']] - self.assertIn('tutor01', tutor_names) - self.assertIn('reviewer', tutor_names) - - -class ExportJSONTest(APITestCase): - @classmethod - def setUpTestData(cls): - cls.data = make_data() - - def setUp(self): - self.client = APIClient() - self.client.force_login(user=self.data['reviewers'][0]) - self.response = self.client.post('/api/export/json/') - - def test_can_access(self): - self.assertEqual(status.HTTP_200_OK, self.response.status_code) - - def test_data_is_correct(self): - # due to using the client, we need to parse the json - student1, student2 = self.response.data - self.assertIn('Matrikel', student1) - self.assertIn('Matrikel', student2) - - self.assertEqual('', student1['Name']) - self.assertEqual('', student2['Name']) - - self.assertEqual('Test Exam 01', student1['Exams'][0]['exam']['module_reference']) - self.assertEqual('Test Exam 01', student2['Exams'][0]['exam']['module_reference']) - - self.assertEqual('student01', student1['Username']) - self.assertEqual('student02', student2['Username']) - - self.assertEqual('********', student2['Password']) - self.assertEqual('********', student1['Password']) - - self.assertEqual('01. Sort', student1['Scores'][0]['submissions'][0]['type']) - self.assertEqual('01. Sort', student2['Scores'][0]['submissions'][0]['type']) - - self.assertEqual('02. Shuffle', student1['Scores'][0]['submissions'][1]['type']) - self.assertEqual('02. Shuffle', student2['Scores'][0]['submissions'][1]['type']) - - self.assertEqual(5, student1['Scores'][0]['submissions'][0]['score']) - self.assertEqual(0, student2['Scores'][0]['submissions'][0]['score']) - - self.assertEqual(0, student2['Scores'][0]['submissions'][1]['score']) - self.assertEqual(0, student2['Scores'][0]['submissions'][1]['score']) - - -class ExportJSONAndSetPasswordsTest(APITestCase): - @classmethod - def setUpTestData(cls): - cls.data = make_data() - - def setUp(self): - self.client = APIClient() - self.client.force_login(user=self.data['reviewers'][0]) - self.response = self.client.post('/api/export/json/', - data={'setPasswords': True}) - - def test_can_access(self): - self.assertEqual(status.HTTP_200_OK, self.response.status_code) - - def test_data_contains_correct_password(self): - student1, student2 = self.response.data - ret = self.client.login(username=student1['Username'], password=student1['Password']) - self.assertTrue(ret) - ret = self.client.login(username=student2['Username'], password=student2['Password']) - self.assertTrue(ret) diff --git a/grady/core/tests/test_factory.py b/grady/core/tests/test_factory.py deleted file mode 100644 index c32ae5aa..00000000 --- a/grady/core/tests/test_factory.py +++ /dev/null @@ -1,52 +0,0 @@ -from django.test import TestCase - -from core import models -from core.models import StudentInfo -from util.factories import GradyUserFactory, make_exams - - -class FactoryTestCase(TestCase): - - factory = GradyUserFactory() - - def test_make_student(self): - self.exam = make_exams(exams=[{ - 'module_reference': 'Test Exam 01', - 'total_score': 100, - 'pass_score': 60, - }])[0] - user = self.factory.make_student(exam=self.exam) - - self.assertEqual(StudentInfo.objects.count(), 1) - self.assertEqual(user.student.exams.first().exam.module_reference, "Test Exam 01") - self.assertEqual(len(str(user.student.matrikel_no)), 8) - - def test_can_create_reviewer(self): - self.assertTrue(isinstance(self.factory.make_reviewer(), - models.UserAccount)) - - def test_reviewer_appears_in_query_set(self): - self.assertIn(self.factory.make_reviewer(), - models.UserAccount.objects.all()) - - def test_can_create_tutor(self): - self.assertIn(self.factory.make_tutor(), - models.UserAccount.objects.all()) - - def test_can_create_student_user(self): - self.exam = make_exams(exams=[{ - 'module_reference': 'Test Exam 01', - 'total_score': 100, - 'pass_score': 60, - }])[0] - self.assertIn(self.factory.make_student(exam=self.exam), - models.UserAccount.objects.all()) - - def test_can_create_student_info(self): - self.exam = make_exams(exams=[{ - 'module_reference': 'Test Exam 01', - 'total_score': 100, - 'pass_score': 60, - }])[0] - self.assertIn(self.factory.make_student(exam=self.exam).student, - StudentInfo.objects.all()) diff --git a/grady/core/tests/test_feedback.py b/grady/core/tests/test_feedback.py deleted file mode 100644 index 7148854d..00000000 --- a/grady/core/tests/test_feedback.py +++ /dev/null @@ -1,703 +0,0 @@ -import unittest - -from constance.test import override_config -from rest_framework import status -from rest_framework.test import APIRequestFactory, APITestCase - -from core.models import (Feedback, FeedbackComment, - Submission, SubmissionType, - FeedbackLabel, TutorSubmissionAssignment, MetaSubmission) -from util.factories import GradyUserFactory, make_test_data, make_exams - - -class FeedbackRetrieveTestCase(APITestCase): - - factory = GradyUserFactory() - EXPECTED_SCORE = 23 - - @classmethod - def setUpTestData(cls): - cls.score = 23 - cls.tutor = cls.factory.make_tutor() - cls.exam = make_exams(exams=[{ - 'module_reference': 'Test Exam 01', - 'total_score': 100, - 'pass_score': 60, - }])[0] - cls.student = cls.factory.make_student(exam=cls.exam) - cls.reviewer = cls.factory.make_reviewer() - cls.tutors = [cls.tutor, cls.reviewer] - cls.request_factory = APIRequestFactory() - cls.submission_type = SubmissionType.objects.create( - name='Cooking some crystal with Jesse') - cls.sub = Submission.objects.create(student=cls.student.student, - type=cls.submission_type) - cls.feedback = Feedback.objects.create(score=23, is_final=False, - of_submission=cls.sub) - - for line in range(1, 3): - for tutor in cls.tutors: - FeedbackComment.objects.create(text='fortytwo', - of_feedback=cls.feedback, - of_tutor=tutor, - of_line=line) - - def setUp(self): - self.client.force_authenticate(user=self.reviewer) - self.response = self.client.get(f'/api/feedback/{self.sub.pk}/') - self.data = self.response.data - - def test_only_one_final_comment_per_line(self): - comments_on_first_line = FeedbackComment.objects.filter(of_line=1) - self.assertEqual(2, comments_on_first_line.count()) - final_comments = [comment for comment in comments_on_first_line.all() - if comment.visible_to_student] - self.assertEqual(1, len(final_comments)) - - def test_can_retrieve_feedback_via_endpoint(self): - self.assertEqual(self.response.status_code, status.HTTP_200_OK) - - def test_if_feedback_contains_correct_score(self): - self.assertIn('score', self.data) - self.assertEqual(self.data.get('score'), self.EXPECTED_SCORE) - - def test_if_feedback_contains_linekeys(self): - self.assertIn('feedback_lines', self.data) - self.assertIn(1, self.data['feedback_lines']) - self.assertIn(2, self.data['feedback_lines']) - - def test_if_feedback_contains_final(self): - self.assertIn('is_final', self.data) - self.assertIsNotNone(self.data['is_final']) - - def test_if_comment_contains_text(self): - self.assertIn('text', self.data['feedback_lines'][1][0]) - self.assertEqual( - 'fortytwo', self.data['feedback_lines'][1][0]['text']) - - def test_if_comment_contains_created(self): - self.assertIn('created', self.data['feedback_lines'][1][0]) - self.assertIsNotNone(self.data['feedback_lines'][1][0]['created']) - - def test_if_comment_has_tutor(self): - self.assertIn('of_tutor', self.data['feedback_lines'][1][0]) - self.assertEqual( - self.tutor.username, - self.data['feedback_lines'][1][0]['of_tutor']) - - def test_if_comment_has_final(self): - self.assertIn('visible_to_student', self.data['feedback_lines'][1][0]) - self.assertIsNotNone( - self.data['feedback_lines'][1][0]['visible_to_student']) - - -class FeedbackCreateTestCase(APITestCase): - - @classmethod - def setUpTestData(cls): - cls.url = lambda self: f'/api/assignment/{self.assignment.pk}/finish/' - cls.user_factory = GradyUserFactory() - cls.tutor = cls.user_factory.make_tutor(password='p') - cls.reviewer = cls.user_factory.make_reviewer(password='p') - cls.exam = make_exams(exams=[{ - 'module_reference': 'Test Exam 01', - 'total_score': 100, - 'pass_score': 60, - }])[0] - cls.student = cls.user_factory.make_student(exam=cls.exam) - cls.submission_type = SubmissionType.objects.create( - name='Cooking some crystal with Jesse', - full_score=100 - ) - text = ''' First line of defense - We do not have a second line - security via obscurity - is very bad. ''' - cls.sub = Submission.objects.create(student=cls.student.student, - type=cls.submission_type, - text=text) - cls.fst_label = FeedbackLabel.objects.create(name='Label1', description='Bla') - cls.snd_label = FeedbackLabel.objects.create(name='Label2', description='Bla') - - def setUp(self): - self.sub.refresh_from_db() - self.fst_label.refresh_from_db() - self.snd_label.refresh_from_db() - self.client.force_authenticate(user=self.tutor) - self.assignment = TutorSubmissionAssignment.objects.create( - submission=Submission.objects.first(), - owner=self.tutor, - ) - - def test_cannot_create_feedback_without_feedback_lines(self): - # TODO this test has to be adapted to test the various constraints - # e.g. feedback without lines can only be given if the score is equal - # to the max Score for this submission - data = { - 'score': 10, - 'is_final': False, - 'of_submission': self.assignment.submission.pk - - } - self.assertEqual(Feedback.objects.count(), 0) - response = self.client.post(self.url(), data, format='json') - self.assertEqual(status.HTTP_400_BAD_REQUEST, response.status_code) - self.assertEqual(Feedback.objects.count(), 0) - - def test_cannot_create_feedback_with_score_higher_than_max(self): - data = { - 'score': 101, - 'is_final': False, - 'of_submission': self.assignment.submission.pk - } - self.assertEqual(Feedback.objects.count(), 0) - response = self.client.post(self.url(), data, format='json') - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - self.assertEqual(Feedback.objects.count(), 0) - - def test_tutor_cannot_set_feedback_final_on_creation(self): - data = { - 'score': 100, - 'is_final': True, - 'of_submission': self.assignment.submission.pk - } - response = self.client.post(self.url(), data, format='json') - self.assertEqual(status.HTTP_403_FORBIDDEN, response.status_code) - self.assertEqual(Feedback.objects.count(), 0) - - @override_config(SINGLE_CORRECTION=True) - def test_tutor_can_set_feedback_final_on_creation_with_single_correction_enabled(self): - data = { - 'score': 100, - 'is_final': True, - 'of_submission': self.assignment.submission.pk - } - response = self.client.post(self.url(), data, format='json') - self.assertEqual(status.HTTP_201_CREATED, response.status_code) - self.assertEqual(Feedback.objects.count(), 1) - - def test_tutor_has_to_write_a_line_if_score_is_not_100_percent(self): - data = { - 'score': 50, - 'is_final': False, - 'of_submission': self.assignment.submission.pk - } - response = self.client.post(self.url(), data, format='json') - self.assertEqual(status.HTTP_400_BAD_REQUEST, response.status_code) - self.assertEqual(Feedback.objects.count(), 0) - - def test_cannot_create_feedback_with_score_less_than_zero(self): - data = { - 'score': -1, - 'is_final': False, - 'of_submission': self.assignment.submission.pk - } - self.assertEqual(Feedback.objects.count(), 0) - response = self.client.post(self.url(), data, format='json') - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - self.assertEqual(Feedback.objects.count(), 0) - - def test_cannot_create_feedback_with_score_with_invalid_fractional_denominator(self): - data = { - 'score': 1.500000001, - 'is_final': False, - 'of_submission': self.assignment.submission.pk - } - self.assertEqual(Feedback.objects.count(), 0) - response = self.client.post(self.url(), data, format='json') - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - self.assertEqual(Feedback.objects.count(), 0) - - def test_can_create_with_labels(self): - data = { - 'score': 0, - 'is_final': False, - 'of_submission': self.assignment.submission.pk, - 'labels': [self.fst_label.pk, self.snd_label.pk], - 'feedback_lines': { - '2': { - 'text': 'Why you no learn how to code, man?', - 'labels': [] - } - } - } - self.assertEqual(self.fst_label.feedback.count(), 0) - response = self.client.post(self.url(), data, format='json') - self.assertEqual(response.status_code, status.HTTP_201_CREATED) - self.fst_label.refresh_from_db() - self.snd_label.refresh_from_db() - self.assertEqual(self.fst_label.feedback.count(), 1) - self.assertEqual(self.snd_label.feedback.count(), 1) - self.assertEqual(Feedback.objects.first().labels.count(), 2) - - def test_can_create_feedback_with_half_points(self): - data = { - 'score': 0.5, - 'is_final': False, - 'of_submission': self.assignment.submission.pk, - 'feedback_lines': { - '2': { - 'text': 'Why you no learn how to code, man?', - 'labels': [] - } - } - } - self.client.post(self.url(), data, format='json') - object_score = self.sub.feedback.score - self.assertEqual(object_score, 0.5) - - def test_check_score_is_set_accordingly(self): - data = { - 'score': 5, - 'is_final': False, - 'of_submission': self.assignment.submission.pk, - 'feedback_lines': { - '4': { - 'text': 'Why you no learn how to code, man?', - 'labels': [] - } - } - } - self.client.post(self.url(), data, format='json') - object_score = self.sub.feedback.score - self.assertEqual(object_score, 5) - - def test_can_create_feedback_with_comment(self): - data = { - 'score': 0, - 'is_final': False, - 'of_submission': self.assignment.submission.pk, - 'feedback_lines': { - '3': { - 'text': 'Nice meth!', - 'labels': [] - } - } - } - self.assertEqual(FeedbackComment.objects.count(), 0) - response = self.client.post(self.url(), data, format='json') - self.assertEqual(response.status_code, status.HTTP_201_CREATED) - self.assertEqual(FeedbackComment.objects.count(), 1) - - def test_feedback_comment_is_created_correctly(self): - data = { - 'score': 0, - 'is_final': False, - 'of_submission': self.assignment.submission.pk, - 'feedback_lines': { - '3': { - 'text': 'Nice meth!', - 'labels': [] - } - } - } - self.client.post(self.url(), data, format='json') - comment = FeedbackComment.objects.first() - self.assertEqual(comment.of_tutor, self.tutor) - self.assertEqual(comment.text, 'Nice meth!') - self.assertIsNotNone(comment.created) - self.assertEqual(comment.of_line, 3) - self.assertTrue(comment.visible_to_student) - - def test_tutor_cannot_create_without_assignment(self): - data = { - 'score': 0, - 'of_submission': self.assignment.submission.pk, - 'feedback_lines': { - '2': { - 'text': 'Well, at least you tried.', - 'labels': [] - }, - } - } - self.assignment.delete() - response = self.client.post(self.url(), data, format='json') - self.assertEqual(status.HTTP_404_NOT_FOUND, response.status_code) - - def test_reviewer_can_create_without_assignment(self): - data = { - 'score': 0, - 'of_submission': self.assignment.submission.pk, - 'feedback_lines': { - '2': { - 'text': 'This is not particularly good...', - 'labels': [] - }, - } - } - self.assignment.delete() - self.client.force_authenticate(user=self.reviewer) - response = self.client.post('/api/feedback/', data, format='json') - self.assertEqual(status.HTTP_201_CREATED, response.status_code) - - @override_config(EXERCISE_MODE=True) - def test_tutor_can_create_without_assignment_in_exercise_mode(self): - data = { - 'score': 0, - 'of_submission': self.assignment.submission.pk, - 'feedback_lines': { - '2': { - 'text': 'You have failed!1!!11', - 'labels': [] - }, - } - } - self.assignment.delete() - response = self.client.post('/api/feedback/', data, format='json') - self.assertEqual(status.HTTP_201_CREATED, response.status_code) - - def test_cannot_create_with_someoneelses_assignment(self): - data = { - 'score': 0, - 'of_submission': self.assignment.submission.pk, - 'feedback_lines': { - '1': { - 'text': 'Well, at least you tried.', - 'labels': [] - }, - } - } - other_tutor = self.user_factory.make_tutor('Berta') - self.client.force_authenticate(other_tutor) - response = self.client.post(self.url(), data, format='json') - # returns 404 since the other users assignment is not visible to this one - self.assertEqual(status.HTTP_404_NOT_FOUND, response.status_code) - - def test_can_create_multiple_feedback_comments(self): - data = { - 'score': 0, - 'is_final': False, - 'of_submission': self.assignment.submission.pk, - 'feedback_lines': { - '1': { - 'text': 'Nice meth!', - 'labels': [] - }, - '3': { - 'text': 'Good one!', - 'labels': [] - } - } - } - self.client.post(self.url(), data, format='json') - first_comment = FeedbackComment.objects.get(text='Nice meth!') - self.assertEqual(first_comment.of_tutor, self.tutor) - self.assertIsNotNone(first_comment.created) - self.assertEqual(first_comment.of_line, 1) - self.assertTrue(first_comment.visible_to_student) - - second_comment = FeedbackComment.objects.get(text='Good one!') - self.assertEqual(second_comment.of_tutor, self.tutor) - self.assertIsNotNone(second_comment.created) - self.assertEqual(second_comment.of_line, 3) - self.assertTrue(second_comment.visible_to_student) - - -class FeedbackPatchTestCase(APITestCase): - - @classmethod - def setUpTestData(cls): - cls.burl = '/api/feedback/' - cls.finish_url = lambda self: f'/api/assignment/{self.assignment.pk}/finish/' - exams = make_exams([{ - 'module_reference': 'Test Exam 01', - 'total_score': 100, - 'pass_score': 60, - }] - ) - cls.data = make_test_data({ - 'exams': [{ - 'module_reference': 'Test Exam 01', - 'total_score': 100, - 'pass_score': 60, - 'exam_type': exams[0].exam_type_id - }], - 'submission_types': [ - { - 'name': '01. Sort this or that', - 'full_score': 35, - 'description': 'Very complicated', - 'solution': 'Trivial!', - 'exam_type': exams[0] - }], - 'students': [ - { - 'username': 'student01', - 'exam': 'Test Exam 01' - }, - { - 'username': 'student02', - 'exam': 'Test Exam 01', - } - ], - 'tutors': [ - {'username': 'tutor01'}, - {'username': 'tutor02'} - ], - 'reviewers': [{ - 'username': 'reviewer01', - }], - 'submissions': [ - { - 'text': 'function blabl\n' - ' on multi lines\n' - ' for blabla in bla:\n', - 'type': '01. Sort this or that', - 'user': 'student01' - }, - { - 'text': 'conflict test', - 'type': '01. Sort this or that', - 'user': 'student02' - }, - ] - }) - - cls.fst_label = FeedbackLabel.objects.create(name='Label1', description='Bla') - cls.snd_label = FeedbackLabel.objects.create(name='Label2', description='Bla') - - # construct submission that has conflicting feedback - cls.conflict_submission = Submission.objects.get(student__user=cls.data['students'][1]) - conflict_meta = MetaSubmission.objects.get( - submission__submission_id=cls.conflict_submission.submission_id - ) - conflict_meta.done_assignments = 2 - conflict_meta.has_final_feedback = False - conflict_meta.has_active_assignment = False - conflict_meta.has_feedback = True - conflict_meta.save() - - Feedback.objects.create(**{ - "score": 0, - "is_final": False, - "final_by_reviewer": False, - "of_submission": cls.conflict_submission - }) - - def setUp(self): - self.tutor01 = self.data['tutors'][0] - self.tutor02 = self.data['tutors'][1] - self.reviewer = self.data['reviewers'][0] - self.client.force_authenticate(user=self.tutor01) - self.assignment = TutorSubmissionAssignment.objects.create( - submission=Submission.objects.get(student__user=self.data['students'][0]), - owner=self.tutor01, - ) - data = { - 'score': 35, - 'is_final': False, - 'of_submission': self.assignment.submission.pk, - 'feedback_lines': { - '2': { - 'text': 'Very good.', - 'labels': [] - }, - } - } - response = self.client.post(self.finish_url(), data, format='json') - self.feedback = Feedback.objects.get( - of_submission=response.data['of_submission']) - self.url = f'{self.burl}{self.feedback.of_submission.submission_id}/' - - self.fst_label.refresh_from_db() - self.snd_label.refresh_from_db() - - def test_can_patch_onto_the_own_feedback(self): - data = { - 'feedback_lines': { - '1': { - 'text': 'Spam spam spam', - 'labels': [] - }, - } - } - response = self.client.patch(self.url, data, format='json') - self.assertEqual(status.HTTP_200_OK, response.status_code) - self.assertEqual( - 'Spam spam spam', - response.data['feedback_lines'][1][0]['text'] - ) - self.assertEqual( - 'Very good.', - response.data['feedback_lines'][2][0]['text'] - ) - - def test_can_update_a_single_line(self): - data = { - 'feedback_lines': { - '2': { - 'text': 'Turns out this is rather bad.', - 'labels': [] - }, - } - } - - response = self.client.patch(self.url, data, format='json') - self.assertEqual(status.HTTP_200_OK, response.status_code) - - @unittest.expectedFailure - def test_tutor_can_not_update_when_there_is_a_new_assignment(self): - # Step 1 - Create a new assignment for Tutor 2 - TutorSubmissionAssignment.objects.create( - submission=Submission.objects.last(), - owner=self.tutor02, - stage='feedback-validation', - ) - - # Step 2 - Tutor 1 tries to patch - data = { - 'feedback_lines': { - '2': {'text': 'Turns out this is rather bad.', 'labels': []}, - } - } - - response = self.client.patch(self.url, data, format='json') - self.assertEqual(status.HTTP_403_FORBIDDEN, response.status_code) - - def test_cannot_patch_first_feedback_final(self): - data = { - 'feedback_lines': { - '2': {'text': 'Turns out this is rather bad.', 'labels': []}, - }, - 'is_final': True - } - - response = self.client.patch(self.url, data, format='json') - self.assertEqual(status.HTTP_403_FORBIDDEN, response.status_code) - - def test_reviewer_can_patch_first_feedback_final(self): - data = { - 'feedback_lines': { - '2': {'text': 'Turns out this is rather bad.', 'labels': []}, - }, - 'is_final': True - } - - self.client.force_authenticate(user=self.reviewer) - response = self.client.patch(self.url, data, format='json') - self.assertEqual(status.HTTP_200_OK, response.status_code) - - def test_cannot_unset_final_on_third_feedback(self): - data = { - 'feedback_lines': { - '2': {'text': 'this is good.', 'labels': []}, - }, - 'is_final': False - } - - url = f'{self.burl}{self.conflict_submission.submission_id}/' - self.client.force_authenticate(user=self.reviewer) - response = self.client.patch(url, data, format='json') - self.assertEqual(status.HTTP_400_BAD_REQUEST, response.status_code) - - def tutor_can_patch_labels(self): - data = { - 'feedback_lines': { - '2': { - 'text': 'Turns out this is rather bad.', - 'labels': [self.fst_label.pk, self.snd_label.pk] - }, - } - } - - self.assertEqual(FeedbackComment.objects.first().labels.count(), 0) - response = self.client.patch(self.url, data, format='json') - self.assertEqual(status.HTTP_200_OK, response.status_code) - self.assertEqual(FeedbackComment.objects.first().labels.count(), 2) - - -class FeedbackCommentApiEndpointTest(APITestCase): - - @classmethod - def setUpTestData(cls): - cls.burl = '/api/feedback/' - exams = make_exams([{ - 'module_reference': 'Test Exam 01', - 'total_score': 100, - 'pass_score': 60, - }] - ) - cls.data = make_test_data({ - 'exams': [{ - 'module_reference': 'Test Exam 01', - 'total_score': 100, - 'pass_score': 60, - 'exam_type': exams[0].exam_type_id - }], - 'submission_types': [ - { - 'name': '01. Sort this or that', - 'full_score': 35, - 'description': 'Very complicated', - 'solution': 'Trivial!', - 'exam_type': exams[0] - }], - 'students': [ - { - 'username': 'student01', - 'exam': 'Test Exam 01' - } - ], - 'tutors': [ - {'username': 'tutor01'}, - {'username': 'tutor02'}, - ], - 'reviewers': [ - {'username': 'reviewer01'}, - ], - 'submissions': [{ - 'text': 'function blabl\n' - ' on multi lines\n' - ' for blabla in bla:\n', - 'type': '01. Sort this or that', - 'user': 'student01', - 'feedback': { - 'score': 5, - 'is_final': True, - 'feedback_lines': { - '1': [{'text': 'This is very bad!', - 'of_tutor': 'tutor01'}], - '2': [{'text': 'And this is even worse!', - 'of_tutor': 'tutor02'}], - } - } - }] - }) - - def setUp(self): - self.url = '/api/feedback-comment/%s/' - self.tutor01 = self.data['tutors'][0] - self.tutor02 = self.data['tutors'][1] - - def test_tutor_can_delete_own_comment(self): - self.client.force_authenticate(user=self.tutor01) - comment = FeedbackComment.objects.get(of_tutor=self.tutor01) - response = self.client.delete(self.url % comment.pk) - self.assertEqual(status.HTTP_204_NO_CONTENT, response.status_code) - - def test_tutor_cannot_delete_foreign_comment(self): - self.client.force_authenticate(user=self.tutor02) - comment = FeedbackComment.objects.get(of_tutor=self.tutor02) - self.client.force_authenticate(self.tutor01) - response = self.client.delete(self.url % comment.pk) - self.assertEqual(status.HTTP_404_NOT_FOUND, response.status_code) - - def test_reviewer_can_delete_other_users_comments(self): - reviewer = self.data['reviewers'][0] - self.client.force_authenticate(user=reviewer) - comment01 = FeedbackComment.objects.get(of_tutor=self.tutor01) - comment02 = FeedbackComment.objects.get(of_tutor=self.tutor02) - - response = self.client.delete(self.url % comment01.pk) - self.assertEqual(status.HTTP_204_NO_CONTENT, response.status_code) - - response = self.client.delete(self.url % comment02.pk) - self.assertEqual(status.HTTP_403_FORBIDDEN, response.status_code) - self.assertTrue(FeedbackComment.objects.filter(of_tutor=self.tutor02).exists(), - msg='Second comment should not be deleted for feedback with not full score') - try: - FeedbackComment.objects.get(of_tutor=self.tutor01) - except FeedbackComment.DoesNotExist: - pass - else: - self.fail('No exception raised') diff --git a/grady/core/tests/test_functional_views.py b/grady/core/tests/test_functional_views.py deleted file mode 100644 index 5f72f198..00000000 --- a/grady/core/tests/test_functional_views.py +++ /dev/null @@ -1 +0,0 @@ -# TODO test the config view diff --git a/grady/core/tests/test_import_views.py b/grady/core/tests/test_import_views.py deleted file mode 100644 index 52ec4eb0..00000000 --- a/grady/core/tests/test_import_views.py +++ /dev/null @@ -1,82 +0,0 @@ -from rest_framework import status -from rest_framework.test import APIClient, APITestCase -from core.models import UserAccount, SubmissionType - -from util.factories import GradyUserFactory - -test_data = { - "meta": { - "version": "6.0.0" - }, - "data": { - "module": { - "module_reference": "test", - "pass_only": True, - "pass_score": 1, - "total_score": 99 - }, - "students": [ - { - "fullname": "test", - "identifier": "test-test", - "submissions": [ - { - "code": "some messy, perhaps incorrect stuff", - "tests": [], - "type": "[a0] coding stuff" - }, - { - "code": "i don't know man", - "tests": [], - "type": "[a1] improvise" - } - ], - } - ], - "submission_types": [ - { - "description": "code some 1337 stuff", - "full_score": 99, - "name": "[a0] coding stuff", - "programming_language": "c", - "solution": "how dare u" - }, - { - "description": "now this one's hard", - "full_score": 1, - "name": "[a1] improvise", - "programming_language": "haskell", - "solution": "nope" - }, - ] - } -} - - -class ImportViewTest(APITestCase): - - factory = GradyUserFactory() - - def setUp(self): - self.url = '/api/import/' - self.client = APIClient() - self.client.force_login(user=self.factory.make_reviewer()) - - def test_can_not_submit_nothing(self): - res = self.client.post(self.url) - self.assertEqual(status.HTTP_400_BAD_REQUEST, res.status_code) - - def test_will_fail_on_wrong_importer_version(self): - data = {"meta": {"version": "0.0.0"}} - res = self.client.post(self.url, data) - self.assertEqual(status.HTTP_409_CONFLICT, res.status_code) - - def test_data_is_imported_correctly(self): - res = self.client.post(self.url, test_data) - - sub_types = SubmissionType.objects.all() - students = UserAccount.objects.all().filter(role='Student') - - self.assertEqual(2, len(sub_types)) - self.assertEqual(1, len(students)) - self.assertEqual(status.HTTP_201_CREATED, res.status_code) diff --git a/grady/core/tests/test_labels.py b/grady/core/tests/test_labels.py deleted file mode 100644 index 99760fd9..00000000 --- a/grady/core/tests/test_labels.py +++ /dev/null @@ -1,48 +0,0 @@ -from rest_framework import status -from rest_framework.test import APITestCase - -from core.models import FeedbackLabel -from util.factories import GradyUserFactory, make_exams - - -class LabelsTestCases(APITestCase): - @classmethod - def setUpTestData(cls) -> None: - cls.factory = GradyUserFactory() - cls.exam = make_exams(exams=[{ - 'module_reference': 'Test Exam 01', - 'total_score': 100, - 'pass_score': 60, - }])[0] - cls.student = cls.factory.make_student(exam=cls.exam) - cls.tutor = cls.factory.make_tutor(exam=cls.exam) - cls.reviewer = cls.factory.make_reviewer(exam=cls.exam) - cls.label_post_data = { - 'name': 'A label', - 'description': 'with a description...' - } - cls.label_url = '/api/label/' - - def test_student_can_read_labels(self): - self.client.force_authenticate(user=self.student) - response = self.client.get(self.label_url) - self.assertEqual(response.status_code, status.HTTP_200_OK) - self.assertEqual(FeedbackLabel.objects.count(), 0) - - def test_student_can_not_write_labels(self): - self.client.force_authenticate(user=self.student) - response = self.client.post(self.label_url, data=self.label_post_data) - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) - self.assertEqual(FeedbackLabel.objects.count(), 0) - - def test_tutor_can_create_label(self): - self.client.force_authenticate(user=self.tutor) - response = self.client.post(self.label_url, data=self.label_post_data) - self.assertEqual(response.status_code, status.HTTP_201_CREATED) - self.assertEqual(FeedbackLabel.objects.count(), 1) - - def test_reviewer_can_create_label(self): - self.client.force_authenticate(user=self.reviewer) - response = self.client.post(self.label_url, data=self.label_post_data) - self.assertEqual(response.status_code, status.HTTP_201_CREATED) - self.assertEqual(FeedbackLabel.objects.count(), 1) diff --git a/grady/core/tests/test_student_page.py b/grady/core/tests/test_student_page.py deleted file mode 100644 index 3fdb139d..00000000 --- a/grady/core/tests/test_student_page.py +++ /dev/null @@ -1,264 +0,0 @@ -from django.urls import reverse -from rest_framework.test import (APIRequestFactory, APITestCase, - force_authenticate) - -from core.models import SubmissionType, ExamType -from core.views import StudentSelfApiView, StudentSelfSubmissionsApiView -from util.factories import make_test_data, make_exams - - -class StudentPageTests(APITestCase): - - @classmethod - def setUpTestData(cls): - cls.factory = APIRequestFactory() - - def setUp(self): - exams = make_exams([{ - 'module_reference': 'TestExam B.Inf.0042', - 'total_score': 42, - 'pass_score': 21, - }] - ) - self.test_data = make_test_data(data_dict={ - 'exams': [{ - 'module_reference': 'TestExam B.Inf.0042', - 'total_score': 42, - 'pass_score': 21, - 'exam_type': exams[0].exam_type_id - }], - 'submission_types': [{ - 'name': 'problem01', - 'full_score': 10, - 'description': 'Very hard', - 'solution': 'Impossible!', - 'exam_type': exams[0] - }], - 'students': [{ - 'username': 'user01', - 'fullname': 'us er01', - 'exam': 'TestExam B.Inf.0042' - }], - 'tutors': [{ - 'username': 'tutor01' - }], - 'reviewers': [{ - 'username': 'reviewer' - }], - 'submissions': [{ - 'user': 'user01', - 'type': 'problem01', - 'text': 'Too hard for me ;-(', - 'feedback': { - 'text': 'Very bad!', - 'score': 3, - 'feedback_lines': { - '1': [{ - 'text': 'This is very bad!', - 'of_tutor': 'tutor01' - }], - } - } - }] - }) - - self.student = self.test_data['students'][0] - self.student_info = self.student.student - self.tutor = self.test_data['tutors'][0] - self.reviewer = self.test_data['reviewers'][0] - self.submission = self.test_data['submissions'][0] - self.feedback = self.submission.feedback - - self.request = self.factory.get(reverse('student-page')) - self.view = StudentSelfApiView.as_view() - force_authenticate(self.request, user=self.student) - self.response = self.view(self.request) - - self.exam_info_id = self.response.data['exams'][0]['exam'] - self.exam_obj = ExamType.objects.get(exam_type_id=self.exam_info_id) - self.submission_list = self.response.data['submissions'] - self.submission_list_first_entry = self.submission_list[0] - - def test_student_information_contains_name(self): - self.assertEqual( - self.response.data['name'], self.student.fullname) - - def test_all_student_submissions_are_loded(self): - self.assertEqual(len(self.submission_list), - SubmissionType.objects.count()) - - # Tests concerning exam data - def test_exam_data_contains_module_reference(self): - self.assertEqual( - self.exam_obj.module_reference, - self.student_info.exams.first().exam.module_reference) - - def test_exam_data_contains_total_score(self): - self.assertEqual( - self.exam_obj.total_score, self.student_info.exams.first().exam.total_score) - - def test_exam_data_contains_pass_score(self): - self.assertEqual( - self.exam_obj.pass_score, self.student_info.exams.first().exam.pass_score) - - def test_exam_data_contains_pass_only_field(self): - self.assertEqual( - self.exam_obj.pass_only, self.student_info.exams.first().exam.pass_only) - - # Tests concerning submission data - def test_a_student_submissions_contains_type_name(self): - self.assertEqual( - self.submission_list_first_entry['type']['name'], - self.student_info.submissions.first().type.name) - - def test_a_student_submissions_contains_type_id(self): - self.assertEqual( - self.submission_list_first_entry['type']['pk'], - str(self.student_info.submissions.first().type.pk)) - - def test_submission_data_contains_full_score(self): - self.assertEqual( - self.submission_list_first_entry['type']['full_score'], - self.student_info.submissions.first().type.full_score) - - def test_submission_data_contains_feedback_score(self): - self.assertEqual( - self.submission_list_first_entry['feedback']['score'], - self.student_info.submissions.first().feedback.score) - - # We don't want a matriculation number here - def test_matriculation_number_is_not_send(self): - self.assertNotIn('matrikel_no', self.submission_list_first_entry) - - -class StudentSelfSubmissionsTests(APITestCase): - - @classmethod - def setUpTestData(cls): - cls.factory = APIRequestFactory() - - def setUp(self): - exams = make_exams([{ - 'module_reference': 'Test Exam 01', - 'total_score': 100, - 'pass_score': 60, - }] - ) - self.test_data = make_test_data(data_dict={ - 'exams': [{ - 'module_reference': 'Test Exam 01', - 'total_score': 100, - 'pass_score': 60, - 'exam_type': exams[0].exam_type_id - }], - 'submission_types': [{ - 'name': 'problem01', - 'full_score': 10, - 'description': 'Very hard', - 'solution': 'Impossible!', - 'exam_type': exams[0] - }], - 'students': [{ - 'username': 'user01', - 'exam': 'Test Exam 01' - }], - 'tutors': [ - { - 'username': 'tutor01' - }, - { - 'username': 'tutor02' - } - ], - 'submissions': [{ - 'user': 'user01', - 'type': 'problem01', - 'text': 'Too hard for me ;-(', - 'feedback': { - 'text': 'Very bad!', - 'score': 3, - 'feedback_lines': { - '1': [ - { - 'text': 'This is very bad!', - 'of_tutor': 'tutor01', - # explicitness to required - # will also be set automatically - 'visible_to_student': False - }, - { - 'text': 'This is good!', - 'of_tutor': 'tutor02' - } - ], - } - } - }] - }) - - self.student = self.test_data['students'][0] - self.student_info = self.student.student - self.tutor = self.test_data['tutors'][0] - self.submission = self.test_data['submissions'][0] - self.feedback = self.submission.feedback - - self.request = self.factory.get(reverse('student-submissions')) - self.view = StudentSelfSubmissionsApiView.as_view() - - force_authenticate(self.request, user=self.student) - self.response = self.view(self.request) - - self.submission_list = self.response.data - self.submission_list_first_entry = self.submission_list[0] - - # Tests concerning submission data - def test_a_student_submissions_contains_type_name(self): - self.assertEqual( - self.submission_list_first_entry['type']['name'], - self.student_info.submissions.first().type.name) - - def test_a_student_submissions_contains_type_id(self): - self.assertEqual( - self.submission_list_first_entry['type']['pk'], - str(self.student_info.submissions.first().type.pk)) - - def test_submission_data_contains_full_score(self): - self.assertEqual( - self.submission_list_first_entry['type']['full_score'], - self.student_info.submissions.first().type.full_score) - - def test_submission_data_contains_description(self): - self.assertEqual( - self.submission_list_first_entry['type']['description'], - self.student_info.submissions.first().type.description) - - def test_submission_data_not_contains_solution(self): - self.assertNotIn('solution', self.submission_list_first_entry['type']) - - def test_submission_data_contains_final_status(self): - self.assertEqual( - self.submission_list_first_entry['feedback']['is_final'], - self.student_info.submissions.first().feedback.is_final) - - def test_submission_data_contains_feedback_score(self): - self.assertEqual( - self.submission_list_first_entry['feedback']['score'], - self.student_info.submissions.first().feedback.score) - - def test_submission_feedback_contains_submission_lines(self): - self.assertIn( - 'feedback_lines', - self.submission_list_first_entry['feedback'] - ) - - def test_feedback_contains_one_comment_per_line(self): - lines = self.submission_list_first_entry['feedback']['feedback_lines'] - self.assertEqual(len(lines[1]), 1) - - def test_feedback_comment_does_not_contain_tutor(self): - lines = self.submission_list_first_entry['feedback']['feedback_lines'] - self.assertNotIn('of_tutor', lines[1][0]) - - # We don't want a matriculation number here - def test_matriculation_number_is_not_send(self): - self.assertNotIn('matrikel_no', self.submission_list_first_entry) diff --git a/grady/core/tests/test_student_reviewer_viewset.py b/grady/core/tests/test_student_reviewer_viewset.py deleted file mode 100644 index 8cb650e7..00000000 --- a/grady/core/tests/test_student_reviewer_viewset.py +++ /dev/null @@ -1,156 +0,0 @@ -from django.urls import reverse -from rest_framework import status -from rest_framework.test import (APIRequestFactory, APITestCase, - force_authenticate) - -from core import models -from core.views import StudentReviewerApiViewSet -from util.factories import make_test_data, make_exams, make_groups - - -class StudentPageTests(APITestCase): - - @classmethod - def setUpTestData(cls): - cls.factory = APIRequestFactory() - - def setUp(self): - exams = make_exams([{ - 'module_reference': 'TestExam B.Inf.0042', - 'total_score': 42, - 'pass_score': 21, - }]) - groups = make_groups([{ - 'name': 'Group 01', - 'exam': exams[0] - }, - { - 'name': 'Group 02', - 'exam': exams[0] - }]) - self.test_data = make_test_data(data_dict={ - 'exams': [{ - 'module_reference': 'TestExam B.Inf.0042', - 'total_score': 42, - 'pass_score': 21, - 'exam_type': exams[0].exam_type_id - }], - 'submission_types': [{ - 'name': 'problem01', - 'full_score': 10, - 'description': 'Very hard', - 'solution': 'Impossible!', - 'exam_type': exams[0] - }], - 'students': [ - { - 'username': 'user01', - 'exam': 'TestExam B.Inf.0042', - 'exercise_groups': [groups[0]], - }, - { - 'username': 'user02', - 'exam': 'TestExam B.Inf.0042', - 'exercise_groups': [groups[1]], - }, - { - 'username': 'user03', - 'exam': 'TestExam B.Inf.0042', - 'exercise_groups': [groups[1]], - } - ], - 'tutors': [{ - 'username': 'tutor', - 'exercise_groups': [groups[1]], - }], - 'reviewers': [{ - 'username': 'reviewer', - 'exercise_groups': ['Group 1337'], - }], - 'submissions': [{ - 'user': 'user01', - 'type': 'problem01', - 'text': 'Too hard for me ;-(', - 'feedback': { - 'score': 3, - 'feedback_lines': { - '1': [{ - 'text': 'This is very bad!', - 'of_tutor': 'tutor' - }], - } - } - }] - }) - - self.student = self.test_data['students'][0].student - self.reviewer = self.test_data['reviewers'][0] - self.tutor = self.test_data['tutors'][0] - self.submission = self.test_data['submissions'][0] - - self.request = self.factory.get(reverse('student-list')) - self.view = StudentReviewerApiViewSet.as_view({'get': 'list'}) - - force_authenticate(self.request, user=self.reviewer) - self.rev_response = self.view(self.request) - - force_authenticate(self.request, user=self.tutor) - self.tut_response = self.view(self.request) - - def test_reviewer_can_access(self): - self.assertEqual(self.rev_response.status_code, status.HTTP_200_OK) - - def test_tutor_can_see_no_students_when_not_in_exercise_mode(self): - self.assertEqual(0, len(self.tut_response.data)) - - def test_reviewer_can_see_all_students(self): - self.assertEqual(3, len(self.rev_response.data)) - - # ! Test fails in testing environtment, but cannot reproduced manually. - # Idea: make groups independent of exam_type, then look what happens. - - # @override_config(EXERCISE_MODE=True) - # def test_tutor_can_only_see_group_members_when_in_exercise_mode(self): - # force_authenticate(self.request, user=self.tutor) - # response = self.view(self.request) - # self.assertEqual(2, len(response.data)) - - def test_submissions_score_is_included(self): - res_with_sub = None - for res in self.rev_response.data: - if len(res['submissions']) > 0: - res_with_sub = res - self.assertEqual(self.student.submissions.first().feedback.score, - res_with_sub['submissions'][0]['score']) - - def test_submissions_full_score_is_included(self): - res_with_sub = None - for res in self.rev_response.data: - if len(res['submissions']) > 0: - res_with_sub = res - self.assertEqual(self.student.submissions.first().type.full_score, - res_with_sub['submissions'][0]['full_score']) - - def tutor_can_not_deactivate_students(self): - self.client.force_authenticate(self.tutor) - response = self.client.post(reverse('student-list') + 'deactivate/') - self.assertEqual(status.HTTP_401_UNAUTHORIZED, response.status_code) - users = [stud.user for stud in models.StudentInfo.objects.all()] - self.assertTrue(all([user.is_active for user in users])) - - def tutor_can_not_activate_students(self): - self.client.force_authenticate(self.tutor) - response = self.client.post(reverse('student-list') + 'activate/') - self.assertEqual(status.HTTP_401_UNAUTHORIZED, response.status_code) - - def test_can_deactivate_all_students(self): - self.client.force_authenticate(self.reviewer) - self.client.post(reverse('student-list') + 'deactivate/') - users = [stud.user for stud in models.StudentInfo.objects.all()] - self.assertTrue(all([not user.is_active for user in users])) - - def test_can_activate_all_students(self): - self.client.force_authenticate(self.reviewer) - self.client.post(reverse('student-list') + 'activate/') - users = [stud.user for stud in models.StudentInfo.objects.all()] - self.assertTrue(all([user.is_active for user in users])) diff --git a/grady/core/tests/test_submissiontypeview.py b/grady/core/tests/test_submissiontypeview.py deleted file mode 100644 index 864558fa..00000000 --- a/grady/core/tests/test_submissiontypeview.py +++ /dev/null @@ -1,102 +0,0 @@ -""" Tests that we can receive information about different submission types """ - -from constance.test import override_config -from django.urls import reverse -from rest_framework import status -from rest_framework.test import (APIRequestFactory, APITestCase, - force_authenticate) - -from core.models import SubmissionType -from core.views import SubmissionTypeApiView -from util.factories import GradyUserFactory, make_exams - -# TODO: add tests to test the remaining counts in conjunction with the assignment logic -# TODO: also test for pass only and stuff - - -class SubmissionTypeViewTestList(APITestCase): - - @classmethod - def setUpTestData(cls): - cls.factory = APIRequestFactory() - cls.user_factory = GradyUserFactory() - - def setUp(self): - self.request = self.factory.get(reverse('submissiontype-list')) - SubmissionType.objects.create(name='Hard question', - full_score=20, - description='Whatever') - force_authenticate(self.request, - self.user_factory.make_reviewer()) - self.view = SubmissionTypeApiView.as_view({'get': 'list'}) - self.response = self.view(self.request) - - def test_can_access_when_authenticated(self): - self.assertEqual(self.response.status_code, status.HTTP_200_OK) - - def test_get_all_available_submissiontypes(self): - self.assertEqual(1, len(self.response.data)) - - def test_get_sumbission_type_name(self): - self.assertEqual('Hard question', self.response.data[0]['name']) - - def test_get_full_score(self): - self.assertEqual(20, self.response.data[0]['full_score']) - - -class SubmissionTypeViewTestRetrieve(APITestCase): - - @classmethod - def setUpTestData(cls): - cls.factory = APIRequestFactory() - cls.user_factory = GradyUserFactory() - cls.exam = make_exams(exams=[{ - 'module_reference': 'Test Exam 01', - 'total_score': 100, - 'pass_score': 60, - }])[0] - cls.student = cls.user_factory.make_student(exam=cls.exam) - - def setUp(self): - self.request = self.factory.get('/api/submissiontype/') - SubmissionType.objects.create(name='Hard question', - full_score=20, - description='Whatever') - self.pk = SubmissionType.objects.first().pk - force_authenticate(self.request, - self.user_factory.make_reviewer()) - self.view = SubmissionTypeApiView.as_view({'get': 'retrieve'}) - self.response = self.view(self.request, pk=self.pk) - - def test_can_access_when_authenticated(self): - self.assertEqual(self.response.status_code, status.HTTP_200_OK) - - def test_students_can_not_access(self): - request = self.factory.get('/api/submissiontype/') - force_authenticate(request, self.student) - view = SubmissionTypeApiView.as_view({'get': 'retrieve'}) - response = view(request, pk=self.pk) - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) - - @override_config(SHOW_SOLUTION_TO_STUDENTS=True) - def test_student_can_access_when_config_is_set(self): - request = self.factory.get('/api/submissiontype/') - force_authenticate(request, self.student) - view = SubmissionTypeApiView.as_view({'get': 'retrieve'}) - response = view(request, pk=self.pk) - self.assertEqual(response.status_code, status.HTTP_200_OK) - - def test_get_id(self): - self.assertEqual(str(self.pk), self.response.data['pk']) - - def test_get_sumbission_type_name(self): - self.assertEqual('Hard question', self.response.data['name']) - - def test_get_full_score(self): - self.assertEqual(20, self.response.data['full_score']) - - def test_get_descritpion(self): - self.assertEqual('Whatever', self.response.data['description']) - - def test_there_is_no_solution_to_nothing(self): - self.assertEqual('', self.response.data['solution']) diff --git a/grady/core/tests/test_tutor_api_endpoints.py b/grady/core/tests/test_tutor_api_endpoints.py deleted file mode 100644 index ee84cf7d..00000000 --- a/grady/core/tests/test_tutor_api_endpoints.py +++ /dev/null @@ -1,256 +0,0 @@ -""" Two api endpoints are currently planned - - * GET /tutor/:id to retrive information about some tutor - * POST /tutor/:username/:email create a new tutor and email password - * GET /tutorlist list of all tutors with their scores -""" -from django.contrib.auth import get_user_model -from constance.test import override_config -from rest_framework import status -from rest_framework.reverse import reverse -from rest_framework.test import (APIClient, APIRequestFactory, APITestCase, - force_authenticate) - -from core.models import Feedback, TutorSubmissionAssignment -from core.views import CorrectorApiViewSet -from util.factories import GradyUserFactory, make_test_data, make_exams - -NUMBER_OF_TUTORS = 3 - - -class TutorDeleteTest(APITestCase): - - @classmethod - def setUpTestData(cls): - cls.factory = APIRequestFactory() - cls.user_factory = GradyUserFactory() - - def setUp(self): - self.tutor = self.user_factory.make_tutor(username='UFO') - self.reviewer = self.user_factory.make_reviewer() - self.request = self.factory.delete(reverse('corrector-detail', - args=[str(self.tutor.pk)])) - self.view = CorrectorApiViewSet.as_view({'delete': 'destroy'}) - - force_authenticate(self.request, user=self.reviewer) - self.response = self.view(self.request, pk=str(self.tutor.pk)) - - def test_can_delete_tutor_soapbox(self): - """ see if the tutor was deleted """ - self.assertEqual(0, get_user_model().get_tutors().count()) - - def test_user_is_deleted_too(self): - """ see if the associated user was deleted (reviewer remains) """ - self.assertNotIn(self.tutor, get_user_model().objects.all()) - - -class TutorListTests(APITestCase): - - @classmethod - def setUpTestData(cls): - factory = APIRequestFactory() - - request = factory.get(reverse('corrector-list')) - view = CorrectorApiViewSet.as_view({'get': 'list'}) - exams = make_exams([{ - 'module_reference': 'Test Exam 01', - 'total_score': 100, - 'pass_score': 60, - }] - ) - data = make_test_data(data_dict={ - 'exams': [{ - 'module_reference': 'Test Exam 01', - 'total_score': 100, - 'pass_score': 60, - 'exam_type': exams[0].exam_type_id - }], - 'submission_types': [{ - 'name': '01. Sort this or that', - 'full_score': 35, - 'description': 'Very complicated', - 'solution': 'Trivial!', - 'exam_type': exams[0] - }], - 'students': [ - { - 'username': 'student01', - 'exam': 'Test Exam 01' - }, - { - 'username': 'student02', - 'exam': 'Test Exam 01' - } - ], - 'tutors': [ - {'username': 'tutor01'}, - {'username': 'tutor02'} - ], - 'reviewers': [ - {'username': 'reviewer'} - ], - 'submissions': [ - { - 'text': 'function blabl\n' - ' on multi lines\n', - 'type': '01. Sort this or that', - 'user': 'student01' - }, - { - 'text': 'function blabl\n' - ' on multi lines\n', - 'type': '01. Sort this or that', - 'user': 'student02' - } - ]} - ) - - def feedback_cycle(tutor, stage): - submissions = TutorSubmissionAssignment.objects.available_assignments({ - 'owner': tutor, - 'stage': stage, - 'submission_type': data['submission_types'][0].pk - }) - assignment = TutorSubmissionAssignment.objects.create( - owner=tutor, - stage=stage, - submission=submissions.first().submission - ) - Feedback.objects.update_or_create( - of_submission=assignment.submission, - score=35) - assignment.finish() - - tutor01 = data['tutors'][0] - tutor02 = data['tutors'][1] - reviewer = data['reviewers'][0] - - feedback_cycle(tutor01, TutorSubmissionAssignment.FEEDBACK_CREATION) - feedback_cycle(tutor02, TutorSubmissionAssignment.FEEDBACK_VALIDATION) - - force_authenticate(request, user=reviewer) - cls.response = view(request) - - def test_can_access(self): - self.assertEqual(self.response.status_code, status.HTTP_200_OK) - - def test_get_a_list_of_all_correctos(self): - self.assertEqual(3, len(self.response.data)) - - def test_feedback_created_count_matches_database(self): - def verify_fields(tutor_obj): - t = get_user_model().objects.get(username=tutor_obj['username']) - feedback_created_count = TutorSubmissionAssignment.objects.filter( - is_done=True, - stage=TutorSubmissionAssignment.FEEDBACK_CREATION, # noqa - owner=t - ).count() - return feedback_created_count == tutor_obj['feedback_created'] - - self.assertTrue(all(map(verify_fields, self.response.data))) - - def test_feedback_validated_count_matches_database(self): - def verify_fields(tutor_obj): - t = get_user_model().objects.get(username=tutor_obj['username']) - feedback_validated_cnt = TutorSubmissionAssignment.objects.filter( - is_done=True, - stage=TutorSubmissionAssignment.FEEDBACK_VALIDATION, # noqa - owner=t - ).count() - return feedback_validated_cnt == tutor_obj['feedback_validated'] - - self.assertTrue(all(map(verify_fields, self.response.data))) - - def test_sum_of_done_assignments(self): - self.assertEqual( - sum(obj['feedback_created'] + obj['feedback_validated'] - for obj in self.response.data), - TutorSubmissionAssignment.objects.filter(is_done=True).count() - ) - - -class TutorCreateTests(APITestCase): - - USERNAME = 'some_weird_name' - - @classmethod - def setUpTestData(cls): - cls.factory = APIRequestFactory() - cls.user_factory = GradyUserFactory() - - def setUp(self): - self.reviewer = self.user_factory.make_reviewer() - self.request = self.factory.post(reverse('corrector-list'), - {'username': self.USERNAME}) - self.view = CorrectorApiViewSet.as_view({'post': 'create'}) - - force_authenticate(self.request, user=self.reviewer) - self.response = self.view(self.request, username=self.USERNAME) - - def test_can_access(self): - self.assertEqual(self.response.status_code, status.HTTP_201_CREATED) - - def test_can_create(self): - self.assertEqual(self.USERNAME, - get_user_model().get_tutors().first().username) - - -class TutorDetailViewTests(APITestCase): - - @classmethod - def setUpTestData(cls): - cls.user_factory = GradyUserFactory() - - def setUp(self): - self.tutor = self.user_factory.make_tutor(username='fetterotto') - self.reviewer = self.user_factory.make_reviewer() - self.client = APIClient() - self.client.force_authenticate(user=self.reviewer) - - url = reverse('corrector-detail', kwargs={'pk': str(self.tutor.pk)}) - self.response = self.client.get(url, format='json') - - def test_can_access(self): - self.assertEqual(self.response.status_code, status.HTTP_200_OK) - - def test_can_view_tutor(self): - self.assertEqual(self.response.data['username'], - self.tutor.username) - - -class TutorRegisterTests(APITestCase): - - @classmethod - def setUpTestData(cls): - cls.user_factory = GradyUserFactory() - - def setUp(self): - self.reviewer = self.user_factory.make_reviewer() - self.client = APIClient() - - @override_config(REGISTRATION_PASSWORD='pw') - def test_reviewer_can_activate_tutor(self): - response = self.client.post('/api/corrector/register/', { - 'username': 'hans', - 'password': 'safeandsound', - 'registration_password': 'pw', - }) - - self.assertEqual(status.HTTP_201_CREATED, response.status_code) - - self.client.force_authenticate(self.reviewer) - response = self.client.put('/api/corrector/%s/' % response.data['pk'], { - 'username': 'hans', - 'is_active': True - }) - - self.assertEqual(status.HTTP_200_OK, response.status_code) - - def test_trottle_is_not_active_while_testing(self): - r = self.client.post('/api/corrector/register/', {'username': 'hans'}) - r = self.client.post('/api/corrector/register/', {'username': 'the'}) - r = self.client.post('/api/corrector/register/', {'username': 'brave'}) - r = self.client.post('/api/corrector/register/', {'username': 'fears'}) - r = self.client.post('/api/corrector/register/', {'username': 'spiders'}) - - self.assertNotEqual(status.HTTP_429_TOO_MANY_REQUESTS, r.status_code) diff --git a/grady/core/tests/test_user_account_views.py b/grady/core/tests/test_user_account_views.py deleted file mode 100644 index e64beb3c..00000000 --- a/grady/core/tests/test_user_account_views.py +++ /dev/null @@ -1,170 +0,0 @@ -from rest_framework import status -from rest_framework.test import (APIClient, APITestCase) - -from util.factories import GradyUserFactory, make_exams - - -class TutorReviewerCanChangePasswordTests(APITestCase): - @classmethod - def setUpTestData(cls): - cls.user_factory = GradyUserFactory() - cls.data = { - 'old_password': 'l', - 'new_password': 'chompreviver0.' - } - - def setUp(self): - self.reviewer = self.user_factory.make_reviewer(password='l') - self.tutor1 = self.user_factory.make_tutor(password='l') - self.tutor2 = self.user_factory.make_tutor(password='l') - self.client = APIClient() - - def _change_password(self, changing_user, user_to_change=None, data=None): - if user_to_change is None: - user_to_change = changing_user - if data is None: - data = self.data - - self.client.force_authenticate(user=changing_user) - url = f"/api/user/{user_to_change.pk}/change_password/" - return self.client.patch(url, data=data) - - def test_tutor_needs_to_provide_current_password(self): - res = self._change_password(self.tutor1, - data={'new_password': 'chompreviver0.'}) - self.assertEqual(status.HTTP_401_UNAUTHORIZED, res.status_code) - ret = self.client.login(username=self.tutor1.username, - password='chompreviver0.') - self.assertFalse(ret) - - def test_reviewer_needs_to_provide_current_password_for_self(self): - res = self._change_password(self.reviewer, - data={'new_password': 'chompreviver0.'}) - self.assertEqual(status.HTTP_401_UNAUTHORIZED, res.status_code) - ret = self.client.login(username=self.tutor1.username, - password='chompreviver0.') - self.assertFalse(ret) - - def test_tutor_can_change_own_password(self): - res = self._change_password(self.tutor1) - self.assertEqual(status.HTTP_200_OK, res.status_code) - ret = self.client.login(username=self.tutor1.username, - password='chompreviver0.') - self.assertTrue(ret) - - def test_tutor_cant_change_other_password(self): - res = self._change_password(self.tutor1, self.tutor2) - self.assertEqual(status.HTTP_403_FORBIDDEN, res.status_code) - ret = self.client.login(username=self.tutor2.username, - password='chompreviver0.') - self.assertFalse(ret) - - def test_reviewer_can_change_own_password(self): - res = self._change_password(self.reviewer) - self.assertEqual(status.HTTP_200_OK, res.status_code) - ret = self.client.login(username=self.reviewer.username, - password='chompreviver0.') - self.assertTrue(ret) - - def test_reviewer_can_change_tutor_password(self): - res = self._change_password(self.reviewer, self.tutor1, - data={'new_password': 'chompreviver0.'}) - self.assertEqual(status.HTTP_200_OK, res.status_code) - ret = self.client.login(username=self.tutor1.username, - password='chompreviver0.') - self.assertTrue(ret) - - def test_student_cant_change_password(self): - self.exam = make_exams(exams=[{ - 'module_reference': 'Test Exam 01', - 'total_score': 100, - 'pass_score': 60, - }])[0] - student = self.user_factory.make_student(password='l', exam=self.exam) - res = self._change_password(student) - self.assertEqual(status.HTTP_403_FORBIDDEN, res.status_code) - ret = self.client.login(username=student.username, - password='chompreviver0.') - self.assertFalse(ret) - - def test_reviewer_cannot_revoke_own_access(self): - user_pk = self.reviewer.pk - url = f"/api/user/{user_pk}/change_active/" - data = {'is_active': False} - self.client.force_authenticate(user=self.reviewer) - res = self.client.patch(url, data) - self.assertEqual(status.HTTP_403_FORBIDDEN, res.status_code) - - -class ReviewerCanChangeCorrectorRoleTests(APITestCase): - @classmethod - def setUpTestData(cls): - cls.user_factory = GradyUserFactory() - - def setUp(self): - self.reviewer1 = self.user_factory.make_reviewer() - self.client = APIClient() - - def _set_role(self, new_value, changing_user, user_to_change): - self.client.force_authenticate(user=changing_user) - url = f"/api/user/{user_to_change.pk}/change_role/" - return self.client.patch(url, data={'role': new_value}) - - def _make_reviewer(self, changing_user, user_to_change): - return self._set_role('Reviewer', changing_user, user_to_change) - - def _make_tutor(self, changing_user, user_to_change): - return self._set_role('Tutor', changing_user, user_to_change) - - def test_reviewer_can_promote_tutor_to_reviewer(self): - tutor = self.user_factory.make_tutor() - response = self._make_reviewer(self.reviewer1, tutor) - self.assertEqual(response.status_code, status.HTTP_200_OK) - tutor.refresh_from_db() - self.assertTrue(tutor.is_reviewer()) - - def test_reviewer_can_demote_other_reviewer_to_tutor(self): - reviewer2 = self.user_factory.make_reviewer() - response = self._make_tutor(self.reviewer1, reviewer2) - self.assertEqual(response.status_code, status.HTTP_200_OK) - reviewer2.refresh_from_db() - self.assertFalse(reviewer2.is_reviewer()) - - def test_reviewer_cannot_promote_student_to_reviewer(self): - exam = make_exams(exams=[{ - 'module_reference': 'Test Exam 01', - 'total_score': 100, - 'pass_score': 60, - }])[0] - student = self.user_factory.make_student(exam=exam) - response = self._make_reviewer(self.reviewer1, student) - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) - - def test_reviewer_cannot_promote_student_to_tutor(self): - exam = make_exams(exams=[{ - 'module_reference': 'Test Exam 01', - 'total_score': 100, - 'pass_score': 60, - }])[0] - student = self.user_factory.make_student(exam=exam) - response = self._make_tutor(self.reviewer1, student) - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) - - def test_student_cannot_change_access_rights(self): - exam = make_exams(exams=[{ - 'module_reference': 'Test Exam 01', - 'total_score': 100, - 'pass_score': 60, - }])[0] - student = self.user_factory.make_student(exam=exam) - response = self._make_reviewer(student, self.reviewer1) - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) - - def test_tutor_cannot_change_access_rights(self): - tutor = self.user_factory.make_tutor() - response = self._make_reviewer(tutor, self.reviewer1) - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) - - def test_reviewer_cannot_demote_self_to_tutor(self): - response = self._make_tutor(self.reviewer1, self.reviewer1) - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) diff --git a/grady/core/urls.py b/grady/core/urls.py deleted file mode 100644 index ecceb7f5..00000000 --- a/grady/core/urls.py +++ /dev/null @@ -1,63 +0,0 @@ -from django.urls import path, re_path -from drf_yasg.views import get_schema_view -from drf_yasg import openapi -from rest_framework.routers import DefaultRouter -from rest_framework.permissions import AllowAny - -from core import views - -# Create a router and register our viewsets with it. - -router = DefaultRouter() -router.register('student', views.StudentReviewerApiViewSet, - basename='student') -router.register('examtype', views.ExamApiViewSet, basename='examtype') -router.register('feedback', views.FeedbackApiView, basename='feedback') -router.register('feedback-comment', views.FeedbackCommentApiView, basename='feedback-comment') -router.register('submission', views.SubmissionViewSet, - basename='submission') -router.register('submissiontype', views.SubmissionTypeApiView, basename='submissiontype') -router.register('corrector', views.CorrectorApiViewSet, basename='corrector') -router.register('assignment', views.AssignmentApiViewSet, basename='assignment') -router.register('statistics', views.StatisticsEndpoint, basename='statistics') -router.register('user', views.UserAccountViewSet, basename='user') -router.register('label', views.LabelApiViewSet, basename='label') -router.register('label-statistics', views.LabelStatistics, basename='label-statistics') -router.register('solution-comment', views.SolutionCommentApiViewSet, basename='solution-comment') -router.register('group', views.GroupApiViewSet, basename='group') -router.register('config', views.InstanceConfigurationViewSet, basename='config') - -schema_view = get_schema_view( - openapi.Info( - title="Grady API", - default_version='v1', - description="Blub", - ), - # validators=['flex', 'ssv'], - public=True, - permission_classes=(AllowAny,), -) - -# regular views that are not viewsets -regular_views_urlpatterns = [ - path('student-page/', - views.StudentSelfApiView.as_view(), - name='student-page'), - path('student-submissions/', - views.StudentSelfSubmissionsApiView.as_view(), - name='student-submissions'), - path('instance/export/', views.InstanceExport.as_view(), name="instance-export"), - path('export/json/', views.StudentJSONExport.as_view(), name='export-json'), - path('import/', views.ImportApiViewSet.as_view(), name='import-json'), - re_path(r'swagger(?P<format>\.json|\.yaml)$', - schema_view.without_ui(cache_timeout=0), name='schema-json'), - re_path(r'swagger/$', schema_view.with_ui('swagger', cache_timeout=0), - name='schema-swagger-ui'), - re_path(r'redoc/$', schema_view.with_ui('redoc', cache_timeout=0), - name='schema-redoc'), -] - -urlpatterns = [ - *router.urls, - *regular_views_urlpatterns, -] diff --git a/grady/core/views/__init__.py b/grady/core/views/__init__.py deleted file mode 100644 index 1073d217..00000000 --- a/grady/core/views/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -from .feedback import FeedbackApiView, FeedbackCommentApiView # noqa -from .assignment import AssignmentApiViewSet # noqa -from .common_views import * # noqa -from .export import StudentJSONExport, InstanceExport # noqa -from .label import LabelApiViewSet, LabelStatistics # noqa -from .importer import ImportApiViewSet # noqa -from .group import GroupApiViewSet # noqa diff --git a/grady/core/views/assignment.py b/grady/core/views/assignment.py deleted file mode 100644 index 1182d7b9..00000000 --- a/grady/core/views/assignment.py +++ /dev/null @@ -1,126 +0,0 @@ -import logging - -from rest_framework import mixins, status, viewsets -from rest_framework import decorators -from rest_framework.exceptions import PermissionDenied -from rest_framework.response import Response - -from core import models, serializers -from core.models import TutorSubmissionAssignment -from core.permissions import IsReviewer, IsTutorOrReviewer -from core.serializers import AssignmentDetailSerializer, AssignmentSerializer - -from multiprocessing import Lock - -from core.views.util import tutor_attempts_to_patch_first_feedback_final - -log = logging.getLogger(__name__) - - -class AssignmentApiViewSet( - mixins.RetrieveModelMixin, - mixins.ListModelMixin, - viewsets.GenericViewSet): - serializer_class = AssignmentSerializer - permission_classes = (IsTutorOrReviewer, ) - - def get_queryset(self): - base_queryset = TutorSubmissionAssignment.objects.all() - if self.action in ['list', 'active', 'destroy']: - return base_queryset.all() - else: - return base_queryset.filter(owner=self.request.user) - - def _fetch_assignment(self, serializer): - try: - serializer.save() - except models.SubmissionTypeDepleted as err: - return Response({'Error': str(err)}, - status=status.HTTP_404_NOT_FOUND) - except models.NotMoreThanTwoOpenAssignmentsAllowed as err: - return Response({'Error': str(err)}, - status=status.HTTP_403_FORBIDDEN) - return Response(serializer.data, status=status.HTTP_201_CREATED) - - @decorators.permission_classes((IsReviewer,)) - def list(self, *args, **kwargs): - return super().list(*args, **kwargs) - - @decorators.action(detail=False, permission_classes=(IsReviewer,), methods=['get', 'delete']) - def active(self, request): - if request.method == 'GET': - queryset = self.get_queryset().filter(is_done=False) - serializer = self.get_serializer(queryset, many=True) - return Response(serializer.data) - else: - self.get_queryset().filter(is_done=False).delete() - return Response(status=status.HTTP_204_NO_CONTENT) - - @decorators.action(detail=False, permission_classes=(IsTutorOrReviewer,), methods=['delete']) - def release(self, request): - self.get_queryset().filter( - is_done=False - ).delete() - return Response(status=status.HTTP_204_NO_CONTENT) - - @decorators.action(detail=True, methods=['post']) - def finish(self, request, *args, **kwargs): - context = self.get_serializer_context() - instance = self.get_object() - if instance.is_done or (instance.owner != request.user): - return Response(status=status.HTTP_403_FORBIDDEN) - try: - orig_feedback = instance.submission.feedback - serializer = serializers.FeedbackSerializer( - orig_feedback, - data=request.data, - context=context, - partial=True) - if orig_feedback.final_by_reviewer and request.user.role == models.UserAccount.TUTOR: - raise PermissionDenied(detail="Unfortunately you won't be able to finish this" - "assignment since a reviewer has marked it as " - "final while you were assigned.") - except models.Feedback.DoesNotExist: - serializer = serializers.FeedbackSerializer( - data=request.data, - context=context) - - serializer.is_valid(raise_exception=True) - if tutor_attempts_to_patch_first_feedback_final(serializer, self.request.user, instance): - raise PermissionDenied( - detail='Cannot set the first feedback final.') - serializer.save() - instance.finish() - response_status = status.HTTP_201_CREATED if \ - instance.stage == \ - models.TutorSubmissionAssignment.FEEDBACK_CREATION else status.HTTP_200_OK - return Response(serializer.data, status=response_status) - - def destroy(self, request, pk=None): - """ Stop working on the assignment before it is finished """ - instance = self.get_object() - - if instance.is_done or (instance.owner != request.user and - not request.user.is_reviewer()): - return Response(status=status.HTTP_403_FORBIDDEN) - - instance.delete() - return Response(status=status.HTTP_204_NO_CONTENT) - - def create(self, request, *args, **kwargs): - with Lock(): - context = self.get_serializer_context() - data = request.data - serializer = AssignmentDetailSerializer(data=data, - context=context) - serializer.is_valid(raise_exception=True) - assignment = self._fetch_assignment(serializer) - - return assignment - - def retrieve(self, request, *args, **kwargs): - assignment = self.get_object() - if assignment.owner != request.user: - return Response(status=status.HTTP_403_FORBIDDEN) - serializer = AssignmentDetailSerializer(assignment) - return Response(serializer.data) diff --git a/grady/core/views/common_views.py b/grady/core/views/common_views.py deleted file mode 100644 index 237b394e..00000000 --- a/grady/core/views/common_views.py +++ /dev/null @@ -1,434 +0,0 @@ -""" All API views that are used to retrieve data from the database. They -can be categorized by the permissions they require. All views require a -user to be authenticated and most are only accessible by one user group """ -import logging - -import os - -import constance -import django.contrib.auth.password_validation as validators -import nbformat -from django.conf import settings -from django.contrib.auth.hashers import check_password -from django.core import exceptions -from django.db.models import Avg -from nbconvert import HTMLExporter -from rest_framework import generics, mixins, status, viewsets -from rest_framework.decorators import (throttle_classes, - action) -from rest_framework.exceptions import PermissionDenied -from rest_framework.permissions import AllowAny -from rest_framework.response import Response -from rest_framework.throttling import AnonRateThrottle - -from core import models -from core.models import (ExamType, StudentInfo, - SubmissionType, TutorSubmissionAssignment, Group) -from core.permissions import IsReviewer, IsStudent, IsTutorOrReviewer, SolutionsEnabledToStudents -from core.serializers import (ExamSerializer, StudentInfoSerializer, - StudentInfoForListViewSerializer, - StudentSubmissionWithSolutionSerializer, - SubmissionNoTypeSerializer, StudentSubmissionSerializer, - SubmissionTypeSerializer, CorrectorSerializer, - UserAccountSerializer, SolutionCommentSerializer, - SubmissionNoTypeWithStudentSerializer) - -log = logging.getLogger(__name__) -config = constance.config - - -class StudentSelfApiView(generics.RetrieveAPIView): - """ Gets all data that belongs to one student """ - permission_classes = (IsStudent,) - serializer_class = StudentInfoSerializer - - def get_object(self) -> StudentInfo: - """ The object in question is the student associated with the requests - user. Since the permission IsStudent is satisfied the member exists """ - if self.request.user.is_superuser: - return StudentInfo.objects.last() - return self.request.user.student - - -class StudentSelfSubmissionsApiView(generics.ListAPIView): - permission_classes = (IsStudent,) - - def get_serializer_class(self): - if config.SHOW_SOLUTION_TO_STUDENTS: - return StudentSubmissionWithSolutionSerializer - - return StudentSubmissionSerializer - - def get_queryset(self): - return self.request.user.student.submissions - - -class StudentReviewerApiViewSet(viewsets.ReadOnlyModelViewSet): - """ Gets a list of all students without individual submissions """ - permission_classes = (IsTutorOrReviewer,) - serializer_class = StudentInfoForListViewSerializer - - def get_queryset(self): - queryset = StudentInfo.objects \ - .select_related('user') \ - .prefetch_related('submissions') \ - .prefetch_related('submissions__feedback') \ - .prefetch_related('submissions__type') \ - .all() - - if self.request.user.is_reviewer(): - return queryset - - elif self.request.user.is_tutor() and config.EXERCISE_MODE: - return queryset.filter( - user__exercise_groups__in=self.request.user.exercise_groups.all() - ) - - else: - return [] - - def _set_students_active(self, active): - for student in self.get_queryset(): - user = student.user - user.is_active = active - user.save() - - @action(detail=False, methods=['post'], permission_classes=(IsReviewer,)) - def deactivate(self, request): - self._set_students_active(False) - return Response(status=status.HTTP_200_OK) - - @action(detail=False, methods=['post'], permission_classes=(IsReviewer,)) - def activate(self, request): - self._set_students_active(True) - return Response(status=status.HTTP_200_OK) - - -class ExamApiViewSet(viewsets.ReadOnlyModelViewSet): - """ Gets a list of an individual exam by Id if provided """ - queryset = ExamType.objects.all() - serializer_class = ExamSerializer - - -class CorrectorApiViewSet( - mixins.RetrieveModelMixin, - mixins.UpdateModelMixin, - mixins.CreateModelMixin, - mixins.DestroyModelMixin, - mixins.ListModelMixin, - viewsets.GenericViewSet): - """ Api endpoint for creating, listing, viewing or deleting tutors """ - permission_classes = (IsReviewer,) - queryset = models.UserAccount.corrector \ - .with_feedback_count() \ - .prefetch_related('assignments') - serializer_class = CorrectorSerializer - - @action(detail=False, methods=['post'], permission_classes=[AllowAny]) - @throttle_classes([AnonRateThrottle]) - def register(self, request): - serializer = self.get_serializer(data=request.data) - serializer.is_valid(raise_exception=True) - - if serializer.validated_data.get('is_active', False): - raise PermissionDenied(detail='Cannot be created active') - - registration_password = request.data.get('registration_password', None) - if registration_password is None or registration_password != config.REGISTRATION_PASSWORD: - raise PermissionDenied(detail='Invalid registration password') - - serializer.save() - return Response(serializer.data, status=status.HTTP_201_CREATED) - - -class SubmissionTypeApiView(viewsets.ReadOnlyModelViewSet): - """ Gets a list or a detail view of a single SubmissionType """ - queryset = SubmissionType.objects.all() - serializer_class = SubmissionTypeSerializer - permission_classes = [IsTutorOrReviewer | SolutionsEnabledToStudents] - - @action(detail=False) - def available(self, request, *args, **kwargs): - """ - GET Endpoint to fetch available counts for SubmissionTypes. Can be queried - by group using the ?group query_parameter - - :return: Response with dictionary that contains available counts for each SubmissionType - """ - - group_param = request.query_params.get('group', None) - group = Group.objects.filter(pk=group_param).first() - sub_types = self.get_queryset() - res = {} - for sub_type in sub_types: - counts_for_type = {} - for stage, _ in models.TutorSubmissionAssignment.stages: - counts_in_stage = TutorSubmissionAssignment.objects.available_assignments({ - 'stage': stage, - 'submission_type': sub_type.pk, - 'owner': self.request.user, - 'group': None if not group else group.pk - }).count() - counts_for_type[str(stage)] = counts_in_stage - res[str(sub_type.pk)] = counts_for_type - - return Response(res) - - -class SolutionCommentApiViewSet( - mixins.CreateModelMixin, - mixins.UpdateModelMixin, - mixins.DestroyModelMixin, - viewsets.GenericViewSet): - permission_classes = (IsTutorOrReviewer,) - queryset = models.SolutionComment.objects.all() - serializer_class = SolutionCommentSerializer - - def destroy(self, request, *args, **kwargs): - instance = self.get_object() - if not request.user.is_reviewer() and instance.of_user != request.user: - raise PermissionDenied(detail="You can only delete comments you made") - self.perform_destroy(instance) - return Response(status=status.HTTP_204_NO_CONTENT) - - def update(self, request, *args, **kwargs): - instance = self.get_object() - if instance.of_user != request.user: - raise PermissionDenied(detail="You can only update comments you made") - return super().update(request, *args, **kwargs) - - -class StatisticsEndpoint(viewsets.ViewSet): - permission_classes = (IsTutorOrReviewer,) - - def retrieve(self, request, pk=None): - first_sub_type = models.SubmissionType.objects.filter(exam_type_id=pk).first() - - return Response({ - 'submissions_per_type': - first_sub_type.submissions.count() if first_sub_type is not None else 0, - - 'submissions_per_student': - models.SubmissionType.objects.filter(exam_type_id=pk).count(), - - 'current_mean_score': - models.Feedback.objects.filter(of_submission__type__exam_type_id=pk).aggregate - (avg=Avg('score')).get('avg', 0), - - 'submission_type_progress': - # Queryset is explicitly evaluated so camelizer plugin camelizes it - list(models.SubmissionType.get_annotated_feedback_count().filter( - exam_type_id=pk).values( - 'pk', - 'name', - 'submission_count', - 'feedback_final', - 'feedback_in_validation', - 'feedback_in_conflict')) - }) - - -class SubmissionViewSet(viewsets.ReadOnlyModelViewSet): - permission_classes = (IsTutorOrReviewer,) - - def get_serializer_class(self): - if self.request.user.is_reviewer() or config.EXERCISE_MODE: - # this contains student fullname - # in most cases a pseudonym, but useful for - # tracking students across views in the frontend - return SubmissionNoTypeWithStudentSerializer - return SubmissionNoTypeSerializer - - def get_queryset(self): - base_queryset = models.Submission.objects \ - .select_related('type') \ - .select_related('feedback') \ - .prefetch_related('tests') \ - .prefetch_related('feedback__feedback_lines') \ - .prefetch_related('feedback__feedback_lines__of_tutor') \ - .all() - - if self.request.user.is_reviewer() \ - or (self.request.user.is_tutor() and config.EXERCISE_MODE): - return base_queryset - elif self.request.user.is_student(): - return base_queryset.filter( - student__user=self.request.user - ) - else: - return base_queryset.filter( - assignments__owner=self.request.user - ) - - @action(detail=True, ) - def source_code(self, request, *args, **kwargs): - submission = self.get_object() - if submission.source_code_available: - return Response(data={'source_code': submission.source_code}) - return Response(status=status.HTTP_404_NOT_FOUND) - - @action(detail=True, permission_classes=(IsStudent,)) - def html(self, request, *args, **kwargs): - submission = self.get_object() - if submission.type.programming_language == models.SubmissionType.PYTHON and \ - submission.source_code_available: - notebook = nbformat.reads(submission.source_code, as_version=4) - html_exporter = HTMLExporter() - body, _ = html_exporter.from_notebook_node(notebook) - return Response(body, content_type='text/html') - return Response(status=status.HTTP_404_NOT_FOUND) - - -class UserAccountViewSet(viewsets.ReadOnlyModelViewSet): - serializer_class = UserAccountSerializer - queryset = models.UserAccount.objects.all() - - @action(detail=True, methods=['patch'], permission_classes=(IsTutorOrReviewer,)) - def change_password(self, request, *args, **kwargs): - user = self.get_object() - if request.user != user and not request.user.is_reviewer(): - return Response(status=status.HTTP_403_FORBIDDEN) - old_password = request.data.get('old_password') - - # tutors must always provide their current password - # reviewers must provide their current password when they change - # their own, not if they change the password of a tutor - if (request.user.is_tutor() or - request.user.is_reviewer and request.user == user) \ - and \ - (old_password is None or - not check_password(old_password, user.password)): - return Response(status=status.HTTP_401_UNAUTHORIZED) - - new_password = request.data.get('new_password') - # validate password - try: - if new_password is not None: - validators.validate_password(password=new_password, user=user) - except exceptions.ValidationError as err: - return Response({'new_password': list(err.messages)}, - status=status.HTTP_406_NOT_ACCEPTABLE) - user.set_password(new_password) - user.save() - log.info(f"User {request.user} changed password of {user}") - return Response(status=status.HTTP_200_OK) - - @action(detail=True, methods=['patch']) - def change_active(self, request, *args, **kwargs): - active = request.data.get('is_active') - req_user = request.user - user = self.get_object() - if active is None: - error_msg = "You need to provide an 'active' field" - return Response({'Error': error_msg}, status.HTTP_400_BAD_REQUEST) - if req_user.is_reviewer() and req_user == user: - error_msg = "As a reviewer, you cannot revoke your own access." - return Response({'Error': error_msg}, status.HTTP_403_FORBIDDEN) - if (req_user.is_student() or req_user.is_tutor()) and req_user != user: - return Response(status.HTTP_403_FORBIDDEN) - user.is_active = active - user.save() - return Response(status.HTTP_200_OK) - - @action(detail=True, methods=['patch'], permission_classes=(IsReviewer,)) - def change_groups(self, request, *args, **kwargs): - # for some reason only the newly added groups come as a group object - groups = [x.get('pk') if type(x) is not str else x for x in request.data] - req_user = request.user - user = self.get_object() - if groups is None: - error_msg = "You need to provide an 'groups' field" - return Response({'Error': error_msg}, status.HTTP_400_BAD_REQUEST) - if req_user.is_student() or req_user.is_tutor(): - return Response(status.HTTP_403_FORBIDDEN) - user.set_groups(groups) - user.save() - return Response(status.HTTP_200_OK) - - @action(detail=True) - def get_groups(self, request, *args, **kwargs): - req_user = request.user - if req_user.is_student() or req_user.is_tutor(): - return Response(status.HTTP_403_FORBIDDEN) - user = self.get_object() - return Response(user.exercise_groups, status=status.HTTP_200_OK) - - @action(detail=True, methods=["patch"]) - def change_role(self, request, *args, **kwargs): - new_role = request.data.get('role') - user = self.get_object() - valid_values = [ - models.UserAccount.STUDENT, - models.UserAccount.REVIEWER, - models.UserAccount.TUTOR, - ] - if new_role not in valid_values: - error_msg = ( - "You need to provide a 'role' field with one of these values: " - + ', '.join(valid_values) - ) - return Response({'Error': error_msg}, status.HTTP_400_BAD_REQUEST) - if not request.user.is_reviewer(): - error_msg = 'Only reviewers can manage access rights.' - return Response({'Error': error_msg}, status.HTTP_403_FORBIDDEN) - if user.is_student(): - error_msg = 'Cannot promote a student to another role.' - return Response({'Error': error_msg}, status.HTTP_403_FORBIDDEN) - if user == request.user and not new_role == models.UserAccount.REVIEWER: - error_msg = 'As a reviewer, you cannot demote yourself.' - return Response({'Error': error_msg}, status.HTTP_403_FORBIDDEN) - user.role = new_role - user.save() - return Response(status.HTTP_200_OK) - - @action(detail=False) - def me(self, request): - serializer = self.get_serializer(request.user) - return Response(serializer.data, status=status.HTTP_200_OK) - - -class InstanceConfigurationViewSet(viewsets.ViewSet): - @action(detail=False, methods=['patch']) - def change_config(self, request): - """ - PATCH Endpoint to modify constance settings. Requires reviewer permissions. - - :return: Response with dictionary of all modified constance fields. - """ - if not self.request.user.is_reviewer(): - return Response(status=status.HTTP_403_FORBIDDEN) - - res = {} - for key in request.data: - - # capitalize key and check if it is a valid constance entry - caps_key = key.upper() - if getattr(config, caps_key, None) is None: - return Response( - f"{key} is not a valid setting.", - status=status.HTTP_409_CONFLICT - ) - - val = request.data[key] - setattr(config, caps_key, val) - res[key] = val - - return Response(res, status=status.HTTP_206_PARTIAL_CONTENT) - - def list(self, request): - """ - GET Endpoint to list constance settings as well as additional config values. - Constance settings will be supplied in the "instance_settings" field. - - :return: Response with dictionary of all settings and config values. - """ - - # construct constance data, lowercase the key so that it is correctly camel-cased - settings_dict = {key.lower(): getattr(config, key) for key in dir(config)} - res = { - 'timeDelta': settings.JWT_AUTH['JWT_EXPIRATION_DELTA'].seconds * 1000, - 'version': os.environ.get('VERSION'), - 'instanceSettings': settings_dict, - } - - return Response(res, status=status.HTTP_200_OK) diff --git a/grady/core/views/export.py b/grady/core/views/export.py deleted file mode 100644 index 7a02c8e2..00000000 --- a/grady/core/views/export.py +++ /dev/null @@ -1,79 +0,0 @@ -from django.db import transaction - -from rest_framework.response import Response -from rest_framework.views import APIView - -import xkcdpass.xkcd_password as xp - -from core.models import StudentInfo, UserAccount, ExamType, SubmissionType -from core.permissions import IsReviewer -from core.serializers import SubmissionTypeSerializer, \ - ExamSerializer, UserAccountSerializer -from core.serializers.student import StudentExportSerializer, ExamInfoSerializer -from core.serializers.tutor import CorrectorSerializer - -words = xp.generate_wordlist(wordfile=xp.locate_wordfile(), min_length=5, max_length=8) - - -@transaction.atomic -def _set_student_passwords(): - student_password_dict = {} - # TODO use bulk update with django makepassword function - for student in UserAccount.get_students(): - password = xp.generate_xkcdpassword(words, numwords=3, delimiter='-') - student.set_password(password) - student.save() - student_password_dict[student.pk] = password - - return student_password_dict - - -class StudentJSONExport(APIView): - permission_classes = (IsReviewer,) - - def post(self, request, format=None): - set_passwords = request.data.get('set_passwords') - passwords = _set_student_passwords() if set_passwords else None - - content = [ - {'Matrikel': student.matrikel_no, - 'Name': student.user.fullname, - 'Username': student.user.username, - 'Email': student.user.email, - 'Exams': ExamInfoSerializer(student.exams.all(), many=True).data, - 'Password': passwords[student.user.pk] if set_passwords else '********', - 'Scores': [ - { - 'exam': exam_info.exam.module_reference, - 'submissions': [ - { - 'type': submission_type, - 'score': score - } for submission_type, score in exam_info.score_per_submission().items()] - } for exam_info in student.exams.all()] - } for student - in StudentInfo.objects.all()] - return Response(content) - - -class InstanceExport(APIView): - permission_classes = (IsReviewer,) - - def get(self, request): - exam_types_serializer = ExamSerializer(ExamType.objects.all(), many=True) - submission_types_serializer = SubmissionTypeSerializer( - SubmissionType.objects.all(), many=True) - tutors_serializer = CorrectorSerializer( - UserAccount.corrector.with_feedback_count(), - many=True) - reviewer_serializer = UserAccountSerializer(UserAccount.get_reviewers(), many=True) - student_serializer = StudentExportSerializer(StudentInfo.objects.all(), many=True) - - content = { - "examTypes": exam_types_serializer.data, - "submissionTypes": submission_types_serializer.data, - "students": student_serializer.data, - "tutors": tutors_serializer.data, - "reviewers": reviewer_serializer.data - } - return Response(content) diff --git a/grady/core/views/feedback.py b/grady/core/views/feedback.py deleted file mode 100644 index 4225c86a..00000000 --- a/grady/core/views/feedback.py +++ /dev/null @@ -1,123 +0,0 @@ -import logging -from multiprocessing import Lock - -import constance -from rest_framework import mixins, status, viewsets -from rest_framework.exceptions import PermissionDenied -from rest_framework.response import Response - -from core import models, permissions, serializers -from core.views.util import tutor_attempts_to_patch_first_feedback_final, \ - get_implicit_assignment_for_user - -log = logging.getLogger(__name__) -config = constance.config - - -class FeedbackApiView( - mixins.CreateModelMixin, - mixins.RetrieveModelMixin, - mixins.ListModelMixin, - viewsets.GenericViewSet): - """ Gets a list of an individual exam by Id if provided """ - permission_classes = (permissions.IsTutorOrReviewer,) - lookup_field = 'of_submission__pk' - lookup_url_kwarg = 'submission_pk' - - def _tutor_attempts_to_change_final_feedback_of_reviewer(self, serializer): - feedback_final_by_reviewer = serializer.instance.final_by_reviewer - user_is_tutor = self.request.user.role == models.UserAccount.TUTOR - return feedback_final_by_reviewer and user_is_tutor - - def _tutor_attempts_to_set_first_feedback_final(self, serializer): - is_final_set = serializer.validated_data.get('is_final', False) - user_is_tutor = self.request.user.role == models.UserAccount.TUTOR - return is_final_set and user_is_tutor - - def get_serializer_class(self): - if config.EXERCISE_MODE: - return serializers.FeedbackWithStudentSerializer - return serializers.FeedbackSerializer - - def get_queryset(self): - base_queryset = models.Feedback.objects \ - .select_related('of_submission') \ - .select_related('of_submission__type') \ - .select_related('of_submission__student') \ - .select_related('of_submission__student__user') \ - .all() - - if self.request.user.is_reviewer(): - return base_queryset \ - .prefetch_related('feedback_lines') \ - .prefetch_related('feedback_lines__of_tutor') \ - .all() - - user_groups = self.request.user.exercise_groups.all() - if self.request.user.is_tutor() and config.EXERCISE_MODE: - return base_queryset.filter( - of_submission__student__user__exercise_groups__in=user_groups - ) - - return base_queryset.filter( - of_submission__assignments__owner=self.request.user - ) - - def create(self, request, *args, **kwargs): - if request.user.is_tutor() and not config.EXERCISE_MODE: - return Response(status=status.HTTP_401_UNAUTHORIZED) - - serializer = self.get_serializer(data=request.data) - serializer.is_valid(raise_exception=True) - self.perform_create(serializer) - - # update MetaSubmission information - meta = serializer.validated_data.get('of_submission').meta - meta.feedback_authors.add(self.request.user) - return Response(serializer.data, - status=status.HTTP_201_CREATED) - - def partial_update(self, request, **kwargs): - feedback = self.get_object() - serializer = self.get_serializer(feedback, data=request.data, - partial=True) - serializer.is_valid(raise_exception=True) - - assignment = get_implicit_assignment_for_user(feedback.of_submission, self.request.user) - - if self._tutor_attempts_to_change_final_feedback_of_reviewer(serializer): # noqa - raise PermissionDenied( - detail="Changing feedback set to final by a reviewer is not allowed.") - - if tutor_attempts_to_patch_first_feedback_final(serializer, self.request.user, assignment): - raise PermissionDenied( - detail='Cannot set the first feedback final.') - serializer.save() - return Response(serializer.data) - - -class FeedbackCommentApiView( - mixins.DestroyModelMixin, - viewsets.GenericViewSet): - """ Gets a list of an individual exam by Id if provided """ - permission_classes = (permissions.IsTutorOrReviewer,) - serializer_class = serializers.FeedbackCommentSerializer - - def get_queryset(self): - base_queryset = models.FeedbackComment.objects.all() - - user = self.request.user - if user.role == models.UserAccount.REVIEWER: - return base_queryset - return base_queryset.filter(of_tutor=user) - - def destroy(self, request, *args, **kwargs): - with Lock(): - instance = self.get_object() - if instance.of_feedback.feedback_lines.count() == 1 and \ - not instance.of_feedback.is_full_score(): - raise PermissionDenied(detail="Last comment can not be deleted for submissions " - "with non full score") - - self.perform_destroy(instance) - return Response(status=status.HTTP_204_NO_CONTENT) diff --git a/grady/core/views/group.py b/grady/core/views/group.py deleted file mode 100644 index e083f26d..00000000 --- a/grady/core/views/group.py +++ /dev/null @@ -1,14 +0,0 @@ -import logging - -from rest_framework import mixins, viewsets - -from core import models, permissions, serializers - -log = logging.getLogger(__name__) - - -class GroupApiViewSet(viewsets.GenericViewSet, - mixins.ListModelMixin): - permission_classes = (permissions.IsTutorOrReviewer, ) - queryset = models.Group.objects.all() - serializer_class = serializers.GroupSerializer diff --git a/grady/core/views/importer.py b/grady/core/views/importer.py deleted file mode 100644 index ee5c1975..00000000 --- a/grady/core/views/importer.py +++ /dev/null @@ -1,25 +0,0 @@ -from rest_framework import status -from rest_framework.response import Response -from rest_framework.views import APIView -from rest_framework.exceptions import ValidationError -from core.permissions import IsReviewer -from util.importer import parse_and_import_hektor_json - - -class ImportApiViewSet(APIView): - permission_classes = (IsReviewer, ) - - def post(self, request): - exam_data = request.data - - if not exam_data: - return Response({"Error": "You need to submit the exam data to be imported"}, - status.HTTP_400_BAD_REQUEST) - - try: - parse_and_import_hektor_json(exam_data) - except ValidationError as err: - return Response({"ValidationError": err.detail}, - status.HTTP_409_CONFLICT) - - return Response({}, status.HTTP_201_CREATED) diff --git a/grady/core/views/label.py b/grady/core/views/label.py deleted file mode 100644 index 152b1cc7..00000000 --- a/grady/core/views/label.py +++ /dev/null @@ -1,56 +0,0 @@ -import logging - -from django.db.models import Case, When, IntegerField, Sum, Q - -from rest_framework import mixins, viewsets -from rest_framework.permissions import IsAuthenticated -from rest_framework.response import Response - -from core import models, permissions, serializers -from core.models import SubmissionType, FeedbackLabel - -log = logging.getLogger(__name__) - - -class LabelApiViewSet(viewsets.GenericViewSet, - mixins.CreateModelMixin, - mixins.UpdateModelMixin, - mixins.ListModelMixin): - permission_classes = (permissions.IsTutorOrReviewer, ) - queryset = models.FeedbackLabel.objects.all() - serializer_class = serializers.LabelSerializer - - def get_permissions(self): - if self.action == 'list': - return [IsAuthenticated(), ] - else: - return super().get_permissions() - - -class LabelStatistics(viewsets.ViewSet): - - permission_classes = (permissions.IsTutorOrReviewer, ) - - def list(self, *args, **kwargs): - # TODO This is horribly ugly and should be killed with fire - # however, i'm unsure whether there is a better way to retrieve the - # information that hits the database less often - labels = FeedbackLabel.objects.all() - - counts = list(SubmissionType.objects.annotate( - **{str(label.pk): Sum( - Case( - # if the feedback has a label or there is a visible comment with that - # label add 1 to the count - When( - Q(submissions__feedback__labels=label) | - Q(submissions__feedback__feedback_lines__labels=label) & - Q(submissions__feedback__feedback_lines__visible_to_student=True), - then=1), - output_field=IntegerField(), - default=0 - ) - ) for label in labels} - ).values('pk', *[str(label.pk) for label in labels])) - - return Response(list(counts)) diff --git a/grady/core/views/util.py b/grady/core/views/util.py deleted file mode 100644 index ecb48353..00000000 --- a/grady/core/views/util.py +++ /dev/null @@ -1,41 +0,0 @@ -import constance -from rest_framework.exceptions import PermissionDenied - -from core import models - -config = constance.config - - -class NoAssignmentForTutor(Exception): - pass - - -def tutor_attempts_to_patch_first_feedback_final(feedback_serializer, - user, - assignment=None): - # override assignment logic in exercise mode - if user.role == models.UserAccount.REVIEWER \ - or user.role == models.UserAccount.TUTOR and config.EXERCISE_MODE: - return False - if user.role == models.UserAccount.TUTOR and assignment is None: - raise NoAssignmentForTutor() - is_final_set = feedback_serializer.validated_data.get('is_final', False) - in_creation = assignment.stage == models.TutorSubmissionAssignment.FEEDBACK_CREATION # noqa - single_correction = config.SINGLE_CORRECTION - return is_final_set and in_creation and not single_correction - - -def get_implicit_assignment_for_user(submission, user): - """ Check for tutor if it exists. Not relevant for reviewer """ - try: - return models.TutorSubmissionAssignment.objects.get( - owner=user, - submission=submission - ) - except models.TutorSubmissionAssignment.DoesNotExist: - if user.role == models.UserAccount.REVIEWER \ - or (user.role == models.UserAccount.TUTOR and config.EXERCISE_MODE): - return None - - raise PermissionDenied( - detail='This user has no permission to create this feedback') diff --git a/grady/deploy.sh b/grady/deploy.sh deleted file mode 100755 index c4043783..00000000 --- a/grady/deploy.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh -sleep 5 -python manage.py migrate --noinput -if [ "$?" -ne "0" ]; then - exit 1 -fi -gunicorn \ - --bind 0.0.0.0:8000 \ - --workers=5 \ - --timeout=120 \ - --worker-class=sync \ - --log-level debug \ - grady.wsgi:application diff --git a/grady/docker-compose.yml b/grady/docker-compose.yml deleted file mode 100644 index 563b5f04..00000000 --- a/grady/docker-compose.yml +++ /dev/null @@ -1,27 +0,0 @@ -version: '3' - -services: - - postgres: - image: postgres:13 - restart: always - networks: - - default - ports: - - 6543:5432 - - grady: - build: . - command: > - sh -c "sleep 2 && - ./manage.py migrate --noinput && - ./deploy.sh" - depends_on: - - postgres - restart: always - networks: - - default - expose: - - "8000" - ports: - - "8000:8000" diff --git a/grady/docs/Database Design/Entity Relation Model.erdplus b/grady/docs/Database Design/Entity Relation Model.erdplus deleted file mode 100644 index eee0a47b..00000000 --- a/grady/docs/Database Design/Entity Relation Model.erdplus +++ /dev/null @@ -1 +0,0 @@ -{"version":2,"www":"erdplus.com","shapes":[{"type":"Entity","details":{"name":"Student","type":"regular","x":634,"y":250,"id":1}},{"type":"Attribute","details":{"name":"Matrikel #","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":true,"x":525,"y":177,"id":2}},{"type":"Attribute","details":{"name":"Anonymous Key","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":false,"x":635,"y":178,"id":4}},{"type":"Attribute","details":{"name":"One Time Passwords","isDerived":false,"isMultivalued":true,"isOptional":false,"isComposite":false,"isUnique":false,"x":748,"y":182,"id":6}},{"type":"Entity","details":{"name":"Aufgaben Typ","type":"regular","x":278,"y":480,"id":8}},{"type":"Attribute","details":{"name":"ID","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":true,"x":137,"y":550,"id":9}},{"type":"Attribute","details":{"name":"Korrekturvorgabe","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":false,"x":136,"y":493,"id":11}},{"type":"Attribute","details":{"name":"Name","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":false,"x":136,"y":433,"id":13}},{"type":"Attribute","details":{"name":"Musterlösung","isDerived":false,"isMultivalued":false,"isOptional":true,"isComposite":false,"isUnique":false,"x":137,"y":371,"id":24}},{"type":"Entity","details":{"name":"Aufgabe","type":"weak","x":634,"y":478,"id":26}},{"type":"Attribute","details":{"name":"Anonymous Key","isDerived":true,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":true,"x":741,"y":368,"id":27}},{"type":"Attribute","details":{"name":"Vorkorrektur","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":false,"x":808,"y":416,"id":31}},{"type":"Relationship","details":{"name":"hat Typ","isIdentifying":false,"x":449,"y":480,"slots":[{"slotIndex":0,"minimum":"0","maximum":"n","participation":"unspecified","cardinality":"unspecified","role":"","entityId":26},{"slotIndex":1,"minimum":"1","maximum":"1","participation":"unspecified","cardinality":"unspecified","role":"","entityId":8}],"id":35}},{"type":"Relationship","details":{"name":"Abgabe","isIdentifying":true,"x":635,"y":360,"slots":[{"slotIndex":0,"minimum":"1","maximum":"1","participation":"unspecified","cardinality":"unspecified","role":"","entityId":1},{"slotIndex":1,"minimum":"0","maximum":"n","participation":"unspecified","cardinality":"unspecified","role":"","entityId":26}],"id":40}},{"type":"Entity","details":{"name":"Feedback","type":"weak","x":634,"y":761,"id":43}},{"type":"Attribute","details":{"name":"Punkte","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":false,"x":500,"y":720,"id":44}},{"type":"Attribute","details":{"name":"Text","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":false,"x":501,"y":779,"id":46}},{"type":"Relationship","details":{"name":"bewertet","isIdentifying":true,"x":634,"y":632,"slots":[{"slotIndex":0,"minimum":"1","maximum":"1","participation":"unspecified","cardinality":"unspecified","role":"","entityId":26},{"slotIndex":1,"minimum":"0","maximum":"n","participation":"unspecified","cardinality":"unspecified","role":"","entityId":43}],"id":48}},{"type":"Entity","details":{"name":"Tutor","type":"regular","x":1063,"y":585,"id":51}},{"type":"Attribute","details":{"name":"Name","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":false,"x":1173,"y":530,"id":52}},{"type":"Attribute","details":{"name":"Benutzername","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":true,"x":1177,"y":588,"id":54}},{"type":"Attribute","details":{"name":"Passwort","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":false,"x":1182,"y":647,"id":56}},{"type":"Relationship","details":{"name":"erstellt","isIdentifying":false,"x":892,"y":704,"slots":[{"slotIndex":0,"minimum":"0","maximum":"n","participation":"unspecified","cardinality":"unspecified","role":"","entityId":43},{"slotIndex":1,"minimum":"1","maximum":"1","participation":"unspecified","cardinality":"unspecified","role":"","entityId":51}],"id":58}},{"type":"Relationship","details":{"name":"korrigiert","isIdentifying":false,"x":884,"y":474,"slots":[{"slotIndex":0,"minimum":"0","maximum":"n","participation":"unspecified","cardinality":"unspecified","role":"","entityId":26},{"slotIndex":1,"minimum":"0","maximum":"m","participation":"unspecified","cardinality":"unspecified","role":"","entityId":51}],"id":62}},{"type":"Entity","details":{"name":"Dozent","type":"regular","x":1064,"y":862,"id":69}},{"type":"Attribute","details":{"name":"Name","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":false,"x":1174,"y":806,"id":70}},{"type":"Attribute","details":{"name":"Benutzername","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":true,"x":1172,"y":860,"id":72}},{"type":"Attribute","details":{"name":"Password","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":false,"x":1172,"y":916,"id":74}},{"type":"Relationship","details":{"name":"überprüft","isIdentifying":false,"x":890,"y":862,"slots":[{"slotIndex":0,"minimum":"0","maximum":"n","participation":"unspecified","cardinality":"unspecified","role":"","entityId":43},{"slotIndex":1,"minimum":"0","maximum":"m","participation":"unspecified","cardinality":"unspecified","role":"","entityId":69}],"id":78}},{"type":"Attribute","details":{"name":"Anonymus Key","isDerived":true,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":true,"x":504,"y":838,"id":82}}],"connectors":[{"type":"Connector","details":{"id":3},"source":2,"destination":1},{"type":"Connector","details":{"id":5},"source":4,"destination":1},{"type":"Connector","details":{"id":7},"source":6,"destination":1},{"type":"Connector","details":{"id":10},"source":9,"destination":8},{"type":"Connector","details":{"id":12},"source":11,"destination":8},{"type":"Connector","details":{"id":14},"source":13,"destination":8},{"type":"Connector","details":{"id":25},"source":24,"destination":8},{"type":"Connector","details":{"id":28},"source":27,"destination":26},{"type":"Connector","details":{"id":32},"source":31,"destination":26},{"type":"RelationshipConnector","details":{"slotIndex":0,"id":38},"source":26,"destination":35},{"type":"RelationshipConnector","details":{"slotIndex":1,"id":39},"source":8,"destination":35},{"type":"RelationshipConnector","details":{"slotIndex":0,"id":41},"source":1,"destination":40},{"type":"RelationshipConnector","details":{"slotIndex":1,"id":42},"source":26,"destination":40},{"type":"Connector","details":{"id":45},"source":44,"destination":43},{"type":"Connector","details":{"id":47},"source":46,"destination":43},{"type":"RelationshipConnector","details":{"slotIndex":0,"id":49},"source":26,"destination":48},{"type":"RelationshipConnector","details":{"slotIndex":1,"id":50},"source":43,"destination":48},{"type":"Connector","details":{"id":53},"source":52,"destination":51},{"type":"Connector","details":{"id":55},"source":54,"destination":51},{"type":"Connector","details":{"id":57},"source":56,"destination":51},{"type":"RelationshipConnector","details":{"slotIndex":0,"id":60},"source":43,"destination":58},{"type":"RelationshipConnector","details":{"slotIndex":1,"id":61},"source":51,"destination":58},{"type":"RelationshipConnector","details":{"slotIndex":0,"id":64},"source":26,"destination":62},{"type":"RelationshipConnector","details":{"slotIndex":1,"id":66},"source":51,"destination":62},{"type":"Connector","details":{"id":71},"source":70,"destination":69},{"type":"Connector","details":{"id":73},"source":72,"destination":69},{"type":"Connector","details":{"id":75},"source":74,"destination":69},{"type":"RelationshipConnector","details":{"slotIndex":0,"id":79},"source":43,"destination":78},{"type":"RelationshipConnector","details":{"slotIndex":1,"id":80},"source":69,"destination":78},{"type":"Connector","details":{"id":83},"source":82,"destination":43}],"width":2000,"height":1000} \ No newline at end of file diff --git a/grady/docs/Database Design/Relational Schema.erdplus b/grady/docs/Database Design/Relational Schema.erdplus deleted file mode 100644 index 7e4cb625..00000000 --- a/grady/docs/Database Design/Relational Schema.erdplus +++ /dev/null @@ -1 +0,0 @@ -{"version":2,"www":"erdplus.com","shapes":[{"type":"Table","details":{"name":"Students","x":268,"y":346,"sort":"manual","attributes":[{"names":["Name"],"order":1,"pkMember":false,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":1},{"names":["One Time Password"],"order":3,"pkMember":false,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":3},{"names":["Matrikelnummer"],"order":0,"pkMember":true,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":4}],"uniqueGroups":[],"id":1}},{"type":"Table","details":{"name":"Aufgabentyp","x":268,"y":420,"sort":"automatic","attributes":[{"names":["Musterlösung"],"order":1,"pkMember":false,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":1},{"names":["Name"],"order":2,"pkMember":false,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":2},{"names":["Korrekturvorgabe"],"order":3,"pkMember":false,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":3},{"names":["ID"],"order":4,"pkMember":true,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":4}],"uniqueGroups":[],"id":2}},{"type":"Table","details":{"name":"Aufgaben","x":484,"y":316,"sort":"manual","attributes":[{"names":["Vorkorrektur"],"order":1,"pkMember":false,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":1},{"names":["Matrikelnummer"],"order":2,"pkMember":false,"optional":false,"soloUnique":false,"fk":true,"dataType":"int","dataTypeSize":null,"references":[{"tableId":1,"attributeId":4}],"id":2},{"names":["ID"],"order":0,"pkMember":true,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":3},{"names":["Aufgabentyp"],"order":4,"pkMember":false,"optional":false,"soloUnique":false,"fk":true,"dataType":"int","dataTypeSize":null,"references":[{"tableId":2,"attributeId":4}],"id":5}],"uniqueGroups":[],"id":8}},{"type":"Table","details":{"name":"Tutor","x":921,"y":267,"sort":"automatic","attributes":[{"names":["Name"],"order":1,"pkMember":false,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":1},{"names":["Benutzername"],"order":2,"pkMember":true,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":2},{"names":["Passwort"],"order":3,"pkMember":false,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":3}],"uniqueGroups":[],"id":15}},{"type":"Table","details":{"name":"Feedback","x":697,"y":271,"sort":"manual","attributes":[{"names":["Punkte"],"order":1,"pkMember":false,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":1},{"names":["Text"],"order":2,"pkMember":false,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":2},{"names":["Tutor"],"order":4,"pkMember":false,"optional":false,"soloUnique":false,"fk":true,"dataType":"int","dataTypeSize":null,"references":[{"tableId":15,"attributeId":2}],"id":3},{"names":["Zugehörige Aufgabe"],"order":3,"pkMember":false,"optional":false,"soloUnique":false,"fk":true,"dataType":"int","dataTypeSize":null,"references":[{"tableId":8,"attributeId":3}],"id":4},{"names":["Reviewer"],"order":5,"pkMember":false,"optional":false,"soloUnique":false,"fk":true,"dataType":"int","dataTypeSize":null,"references":[{"tableId":20,"attributeId":2}],"id":5},{"names":["ID"],"order":0,"pkMember":true,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":6}],"uniqueGroups":[],"id":16}},{"type":"Table","details":{"name":"Dozent","x":921,"y":346,"sort":"automatic","attributes":[{"names":["Name"],"order":1,"pkMember":false,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":1},{"names":["Benutzername"],"order":2,"pkMember":true,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":2},{"names":["Passwort"],"order":3,"pkMember":false,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":3}],"uniqueGroups":[],"id":20}}],"connectors":[{"type":"TableConnector","details":{"fkAttributeId":2,"id":11},"source":1,"destination":8},{"type":"TableConnector","details":{"fkAttributeId":3,"id":17},"source":15,"destination":16},{"type":"TableConnector","details":{"fkAttributeId":4,"id":18},"source":8,"destination":16},{"type":"TableConnector","details":{"fkAttributeId":5,"id":19},"source":2,"destination":8},{"type":"TableConnector","details":{"fkAttributeId":5,"id":21},"source":20,"destination":16}],"width":2000,"height":1000} \ No newline at end of file diff --git a/grady/docs/Database Design/er-model.graphml b/grady/docs/Database Design/er-model.graphml deleted file mode 100644 index 53572fb5..00000000 --- a/grady/docs/Database Design/er-model.graphml +++ /dev/null @@ -1,121 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:java="http://www.yworks.com/xml/yfiles-common/1.0/java" xmlns:sys="http://www.yworks.com/xml/yfiles-common/markup/primitives/2.0" xmlns:x="http://www.yworks.com/xml/yfiles-common/markup/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd"> - <!--Created by yEd 3.16.2.1--> - <key attr.name="Description" attr.type="string" for="graph" id="d0"/> - <key for="port" id="d1" yfiles.type="portgraphics"/> - <key for="port" id="d2" yfiles.type="portgeometry"/> - <key for="port" id="d3" yfiles.type="portuserdata"/> - <key attr.name="url" attr.type="string" for="node" id="d4"/> - <key attr.name="description" attr.type="string" for="node" id="d5"/> - <key for="node" id="d6" yfiles.type="nodegraphics"/> - <key for="graphml" id="d7" yfiles.type="resources"/> - <key attr.name="url" attr.type="string" for="edge" id="d8"/> - <key attr.name="description" attr.type="string" for="edge" id="d9"/> - <key for="edge" id="d10" yfiles.type="edgegraphics"/> - <graph edgedefault="directed" id="G"> - <data key="d0"/> - <node id="n0"> - <data key="d5"/> - <data key="d6"> - <y:GenericNode configuration="com.yworks.entityRelationship.small_entity"> - <y:Geometry height="40.0" width="80.0" x="456.0" y="158.0"/> - <y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/> - <y:BorderStyle color="#000000" type="line" width="1.0"/> - <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="48.572265625" x="15.7138671875" y="10.93359375">Student<y:LabelModel> - <y:SmartNodeLabelModel distance="4.0"/> - </y:LabelModel> - <y:ModelParameter> - <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/> - </y:ModelParameter> - </y:NodeLabel> - <y:StyleProperties> - <y:Property class="java.lang.Boolean" name="y.view.ShadowNodePainter.SHADOW_PAINTING" value="true"/> - </y:StyleProperties> - </y:GenericNode> - </data> - </node> - <node id="n1"> - <data key="d5"/> - <data key="d6"> - <y:GenericNode configuration="com.yworks.entityRelationship.small_entity"> - <y:Geometry height="40.0" width="80.0" x="456.0" y="428.0"/> - <y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/> - <y:BorderStyle color="#000000" type="line" width="1.0"/> - <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="52.486328125" x="13.7568359375" y="10.93359375">Aufgabe<y:LabelModel> - <y:SmartNodeLabelModel distance="4.0"/> - </y:LabelModel> - <y:ModelParameter> - <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/> - </y:ModelParameter> - </y:NodeLabel> - <y:StyleProperties> - <y:Property class="java.lang.Boolean" name="y.view.ShadowNodePainter.SHADOW_PAINTING" value="true"/> - <y:Property class="java.lang.Boolean" name="doubleBorder" value="true"/> - </y:StyleProperties> - </y:GenericNode> - </data> - </node> - <node id="n2"> - <data key="d5"/> - <data key="d6"> - <y:GenericNode configuration="com.yworks.entityRelationship.relationship"> - <y:Geometry height="56.0" width="90.0" x="451.0" y="285.0"/> - <y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/> - <y:BorderStyle color="#000000" type="line" width="1.0"/> - <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="11" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="16.955078125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="41.5546875" x="24.22265625" y="19.5224609375">gibt ab<y:LabelModel> - <y:SmartNodeLabelModel distance="4.0"/> - </y:LabelModel> - <y:ModelParameter> - <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/> - </y:ModelParameter> - </y:NodeLabel> - <y:StyleProperties> - <y:Property class="java.lang.Boolean" name="y.view.ShadowNodePainter.SHADOW_PAINTING" value="true"/> - <y:Property class="java.lang.Boolean" name="doubleBorder" value="true"/> - </y:StyleProperties> - </y:GenericNode> - </data> - </node> - <edge id="e0" source="n0" target="n2"> - <data key="d9"/> - <data key="d10"> - <y:PolyLineEdge> - <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> - <y:LineStyle color="#000000" type="line" width="1.0"/> - <y:Arrows source="none" target="none"/> - <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="44.04296875" x="-52.021484375" y="34.427490234375"><1, *><y:LabelModel> - <y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/> - </y:LabelModel> - <y:ModelParameter> - <y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/> - </y:ModelParameter> - <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/> - </y:EdgeLabel> - <y:BendStyle smoothed="false"/> - </y:PolyLineEdge> - </data> - </edge> - <edge id="e1" source="n2" target="n1"> - <data key="d9"/> - <data key="d10"> - <y:PolyLineEdge> - <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> - <y:LineStyle color="#000000" type="line" width="1.0"/> - <y:Arrows source="none" target="none"/> - <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="42.05078125" x="-51.025390625" y="34.451416015625"><1,1><y:LabelModel> - <y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/> - </y:LabelModel> - <y:ModelParameter> - <y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/> - </y:ModelParameter> - <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/> - </y:EdgeLabel> - <y:BendStyle smoothed="false"/> - </y:PolyLineEdge> - </data> - </edge> - </graph> - <data key="d7"> - <y:Resources/> - </data> -</graphml> diff --git a/grady/docs/Database Design/erdplus-diagram-pdf-export.pdf b/grady/docs/Database Design/erdplus-diagram-pdf-export.pdf deleted file mode 100644 index 9d6e366c36954502beee2944cc3dc2a82abba52f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 193138 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�=4mx`k-D-n%ryok)jF8<`QUs&-XEBC5 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 UkOBi><>BGSrK6KnxR3k)040zqCjbBd diff --git a/grady/docs/Database Design/erdplus-er-model-export.pdf b/grady/docs/Database Design/erdplus-er-model-export.pdf deleted file mode 100644 index 3e2148b22b9eff7cae06b7837eb3e5b067c6373e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 608737 zcmeFZXH=72*EOmXl_Dr8NJkM6K}zVI8&sq#z4w6B0HK#e1VL1q^sXo%y-Baqq=WR( zJ3{CXkeah|KhO7#^Y7sM?~L&})Gz|(y7t;@&o$><>yq{P<EM}KxcP}$Tb6d0&{=z* z`diwF1(<o6Vdl2P5)#Zj%1}pZ*O$zK;4O7#o~JhUu22{7YH#KWeGIjLSwfkmq=@0J zE>JTEV$aK*n%6WRX!2f?)lkwPB%x$^ldk#3>5T;8*{h-S#i7?92U_Ugq$?NEM&uP_ zzlltJlTdZ@S@4@TsTsw^G!Y5OT^U;mcHd?{k_+(MxD?KJE1wwZX!+j{2Vddt33ns7 zR}l#Ad$_M4|F65%^m2kS^E@}R{`YSesG}=0|9|dW9SVoJxmZBq%tHTpLk{NX3ce3# z#;q1CO$BOcV<rppWH#UhZwQJCGK&a6jEKSN{(BwVzxzK?dF}$U(15x!8-R;Fe#*?F z-~cWu``=f&|Gp|P8!_|fs+rqDEnJy#u~cy2V;27RYEn|Tu>JRgac}*f5B_hsMgILM zp8qW8|9k|GhMT$TzYF~La?CtBHkM#(1cU^5nR%W;ZLD8{)k63n;6h+&E>1AqCK0>3 zxPf5E!R%o!8ct>wP-fBpd^YZ9KzMkbLqSxWT;0s<nRzr+%;0v+e7FFBh{)Qw!ohdt zU=B_&NAR=6BLCkBus$`@2h~bpKR>!ErlkXaqTWKnUHj=F+x`22notV44+*!3A|ra^ zv+g<1-)T#)2^fp|WlkXQP#0>KJJobcnl8g1Z!uUv@v{)|pD#Bewf|Ymef{<x;k~yH z_Ri{mGK_d&##h$isWU4Qedwx2w*x(&GtZ5(5fmF*11)`e6-jXI2D8koOPBHf_ly4x z!vAK%|DJ;XJq7=J3jY6a3Y4kFj*e%Vnwsj@VA%7s;H%g$M#*C=**R;o>E&RJCt7p$ z0<)O%_2fxM(f@gkGmUPHePmFrn=fXY_t-~;^g7)KI)gzTG;<ln2km>m26|r9d4&Ft zj|`oO=|s6h2n+gkI~k)y{IwDm`LH~jOJk&(vD{e;s|dXQ>i*Iq`%~+};Q#5C*pvBh z@|M*39I^$j^?#Nl$`W&5A0rKP?{TG+z4gtB@R4iE-0~eBZ-xIM2WYG%wx6l@JKUTK zd8g<(^y`bfwb)xbGCJyk#vtML	v?(x(Wn<;BQQr|6Tt?_T?LwlUKn{l24driHN9 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%0Ahmq8`7TBQ z-MKA}zzMwR)sQ~bab2LQ8Kca$AgC<Zgt4;yD~nVK$0MQ-+9?$%>JP4~084IYlk+hQ za@J<(ci9v$M1^!;kT}nSS9M#62HJD?C4LZGY=P3Qn1ql0!9*IPQz@d=vi;sk54X&x z4*BgR3{7;2sa0uCOOxw6>T-I?AT0T%%s)Fa61piEs}m=7gz5IwFnVi>mB``8Jd_NN zk427I6yUB<;T*(%n_&$w$I|2r9PCcy%<Pw|n8Q;hgoIlhOKBI2VsyMWq!@^_H92{) zaZa`!_4Nq$934wJtSohgW)W*bh+RN4R>iu2K2L21zCff%JUqIQfL2MNJKdveCH~bi zW1y`hi55>Wo(T;N76ne;)CALTA{`do5-rE({F%Yo&~b-}`I^l>&)ExM1{NJnP$8tH zE)KstL7jSWjyVw30x~^bKD~CD@*`z!xPBPl3xgHVdA7sc%{~%thoY_pVi+~En?CwX z8oWmtR61Bq`QrJ7P(gs}Ic`a5U79s7ZGM~!Vi!PMrRD{~O?bZIp#^&aKz84k9j6Pb z1gLr(ns(3=m!d+5o6ppaU98(aCARIcv0M}vIMjHEhlu!k(8=c>e*b_E`rd;fdJU1h zkXA}mN1`kp3^T#bPpyzwy$`UOy_EPv7})J_K||ReW2w?kv8QWzfFDorFnaL!_gV=Y z-9}0Tlt|JZ2hw{7kZAX?>kswWP!ZdBpp2f1&--boG7#UfN`4S*{1S_<<k^Z8-SOet zP{orcWjCgGs%QNVDa3%1sO6Fq>yT|0hR?5Ew_l_aG*854>;vVk{t<{B-ijrPbp_F9 zk@Vo?-xD^u5Q1O`kRU$lZ3L1?r?N)-CfP(9bquQJYZcznQ#bo70$2;<JMnCocvI!g z#-Jr7PMZFFB?cI|?Fv!u7nIC_aC5L0C;CCSb9F-P5Ed};b3+i`u9x=^RSZr+W^2E5 zg4S?I&R52*z1XtKebukWeC@TJ3`+hOwaU81Toq;%=sEidbu?DrYZ%D~6+fVkAdcMN z`+(IRN&)Ge1>VxP>;)qf&6B+6L)Sz4+XRx{s4~Z^CIN11gT7XWg0>YLx)T#e{9776 z!Nn^k^v%9@e&X3di)?E=(a*@lXW8wyq;uZCp382&xa1_c_pRgC(Wh@jPmq#H9yqc6 z^-1)wNIh{Ah}7M(fmY^zCgS6Ewcau*)JoPJyl_264riycvDouYFAUy;=nk(*V5_@E z%5BaM=h}+vdOn{nhL4vVC5ZV}(3iyDQoX<h1^VV0S#hdog9EV-P9P%rLM#m`t7cje zLS+r!D$Ut`lymEC@fI<|p{i~5#)>^u<52yyb7aB#u+V{nXrTxb_^z_i2!jK)%Aqli zL{aYPx3`%>^G|GTocViGU4Q@&U^K)7`KTm}<UE_ChiLN4%by6*+{}QPZz0rfoX@mv z2@F={1MazRBt~i4h4l~Wig$V3W0X0=Pgi-j>O2p6MDO(+>as^IpXZH?8XWNbG-<WZ z%jA`^y2uw9fF4B~#nfk`*c_N%dxgj}A$c;wlHYD0Egd=RGae5P9-#tXxA{51SH1bv zr1bHzavD%0<afJ-ibRh!XL};>mXPj~f`s8#^=~;yde(5ZPN05!7eax9<ig>R2@kKY zfuOi>Ykh61g{=L?m?RfLh9-@^%Zs74Bc801TPi69T{z{$yuYy+zMPE;9jWK*p)9^y z<9BRI;u{<f9FG(;8GIquU1>_OFb}h|Wpp~*2!Gjt0php9*ZuAcCE<JjU>T93hZrKU z-!TZf`-36LsQAtu2}8qeauSB7w1kjb%0#t-k(<0l!w#;|F1n{H%|hFrbxcMZZf?gX zkw=dT^{7SW6;FQ*ud_z~Y!=wEUT|96UzYd|ul8(U0;wOZwh{><Rh_VyXHs2+=U_v( z*9v?u9Nq|_;G5`RDWaC`AwL)&*h|ZhI-NXr-x?P*IHi9S<E-7AjXZ+mLe?nSLhukr zTyCpv-ZdkCWi0>v!L!dr)1Q8U5uuDGs=(Yy>xX^NE6qEEh{K-;Q1lULSD#CSFV6S% zMjrj%P80rU5hp9b7`)_&f=yR}PSX9nM%#NWfX<Gvnid1S^_ZQhs1}6<ktTxhTyOe` zKg<2?0|#hkIS|7bk$r;*BM$>JlukOvNRTs=hmM-HEttcekBolWk`&Zu&#F}95|91d zF88AitKR}J#~8N?Zky&6a5I%(B%g>tr&h~4-%YN^n{Nci`KZ8?#z>kl`<~+2>m4P6 zTtBr}%AB?2+AE+?aqeJl9`?=#{exdgSQTFGoB7TU48Ba?b((To?dIdF=fxdo5$Ph2 zR*;$&C6!xuR5BsPO@H{MJRq?o(m<|*kM{FGlQJ1jpkG8vy5!an+hY!U{j6rpuVaC; zDIN6YrjH%XR+0j?4=j&n$0-9IT%7BH=rnaMxAj8>h`Y8!itDZ|JUN7t52?l-0~b&Y zB2@(5tysN*uX$+g!ka7TL{DIEqCBx-xf?iCAf*BJBH5{ObUHVl@x7=f1Cv7?>>6h@ z3y`Ou<13b4R3Rmx!EL-&YG=kB>7?N@spx0l7hq*hk~wASS#j3C8(DHx<)hpH^BYYy z^e*(V^Ik*Ma<PsH!WzoqOd^pM%)Ho{%aDIW(ua<49Gk#*|Jd@RI+*NLYu9PGU+SyS zu4`?Iu%hOrFZHpMyR?($c+X~N)}H_FJS1aZOF;j=dnlrGk<<lBE}_C*d-06Tu6*H! z7Xh>z-mk4>H)iHzfszT;Y1>o2>^R78m1DXhm6ZhkJp&WU)^zn&){3+rzTcYp^KA9Y zNiR}3ZkPaoQcW+08h^Usv-aU203=2$?I6Ow<80|E+QS_MtC?!O-eT`ku_64GHOFU7 zD5F@&T;*g%xVjy$%5lIF4SwiE2>@>RzrP!AN^?+ZAy~T*Qweyqje(@$<blQCw@QLz zT$X$4XLl=g)ns{b?<S71;6=4ap@`N~uGTFeJ7yHi8D@H68igAi6olB)YFlt6bDCP5 zc8v?z*Yrle9aJ8-!))_zoa1|gkJSYmIhZT#`+@C6u4@PRICa^)5f`b#w~!Z-Z|EH< zLa2M6yIdrwlR>@Z><m3A&7PDC^OOWB78d8i2HR6Ygr^u2jLZpV1?~^ej#<wS&$+ia zCeAQ|dCd=8WJc72aUF+SfSZZz-=jCBa-L7|-uvZXDG)TZlCk%uo;JbeA^iFcOijh? zUR3*OUdc+8SUo@Z0Fi~d9)ZN^47+?aXipejR=*JoTvHHOJKE>jM<nXHqn7^u6z1H} z5xrh^md#ss0ed2(&oYPSS#Qy7e1lx6R_mXu;U~zXKAJ6i5>a6bQon7@M-tVo2SPb} zt6R$gy5aYfUxBn|&UcACY#gN#S4u3UzSi!_cwE61kun5TnVEX@CXyaKlPB%bt1A$O zm4N`+z+0dqvsx-nW8;|d@>5n#*Q3Vv2ywglifHZx*PzcRSk0fz*V7NV9;YALZm`*2 z+p!pTwo<vf7V1Ut>;{8Jt#}x)IMfo=(mVRo5RVc*+Mr=d89cag!!#WE8OvE96;!}| zOou@!lJ{+g%BkYn|B?09VNq`1`>>3l11KE_k?vMdkREA4y1PSKx?vP0loq7ByOBnb z?(UNAlCIw~Go0_?^S=LiT@L%%d+oLFRrlJPfW{oaS(}kByqCjF!^#xU)`YggPX5Kg z1r{m1+^5R7_8=GH%hbJ8w{t$I^xND!43SSnB1E3#dB`3{F_zT|Lc!o=*JR!9jYofZ zg%!f!tS^F6>3?2uUv(+Dp1rt2pjbLXA3l?xglnPpPo%8T9gw{}287^ev=P-I;U9Z< z0cQ2tt@eRL?|rda*>1BqZ}13*^F@Joc9A(qs`6<Awcp-|Auq9V9>vk^ywaOO;|J92 zRQ1}82*VyBkiH5zs>*w@rnW4lV=(bXr?fsLb0{$mr@)n6al@=uv+x_P85HJXE<+Lp zs;e0Kdotd`CkDlz2j~n*wY9%TjG;3*X8!;?0<>W8-mK-VKE^b*b5?nwIQjTJae4=C zz17Is=!wzJ2hRdO3utbHk;TWR^Cc8+f1AYF#>qXRFYp1ury}I6bR1FBc>WhgK628q zr9yqs0h*KSblHjK%}mdm;?7b9&nd>8Z^r{~7i0@_UZHb}B!@QD+&ASo;UlE7Jl=vj ze!?la<zYmkoagb086E;PK4nte;m5G`l2e1M>T?23o}+L|Dm#!40NLYQ0fpr^5)?#a zFNRW^HaxQ)5t`{p6juG<@3?ho)qFIuTy4McuD#DvgvWi5H57vc225HA@0WPK0iufG zpvRcfo6C*U^}~Zs)M8ELO@RP(5kA`xwyLwSPgn=uRz>LRDkw~!H)N!}>#Gk3=H`(H zy*y$M8o`#E#2g&DIf*NcbA~7$K$61UB+0C@6#pG|F@1kA-~diL0#OKCSv1nWvwG{} zuGGanoj|iAy*;6q1y6cHW6f4koilj}C1bAi`!wG=y_4cmOj?kp<sv5n;iEHK2(nYO z-3$+GKgKt0`HYbI4@NAGOFF;!E;TzzJ;oLD69w2#0?wZpw5o3|Wg_QY@3x1x(<x?G zQc}rf7_nPDfQwz8Uq3>P+mJV42<Evkxv$Oilqv8lLSV)60DB_7F+rD-&uFoqh6%2- z79b|UOD?2K-ISbNudO9D-TfP{oEcB`q&Xn_T-qvXj+_ezCsH*X!HN(j;=BPPMC$H4 zGSAXdOZX7z{db;70|XkV(eKqJy_s`xi#lY#F`!5VAkO?~`tv8!I^m}G(5OUvyQFCD zq59E%90o-B8p?=*W4B?@p$-*^)NWZptXz%2|M<9pao@X-hqpN=^g_+X;knGAA%|NJ z>u#a;CH5}1?Q6a5>!Hs-wyG1|wdo@$5ns<10@f!bUJ<~^6CjOPayEp#bhVDN!}tR= zYmbu-fxVaPZ=dq=3*&lrE>d-CwJu6fAsP@jaI-iEe(}=?P_EgKMVxN}6fjoDyQ!ZU zzAe@i+z82!pjr~!+G;4i*o0cCmsOr!G^T5oTAUIh$s#{-1{|xC@32r{Km7^bt*b%= z4Zb&9q#)C5&MfU1y^cDF2odxmAmui1gNXXKHNGANMEH;L#W0+-kZ`(&KL#m-hhg5- zi7(TA&CR^_ueS@aRq)A*?qHaTp-I$QSvsY$fuF(_(3H$8j-)g4vCSKx*5TRrvOaSN z^CffC0zYUL%sgRt8b0k^NIEsKCe2TOYmnIiPR5e&_U}QL{fE0z>qG*GG;dQbq};hX zprf11Rfp&J@U3=I^%Nt?I<~D`a^+FKXf?5P()84lp1#p-PCElQGThoFMpaG4`%W>D zPS{h3+^wD@x%J75m7z<qDe3oNU?eV-Q98DEl8u%1tGpTJ_)^4H0rZA9T^)fm?kJzZ zm@!X2Qp0QD#lm_Wh4SuM&%IYT4~>MShcRRiAWbGv#~ITl4iwWq(s_&x&ifJYq6y>( zbal;lt=KqvHFENp`&O_r$@(`pa^5BmS)bVw6NokUn%wO_qzg5<LSgQ7*NooMyx8iO zbY!^dBj<yuUB1S|=U8dRN~*2jAB20TuouQU*&2+dkO{tirFG{Hs0u`C$?QeVA9v)l zCv^0bCElIVTGditLR55ojG^N$&w^2u%~6~)EBPKxAm|r3(6z+ax$T<@NyTJJ$C#}k zl|LPv;8&~wW@Il2n$iK7VP7YKb{lHJ$r=~H1>83pu_PYp@CK@EA@V_9t`iGaS=`zz zj-*wtCQGfBaRWs<l&A`_n9$lW7+lCiiOt>~8tk=jMLekybO-eky4%uhB&vuTU0zbz zhxq%dG0L39<DHM8H9el6IZlg6<|=*#DKOlJ;~ew=RI)%$MpiRbxuE81qks^mT*kct z3fv)H>{Lc^qBvg0;{AF5r!8Z$+ZImcFW3=&cT+mVNUm3wS(&Q8Z(@tK?J0s*l8ZGz zO<^B#WMqTiZW-t^1Y&vE+q?4l0Psp2We6p%5mS!FT6;Fl$i^jGq9?DH+l>73&Fwjs zNjB{MbBQ;)R3==MClgzMZL6VobUnnijNwL6J-ZI-AVW;M6ck3m%~hfl(}YEb3Gk+< z;o{6zAy3S;j6z#hxhc-ju&xwudI!y{r^{O2aov}*C>Wv%7epLqV`QF3Cmj(Hcv2=P zt&7G!Xa69E%|%JQZ?Z}=xDL7*i_7JtyN?`CU^eZ#l{;<7MlxIadmZQB350{fyttp2 z7%BVkVn#mI@_?HYy@;lde3jjkc>IS2Bb);fk3kq{@H6dq90@Hr!XOa4B|(0}_qRt2 zi;reud4C``@lzC$GbKh=5jfD4I>Zfl37z9BH<6uw;86-`QisxLV(5m~ZoyoK1eTC# z1i;ZVgf0n;*y(WAzZg-*iNw4`dhz)y+{{&4oF~ZTrXol0BOvar<khbj<)+-$QlC~2 z(VcK|YdnoX<Z$F9eZ*(F-b`!_lKaJHe8x+HALMcB{?i{5F#!%|Aj9`@HBd_|Tb21) z0KqS3`Rct3%38vB5mIbHF?h#KSE8gtPQql}L5JAdaVo5U(aUSIvo`^FG{_H5Z=Sk8 zpsIewT3mV2{q<?*s+-1Bwy@hgG(B_ZJg11ABx~7=M0(5i+tQ6Cp1*8wz20fPnu*<? z#b2NZ5>6*nb&C0H$YF!x*zzk<?jHjKgYCD4*;J7B^k<3QcABUk`*H&mzaPS<af~W* zF4-;WVf5Ok7Hfiwv7_TX6u&lDHzLg)X8#vO6>ejmGZ41563gnMft2DK8Kpil9z?fE zu_n1w!}#0ZZh4^9YR2iEg*RR@XfG@U%}-^g0;smT;+cc$ZnuFM>rI2fQ8bg*dH@DK z=_>?@t5`jmL+dcFxgcSyyxP4T1IZM2cAxWA*}~!#(=I9)r3Ju?17w|>vFX+1-xM24 z-Y-JF;@=996^mQmfb&lp8Zu7h2{sYsd_H7mMWDIoHT?Ka9JIrWp7)T_nl>99(>_oY z_FJ;|MjE#c{6f^}3_)6&CMQ2z(xjelGP8>{aYK(f(Cu`8c$v?cuLe?@BEJ3zWKlMd zqQun49%299DZn&}s1*(2`N^O;yfvW%?zfbhcZi7K2cYH^ZShXi#Kg4qGaxwSX_KTh zM2xY5GU|0z6;n-zPiXOHefsV154549%D#`-5dR&Izh=1N2+{M1D61FSfsNvJvmR%c z^dnSjSM7}v0!bm#J-L<+YnFUn*u>v(<;TB2NK?nZ?XPaq2a4=-pFC$B)2|w@qMJ#? zkHN3#`pZw2%BR^_NzDr!3z_W@p<_i;F53+)$KvJMm6#uWNG&0=Vn??8C*yx-GJi>N z#ydWm(GV-~d!i87f_PlS;ih0Enf)bQ5#LM;6AXDd$hm#3|IbaJzXMTX9Jy)wGnOFd z_w+=Q+8;l|4vr3Z`oJhUQ{8#$ysNq+n$S}+20TtB*XTGOIBi-8q(Z9bbnOuSJ%rHz zY5Yx*|LU&hQ<6bJ*+(7k=sl!_Q9s{yVp*e2_ddQy!aoi0JXg#znJ-YHEV(`2>`<zP zY+IH$KC*)cz~C&%68d3?gzI%fjR9z&P@ntpr+4puFlluA9w8Lw73E&+YV(UBw*eK9 zNbn;qc1QVSr^TPx)w^#2<Gp3DfcFWe@K{RFRzT2MCxk&5>sBF0vcPnnN-bW+LrI6< z%htkFQW=GZXG+*xyXsJ!C<0aaBFT+HPa`>FHGWzZmSTHZPlI}^_~iYk)w;&CQAx9n z<xOp0R2+Rb-kW?R`4ZcATj7l-kZ7NCXXa)IwXLB8fRhk;)F~+@?4kpRBMCdx!LWUS z>Y+_X1z}um;nJoG{~`|ucd%d&qFTQp>3%Jn2b)g@3K+9vt_FjR<{K$k2?MDN)N>)D z{hha~{b!H~7xgWTLSepA_KK1t?(&afReOc;_tcK}+^8t_@8aVyB1s+~tb;8inJW4) zH@x5vsR+g+z0$v8dhq&$4(DuD^<RFfx*X~ZxF0~zZ2RRa#*9ftY{~UKKmQ-=p(6_r z1g{|u+29cKYiQ$NH9Hx=<&<uYvQ)w{8}}NvP3wo@f>JiVBit12eQFw%y=1m;I?C%) z55`!3{MG3(xAX56?Ox${?xipLQZ#@Rp%64IQoECTdf`$X_p8Z1RmyiwhP-XpHUmK7 zbH75rEnIWaK~lRn?@Z25M^>M(SXR=%OE-KbmxUdK>13PyBRj+u!2?Nz_?G!Cg=i8+ zU3&$%drG|l|DXgeQCdr#b}l5D8(ESp!Gjkx=XIeqmJVhI=*l8~?AsxZkGs^{`=pw+ zpWhtQzl581un)k{Oj?x}9KE^$H)W@wf|&`_lIqBv+hElOop_&HB9Rfw#*VuH$Gf*) zKNHK0DFa?NANAS^9rO(jlVdV<VPGN-@SfznuQzRP^6+2%qVrfgY+EHgSe2o=-T@XG z21kh@Tz@b8>>e?{Leg?No^Me9lPvqP&_05}tM`pgv`2{39SWJQ;>hWv^)hr6#7RaH zQN((NmOtx#p80f>FnlwJtn^<jk>0-W{uaaFb-2uHdE!s!=ix*;Ff6A!?eyR_>j^yS z&Gm#-j>UVdWGTI=A}X*ZFbF8^L55}{hU`wNU9u}iF)K2I;U|j~6@UUpKgqAO4?OJz zQx~p9hAEIs5xJG7nx<{4gYQqJtWm#u)p42E7mb6ElE5!^_?(n?-hRihS;*WHSm(}# zrAA({U<t;>ka=A=W~B<p5QzMF(;^!tOSkBxqqXYL76$iAApamYuz9zXEM+#GJ^RW! z`Hv11o`1k_G}g25bYU@r2O~{&5WdKmCtepv71q(eYaX;MYo+%No|5-5*r(kf+`6XJ zru!S+k@|UW1`Slho+2foGEYpKzG7~4vs^_>dg%iYJb@{VGxo=JKHZu*jba)|Ijd>I zy?SSC{pLmFj_hwMQ5sky3}B$PaMX@Ai$#s`%x$_0b*RaZzu}L&^xL9r9w}bLMiwyO z!#!48mE@y`6KnmO2`t%iJO5EcwB%H>ZPXBqbYF;3@=3hVLU_Nj@z=cG$Z^bU-)0aC z|L5J97>*h1>#UMyX)1U4SIa;)2_YCgmlY2OQY>lG_Lq_$I@3sE(k>2Ik^nIm{5Lcx z;VEC*=||_&!<#=yQs~t-0m*p|yItO~=KGhHbhN_2uORQBRisHHS<s2a##K*#s{LRi z@5xWE<auV2w&vq0cHQF<Es);`{X6F@m|dx`SmvbCA>{ucFs60_z?h$A1n_P%EPA#* z_v*EN%`Q5p=c0UxZ!spkZBldo%CQrL)Q)2XBDzJAHK5-vOIm?+dXD);=r;CV7%cHn z)WHu=JA^RGD#O8(5zpmHw=YTP{C-8Ma4C0*OC1w~3_~uT%8LxE>7=(#EsN7S3cnE7 zY0MKtG0ud8Xo`?|JUFzn=|N6lm?Pryx%+q6v9Z&VBq>}`JJIT{HM!Wu)dkIzD}&J) z2?90;QjOSiK6$L@HXlIVzp7<T7!6;;rYI!Wyw^?)m!Tlq*N&WEVC2@zS9aMP0HKq4 z3KlpnWCmN?<kNCh!u4EEUC)Y>=i9*>2MOc18wl>ak0J>53>`M9h9#xla5fMl`fw#_ z4ZU;CdW3tNQXz{YB9f8Q+aB|dJFAp!Vd{qVz%>fsY5~3GXNO;5-~DkDh%TH!`3(;S zFekMzfKe%pQi5OkkZb@|26Sq|rNy<F0^xCjU$Hf<3m;VF_(@^Dnj8A&<C6>8#E9?V z+fm#404rK5R-_{G<4vV-XTaX)DD6aZHtOFd)+T9aNq2mYt_{ldK#xEcGx9fFH6TMS zU5yDOm{bctE5R9N$sj1Nkpu9eLeIp%jlEiU{!c>%JJk+kl4n{3vgnbO@XRKG)a4G8 z5VPVyN~py;71q}UBM|@0i(xxn-Cg9J`9S;zVJr6}=D%HvwuU={viLT<0!1P4H06r- z8-MNn|4CF9(_)?dGFoZcIJ@}Km->=N;g)U^&_ulCDOiUdELV!<@5X+Q9uFx4d1DGN z7HqI|0r9t7(nz?+@r<EA8Zf7Sy;6l~dn9f*s|xhyOz|s?4a#{v3F^0CpoPmZ?xJ<M z!3CD*4pjPT4iEdH@y#x$i`eIu1na$XCafgj#})vJS+uX6bNbA#OwU%fC6XPG@o-=% z>z!a&JgAawtpqP}B!6wP0ye8p;I%{cSA4SD8u3?1-sR)g@G;PH<IgDgubbTAnV|3S zuuRYeqdbB%gbS+j+#rnE-PQHjAi(W-^KT0_BlvG$J+rq@$x=mAGMeEB9`fX1#38TZ z8yiZM8Oeq_Q4oEorjf&1<u3*`1U2^_2o2EdBpqf~wk8x4v>hs?4nsr|z|$T`0)%V| zBe*CT$WdN@Ok>!#bv=XE<QV7$;3^A&JcnjqPPBxhf#h2rfJa_KP!N&B#j4Ak38`<I zP?g+6;PjB|>aAZ1_IT*tY}f~#C6)erNyIQd;PhxQ=a7fWIp@o9AlKoUjq})w?xf<1 zPj1%dKQ@Mo1`j8@OU#e9aej48F1?_jpiI^MD8sJkIrqb$WtGfxkz5%T*L19hn}`#$ z7YSsEx6~9~>-DQP`*l*zXEwo0Wc7am%7WMR{sQe&V_4|610J3^@mSGxJ3wzh|Ni^0 zf2jXM>CTwe$-#e{lKHHECm@M4z!8HJ{i}N1nZ$N^Q*jT;TPHBGBqHB~D+9QUc-boh z{{YKuY6DdO`#SPbAP}RX;^<ff8#i2W@D~k>%J9_G=*r?w`UZS33Ouz}G5ft1NMs~( zpKNVXI?TcOvO1x>8$Cl8s(JD(=CD>!UybDBE5S|=uA7xE=hJ(XgO$>?E?af+GVvNX zS$I~98ysYhP!au9a=6asoYX*5lLisMh?mnrI1SqHeDX3E1quugd_IEMdCEI~Dr~j$ zOpfw~c1lwevZOz7n@V*WPU1s|&Q{WAO0m{SORq55SCL=30gU_>kx<Zaq^K6q+fL(# z4FojunR4j1H(u3r4x~tEn(9jSKGk8)IOpO1-Y$MWE*EAmDR3p+o^vUfyoVaKKOpZB zO-4iH7J40k+=3N;ObG*QPLNNaeWjJ!(<)tEO?`}D8(K<X{5fZh-WSKr(t-40i_)2} z9%R6<=A-Z3<8WVbi?cf;-sEp50Q;&XzrPq@s6N!@sWVphe{RMDj5q%YV!?R$(qmE6 zT+GiP;l80=s+{RN%jAf*c-QB83~)L_vTu|9#@lbhM%FvkINB}ZfVd!f>K9?CXUorF z!~v*CKAIoISM$;@E$v-~B&a~J-Q)h;>FB0%u1Y3rSmo@ucyc8z$s@b!7`MgGPhg5f zL2zor*c+u^ICO@EDHa<HF-9OpRcpm!t%_0<rskO@kfY+Bkn(MxOEAkgw#zbogO9{? zwdyjtmWV`{C}Z;Q>I}*+-^NW3&x+kc;sAZtRd(urza(Gb6Qe@~R1TRDIN|}r5uLx> zHXm7&Mg4w*$%XL#21jj2xbsQng4<{JU2+OeeA&5(*~hpe=-jHQ!rIb4|AE8m3uxEM z3X4KDZBwzxJt&|mZoM5>4l8e~Vx50w=UZ7Si|GmQP(Qeboyx8PJyYA+Va}mU{ylGg zc#drxc_Nk@@=q9!p}!;y{3r;X@m*&fpa!v6;eq${($~RCOz@1wG;!Zixl$a()P+zJ z775ObtZzGEy^15va$#>cBS_iVyn;yN_|fTBT}q2K7k9B=o>3mj14}q1Q7)(H&%1z= zS#+hz@0I|V3MISF<!sss0{IK<sAP2JK#YJ{I$*Ifgxe7p+`wX8cy|oy1*+%ds&{yR zw(L5RH{W0+F<;f>X}p%z9duvk7lU@lmN;r9hvUlCo53emItGfZMrp|q=vwHS2c-zw zab%BjI4^9h@#z+V(l3^ZheXGb$KB&ioHA6U{WsKbgI+A|Q>&=TW6xVT^MjvXiWTgu zne4UMgkSw#hiF`b%sQm0vO&T@;x9jTYSZz#NAnUXY^|h0)j%mj8F?$eEuc4BJQ)v; zwpc3A@&sHW*9m~-x2cvs10H8ChS90)lIq+nP1AZ%LK9X&G^xU=n*ms^v%<kDkeyjz z8|KaY2s`*jxiTdWw~N};bn_+3)Dh`rpZmbw5nD;!dEL*qAzTqOAPW3!D}D$0oiJGL z>JuJibPp>o2@b!kFMYIj(!0p%Ds=_XrlWm=Z4$+dZJ80ne69^1CKR}b>#Gd#!W0i( zTh1^(IWiAgBgbR^7sxne{$uB;*(Bm1;lPJYS;gC0f3OtX11xmssDYlLlrBTEIiWy2 zP&~Gpx0D`MsR9>41}BJurVG%in|YtS;|5`%=JVP*aaOVQCh`~err5QQ@*_nIPz-E~ z_)l*VI7@YI4+FO*&98vRIg{U(X=k@LadKHPz{~gKzzdaxD=z|zsYAhVvAtqIBt~TG zfW(NA{?c~2&nIA09Vta*oc+1Zy7*&hl##WFQA--$C{J#w@Y7b~hgmd#`2b)EbPw(K zOzbFqTRw!ZE-fsI3docV!H9QWE&wtmq_u=q8-fVZgj0tCu((HwNlloYO{0{sZB1W^ z@b={m>N#(|Pkb0#&GCyKX32q7{+@{m8tg<D`2}C43_9R$^3XW{g6F+h!!E4|v&ng= z&*Q;i+x!czpY3!_fTPd#pd}F^&^2p`nK-`q`MELNqwrPJo8F2S;aNp#73RZw#{((^ z!wX){%Q<ON#99ndLY6q$&v>Y7fU%@KlizaMiNnTfdnlf6|2DGHO*y1Q=9+3?|GgLz z3|ga69@NJ!&~xePJ?o|ltE8F_hb6^?wJu@BE-l7rgIxS<N*?M4n*c23DI{~NBtgH@ zRtqFQafufm&LoV(X%T$;vkOqMW7uHXC^(;1NJm|%LcvFJ06X;u9W2W|-2rfx#<p|@ zzA5EEB7wbJ5b<YhQGL%_jb4@>=##cc&6zC8QD4*s>6SM~WWvEEkl~AW!B31(QYlFN zUyvYuM*)Dy_@u778i;Ewv{{q><fD!Q*l{K8+y11sGiUj_3(zu*;O{Pykz%>>AxhJ) zElUwGZkf-55c*4iEIDex*S#1DEU^LZ@f@J9YRP`NP)-)H2XTt}iP+#$u!|RZF;?%E z0<$tqGwF+Flvc_jHJr|!EZG-pMJ(`qBxduMPQ<kwrpS{JA3{)%yR1x?O(IZhx2VrX zF^(cAe$GS969<-mXWi(*=&S`(3X?4nw>G7B$r?xhY%Z&e^giOYgJFgcbAQUH7UA*a zZ(%+>U?WLU;Zd&FkrrUA0>trC#(#l0#r;HdaVZ$zZWmS96&V8?Nhc=fpr;VIlA{{Z z(U6V1vIHjyU>N|77K&yKWSIL90BBw4;hD2b+8;obeYUw%?k@=GApjV80az?@$IHak zU9dG?-S0?YyQkcgTl7%Z_!yH1o*4VZ(zI+m($`zL9Qx=)E&T`>3jsc=4KVQWi%eO| z_xUJ@ai$(Adc4_a=M9@wZCm(9-FvyA%DR{hom-?%OE5pzSJP+pyRsnHRFv?GX~VEl zs`&y4j4xzo11qt2Or6WsG{eSO-ld>*RsjT6>?(3(XB?B02qbuk61U(c{TK5yOY;MY zFm%xRvk>9QU>_XNW(46<gV*8T>k-Le#`s9vSHQuE0f!~|MNKQhaBFn`H%C{uGmwET zb6g7}0xUk3HPrX)%<o$-8uc%J9DvCWI8tzw0UkZzFO~^1|5QN0D&i-?hD&j<+tj(8 z0lS!O(JV0Q+q+0M#_+%ie_0h^`++uSf_aRQz_(Y6DWsoYkRp9TR@vos)b?W20s@_E z>xJw<DL}nDMEoy#(wA5}0gbE-%4qjtls=H<f8a7+Z?zcm6$UQ0=(eCR$}(@t>BZ1d zs^o8oc(&;CenXF=q%zxh<a<Dg&ZEI$f_@Rxg0M9ehW!Sb=+_52bZRd<9>St^@@e3v z52X%1%L~rM1=3IDq)5xiPb$e0!g<eOF>I&u^H6*{ZU6^>VaUY8r@3LnB)-QZQ_SG^ z%4<`bP9!BKgt<+?Y#f4a(&jRo=0{G>7DRrCQxu3pM4`sp;<QU+J+QhM<0!kF;{gCr zZoptSVqw!9u)%`m@zxbHUV7z=lM%*DJO_8c%U|=mm#@$t<n)>neFR$OGvO(A?x?Zg zU5ykI{*UrZA*sR!oD@P!RTOyXhCa#VEuWtcKPSL@WHb4ER9~1b6z+ur)Pw67uAzT2 zOi(yKd4WMbKEFW3n88LTBh}RatLG(?ma3p?Pcs1Kx|AZ<Px$PTjNafwbH(MBd>N(p zZTNw<d-;*YP(=Hp`R7Ys+y^Nu-pyD*=C=ZdBpti4FdP{vEF`m7eGgbGHf&14$4{$; zfnx!wSj;k1h>SX|CXE34fVUw=@B|7pc0~1xkMO*Hr%|T`HqbK4=#HSLqSr+HX0__s zlZ%`WXn+c>;!qs)C5Q1+0sev#mzzs=z4ldm+D;yEfF;}(C!_M|jpd67jG~b0fhm1_ z*pOq76XT=YPXYE<MMHMwd886Gu=i2mu=8dbMd4~X*o>47={PebIWBcW4oh-tJ_I2G zV1GxQgBy>vF@m>$*~7}vDd!1cJe@~bnmRE2&^0f#=En#8p?ALEuo~eOHI7D^v)6@H zCEoe0&JT!MuPPlij_BY`Eie+qj|+Q38cA5U$Io_lP#`+I#O6E)E1TmN6;F;RG6TC0 z%xY4YR*|<F6E>^mMcQzMjK{BY#2FP_ZHj4NuKGRD%Z}u3e=ke%a3r97ca5V~x?H>v z-v!VPInVR1H-=Syu7yU6`eWsAhy;%O4k`2O-_*)4>MUHHWWVrh{paRL&1o9Zj1Rcr z#aH&Y+_AV4-`5BPfLxF$in%7H_P5$o7zaF1MQPcb;R#>@Bz+~8p;Q~RCjtP5WIJ>N z4g4|pwO_?#mkW*~I5N=K*tKu>BXHGYv7!UnuYm|G363HHa1^<={H$7`0-#7uBsfg< zezR7!-IyT&YWDo!zvs$Eo<A%g^>iK1ho_(+P2~{r{uR;2@~mbD!Z3hF3M4zmJWXg% zj5*woAz$oXDpd#t0-&9RL!scf=kK=c#7poEJKL<zc9UZDJR}ZF`33a^JRw3(1zb52 zAD1e%6mN7%;p5YY5_^(R!+Nq0*pjQ6r_ScP9|8SVq!ihC<R>W^cJUOZQG+32hq=Q7 z{ztF+fa{`(zFES#hoRX2Jo+=8?H2cd$P<Wfyb-~*F6W|W+~(yREuH3k1TfU#o~ZwI z73Ov+-EY^vD>66l0{do(9b3S2lzVN{_Twltt)8m`81<h>#EosC*#5R5=HjO7LNS<! zy1ZLnU}WKB{R{bK?P(ZE2VJc8so5vsIRCNWHNsAHekXmMTr#$)T9^Ai;QgnGWoL8l zidbn&{)9DR9dlH*UD02{GAHCnl$&YcEO2NC>diUT-ga)8l->-_xVc1K=y^|pOymuM zz~j6J^JjqBUue#k0kiLaChD(q6j5Dm`hBIw)A*0Nr^L<3=yJ8A386VzLL6~@kEMCn z`ch#lfVxq<B_GTDp6=FmV06v=dH~l;a5uV$MHF#j>*8rT{sHJZrR4J-)&(i(Cr<X% zG#6{*1d!3Mpj6w=t9dE#6(ivKk*sgFrp2~<*-YJET)Ss|p2G*C5hrGv-t2MTw{M>0 zwx&{oRCu{lB<k<$1o@75QQRIS1-+x2N2h!_Zx2}u!Z(;Hd?2>SoTN{~<~U$68HUVI zu2q06;5hOM<4^>eOZOxQI9y;ZLq?;5JB9+gA0xj94NUW|3~I<$BwN?X3pE+A;gH(p zjNuUQeqKT><R9eO)0^rSx}WNzyKJ5%mjUMtiettNc+DsHT=tpn+Q}NK?+iVjlHeo| zeFle-4ovXO{j88(ZnZU8uu$3MyfU$>&0?x?4hwi*nQd363~3UnA_@nJCIwwM51a@P z;8IKv@o5hta*y8&ZF&F34*8M>?n@ukE(zJyH|E-STX~X_;CK>Uf(JCqRaUHthQo*& zlNwG&oaxxPMmxoVyMr<Ke;GMamBpBvx9LVAcONGt2JeM_(Qf1SXAY9afv0Sk@mv<8 zzu2ote0ic<+aK=?m})*m20(Qh07MnpMljZ!dw}D@bf1)BaFLrViOlJb%!s|cskgYd z=1sH<N6FxyP|G3CCly|%7K$1EX!{CMO-gM&bbmUGt&d4$pO>+7zJUi-#S+OUH;(p$ zXr}6YC#*uN0I366KKcD>N#23f4v;UD(Y8$E)PVrsqPtH*;pR8m6i~a;Hi$7Won%S{ z-1eweH)HiaeqGb}z6?PX%Xh6|zwa8L<@4@6?ga|x+TeR(`g<h^!h$@x!17K$e(PZ7 z9|GP_z^2VBB5Dp*(=f(@fR#kc2!<SBbc}4NM1Tvcb>ntd-L6)Kx2tt-?hhPu(Adb& z^k2rRvbpIc{rF7p{8NLKO_M;x(<O&SufdRtZ+v#SFm4H2z2Zm50N*SE)Zbt%Zs0+f z7J{%t;Kl$DB3wL>T84GsAX#ty$wUF*`}}z}c51ZQ^wcV^+;pJX&L`vQoncuNw~VHY z0bYR<y}nv=bL)$y&~XFnKSQmi_Jufkl}qd;_OF+^rC5-Lu86sdR9c$l;trAh--gKI zz@tHC0{_Q;`h|ZBgPMK)2r#*4sjzGjJWA(Y7)m4A?0Fo5{sDsgf4ac~sufYoltSk- zA8Q|{{na1X198Q9X=&CsuFU)yIvbOzR^Ilh+^Kc6`{XG#F?gy<f;3d`E|kFImqmL& zv)0cSq5i-pvB>TALiM9>eyj7%yMzEGo}F!Ox<)nY#97^Wt*<`MkzWAD>bVbgYGj&5 zZ7Ft&2KI5xl+iz-BnB<I%YJSmO6%9#f10N^XY4piMwp5scegb=BU?YPgG}73bYq_Q z<x*amT=+R4zPE%b@>%HRyPC;yieJL6i$VBcUlBd4lNh2iPy50wn)YoBTOh92pQjYr z#VIgPAPYNRHo|rOr`7b!>8aYnY3OPD9y?#DWrEt(YhlhxmM5Kt^4Lfb3B;=DH7R*w z(?$<(DXLHq&=n;e&-(I}`n@=1;3PajBv@_Y0E2LU^1uhMDufT1g@$upzWdXAwvgTC zn8+z$E$cmdRaUj~SoQsNs7u16-B@01<)w&j)c2HiP0un;o4gIxHI#jE1|<9X&ib7C zjTbxeR@T1Zh-yGFr0tt3hgxV?!UlbQ55N@xhah~>-D<!WJ)<)|C80tFT-uMX1F_a+ z+1xqZg*V(q4ih;sy1R))Cst>=kaz&1lVI7(G1-^Ln9BmAHjt%u+-?!>x?!AlNB0gC zYk?*8q6GSh=Lj~B59A%vHtWbxqO<{&`E;3k=dHF|_dWwi9~)Ni#rlx+YB2Fin-uI5 zD&qH>4?i9}K!U4bZ&wvQx+sjk!<n9h`a+&r;IH@u^a3Nr;MM-x(Bzb=&iAX~R&P<* zH=m8vlbDZiYgH^X(n|-)<G{%`c)*Qp!<Pd#zg{}>OiZc@sNpV-3X8Tr$-@RGHI*Jy z{UJQNgmK<K`~2fe4@7Tl^w^YF*FqO%hH~B~`&+#GyQQWTtpr~%`4ekDycO(OTV?+` zO#5}#rn^1UIE;<00=e6PMfJPugemO$h_8t2BLJ^Hm&}Db0wrgQET3_?+Z5PQAsAn5 z@xWpS7F=J3V3h)PtwB%3f0i<~l$ZD3F7B?~0HtTakI;NIkG1WIZF6%1njssb@@G^r zm9aGPuK_z6z25gtLm5NUO2OpZ|KBUbaK>K}Rjv;O9Lvy35*-2&kFScJ=fQ`|-f9>( zMOVrf$OpKwfw5CDzkIfA4;HZ4Pf40foM8p}({!`NJS65H+|Y=>9>^%1XUd-WRhX*X zj9~nLqw&-t72Hb?g|}b1wlC>X5rOpa)STzHEO)-Zv&LSc;CF!XC)`kpxQWm^lgfE{ zn7xy<FbO;KdvpTap?DoiN_Jj%pGqV9P(do$gG>C3OgyC4l3k<Wy9DAML!g{E>22Zi zq^yl2j_ph1K4Av*3=awU7c0WtY;FVQ2J^KLV9c~vPrw7ePUWuO31;lbdUo$6mx+#j z7yT6U+{<XJo#5;M_Jz63;auB)ESm96mi-tQ;BH1In7aAZ$H}RcYxdtBKs`H!5GXPY z?zOiA3|0H8%Oe!&_B3IG&OK+}Y%P!M;lu4DR#LJ-E{@iattUOlGJ{JdevpX<>2Y~9 zS0%bo`YCB@geRE%6*6u65V)ct!`7Ogl<j_Z8-N!+wEaJTMB*8X>-t_4jh8+JPx?t* z5|s!F;8+*S29d6Dm%XqN2|WDt6_qeSP{c!GX8@|(N&NJS>Q|J+riYLD8h@zXHeUl& zNQp+wOg`hh@jk_EmXKGR5Fo>Kr1`M0ovjS!mwS@GcAy^vn*6Zv{V_e~{&_rD#K!U9 z!^%UG7+51_?BlWT%MT=y2|GPiTkg-e&AnjNDNMTUdVp~h_2;@h0+k(Jspx#i1Evm< z(d&q6{=RfF4&%hxlQC3793+mTDwoC(VxReJkQ%AmO$G(}m01kRb}oBzb*K)OGom2X zGSWH9GsUByd9fmivpwKVxBzjL8-FyXJl08;MtT8$$;318ur=Q+%0|~r*&QoRkL*#( z0g4IvL#gYpSnGXNef*7Yy)|Myrt3LZ{%W?>ae41W24F7Ft?>wc2^?K2Df?v)Whd!a z7fw8p%LMJSleEC(4Wt>Oar_@KvX`A@Kl!MoVPb9xuw(%W7%a$RtAz!5hYIw?AJ#&* zsG7scr~r&U0(zs~t}i5CRad<PE@&WYJkY47tOahb@874;?G6s0yvY>mO?!LD4b5%` z8zU|tQ--Q(#7y)M;=i$f7c)X31`t=Cf%CToIH(%8dXLKg5m3|*13r-;Ds}w@OH>ry z$YZVN&-R*CwSJ{!9h<HDMlAb21%J{^wdIy3*3kkWv-R1aJmraJW3)OoS*L))!&G$$ zM6$T3ON@S)ZeF>4vpBH7k1>=_4Pz^zp}&A98g{=vod#+`gcbo99l;F6OI6^30>ObN z`xTR05`#&+oF^$;Q?YCTw4HnM)}Ga;{TL-PZZXr9G;olTbhef(==@yGDV*URD2s6O zp0OosvnkJ=DMV)}b6DME6>4@zgu|}Sqo*l07~8iv_+koh`?Pb0tv$s6ZFmz#<1OlM z{;=Gn&ep>E@{(yFH((3Jm~3cnCg#jxIY|JxWSu{c!=^J{&_QCUl>K|2Cwi(7fXnm~ zwdbhj<|ABn6#-FOi~?{97NjW^GBjrG>#V{ucR=iy@QR>vT%20`9`qh6yc#dm1j}TQ zasidZvmA)jLLN8_43?gbBvxZ;`MADHJ4>s=e3h@3*fkq0;Y~ZCWkLIH{Zvj{a;i6= zZE6he3zBoWpt1bTQy#M&%WRaxyzQBQcB0IlzWtFks!$-f|G86p0={DAVpwbF<w^`s zO?`?j57#ITNjSf}NryNP+yrLUX$B_=w!hfUA=y34CS{Cur*P+@yoxchKkVaSA|caY zc(6@poO#S*4EJ^=k9VRaUp{u%Zk2SxCxg36<Z{raU4G*qR_5cT8WY!Xb653f&)~Ii zdNw$z=(4if$wO7~%<8GcYX=FZ4*@iDBL3Ed^2yfCK4)d31zkPX1b>8gv0S^w!yl<n z75{)c@5xG4cCIlX66!oGmJwBt+iUnxK+l_7Fzj0O-!ZBn(Z<0J$_g@!I=(vr@B#Yf zkXxr)ozj8C?v*s_8I922;?YFY@13s|n0830bpa|Nvp*((ZpJem2<>baF~(K(aqk{p zxfa0)TYF#$5c=onY%64h4-11GA~%?BYrM%gP>FD`{H%Vfl0q$%3&vG!dJT1iQI#7! zO!`RGR`t}sl+p5hi>NA{4*|=+eZk-y9=djZV#3OdyGeFU!cD-Q^`ScnpZbG@xA6~S zx1wV&hcgd@tN8RSt1m_moS5IW>?yoWR%*mxP#FtVHO*Gi-G^oOfVJVHQMU>U{A4x1 zc1abI;Di;O^TBW;)8%z_sKcML1(Xe82Z>Zotpj1->>c$2d0nmXUE-R?!)CJhjVZ6T zUn4KQ`A#}F2?`kh9(!s8;~vWLGyQeN-(+^W*P)F?Ka#+TCyPyhEO~^FAoP;Ul|U%1 z^f}R71|3oj#NbziF(Y~(8kN`p3S~t!ba_d{FWnhMO28k>6Jiln_acAkp6j&IFOBzu z?W<BIO8b8J4oGpYnB`JAc%QPyZn2;_d|P9NWjX-a0j1E><Q8s*<c^1i%H*Z6La3fL zB3>arg7F*jSM}Y{Q-#B8e$gybi2wnL#e@up@Snl}6lX@p%8q&sFI;E*i}IQyd?!#G zH@#e{_yq}bR6Y~%!oh(0ZO0u%85Cx;#>PRsS}Cmjn1WO69uy5_qY6VStno37bXoK) zjXe&VB)n6ZIfs-2C#2k4Up=NI*;6ZT#&@z?c(aA1C`eX>DXHuXPubyq91pcz>PhQU z#&Am}ym{0U8Zjm^xC5rd(jS(1(aWWiYa4!WWWwgTO>F;8W~jgoISjaVLW!~1$Ucce z%=>7(7e8`E$$>XjxUxslT-@J0Y4Ax+_1dd;ui_1xo&<t&$*!KIBlC&;o*N6z@1bE< zpcZ#Fb4?;6BcKJu#bzJQUAPCT1Wym{Cs~ibusWlTBfeSJoi;!xiGk_K2-p&4fjD6W z2`y=pFI6-=)K*q%3Oqv8UaiDrDvd78Mzd9BIkSqVX($%86%HqCYKDu%#5Et7EeYsn z>)*#oQP$?7{AqFjA`5peu!^OU&weH;@f)AfeoXS{9Zk}6Izl=FtSLP_&uG&JGeK4g zK<-rCN<)EL=x>__@hX{?uE#ym)rN!2KS?VB>fHJ}<`vTqq6jQE9+j5JC%ZhvAuA1= zNX)<c9r@%V;-Ya5$DD+&5voQTswe6&(T<=atPnS>qMAfAK!Iw$7+!;&dQKM04Q-!p z+8F-L86&0fnvuBnW4<L0{cMmnXC#EP64e2Jmqp;VUrq)Z{AS98?Gs1rQlhXE#*+g; z1Kp9~*{DWtaSZExM$J^=!NC<8V=57wktgS~xnj~ziz6B`ex){BH)AUp6uiX9fhTr@ zpQk&1sX&ePXaC^B4H~i~zW-6k6ptT6^n{Cdw+cHu>|_G;x021%muD5+07ta&S9}1* z8?lE`N<mnjm-}rv_`%Vi;_4S`J;f=}RVU7Rp{x{Lj3|L8Z2KvU@3!ao)a$BFZwW-T zC?FC_%2!4wwiJTMSjDP9a%zC#%-!IRL~Ve06k8$E00qNZe|Ro-YK!peo)Zj5v<Vdo zIgj-8y!J?G5^M>=|3rWURkIrpBkEav>lXoVNt?_lq<|6C^(J5*(bzJO1P_Wr12%F0 zsTQS>(K{tpi7maVP{&UobRM&x#D9eG!+EOI-CjT3zoo1YBBusWteSAL*^x?$XzQiH zc)3j&h{%|085S9v*aNyZ^Hc{I&Pk3{X4SSW)Ds2t<wBx?ERURv^S#o1-4@C1`%Jd7 z$%eKb8yxo=9UQ{#`3`k4yqwJIl6Vzrxh&~{J1@52CD=v^c%z|6rHCJO47!wv|J$z} zpf_4;PXdeS<&xu8RMorvmsr7g|E*dcY5V$HMTxBEZYg?M!hKP#>)9;Bis1857%6f- z8P;)VYCjhQBY`n#6AYw0jnYIH@t4Hx_?1*M!u!ooC)rjupkn2aJVO&WiT@r6ThaL= zGLnBBEhfvd;s<_)%r2rm{scRH7zl3Zr3z4w)h%ZRbgH9;hEhaS+-Lw(Yl{^2)XG+V z&3S92bK&)jBa4me6z`4tbk>cqS?Nr}TTaU@mMDbRvL{BqQ1s@-LJ$s|T<nAn?>TGq z0dSYaL5F&P;?2?l4mM>T)$B4x>MLB3_f4AjsSTm`@fTg0>+>oO+VF_qQqb}d{@}j| zAMzDBmMjKQV$Ifaw_4#=PKwbq(!ElckHUuoXR}|f)H=9yg@3|7yP2xJ!J0U)6__WK zN<)o|4}4(xjD*<$+2ZqqJpaF>_|z4?rdaqQ%^d#8AATr`7zF*G8YE|M6UU<P-=c?- z3+;T+5dBROnH#yGt!W{wFtPv8RU&@}>xqzJ-1hXU>(0!CyR&Jp^UCF^SKo=_jjM@s z?^)vR$<bN7yZvkow>XbO!O%}8)PWwS=_AF5G<Fi8D{Qqbp5{7PAJ_x18aV$1udcqo zL3bA*a}V^Cnwfuw3@)eNi?MOv6)(CuztW|%@tzs_DCJkE&*Mfz;WinBuj8OZ?MKs( z34Qk|qMH`}JYO;kG&R2A369k?UfPtm-OX;7pJ0+~=h5SeE8y)|h#-o<qAtIh&W-U! z0H(*qCRvdpkAv0V0u!qIQAA-gJGTQ0^yb9-`eeCH;DGSv@Z-&P2=E%82DQ^k2im5T zSH!y``<^JomuR4N?7EL;|Jq#7T-;nRExZ-KnfBUfY}ie>IS*<vAbDI-ZtDm8s2|AY z>f~neyl9H-8-})_!}Z3&>5%tLj;z<8#k|IgxR8dwW8T%5hnU`beb;|wNv{UTu7B=c z?bzIm+FZ95U2U)>dCh<K+P~Vp_;l8HwdL-;lI6YeQ?_okZSKlY@SIBUQh4_gx|`%N zcjDFO?78avb#C8k?wn=rZxCDE74huxk?zUMlg9JBhCf|%JeQ?xSK(~esccU@ei94b zJWjgcF1pzo^BlEEJoD1`dtBX@!pjzk%15`ycGDv0eJFU5b+dGMy)Ss)-S<O%sKb8h zT(k`o5r=<(3x8M9UvmDX&DrtE<+;@Mjp5l~(T$&T-7=Y&s6IO&C^Mb;p51e{qU)dw zlOz)Jo4G`Z;AlGneAJY8mcV5<Co0t?k>BOP-<(yuc;Rv-$ADraTCdy)2BiHpdF=za z0NI>ZHI{j`_xlC2rTx%&jtWA?A^dT{_WVrFA%kVNFv=PJSR{lQB+8xGOUS~vU|A6@ zD{lP)Pim&;<2|S~@~rLO1z9oY83Q3?Fg1hi$(+GQ>an5CH<&yB_s5o?W=EM9n#`j& zFT9sE8;;`|FSG^E4jT_H$j+x^{caSm)*G+-cW*lTZkB2rF5()GS#+ysJxijc+cNwj zT2yQgDIm$jP=iS!a<Xex=N<R_*{jUHvuQ4mYvM+|y-&J-TXYXHbU8gXzk9c+dLCUB zoz)b1PjS^<eX_aCv^g8Kac?{2Z8)rLSaol-Ik*zs>m@s1AUhi%b3X}bT%{wu9G1Q5 zcK1GBU1{8FIJx=5<~jfOyZ6zU*CLnqW|jBJ$@M(u&DucH<$99mUbA<@WmluudYbp4 zb6$w|pNORM3;t{Qo_hAtMrpk+U4t&G3)dn~=yH?+&@ceoMG+=js*dVyDJ<`ORWi+j zo84X6LV;t|DgjbMd*hEiWOcL<pL@`w`WzaOZQVF4!9V62<s&gS^DmQ*YWlqDna$l_ z*J;Y@Nlo=KV(6DeA)9ChE+d{25B&_OzUGK2ykXY4D!aa^=Q8zjtZ+N%T`Zstsj}Jj zHnx%Z4SU!-or;{od_6FKQeWe(-{AUyriq61kct)Bv_d9b<C6+*%r@ZFX*UI;o4d~x zH&yufnw=~wNoh*>6;9b*<VB(Vd4>d<VkCI>Raz5kT!m@(&a0)NB|g5{pO{K#{6aC5 z1s^(FOr}~vtwwmQ+}VSxq~{$p3+nDXSPU5j;iOurDi+kyk)Uzk*JKFzh>U8PH%Dzo zP0YpoY~uejb~P~ef>h~tvy|Vj-p1|N*=->`O%(oxhA)BBuH8Q?HC#jfd*~Xvg+eXj ztRwUC>azp=-z|$8%2rImaSdVFAD9oVEJKz@6<j0!`!y0M(P?fRWnvVXA-u3Ut0HIP zL|I%BSSFLXlw5_@T^ZFG2R}M+AO&Nop`Sh)C>T?ezE<EV?~55T68&1A)HKR-{$au^ zJ80|WxCWyQ&Yjm|=Z%q2<*8JSoF6liOzzgzb`9;;;*RTdh>iq!)@*#PtYwfR>K*E; ztjcx1^Gvl1B{@Zn>%_>s>|hF=G~xN&gD(ba{3w-U#rZtu%h72YKGl}0M1|8j47>mH zu^d27ky4WD{X@a%UIUWQr_>U9;@Ej!KG}BN*e|LdaTcOgjmy*9;NF>`o-jmc`1B~< z!7Od=gD$5I=|eEVxcu*2GV<If_Q-ujySz%Dn4IxCr|yd32L+%|f9(`_9MYyfc$<~K zdN3!YrwaR$S<%O-oZKb@)r4E)gLrKgYKlxPqFnUjLsbL@|B%H`!3PmjDes}$qWR}Y zsjYOeCrF*zjt2s8(7T;nB5o+wOFJ3{61T#k58eY3`j6Z~n|dh|$zIeYSODgYIpXo% zmuzjn0E>^ZDD8QjE?o6jeXod9v_4o^&lJ1ueK*Ih`d8<ujtBp<1Z9Yj(&loy!`dh- z`n7R^=yNp|Q0<pB43P>58GE~dbEM_#+f9c}2+9jAz)ve=W?YrWK|BQI=KMh(St{1J z_V1sJfdM9b0V8_<zrO(VutG~-(r;(0c%I9g!T+^6ezx52Hw6!0s1-M*3x!z<-TeRy za3toLN=%(YF|5{$=BpA%j_glB%7JUdCJCeK<&r^`!gqgO0Q~$T>sGq3W-Zfc&&NRh zRWamTypp}gWnx=-k82onhub;tu6G>RvRo%@r!JMj6q0)U%VU;yuaOc+24yf$qS2@y znKENo&|P^JD?)_I$3`+7%uG#DY>HJWwuZAI6_kmbJP$wGVDD|0nzNWQ0od~I%eJ{- z3I9qhubJy8hipm1PuBLe6?0Auas{6o^hcG0JZkeb{3h=_M-L4I=AYcfyDrz#fHuvX z4d%2KO*TO7QlVWW??e5Dk8Z?qXK=6*UMLp7Gw`?`Te>j5JEKck?eD7wUTCgpydzgj zd<b8j2HDgdG=e0T0@^U>nCXyhCyrvHmUEBOTsheed*(y-NKKtxvFq}|c<5aaKmuly zpz1Q1;^T!j>p<7|Sc5QI>-V3!qiSRCCi{@eqUj_~YCsKc6_orfAe^IcMIO9SnG{W% zmJ<^?(1^tv>4+6!dwouxa~8{;(+nmE#hP&q1CVYfvx#IU{Y1<ZghcbSkSESK>Y>i# z`+<gvcbAHcF5z!oKmH8^#aUqwqw3d%aTbU|6c4LHopE1I!e%n+-$?*USq~^>pZ3Zd zzvGScri4VplP|p}A0%IGc+?O{CqH5g3c525^5XA4zH6<3Ow5W{(Pq~l)BySmX8Q9g zklXZmz<V`gOX>exA22jOpuMte>>0xD$8vktvK{sQV&ujCpwuWvE)3?cJ^wRs6)^BJ z6aRYuED2tnq15+L3|w+74G|>ydpp;0!NQvc?spgXlpH{}a14@u!JoA|-qn_UnaCf$ zygI-u%QWA2m>!}3!R&MgpM08LgJS4J22(!P(7CK;jWz0sP+@8Pc26`Ib=c>tX0Bt} zzH?5Seu9YLKdz;-^~o&C3nF91Qv1~whwlF?M)+6_<Agp?`~OrH_=jyVBoj5vVQsz_ zm6Uvma-wn@j7<2xUikfN@ALs*r)!C<^w$3zyC=x(Z~fDSU;dTe!*bQxZL8myrxch? zQTtt={ms;wk#sVTZd>F(IYRhBF*LyB-6m-rzI|hxy5KqKf6`EMm0v`vU1U*d`g%+3 zzaQU&#v-#z!bU%OyZ206*PZwJ5cE^j!_lv#Et)^Xb<aj+(Q{K@@UAe2X+z%#QIq5r z7=C!jb9yjwuL2#JaK8hi*?8N&!wce^={2Z*E%o0wAXOkDYG6XFn#>oQH(;dW-G^Kh zxwY}=Riu-RB-?N9{IVXzFAGfOs8VXp%uyG(lff3+|HRr_ko$5^><2-#<)qvHC`>Sl zTRheqKc1Ze_p$H4bXq8F<zyf6uQgQiBw}JReoDBjF><vKSzO9>x$OiTK0T|k!3Vk0 z<Ujnmoak37q^S>~CJmZSX=RuHoi`r{9*7?%_va2OE7*{4U4rFoVu^+-!rH27!kc>D zcO~+IvcJq%f@fIbJ2Iw5^QUqOa{@5ypE6#&te1WC%?mP~E^8B&2OM`y%>ei>Jw-T1 z%b+rm&Y5`Q(i1nsr8g%JBVE-;<&cH{1vr@6BtM5H!lc*AL+vvEu`qRe+8<(zZ8MP) z{gS=n?E}Zv6itoJqB{!aFO~cd&@cMTsLrJif;q;cLu45tSljB3WTd%S_k->j07x?^ z0H(R0FQ{x!`PovoN0T9XsJqi18v-NlO7C7);|>%5hqhoWe<|_>V3~NTOf$7rZ7Aj1 zPYALL#Q8P^>J;oxG71ZB9^F;LLr?%MF!+il)nD)eVgIq226_2s%}O%X*hI_5R^3Nc zdTt13^>($`Xw=cbW>RiZC6NU_o6D|{ZM7Cws{Y;ezToczs=FJ*1PXvDxJnJ>DS2d3 zg4K8|Ad#xwXYYwqB{S?7Q?@;qwC`-sAAAY8tS7}H3*)VZb0IVJ;r+UJ1w3=Fq8n2; zta%sjz<7Tqgp$yUwSLkvu-I_shuE<&9!MWQztoY^TizjSw<w#@%82;R;06Q|^S}Bs zRJ$J!&(Ks;&C&FWG(IwEFn0QWGGfkY_G>!&t_01L$q!(PV$Ow3w$*E4V&gyy0E;9q zo}zPZLq&R5j`*bN208Ja`C!#Ue#3V2c&GX(aDt5&-z?vhuWRe9#?3_CaN9)h&Qy4? z{9gb%<=Br7_4By?Fkw?e0A|*2Us+DwY-w@46eUVE)x7g_@NYIOec&7iHd^h>eA%>{ zu_Q%*G0D};y+j8(e4RG@fbOo$=|EvHnak9WpC-$)MqY7|Lgy(zZ$FE!Q9h~}&s!(& z?isziQVCJ=RA8mwB!_-S1V(q@LR;OlqK&-sHkN-&=Me95JiLRq$-Gbr9N=g=vtYR` z(Z%@Qv{GSdG<#N(CAF5#9-G?n%(it4{LkPL<R4&z%QgPEk-J#<-Ah$DB>1u8tT*Pb z-N(a@WD<RGAX5K7qXo$Vk-+p^CXdWxPlxti02|{E|BIbx@y5<{smqo>ilVOWoFDSg zSco4?<P|1w_$1et|4wbC$g6~K#Dz?jJ2KxDpaW~aJRrc0x`Us%YsO9Cr>P&lxb$PR zxP<*sZCPh)wSMC%mo*;qfAhEprAFbA03e0INwUSlBCdkI-;L~XX1#af#GtgFh7Hrh zyY?Oj8U@2EYDdg?u`eZl!peBSZnDH-n(_zxPdj8skv<3C0hA83a@grn*bWa2`_!X> zx0e0=L4=OL;q@?`ACEb`-<>dvoDv!Z6Sv4q%y`NF8#ySBFwM0{K&(7IWZFKv_4*m! zozYRz%R_<Dadtx7@u|>Z6Soq4Ot;EXSn*RhL6)zxVM@i$;f`qj;F!IF!JG0<|HKOy zPir8O5VBCaIBs!in6%#s+p3IpS5x1%(udsnn{Yz2XTaZN%#ws@^~L?a_P)X`sxImm z#z9IE1OX9YKvIce7)oj+BqbyyMPld@=@3SdZV&`%kWK+56$K<Eq(mvDLsC&d^q#@j z_nkT1``ka^`*?UBX4ctz?X`X@_S$<N&Uq7rqLI|;r9G#mygX;7d-aO-X<QEoQOnH2 zrXu4f_c;@W9{6*_pX4*s5>FT$Y?V@|zMPhD&4xbdKi~-=ew5ZQfcv*B0Ys=#oPnjb zpAdZ?bsh7-uDwJ^Sg!@H15iFey~R2}*F|FWi-pr{@tw!%DwocOxiIV|y`>#|cfTve z@z@N`il+Y@h5>6UlX}+p4)#Lyn=!+dPT#W^W?a_9(6`+q^l<~a5_JvB{4)cw8t<D+ zzs476^j-^#@V8gVBcHPw@LJA1eLE~pivvD%?}COb*3Z<%#~YG-XsKuR%-74aQ(b>L zSGggOn-8A8-*5eiqd<t!bTbwlFTZ2?bmmfV`>7C>_XG3yT`sQ!58n^pt!8wsw!rm> z0Mtt;1=cYSY>9y6D-f<+*dFGBOyf1^2&D}lbDb5G<^C2_hqLgD3208oYJvH1TutDO zFWYx9qC|Mq+isW3lBK{S@r&D*Tn!R$mkjXWhz0AH#z<lv@Arr1g<!Lu?6|cmQ+>6( zXzA<K{<_r$>k^OEIMHINDX(X7C+?U))Ga`J<?NzY@eu;doqlSs<RjdJvwg*QQ`GWT zIu?ed7e?nK{kIz0%$hp8Lt~s`<PBA+ab}Fnmk>fg*n)BgXTQod9Uh3^7oinaoCHCD zQ6##EovajBZnRXJb;|Y37-R-LWw?jyK~R!F5^XF<ESZH4K55FHXTnjok`^y;-4fP+ z409ek6tU3c(?C50)pjlI`|Es8IQ9pI#pFSsVW;%Ge)F^6FF)M4NQ=?)Zjr!+3I!9y zh#z9L4@*>Sl_(?Hn{v}t{4b{glEspZ$6+VTQk~MldNuaOF!|}48r}D|@B~7^P}9j+ zXSkKLkymNKI)9sYBlZHR=Ii`~LL3i9!Q3#B*p%umP~7_)D-#p2i!l7F<~*(=k|1Fl zwty{cn}y%8%m6T104p|{B~o((+%Y?3Z>0fpZE=0OR6O3p))=LPl1Ui!vM$AK1OzZw z_TxBGst(2J8U<!A_WU?Xw6>cHPM-RstUZ}xh_KM%h83PDvs^HiuFB;RRXj|9A>IS) zHV0cz+(PlNV}~XnhWT(QPCov_u!0-L@?mHr1>e||u$Y{HK(6*8L)^OUP=#CAb!y=! zAv}42Dh8$iU>2qG+!80N9U8Sc57^hzYQgS{;g)s*s3>3!$XM+77DOk&T*I(YXMg^6 zu&>a*B7Lei{a0PB_uj(iCH_7piOFT_Ca=mm>vG&E`Qy#P(07U<LHwLD(c78b`C=N= z;oaYQR~oI;XithHuCs#$4rp$AM4i3=Jv#bSN8nmm%!od4ugAfD*q=RoTv<25P_Cq! zw|_tQmekHPab|t!`+hq!xA&{(eW@fzg!hz^Mb`TJy6Bqx(sIkKil5m(=7$??f6QT! zx!p&3=6f`gYs?7;4n?a|QND>>D^<;(@zp}DK_=McqT{og*2SC7ZVYYiZQWK*@Zr~! z25A#hj3Oo-*jSv+j?&Iw6W~*el9=Zi-EOW2@tcG=aLBbC%v9Bzr+K%Fi|@EqHTDq~ z<5oL>CwP%n$5WoXDPaS=EZ8kqK3eT2<LnrzF4(JPFZH|1xc>fOiWE6lln67Hl5khZ z_Ejgj1Y)O8hD@TISO@+&br_QM@!4e`*oCew`wDA(j{sDlCe_^htYnsP&RdwHUc#%g zqvk@%V~}TdsAtXxT6?B;90aAm4NO1Sja^8Y^FZhc;3LwZoB1rTz>}rd>b>;21MP#| z&$C3#7rJ(;E1W^YCZo=i4ooka4v(`x`NG6>5@C0|8ytv;Goo-72B}&_?ysbeSK98I z<{6ugflQCO3EAhAyFbGeEL$$8MAv@5vHq1UKKuk238Ee4kTANw*HV%3%Oh4yHi-*1 zro;H0fb2INxcDGmdnVm)9(WwS<-x5w{1({QVFAqjYEFt<rEA}){)}dn)dL~ilm;Z) zaVU`1@8>9R6HD&*9mEo+%(*M;@q=K}$dr-!YQ~>|HW5O4|1b+OHthtDbrbRt2*<^2 z+qie5U-+WJ8ZW;-qSsI8np(*5-3hnFX9+9ssMoi}FO@vPx7;j;vyTi?qK=oRbK8Tn zW!(F<HyE99Xu5hxSCvG3W`nMu?)(V#2+m6SkQ=~6ki~oRb6G0e)RalBj+-OrgKs!f zGj@Vmg{E`J@gKCKUvT$7duYPgpyTGA|9}XDP7k)#N13>isRmzoM+qknUd04p&~a_L zM*7EQ$#%v>_{*<nv&YrQRzQB?MM~42)Ic3K{yc_q&h5G$F9=)})Mahn{d$S6V*V1G zZKT6i9rDeB-9=Aiqn~f_R2lV>t>Bcu*sLx_nqW0NNM(4_IPK(}WePjc(9k`8jnocb z86q`_)fc}xgU*0J@P&?hav>SL8xQ7gOPx1+0ygSPqONeicU1c&PO{oN4T2?6_{O5_ zkj?ajEsdE>WB8NjZl~yh(&u7T^P<^r=hpO<Xv)aF@$)0N+bUT7zM5oua?OZoPiI9_ ze)}y~DT5z%{U(@!xvWni2czE$cc`*|rL*dSIC%2`Z%}o6V#wq+wXM~*g`1Cob4U}S zAUe0U3vaxTt9D6xbojW#`pq#H3f0me3X+azRB&pc!`afCTO)P&Y!v;<@^X(uk&joN z9&WJ@;Ivp8u%0-~Y-9W*O5drEjvT~5l7`;LQU74Ke|WAoxYSGujI1;f6OuBD-i3D~ zGvmNa2Yh)7I__Oi$J2c+WY7JX-YI;^7oVUu3+g;uJEF&*)F)X*%7bbr;Kk<?-US0R zEANbpeB55>od9*u3h*o#aJ81K4JZiCk7Nh+mLiSt^)6WQU0ik<%8#m~#Wx8m(+V>4 zriF@Fk37O>L^u(58}87e3Mh%8>%Ky3>V0~o_~XL*FA;8PsBFflQ+``+tfa?h+<yVM zXt&uv{LqK;+hR{84e0VYLUlen0VZHWaxztf7H5kF>yqAVFeY0;rmaW&Olg-BK^ON} zH9RZ)8URzE2a+Z$DexJiGU*^~If;W*!3_YH<+eI=Dtu#P@<UF|34I|?{rbeG<US|> z7BS5w2hOcj<z<$V*5_4lR_upfw8x@BW>-(ewLc)Oi?bhk$b^l5dU9wYS9T@%Q5})y zmQ^$nUg1N4xl2;Jt8oJmyXCHHj1K-qLP#ii#AOu)#vir`p4*S`j%a`&=qDze;#)!F zZJn%=N|hY}RTkIjL{|_@w^yr%_S=7gv+FDo2WyHW5l83q7?41O5F7Fnd=1wW7!O=x z+=-JVLFSFAZ%z)#vm=~>s~oT)@OJ-zO7U59?TT~jW_j5go9{7W_-Pi)*{H*+p3XDD z{nSyu)u=H)QM2PWZlK>?v)ID7P5|m1#Ohr#J#-wywN%xCw=4oOz&nVP6pifV>U7y; z*K^4dV2LZ5_1QKRcLp~Ivjh8BwLle#68VoG8pv1L$*vcUb}b2rJ|!Q2Dvjf#90%|$ zJUq_1Jn#^X^8&HOSGv+H*1!T6K?EyRB_LJW4IPbO^b?5qJ}W8o%(Bj@Av{2i3ezMs z;Say~kb&*P)jV*O#l`~<y~xyg7ZD$5*f|7dD@UYO6>X6X*??Bb^<5am9&O_Y%uO!$ zFzQi{PFK@WVdEedVpWYGIcy(0a=}~!i6kbZ$~+glsMn~a9;>F|@&t~zxt*!>CE^ZT zB|b^LrS2@j?~SU5q&qSj!-N!{KkiAz?@6hsnHj+cC?kUo^Rws$<5v&a%39niKukCy z?tmeZ$0)f12Bl8PeXlSNUiai)g1?oD3Z=M};wX|Vh64b0gqZ9AUqz_|v#AvDVn!pQ znYG@NZJ(5PxwtGAe~JMFZy=hL9hlP$pU|ly0`Wv;N@2nmKgX_eel2*h%n%Av69znH zbsxzg6Y&4&N-`6>ny+o*7KyWG{D;MR-ijWn$WV%DUyotD1JOeP3e=kq3Uj)HX}{@= zDuU1>z)V24Sa$o@_$tBD_FG|W{(!erH&qe|5;jB~B}HS*BotY$(h~x@2F&wphX`HU z8+SS~$+vQ9STeWE5o^2|Ww!*Y@>L%t#m2mR$KUWA2)qizTa?Ct{{$XyD7GXA89D$J z3F%(le$+vbC`3D|aYRWnNL2@bd%j??2J$gDbwX`v=+Vp_a>wCCm9;^5yBt^<w5dXP z0Oz}`V{3`KjeTf%R2n3Ij1!?rm^z|wXpTQ~0)2}}RI|ero@VsqD!;`$82)1yt!C=A zoUYvCZX+XlM?_YJq&qWfqN+=@5xBeCe?ryv%tqjT$QFzG^YWVKCqYFJi8l2HQB}xR z)|Hx+F`U!fKY(f!H?wB@vTYZ7dh3^_Ilw_kW)`86y|}0cwz`Xis_?fm0NgTl37KJG zY^(-D2D<l;sC$w82Z1Kru7-Y{1@1ZQpX4%hY5JI)CR8rmyVw>98Z-dqhULr3e6jdO z&!4-?a554mg{U{DLjjS|nmwNlyeRIE9{=VnN*KIXA|=#pcP8N8SOWN}#`6GiN;f7d z-sQ5w%_G6e0=ciVu&X#vt#?vp8I8BskM$DN7f5{1Omc6MbYW92@Z3}!p|C;(lKu$N z&!-x&(W}8bmi=R0lT6^4pW;}yj;6nSB>p}WU~Cc^dN=xL3;#vUTb1_U34_vFW*WJl zkS9nm#b=kD6^V1;cc>qf92oe<Zj4hBkx21*kX9H=Xjj=*?0B@Hu$FobeuWQ6c8|!i zj#y}-#GlrPOZ-SEq?~pp&!#w??WHx0<O2bXf*ECsuEUr+f5t2@IWSKa?11Z=6l&+_ z<!6HzzvnrYJ&pwD+f{bBQO)_7S--|%=W@i@k@VM}8W2$Mwpm$X$cXbCc+cs*;jJM{ zU}LtjtEt;U;fVj-fy|7{KHeFTb}S3K3YyQLB*0-d%$A#lfmwsC;RqlpG?bJzrzs;J zmt<AqPf7sR#H0}tZ6%w5)<TyH<lK)iMqZlcw!F3=n{G5>PkatE<57z0p-@BisA@(g zBi3U_p+3Xa`}m~d7Slna^)v6Qpkf0`G6d7$*@|*bF*+#pEC`|yf`ZJ^-`HHz8N#+u zY4vurmkQ(rgpeAN2+21k7<xOQvL~X)aSwM6U8tG`ZX_HNZ6TE_uJwGNE(%<Z4slF# z$hqa~14qt9rQ#>SdAj-nyigq0>C>nru5$-en*(tZ36VWjU(WmPGV_QYz3h=h@!>RZ zhCFv6`4n<{;_0)Lk=r2YfrvjmIDT5gFl<EIa<o4+mzo`r5tu&@1qXky(^CK^Z3aqu zuXhJmc1NDtXL1D{3EXOKjUI|F1;o@?TJVQeopx~dl+#>(f!2Kq-NC^r%Stm~mvJCh zoyhl&2AsmCK`jdBj=4X{$6B>HXRT#Bt8V|g$Vl{Yu+!92((}Ehj!XTnccP&n&K%4f znnFY0a8h%w*-p&y>FGD%-XyN<ho`orvFA>?4QEAx_d1Y#8nv3=)&i`B+-9=ghz}5g zp<M&+MiGYqX9^x~mpVYR4oU@bKiMgHBAKex@_u3$_6}rxx5ZEpg%yhHOr=or`c;** zJaYwY$DuNf3HuN}Qn0O_r|v%e1K{puL|tv$q)NRn^%IP5v~C^=HwW?)3t|gbL`J2U zt4r5Cj|@)_J<jCuTa?4#8nJ+O3nPd<A;g%3CVtgPrzw@jxI>%+6fh_l17>sSZMnhR zx4|XR6q!f3r-6q<WeQ?m%}SJOEOy%Vao+FkKM&fCqJ&W<H9J4^KAkeVH8p2Xf8%6N z&>x%smkIkTo4JbHliw<wzatJ_V4z?!7_-KXnHJgbO2g|4@BQ<@aV5tBf3)+<%Th(; zd|39dD(E<cGUUcB(UseBvw5<c!s*H2xDX&c!O`S9e^97S(Kdvh2d#Ta<oGlq=9~8D z2VA6F`m#EFdcT73!~B2-#c$soFW>Y1thuvUlXMn5f(;4H%<jc65!OQAE1n{~-|~Pg zi18%q(tjG=WYW{+Y5X<<j7>}&N=)+F>K(b_L8aul3f$wdKXdD6I{Ju((DCR+Uty-! zb(^3g4nRYMbEbIRp7#zoKCYjpSDWvqcQR;7^-<GT_OmDh@j!is%y~WwnNI|c-0Y1w zC~WsY4G1vULEde)ydCN6Z>8(HzIy)1D0^&huKaC^HRb9@>fKi|7)u`<QS}*0Gb*o2 zo?L9eOyF^puO-(PM*$zuyp=f$L5roOj{uKO9{%ilnYa7qpgtqmYcp>^TArq=GW+LR z|1Pnvne-A)Q|oehe~BUdNK&8W)JWjZmmgemJ-^$yxA1d$DPx=SC2&*s<Hl5y-Q)Uq zjm_G?+Jc7z)j0U^|G$mFHQ@gQd|=9$-=}0o47144juv-ZUC^cu*iTMowqybVFgWb+ zgQx&pQ1D+e;vcev1dLx5?P%p{4HFOqXxCx<YA`_<{}p>zw2PyuD;mZxhjzCyM_*Tv zf$?9p!IFW$_P`Z6w7HW78YU%0_Ro->glUN$+FE0@!F^34P5q}?VeDTSyh(v4uPUB_ zYKAHWXh4DjIo#!luF_C(>sn|x6DkC=n#<FW-@j)zO1ed<@#dALoc!EGgdOR6snGUh z%0avS)Y!uF(J`xaztMUEji2|RuU+*B1CUvIG;1rbj80Q`w|<AvQxa0>5jKCaw1g`B zkb?~UY?4e)E>L_^wX?<-VA1fA=cNY6osr-Ev8*DpY{v=6<cEbN?sCx0K@zm8+Rh?= zL%Y5{<VFMuAZW8lvrAZKTFdQs^5-u#bUsSrn9X9)?>*ayOpj>Lm`q{+loJ8XGJ3>5 zZI$CojBe6aN+Fp0&NVprBUP0EPLpiXv%ryMABvEtIlC6R1tB0wXccR8p$Oj<vrZ@Q z%(I#egN7=Z<x!13vYA`#u-x0M(%Ll>xRlUx?Nf-SYTwuD6H#!wfO4lqc|vx5hh*#6 zFQtrMzUYt4TkpOcn_{}Fbs*W{y|1&$vD%k@B_dsa%6_$kzloM$ht1&e`KlKWbqJ~* zj-%#2m8h@72)2j_swY#onS$(Z#<hMv!ATyzx@v!iFvE`T(xS+I#yzL5mqB9Rle^dU zb;a}Oq%jwi&IqFA=koINROEVkPEaKESsZ+){5{hwX7jeQg(o$mnQrsJqK@Wb0%>5V zb;AP*j9v_%1zDi~@F#zIVNT++chl@>fLk01{2qvD)G85oI7t%7UO2|)DD4gLTQQ^* zAnSP1Xk8jxekU5?{cB;5ncOJM@ssKmR;~G+6VVnf?AbhLbEX3AUqMdC5W8lQAu)V# z2+ysPi~)kq$0lI}fdPt?#}be6DMD;e(5F|V-V=~r5qMANe&5!aU<l*g4^_J-?0nn^ zdZYQIGx>=C1r%A(D-}55B*up1-Uj8F>?=hvw7I8}Wkx8^8IX9%UeOSxIo2i{8bcX} z+U@5kpuc#(C`(pD^6LdxhI$g?`+J$h{V?S5146$*sz;DP)06KBo&}6mh%=HXyzZWs z^E{JEOxOJJlX5Ms6mWYn-KTRK1UwH+UdNN5I!KNUT-75vw<#wRqsK-_#bOuBnhPnE zPl=((Jy#d07<+s6*zw>j(?|5QZ_dsH>qmSt(={D2Q-%*eGJmA2N;fZTNhyfgz4ydy zxH3<VvqajRRG8{<ByX$kt>{~Z6-kxH-kYw9Gg7oSpZ(0}e7Ba~2;nGH27P{NG@>D3 zrRC%&j!n<Ti<30#_fEaKvtj1T@`B8t(VuB5n)%I3&KObysNKC&EQv5Sdp2!K29gDm zgFvd+NKH(Ex+`lCrB|zw8FyvW`zwt~j2vq5G)h5ibl2IqldCb>O17-V9FiPOEb*O} zEfien^-(v~%h)ntChVu;q%{(_IB3+B8Rcch)WnqQP+ll6*(cXe7B~*+6+Nm?Gf;1m z^HcWYSBMu(+D@A3ER8RYwR^ad<ioC>Fq-6%WWtxhX~N>K{44KgEkyGb>XjBIr$RUD z>Zj`0k`I*RQ?ehLg_xz7g__;}EYzmS-WZ38dwyEI5VchCj{OM>gUsL)uXnZ8*Qzgn zK!1RrR}jhFAB<mW`^vo7^pzCNjy9a*nq!<}n5*i#e*883)(^q!XP-pGM>Ir4ZzJdH z`eyn*3YXj5{N2d?aQC9)Mc;?44=o=OK8!9>)o~i88BQy5C{iDS+j7{N+K$=o5AzjA z_T~3^r1zznAb-#P3|_9N5B09yv;EexEV&%dkizhS;Vgp=LlW|h(AgBnl+Kj7lm%pa zwY33x4b))HV4>zF{9*E1kG3UyRk&DIY1x;2-T|rHiDJo8^MWcps~okeUTWhwK0}c! z&yAjIdB~`%@ayrLlxwbMNoi)3X5_w9cxmY0)!YyJa4Y=E<5vY)VOcLt(@k?enO`W1 zEgra-V~`{MM%4V-?XXR$8AFbW&@`nurO3`}TJMJ@wQtq;Rrj5+o44jb77I1BXIG5t z>z7;|$rNjm=<v<)dc1pyTrylQJdJjO)`aH^j~4F=53@eEK9Qb7^>W2t%ZJt!J7aUd z_8{9C^QzvwiTRq+Lf$F&mtXwEQ;aJnXdBcT`gSOGSob;h1&AesJ%gJlzQ1>M=V}P_ z8>U)W{8Zb!88Ji5>BCt$sFXjIrr*omd$Ko&`~=+w-4HLm%fRhVwTv#Yd=`8WCZ5h& zLpmQH&KRuh^;{c`TySr7Xq|X3Id)JByiir;RIEaHdqRHv0z)79&5)$>8?iUapT~VS zTen@$m%1z!DitY3{lfi4u^;~r(*wwX``*O%=*Gg{=)O8s6k0;MNR|t|3e_c+B1e#( zCUS$eydr$naF3b)oe7)K5G_RJr>y$}2~wdG#%K2K(DU&iOE^}&YIQvCdU`;4&E(}| zTN@OkJKl9Dgh$e<(0W|$RA`eQR=6hbBcCL%lBCC@Up0F*!XN^cCrQhE?u-wcyG!Bs zcM~eXGpnD;X4d!wjS{O?Ke*J)6?XTP#hAR(zkQME9P{}p%HN^XuM6i?%f6b_dCWma z;~Rqa;}+grT8P{<{(=4(3rz}q8aN=A)M^}Ru2iOUMrj73ex+vG?WxHYX0|XPCLxDg zuyCO8txaI{kLp1gcGIwmOU8ndoK5^K$Q-zAeV5Jfnhtd~Y9LmX>yEx<!=tEQs^1hN z*dDXr*C(&CeL88SfX?XB?4g?fI-4@<*nPfpyL11pkfo4^o7D^VUqL@#39Z>tls*_K zGx}Jk=3)G*{?oS?E71-x2gR|C?yKFA=yOw!VUt6enVJ<ZZdq5Y&%cqWlhORt#M^5~ zVc%wd#{SEMWmT!|$0XL91K-TLKZku*XCIGSnbP;Wu{+VT6Zoa+$<C8~k7;)jkMW76 z`fa^rGyR)m{bkd}rE@)7*;~&WZmho0H8s3_>y%BjMRYZy;AxX`xvj!*{&Mazh9Np- zzG>O#`Iod0z*9<IPC57w5=I_tBbH*KVQlp8_zt{O?}|g4>G-FTmcEtj<@%Ra{wDr% zUlccE`xG81JZXO&?KUhvG%8Xck|6v#GVV>~%<XokgXwRwKGela8iF}>KcJ#4Vw<1a ze=x77pO6^y3iB&k;ylRMdDd?bW{@>9J`(yYSJ=i!)n{rcU@+}`?|EM7$G?5QM(iY~ zRCQUY^u_j`NqsDq;c<6M=FNl6@KCzo%Qsx5>Z@nprIl5bO?G3F%5QGgxfFhE+W)DO zRBTlyW-RWP=GXKk=pb^0sUbblWc9AiQq8(U(~@)5LE=nl)C(fNg+1ea{>hzszqzR2 zY3GiGAKzQ!d*So@=D6gN-{ipnap9?((mmdy2i6DXt25c0Wa<~wi=;~rhJTD&7B+od z%^bbeR~2Fv9aJmJ|NG%?xq1sxUt!;+tJPPR6-pKQB6cGtyeq%9ZFEN@4bD7x$^Glu z_lE<;8FxMQo2<+_TQ}?mR+6QaCktMP?Tzd>ELbeg4tm(E=jDe@7Qc|*!5n1mn}2PO zU0PNDq5d!<Qrg3p^yii*hlAz()c3&c{r^kFiY-I26)Qqm0P(k875j%~2;*0hm6b8Q zgSLPPU~AaxFyp^%{`SL`wAx<IK;^1oYK6W7<G+TsurZZ!@`M?}fgVC)LNHMz!WhOc z>*VI>3KM|wtJqlFff>U7;fJkg|5ne)f5!cfr>v=~slAicU*`YR%(`foJ2p;^Fn$3( zByNA9fBJKwT`ZjK-R|%Ll32NzI>3y$5Jud5&W={x|Bfa6x9v4kbC|joOb;di=Mxa% z6NYKJnYy@o!!+cs$~rl^qCH*z>m>5GlZFdWrlURnyCVAciri%cTtEaa2p1FpUNa9z z7{KA2!0&%8|ANc)FA0GK3Tp%4b>9EV_Ydh13L95@G)w@i9k5`~aB;G5GY8fM0$3FQ zf-JBCadiT|W2O819e_s;yPgoh3I-6bIay%8ll}d!g7)%oasdn>fRzVmaOH}I>g9i_ zhaz3a!Pe6SZAk`)Aq2?a|Ng*)g@go!V3x2$nlM}xE&x~%`vY_QLjyhvhyh~a(uCn6 z!oq+dacS7k2*4pgGyxGndJs(z;C_TA3Mhfw4v7#H#wvzO!;XspAi||#+aZB98!k;4 zjuaIJjf<s;9cd>b3_q%y2=XWmSPX*45D^suVFk!11_#N9r3r$t!qP+lU%;1HL`)2a zpR0?hjXm0h4C_5wHr{B!ZZQ7qPEJ7lVPgz1x00i!6A+AlKFa~&D1kH;gCm3xVy42P zNMSQGVKG5dgovP-nI!@tYKb-zmLmKAH-Q=dS)c*|bm%aEPY4K!lCiVPt6wGiKXXIA A@&Et; diff --git a/grady/docs/core_uml.png b/grady/docs/core_uml.png deleted file mode 100644 index 2c32543b871c8f7099334c75fd3b81eac96c87d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 306987 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�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∈;sOUp=s}a@p98Y6Oo2}}|?=k2BFQ=_o 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	X9CK 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�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 Y$Ax>;$z1&vN5DU&JF2(yZawt-e`H>KqW}N^ diff --git a/grady/docs/deployment.md b/grady/docs/deployment.md deleted file mode 100644 index 0a380077..00000000 --- a/grady/docs/deployment.md +++ /dev/null @@ -1,11 +0,0 @@ -# Grady deployment instructions - -For every commit on master a Docker image is build which can be deployed -anywhere. The current deployment configurations is explained in another repo. - -## Environment variables - -- `GRADY_LOG_LEVEL` Sets the log level for our custom logging configuration - (default: DEBUG). -- `GRADY_LOG_FORMAT` Can be set to `json` in order to make logs readable - by Logstash (default: `default-format`). diff --git a/grady/docs/feedback.api.json b/grady/docs/feedback.api.json deleted file mode 100644 index c48beea4..00000000 --- a/grady/docs/feedback.api.json +++ /dev/null @@ -1,43 +0,0 @@ -GET /subscription/<id> - { - "subscription_id": "e313e608-7453-4053-a536-5d18fc9ec3a9", - "owner": "reviewer01", - "query_type": "random", - "query_key": "", - "assignments": [ - { - "assignment_id": "dbdde0d0-b1a6-474c-b2be-41edb5229803", - "submission_id": "1558c390-5598-482b-abd3-1f5780e75e0d", - "is_done": false - } - ] - } - -POST /subscription/ - { - "owner": "<some user>", - "query_type": "random|student|submission_type|exam", - "query_key": "<pk for query type>?" - } - -DELETE /subscription/<id> -PATCH /subscription/<id> { - "deactivate": true // or false for reactivation -} - -GET /subscription/assignments/current -GET /subscription/assignments/next -GET /subscription/assignments/past - -GET /assignment/<id> // only those belonging to the requests user - { - "assignment_id": "dbdde0d0-b1a6-474c-b2be-41edb5229803", - "submission_id": "1558c390-5598-482b-abd3-1f5780e75e0d", - "is_done": false - } - -DELETE /assignment/<id> // check done conditions - -// done conditions -// * feedback was posted -// * feedback was patched (every) diff --git a/grady/frontend/.browserslistrc b/grady/frontend/.browserslistrc deleted file mode 100644 index bd3ad98e..00000000 --- a/grady/frontend/.browserslistrc +++ /dev/null @@ -1,3 +0,0 @@ -> 1% -last 2 versions -not ie <= 8 \ No newline at end of file diff --git a/grady/frontend/.eslintrc.js b/grady/frontend/.eslintrc.js deleted file mode 100644 index 64a02468..00000000 --- a/grady/frontend/.eslintrc.js +++ /dev/null @@ -1,36 +0,0 @@ -module.exports = { - root: true, - env: { - node: true, - }, - extends: [ - 'plugin:vue/recommended', - '@vue/typescript', - ], - rules: { - 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', - 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', - 'semi': ['error', 'never'], - 'quotes': ['error', 'single'], - 'eqeqeq': 'error', - 'default-case': 'error', - 'guard-for-in': 'error', - 'yoda': 'error', - 'no-trailing-spaces': 'error', - '@typescript-eslint/consistent-type-assertions': ['error', { assertionStyle: 'as' }] - }, - parserOptions: { - parser: '@typescript-eslint/parser', - }, - plugins: ['@typescript-eslint'], - overrides: [ - { - files: [ - '**/__tests__/*.{j,t}s?(x)', - ], - env: { - mocha: true, - }, - }, - ], -} diff --git a/grady/frontend/.gitignore b/grady/frontend/.gitignore deleted file mode 100644 index 912d2e70..00000000 --- a/grady/frontend/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -.DS_Store -node_modules -/dist - -/tests/e2e/reports/ -selenium-debug.log - -# local env files -.env.local -.env.*.local - -# Log files -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# Editor directories and files -.idea -.vscode -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw* diff --git a/grady/frontend/.postcssrc.js b/grady/frontend/.postcssrc.js deleted file mode 100644 index 961986e2..00000000 --- a/grady/frontend/.postcssrc.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - plugins: { - autoprefixer: {} - } -} diff --git a/grady/frontend/@types/v-clipboard/index.d.ts b/grady/frontend/@types/v-clipboard/index.d.ts deleted file mode 100644 index 8619c865..00000000 --- a/grady/frontend/@types/v-clipboard/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare module 'v-clipboard' -declare module 'vue-color' diff --git a/grady/frontend/README.md b/grady/frontend/README.md deleted file mode 100644 index 82dcc1c7..00000000 --- a/grady/frontend/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# frontend - -## Project setup -``` -yarn install -``` - -### Compiles and hot-reloads for development -``` -yarn run serve -``` - -### Compiles and minifies for production -``` -yarn run build -``` - -### Lints and fixes files -``` -yarn run lint -``` - -### Run your unit tests -``` -yarn run test:unit -``` - -### Run your end-to-end tests -``` -yarn run test:e2e -``` diff --git a/grady/frontend/nightwatch.json b/grady/frontend/nightwatch.json deleted file mode 100644 index 333b96e5..00000000 --- a/grady/frontend/nightwatch.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "globals_path": "nightwatch_globals", - "test_settings": { - "chrome": { - "desiredCapabilities": { - "chromeOptions": { - "args": ["headless"] - } - } - } - } -} diff --git a/grady/frontend/nightwatch_globals.js b/grady/frontend/nightwatch_globals.js deleted file mode 100644 index ce0207f9..00000000 --- a/grady/frontend/nightwatch_globals.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - waitForConditionTimeout: 10000 -} diff --git a/grady/frontend/package-lock.json b/grady/frontend/package-lock.json deleted file mode 100644 index 2b1c31e2..00000000 --- a/grady/frontend/package-lock.json +++ /dev/null @@ -1,12267 +0,0 @@ -{ - "name": "frontend", - "version": "0.1.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, - "@babel/generator": { - "version": "7.13.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", - "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==", - "dev": true, - "requires": { - "@babel/types": "^7.13.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/helper-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", - "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - } - } - }, - "@babel/parser": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", - "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", - "dev": true - }, - "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/traverse": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", - "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.13", - "@babel/types": "^7.13.13", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.13.14", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz", - "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "@hapi/address": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", - "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==", - "dev": true - }, - "@hapi/bourne": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", - "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==", - "dev": true - }, - "@hapi/hoek": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", - "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==", - "dev": true - }, - "@hapi/joi": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", - "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", - "dev": true, - "requires": { - "@hapi/address": "2.x.x", - "@hapi/bourne": "1.x.x", - "@hapi/hoek": "8.x.x", - "@hapi/topo": "3.x.x" - } - }, - "@hapi/topo": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", - "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", - "dev": true, - "requires": { - "@hapi/hoek": "^8.3.0" - } - }, - "@intervolga/optimize-cssnano-plugin": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz", - "integrity": "sha512-zN69TnSr0viRSU6cEDIcuPcP67QcpQ6uHACg58FiN9PDrU6SLyGW3MR4tiISbYxy1kDWAVPwD+XwQTWE5cigAA==", - "dev": true, - "requires": { - "cssnano": "^4.0.0", - "cssnano-preset-default": "^4.0.0", - "postcss": "^7.0.0" - } - }, - "@mrmlnc/readdir-enhanced": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", - "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", - "dev": true, - "requires": { - "call-me-maybe": "^1.0.1", - "glob-to-regexp": "^0.3.0" - } - }, - "@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==", - "dev": true - }, - "@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/formatio": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.1.0.tgz", - "integrity": "sha512-ZAR2bPHOl4Xg6eklUGpsdiIJ4+J1SNag1DHHrG/73Uz/nVwXqjgUtRPLoS+aVyieN9cSbc0E4LsU984tWcDyNg==", - "dev": true, - "requires": { - "@sinonjs/samsam": "^2 || ^3" - } - }, - "@sinonjs/samsam": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.3.tgz", - "integrity": "sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.3.0", - "array-from": "^2.1.1", - "lodash": "^4.17.15" - } - }, - "@soda/friendly-errors-webpack-plugin": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.1.tgz", - "integrity": "sha512-cWKrGaFX+rfbMrAxVv56DzhPNqOJPZuNIS2HGMELtgGzb+vsMzyig9mml5gZ/hr2BGtSLV+dP2LUEuAL8aG2mQ==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "error-stack-parser": "^2.0.0", - "string-width": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "@types/chai": { - "version": "4.1.7", - "dev": true - }, - "@types/eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", - "dev": true - }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", - "dev": true - }, - "@types/file-saver": { - "version": "2.0.1", - "dev": true - }, - "@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", - "dev": true, - "requires": { - "@types/events": "*", - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/highlight.js": { - "version": "9.12.3", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", - "dev": true - }, - "@types/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==", - "dev": true - }, - "@types/mocha": { - "version": "5.2.5", - "dev": true - }, - "@types/nightwatch": { - "version": "0.9.11", - "dev": true - }, - "@types/node": { - "version": "14.14.37", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.37.tgz", - "integrity": "sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw==", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", - "dev": true - }, - "@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", - "dev": true - }, - "@types/sinon": { - "version": "7.0.3", - "dev": true - }, - "@types/webpack-env": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.14.0.tgz", - "integrity": "sha512-Fv+0gYJzE/czLoRKq+gnXWr4yBpPM3tO3C8pDLFwqVKlMICQUq5OsxwwFZYDaVr7+L6mgNDp16iOcJHEz3J5RQ==", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "2.3.2", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "2.3.2", - "eslint-utils": "^1.4.2", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^2.0.1", - "tsutils": "^3.17.1" - }, - "dependencies": { - "@typescript-eslint/experimental-utils": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.3.2.tgz", - "integrity": "sha512-t+JGdTT6dRbmvKDlhlVkEueoZa0fhJNfG6z2cpnRPLwm3VwYr2BjR//acJGC1Yza0I9ZNcDfRY7ubQEvvfG6Jg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.3.2", - "eslint-scope": "^5.0.0" - }, - "dependencies": { - "@types/json-schema": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.3.tgz", - "integrity": "sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A==", - "dev": true - } - } - }, - "@typescript-eslint/typescript-estree": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.3.2.tgz", - "integrity": "sha512-eZNEAai16nwyhIVIEaWQlaUgAU3S9CkQ58qvK0+3IuSdLJD3W1PNuehQFMIhW/mTP1oFR9GNoTcLg7gtXz6lzA==", - "dev": true, - "requires": { - "glob": "^7.1.4", - "is-glob": "^4.0.1", - "lodash.unescape": "4.0.1", - "semver": "^6.3.0" - }, - "dependencies": { - "lodash.unescape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", - "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=", - "dev": true - } - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - } - } - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - }, - "dependencies": { - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - } - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@typescript-eslint/experimental-utils": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz", - "integrity": "sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "1.13.0", - "eslint-scope": "^4.0.0" - }, - "dependencies": { - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - } - } - }, - "@typescript-eslint/parser": { - "version": "2.3.2", - "dev": true, - "requires": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "2.3.2", - "@typescript-eslint/typescript-estree": "2.3.2", - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "@typescript-eslint/experimental-utils": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.3.2.tgz", - "integrity": "sha512-t+JGdTT6dRbmvKDlhlVkEueoZa0fhJNfG6z2cpnRPLwm3VwYr2BjR//acJGC1Yza0I9ZNcDfRY7ubQEvvfG6Jg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.3.2", - "eslint-scope": "^5.0.0" - } - }, - "@typescript-eslint/typescript-estree": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.3.2.tgz", - "integrity": "sha512-eZNEAai16nwyhIVIEaWQlaUgAU3S9CkQ58qvK0+3IuSdLJD3W1PNuehQFMIhW/mTP1oFR9GNoTcLg7gtXz6lzA==", - "dev": true, - "requires": { - "glob": "^7.1.4", - "is-glob": "^4.0.1", - "lodash.unescape": "4.0.1", - "semver": "^6.3.0" - } - }, - "eslint-visitor-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", - "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", - "dev": true - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - } - } - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - }, - "dependencies": { - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - } - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@typescript-eslint/typescript-estree": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz", - "integrity": "sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw==", - "dev": true, - "requires": { - "lodash.unescape": "4.0.1", - "semver": "5.5.0" - }, - "dependencies": { - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - } - } - }, - "@vue/cli-overlay": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-3.11.0.tgz", - "integrity": "sha512-yYZP27vjioWmohwXQ9mTPHHxktfAaTM6RDehyG83yvY07wcdxhwrNNCMm8eE9My/K2F8oAPf8uoDZZmkr/EXBw==", - "dev": true - }, - "@vue/cli-plugin-eslint": { - "version": "3.11.0", - "dev": true, - "requires": { - "@vue/cli-shared-utils": "^3.11.0", - "babel-eslint": "^10.0.1", - "eslint": "^4.19.1", - "eslint-loader": "^2.1.2", - "eslint-plugin-vue": "^4.7.1", - "globby": "^9.2.0", - "webpack": "^4.0.0", - "yorkie": "^2.0.0" - }, - "dependencies": { - "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", - "dev": true, - "optional": true - }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "dev": true, - "optional": true, - "requires": { - "acorn": "^3.0.4" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true, - "optional": true - } - } - }, - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - }, - "dependencies": { - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - } - } - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true, - "optional": true - }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "optional": true, - "requires": { - "callsites": "^0.2.0" - } - }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true, - "optional": true - }, - "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", - "dev": true, - "optional": true - }, - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "optional": true, - "requires": { - "esutils": "^2.0.2" - }, - "dependencies": { - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "optional": true - } - } - }, - "eslint": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", - "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", - "dev": true, - "optional": true, - "requires": { - "ajv": "^5.3.0", - "babel-code-frame": "^6.22.0", - "chalk": "^2.1.0", - "concat-stream": "^1.6.0", - "cross-spawn": "^5.1.0", - "debug": "^3.1.0", - "doctrine": "^2.1.0", - "eslint-scope": "^3.7.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.4", - "esquery": "^1.0.0", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.0.1", - "ignore": "^3.3.3", - "imurmurhash": "^0.1.4", - "inquirer": "^3.0.6", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.9.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.4", - "minimatch": "^3.0.2", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", - "progress": "^2.0.0", - "regexpp": "^1.0.1", - "require-uncached": "^1.0.3", - "semver": "^5.3.0", - "strip-ansi": "^4.0.0", - "strip-json-comments": "~2.0.1", - "table": "4.0.2", - "text-table": "~0.2.0" - }, - "dependencies": { - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "optional": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "optional": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "optional": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "optional": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "espree": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", - "dev": true, - "optional": true, - "requires": { - "acorn": "^5.5.0", - "acorn-jsx": "^3.0.0" - } - }, - "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", - "dev": true, - "optional": true, - "requires": { - "estraverse": "^4.0.0" - } - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", - "dev": true, - "optional": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, - "optional": true - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true, - "optional": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true, - "optional": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true, - "optional": true - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "optional": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" - } - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true, - "optional": true - }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true, - "optional": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "optional": true - }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "optional": true, - "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, - "optional": true - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true, - "optional": true - } - } - }, - "eslint-plugin-vue": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-4.7.1.tgz", - "integrity": "sha512-esETKhVMI7Vdli70Wt4bvAwnZBJeM0pxVX9Yb0wWKxdCJc2EADalVYK/q2FzMw8oKN0wPMdqVCKS8kmR89recA==", - "dev": true, - "optional": true, - "requires": { - "vue-eslint-parser": "^2.0.3" - } - }, - "eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", - "dev": true, - "optional": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", - "dev": true, - "optional": true, - "requires": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", - "tmp": "^0.0.33" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "optional": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - } - } - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true - }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, - "optional": true, - "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" - }, - "dependencies": { - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true, - "optional": true - } - } - }, - "flat-cache": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", - "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", - "dev": true, - "optional": true, - "requires": { - "circular-json": "^0.3.1", - "graceful-fs": "^4.1.2", - "rimraf": "~2.6.2", - "write": "^0.2.1" - }, - "dependencies": { - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true, - "optional": true - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", - "dev": true, - "optional": true, - "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.0.4", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rx-lite": "^4.0.8", - "rx-lite-aggregates": "^4.0.8", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true, - "optional": true - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "optional": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true, - "optional": true - }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "optional": true, - "requires": { - "is-promise": "^2.1.0" - } - }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true - }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", - "dev": true, - "optional": true, - "requires": { - "rx-lite": "*" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true, - "optional": true - } - } - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "optional": true - }, - "regexpp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", - "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", - "dev": true, - "optional": true - }, - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true, - "optional": true - }, - "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, - "optional": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true, - "optional": true - }, - "table": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", - "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", - "dev": true, - "optional": true, - "requires": { - "ajv": "^5.2.3", - "ajv-keywords": "^2.1.0", - "chalk": "^2.1.0", - "lodash": "^4.17.4", - "slice-ansi": "1.0.0", - "string-width": "^2.1.1" - } - }, - "vue-eslint-parser": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz", - "integrity": "sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw==", - "dev": true, - "optional": true, - "requires": { - "debug": "^3.1.0", - "eslint-scope": "^3.7.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.2", - "esquery": "^1.0.0", - "lodash": "^4.17.4" - }, - "dependencies": { - "espree": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", - "dev": true, - "optional": true, - "requires": { - "acorn": "^5.5.0", - "acorn-jsx": "^3.0.0" - } - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "optional": true, - "requires": { - "estraverse": "^5.1.0" - } - }, - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true, - "optional": true - } - } - }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true, - "optional": true, - "requires": { - "mkdirp": "^0.5.1" - } - } - } - }, - "@vue/cli-plugin-typescript": { - "version": "3.11.0", - "dev": true, - "requires": { - "@types/webpack-env": "^1.13.9", - "@vue/cli-shared-utils": "^3.11.0", - "fork-ts-checker-webpack-plugin": "^0.5.2", - "globby": "^9.2.0", - "ts-loader": "^5.3.3", - "tslint": "^5.15.0", - "webpack": "^4.0.0", - "yorkie": "^2.0.0" - } - }, - "@vue/cli-plugin-unit-mocha": { - "version": "3.11.0", - "dev": true, - "requires": { - "@vue/cli-shared-utils": "^3.11.0", - "jsdom": "^13.2.0", - "jsdom-global": "^3.0.2", - "mocha": "^5.2.0", - "mocha-webpack": "^2.0.0-beta.0" - } - }, - "@vue/cli-service": { - "version": "3.11.0", - "dev": true, - "requires": { - "@intervolga/optimize-cssnano-plugin": "^1.0.5", - "@soda/friendly-errors-webpack-plugin": "^1.7.1", - "@vue/cli-overlay": "^3.11.0", - "@vue/cli-shared-utils": "^3.11.0", - "@vue/component-compiler-utils": "^3.0.0", - "@vue/preload-webpack-plugin": "^1.1.0", - "@vue/web-component-wrapper": "^1.2.0", - "acorn": "^6.1.1", - "acorn-walk": "^6.1.1", - "address": "^1.0.3", - "autoprefixer": "^9.5.1", - "browserslist": "^4.5.4", - "cache-loader": "^2.0.1", - "case-sensitive-paths-webpack-plugin": "^2.2.0", - "chalk": "^2.4.2", - "cli-highlight": "^2.1.0", - "clipboardy": "^2.0.0", - "cliui": "^5.0.0", - "copy-webpack-plugin": "^4.6.0", - "css-loader": "^1.0.1", - "cssnano": "^4.1.10", - "current-script-polyfill": "^1.0.0", - "debug": "^4.1.1", - "default-gateway": "^5.0.2", - "dotenv": "^7.0.0", - "dotenv-expand": "^5.1.0", - "escape-string-regexp": "^1.0.5", - "file-loader": "^3.0.1", - "fs-extra": "^7.0.1", - "globby": "^9.2.0", - "hash-sum": "^1.0.2", - "html-webpack-plugin": "^3.2.0", - "launch-editor-middleware": "^2.2.1", - "lodash.defaultsdeep": "^4.6.1", - "lodash.mapvalues": "^4.6.0", - "lodash.transform": "^4.6.0", - "mini-css-extract-plugin": "^0.6.0", - "minimist": "^1.2.0", - "ora": "^3.4.0", - "portfinder": "^1.0.20", - "postcss-loader": "^3.0.0", - "read-pkg": "^5.0.0", - "semver": "^6.0.0", - "slash": "^2.0.0", - "source-map-url": "^0.4.0", - "ssri": "^6.0.1", - "string.prototype.padend": "^3.0.0", - "terser-webpack-plugin": "^1.2.3", - "thread-loader": "^2.1.2", - "url-loader": "^1.1.2", - "vue-loader": "^15.7.0", - "webpack": "^4.0.0", - "webpack-bundle-analyzer": "^3.3.0", - "webpack-chain": "^4.11.0", - "webpack-dev-server": "^3.4.1", - "webpack-merge": "^4.2.1" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - } - } - }, - "@vue/cli-shared-utils": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-3.11.0.tgz", - "integrity": "sha512-D7pst/4v9H1DD66fLxlZOwRR09R03MV0ROdKxBHmh3FmnApCA/RiaolFA/8w+B3CnevYMlV3SJ5fOAgedbswbA==", - "dev": true, - "requires": { - "@hapi/joi": "^15.0.1", - "chalk": "^2.4.1", - "execa": "^1.0.0", - "launch-editor": "^2.2.1", - "lru-cache": "^5.1.1", - "node-ipc": "^9.1.1", - "open": "^6.3.0", - "ora": "^3.4.0", - "request": "^2.87.0", - "request-promise-native": "^1.0.7", - "semver": "^6.0.0", - "string.prototype.padstart": "^3.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dev": true, - "requires": { - "lodash": "^4.17.19" - } - }, - "request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "dev": true, - "requires": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@vue/component-compiler-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.0.0.tgz", - "integrity": "sha512-am+04/0UX7ektcmvhYmrf84BDVAD8afFOf4asZjN84q8xzxFclbk5x0MtxuKGfp+zjN5WWPJn3fjFAWtDdIGSw==", - "dev": true, - "requires": { - "consolidate": "^0.15.1", - "hash-sum": "^1.0.2", - "lru-cache": "^4.1.2", - "merge-source-map": "^1.1.0", - "postcss": "^7.0.14", - "postcss-selector-parser": "^5.0.0", - "prettier": "1.16.3", - "source-map": "~0.6.1", - "vue-template-es2015-compiler": "^1.9.0" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "dev": true - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dev": true, - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "@vue/eslint-config-typescript": { - "version": "4.0.0", - "dev": true, - "requires": { - "@typescript-eslint/eslint-plugin": "^1.1.0", - "@typescript-eslint/parser": "^1.1.0" - }, - "dependencies": { - "@typescript-eslint/eslint-plugin": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.13.0.tgz", - "integrity": "sha512-WQHCozMnuNADiqMtsNzp96FNox5sOVpU8Xt4meaT4em8lOG1SrOv92/mUbEHQVh90sldKSfcOc/I0FOb/14G1g==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "1.13.0", - "eslint-utils": "^1.3.1", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^2.0.1", - "tsutils": "^3.7.0" - } - }, - "@typescript-eslint/parser": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-1.13.0.tgz", - "integrity": "sha512-ITMBs52PCPgLb2nGPoeT4iU3HdQZHcPaZVw+7CsFagRJHUhyeTgorEwHXhFf3e7Evzi8oujKNpHc8TONth8AdQ==", - "dev": true, - "requires": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "1.13.0", - "@typescript-eslint/typescript-estree": "1.13.0", - "eslint-visitor-keys": "^1.0.0" - } - } - } - }, - "@vue/preload-webpack-plugin": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.0.tgz", - "integrity": "sha512-rcn2KhSHESBFMPj5vc5X2pI9bcBNQQixvJXhD5gZ4rN2iym/uH2qfDSQfUS5+qwiz0a85TCkeUs6w6jxFDudbw==", - "dev": true - }, - "@vue/test-utils": { - "version": "1.0.0-beta.29", - "dev": true, - "requires": { - "dom-event-types": "^1.0.0", - "lodash": "^4.17.4" - } - }, - "@vue/web-component-wrapper": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.2.0.tgz", - "integrity": "sha512-Xn/+vdm9CjuC9p3Ae+lTClNutrVhsXpzxvoTXXtoys6kVRX9FkueSUAqSWAyZntmVLlR4DosBV4pH8y5Z/HbUw==", - "dev": true - }, - "@webassemblyjs/ast": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", - "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", - "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", - "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", - "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", - "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.8.5" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", - "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", - "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "mamacro": "^0.0.3" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", - "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", - "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", - "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", - "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", - "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", - "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/helper-wasm-section": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-opt": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "@webassemblyjs/wast-printer": "1.8.5" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", - "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", - "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", - "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", - "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/floating-point-hex-parser": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-code-frame": "1.8.5", - "@webassemblyjs/helper-fsm": "1.8.5", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", - "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - }, - "dependencies": { - "mime-db": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", - "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", - "dev": true - }, - "mime-types": { - "version": "2.1.30", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", - "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", - "dev": true, - "requires": { - "mime-db": "1.47.0" - } - } - } - }, - "acorn": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", - "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==", - "dev": true - }, - "acorn-globals": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", - "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", - "dev": true, - "requires": { - "acorn": "^6.0.1", - "acorn-walk": "^6.0.1" - } - }, - "acorn-jsx": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.2.tgz", - "integrity": "sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw==", - "dev": true - }, - "acorn-walk": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz", - "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==", - "dev": true - }, - "address": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/address/-/address-1.0.3.tgz", - "integrity": "sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg==", - "dev": true - }, - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true - }, - "ajv-keywords": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", - "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", - "dev": true, - "optional": true - }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", - "dev": true - }, - "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "dev": true - }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", - "dev": true - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "array-from": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", - "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dev": true, - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true - }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true - }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "autoprefixer": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.6.1.tgz", - "integrity": "sha512-aVo5WxR3VyvyJxcJC3h4FKfwCQvQWb1tSI5VHNibddCVWrcD1NvlxEweg3TSgiPztMnWfjpy2FURKA2kvDE+Tw==", - "dev": true, - "requires": { - "browserslist": "^4.6.3", - "caniuse-lite": "^1.0.30000980", - "chalk": "^2.4.2", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.17", - "postcss-value-parser": "^4.0.0" - } - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, - "axios": { - "version": "0.18.0", - "requires": { - "follow-redirects": "^1.3.0", - "is-buffer": "^1.1.5" - } - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "babel-eslint": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.1.tgz", - "integrity": "sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "^1.0.0" - }, - "dependencies": { - "eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - } - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - }, - "dependencies": { - "core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "dev": true - } - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "bfj": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz", - "integrity": "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "check-types": "^8.0.3", - "hoopy": "^0.1.4", - "tryer": "^1.0.1" - } - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", - "dev": true - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true - } - } - }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "dev": true, - "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - }, - "dependencies": { - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - } - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dev": true, - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "requires": { - "pako": "~1.0.5" - } - }, - "browserslist": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.7.0.tgz", - "integrity": "sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30000989", - "electron-to-chromium": "^1.3.247", - "node-releases": "^1.1.29" - } - }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - }, - "cacache": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", - "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", - "dev": true, - "requires": { - "bluebird": "^3.5.1", - "chownr": "^1.0.1", - "glob": "^7.1.2", - "graceful-fs": "^4.1.11", - "lru-cache": "^4.1.1", - "mississippi": "^2.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", - "ssri": "^5.2.4", - "unique-filename": "^1.1.0", - "y18n": "^4.0.0" - }, - "dependencies": { - "ssri": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", - "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.1" - } - } - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "cache-loader": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/cache-loader/-/cache-loader-2.0.1.tgz", - "integrity": "sha512-V99T3FOynmGx26Zom+JrVBytLBsmUCzVG2/4NnUKgvXN4bEV42R1ERl1IyiH/cvFIDA1Ytq2lPZ9tXDSahcQpQ==", - "dev": true, - "requires": { - "loader-utils": "^1.1.0", - "mkdirp": "^0.5.1", - "neo-async": "^2.6.0", - "normalize-path": "^3.0.0", - "schema-utils": "^1.0.0" - }, - "dependencies": { - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - } - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", - "dev": true - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "dev": true, - "requires": { - "callsites": "^2.0.0" - }, - "dependencies": { - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - } - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", - "dev": true, - "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001208", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001208.tgz", - "integrity": "sha512-OE5UE4+nBOro8Dyvv0lfx+SRtfVIOM9uhKqFmJeUbGriqhhStgp1A0OyBpgy3OUF8AhYCT+PVwPC1gMl2ZcQMA==", - "dev": true - }, - "case-sensitive-paths-webpack-plugin": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.2.0.tgz", - "integrity": "sha512-u5ElzokS8A1pm9vM3/iDgTcI3xqHxuCao94Oz8etI3cf0Tio0p8izkDYbTIn09uP3yUUr6+veaE6IkjnTYS46g==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chai": { - "version": "4.2.0", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.0", - "type-detect": "^4.0.5" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true - }, - "check-types": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz", - "integrity": "sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==", - "dev": true - }, - "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" - }, - "dependencies": { - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true - } - } - }, - "chownr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", - "dev": true - }, - "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "clamp": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/clamp/-/clamp-1.0.1.tgz", - "integrity": "sha1-ZqDmQBGBbjcZaCj9yMjBRzEshjQ=" - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", - "dev": true, - "requires": { - "source-map": "~0.6.0" - } - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-highlight": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.1.tgz", - "integrity": "sha512-0y0VlNmdD99GXZHYnvrQcmHxP8Bi6T00qucGgBgGv4kJ0RyDthNnnFPupHV7PYv/OXSVk+azFbOeaW6+vGmx9A==", - "dev": true, - "requires": { - "chalk": "^2.3.0", - "highlight.js": "^9.6.0", - "mz": "^2.4.0", - "parse5": "^4.0.0", - "yargs": "^13.0.0" - }, - "dependencies": { - "highlight.js": { - "version": "9.13.1", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.13.1.tgz", - "integrity": "sha512-Sc28JNQNDzaH6PORtRLMvif9RSn1mYuOoX3omVjnb0+HbpPygU2ALBI0R/wsiqCb4/fcp07Gdo8g+fhtFrQl6A==", - "dev": true - }, - "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", - "dev": true - } - } - }, - "cli-spinners": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz", - "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==", - "dev": true - }, - "cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true - }, - "clipboardy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.1.0.tgz", - "integrity": "sha512-2pzOUxWcLlXWtn+Jd6js3o12TysNOOVes/aQfg+MT/35vrxWzedHlLwyoJpXjsFKWm95BTNEcMGD9+a7mKzZkQ==", - "dev": true, - "requires": { - "arch": "^2.1.1", - "execa": "^1.0.0" - } - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dev": true, - "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", - "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", - "dev": true, - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.4" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "color-string": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", - "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", - "dev": true, - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "requires": { - "mime-db": ">= 1.43.0 < 2" - }, - "dependencies": { - "mime-db": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", - "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", - "dev": true - } - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "consolidate": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", - "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", - "dev": true, - "requires": { - "bluebird": "^3.1.1" - } - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "copy-webpack-plugin": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz", - "integrity": "sha512-Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA==", - "dev": true, - "requires": { - "cacache": "^10.0.4", - "find-cache-dir": "^1.0.0", - "globby": "^7.1.1", - "is-glob": "^4.0.0", - "loader-utils": "^1.1.0", - "minimatch": "^3.0.4", - "p-limit": "^1.0.0", - "serialize-javascript": "^1.4.0" - }, - "dependencies": { - "globby": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", - "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "dir-glob": "^2.0.0", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" - } - }, - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", - "dev": true - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - } - } - }, - "core-js": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-0.8.4.tgz", - "integrity": "sha1-wiZl8eDRucPF4bCNq9HxCGleT88=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dev": true, - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, - "dependencies": { - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } - } - }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", - "dev": true - }, - "css-declaration-sorter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", - "dev": true, - "requires": { - "postcss": "^7.0.1", - "timsort": "^0.3.0" - } - }, - "css-loader": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-1.0.1.tgz", - "integrity": "sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw==", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "css-selector-tokenizer": "^0.7.0", - "icss-utils": "^2.1.0", - "loader-utils": "^1.0.2", - "lodash": "^4.17.11", - "postcss": "^6.0.23", - "postcss-modules-extract-imports": "^1.2.0", - "postcss-modules-local-by-default": "^1.2.0", - "postcss-modules-scope": "^1.1.0", - "postcss-modules-values": "^1.3.0", - "postcss-value-parser": "^3.3.0", - "source-list-map": "^2.0.0" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", - "dev": true - }, - "css-selector-tokenizer": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", - "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "fastparse": "^1.1.2" - } - }, - "css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "dev": true, - "requires": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - } - }, - "css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - }, - "cssnano": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", - "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", - "dev": true, - "requires": { - "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.7", - "is-resolvable": "^1.0.0", - "postcss": "^7.0.0" - } - }, - "cssnano-preset-default": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", - "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", - "dev": true, - "requires": { - "css-declaration-sorter": "^4.0.1", - "cssnano-util-raw-cache": "^4.0.1", - "postcss": "^7.0.0", - "postcss-calc": "^7.0.1", - "postcss-colormin": "^4.0.3", - "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.2", - "postcss-discard-duplicates": "^4.0.2", - "postcss-discard-empty": "^4.0.1", - "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.11", - "postcss-merge-rules": "^4.0.3", - "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.2", - "postcss-minify-params": "^4.0.2", - "postcss-minify-selectors": "^4.0.2", - "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.2", - "postcss-normalize-positions": "^4.0.2", - "postcss-normalize-repeat-style": "^4.0.2", - "postcss-normalize-string": "^4.0.2", - "postcss-normalize-timing-functions": "^4.0.2", - "postcss-normalize-unicode": "^4.0.1", - "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.2", - "postcss-ordered-values": "^4.1.2", - "postcss-reduce-initial": "^4.0.3", - "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.3", - "postcss-unique-selectors": "^4.0.1" - } - }, - "cssnano-util-get-arguments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", - "dev": true - }, - "cssnano-util-get-match": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", - "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", - "dev": true - }, - "cssnano-util-raw-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "cssnano-util-same-parent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", - "dev": true - }, - "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dev": true, - "requires": { - "css-tree": "^1.1.2" - }, - "dependencies": { - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - } - } - }, - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "cssstyle": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", - "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", - "dev": true, - "requires": { - "cssom": "0.3.x" - } - }, - "current-script-polyfill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/current-script-polyfill/-/current-script-polyfill-1.0.0.tgz", - "integrity": "sha1-8xz35PPiGLBybnOMqSoC00iO9hU=", - "dev": true - }, - "cyclist": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", - "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", - "dev": true - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-urls": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", - "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", - "dev": true, - "requires": { - "abab": "^2.0.0", - "whatwg-mimetype": "^2.2.0", - "whatwg-url": "^7.0.0" - } - }, - "de-indent": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dev": true, - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - }, - "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } - } - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "default-gateway": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-5.0.3.tgz", - "integrity": "sha512-zW+ld9xtN0+q48wIwhitUzhfERJN7BPgvijPhuCKG6bfWqnoqtSNSnrXfvAME2ZJLpgYpz6UorpBddGfLzrJBw==", - "dev": true, - "requires": { - "execa": "^2.0.3" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "execa": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-2.1.0.tgz", - "integrity": "sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^3.0.0", - "onetime": "^5.1.0", - "p-finally": "^2.0.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, - "npm-run-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-3.1.0.tgz", - "integrity": "sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "p-finally": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", - "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "dependencies": { - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "detect-node": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.5.tgz", - "integrity": "sha512-qi86tE6hRcFHy8jI1m2VG+LaPUR1LhqDa5G8tVjuUXmOrpuAgqsA1pN0+ldgr3aKUH+QLI9hCY/OcRYisERejw==", - "dev": true - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "dir-glob": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", - "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", - "dev": true, - "requires": { - "path-type": "^3.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true - }, - "dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", - "dev": true, - "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "dev": true, - "requires": { - "buffer-indexof": "^1.0.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", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dev": true, - "requires": { - "utila": "~0.4" - } - }, - "dom-event-types": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dom-event-types/-/dom-event-types-1.0.0.tgz", - "integrity": "sha512-2G2Vwi2zXTHBGqXHsJ4+ak/iP0N8Ar+G8a7LiD2oup5o4sQWytwqqrZu/O6hIMV0KMID2PL69OhpshLO0n7UJQ==", - "dev": true - }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true - } - } - }, - "dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", - "dev": true - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", - "dev": true, - "requires": { - "webidl-conversions": "^4.0.2" - } - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "dotenv": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz", - "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==", - "dev": true - }, - "dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", - "dev": true - }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "duplexify": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz", - "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "easy-stack": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.1.tgz", - "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "ejs": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", - "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.710", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.710.tgz", - "integrity": "sha512-b3r0E2o4yc7mNmBeJviejF1rEx49PUBi+2NPa7jHEX3arkAXnVgLhR0YmV8oi6/Qf3HH2a8xzQmCjHNH0IpXWQ==", - "dev": true - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enhanced-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", - "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", - "tapable": "^1.0.0" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "error-stack-parser": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", - "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", - "dev": true, - "requires": { - "stackframe": "^1.1.1" - } - }, - "es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" - }, - "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "eslint": { - "version": "5.16.0", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.9.1", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^4.0.3", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^5.0.1", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.7.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "inquirer": "^6.2.2", - "js-yaml": "^3.13.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.11", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^5.5.1", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "import-fresh": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz", - "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - } - } - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "eslint-loader": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.2.1.tgz", - "integrity": "sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==", - "dev": true, - "requires": { - "loader-fs-cache": "^1.0.0", - "loader-utils": "^1.0.2", - "object-assign": "^4.0.1", - "object-hash": "^1.1.4", - "rimraf": "^2.6.1" - } - }, - "eslint-plugin-vue": { - "version": "5.2.3", - "dev": true, - "requires": { - "vue-eslint-parser": "^5.0.0" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "dependencies": { - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - } - } - }, - "eslint-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz", - "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.0.0" - } - }, - "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", - "dev": true - }, - "espree": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", - "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", - "dev": true, - "requires": { - "acorn": "^6.0.7", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "event-pubsub": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/event-pubsub/-/event-pubsub-4.3.0.tgz", - "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==", - "dev": true - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true - }, - "eventsource": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", - "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", - "dev": true, - "requires": { - "original": "^1.0.0" - } - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dev": true, - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "fast-glob": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", - "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", - "dev": true, - "requires": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.1.2", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.3", - "micromatch": "^3.1.10" - } - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fastparse": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", - "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", - "dev": true - }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "figgy-pudding": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", - "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", - "dev": true - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, - "requires": { - "flat-cache": "^2.0.1" - } - }, - "file-loader": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-3.0.1.tgz", - "integrity": "sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==", - "dev": true, - "requires": { - "loader-utils": "^1.0.2", - "schema-utils": "^1.0.0" - } - }, - "file-saver": { - "version": "2.0.2" - }, - "filesize": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", - "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", - "dev": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - } - }, - "find-cache-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", - "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^1.0.0", - "pkg-dir": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - } - } - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, - "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - }, - "dependencies": { - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - }, - "flush-write-stream": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", - "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.4" - } - }, - "follow-redirects": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.6.1.tgz", - "integrity": "sha512-t2JCjbzxQpWvbhts3l6SH1DKzSrx8a+SsaVf4h6bG4kOXUuPYS/kg2Lr4gQSb7eemaHqJkOThF1BGyjlUkO1GQ==", - "requires": { - "debug": "=3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "fork-ts-checker-webpack-plugin": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-0.5.2.tgz", - "integrity": "sha512-a5IG+xXyKnpruI0CP/anyRLAoxWtp3lzdG6flxicANnoSzz64b12dJ7ASAVRrI2OaWwZR2JyBaMHFQqInhWhIw==", - "dev": true, - "requires": { - "babel-code-frame": "^6.22.0", - "chalk": "^2.4.1", - "chokidar": "^2.0.4", - "micromatch": "^3.1.10", - "minimatch": "^3.0.4", - "tapable": "^1.0.0" - } - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "dependencies": { - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - } - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", - "dev": true - }, - "global": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", - "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", - "dev": true, - "requires": { - "min-document": "^2.19.0", - "process": "~0.5.1" - }, - "dependencies": { - "process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=", - "dev": true - } - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "globby": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", - "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "array-union": "^1.0.2", - "dir-glob": "^2.2.2", - "fast-glob": "^2.2.6", - "glob": "^7.1.3", - "ignore": "^4.0.3", - "pify": "^4.0.1", - "slash": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - } - } - }, - "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "gzip-size": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", - "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", - "dev": true, - "requires": { - "duplexer": "^0.1.1", - "pify": "^4.0.1" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - } - } - }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "dev": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - } - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, - "hash-sum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", - "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", - "dev": true - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", - "dev": true - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "hoopy": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", - "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", - "dev": true - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", - "dev": true - }, - "hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", - "dev": true - }, - "html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.1" - } - }, - "html-entities": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", - "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", - "dev": true - }, - "html-minifier": { - "version": "3.5.21", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", - "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", - "dev": true, - "requires": { - "camel-case": "3.0.x", - "clean-css": "4.2.x", - "commander": "2.17.x", - "he": "1.2.x", - "param-case": "2.1.x", - "relateurl": "0.2.x", - "uglify-js": "3.4.x" - } - }, - "html-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz", - "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", - "dev": true, - "requires": { - "html-minifier": "^3.2.3", - "loader-utils": "^0.2.16", - "lodash": "^4.17.3", - "pretty-error": "^2.0.2", - "tapable": "^1.0.0", - "toposort": "^1.0.0", - "util.promisify": "1.0.0" - }, - "dependencies": { - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true, - "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0", - "object-assign": "^4.0.1" - } - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - } - } - }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dev": true, - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } - } - }, - "http-parser-js": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", - "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", - "dev": true - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-middleware": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.2.tgz", - "integrity": "sha512-aYk1rTKqLTus23X3L96LGNCGNgWpG4cG0XoZIT1GUPhhulEHX/QalnO6Vbo+WmKWi4AL2IidjuC0wZtbpg0yhQ==", - "dev": true, - "requires": { - "http-proxy": "^1.18.1", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-replace-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", - "dev": true - }, - "icss-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", - "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", - "dev": true, - "requires": { - "postcss": "^6.0.1" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "import-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", - "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", - "dev": true, - "requires": { - "import-from": "^2.1.0" - } - }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dev": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "import-from": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", - "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - } - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "inquirer": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", - "dev": true, - "requires": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "dev": true, - "requires": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - }, - "dependencies": { - "default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - } - } - } - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true - }, - "is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arguments": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", - "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", - "dev": true, - "requires": { - "call-bind": "^1.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-bigint": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", - "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", - "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", - "dev": true, - "requires": { - "call-bind": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true - }, - "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", - "dev": true, - "requires": { - "ci-info": "^1.5.0" - } - }, - "is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", - "dev": true, - "requires": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, - "is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-number-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", - "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", - "dev": true - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true - }, - "is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", - "dev": true, - "requires": { - "is-path-inside": "^2.1.0" - } - }, - "is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", - "dev": true, - "requires": { - "path-is-inside": "^1.0.2" - } - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true, - "optional": true - }, - "is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" - } - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", - "dev": true - }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "dev": true, - "requires": { - "has-symbols": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "javascript-stringify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-1.6.0.tgz", - "integrity": "sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM=", - "dev": true - }, - "js-message": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.7.tgz", - "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==", - "dev": true - }, - "js-queue": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/js-queue/-/js-queue-2.0.2.tgz", - "integrity": "sha512-pbKLsbCfi7kriM3s1J4DDCo7jQkI58zPLHi0heXPzPlj0hjUsm+FesPUbE0DSbIVIK503A36aUBoCN7eMFedkA==", - "dev": true, - "requires": { - "easy-stack": "^1.0.1" - } - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "js-yaml": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz", - "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==", - "dev": true, - "optional": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsdom": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-13.2.0.tgz", - "integrity": "sha512-cG1NtMWO9hWpqRNRR3dSvEQa8bFI6iLlqU2x4kwX51FQjp0qus8T9aBaAO6iGp3DeBrhdwuKxckknohkmfvsFw==", - "dev": true, - "requires": { - "abab": "^2.0.0", - "acorn": "^6.0.4", - "acorn-globals": "^4.3.0", - "array-equal": "^1.0.0", - "cssom": "^0.3.4", - "cssstyle": "^1.1.1", - "data-urls": "^1.1.0", - "domexception": "^1.0.1", - "escodegen": "^1.11.0", - "html-encoding-sniffer": "^1.0.2", - "nwsapi": "^2.0.9", - "parse5": "5.1.0", - "pn": "^1.1.0", - "request": "^2.88.0", - "request-promise-native": "^1.0.5", - "saxes": "^3.1.5", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.5.0", - "w3c-hr-time": "^1.0.1", - "w3c-xmlserializer": "^1.0.1", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^7.0.0", - "ws": "^6.1.2", - "xml-name-validator": "^3.0.0" - } - }, - "jsdom-global": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsdom-global/-/jsdom-global-3.0.2.tgz", - "integrity": "sha1-a9KZwTsMRiay2iwDk81DhdYGrLk=", - "dev": true - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "just-extend": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", - "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", - "dev": true - }, - "killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", - "dev": true - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "launch-editor": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.2.1.tgz", - "integrity": "sha512-On+V7K2uZK6wK7x691ycSUbLD/FyKKelArkbaAMSSJU8JmqmhwN2+mnJDNINuJWSrh2L0kDk+ZQtbC/gOWUwLw==", - "dev": true, - "requires": { - "chalk": "^2.3.0", - "shell-quote": "^1.6.1" - } - }, - "launch-editor-middleware": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/launch-editor-middleware/-/launch-editor-middleware-2.2.1.tgz", - "integrity": "sha512-s0UO2/gEGiCgei3/2UN3SMuUj1phjQN8lcpnvgLSz26fAzNWPQ6Nf/kF5IFClnfU2ehp6LrmKdMU/beveO+2jg==", - "dev": true, - "requires": { - "launch-editor": "^2.2.1" - } - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "loader-fs-cache": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz", - "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==", - "dev": true, - "requires": { - "find-cache-dir": "^0.1.1", - "mkdirp": "^0.5.1" - }, - "dependencies": { - "find-cache-dir": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", - "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "mkdirp": "^0.5.1", - "pkg-dir": "^1.0.0" - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "dev": true, - "requires": { - "find-up": "^1.0.0" - } - } - } - }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true - }, - "lodash.defaultsdeep": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", - "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==", - "dev": true - }, - "lodash.mapvalues": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", - "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", - "dev": true - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, - "lodash.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" - }, - "lodash.transform": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz", - "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=", - "dev": true - }, - "lodash.unescape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", - "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=", - "dev": true - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dev": true, - "requires": { - "chalk": "^2.0.1" - } - }, - "loglevel": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", - "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", - "dev": true - }, - "lolex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-3.0.0.tgz", - "integrity": "sha512-hcnW80h3j2lbUfFdMArd5UPA/vxZJ+G8vobd+wg3nVEQA0EigStbYcrG030FJxL6xiDDPEkoMatV9xIh5OecQQ==", - "dev": true - }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", - "dev": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - }, - "dependencies": { - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } - } - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "mamacro": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", - "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", - "dev": true - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "marked": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/marked/-/marked-2.0.1.tgz", - "integrity": "sha512-5+/fKgMv2hARmMW7DOpykr2iLhl0NgjyELk5yn92iE7z8Se1IS9n3UsFm86hFXIkvMBmVxki8+ckcpjBeyo/hw==" - }, - "material-colors": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz", - "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==" - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", - "dev": true - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - }, - "dependencies": { - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true - } - } - }, - "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=", - "dev": true, - "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=", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - } - }, - "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==", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "dev": true - }, - "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", - "dev": true - }, - "mime-types": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", - "dev": true, - "requires": { - "mime-db": "~1.37.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "dev": true, - "requires": { - "dom-walk": "^0.1.0" - } - }, - "mini-css-extract-plugin": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.6.0.tgz", - "integrity": "sha512-79q5P7YGI6rdnVyIAV4NXpBQJFWdkzJxCim3Kog4078fM0piAaFlwocqbejdWtLW1cEzCexPrh6EdyFsPgVdAw==", - "dev": true, - "requires": { - "loader-utils": "^1.1.0", - "normalize-url": "^2.0.1", - "schema-utils": "^1.0.0", - "webpack-sources": "^1.1.0" - }, - "dependencies": { - "normalize-url": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", - "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", - "dev": true, - "requires": { - "prepend-http": "^2.0.0", - "query-string": "^5.0.1", - "sort-keys": "^2.0.0" - } - } - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "mississippi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", - "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^2.0.1", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } - } - }, - "mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", - "dev": true, - "requires": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" - }, - "dependencies": { - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "mocha-webpack": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/mocha-webpack/-/mocha-webpack-2.0.0-beta.0.tgz", - "integrity": "sha512-2ezbW0h5cYWr874F/hzytQCqINxk+GVelMY4xWTSHwwH1LrPAOzjlUljZ+/PhpaP6QeqYbL5x5vK/bnaXqkfEw==", - "dev": true, - "requires": { - "babel-runtime": "^6.18.0", - "chalk": "^2.3.0", - "chokidar": "^2.0.2", - "glob-parent": "^3.1.0", - "globby": "^7.1.1", - "interpret": "^1.0.1", - "is-glob": "^4.0.0", - "loader-utils": "^1.1.0", - "lodash": "^4.3.0", - "memory-fs": "^0.4.1", - "nodent-runtime": "^3.0.3", - "normalize-path": "^2.0.1", - "progress": "^2.0.0", - "source-map-support": "^0.5.0", - "strip-ansi": "^4.0.0", - "toposort": "^1.0.0", - "yargs": "^11.0.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "globby": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", - "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "dir-glob": "^2.0.0", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" - } - }, - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", - "dev": true - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, - "y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", - "dev": true - }, - "yargs": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.1.tgz", - "integrity": "sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.1.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^9.0.2" - } - }, - "yargs-parser": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", - "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", - "dev": true, - "requires": { - "camelcase": "^4.1.0" - } - } - } - }, - "mock-local-storage": { - "version": "1.1.8", - "dev": true, - "requires": { - "core-js": "^0.8.3", - "global": "^4.3.2" - } - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "dev": true, - "requires": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - } - }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "requires": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true - }, - "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "nise": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.8.tgz", - "integrity": "sha512-kGASVhuL4tlAV0tvA34yJYZIVihrUt/5bDwpp4tTluigxUr2bBlJeDXmivb6NuEdFkqvdv/Ybb9dm16PSKUhtw==", - "dev": true, - "requires": { - "@sinonjs/formatio": "^3.1.0", - "just-extend": "^4.0.2", - "lolex": "^2.3.2", - "path-to-regexp": "^1.7.0", - "text-encoding": "^0.6.4" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "lolex": { - "version": "2.7.5", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.5.tgz", - "integrity": "sha512-l9x0+1offnKKIzYVjyXU2SiwhXDLekRzKyhnbyldPHvC7BvLPVpdNUNR2KeMAiCN2D/kLNttZgQD5WjSxuBx3Q==", - "dev": true - }, - "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dev": true, - "requires": { - "isarray": "0.0.1" - } - } - } - }, - "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", - "dev": true, - "requires": { - "lower-case": "^1.1.1" - } - }, - "node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", - "dev": true - }, - "node-ipc": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/node-ipc/-/node-ipc-9.1.4.tgz", - "integrity": "sha512-A+f0mn2KxUt1uRTSd5ktxQUsn2OEhj5evo7NUi/powBzMSZ0vocdzDjlq9QN2v3LH6CJi3e5xAenpZ1QwU5A8g==", - "dev": true, - "requires": { - "event-pubsub": "4.3.0", - "js-message": "1.0.7", - "js-queue": "2.0.2" - } - }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, - "node-releases": { - "version": "1.1.71", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", - "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==", - "dev": true - }, - "nodent-runtime": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/nodent-runtime/-/nodent-runtime-3.2.1.tgz", - "integrity": "sha512-7Ws63oC+215smeKJQCxzrK21VFVlCFBkwl0MOObt0HOpVQXs3u483sAmtkF33nNqZ5rSOQjB76fgyPBmAUrtCA==", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true - }, - "normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", - "dev": true - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, - "requires": { - "boolbase": "~1.0.0" - } - }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-hash": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", - "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==", - "dev": true - }, - "object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", - "dev": true - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", - "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "object.values": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", - "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - }, - "dependencies": { - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - } - } - }, - "open": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", - "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", - "dev": true, - "requires": { - "is-wsl": "^1.1.0" - } - }, - "opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "dev": true - }, - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "dev": true, - "requires": { - "is-wsl": "^1.1.0" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "ora": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", - "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-spinners": "^2.0.0", - "log-symbols": "^2.2.0", - "strip-ansi": "^5.2.0", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "dev": true, - "requires": { - "url-parse": "^1.4.3" - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - }, - "dependencies": { - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - } - } - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - }, - "p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", - "dev": true, - "requires": { - "retry": "^0.12.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "parallel-transform": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", - "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", - "dev": true, - "requires": { - "cyclist": "~0.2.2", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", - "dev": true, - "requires": { - "no-case": "^2.2.0" - } - }, - "parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "parse5": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", - "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", - "dev": true - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", - "dev": true - }, - "pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "pn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", - "dev": true - }, - "portfinder": { - "version": "1.0.20", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz", - "integrity": "sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw==", - "dev": true, - "requires": { - "async": "^1.5.2", - "debug": "^2.2.0", - "mkdirp": "0.5.x" - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-calc": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", - "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", - "dev": true, - "requires": { - "postcss": "^7.0.27", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" - } - }, - "postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "color": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-convert-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-discard-comments": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-duplicates": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-empty": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-overridden": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-load-config": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz", - "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", - "dev": true, - "requires": { - "cosmiconfig": "^5.0.0", - "import-cwd": "^2.0.0" - } - }, - "postcss-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", - "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", - "dev": true, - "requires": { - "loader-utils": "^1.1.0", - "postcss": "^7.0.0", - "postcss-load-config": "^2.0.0", - "schema-utils": "^1.0.0" - } - }, - "postcss-merge-longhand": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", - "dev": true, - "requires": { - "css-color-names": "0.0.4", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "stylehacks": "^4.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-merge-rules": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "cssnano-util-same-parent": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0", - "vendors": "^1.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-minify-font-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-minify-gradients": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", - "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "is-color-stop": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-minify-params": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", - "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "browserslist": "^4.0.0", - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "uniqs": "^2.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-modules-extract-imports": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz", - "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==", - "dev": true, - "requires": { - "postcss": "^6.0.1" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } - } - }, - "postcss-modules-local-by-default": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", - "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", - "dev": true, - "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } - } - }, - "postcss-modules-scope": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", - "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", - "dev": true, - "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } - } - }, - "postcss-modules-values": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", - "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", - "dev": true, - "requires": { - "icss-replace-symbols": "^1.1.0", - "postcss": "^6.0.1" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } - } - }, - "postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-normalize-display-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", - "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", - "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-positions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", - "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-repeat-style": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", - "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-string": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", - "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", - "dev": true, - "requires": { - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-timing-functions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", - "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", - "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-unicode": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-url": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", - "dev": true, - "requires": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-whitespace": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", - "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-ordered-values": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-reduce-initial": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", - "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0" - } - }, - "postcss-reduce-transforms": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", - "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-selector-parser": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", - "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1", - "util-deprecate": "^1.0.2" - } - }, - "postcss-svgo": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", - "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "svgo": "^1.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-unique-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "postcss": "^7.0.0", - "uniqs": "^2.0.0" - } - }, - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true - }, - "prettier": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.3.tgz", - "integrity": "sha512-kn/GU6SMRYPxUakNXhpP0EedT/KmaPzr0H5lIsDogrykbaxOpOfAFfk5XA7DZrJyMAv1wlMV3CPcZruGXVVUZw==", - "dev": true - }, - "pretty-error": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", - "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", - "dev": true, - "requires": { - "lodash": "^4.17.20", - "renderkid": "^2.0.4" - } - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", - "dev": true, - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", - "dev": true - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "dev": true, - "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - } - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "dev": true - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "renderkid": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.5.tgz", - "integrity": "sha512-ccqoLg+HLOHq1vdfYNm4TBeaCDIi1FLt3wGojTDSvdewUv65oTmI3cnT2E4hRjl1gzKZIPK+KZrXzlUYKnR+vQ==", - "dev": true, - "requires": { - "css-select": "^2.0.2", - "dom-converter": "^0.2", - "htmlparser2": "^3.10.1", - "lodash": "^4.17.20", - "strip-ansi": "^3.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - } - } - } - }, - "request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dev": true, - "requires": { - "lodash": "^4.17.19" - } - }, - "request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "dev": true, - "requires": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "dependencies": { - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - } - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "dev": true - }, - "rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", - "dev": true - }, - "rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "dev": true, - "requires": { - "aproba": "^1.1.1" - } - }, - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "saxes": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", - "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", - "dev": true, - "requires": { - "xmlchars": "^2.1.1" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "dependencies": { - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true - } - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", - "dev": true - }, - "selfsigned": { - "version": "1.10.8", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", - "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", - "dev": true, - "requires": { - "node-forge": "^0.10.0" - } - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz", - "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==", - "dev": true - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "dependencies": { - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - } - } - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "dev": true, - "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - } - } - }, - "sinon": { - "version": "7.2.2", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.2.0", - "@sinonjs/formatio": "^3.1.0", - "@sinonjs/samsam": "^3.0.2", - "diff": "^3.5.0", - "lolex": "^3.0.0", - "nise": "^1.4.7", - "supports-color": "^5.5.0" - } - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "sockjs": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", - "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", - "dev": true, - "requires": { - "faye-websocket": "^0.10.0", - "uuid": "^3.0.1" - } - }, - "sockjs-client": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", - "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", - "dev": true, - "requires": { - "debug": "^3.2.5", - "eventsource": "^1.0.7", - "faye-websocket": "~0.11.1", - "inherits": "^2.0.3", - "json3": "^3.3.2", - "url-parse": "^1.4.3" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", - "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", - "dev": true - }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "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 - } - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "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 - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true - }, - "stackframe": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", - "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "string.prototype.padend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz", - "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.4.3", - "function-bind": "^1.0.2" - } - }, - "string.prototype.padstart": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.padstart/-/string.prototype.padstart-3.1.2.tgz", - "integrity": "sha512-HDpngIP3pd0DeazrfqzuBrQZa+D2arKWquEHfGt5LzVjd+roLC3cjqVI0X8foaZz5rrrhcu8oJAQamW8on9dqw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true - }, - "is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } - } - }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string_decoder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", - "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - } - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "stylehacks": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", - "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - }, - "dependencies": { - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } - } - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dev": true, - "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "tapable": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz", - "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==", - "dev": true - }, - "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - } - } - }, - "terser-webpack-plugin": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz", - "integrity": "sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==", - "dev": true, - "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^1.7.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "dependencies": { - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "serialize-javascript": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz", - "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==", - "dev": true - } - } - }, - "text-encoding": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", - "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=", - "dev": true - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "requires": { - "any-promise": "^1.0.0" - } - }, - "thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", - "dev": true, - "requires": { - "thenify": ">= 3.1.0 < 4" - } - }, - "thread-loader": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-2.1.3.tgz", - "integrity": "sha512-wNrVKH2Lcf8ZrWxDF/khdlLlsTMczdcwPA9VEK4c2exlEPynYWxi9op3nPTo5lAnDIkE0rQEB3VBP+4Zncc9Hg==", - "dev": true, - "requires": { - "loader-runner": "^2.3.1", - "loader-utils": "^1.1.0", - "neo-async": "^2.6.0" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "dev": true, - "requires": { - "setimmediate": "^1.0.4" - } - }, - "timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", - "dev": true - }, - "tinycolor2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz", - "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=" - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true - }, - "toposort": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz", - "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", - "dev": true - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "tryer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", - "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", - "dev": true - }, - "ts-loader": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-5.4.5.tgz", - "integrity": "sha512-XYsjfnRQCBum9AMRZpk2rTYSVpdZBpZK+kDh0TeT3kxmQNBDVIeUjdPjY5RZry4eIAb8XHc4gYSUiUWPYvzSRw==", - "dev": true, - "requires": { - "chalk": "^2.3.0", - "enhanced-resolve": "^4.0.0", - "loader-utils": "^1.0.2", - "micromatch": "^3.1.4", - "semver": "^5.0.1" - } - }, - "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", - "dev": true - }, - "tslint": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.0.tgz", - "integrity": "sha512-2vqIvkMHbnx8acMogAERQ/IuINOq6DFqgF8/VDvhEkBqQh/x6SP0Y+OHnKth9/ZcHQSroOZwUQSN18v8KKF0/g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.29.0" - }, - "dependencies": { - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - } - } - }, - "tsutils": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", - "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "dependencies": { - "mime-db": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", - "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", - "dev": true - }, - "mime-types": { - "version": "2.1.30", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", - "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", - "dev": true, - "requires": { - "mime-db": "1.47.0" - } - } - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "typescript": { - "version": "3.6.3", - "dev": true - }, - "uglify-js": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", - "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", - "dev": true, - "requires": { - "commander": "~2.19.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true - } - } - }, - "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, - "uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", - "dev": true - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", - "dev": true - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true - }, - "upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", - "dev": true - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "url-loader": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.1.2.tgz", - "integrity": "sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==", - "dev": true, - "requires": { - "loader-utils": "^1.1.0", - "mime": "^2.0.3", - "schema-utils": "^1.0.0" - } - }, - "url-parse": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", - "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", - "dev": true, - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - } - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - }, - "v-clipboard": { - "version": "2.2.1" - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, - "vendors": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, - "vue": { - "version": "2.5.22" - }, - "vue-color": { - "version": "2.7.0", - "requires": { - "clamp": "^1.0.1", - "lodash.throttle": "^4.0.0", - "material-colors": "^1.0.0", - "tinycolor2": "^1.1.2" - } - }, - "vue-eslint-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-5.0.0.tgz", - "integrity": "sha512-JlHVZwBBTNVvzmifwjpZYn0oPWH2SgWv5dojlZBsrhablDu95VFD+hriB1rQGwbD+bms6g+rAFhQHk6+NyiS6g==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "eslint-scope": "^4.0.0", - "eslint-visitor-keys": "^1.0.0", - "espree": "^4.1.0", - "esquery": "^1.0.1", - "lodash": "^4.17.11" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "espree": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz", - "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==", - "dev": true, - "requires": { - "acorn": "^6.0.2", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "vue-hot-reload-api": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", - "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", - "dev": true - }, - "vue-loader": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.7.1.tgz", - "integrity": "sha512-fwIKtA23Pl/rqfYP5TSGK7gkEuLhoTvRYW+TU7ER3q9GpNLt/PjG5NLv3XHRDiTg7OPM1JcckBgds+VnAc+HbA==", - "dev": true, - "requires": { - "@vue/component-compiler-utils": "^3.0.0", - "hash-sum": "^1.0.2", - "loader-utils": "^1.1.0", - "vue-hot-reload-api": "^2.3.0", - "vue-style-loader": "^4.1.0" - } - }, - "vue-notification": { - "version": "1.3.14" - }, - "vue-property-decorator": { - "version": "7.3.0", - "requires": { - "vue-class-component": "^6.2.0" - }, - "dependencies": { - "vue-class-component": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/vue-class-component/-/vue-class-component-6.3.2.tgz", - "integrity": "sha512-cH208IoM+jgZyEf/g7mnFyofwPDJTM/QvBNhYMjqGB8fCsRyTf68rH2ISw/G20tJv+5mIThQ3upKwoL4jLTr1A==" - } - } - }, - "vue-router": { - "version": "3.0.2" - }, - "vue-style-loader": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz", - "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", - "dev": true, - "requires": { - "hash-sum": "^1.0.2", - "loader-utils": "^1.0.2" - } - }, - "vue-template-compiler": { - "version": "2.5.22", - "dev": true, - "requires": { - "de-indent": "^1.0.2", - "he": "^1.1.0" - } - }, - "vue-template-es2015-compiler": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", - "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", - "dev": true - }, - "vuetify": { - "version": "1.4.2" - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", - "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", - "dev": true, - "requires": { - "domexception": "^1.0.1", - "webidl-conversions": "^4.0.2", - "xml-name-validator": "^3.0.0" - } - }, - "watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "dev": true, - "requires": { - "chokidar": "^3.4.1", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.1" - }, - "dependencies": { - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "optional": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "optional": 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, - "optional": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.3.1", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - } - }, - "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, - "optional": 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, - "optional": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "optional": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "optional": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "dev": true, - "optional": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "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, - "optional": true, - "requires": { - "is-number": "^7.0.0" - } - } - } - }, - "watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", - "dev": true, - "optional": true, - "requires": { - "chokidar": "^2.1.8" - }, - "dependencies": { - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "optional": true - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, - "optional": true - } - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "webpack": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.0.tgz", - "integrity": "sha512-yNV98U4r7wX1VJAj5kyMsu36T8RPPQntcb5fJLOsMz/pt/WrKC0Vp1bAlqPLkA1LegSwQwf6P+kAbyhRKVQ72g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/wasm-edit": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "acorn": "^6.2.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.1", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.1", - "watchpack": "^1.6.0", - "webpack-sources": "^1.4.1" - }, - "dependencies": { - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true - } - } - }, - "webpack-bundle-analyzer": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.5.2.tgz", - "integrity": "sha512-g9spCNe25QYUVqHRDkwG414GTok2m7pTTP0wr6l0J50Z3YLS04+BGodTqqoVBL7QfU/U/9p/oiI5XFOyfZ7S/A==", - "dev": true, - "requires": { - "acorn": "^6.0.7", - "acorn-walk": "^6.1.1", - "bfj": "^6.1.1", - "chalk": "^2.4.1", - "commander": "^2.18.0", - "ejs": "^2.6.1", - "express": "^4.16.3", - "filesize": "^3.6.1", - "gzip-size": "^5.0.0", - "lodash": "^4.17.15", - "mkdirp": "^0.5.1", - "opener": "^1.5.1", - "ws": "^6.0.0" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - } - } - }, - "webpack-chain": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/webpack-chain/-/webpack-chain-4.12.1.tgz", - "integrity": "sha512-BCfKo2YkDe2ByqkEWe1Rw+zko4LsyS75LVr29C6xIrxAg9JHJ4pl8kaIZ396SUSNp6b4815dRZPSTAS8LlURRQ==", - "dev": true, - "requires": { - "deepmerge": "^1.5.2", - "javascript-stringify": "^1.6.0" - }, - "dependencies": { - "deepmerge": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz", - "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==", - "dev": true - } - } - }, - "webpack-dev-middleware": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", - "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", - "dev": true, - "requires": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - } - }, - "webpack-dev-server": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.8.1.tgz", - "integrity": "sha512-9F5DnfFA9bsrhpUCAfQic/AXBVHvq+3gQS+x6Zj0yc1fVVE0erKh2MV4IV12TBewuTrYeeTIRwCH9qLMvdNvTw==", - "dev": true, - "requires": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.1.8", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", - "express": "^4.17.1", - "html-entities": "^1.2.1", - "http-proxy-middleware": "^0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.2", - "killable": "^1.0.1", - "loglevel": "^1.6.4", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.24", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.6", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "0.3.19", - "sockjs-client": "1.4.0", - "spdy": "^4.0.1", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.1", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "12.0.5" - }, - "dependencies": { - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true - }, - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "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 - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "dev": true, - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - }, - "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" - } - }, - "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "dev": true, - "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - } - }, - "webpack-merge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", - "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", - "dev": true, - "requires": { - "lodash": "^4.17.15" - } - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "requires": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "dependencies": { - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - } - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true, - "optional": true - }, - "worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dev": true, - "requires": { - "errno": "~0.1.7" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, - "ws": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.2.tgz", - "integrity": "sha512-rfUqzvz0WxmSXtJpPMX2EeASXabOrSMk1ruMOV3JBTBjo4ac2lDjGGsbQSyxj8Odhw5fBib8ZKEjDNvgouNKYw==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", - "dev": true - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - } - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "yorkie": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yorkie/-/yorkie-2.0.0.tgz", - "integrity": "sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw==", - "dev": true, - "requires": { - "execa": "^0.8.0", - "is-ci": "^1.0.10", - "normalize-path": "^1.0.0", - "strip-indent": "^2.0.0" - }, - "dependencies": { - "execa": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", - "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "normalize-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz", - "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=", - "dev": true - } - } - } - } -} diff --git a/grady/frontend/package.json b/grady/frontend/package.json deleted file mode 100644 index 6ed231a3..00000000 --- a/grady/frontend/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "frontend", - "version": "0.1.0", - "private": true, - "description": "Vue.js frontend for Grady", - "author": "robinwilliam.hundt <robinwilliam.hundt@stud.uni-goettingen.de>", - "scripts": { - "serve": "vue-cli-service serve", - "build": "vue-cli-service build", - "lint": "vue-cli-service lint" - }, - "dependencies": { - "axios": "^0.18.0", - "file-saver": "^2.0.2", - "highlight.js": "^9.12.0", - "v-clipboard": "^2.0.1", - "vue": "^2.6.12", - "vue-class-component": "^6.0.0", - "vue-notification": "^1.3.12", - "vue-property-decorator": "^7.3.0", - "vue-router": "^3.0.1", - "vuetify": "^2.4.5", - "vuex": "^3.0.1", - "vuex-typex": "https://github.com/robinhundt/vuex-typex.git" - }, - "devDependencies": { - "@types/file-saver": "^2.0.1", - "@types/highlight.js": "^9.12.3", - "@typescript-eslint/eslint-plugin": "^4.13.0", - "@typescript-eslint/parser": "^4.13.0", - "@vue/cli-plugin-eslint": "^3.11.0", - "@vue/cli-plugin-typescript": "^4.5.10", - "@vue/cli-service": "^3.11.0", - "@vue/eslint-config-typescript": "^4.0.0", - "eslint": "^5.16.0", - "eslint-plugin-vue": "^5.0.0", - "typescript": "^4.1.3", - "vue-template-compiler": "^2.6.12", - "webpack": "^4.41.0" - } -} diff --git a/grady/frontend/src/App.vue b/grady/frontend/src/App.vue deleted file mode 100644 index 854e12bd..00000000 --- a/grady/frontend/src/App.vue +++ /dev/null @@ -1,48 +0,0 @@ -<template> - <div - id="app" - @click="logInteraction" - > - <v-app> - <notifications /> - <notifications - group="msg" - position="bottom left" - /> - <router-view /> - <auto-logout /> - </v-app> - </div> -</template> - -<script> -// load fonts and icons so that webpack processes them -import '@/assets/material-icons.css' -import '@/assets/fonts.css' - -import { UI } from '@/store/modules/ui' -import AutoLogout from '@/components/AutoLogout' -import { mutations } from './store/mutations' - -export default { - name: 'App', - components: { AutoLogout }, - methods: { - logInteraction () { - mutations.SET_LAST_INTERACTION() - } - } -} -</script> - -<style> - #app { - font-family: Roboto, sans-serif; - } - a { - text-decoration: none; - } - span { - tab-size: 4; - } -</style> diff --git a/grady/frontend/src/api.ts b/grady/frontend/src/api.ts deleted file mode 100644 index eedfc67a..00000000 --- a/grady/frontend/src/api.ts +++ /dev/null @@ -1,324 +0,0 @@ -import axios, { AxiosInstance, AxiosResponse } from 'axios' -import { errorInterceptor } from '@/util/interceptor' -import { Credentials } from '@/store/modules/authentication' -import { - Assignment, - Exam, - Feedback, FeedbackComment, - JSONWebToken, Statistics, - StudentInfo, - StudentInfoForListView, - Submission, - SubmissionNoType, SubmissionType, - Tutor, UserAccount, LabelStatisticsForSubType, - FeedbackLabel, SolutionComment, - CreateUpdateFeedback, - AvailableSubmissionCounts, - Group, - Config, - GitlabRelease, -} from '@/models' -import { CreateAssignment } from './models' - -export function getInstanceBaseUrl (): string { - if (process.env.NODE_ENV === 'production' || process.env.NODE_ENV === 'test') { - return `${window.location.protocol}//${window.location.host}${window.location.pathname}`.replace(/\/+$/, '') - } else { - return 'http://localhost:8000/' - } -} - -let ax: AxiosInstance = axios.create({ - baseURL: getInstanceBaseUrl() -}) - -export async function registerTutor (credentials: Credentials): Promise<AxiosResponse<Tutor>> { - return ax.post<Tutor>('/api/corrector/register/', credentials) -} - -export async function fetchJWT (credentials: Credentials): Promise<JSONWebToken> { - const token: string = (await ax.post('/api/get-token/', credentials)).data.token - ax.defaults.headers['Authorization'] = `JWT ${token}` - return { token } -} - -export async function refreshJWT (oldToken: string): Promise<JSONWebToken> { - const token: string = (await ax.post('/api/refresh-token/', { token: oldToken })).data.token - ax.defaults.headers['Authorization'] = `JWT ${token}` - return { token } -} - -export async function fetchConfig (): Promise<Config> { - return (await ax.get('/api/config/')).data -} - -export async function fetchStudentSelfData (): Promise<StudentInfo> { - return (await ax.get('/api/student-page/')).data -} - -export async function fetchStudentSubmissions (): Promise<Array<Submission>> { - return (await ax.get('/api/student-submissions/')).data -} - -export async function fetchSubmissionFeedbackTests ({ pk }: {pk: string}): Promise<SubmissionNoType> { - return (await ax.get(`/api/submission/${pk}/`)).data -} - -export async function fetchSubmissionSourceCode(pk: string): Promise<{sourceCode: string}> { - return (await ax.get(`/api/submission/${pk}/source_code/`)).data -} - -export async function fetchNotebookSubmissionAsHtml(pk: string): Promise<any> { - return (await ax.get(`/api/submission/${pk}/html/`)).data -} - -export async function fetchAllStudents (): Promise<Array<StudentInfoForListView>> { - const url = '/api/student/' - return (await ax.get(url)).data -} - -export async function fetchStudent ({ pk }: -{pk: string}): Promise<StudentInfoForListView> { - const url = `/api/student/${pk}/` - return (await ax.get(url)).data -} - -export async function fetchAllTutors (): Promise<Array<Tutor>> { - const url = '/api/corrector/' - return (await ax.get(url)).data -} - -export async function fetchAllFeedback (): Promise<Array<Feedback>> { - const url = '/api/feedback/' - return (await ax.get(url)).data -} - -export async function fetchFeedback ({ ofSubmission }: {ofSubmission: string}): Promise<Feedback> { - const url = `/api/feedback/${ofSubmission}/` - return (await ax.get(url)).data -} - -export async function fetchExamTypes (): Promise<Array<Exam>> { - const url = '/api/examtype/' - return (await ax.get(url)).data -} - -export async function fetchStatistics (examPk: string): Promise<Statistics> { - const url = `/api/statistics/${examPk}/` - return (await ax.get(url)).data -} - -export async function fetchLabelStatistics (): Promise<LabelStatisticsForSubType[]> { - const url = '/api/label-statistics' - return (await ax.get(url)).data -} - - -export async function createAssignment (data: CreateAssignment): Promise<Assignment> { - return (await ax.post('/api/assignment/', data)).data -} - -export async function submitFeedbackForAssignment ({ feedback, assignment }: - { feedback: Partial<CreateUpdateFeedback>, assignment: Assignment}): Promise<CreateUpdateFeedback> { - return (await ax.post(`/api/assignment/${assignment.pk}/finish/`, feedback)).data -} - -export async function submitUpdatedFeedback ({ feedback }: - {feedback: CreateUpdateFeedback}): Promise<CreateUpdateFeedback> { - return (await ax.patch(`/api/feedback/${feedback.ofSubmission}/`, feedback)).data -} - -export async function submitFeedback ({ feedback }: {feedback: CreateUpdateFeedback}): Promise<Feedback> { - return (await ax.post('/api/feedback/', feedback)).data -} - -export async function fetchSubmissionTypes (): Promise<Array<SubmissionType>> { - const url = '/api/submissiontype/' - return (await ax.get(url)).data -} - -export async function fetchSubmissionType (pk: string): Promise<SubmissionType> { - const url = `/api/submissiontype/${pk}/` - return (await ax.get(url)).data -} - -export async function fetchAvailableSubmissionCounts(group: Group |Â undefined): Promise<AvailableSubmissionCounts> { - const query = group ? '?group=' + group.pk : '' - const url = '/api/submissiontype/available/' + query - return (await ax.get(url)).data -} - -export async function fetchGroups(): Promise<Group[]> { - const url = '/api/group/' - return (await ax.get(url)).data -} - -export async function fetchUserGroups(userPk: string): Promise<Group[]> { - const url = `/api/user/${userPk}/get_groups/` - return (await ax.get(url)).data -} - -export async function setGroups (userPk: string, groups: Group[]): Promise<UserAccount> { - return (await ax.patch(`/api/user/${userPk}/change_groups/`, groups)).data -} - -export async function deleteSolutionComment (pk: number): Promise<AxiosResponse<void>> { - const url = `/api/solution-comment/${pk}/` - return ax.delete(url) -} - -export async function createSolutionComment(comment: Partial<SolutionComment>): Promise<SolutionComment> { - const url = '/api/solution-comment/' - return (await ax.post(url, comment)).data -} - -export async function patchSolutionComment(comment: Partial<SolutionComment>): Promise<SolutionComment> { - const url = `/api/solution-comment/${comment.pk}/` - return (await ax.patch(url, comment)).data -} - -export async function fetchAllAssignments (): Promise<Array<Assignment>> { - const url = '/api/assignment/' - return (await ax.get(url)).data -} - -export async function fetchActiveAssignments (): Promise<Assignment[]> { - const url = '/api/assignment/active/' - return (await ax.get(url)).data -} - -export async function deleteAssignment ({ assignment }: {assignment: Assignment}): Promise<AxiosResponse<void>> { - const url = `/api/assignment/${assignment.pk}/` - return ax.delete(url) -} - -export async function deleteAllActiveAssignments () { - const url = '/api/assignment/active/' - return ax.delete(url) -} - -export async function deleteComment (comment: FeedbackComment): Promise<AxiosResponse<void>> { - const url = `/api/feedback-comment/${comment.pk}/` - return ax.delete(url) -} - -export async function activateAllStudentAccess (): Promise<AxiosResponse<void>> { - return ax.post('/api/student/activate/') -} - -export async function deactivateAllStudentAccess (): Promise<AxiosResponse<void>> { - return ax.post('/api/student/deactivate/') -} - -export async function changePassword (userPk: string, data: {password: string}): Promise<UserAccount> { - return (await ax.patch(`/api/user/${userPk}/change_password/`, data)).data -} - -export async function getOwnUser (): Promise<UserAccount> { - return (await ax.get('/api/user/me/')).data -} - -export async function changeActiveForUser (userPk: string, active: boolean): Promise<UserAccount> { - return (await ax.patch(`/api/user/${userPk}/change_active/`, { 'is_active': active })).data -} - -export async function changeUserRole (userPk: string, role: UserAccount.RoleEnum): Promise<UserAccount> { - return (await ax.patch(`/api/user/${userPk}/change_role/`, { role })).data -} - -export async function fetchUsers (): Promise<UserAccount[]> { - return (await ax.get('api/user/')).data -} - -export async function fetchUser(userPk: string): Promise<UserAccount> { - return (await ax.get(`/api/user/${userPk}`)).data -} - -export async function getLabels (): Promise<FeedbackLabel[]> { - return (await ax.get('/api/label/')).data -} - -export async function createLabel (payload: Partial<FeedbackLabel>) { - return (await ax.post('/api/label/', payload)).data -} - -export async function updateLabel (payload: FeedbackLabel) { - return (await ax.put('/api/label/' + payload.pk + '/', payload)).data -} - -export async function fetchSubmissionCounts () { - return (await ax.get('/api/submissiontype/available_counts/')).data -} - -export async function releaseUndoneAssignments () { - return (await ax.delete('/api/assignment/release')).data -} - -export async function patchInstanceSettings(config: { [config: string]: boolean }) { - return (await ax.patch('/api/config/change_config/', config)).data -} - -/** - * Issues a synchronized request to release all undone assignments of given user - * @param accessToken The access token to authenticate against the backend - */ -export function releaseUndoneAssignmentsSynchronized (accessToken: string) { - var request = new XMLHttpRequest() - request.open('DELETE', getInstanceBaseUrl() + 'api/assignment/release/', false) - request.setRequestHeader('Authorization', 'JWT ' + accessToken) - request.send() -} - -/** - * Issues a synchronized request to disable the account for the given details - * @param accessToken The access token to authenticate against the backend - * @param userPk The pk of the user account to disable - */ -export function disableAccount (accessToken: string, userPk: string) { - var request = new XMLHttpRequest() - request.open('PATCH', getInstanceBaseUrl() + `api/user/${userPk}/change_active/`, false) - request.setRequestHeader('Authorization', 'JWT ' + accessToken) - request.setRequestHeader('Content-Type', 'application/json') - request.send('{ "is_active": false }') -} - -export async function fetchReleases () { - const id = 'j.michal%2Fgrady' - const url = `https://gitlab.gwdg.de/api/v4/projects/${id}/releases` - return (await ax.get(url)).data as GitlabRelease[] -} - -export interface StudentExportOptions { setPasswords?: boolean } -export interface StudentExportItem { - Matrikel: string, - Name: string, - Username: string, - Sum: number, - Exam: string, - Password: string, - Email: string, - Scores: { type: string, score: number }[] -} -export async function fetchStudentExportData (options: StudentExportOptions): Promise<StudentExportItem[]> { - return (await ax.post('/api/export/json/', options)).data -} - -export async function importData (data: Object): Promise<AxiosResponse<void>> { - return ax.post('/api/import/', data) -} - -// Note, this interface does not represent all of the returned data, -// but only the fields which have to be transformed for deanonymisation -export interface InstanceExportData { - students: { - name: string, - matrikelNo: string - }[] -} -export async function fetchInstanceExportData (): Promise<InstanceExportData> { - return (await ax.get('/api/instance/export')).data -} - -ax.interceptors.response.use(undefined, errorInterceptor) - -export default ax diff --git a/grady/frontend/src/assets/brand.svg b/grady/frontend/src/assets/brand.svg deleted file mode 100644 index b245aec7..00000000 --- a/grady/frontend/src/assets/brand.svg +++ /dev/null @@ -1,241 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> - -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - inkscape:version="0.91 r13725" - version="1.1" - id="svg2" - viewBox="0 0 1500 400.00001" - height="400" - width="1500" - sodipodi:docname="brand.svg"> - <sodipodi:namedview - inkscape:window-maximized="1" - inkscape:window-y="19" - inkscape:window-x="0" - inkscape:window-height="1059" - inkscape:window-width="1918" - units="px" - showgrid="false" - inkscape:current-layer="layer1" - inkscape:document-units="px" - inkscape:cy="147.05606" - inkscape:cx="546.48529" - inkscape:zoom="0.5" - inkscape:pageshadow="2" - inkscape:pageopacity="0.0" - borderopacity="1.0" - bordercolor="#666666" - pagecolor="#ffffff" - id="base" - inkscape:object-paths="true" - inkscape:snap-intersection-paths="true" - inkscape:object-nodes="true" - inkscape:snap-smooth-nodes="true" - inkscape:snap-midpoints="true" - inkscape:snap-center="true" - inkscape:snap-grids="true" - inkscape:snap-to-guides="true"> - <inkscape:grid - type="xygrid" - id="grid7530" /> - </sodipodi:namedview> - <defs - id="defs4" /> - <metadata - id="metadata7"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title /> - </cc:Work> - </rdf:RDF> - </metadata> - <g - transform="translate(0,-652.36216)" - id="layer1" - inkscape:groupmode="layer" - inkscape:label="Layer 1"> - <text - sodipodi:linespacing="125%" - id="text4155" - y="785.93359" - x="40" - style="font-style:normal;font-weight:normal;font-size:18.75px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - xml:space="preserve"><tspan - y="785.93359" - x="40" - id="tspan4157" - sodipodi:role="line" /></text> - <g - transform="matrix(1.1234412,0,0,1.1234412,13.803675,-49.587352)" - id="g4148"> - <text - xml:space="preserve" - style="font-style:normal;font-weight:normal;font-size:49.09632111px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - x="43.577591" - y="769.30743" - id="text4136" - sodipodi:linespacing="125%"><tspan - sodipodi:role="line" - id="tspan4138" - x="43.577591" - y="769.30743" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;font-family:monospace;-inkscape-font-specification:monospace">free(buf);</tspan></text> - <g - id="g4144" - transform="translate(0.9074132,-22.142857)"> - <rect - y="828.83081" - x="51.259876" - height="90.981384" - width="466.75812" - id="rect4140" - style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#3d8fc1;stroke-width:7.82999992;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> - <path - transform="matrix(0.95142245,0.00906165,-0.01875887,0.45959361,40.435709,459.17271)" - inkscape:transform-center-y="-3.3172406" - inkscape:transform-center-x="-0.10382355" - d="M 102.5,802.71928 51.866074,804.09565 75.991067,759.5572 Z" - inkscape:randomized="0" - inkscape:rounded="0" - inkscape:flatsided="true" - sodipodi:arg2="1.5436203" - sodipodi:arg1="0.49642275" - sodipodi:r2="14.622154" - sodipodi:r1="29.244308" - sodipodi:cy="788.79071" - sodipodi:cx="76.785713" - sodipodi:sides="3" - id="path4142" - style="opacity:1;fill:#3d8fc1;fill-opacity:1;fill-rule:nonzero;stroke:#3d8fc1;stroke-width:7.83047009;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - sodipodi:type="star" /> - </g> - <text - sodipodi:linespacing="125%" - id="text4217" - y="576.64789" - x="395.71426" - style="font-style:normal;font-weight:normal;font-size:18.75px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - xml:space="preserve"><tspan - y="576.64789" - x="395.71426" - id="tspan4219" - sodipodi:role="line" /></text> - </g> - <text - sodipodi:linespacing="125%" - id="text4159" - y="817.44897" - x="27.760962" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:50.55485535px;line-height:125%;font-family:monospace;-inkscape-font-specification:monospace;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - xml:space="preserve"><tspan - y="817.44897" - x="27.760962" - id="tspan4161" - sodipodi:role="line" - style="-inkscape-font-specification:'monospace Bold';font-family:monospace;font-weight:bold;font-style:normal;font-stretch:normal;font-variant:normal">7</tspan></text> - <text - sodipodi:linespacing="125%" - id="text4159-3" - y="752.0816" - x="28.401009" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:42.0922699px;line-height:125%;font-family:monospace;-inkscape-font-specification:monospace;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:0.31606218;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - xml:space="preserve"><tspan - y="752.0816" - x="28.401009" - id="tspan4161-6" - sodipodi:role="line" - style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:monospace;-inkscape-font-specification:'monospace Bold'">6</tspan></text> - <text - sodipodi:linespacing="125%" - id="text4159-3-7" - y="1030.8582" - x="28.442116" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:42.0922699px;line-height:125%;font-family:monospace;-inkscape-font-specification:monospace;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:0.31606218;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - xml:space="preserve"><tspan - y="1030.8582" - x="28.442116" - id="tspan4161-6-5" - sodipodi:role="line" - style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:monospace;-inkscape-font-specification:'monospace Bold'">8</tspan></text> - <text - sodipodi:linespacing="125%" - id="text4159-3-3" - y="703.95551" - x="27.846083" - style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:42.0922699px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:0.31606218;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - xml:space="preserve"><tspan - y="703.95551" - x="27.846083" - id="tspan4161-6-56" - sodipodi:role="line">5</tspan></text> - <path - id="path6554" - title="sin(x)" - d="m 93.74644,911.92137 c 7.84438,-6.96836 15.68876,-13.29074 23.53314,-13.23944 7.84438,0.0513 15.68877,6.48775 23.53315,13.45526 7.84437,6.96753 15.68875,13.18498 23.53314,13.0201 7.84438,-0.16489 15.68875,-6.7027 23.53314,-13.66753 7.84438,-6.96483 15.68876,-13.07571 23.53315,-12.79728 7.84437,0.27842 15.68875,6.91584 23.53313,13.87614 7.84439,6.9603 15.68876,12.96297 23.53314,12.57108 7.84439,-0.39188 15.68877,-7.12717 23.53314,-14.08107 7.84438,-6.95391 15.68877,-12.84678 23.53315,-12.34154 7.84438,0.50526 15.68876,7.3366 23.53314,14.28226 7.84438,6.94568 15.68877,12.72719 23.53314,12.10871 7.84438,-0.61848 15.68876,-7.54407 23.53315,-14.47966 7.84437,-6.93558 15.68875,-12.60419 23.53314,-11.87265 7.84438,0.73154 15.68876,7.74954 23.53314,14.6732 7.84438,6.92366 15.68876,12.47787 23.53314,11.63346 7.84438,-0.84441 15.68876,-7.95296 23.53314,-14.86285 7.84439,-6.90989 15.68877,-12.34823 23.53314,-11.39117 7.84439,0.95705 15.68877,8.15427 23.53315,15.04855 7.84437,6.89429 15.68876,12.21529 23.53314,11.14584" - style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:0.31606218;fill-rule:nonzero;stroke:#ff0000;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.7150259;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <g - transform="scale(0.98991789,1.0101848)" - style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:167.73872375px;line-height:125%;font-family:'Shining NFI Demo';-inkscape-font-specification:'Shining NFI Demo Italic';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - id="text6581"> - <path - d="m 711.55349,918.83164 q -1.34191,-1.00644 -3.0193,-1.34191 -1.50965,-0.33548 -3.18704,-0.67096 -1.50964,-0.33548 -3.01929,-0.67095 -1.50965,-0.33548 -2.68382,-1.34191 l -1.00644,-2.01287 q -0.50321,-0.33548 -2.51608,-0.67095 -1.84512,-0.33548 -2.51608,-0.33548 -4.02573,-3.35477 -8.72241,-7.54824 -4.52895,-4.36121 -6.03859,-9.22563 -0.8387,-2.68382 -1.00644,-3.69025 0,-1.17418 -2.01286,-3.18704 -0.33548,-0.83869 -1.00643,-3.0193 -0.50322,-2.34834 -1.17417,-4.86442 -0.50322,-2.51608 -1.00644,-4.69668 -0.50321,-2.34835 -0.67095,-3.35478 -0.16774,-0.83869 -0.16774,-1.50965 l 0,-2.51608 q 0,-7.54824 1.67739,-14.76101 1.84512,-7.3805 3.35477,-14.761 0,-0.50322 0.33548,-2.01287 0.33548,-1.67739 0.67095,-3.52251 0.33548,-1.84513 0.50322,-3.35478 0.33548,-1.67738 0.50322,-2.01286 0,-0.33548 0.50321,-1.67739 0.50322,-1.34191 1.00643,-2.85156 0.50322,-1.50964 1.00644,-2.68382 0.50321,-1.34191 0.50321,-1.67738 0.16774,-0.67096 0.50322,-3.0193 0.50321,-2.34834 1.00643,-4.86442 0.50322,-2.68382 0.83869,-5.03216 0.50322,-2.34835 0.50322,-3.0193 1.00643,-4.69669 4.19347,-10.3998 3.35477,-5.70312 7.54824,-11.2385 4.36121,-5.53537 9.05789,-10.23206 4.86443,-4.86442 8.89015,-7.71598 16.27066,-5.36764 32.37358,-7.21277 16.27065,-2.01286 33.21227,-2.01286 1.34191,0 3.52251,0 2.1806,0 4.19347,0.16774 2.1806,0 3.69025,0 1.67739,0 2.01286,0 0.67096,0 3.69026,0.33548 3.18703,0.33547 7.04502,0.67095 3.85799,0.33548 7.54824,0.67096 3.69026,0.33547 5.70312,0.50321 0.50322,0 2.01287,0.16774 1.50964,0.16774 3.18703,0.67096 1.67739,0.33547 3.0193,1.17417 1.50965,0.83869 1.67739,2.01286 0,0.33548 0,0.67096 0.16773,0.16773 0.16773,0.50321 0,3.0193 -1.17417,8.72242 -1.17417,5.70311 -2.68382,11.90945 -1.50964,6.03859 -3.18703,11.40623 -1.50965,5.36764 -2.34834,7.54824 l -7.54825,0 q -3.35477,0 -6.37407,-0.50322 -3.01929,-0.50321 -6.37407,-1.50964 l -33.54774,0 q -2.34835,1.67738 -5.1999,2.51608 -2.68382,0.67095 -5.03217,2.1806 -5.87085,3.85799 -10.23206,10.90302 -4.19347,6.87729 -7.04502,14.92874 -2.68382,7.88372 -4.19347,15.93518 -1.34191,8.05146 -1.34191,14.25779 0,0.33548 0,1.50965 0,1.00644 0,2.18061 0,1.17417 0,2.1806 0.16774,1.00643 0.16774,1.50965 0.83869,3.35477 3.35477,6.20633 2.68382,2.68382 6.54181,2.68382 l 15.76744,0 q 1.50965,0 2.34834,-1.34191 0.8387,-1.34191 1.17417,-3.0193 0.33548,-1.84512 0.33548,-3.52251 0.16774,-1.84513 0.16774,-2.85156 l 0,-0.16774 q 0,-2.34834 -1.17417,-3.52251 -1.00643,-1.17417 -2.34834,-1.84513 -1.34191,-0.83869 -2.51608,-1.34191 -1.00644,-0.50321 -1.00644,-1.67738 l 0,-0.50322 q 2.01287,-6.37407 3.69026,-12.91588 1.84512,-6.70955 4.19346,-12.74814 0.67096,-2.01287 1.17417,-2.85156 0.50322,-0.8387 0.8387,-1.50965 0.33548,-0.67096 0.50321,-1.50965 0.33548,-1.00643 0.50322,-3.35477 l 60.55368,0 q 0,1.84512 -0.83869,3.69025 -0.8387,1.67739 -1.34191,3.52251 l -3.85799,15.76744 q -0.16774,0.33548 -0.67096,1.67739 -0.33548,1.34191 -0.83869,2.85156 -0.50322,1.50965 -1.00643,2.85156 -0.50322,1.17417 -0.50322,1.50964 -0.16774,0.67096 -0.83869,3.18704 -0.50322,2.34834 -1.17418,5.1999 -0.67095,2.85156 -1.34191,5.36764 -0.50321,2.51608 -0.67095,3.18704 0,0.50321 -0.50322,1.67738 -0.33547,1.17417 -0.83869,2.68382 -0.50322,1.34191 -1.00643,2.68382 -0.33548,1.34191 -0.50322,1.84513 -1.50965,3.85799 -2.1806,7.88372 -0.67096,4.02573 -1.84513,8.05146 -1.34191,4.3612 -3.18703,8.38693 -1.84513,4.02573 -3.69026,8.2192 -1.00643,2.1806 -1.34191,4.52895 -0.33547,2.34834 -1.67738,4.3612 -0.67096,0.8387 -3.52252,1.50965 -2.85155,0.67096 -6.87728,1.17417 -4.02573,0.50322 -8.89016,0.67096 -4.69668,0.33547 -9.22563,0.50321 -4.52894,0.16774 -8.38693,0.16774 -3.85799,0.16774 -5.87086,0.16774 -5.36764,0 -10.06432,-0.50322 -4.69669,-0.33547 -9.22563,-1.00643 -4.52895,-0.67095 -9.22563,-1.67739 -4.52895,-1.00643 -9.89659,-2.1806 -0.67095,-0.16774 -1.3419,-0.33548 -0.67096,-0.16773 -1.50965,-0.33547 z" - style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Shining NFI Demo';-inkscape-font-specification:'Shining NFI Demo Italic'" - id="path4253" /> - <path - d="m 908.82472,811.47885 q 0.16774,2.51608 0.67095,3.0193 0.50322,0.33548 1.34191,0.33548 6.0386,0 11.2385,-0.16774 5.36764,-0.33548 9.22563,-1.17417 4.02573,-1.00643 6.20633,-2.85156 2.34834,-2.01287 2.34834,-5.53538 0,-2.34834 -1.34191,-4.02573 -1.17417,-1.67738 -3.18703,-2.68382 -2.01287,-1.17417 -4.36121,-1.67738 -2.34834,-0.50322 -4.52895,-0.50322 -5.36764,0 -9.72884,0.67095 -4.36121,0.50322 -4.69669,2.68382 l -3.18703,11.90945 z m -44.45076,-55.52151 q 11.90944,-2.68382 24.82533,-4.02573 13.08362,-1.50965 27.67689,-1.50965 3.52251,0 7.04502,0 3.69025,0 7.54824,0.33548 0.33548,0 3.52252,0.16773 3.35477,0.16774 7.71598,0.67096 4.36121,0.33548 8.89015,0.83869 4.69669,0.50322 7.71598,1.17417 10.23206,2.34835 17.94805,6.37408 7.71598,3.85799 12.74814,9.89658 5.1999,6.03859 7.71598,14.25779 2.51606,8.2192 2.51606,19.28995 0,12.91589 -7.04501,22.30925 -7.04502,9.22563 -18.45125,15.59971 -5.19991,3.01929 -11.74172,5.1999 -6.54181,2.01286 -12.41266,3.35477 2.1806,10.3998 4.52894,19.62543 0,0.16774 0.33548,2.34834 0.33548,2.01287 1.00643,5.03217 0.67096,3.01929 1.34191,6.70954 0.67096,3.52252 1.34191,6.54181 0.67096,3.0193 1.00644,5.19991 0.50321,2.01286 0.50321,2.01286 1.67739,6.20633 2.51608,9.39337 0.8387,3.18703 1.17417,4.52894 0.50322,1.34191 0.50322,1.50965 0.16774,0 0.16774,0.16774 0.16774,0 0.33548,0.67096 0.16774,0.67095 0.83869,3.01929 0.67096,2.34835 1.84513,6.87729 1.17417,4.69668 3.18703,12.91588 -0.33548,0 -0.67095,0.33548 -0.33548,0.33548 -0.8387,0.33548 -0.33547,0 -0.50321,-0.16774 l -45.28946,0 q -2.34834,0 -4.3612,-0.50322 -2.01287,-0.50321 -3.0193,-2.34834 l -5.03216,-15.5997 q -2.18061,-8.38694 -3.69026,-16.4384 -1.50964,-8.21919 -3.35477,-16.60613 -0.50322,-2.1806 -1.00643,-7.21276 -0.33548,-5.03217 -1.00643,-10.23207 -0.50322,-5.1999 -1.50965,-9.22563 -1.00644,-4.02573 -2.51608,-4.02573 -0.67096,0 -1.67739,2.01287 -1.00643,1.84512 -2.01287,4.19347 -1.00643,2.34834 -2.01286,4.69668 -0.83869,2.34834 -1.00643,3.0193 0,0.50321 -0.67096,2.34834 -0.67095,1.84513 -1.50965,4.36121 -0.67095,2.34834 -1.50964,4.69668 -0.67096,2.1806 -1.17418,3.35478 -0.16773,0.50321 -0.83869,2.34834 -0.67095,1.67739 -1.50965,4.3612 -0.83869,2.51609 -2.01286,5.70312 -1.00644,3.18704 -2.01287,6.54181 -1.17417,3.85799 -2.01286,7.38051 -0.8387,3.35477 -2.01287,6.20633 -0.83869,2.51608 -1.84512,4.02573 -1.00644,1.34191 -1.50965,1.34191 l -58.20534,0 q -0.16774,0 -0.67095,-0.50322 -0.50322,-0.50322 -0.67096,-0.67095 l 0,-1.00644 q 4.36121,-13.08362 8.55468,-26.50271 4.3612,-13.4191 9.05789,-26.16725 2.68382,-7.21276 5.53538,-15.76744 2.85155,-8.55467 5.70311,-17.27708 3.0193,-8.89016 5.70312,-17.44483 2.68382,-8.72241 4.86442,-16.27066 l 11.40624,-43.7798 z" - style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Shining NFI Demo';-inkscape-font-specification:'Shining NFI Demo Italic'" - id="path4255" /> - <path - d="m 1076.4219,834.6268 q -0.3355,-4.19347 -1.0064,-10.06433 -0.671,-6.03859 -1.5097,-11.57397 -0.8387,-5.53538 -1.6774,-9.39337 -0.8387,-3.85799 -1.5096,-3.85799 -0.671,0 -2.0129,3.85799 -1.1741,3.85799 -2.5161,9.39337 -1.1741,5.53538 -2.3483,11.57397 -1.1742,5.87086 -1.8451,10.06433 l 14.4255,0 z m 69.1084,86.38544 q -1.3419,0.16774 -2.8516,0.16774 -1.3419,0 -2.8516,0 -4.6966,0 -10.3998,-0.33548 -5.7031,-0.33548 -11.5739,-0.67095 -5.7031,-0.50322 -11.2385,-0.8387 -5.5354,-0.33547 -9.8966,-0.33547 -1.0064,0 -3.0193,0 -2.0129,-0.16774 -2.1806,-0.16774 l -2.0129,-1.00644 q 0,0 -0.5032,-1.34191 -0.5032,-1.34191 -1.1742,-3.18703 -0.6709,-2.01287 -1.3419,-4.02573 -0.5032,-2.01287 -0.6709,-3.35478 l -4.6967,-21.63829 q -0.3355,-1.34191 -0.5032,-2.51608 -0.1678,-1.17417 -0.5032,-2.01287 -0.1678,-1.00643 -1.0065,-1.50964 -0.6709,-0.67096 -2.1806,-0.67096 l -17.2771,0 q -3.3547,0 -5.0321,1.67739 -1.6774,1.50965 -3.3548,5.36764 -1.5096,3.69025 -3.6902,10.06432 -2.0129,6.20633 -6.0386,15.43196 -0.3355,0.33548 -0.8387,0.50322 -0.3355,0.16774 -0.671,0.33548 -0.3355,0.16774 -0.5032,0.16774 l -50.99258,0 q -0.83869,0 -1.00643,-1.00644 0,-1.17417 0,-1.67738 l 0,-0.33548 q 0,-2.34834 1.34191,-7.54824 1.50965,-5.36764 3.69025,-12.07719 2.34834,-6.87729 4.86442,-14.09006 2.51608,-7.21276 4.69673,-13.41909 2.3483,-6.37407 3.6902,-10.56754 1.5097,-4.36121 1.5097,-5.1999 0,-3.35478 0.8387,-5.53538 1.0064,-2.1806 2.1806,-6.20633 0.3354,-0.67096 1.0064,-3.0193 0.8387,-2.51608 2.0129,-5.70312 1.1741,-3.18703 2.3483,-6.87729 1.3419,-3.69025 2.3483,-6.87728 1.1742,-3.18704 2.0129,-5.53538 0.8387,-2.51608 1.0064,-3.35478 0,-0.16773 0.3355,-0.83869 0.3355,-0.67095 0.671,-1.50965 0.3354,-0.83869 0.6709,-1.50965 0.3355,-0.83869 0.3355,-1.00643 0.5032,-1.50965 1.3419,-4.52894 1.0064,-3.18704 2.8516,-8.05146 1.8451,-4.86443 5.0321,-11.74171 3.1871,-7.04503 8.2192,-16.27066 0.1678,-0.16774 0.8387,-0.83869 0.8387,-0.67096 1.1742,-2.18061 l 65.4181,0 37.5735,167.40325 z" - style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Shining NFI Demo';-inkscape-font-specification:'Shining NFI Demo Italic'" - id="path4257" /> - <path - d="m 1210.5552,875.05183 0.8387,5.53538 13.2514,-0.8387 q 2.3483,-1.67738 5.0321,-2.34834 2.8516,-0.83869 5.1999,-2.34834 5.7031,-3.85799 10.0643,-10.06432 4.3613,-6.20634 7.0451,-13.4191 2.8515,-7.21277 4.1934,-14.59327 1.5097,-7.3805 1.5097,-13.58684 0,-0.33547 0,-1.34191 0,-1.17417 0,-2.34834 0,-1.17417 -0.1677,-2.1806 0,-1.00644 0,-1.50965 -0.8387,-3.35478 -3.5226,-6.0386 -2.516,-2.68381 -6.374,-2.85155 l -12.9159,-0.50322 q -0.671,0.33548 -1.3419,1.67739 -0.671,1.34191 -1.3419,3.01929 -0.5032,1.67739 -1.0065,3.35478 -0.3354,1.67739 -0.3354,2.68382 l 0,0.16774 -20.1287,57.53438 z m 65.5859,-112.88816 q 2.8515,1.84512 6.7095,3.18703 4.0257,1.34191 6.3741,3.18704 l 1.0064,2.01286 q 0.5032,0.33548 2.3483,0.67096 2.0129,0.33548 2.6839,0.33548 4.0257,3.35477 8.5546,7.71598 4.6967,4.19347 6.2064,9.05789 0.8387,2.68382 0.8387,3.85799 0.1677,1.00643 2.1806,3.0193 0.1677,0.83869 0.6709,3.18703 0.671,2.18061 1.3419,4.69669 0.671,2.51608 1.1742,4.86442 0.5032,2.1806 0.671,3.18704 l 0,1.50964 q 0,0.67096 0,1.50965 0.1677,0.67096 0.1677,1.00644 0,3.85799 -0.5032,6.87728 -0.5032,3.0193 -1.3419,5.87086 -0.671,2.85156 -1.6774,5.87085 -0.8387,2.85156 -1.5097,6.54181 0,0.50322 -0.3354,2.18061 -0.3355,1.50965 -0.671,3.35477 -0.3355,1.84513 -0.6709,3.52251 -0.1678,1.50965 -0.3355,1.84513 0,0.33548 -0.5032,1.67739 -0.5033,1.34191 -1.0065,2.85156 -0.5032,1.50964 -1.0064,2.85155 -0.5032,1.17418 -0.5032,1.50965 -0.1678,0.67096 -0.671,2.34835 -0.3355,1.50964 -0.8387,3.35477 -0.3354,1.67739 -0.8387,3.18704 -0.3354,1.50964 -0.3354,2.1806 -1.0065,4.69668 -3.858,10.06432 -2.6839,5.1999 -6.3741,10.23206 -3.5225,5.03217 -7.716,9.39337 -4.1935,4.19347 -8.2192,7.04503 -9.0579,4.52894 -15.5997,6.87729 -6.3741,2.34834 -12.5804,3.69025 -6.2063,1.17417 -13.4191,1.67739 -7.045,0.50321 -17.4448,1.17417 l -71.7922,0 q 0,-0.50322 0.8387,-3.85799 0.8387,-3.35478 2.0129,-8.05146 1.3419,-4.69669 2.8515,-10.06433 1.5097,-5.53537 2.8516,-10.23206 1.3419,-4.69668 2.1806,-7.88372 1.0064,-3.35477 1.1742,-4.02573 l 3.858,-15.76744 11.0707,-33.54774 q 1.8451,-5.1999 3.187,-9.39337 1.342,-4.36121 2.5161,-7.71598 1.6774,-5.53538 2.6838,-9.22563 1.1742,-3.85799 1.8452,-6.37407 0.6709,-2.68382 1.0064,-4.36121 0.3355,-1.67739 0.8387,-3.18704 1.3419,-4.3612 3.187,-8.38693 1.8452,-4.02573 3.6903,-8.2192 1.0064,-2.1806 1.3419,-4.52894 0.3355,-2.34835 1.6774,-4.36121 l 0.1677,-0.16774 q 0.5032,-0.83869 1.5097,-1.84513 1.0064,-1.17417 4.3612,-1.67738 l 50.9925,0 q 0.5033,-0.16774 1.6774,-0.16774 2.8516,0 7.8838,1.17417 5.1999,1.17417 13.4191,2.68382 z" - style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Shining NFI Demo';-inkscape-font-specification:'Shining NFI Demo Italic'" - id="path4259" /> - <path - d="m 1325.2545,919.67033 q 2.8515,-20.12865 7.5482,-39.58634 4.6967,-19.45769 9.3934,-39.25086 -4.6967,-10.23206 -8.7224,-20.63186 -3.858,-10.56754 -7.716,-20.96734 -3.858,-10.56754 -8.0515,-20.79961 -4.1934,-10.3998 -9.3933,-20.46412 4.0257,-1.00643 8.3869,-1.34191 4.5289,-0.50322 9.2256,-0.50322 l 15.7675,0 q 2.8515,0 5.7031,0 2.8515,0 5.5354,-0.33547 l 4.8644,-0.67096 2.0128,0.67096 q 1.0065,1.34191 1.5097,3.35477 0.6709,1.84513 1.1742,4.02573 0.5032,2.01287 1.0064,4.02573 0.5032,1.84513 1.5096,3.35477 2.1806,6.37408 3.1871,11.74172 1.1741,5.36763 3.6902,11.57397 1.6774,-2.85156 2.8516,-5.36764 1.1742,-2.68382 2.5161,-5.53538 l 10.232,-20.63186 6.0386,-5.70312 q 3.858,0.16774 7.716,0.33548 4.0257,0.16774 7.8837,0.50321 l 12.7482,0.8387 19.9609,-1.17417 1.0064,1.50965 q 0.1677,0.67095 0.1677,1.84512 -0.8386,9.56111 -5.1999,17.94804 -4.1934,8.2192 -9.0578,16.27066 l -2.0129,3.35478 q -3.3548,5.87085 -6.7096,11.57397 -3.187,5.70311 -6.5418,11.57397 -3.3547,5.87085 -6.5418,12.07719 -3.0193,6.03859 -6.5418,11.90945 -0.8387,6.20633 -1.6774,12.41266 -0.6709,6.0386 -1.6774,12.07719 -1.3419,7.3805 -3.0193,14.59327 -1.1741,4.36121 -2.1806,8.89015 -1.0064,4.36121 -2.0128,8.72242 -0.671,7.21276 -2.5161,14.25779 -0.671,1.34191 -1.1742,3.01929 -0.3355,1.50965 -1.5096,2.68382 l -29.6898,0 -0.6709,0.16774 q -3.6903,0.16774 -7.3805,0 -3.5226,0 -7.2128,0.33548 l 0,-0.50322 -12.7481,0 -1.5097,-1.17417 -0.1677,-1.00643 z" - style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Shining NFI Demo';-inkscape-font-specification:'Shining NFI Demo Italic'" - id="path4261" /> - </g> - <path - inkscape:connector-curvature="0" - id="path4221-1-0-3" - d="m 68.775738,1012.3622 311.224262,0" - style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:0.31606218;fill-rule:nonzero;stroke:none;stroke-width:9.52231693px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.31764706;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> - <rect - style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:0.31764706;fill-rule:nonzero;stroke:none;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.7150259;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" - id="rect7532" - width="225" - height="10" - x="67.574112" - y="1010.536" /> - <rect - style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:0.31764706;fill-rule:nonzero;stroke:none;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.7150259;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" - id="rect7532-6" - width="342.5" - height="10" - x="67.574112" - y="731.80054" /> - <rect - style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:0.31764706;fill-rule:nonzero;stroke:none;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.7150259;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" - id="rect7532-0" - width="250" - height="10" - x="67.574112" - y="683.91083" /> - </g> -</svg> diff --git a/grady/frontend/src/assets/fonts.css b/grady/frontend/src/assets/fonts.css deleted file mode 100644 index 4a3b402e..00000000 --- a/grady/frontend/src/assets/fonts.css +++ /dev/null @@ -1,48 +0,0 @@ -/* latin */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 100; - src: local('Roboto Thin'), local('Roboto-Thin'), url(fonts/roboto-thin.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* latin */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 300; - src: local('Roboto Light'), local('Roboto-Light'), url(fonts/roboto-light.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* latin */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 400; - src: local('Roboto'), local('Roboto-Regular'), url(fonts/roboto-regular.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* latin */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 500; - src: local('Roboto Medium'), local('Roboto-Medium'), url(fonts/roboto-medium.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* latin */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 700; - src: local('Roboto Bold'), local('Roboto-Bold'), url(fonts/roboto-bold.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* latin */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 900; - src: local('Roboto Black'), local('Roboto-Black'), url(fonts/roboto-black.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} diff --git a/grady/frontend/src/assets/fonts/Material-Icons.woff2 b/grady/frontend/src/assets/fonts/Material-Icons.woff2 deleted file mode 100644 index 34cdd2afba56b9dd3c7f0e3b758069a92db6b7bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60840 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 ZAW|PCr`Wg(XLM`IW|Ri_`Ahlk@&R}sbiDuo diff --git a/grady/frontend/src/assets/fonts/roboto-black.woff2 b/grady/frontend/src/assets/fonts/roboto-black.woff2 deleted file mode 100644 index 689d7cb05c69ab723eb3a7a8140ef2c900699f2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11012 zcmV+fEBn-UPew8T0RR9104oFl4gdfE095Dz04l8j0RR9100000000000000000000 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 diff --git a/grady/frontend/src/assets/fonts/roboto-bold.woff2 b/grady/frontend/src/assets/fonts/roboto-bold.woff2 deleted file mode 100644 index 1cdd68c821394eaf0e4a87e1dd9c4df1c6e8bf0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11020 zcmV+nEA!NMPew8T0RR9104odt4gdfE095<{04lWr0RR9100000000000000000000 z0000QWE+|u9D{rYU;u|~5ey3ONZ3^igK_`?HUcCAhhPLC1%iGDAR8h^MFxY71AuRM zn?_L@IG>85Y*5w&|JMohfVpaS>algoo#VYoYSR2Ob1S*sin?e$?hrbPqC>n%`L_Ou z3v6)%Ai$G+cGSEY4Pp+zG*3;te8A<hoPpzf)Z8EVx%K`wqDKhQ1GEvT5u;)oQ6t6} z6&nLag-DK&k`|N-CDNwMBy1#=5XHPZPq|N>-;9I^v%3iHau;GMuewgVB7KW!Z1Y1F zFwM%plW@^o3T=o*6_Wsm>f5hBdcJNeAq0M8LC^tV0?j1;pAKtIauo=)otQnB;AZ^= z@Xtfvetq7qu70!3`S}3=MF48gsyIRxiqJ8-IE3lz_iJC8g?a~6GDF0h*prh)y2KE* zB|;`7m))n|1fKt2tF(RlZJnv^u7wxk3ULb;(m54Saj_AqrfOztfB*RlTp|7epdO(0 zczhIrT%gVd7<??SFe^-qh;Xrzbc7c9`MK2o6wp<j8=#%ARhz7HKktWsj`FW<?#j7x zwi2aCb}S5_1j>z&)byN~P!qxss7_cpH^|NOQr6c#A`(K)S!u>jkK3*gMwr0}R|JvQ zvcEiQwp@hS2C*V`;?G;gR@Y_VIgBxKfPVa^1O$pO00007DE#&^hOpuTkt`V^Qzk^V zYzPhxM1cZ`6N(`^bVHf&9Rh&@AP4{p0f0axLjdqoXAHCUvU3HQD>;S*GIvaHILK`O zxJZzJ0RTHY5CHO=850S-01yBOJPZ^N`13-DIv8M|qL%Dr7wuwQzb0Uoq;NSPgkwSO z4w={!gs_Xq$Vi1KkJ_ZhP{mfs^huu#s+QF~nKdq%wJ_PWE!oM=-Sz8p&ULfUwPY)W zq-LxFFstmpa0n6%ZUO{}+iSlA4m#v0by~FH>Ci)9z=$yuWH#(La^`}<9TkliZ@y~O zs#9MDm@sL|HP_v6(=E5%ao0UhJoU_T(_UJzXvwlQ>o#oqWXm_-{qWN-2)%B=Adp~S zA0v`pl7tYCmpbfh5$iYJn<=%_>E$=J`VR315|FWlg4?RyukyT(_9O2y#rRXR<uo+J zlbM?08rQkO&G=RCyygvWdB=SGz6}d3vcxj$Y_Q2Ew&KsN`@%L~<8OWR{bGdIDe-C_ zK%o+rIdiz^HIL9TgEkrU)=Lb=^2mHLJW2I#^1^h3`w3p3ipY{SQf3x7^(d$rh7bv6 zMB|GW`4caQAjpOlc5&ks+|=5lf0$vGIbQ5r3O6i)Ugnj>5Pw7hGPby7D@^h9HLz+$ z9rf}1K3ZUrC6?nKuzvDu)ri_^2_W7?D#+O4MltVMV38%3*NkC90+l8&qDwsw%EhJJ zZT*;y!zQ2D+AkMuIm9@{X&SQ4*-T-ES>|}LUvb2>NRYAhlx%M2#vXU`BA|FP@5KU( zEU_G~$F{*HpV)f#Xe#xi{><w<G@(|R{m$Qb6q{S#uR~-;7YpNWG44}@dmOp3Nxb_P zs56WD`9|!M_Myz0aGFxkq%%E_(@qM>r%Y`KWxjtF>TrSqTyLC^vs=>;v&YWTWycpp z&EMIOr=2_Vvi174>74Bj_N#sJ`ybfvqo3zzI>9fK-+4Ly@T!^Hiu-~YUF!$mEDLr9 z^!`s`?$7d`S_L3M9eaB)@y~N3eh`X~C%Rq6{x%r<tFfTACssvHc*heg{`#in>V;uf zZs>}_&Wj1913z);3q8M=nWt`UB1)`V7k?r2>DP!R?MztWVW;zQH|md_@>BN#z`{22 z#uZroFp(M9`SJi5=3?+oo;tf)PX0t_pTX{JKg`(;9JPfN5iW={@ufA3wHasooZ2_f z%U&e*40c(tL&=5t#)%#NAhOlNZ|Z;dlpWHblUoejWF9NxkFk^cW35>$;omRZX^nO? z=j`0vy|#Uu{Ew#Wv?X_5%Y)Cw)qXm29%Bnvg`H@*(Z;g8m3N2kqqNfz`Dd4p{uBAZ zdRPyFoj}bo{{E@}e2~EXDVVMZtfGi@M%(Kk3{~3r=rMLzwn8M0jLNZVmgmfs0(VtL zYgR$$V~@h-{c4<cK*RG@Ghx|LYqq%g<`*w0Ivzwyq(m0k6h+ym()O#U1By7PT-21` zQ5B%BlC%_|trGN9h`#b8s0;($%}}w7RFJWXuu^W;%7fV2wPOP>81Djuf}*)94|f$u zQ$BPR<E?yrR9K<qIXae7PGMz_kfoH<sH_H+HPMWibQ8+0XD8~md$>F?4Kd>delM$8 z&@1z}y>H%S!7^TJSI1bl1%1F&K0jtk#VMj9T1pUAOET033Cmqdl*3XKHI<^JD0oHD zZ3#!%z%P8VOT<M)1O%If=gAPZvPf)#7EFoeh9W#vkY|f4!USHzTMEfWQHm6$`09u% z)g(g|QIQZ)ktijMV<jQn78R$Ugii$EIb|6Vq@Yvw`0Oh#;dP>?q~mwm->yT|IvY2u z;Mw&!D;&^vcX1ul_Hr@X&hS7-yY1}`GIQ6%9PP^^Tx_G9AbAP~w<_&4G%h{JI|0;v z^PI6JDgsphY0u3-b2TH>9}I<<Z`xsXR3Ho7*ThG}039fNDwwQ-vMF<|Kzgf?E!qUE zJxF4340vWZrQm(BNOwj#%*dJ+P%9VK1<i)N4ybWQ>tW@jTb*=TC+cXMMN+c0IBtX1 z9%2w79yF*%vj@)_rH}G_Q4I0x)2m0n0fUAN8$sVQG9UDLDPqOB;G#<|yW%Pogamn@ z<`Z!h7if1kEl}2y=hpXy{B3>B*LES;0N5Xx0PKCRBN1?*{~6#fIBQfFfP*{$$er5& z92_+0?TQ_H<R3SFP@aS-*8=-6#f2A`DP5Buy(Zl9*s9NV5RF2Kt8pt{#hZ!1O~p;e zEx^g(6mZJ8eK;)~0cVMe!}S~|mBs$<?EK$%z)Uzzn)T{4>9!|6_);{A3vrM6xZOCp zW7ov#cP>Hud6|6Ih&Bawb`Jk`q9u&Mcm5xJL}^iQH*;2TT)I?Au8TLd`Cs!FXBF-_ zeGu1aKoD9wIwRfrOn&!F6CR((H-DCFGiJ?s;iVk8UU}_}x89k@k#|mi9r+4;_QkfZ zzA5ybAOJuuH33J32q)Bo21h!WpouY>=^-%aWt=`Hh+@*+l<pSD<hFaPyC-0Rr*785 z952Y?C2yJG9rNVyo)uoXRlwnc`)qSxKpxxtWQ||^Lq7kyKeO&HC=7Ng-y`G<;Y5ve zIjnMc=-Mb=$hh<3ErhO*;)~D?QG6A;F`9_bP0_^E(9O}r^w6!fiTP&1#%(NN8F#RP zRou-alibJptk3;y%{KhbPVCGB?7<#9#Mzw9!~M@9^hmV!Wa!aoa$e}MXxu|jNBz%} zdIkc87pix&L8zxHKSdJGd?{SGqE>&fSK4R_8{J7qa6v;xq9mvmdR3}okintVHV9Bh z6#-R<LdnbED7od%juh29n6`xZsNVFNW}=0lM<QGGR(cP5=Vu~%5k@g-8^%V(cE@H8 zv_DfvEz#dlxzMiL;OFMVHfuK;6$%LRxOyrMbBlB8%pwq%@@E>Bl(rPgk!Ti*G-sZA z$&b{cF-t;<z+Nl2MP_Nb(FQd!>_*NiMg2CNxWnZ)Sz<9mJ{>l74*V#(_Og*se3qfY z=r&$4R`F=Q%yq~`&YoT`O<RJTrc?zB?wB&=LVb%oMw~5ShWQ;2ECDQ{>s7ItNE}O= zO7-S81p8Co+9^*u{tiy6W16dJhG2nGkw|WkCwjjem#9H)LUqj$4UrBMppDfcPDEAk z^@t$~SS~>(f>HpB0JkIn!mO>bC^E^391P)Qd3c62MhLOtxU)KGBIDsWZCJMx8FmJu zF)az2Ygg<NEzMO8szJs#?~&bTZfW?Jge6EGSCrVJQ0K~lU9E$aIW)0V`+-^8HeNF( zT<QbO{jk>(je+hqgI2?^a%6^Fq?G0+pz9RmaH)!Z*b6eux|&$<uCh+ka<ADv-Rw(e zfrIu0VO>_bcuw3{!|__;L{fw?gQ3skWYuvc(54hKZ*@C!Oafv7<Vd$_SWT7pNEFqf z+PIF>&?9qY)YVd}TiJhrfpQ4M4&1qz*psl6!V_S{yYW<V6>nt8$^yNWOs9hr8u>Pg zFan$-WN<8Q2O4&pZh&u`Oia$xSUcwAj59}exQ6vY-Y!1t&S2_}ujRi8l;oF+Py!RZ zW0=T~byC5(qDnL43WsaE8>Me{aynxibuumXgZ)-D-SqE3i|Vj_WKSr+Jebxs+TUs2 zt=f>RX7Z}q5cQ}%rCPy`qeh>{`a)Gri1S7+$iX4nYPr&10`T{!o0SIuR%v5itblLZ zbJg*o#&xK1FS{UjT5d3QXaE=8D?4zM=(F@1)l&uEQ>w;_7Ih;VIT8m>z53x;U7pFo zqxfBIhNhkyO=*5=$znM#;#;Gn*ebag*$3cu3D9U#knCs3ne1=E!pLhkG|)l+`|pjI zwgPQs+aTu_1>T*1Y*u>jbMa|Mg_|1VEM!?$B;LqH+sL#tB~_HLk7?-=tErqTeud*< zW-NHDwzlQwP)>Fh(8MfA57h%7Za}+i1WYplbkUhf738xaZqP(*)2xPdrcLF4wqPw_ zx8sT6s&tkV&PvDQNGZ9^Vu%_npc%Y^I^#EpW1`^tG~}o}NYwr=q82$Yqr{ph_0%lF zFf-7r>TW3~S0SVpGy>ISd0U;sJcU5vU2IVz6rN<#;5#&N2%sWleyGYm%S^b_5Iz@s zTPN^3+#469*H<umm68>;c~8ktv@-YfVE99rxs_J%(6JqH#k}FRv@}ikgEW^wy{F!B zpH*0Z)6!Lqej$WHV{My7=k_)NxdvMjIVUqMj;&10q^l+wjs7DzX&P9%1ZIwD>5~|| zI*Rf!e(B~2pn|;>*)qrui-|`l+;f7{ji(A$;bm!AUW#0br()XZ5Y0RliMXBCYJeDh zf++jhOg<gD)=_IXkywWd$37+jX54lRoxA_u$kKtO9uW)e=N4bNXdpb=2P_4oj{PnV z6;=!k5~85$NX#VD51J5diKIBq*oTk<d$WNRYfEf=n_}%6LSa;5X$9PKGcX|q5?&Dl zV$y;Xhl$OtY|sj9@!^crmH-I~GSs=CLWyEWHA|{klAdBqg0p;4;Xs?(F|UIZ;LKiz zP_8R_Hk_&E3WAu7Y_zsJjDm$g6OJL?I3W%ab4+QmzpJnB)kkw~5jm<Lerw>RoDfMQ z7t_){(8KQ|2e4P<R<RznF_z)&vksM1w(sx@TD%?TJ?GTT2pb#XD*D_3K|y=v)hSqH zn&QZCMdYyKDvtk4LDPPKlDdjT<|bd$<QJfkV9>-8{kLPpYDipY3$7S4xn~4@?@tco zE>W{6k$qu<J75fx4YOSslNaDXn6Z1a8ZoQz!HO;9l+e(b1m(5h;a@TwyP3_kmTV-P zvui4lO@FR7+T+b|G}gmWusO^MU`L2ZMuQ6ywl}qOVz%g+gl%<P%8pnj#CqgN9yt!j za-(F0mRzvGnf+2|MI-}|A$!OyW&Lrl(N82VUeiniBT~7=rT)6E88SOoC4vveR`7fh zKj_NwJuF<(QJv|=7Ljkj8!yhXMi+`mv=VXRB%-gHSvvWSs(T6Re99;?b7fY5n3~76 zJQwP&%19cA=kjUBOS3nSHvl>?{&+b{$|$!EWCFsm;6X=1`|C#5U;4wvk+;=%P8eq* zkIQdejIrjA>O`_xZ}KcOKP(jFNt#A0uXZMD(xlC9>x^JX?UpQK%`zcb!J;#ns2-tM z_sU%5Dp-sZNKo9MmP4Lswnc$9$sw0e&DDg|6~E3|iLK_-CKvjp=&FxrGS`i-Kz3M` zWRYb>H6g8y!{?T>>3o*l7)+Ln1M%@c&~JN^184%#xk8=ilkr1Z_q~o@Qk2)Qmul99 z%Tn`k$Y0_m0R)87jKxskZSA%K8T@A2h!IOL?yu2J3@HT1ULD(wbQP?fY~^f=CKCNv z8pL8?gg_%<)4A}I*>|e|L!XJsX6{6o$+gK=IMlFVP8{V;OT!U4M;!8<+xo!wye}Ty zQ3t$IeRu2X|6zP`?W1RgcRu2chRX3TD3xt(zP3^_)y={@Pa%_zltXm~Y<t4~x|Y57 zEDQFTHg}=!)D-d51?#rdgJ{Tp?BgLdo)_pEx?sNU`)?F}-}86Rq*+bzTXGFF{ExfP z{9ZbrabkxV7YB6D%?*jpHoY9!ef#@$rKEraii;=R#m>WP%lDKkgQ=VEb@uu5OJcVh zZ#~%c{^vubM0PrpI_%5*Ud!q2C@$@7D<<XjwicK4wG~Zp8CsIqW@KX<!{Rm(bS+3` zirGi=`rC?1`dUg!oO5lZWxeeM6KGwcy-rG=ouLJZ&23DO??tw%aWVAC0qeYA_POdX zQ+IML<?QVA`PL^>C;R$yqMZIyA;cE_l*{UW`9I0Vt%>pU1$uD}6Gqopuyvr?hI&M@ z5b=0hk7zs1c2!~!nM^RYaRgC(gj~gi{nL=@xRQM4lX0PuZvDyd*6V7DN1Ja}MCsP% z8Ln%mR-j*lpWb3-^EZ=11KrwUX6qPA34gfd_Q~kY*Oc%DpHq)|1G^~K^r?gqoiuU! z4e>y=6vBBE>QlZ3_NdCRbVE2C4m`@>V$_P)GP#&};&6#o?Vw_6o{S{D{|>hyGGYOm z{?l61f@8&2bT?~aKA)APmn(@l<py`t=9D-`=D;F`ruMJN_SSEG)E+^N{|(;!)<f;V zNsk7!F+%)KqdEeH{CdKf-tEX)P*S2%nH#h@MIf)<n*HI&pr0Z7`$u{OusM;+x#_Pz zq*W~ZGk22}HJ?{$Lyv*o71X*&MuZnN%%4t)qLGziQbyhc=YHUNb1f*jGe9-va8iHL zHJP=wR}w2@N-im(w9q&f?bVl4V9>IseXZR<$-qr;bnmx`J^QqZ%uzTfzE4?F-?mWE z3(<*tvVnXoPI&h=r6y;AnKgw@Rp6zuf~WzEqRh19Y<B36OQ4IN*pj=B+PW##9~(b7 zJ}>gFBxU9O@sd>;6M?W#LrjNTZ(!|(bu{T5^<;EQsCP_xd}8cLu-qlAf*00MvAi|C zjsdfrBTPmsU7ewsI+T2k=lw0dg{kD!;V=!ldRQy-@~<~D)Bn7}YFYV4M0?XC*nZyO z(SAP62>I7;o*^#Io`F;kPevP+0qQZ<?8us_54;PdX<PF-MP>7)sY1{j&SEs$3R%PU zmn3ZSxOEV*Jh39G*~cTQAt{kn3si>wo!$7S5u0Mc-C!E9p1zrW#s#jjEbmF`L`Q6h zrw}OxwDBT~_K_xoAieI>HdGqosEmw%oqIOD_TY+}ZMBb=lbtPz-``M9(}Lz+LUZ?R zr5t}i5aF_$f2UKu?w&?gv<y7aT;BLY{H|zQ7Thj~D-AMR*EHjE(4iR8Q)jt)v2;QL ze(K2e-Z1`;BK`(h29(h~W(s>x-F~Fb;EkO=-yonUAigx3zxC@kV|KXIBr}#j+alji z!^2I^>EH|2!PxZcV34UQ9C+A7X=OlCdDno6k^<{I4zhr2;4h!(y&K^XE&h9>WHY)` zp9#$ULimyk5N1M<=bc9=vFGm=(Sw08?rG1!@#G42T~7#hn<kMxpH-NMojw1*mXOpp zRsJGQdSP|tEV2-}S@N>(M1DG7j+8q+IjPpuZG7M2euu%)-f`fI8+&ka;L-{*WB=~L z@*o&5CYo~Ewx0mkz@u+1UZ#T*iYY~vJtN=plb)gz?xK_5e&)!STw9$!@;vZWxv@mo zWwgpqnT<W-Y5B29ry5sa(R-zLt*e_z{4M&{2wc=bl}%<t6{|Xs9cnstG(mMHUc;9Y zDbw?@#UGIMIkj-lV1M`E_y`~q>pPo7&!IAVB<5W-hNEP0Fc^Bj9NX>&h=FS#kP5;{ zS>g)aQI3?z_wBAUdbB&oP`<b1<^&fUsP4%gABVcUJr$Fahrwm>!d#7oO#g*Z+1`3{ zcuJb9vzF;&opE^;vqxd2^;2z4>pCnF=Uac&)iiIyBJ=_R^WjFX?VrTlH^sAiexkX* z3MQsSg@qr>jzq-4<=TY@*{X50?XmGL{68dp3D#+e&%3stFnN^J%CoABTUi8xi?BHk z&HFVvH6}PTE<Sl1be+@P5^1_YH1%J(O9?p_{|T)>{f*6en5`OgEHWlCnQlic@hv>K zv%R)-c1(WuYnOOR*-Y_~ZCrSwJJ_|2jgP60UHsMp_FMxKpAYRq?<^W><DTkNX?|An zA2i=xs1K89BRVLK4(KaZ4cLPt(k5srcvu2IpeFqM(OFe%o#tUdSAG!;|6e#Td>Q-0 zv-9cDTW_g9R`ITJ?+Bi-KO3i3N|Ik{!fIgsy(GiLmv`H414l4IkH1;=fO76c32<wb z%ntz1_5gr4uzw%-kplp$hKk^P=@!o0%3)f1@2no0eTF(Kpbv|s_&WqDuJ=BP;|*X@ zrywk@tMSQ&qMpAOzCf<At(_-@>|$l4<P+QYoR)KE{m%IrICaoLRP2svxL)IB)=Qx( z(6O}wi$!tFTjkpWVI0923~+<e{=m4_Tkn;5ahSHy>d-<h_Brk76Gev$B+Nj4+9}Wj zA&Edl{P_n#X&(jlVZ{IAJNWVb_f=#<1fc|mxdexlw<~l8p9Hf#e-;nlYzT=zpbXr= zB@`3RIXkhciu+m1Xb$G+u+QPyxlh4QeCv?PH@Vhhuv%F8?ynS*Fet<*I?n3!PAYCN z^?Dn^pPl5+j1>+qmqL64!(cq5dAgZ?{>h!IhVJ61c|GmcQyz2Eb0J{4=ikkvcZUL! z1%kOHOER9WMVv`o@X@z9-XES+7kfM<nh?ltz5Yf0e;jW`d`D=GUchbrfXuLjZrELM zBc`Cw4^um;)a&g?^**lWk0=2*C_$4lL0MDE%$;Iu<3TYqr&7wP6p)c1#1D_%8n(5- zuITO0K9MLXm|N|>v40JQhT62WcZx1i!qSU#tt-I}n#h<cPzI@G0&h}G(T%6}ZP9Jd z2hKfsG^{*CC%SrNX{5rc(x4BS;+d)w{6~oZQk4YWwAixiJ)L)vJ6DuO=#DPlDTblH zl?Y(AuQ~Pi$AY@o5&|MC2>IV#s?(B(Q8=Eu*cKKezG<)~zCD~7+XfcT#Q$4VooWk; z{;LFBuLSuRVaK}fyxot%an&$eL-I94uV^##AA{MxoofHBzK|R-_Fv$7rTiz5-7>Xu z824{It2r=NhcST<&IyWW2GwteJCC$!M&3{&i1K8(SJtVYhKq;rVTQ3%nNGjTwkD?@ z{hX>-GIn%wBRiUDsnZB^hsZL^l*g5S&fm>{=9kzNAcnSMID1lDjX|!;lK;~5B{{?A zX6n|jU8QO2T$;p&=>~rI8NtjP>pOoNnY^iVrMs>|C-|>20SjoqJ1^8ErwJ1IVbs8E zs-Sp4O4O3@^+6Y_+l|wdD(b)4{}lLtj+*1OL{0bWOj0H&y7)?Kis}HW_I8twtoCA( z-}8ABQ?b_rE>0Q@C92ejkuF^RD7uz4@PFghdf+)AhlU2RZa*J-+=sq3eQ9`USW~yj zR@S}{NqM$7L>uy2n#QbEYk`+gKX8xtgVN0!JbGh#@w~@*j}K4LA8Yh<n}#%o7vaJj z`c~iLp{Fl-ynO?}jv{^e(uWG0biMWlYXULQVHUYOvQX`C+@Ph-!oY@M2i@u0DDf{^ z;-h;lyxfYs+&CFmcMiOF4~vvdKC6>kzq58({<-3!<g2GjR~6siS!j{F_!eowB5r{p z&LP2-(5TcEQU+QkT!pDdq~dLrZ8}l38B^b~S;xJ2@8{a%>FxKEif-<n&gSm^e!PqL zO|Za*H>BUYf96<5c2OxOKd}Dh16EUMdC#S|tS)BiT3uXe1-n#KGaK$r`PUZ~k&9kT zYC`zE@wlkS9M^3U62tF|#YV9S)0YjD1JmZU^v&+R>c_?6`f!q}lA3**v6}tg&F>n( zaUofZ>>bQc43MW5&Novz!I%5RZhb`*X71y_^SIA(cC3wwS%xz!=wbw|iaF9u&kMP9 zZuisAzeE=9DtV+Z!y^;zEy<DOX#Z;w-nCC-Yz_umx!9!ce{1fn=50)Kh~E!VcsIN~ z$;jB29A;~iW@qzMOUH>sFmNE_wToXDuzKcN+t+M*b$TSaZ+yC;wWqD>w4av?l^(<a zc4~Yuhwka=6wsd2Q6(pOwzU!4TCeC@r-<z^73;21bjEhxyX<LmE8~pIj|%r5jL}Fp zC#FcZuXuvjWL=n@b6P@H3L~;JsW(LHc$^tYQ@uwhtS=)!uf8<b&|ligH}e2xPgg$E z7TgRps9-3Xa0iom&H~(CfUn*ed%r*bTfU+>*SJX6^ya6t*+!4lBipzws<HJ`O?GDH z_GfbQZG23$t*r@kC<c5x&rs(O@GK9+G&e^^G&HR?oQ`0%o)+Q7TUz6_Ep3@Z+b|Ll z4pI6@+a%T>mgBag#~-nq7{3ia7^!0wDgaxZBIW9<*?aU++}SgEl}#Cm*2LIw_lg)_ z5S55_Nu;V2XdLR3e;Cr0l6~@QLU<xaqv}8@<9vE$$+?`EN6HrJ+J=@Y^kkreSO*wL z;5R_#1|cflDIu^*H|)0(L5RzOO3e=;s$NtAu2)dV>$J-IXLg3~@9H7o8h{fQt-Rby z=x&AHuGS=)J5ag1t7OU}&mZsL?qE9~GFPy{D3pLm-Ge<>4>ZIli33lNf7AFior$Rq zQsb3tXBx(?xAtKI=n+m1v~ciq@~1~QI?!1ma4IX;sI{R&k0?i0JyT~-^F*AKkcsWt zXEPi3t~S=z`qAa~`6E;n4Zpk{ab=JxWH;VnN72|j@Xw~ZaKO*aO_2hoJ>sb=r4OcY zntEBC?#`n+>N=HB)Lb2Z6b}@axz#?~vaDRou9j@yxE7{A4LaBJ{e{lt)GN7*LpLde z41*qZ_V{;_Vfc*b-?}7B&EBvJAFR~8Yg#s85oCe~1Xi12EAsdQ&OM25pD|w*m4Isi z_ibc8J~RGCdSVm;T}t+EetlY;SiN<Q#q71;Yv|x%U!7YyxN>98`HW&Be%W6u*^xpr zQL}V+Hmgdk_KO&Cw5GaPHe#m1{=LMn!g3SK2lmG<&kQ!7`E~9qbm`kUx!Jq;SZm|N zsxVidJdcey7Ihn$-sb*z<}`n7VRF2EmZH0=-BptAtcf;zS|e69V64ptA}L0CPUae# zZ8TPlAS+$Y$2}PEyQKeeL7q)dj_9ZAin5jTjQ9B;e(*oa54TmXiDQo^+eg><#S$y_ z(dIuL9n3z<vWq_V%EF~0I;Jv{omdhOnmp0~mYN2bRZOd*C5=KN(p{`9JY8&TJt*tN za;|(X!LD*vCCwqvZdY3WyGwQ5*GZaK(H!#p(Mg<s)&YC8xY1!|Y}<HE%pT_*)dv{y zO<?ggd$tW^|4{~>CS{dI!<Jj~dwFo&r}=a6!4vo}&M#A^5<v;#O(CH}Jh@N2yp|u; zWz<`Zm8cp>?GTUq*6d}nVZv!8`^o!+3T{RTQL9@oLJxkR;|jR!Yfk>}Lt)*A6P3Bu zv&ifZWV4|}gq@WZ>XwUhR&}^c(tl~1xOSqlpz@i-AvBJsp54M?MmG(eifv^wqFV_A zZT9}rBFrcmf4V>D#(flAJymw9Y!SO(ybE~ZkGN+hc+<1usBXt&ef^Kc$GE6A1U0Ct z^#$~SPVo2W>{{P_O`*DPWK|HgPQIwDdS3;HME%#&DmXO|T~*F=aLYrT=v=Ax37ZB% zmF>PO2UXg=T2Bjn3U}3USo>qBiqS1-2Wr4Wcw$+iJh`Zb7j<uepZBXBlAP{VfjT*N zJMJOAK`(*xCoKC|7%L+c2|65_mBwV`q=tjNz~_?7Qn})1`!ZmM>kE`CBW0I;E`_tK z|5#pu?jpt!Q(j(C&u~>x*-n+q;n9@g`Q2UHotEF=9QL=NBsU{#;WPN^t>`5ygR`%7 zOmhU2oUf6-q)0#i426ccsAEx83K^S&nf)dG`K%f+QFis+^o7xx<a?uu-2eGzA#aj! zaLZpV9BX`USaoK4CL~XppbXkpI5$3<8=d6&WlQ<1Z{HQU^5Ncejf*01{ZO8Y_6N1x z;9TosrMI~#D8%UrwBNq@Eu3L|{oeC3&-<lZI5$4q9%KMl1v8F|!MDecpTYIVreC%R zFLlZLyf`))9o1E3jfF`1eX)we`p30>=>{}YH7~onw0mdo*$iVa7&z2$T%1uZpNZwq z-{}VNbxj==RgLXPd2fAd_sR0sbEod}Rx<<9oSUvXrkcU10>IA1{r?|@T2VWxjSm}X z0-T_&N0E<Orf0xC4PW!C#Yuv*Zk1Dzos!yJdm?i<2MKzFwh9i5*6K0RJaiXSTK9I9 zXSfM_TAGF@<dh`G^_<Q>b*=?fY4qgV`p5c9j_UhT<BpgaX#~PxvrY30+sLkt<Irdl z6RDeFkilw6I$73{#LCPfu=UwtXA=1v;xAosW`;T+C{jOKBo<Ega3kA$xWOAWb1kRT z6It0wgB{srZ5>c+@Z!yjHPKe4w>;jIa@vH;KAxdUu+j~Gtw7VoBNs*z{})(|#YOg} zlS7x*zp&igurlX0Sf5xY4@Q2cYS};8I-47Ik)_`F{n?ErfLd>A+Ehxeyn){SE^6hQ ziy~gH1JT#LhkoR?@?kV+tDcH&l*xFY+JVRGrxx|Bwg15GZBxqj7emNdXRohjit+54 z;!Ca9&f2oJFisX5f!|Zgd;aIv0T~Z~xQ9OO3<iS1U?><4MyjLR2RG4E*0+~=xn&V4 z+pEd=awAz{Y@af>iuRIBFD!9s@hw%dKTa+;dY6NjTbeEUNXC~F$r3qRGBwJPq-EzM z;}Mc2U3*JrcXXP5<)hQuQ{)3Jc@}8N{Xk2m11(u~`n$M)YY#^DAz7kxOQvhiXhKdn zE1G73z-p#$nLaRL%g=4gcIsO(_lGR(?L6Z<8Bxq2SBAOg0D3;pPzQ#nWTTu~-NT)T zS>tZo6J^`@4Y$+ZDWeD0NbPs=SUuEH_LBO5B2JSi>>HtQScFnN!+CO~Ch!!yNuDG2 z)auMroVQta_j}jMrs=2)5bjFtj;L5`5&^^36M+7wH=Q`I|0p+-PJdj1!}FcDcdRzm z)7+%h!CEgEv^DK4SJ2*U1AM?Rqdl)ST(hm3il|z9mOTvp?74<Xq`Do81HfhdM~g29 z;iEn#->*!J;uvZdcWSkll^Hx(`|E9tmS?EX?k%Dy`t)0gEWe{Umhpgg!bs;5Xa)Sg zol@>&jr`qi$O3uTNdIzWq5d2wuc}fN#sjl^KRiS4$xn@h>UW||j<mS<&89ZeL1CN5 zFRqqP+M}Bo1@cEMSActf$!+XD!m5sCKGvu|(*dbgKw$u+ZyV`Pg7Q?`#sP61wSI=X zs9*IR?Is4u*=@|66|fipnJtG-3p*YngKlE<cz+-{y7$<mzAWN?m-;#!iFdBsCHa#t zK&&(GeV>Ta$s&fo^GZ(vz#Bh_ZVtf5#pRR#)c>EU<V}f%;DZ7vV6=KH2r%{PC>-OL z0nr@fuUaI?yfW@r5t~VilT7nQb*@2gANe*@#A3@N9w)EnnFF<nZ2HhI->Fm?kwK9j zfBLsK<10F`#uQx`1UVzyyX_w4j)gS+6r+=s@>5w-{q4x;Alnvzr!AM&47oQgS($+e z*msNN(>hlXZmKfLfhOTAZnH<I#B?0Pd9w#)%awDb++da8@>gpqt{LDNx^>zvlKB-X zKSvIIN!1VN)d<xKsMc~wJVrZhSZ1cERAru7{r#jM#XItOl2xV%3q=tj(VNp+R47Ux zK8eayjN~w%ujI~-4P8~9UX0+M?U(|D+V|vA%&x>h(`*xM)Pq~^XQSNIF~eL&)(Olh zfvu2p+Tf3r(Rk47RX&3?_gbu=?l>?R()Ess(p6=prybAuO}9Tg_2?9wpPZ;0Y=faF z_6YF*)_Ju{Lfvs>8y7rCaUBx*)ZeT|xlp+avzE;}-^p!)@`fqqS;sZYm}Cy~EEF9Y zIHL)EBVCmGOKO~zSYL`y2~Zve1%Nh7?I0_n%nK{C2<3m~)dag*Ays|m@m^lrkQ?b( z!Q@m=Qi$L1S;MmliOU!j`Hn<>AU}%0DgjfrLy!OH7I_d+2agrjP7B^5ej@@NE3BQ? zsB0EkhwNI-xo>7}z#cM4@+TL7(JxniqW+xTo4x+~ESBORcaW`ti>{ipKJbJ_?@GZ* z?Pq-T8S5WeQ-oz;py7Un`xtJ40lC{9N=b6SrG}aH+fZBM{yNbVA<&SV3Y-MAIS4^M zDk@E6&OwtDGa7?AT=vQ5hMS=8)e3WUgM}z;$zm{s3KIuMlRAwS;}AuqURi?oOBN}R znlUr5X1Yw<Sk(kiA1p?~ErY0;GD<)v4s*k@cYIz52kSmx#$sS2y`Xlv7F`C;M(Z-V zj$}Tr7>AAEXlqFHYW%Ug35=S9sfiLJ)Uz-I8XM`@#Ih<oWEQMApbUG&!3_07#_~JU GBijI38=b8H diff --git a/grady/frontend/src/assets/fonts/roboto-light.woff2 b/grady/frontend/src/assets/fonts/roboto-light.woff2 deleted file mode 100644 index dc034ba45e32b5faee7612dc47a216feefe63f60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11180 zcmV;dD^t{WPew8T0RR9104uBj4gdfE097~u04r4h0RR9100000000000000000000 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 K>!dxn=l}reLG||l diff --git a/grady/frontend/src/assets/fonts/roboto-medium.woff2 b/grady/frontend/src/assets/fonts/roboto-medium.woff2 deleted file mode 100644 index 5ab8a6561a35603d2223a320e335561134c3529e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11056 zcmV-0E6>z-Pew8T0RR9104p#64gdfE091Sc04mr30RR9100000000000000000000 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 diff --git a/grady/frontend/src/assets/fonts/roboto-regular.woff2 b/grady/frontend/src/assets/fonts/roboto-regular.woff2 deleted file mode 100644 index 4fc449afdba7aeb19b03c1f216e369f20a3e2191..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11016 zcmV+jEBDlQPew8T0RR9104oRp4gdfE090@Q04lKn0RR9100000000000000000000 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 CxrlrK diff --git a/grady/frontend/src/assets/fonts/roboto-thin.woff2 b/grady/frontend/src/assets/fonts/roboto-thin.woff2 deleted file mode 100644 index 32fd373c3f4b4a1e8dd61f3c3eb7867b596efd14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10984 zcmV<EDi_svPew8T0RR9104nGJ4gdfE09F7104k3F0RR9100000000000000000000 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 WD7ir|%d3<S`blwlhfeGi0000d%1cWC diff --git a/grady/frontend/src/assets/material-icons.css b/grady/frontend/src/assets/material-icons.css deleted file mode 100644 index d380d74c..00000000 --- a/grady/frontend/src/assets/material-icons.css +++ /dev/null @@ -1,23 +0,0 @@ -/* fallback */ -@font-face { - font-family: 'Material Icons'; - font-style: normal; - font-weight: 400; - src: url(fonts/Material-Icons.woff2) format('woff2'); -} - -.material-icons { - font-family: 'Material Icons'; - font-weight: normal; - font-style: normal; - font-size: 24px; - line-height: 1; - letter-spacing: normal; - text-transform: none; - display: inline-block; - white-space: nowrap; - word-wrap: normal; - direction: ltr; - -moz-font-feature-settings: 'liga'; - -moz-osx-font-smoothing: grayscale; -} \ No newline at end of file diff --git a/grady/frontend/src/class-component-hooks.ts b/grady/frontend/src/class-component-hooks.ts deleted file mode 100644 index 2518b8b6..00000000 --- a/grady/frontend/src/class-component-hooks.ts +++ /dev/null @@ -1,8 +0,0 @@ -import Component from 'vue-class-component' - -// Register the router hooks with their names -Component.registerHooks([ - 'beforeRouteEnter', - 'beforeRouteLeave', - 'beforeRouteUpdate' // for vue-router 2.2+ -]) diff --git a/grady/frontend/src/components/AutoLogout.vue b/grady/frontend/src/components/AutoLogout.vue deleted file mode 100644 index 2d4d662b..00000000 --- a/grady/frontend/src/components/AutoLogout.vue +++ /dev/null @@ -1,117 +0,0 @@ -<template> - <v-dialog - v-model="logoutDialog" - persistent - max-width="30%" - > - <v-card id="logout-dialog"> - <v-card-title class="headline"> - You'll be logged out! - </v-card-title> - <v-card-text> - Due to inactivity you'll be logged out in a couple of moments.<br> - Any unsaved work will be lost. - Click Continue to stay logged in. - </v-card-text> - <v-card-actions> - <v-btn - id="logout-btn" - text - color="grey lighten-0" - @click="logout" - > - Logout now - </v-btn> - <v-spacer /> - <v-btn - id="continue-btn" - text - color="blue darken-2" - @click="continueWork" - > - Continue - </v-btn> - </v-card-actions> - </v-card> - </v-dialog> -</template> - -<script lang="ts"> -import Vue from 'vue' -import Component, { mixins } from 'vue-class-component' -import { Watch } from 'vue-property-decorator' -import { mapState } from 'vuex' -import { Authentication } from '@/store/modules/authentication' -import { actions } from '@/store/actions' -import { getters } from '@/store/getters' -import { ConfigModule } from '../store/modules/config' -import * as api from '@/api' - -@Component({ - name: 'auto-logout' -}) -export default class AutoLogout extends Vue { - timer = 0 - logoutDialog = false - - get lastTokenRefreshTry () { return Authentication.state.lastTokenRefreshTry } - get refreshingToken () { return Authentication.state.refreshingToken } - get jwtTimeDelta () { return ConfigModule.state.config.timeDelta } - get lastAppInteraction () { return getters.state.lastAppInteraction } - get accessToken () { return Authentication.state.token } - - logout () { - this.logoutDialog = false - actions.logout('You have been logged out due to inactivity.') - } - - continueWork () { - Authentication.refreshJWT() - this.logoutDialog = false - } - - @Watch('lastAppInteraction') - onLastInteractionChange () { - const timeSinceLastRefresh = Date.now() - this.lastTokenRefreshTry - const timeDelta = this.jwtTimeDelta - // refresh jwt if it's older than 20% of his maximum age - if (this.$route.name !== 'login' && timeSinceLastRefresh > timeDelta * 0.2 && - !this.refreshingToken) { - Authentication.refreshJWT() - } - } - - mounted () { - // release locked assignments when user is logged in and page is closed - window.addEventListener('unload', (event: Event) => { - // we use synchronous xhr's here to prevent the page from unloading before the request was finished - if (this.accessToken !== '' && Authentication.isTutorOrReviewer) { - api.releaseUndoneAssignmentsSynchronized(this.accessToken) - } - if (this.accessToken !== '' && Authentication.isStudent && !ConfigModule.state.config.instanceSettings.exerciseMode) { - api.disableAccount(this.accessToken, Authentication.state.user.pk) - } - }, false) - - this.timer = setInterval(() => { - const timeDialogAppearsBeforeLogout = Math.min(600 * 1e3, - this.jwtTimeDelta ? this.jwtTimeDelta * 0.5 : Infinity) - if (this.$route.name !== 'login' && Authentication.isLoggedIn) { - if (Date.now() > this.lastTokenRefreshTry + this.jwtTimeDelta) { - this.logoutDialog = false - actions.logout('You\'ve been logged out due to inactivity.') - } else if (Date.now() + timeDialogAppearsBeforeLogout > this.lastTokenRefreshTry + this.jwtTimeDelta) { - this.logoutDialog = true - } - } - }, 1 * 1e3) - } - - beforeDestroy () { - clearInterval(this.timer) - } -} -</script> - -<style> -</style> diff --git a/grady/frontend/src/components/BaseLayout.vue b/grady/frontend/src/components/BaseLayout.vue deleted file mode 100644 index 6ba26e3d..00000000 --- a/grady/frontend/src/components/BaseLayout.vue +++ /dev/null @@ -1,199 +0,0 @@ -<template> - <div> - <v-navigation-drawer - fixed - clipped - app - permanent - width="300" - :mini-variant="mini" - > - <v-toolbar> - <v-list> - <v-list-item> - <v-list-item-action v-if="mini"> - <v-btn - icon - @click.native.stop="mini = !mini" - > - <v-icon>chevron_right</v-icon> - </v-btn> - </v-list-item-action> - <v-list-item-content - class="title" - > - {{ currentExam }} - </v-list-item-content> - <v-list-item-action v-if="!mini"> - <v-btn - icon - @click.native.stop="mini = !mini" - > - <v-icon>chevron_left</v-icon> - </v-btn> - </v-list-item-action> - </v-list-item> - </v-list> - </v-toolbar> - <slot name="sidebar-content" /> - <div class="sidebar-footer"> - <v-btn - id="feedback-btn" - href="https://gitlab.gwdg.de/j.michal/grady/issues" - target="_blank" - :block="!mini" - :fab="mini" - :text="mini" - :tile="!mini" - depressed - :class="{ 'fab-button': mini }" - > - <v-icon :left="!mini"> - feedback - </v-icon> - <div v-show="!mini"> - Feedback - </div> - </v-btn> - </div> - </v-navigation-drawer> - <v-app-bar - app - dense - clipped-left - fixed - dark - color="indigo darken-4" - class="grady-toolbar" - > - <router-link to="/home"> - <v-app-bar-title>Grady</v-app-bar-title> - </router-link> - <v-tooltip - v-if="multipleExams" - bottom - > - <template #activator="{ on }"> - <v-btn - id="examsButton" - color="cyan" - @click="changeExamSelection" - v-on="on" - > - Exams - </v-btn> - </template> - <span>Change selected Exam</span> - </v-tooltip> - <span class="pl-2 grady-speak">{{ gradySpeak }}</span> - <v-spacer /> - <instance-actions /> - <v-divider vertical /> - <user-options /> - </v-app-bar> - </div> -</template> - -<script> -import { mapGetters, mapState } from 'vuex' -import { UI } from '@/store/modules/ui' -import { mapStateToComputedGetterSetter } from '@/util/helpers' -import UserOptions from '@/components/UserOptions' -import InstanceActions from '@/components/InstanceActions' -import { Authentication } from '@/store/modules/authentication' -import { ConfigModule } from '../store/modules/config' -import ax, { fetchExamTypes } from '@/api' - - -export default { - name: 'BaseLayout', - components: { InstanceActions, UserOptions }, - data () { - return { - examTypes: [], - } - }, - computed: { - gradySpeak () { return Authentication.gradySpeak }, - currentExam () { return ConfigModule.state.config.currentExam }, - multipleExams () { - return this.examTypes.length > 1 - }, - isStudent () { return Authentication.isStudent }, - ...mapStateToComputedGetterSetter({ - pathPrefix: 'UI', - items: [ - { - name: 'mini', - path: 'sideBarCollapsed', - mutation: UI.SET_SIDEBAR_COLLAPSED - } - ] - }) - }, - created () { - this.loadExamTypes() - }, - methods: { - logFeedbackClick () { - this.darkModeUnlocked = true - }, - changeExamSelection () { - this.$router.push({ name: 'exam-selection' }) - }, - async loadExamTypes () { - try { - const response = (await ax.get('/api/examtype/')).data - this.examTypes = response - console.log('loaded examtypes') - } catch (ex) { - console.log(ex) - } - } - } -} -</script> - -<style scoped> - .sidebar-footer { - width: 100%; - bottom: 0px; - } - - .grady-toolbar { - font-weight: bold; - } - - .title { - color: gray; - white-space: nowrap; - } - - .fab-button { - margin: 0 12px; - } - - .fab-button-white { - color: grey !important; - } - - .dark-mode-switch { - margin-left: 22px; - } - - .v-btn { - margin: 15px; - } - -</style> - -<style> - .grady-toolbar > div { - padding-right: 0; - } - - .grady-toolbar .v-btn { - letter-spacing: initial; - text-transform: none; - } -</style> diff --git a/grady/frontend/src/components/ChangeLog.vue b/grady/frontend/src/components/ChangeLog.vue deleted file mode 100644 index a1785ab2..00000000 --- a/grady/frontend/src/components/ChangeLog.vue +++ /dev/null @@ -1,91 +0,0 @@ -<template> - <v-card name="change-log"> - <v-toolbar - color="teal" - > - <v-toolbar-title - style="min-width: fit-content;" - > - Change Log - </v-toolbar-title> - <v-spacer /> - <span style="font-size:16px;"> - Current version: {{ version }} - </span> - <v-btn - icon - @click="sendReq" - > - <v-icon v-if="!updating"> - refresh - </v-icon> - <v-progress-circular - v-else - indeterminate - color="black" - size="20" - /> - </v-btn> - </v-toolbar> - <ul id="releaseList"> - <li - v-for="release in releases" - :key="release.tag_name" - > - <h2 style="margin: 2%;"> - Release: {{ release.tag_name }} - </h2> - <!-- eslint-disable-next-line --> - <span class="releaseInfo" v-html="release.description_html"/> - <v-divider /> - </li> - </ul> - </v-card> -</template> - -<script lang="ts"> -import Vue from 'vue' -import * as api from '@/api' -import { GitlabRelease } from '@/models' - -const Changelog = Vue.extend({ - name: 'Changelog', - data() { - return { - releases: [] as GitlabRelease[], - version: '', - updating: false, - } - }, - mounted() { - this.sendReq() - }, - methods: { - async sendReq() { - this.updating = true - - try { - this.releases = await api.fetchReleases() - this.version = (await api.fetchConfig()).version - } - catch (ex) { - throw new Error('Error fetching grady version.') - } finally { - this.updating = false - } - } - } -}) - -export default Changelog -</script> - -<style> - .releaseInfo h2 { - font-size: 19px; - } - ul { - max-height: 350px; - overflow: auto; - } -</style> diff --git a/grady/frontend/src/components/CorrectionStatistics.vue b/grady/frontend/src/components/CorrectionStatistics.vue deleted file mode 100644 index 6defa04c..00000000 --- a/grady/frontend/src/components/CorrectionStatistics.vue +++ /dev/null @@ -1,73 +0,0 @@ -<template> - <v-card - id="correction-statistics" - class="py-2" - > - <v-card-title> - <span class="title">Statistics</span> - </v-card-title> - <div v-if="loaded"> - <ul class="inline-list mx-3"> - <li>Submissions per participant: <span>{{ statistics.submissionsPerStudent }}</span></li> - <li>Submissions per type: <span>{{ statistics.submissionsPerType }}</span></li> - <li> - Curr. mean score: - <span> - {{ statistics.currentMeanScore === null ? 'N.A.' : statistics.currentMeanScore.toFixed(2) }} - </span> - </li> - </ul> - <v-divider class="mx-2 my-2" /> - <div - v-for="(progress, index) in statistics.submissionTypeProgress" - :key="index" - > - <v-card-title class="py-0"> - {{ progress.name }} - </v-card-title> - <div class="mx-3"> - <v-progress-linear - :value="progress.feedbackFinal / progress.submissionCount * 100" - buffer - :buffer-value="(progress.feedbackInValidation + progress.feedbackFinal) * 100 / progress.submissionCount" - :color="progress.feedbackFinal === progress.submissionCount ? 'green' : 'blue'" - /> - </div> - </div> - </div> - </v-card> -</template> - -<script> -import { actions } from '@/store/actions' -import { ConfigModule } from '@/store/modules/config' - -export default { - name: 'CorrectionStatistics', - data () { - return { - loaded: false - } - }, - computed: { - statistics () { - return this.$store.state.statistics - } - }, - created () { - if (ConfigModule.state.config.examId !== '') { - actions.getStatistics().then(() => { this.loaded = true }) - } - } -} -</script> - -<style scoped> - .inline-list li { - display: inline; - margin: 0px 5px; - } - .inline-list span { - font-weight: bolder; - } -</style> diff --git a/grady/frontend/src/components/FreeLocksButton.vue b/grady/frontend/src/components/FreeLocksButton.vue deleted file mode 100644 index df5bb258..00000000 --- a/grady/frontend/src/components/FreeLocksButton.vue +++ /dev/null @@ -1,54 +0,0 @@ -<template> - <v-tooltip bottom> - <template #activator="{ on }"> - <v-btn - text - icon - :disabled="!activeAssignmentsExist" - :loading="loading" - @click="freeLocks" - v-on="on" - > - <v-icon>vpn_key</v-icon> - </v-btn> - </template> - <span>Free all locked Submissions</span> - </v-tooltip> -</template> - -<script> -import { deleteAllActiveAssignments, fetchActiveAssignments } from '@/api' -import { TutorOverview } from '@/store/modules/tutor-overview' - -export default { - name: 'FreeLocksButton', - data () { - return { - activeAssignmentsExist: false, - loading: false, - shortPollInterval: null - } - }, - async created () { - this.activeAssignmentsExist = await this.checkForActiveAssignments() - this.shortPollInterval = setInterval(async () => { - this.activeAssignmentsExist = await this.checkForActiveAssignments() - } , 5e3) - }, - beforeDestroy () { - clearInterval(this.shortPollInterval) - }, - methods: { - async checkForActiveAssignments () { - return (await fetchActiveAssignments()).length > 0 - }, - async freeLocks () { - this.loading = true - await deleteAllActiveAssignments() - this.loading = false - // Just lie to the user for now. The actual value will be fetched by the timeout soon. - this.activeAssignmentsExist = false - } - } -} -</script> diff --git a/grady/frontend/src/components/GDPRNotice.vue b/grady/frontend/src/components/GDPRNotice.vue deleted file mode 100644 index 48271010..00000000 --- a/grady/frontend/src/components/GDPRNotice.vue +++ /dev/null @@ -1,151 +0,0 @@ -<template> - <div> - <h4>Allgemeiner Hinweis und Pflichtinformationen</h4> - <p /> - - <h4>Benennung der verantwortlichen Stelle</h4> - <p>Die verantwortliche Stelle für die Datenverarbeitung auf dieser Website ist:</p> - <p> - <span id="s3-t-firma">Institut für Informatik - Georg-August-Universität Göttingen</span><br> - <span id="s3-t-ansprechpartner">Dr. Henrik Brosenne</span><br><span id="s3-t-strasse">Goldschmidtstraße 7</span><br> - <span id="s3-t-plz">37077</span> <span id="s3-t-ort">Göttingen</span> - </p> - <p> - Die verantwortliche Stelle entscheidet allein oder gemeinsam mit anderen über die Zwecke und Mittel der - Verarbeitung von personenbezogenen Daten (z.B. Namen, Kontaktdaten o. Ä.). - </p> - - <h4>Recht auf Beschwerde bei der zuständigen Aufsichtsbehörde</h4> - <p> - Als Betroffener steht Ihnen im Falle eines datenschutzrechtlichen Verstoßes ein Beschwerderecht bei der zuständigen - Aufsichtsbehörde zu. Zuständige Aufsichtsbehörde bezüglich datenschutzrechtlicher Fragen ist: - </p> - <p> - Die Landesbeauftragte für den Datenschutz Niedersachsen<br> - Prinzenstraße 5<br> - 30159 Hannover<br> - </p> - - <h4>Recht auf Datenübertragbarkeit</h4> - <p> - Ihnen steht das Recht zu, Daten, die wir auf Grundlage der Erfüllung eines Vertrags - automatisiert verarbeiten, an sich oder an Dritte aushändigen zu lassen. Die Bereitstellung erfolgt in einem - maschinenlesbaren Format. Sofern Sie die direkte Übertragung der Daten an einen anderen Verantwortlichen verlangen, erfolgt dies nur, soweit es technisch machbar ist. - </p> - - <h4>Recht auf Auskunft, Berichtigung, Sperrung, Löschung</h4> - <p> - Sie haben jederzeit im Rahmen der geltenden gesetzlichen Bestimmungen das Recht auf unentgeltliche Auskunft über - Ihre gespeicherten personenbezogenen Daten, Herkunft der Daten, deren Empfänger und den Zweck der - Datenverarbeitung und ggf. ein Recht auf Berichtigung, Sperrung oder Löschung dieser Daten. Diesbezüglich und - auch zu weiteren Fragen zum Thema personenbezogene Daten können Sie sich jederzeit über die im Impressum aufgeführten Kontaktmöglichkeiten an uns wenden. - </p> - - <h4>SSL- bzw. TLS-Verschlüsselung</h4> - <p> - Aus Sicherheitsgründen und zum Schutz der Übertragung vertraulicher Inhalte, die Sie an uns als Seitenbetreiber - senden, nutzt unsere Website eine SSL-bzw. TLS-Verschlüsselung. Damit sind Daten, die Sie über diese Website - übermitteln, für Dritte nicht mitlesbar. Sie erkennen eine verschlüsselte Verbindung an der „https://“ - Adresszeile Ihres Browsers und am Schloss-Symbol in der Browserzeile. - </p> - - <h4>Datenschutzbeauftragter</h4> - <p>Wir haben einen Datenschutzbeauftragten bestellt.</p> - <p> - Datenschutzbeauftragter der Universität<br> - Prof. Dr. Andreas Wiebe<br> - Lehrstuhl für Bürgerliches Recht, Wettbewerbs- und Immaterialgüterrecht, Medien- und Informationsrecht<br> - Platz der Göttinger Sieben 6<br> - 37073 Göttingen<br> - Tel.: 0551 39 - 7381<br> - Fax: 0551 39 - 4437<br> - E-Mail: lehrstuhl.wiebe@jura.uni-goettingen.de - </p> - - <h4>Server-Log-Dateien</h4> - <p>Der Provider der Website erhebt automatisch Informationen, die Ihr Browser automatisch an uns übermittelt. Dies sind:</p> - <p> - <ul> - <li>Besuchte Seite auf unserer Domain</li> - <li>Datum und Uhrzeit der Serveranfrage</li> - <li>Browsertyp und Browserversion</li> - <li>Verwendetes Betriebssystem</li> - <li>Referrer URL</li> - <li>Hostname des zugreifenden Rechners</li> - <li>IP-Adresse</li> - </ul> - </p> - <p> - Es findet keine Zusammenführung dieser Daten mit anderen Datenquellen statt. Grundlage der Datenverarbeitung - bildet Art. 6 Abs. 1 lit. b DSGVO, der die Verarbeitung von Daten zur Erfüllung eines Vertrags oder - vorvertraglicher Maßnahmen gestattet. - </p> - - <h4>Registrierung auf dieser Website</h4> - <p> - Zur Nutzung bestimmter Funktionen müssen Sie sich auf unserer Website registrieren. Die übermittelten Daten - dienen ausschließlich zum Zwecke der Nutzung des jeweiligen Angebotes oder Dienstes. Bei der Registrierung - abgefragte Pflichtangaben sind vollständig anzugeben. Andernfalls werden wir die Registrierung ablehnen. - </p> - <p>Im Falle wichtiger Änderungen, etwa aus technischen Gründen, informieren wir Sie</p> - <p> - Wir speichern die bei der Registrierung erfassten Daten während des Zeitraums, den Sie auf unserer Website - registriert sind. - Gesetzliche Aufbewahrungsfristen bleiben unberührt. - </p> - - <h4>Speicherdauer von Beiträgen und Kommentaren</h4> - <p> - Beiträge und Kommentare sowie damit in Verbindung stehende Daten, wie beispielsweise der Benutzername, - werden gespeichert. Der Inhalt verbleibt auf unserer Website, bis er vollständig gelöscht wurde oder aus - rechtlichen Gründen gelöscht werden musste. - </p> - <p> - Die Speicherung der Beiträge und Kommentare erfolgt auf Grundlage Art. 6 Abs. 1 lit. b DSGVO zur Erfüllung des - Arbeitsvertrages. - </p> - - <h4>Session storage</h4> - <p> - Unsere Website verwendet den Session storage des Browsers. In diesem werden für die Dauer einer Sitzun (Session) - Daten auf Ihrem Endgerät gespeichert. - </p> - - <h4>Google Web Fonts</h4> - <p>Unsere Website verwendet Web Fonts von Google. Anbieter ist die Google Inc., 1600 Amphitheatre Parkway, Mountain View, CA 94043, USA.</p> - <p> - Durch den Einsatz dieser Web Fonts wird es möglich Ihnen die von uns gewünschte Darstellung unserer Website - zu präsentieren, unabhängig davon welche Schriften Ihnen lokal zur Verfügung stehen. Dies erfolgt über - den Abruf der Google Web Fonts von einem Server von Google in den USA und der damit verbundenen Weitergabe - Ihrer Daten an Google. Dabei handelt es sich um Ihre IP-Adresse und welche Seite Sie bei uns besucht haben. - Der Einsatz von Google Web Fonts erfolgt auf Grundlage von Art. 6 Abs. 1 lit. f DSGVO. Als Betreiber dieser - Website haben wir ein berechtigtes Interesse an der optimalen Darstellung und Übertragung unseres Webauftritts. - </p> - <p> - Das Unternehmen Google ist für das us-europäische Datenschutzübereinkommen "Privacy Shield" zertifiziert. - Dieses Datenschutzübereinkommen soll die Einhaltung des in der EU geltenden Datenschutzniveaus gewährleisten. - </p> - <p> - Einzelheiten über Google Web Fonts finden Sie unter: - <a href="https://www.google.com/fonts#AboutPlace:about">https://www.google.com/fonts#AboutPlace:about</a> - und weitere Informationen in den Datenschutzbestimmungen von Google: - <a href="https://policies.google.com/privacy/partners?hl=de">https://policies.google.com/privacy/partners?hl=de</a> - </p> - <p> - <small>Quelle: Datenschutz-Konfigurator von <a - href="http://www.mein-datenschutzbeauftragter.de" - target="_blank" - >mein-datenschutzbeauftragter.de</a></small> - </p> - </div> -</template> - -<script> -export default { - name: 'GDPRNotice' -} -</script> - -<style scoped> - -</style> diff --git a/grady/frontend/src/components/ImportDialog.vue b/grady/frontend/src/components/ImportDialog.vue deleted file mode 100644 index ef9aeddb..00000000 --- a/grady/frontend/src/components/ImportDialog.vue +++ /dev/null @@ -1,108 +0,0 @@ -<template> - <v-dialog - v-model="show" - width="30%" - > - <v-card> - <v-card-title class="title"> - Import data - </v-card-title> - <v-card-text> - <p> - You can use this component to import data into Grady. - You can use - <a - href="https://gitlab.gwdg.de/grady-corp/rusty-hektor" - target="_blank" - >rusty-hektor</a> to convert - and pseudonomize ILIAS output. - </p> - <v-file-input - id="file-input" - v-model="hektorFile" - label="Select file" - accept="application/JSON" - /> - </v-card-text> - <v-card-actions> - <v-btn - id="submit-import" - :loading="loading" - @click="submitData" - > - Import - </v-btn> - <v-btn - color="red" - @click="$emit('hide')" - > - Cancel - </v-btn> - </v-card-actions> - </v-card> - </v-dialog> -</template> - -<script> - import { importData } from '@/api' - - export default { - name: 'ImportDialog', - data: () => { - return { - show: true, - loading: false, - hektorFile: null - } - }, - watch: { - show(val) { - if (!val) { - this.$emit('hide') - } - } - }, - methods: { - async submitData() { - this.loading = true - let data - try { - data = await this.readFile() - data = JSON.parse(data) - } catch (error) { - this.$notify({ - type: 'error', - title: 'Error reading import file', - text: error.message - }) - this.loading = false - return - } - - try { - await importData(data) - this.$emit('imported') - this.$notify({ - title: 'Successfully imported data. Please log out and in again.', - type: 'success' - }) - } finally { - this.loading = false - } - }, - readFile() { - const fileReader = new FileReader() - return new Promise((resolve, reject) => { - fileReader.onload = event => { - resolve(event.target.result) - } - fileReader.onerror = () => { - fileReader.abort() - reject(new Error('Problem parsing input file.')) - } - fileReader.readAsText(this.hektorFile) - }) - } - } - } -</script> diff --git a/grady/frontend/src/components/InstanceActions.vue b/grady/frontend/src/components/InstanceActions.vue deleted file mode 100644 index 694e557b..00000000 --- a/grady/frontend/src/components/InstanceActions.vue +++ /dev/null @@ -1,75 +0,0 @@ -<template> - <div> - <export-dialog v-if="isReviewer" /> - <template v-for="(a, i) in actions"> - <v-tooltip - v-if="a.condition()" - :key="i" - bottom - > - <template #activator="{ on }"> - <v-btn - :id="a.id" - text - icon - @click="a.action" - v-on="on" - > - <v-icon>{{ a.icon }}</v-icon> - </v-btn> - </template> - {{ a.text }} - </v-tooltip> - </template> - <free-locks-button v-if="isReviewer" /> - <component - :is="displayComponent" - v-if="displayComponent" - @hide="hideComponent" - /> - </div> -</template> - -<script> -import ExportDialog from '@/components/export/ExportDialog' -import ImportDialog from '@/components/ImportDialog' -import ConfigDialog from '@/components/instance_config/ConfigDialog' -import FreeLocksButton from '@/components/FreeLocksButton' -import { Authentication } from '@/store/modules/authentication' -export default { - name: 'InstanceActions', - components: { ExportDialog, ImportDialog, FreeLocksButton }, - data () { - return { - displayComponent: null, - actions: [ - { - icon: 'publish', - text: 'Import exam data', - action: () => { this.displayComponent = ImportDialog }, - condition: () => Authentication.isReviewer, - id: 'import-data-list-item' - }, - { - icon: 'settings', - text: 'Instance settings', - action: () => { this.displayComponent = ConfigDialog }, - condition: () => Authentication.isReviewer, - id: 'configure-instance-item', - }, - ] - } - }, - computed: { - isReviewer: () => Authentication.isReviewer, - }, - methods: { - hideComponent () { - this.displayComponent = null - }, - logout () { - actions.logout() - } - } -} -</script> diff --git a/grady/frontend/src/components/LabelStatistics.vue b/grady/frontend/src/components/LabelStatistics.vue deleted file mode 100644 index 343958ba..00000000 --- a/grady/frontend/src/components/LabelStatistics.vue +++ /dev/null @@ -1,159 +0,0 @@ -<template> - <v-card> - <v-card-title class="title"> - Accumulated Label Statistics - </v-card-title> - <v-data-table - :headers="headers" - :items-per-page="-1" - sort-by="count" - sort-desc - :loading="loading" - :items="summedLabelCounts" - hide-default-footer - /> - - <div - v-for="([subType, labelCounts]) in mappedLabelCounts" - :key="subType" - > - <v-card-title class="title"> - Statistics for: {{ subType }} - </v-card-title> - <v-data-table - :headers="headers" - :items-per-page="-1" - sort-by="count" - sort-desc - :loading="loading" - :items="labelCounts" - hide-default-footer - /> - </div> - </v-card> -</template> - - -<script lang="ts"> -import Vue from 'vue' -import Component from 'vue-class-component' -import * as api from '@/api' -import { LabelStatisticsForSubType, SubmissionType} from '../models' -import { getters } from '../store/getters' -import { FeedbackLabels } from '../store/modules/feedback-labels' -import { ConfigModule } from '@/store/modules/config' - - -@Component -export default class LabelStatistics extends Vue{ - labelStatistics: LabelStatisticsForSubType[] = [] - submissionTypes: SubmissionType[] = [] - timer = 0 - - headers = [ - { - text: 'Label', - align: 'left', - value: 'name' - }, - { - text: 'Count', - align: 'center', - value: 'count' - } - ] - - get loading(): boolean { - return this.labelStatistics.length === 0 - } - - /** - * Returns total count for all existing labels for the currently selected exam - */ - get summedLabelCounts () { - // list of subtype IDs filtered by the selected exam - const subTypeIDs = this.submissionTypes.filter(subType => { - return subType.examType.pk === ConfigModule.state.config.examId - }).map(subType => { - return subType.pk - }) - // filter the statistics - const filteredStatistics = this.labelStatistics.filter(subType => { - return subTypeIDs.includes(subType.pk) - }) - const summedLabelCounts = filteredStatistics - .reduce((acc: {[labelPk: string]: number}, curr) => { - Object.entries(curr) - .filter(([key, val]) => key !== 'pk') - .forEach(([labelPk, count]: [string, number]) => { - if (!acc[labelPk]) { - acc[labelPk] = 0 - } - acc[labelPk] += count - }) - return acc - }, {}) - // TODO map label pks to names - const mappedLabelCounts = this.mapLabelList(Object - .entries(summedLabelCounts)) - return mappedLabelCounts - } - - /** - * - * Returns Label Names and number of occurances for each Submission Type of the currently selected Exam. - */ - get mappedLabelCounts () { - var allowedTypes: string[] = [] // needed to filter if submissionType belongs to current selected Exam - const counts = this.labelStatistics.map(labelStatistics => { - const labelValues = Object - .entries(labelStatistics) - .filter(([key, val]) => key !== 'pk') - const subType = getters.submissionType(labelStatistics.pk) - - // determine which submissionTypes belong to current selected exam - if (subType.examType.moduleReference === ConfigModule.state.config.currentExam) { - allowedTypes.push(subType.name) - } - - const subTypeName = subType.name - return [subTypeName, this.mapLabelList(labelValues)] - // it seems the typechecker has a bug here... - }).sort((a: any, b: any) => a[0].localeCompare(b[0])) - return counts.filter(tmp => { // filter submissionTypes by current selected Exam - return allowedTypes.includes(tmp[0].toString()) - }) - } - - mapLabelList (labelList: [string, number][]) { - return labelList.map(entry => { - const label = FeedbackLabels.state.labels.find(label => { - return String(label.pk) === entry[0] - }) - const labelName = label ? label.name : 'Unknown label' - return {name: labelName, count: entry[1]} - }) - } - - async loadLabelStatistics () { - this.labelStatistics = await api.fetchLabelStatistics() - } - - async loadSubmissionTypes () { - this.submissionTypes = await api.fetchSubmissionTypes() - } - - created () { - this.timer = setInterval(() => { - this.loadLabelStatistics() - }, 10 * 1e3) - this.loadLabelStatistics() - this.loadSubmissionTypes() - } - - beforeDestroy () { - clearInterval(this.timer) - } - -} -</script> diff --git a/grady/frontend/src/components/MathRenderer.vue b/grady/frontend/src/components/MathRenderer.vue deleted file mode 100644 index 667a5987..00000000 --- a/grady/frontend/src/components/MathRenderer.vue +++ /dev/null @@ -1,51 +0,0 @@ -<template> - <div - ref="wrapper" - :key="key" - > - <slot /> - </div> -</template> - -<script lang="ts"> -import { Vue, Component, Prop, Watch } from 'vue-property-decorator' - -@Component -export default class MathRenderer extends Vue { - @Prop({ type: Boolean, default: true }) enabled!: boolean - - key: Boolean = false - - forceRefresh() { - this.key = !this.key - } - - renderMath() { - window.MathJax.typeset([this.$refs.wrapper]) - } - - resetMath() { - window.MathJax.typesetClear([this.$refs.wrapper]) - // typesetClear only clears the cache but leaves the DOM untouched, so we - // need to force it to rerender. - this.forceRefresh() - } - - mounted() { - if (this.enabled) - this.renderMath() - } - - beforeDestroy() { - this.resetMath() - } - - @Watch('enabled') - onEnabledChanged(changedToEnabled: boolean) { - if (changedToEnabled) - this.renderMath() - else - this.resetMath() - } -} -</script> diff --git a/grady/frontend/src/components/PasswordChangeDialog.vue b/grady/frontend/src/components/PasswordChangeDialog.vue deleted file mode 100644 index 547fc8a2..00000000 --- a/grady/frontend/src/components/PasswordChangeDialog.vue +++ /dev/null @@ -1,147 +0,0 @@ -<template> - <v-dialog - v-model="show" - max-width="400" - > - <v-card> - <v-form - ref="form" - v-model="formIsValid" - lazy-validation - @submit.prevent="submitChange" - > - <v-card-title class="title"> - Change your password - </v-card-title> - <v-card-text> - <v-text-field - v-model="currentPassword" - label="Current password" - type="password" - autofocus - required - :error-messages="oldPasswordRejected ? 'Wrong password.' : undefined" - :rules="[ rules.required ]" - @input="oldPasswordRejected = false" - /> - <v-text-field - v-model="newPassword" - label="New password" - type="password" - required - :error-messages="newPasswordErrors" - :rules="[ rules.required ]" - @input="newPasswordErrors = null" - /> - <v-text-field - v-model="newPasswordRepeated" - label="Repeat new password" - type="password" - required - :rules="[ rules.required, rules.matchesPassword ]" - /> - <v-alert - type="error" - :value="errorAlert !== null" - > - {{ errorAlert }} - </v-alert> - </v-card-text> - <v-card-actions class="justify-end"> - <v-btn - text - color="primary" - @click="$emit('hide')" - > - Cancel - </v-btn> - <v-btn - :disabled="!formIsValid" - text - color="primary" - type="submit" - > - Change password - </v-btn> - </v-card-actions> - </v-form> - </v-card> - </v-dialog> -</template> - -<script> -import { mapState } from 'vuex' -import { changePassword } from '@/api' -import { Authentication } from '@/store/modules/authentication' -import { required } from '@/util/form-rules' - -export default { - name: 'PasswordChangeDialog', - data () { - return { - show: true, - currentPassword: '', - newPassword: '', - newPasswordRepeated: '', - formIsValid: false, - rules: { - required, - matchesPassword: v => v === this.newPassword || 'Passwords do not match.', - }, - errorAlert: null, - oldPasswordRejected: false, - newPasswordErrors: null - } - }, - computed: { - userPk () { return Authentication.state.user.pk } - }, - watch: { - show (val) { - if (!val) { - this.$emit('hide') - } - }, - newPassword () { - if (this.newPasswordRepeated !== '') - this.$refs.form.validate() - } - }, - methods: { - submitChange () { - if (!this.$refs.form.validate()) - return - - const data = { - oldPassword: this.currentPassword, - newPassword: this.newPassword - } - changePassword(this.userPk, data).then(() => { - this.$notify({ - title: 'Success!', - text: 'Successfully changed password!', - type: 'success' - }) - this.$emit('hide') - }).catch(error => { - if (error.response && error.response.status === 401) { - this.oldPasswordRejected = true - this.$refs.form.validate() - return - } - - if (error.response && error.response.data && error.response.data.newPassword) { - this.newPasswordErrors = error.response.data.newPassword - return - } - - this.errorAlert = error.toString() - }) - } - } -} -</script> - -<style scoped> - -</style> diff --git a/grady/frontend/src/components/RegisterDialog.vue b/grady/frontend/src/components/RegisterDialog.vue deleted file mode 100644 index 75f212dc..00000000 --- a/grady/frontend/src/components/RegisterDialog.vue +++ /dev/null @@ -1,149 +0,0 @@ -<template> - <v-card v-if="!acceptedGDPR"> - <v-card-title class="title"> - Datenschutzerklärung - </v-card-title> - <v-divider /> - <v-card-text class="content"> - <GDPRNotice id="gdpr-notice" /> - </v-card-text> - <v-divider /> - <v-card-actions class="justify-end"> - <v-btn - id="accept-gdpr-notice" - color="primary" - text - @click="acceptedGDPR = true" - > - Einwilligen - </v-btn> - </v-card-actions> - </v-card> - <v-card v-else> - <v-form - ref="registrationForm" - v-model="registrationFormIsValid" - lazy-validation - @submit.prevent="register" - > - <v-card-title class="title"> - Register - </v-card-title> - <v-card-text> - <v-text-field - id="input-register-username" - v-model="credentials.username" - label="Username" - required - :error-messages="usernameErrors" - :rules="[ required ]" - autofocus - @input="usernameErrors = null" - /> - <v-text-field - id="input-register-instance-password" - v-model="credentials.registrationPassword" - label="Instance-Password" - required - :rules="[ required ]" - type="password" - /> - <v-text-field - id="input-register-password" - v-model="credentials.password" - label="Password" - required - :rules="[ required ]" - type="password" - :error-messages="passwordErrors" - @input="passwordErrors = null" - /> - <v-text-field - id="input-register-password-repeat" - v-model="credentials.passwordRepeat" - label="Repeat Password" - required - :rules="[ required, checkPasswordsMatch ]" - type="password" - /> - <v-alert - type="error" - :value="errorAlert !== null" - > - {{ errorAlert }} - </v-alert> - </v-card-text> - <v-card-actions class="justify-center"> - <v-btn - id="register-submit" - text - :loading="loading" - :disabled="!registrationFormIsValid" - type="submit" - > - submit - </v-btn> - </v-card-actions> - </v-form> - </v-card> -</template> - -<script> -import { registerTutor } from '@/api' -import GDPRNotice from '@/components/GDPRNotice' -import { required } from '@/util/form-rules' - -export default { - name: 'RegisterDialog', - components: { GDPRNotice }, - data () { - return { - credentials: { - username: '', - password: '', - passwordRepeat: '', - registrationPassword: '' - }, - loading: false, - acceptedGDPR: false, - registrationFormIsValid: false, - required, - checkPasswordsMatch: v => v === this.credentials.password || 'Passwords do not match.', - errorAlert: null, - usernameErrors: null, - passwordErrors: null, - } - }, - watch: { - credentials: { - handler() { - if (this.credentials.passwordRepeat !== '') - this.$refs.registrationForm.validate() - }, - deep: true - } - }, - methods: { - register () { - if (!this.$refs.registrationForm.validate()) - return - - this.loading = true - registerTutor(this.credentials).then(() => { - this.$emit('registered', this.credentials) - }).catch(error => { - this.usernameErrors = error.response && error.response.data && error.response.data.username - this.passwordErrors = error.response && error.response.data && error.response.data.password - if (!this.usernameErrors && !this.passwordErrors) - this.errorAlert = `Couldn't register a tutor account: ${error}` - }).finally(() => { this.loading = false }) - } - }, -} -</script> - -<style scoped> - .content { - height: 50vh; - } -</style> diff --git a/grady/frontend/src/components/SubmissionTests.vue b/grady/frontend/src/components/SubmissionTests.vue deleted file mode 100644 index 4ad1287a..00000000 --- a/grady/frontend/src/components/SubmissionTests.vue +++ /dev/null @@ -1,72 +0,0 @@ -<template> - <v-card id="submission-tests"> - <v-card-title - v-if="tests.length > 0" - class="title py-0" - > - Tests - <v-spacer /> - <v-btn - icon - @click="expanded = !expanded" - > - <v-icon v-if="expanded"> - keyboard_arrow_up - </v-icon> - <v-icon v-else> - keyboard_arrow_down - </v-icon> - </v-btn> - </v-card-title> - <v-card-title v-else> - No Tests available - </v-card-title> - <v-card-text v-if="expanded"> - <v-col - v-for="item in tests" - :key="item.pk" - sm="12" - > - <div name="test-name-label"> - <v-row - - class="pr-4" - > - <h3>{{ item.name }}</h3> - <v-spacer /> - <h3>{{ item.label }}</h3> - </v-row> - </div> - <span class="test-output">{{ item.annotation }}</span> - </v-col> - </v-card-text> - </v-card> -</template> - -<script> -export default { - name: 'SubmissionTests', - props: { - tests: { - type: Array, - default: () => [] - }, - expand: { - type: Boolean, - default: true - } - }, - data () { - return { - expanded: this.expand, - panels: this.tests.map(_ => true) - } - } -} -</script> - -<style scoped> - .test-output { - white-space: pre-wrap; - } -</style> diff --git a/grady/frontend/src/components/TwoPaneLayout.vue b/grady/frontend/src/components/TwoPaneLayout.vue deleted file mode 100644 index 90dc2c6c..00000000 --- a/grady/frontend/src/components/TwoPaneLayout.vue +++ /dev/null @@ -1,52 +0,0 @@ -<template> - <v-row - class="pane-wrapper" - no-gutters - > - <v-col - ref="leftPane" - class="pane" - > - <slot name="left" /> - </v-col> - <v-divider - v-if="showRightPane" - vertical - /> - <v-col - v-if="showRightPane" - ref="rightPane" - class="pane" - > - <slot name="right" /> - </v-col> - </v-row> -</template> - -<script lang="ts"> -import { Vue, Component, Prop } from 'vue-property-decorator' - -@Component -export default class TwoPaneLayout extends Vue { - @Prop({ type: Boolean, default: true }) showRightPane!: boolean - - leftPane(): HTMLElement { - return this.$refs.leftPane as HTMLElement - } - - rightPane(): HTMLElement { - return this.$refs.rightPane as HTMLElement - } -} -</script> - -<style scoped> - .pane-wrapper { - height: 100%; - } - - .pane { - height: 100%; - overflow: auto; - } -</style> diff --git a/grady/frontend/src/components/UserOptions.vue b/grady/frontend/src/components/UserOptions.vue deleted file mode 100644 index 5fffef87..00000000 --- a/grady/frontend/src/components/UserOptions.vue +++ /dev/null @@ -1,87 +0,0 @@ -<template> - <v-toolbar-items> - <v-menu - bottom - offset-y - left - > - <template #activator="{ on }"> - <v-btn - id="user-options" - text - v-on="on" - > - <v-icon left> - account_circle - </v-icon> - {{ username }} ({{ userRole }})<v-icon>arrow_drop_down</v-icon> - </v-btn> - </template> - <v-list> - <v-list-item - v-if="!isStudent" - @click="showPasswordChangeDialog" - > - Change password - </v-list-item> - <v-list-item @click.capture.stop="$vuetify.theme.dark = !$vuetify.theme.dark"> - <v-list-item-content> - <v-list-item-title> - Dark mode (experimental) - </v-list-item-title> - </v-list-item-content> - <v-list-item-action> - <v-switch v-model="$vuetify.theme.dark" /> - </v-list-item-action> - </v-list-item> - <v-divider class="my-2" /> - <v-list-item @click="logout"> - <v-icon left> - exit_to_app - </v-icon> - Logout - </v-list-item> - </v-list> - </v-menu> - <component - :is="displayComponent" - v-if="displayComponent" - @hide="hideComponent" - /> - </v-toolbar-items> -</template> - -<script> -import PasswordChangeDialog from '@/components/PasswordChangeDialog' -import { Authentication } from '@/store/modules/authentication' -import { actions } from '@/store/actions' -export default { - name: 'UserOptions', - components: { PasswordChangeDialog }, - data () { - return { - displayComponent: null, - } - }, - computed: { - isStudent() { return Authentication.isStudent }, - username() { return Authentication.state.user.username }, - userRole() { return Authentication.state.user.role }, - }, - methods: { - hideComponent () { - this.displayComponent = null - }, - logout () { - actions.logout() - }, - showPasswordChangeDialog () { - this.displayComponent = PasswordChangeDialog - } - } -} -</script> - -<style scoped> - -</style> diff --git a/grady/frontend/src/components/export/DataExport.vue b/grady/frontend/src/components/export/DataExport.vue deleted file mode 100644 index 3cce92c4..00000000 --- a/grady/frontend/src/components/export/DataExport.vue +++ /dev/null @@ -1,116 +0,0 @@ -<template> - <v-dialog - v-model="exportDialog" - max-width="31vw" - @update:return-value="hide" - > - <v-card id="data-export-modal"> - <v-card-title class="title"> - Student Data Export - </v-card-title> - <v-card-text> - <div v-if="!mapFileLoaded"> - If you select a mapping file, the anonymized data - will be mapped back automatically and locally on your machine. - <v-row - - align="center" - > - <v-file-input - v-model="mapFile" - label="Map file" - accept="application/JSON" - /> - <span>Without the mapping, the data will still be obfuscated.</span> - </v-row> - </div> - <span> - <b>NOTE:</b> Mapping / setting passwords can take some time depending on course size. - </span> - <v-row> - <v-col cols="4"> - <v-tooltip top> - <template #activator="{ on }"> - <div v-on="on"> - <v-checkbox - v-model="setPasswords" - label="Set passwords" - /> - </div> - </template> - <span>Setting this will cause all student passwords - to be reset upon export. The new passwords will be contained in the - export file. - </span> - </v-tooltip> - </v-col> - <v-col - id="type-select" - cols="3" - offset="1" - > - <span>Export as <b>json</b> - </span> - </v-col> - </v-row> - <v-card-actions> - <v-btn - text - color="blue lighten-2" - @click="exportDialog = false" - > - close - </v-btn> - <v-spacer /> - <v-progress-circular - v-if="loading" - indeterminate - /> - <v-btn - v-else - id="export-data-download-btn" - text - outlined - @click="getExportFile('data')" - > - {{ mapFile || mapFileLoaded ? 'Download and apply mapping' : 'Download without mapping' }} - </v-btn> - </v-card-actions> - </v-card-text> - </v-card> - </v-dialog> -</template> - -<script lang="ts"> -import Component, { mixins } from 'vue-class-component' -import { getters } from '@/store/getters' -import ax, { StudentExportItem, fetchStudentExportData } from '@/api' -import { mutations as mut } from '@/store/mutations' -import { ExportType, exportMixin } from '@/components/mixins/exportMixin' - -@Component -export default class DataExport extends mixins(exportMixin) { - - get studentMap () { return getters.state.studentMap } - - applyMapping (studentExport: StudentExportItem[]) { - studentExport.forEach(student => { - if (this.studentMap[student.Matrikel]) { - student.Email = this.studentMap[student.Matrikel].email - student.Name = this.studentMap[student.Matrikel].name - student.Matrikel = this.studentMap[student.Matrikel].matrikelNo - } else { - this.$notify({ - title: `Unknown student: ${student.Name}`, - text: `Student ${student.Name} is missing in mapping file`, - type: 'error', - duration: -1 - }) - } - }) - } -} -</script> - -<style scoped> -</style> diff --git a/grady/frontend/src/components/export/ExportDialog.vue b/grady/frontend/src/components/export/ExportDialog.vue deleted file mode 100644 index 04708cf4..00000000 --- a/grady/frontend/src/components/export/ExportDialog.vue +++ /dev/null @@ -1,95 +0,0 @@ -<template> - <div id="container"> - <v-menu offset-y> - <template #activator="{ on: menu }"> - <v-tooltip left> - <template #activator="{ on: tooltip }"> - <v-btn - id="export-btn" - slot="activator" - :icon="!corrected" - :text="!corrected" - :color="corrected ? 'success' : undefined" - v-on="{ ...tooltip, ...menu }" - > - <v-icon :left="corrected"> - file_download - </v-icon> - <span v-if="corrected"> - Export - </span> - </v-btn> - </template> - Export - <span - v-if="corrected" - id="corrected-tooltip" - >(All submissions have been corrected!)</span> - <span - v-else - id="uncorrected-tooltip" - >(UNCORRECTED submissions left! Export will be incomplete.)</span> - </v-tooltip> - </template> - <v-list> - <v-list-item - v-for="(item, i) in menuItems" - :id="'export-list' + i" - :key="i" - @click="item.action" - > - {{ item.display }} - </v-list-item> - </v-list> - </v-menu> - <component - :is="displayComponent" - v-if="displayComponent" - @hide="displayComponent = null" - /> - </div> -</template> - -<script lang="ts"> -import Vue from 'vue' -import Component from 'vue-class-component' -import DataExport from '@/components/export/DataExport.vue' -import InstanceExport from '@/components/export/InstanceExport.vue' -import { getters } from '@/store/getters' - -@Component({ - components: { DataExport, InstanceExport } -}) -export default class ExportDialog extends Vue { - displayComponent: any = null - - menuItems = [ - { - display: 'Export student scores', - action: () => { - this.setDisplayComponent(DataExport) - } - }, - { - display: 'Export whole instance data', - action: () => { this.setDisplayComponent(InstanceExport) } - } - ]; - - get corrected () { - return getters.corrected - } - - // apparently `this` is not the same when used within a - // closure when defining data and within a method - setDisplayComponent (component: any) { - this.displayComponent = component - } -} -</script> - -<style scoped> - #container { - display: inline; - } -</style> diff --git a/grady/frontend/src/components/export/InstanceExport.vue b/grady/frontend/src/components/export/InstanceExport.vue deleted file mode 100644 index 8d81c9f7..00000000 --- a/grady/frontend/src/components/export/InstanceExport.vue +++ /dev/null @@ -1,94 +0,0 @@ -<template> - <v-dialog - v-model="exportDialog" - max-width="31vw" - @update:return-value="hide" - > - <v-card id="instance-export-modal"> - <v-card-title class="title"> - Instance Data Export - </v-card-title> - <v-card-text> - <div v-if="!mapFileLoaded"> - If you select a mapping file, the anonymized data - will be mapped back automatically and locally on your machine. - <v-row - - align="center" - > - <v-file-input - v-model="mapFile" - label="Map file" - accept="application/JSON" - /> - <span>Without the mapping, the data will still be obfuscated.</span> - </v-row> - </div> - <span> - <b>NOTE:</b> Mapping can take some time depending on course size. - </span> - <v-card-actions> - <v-btn - text - color="blue lighten-2" - @click="exportDialog = false" - > - close - </v-btn> - <v-spacer /> - <v-progress-circular - v-if="loading" - indeterminate - /> - <v-btn - v-else - id="instance-export-dl" - text - outlined - @click="getExportFile('instance')" - > - {{ mapFile || mapFileLoaded ? 'Download and apply mapping' : 'Download without mapping' }} - </v-btn> - </v-card-actions> - </v-card-text> - </v-card> - </v-dialog> -</template> - -<script lang="ts"> -import Component, { mixins } from 'vue-class-component' -import { getters } from '@/store/getters' -import ax, { StudentExportItem, fetchStudentExportData, fetchInstanceExportData, InstanceExportData } from '@/api' -import { mutations as mut } from '@/store/mutations' -import { ExportType, exportMixin } from '@/components/mixins/exportMixin' - -@Component -export default class DataExport extends mixins(exportMixin) { - exportDialog = true - mapFile: File | null = null - exportType = ExportType.JSON // instance export is only available as JSON - loading = false - - get studentMap () { return getters.state.studentMap } - - applyMapping (instanceExport: InstanceExportData) { - instanceExport.students.forEach(student => { - if (this.studentMap[student.matrikelNo]) { - const anonMatrikelNo = student.matrikelNo - student.name = this.studentMap[anonMatrikelNo].name - student.matrikelNo = this.studentMap[anonMatrikelNo].matrikelNo - } else { - this.$notify({ - title: `Unknown student: ${student.name}`, - text: `Student ${student.name} is missing in mapping file`, - type: 'error', - duration: -1 - }) - } - }) - } -} -</script> - -<style scoped> -</style> diff --git a/grady/frontend/src/components/feedback_labels/FeedbackLabel.vue b/grady/frontend/src/components/feedback_labels/FeedbackLabel.vue deleted file mode 100644 index bf95efa2..00000000 --- a/grady/frontend/src/components/feedback_labels/FeedbackLabel.vue +++ /dev/null @@ -1,38 +0,0 @@ -<template> - <v-tooltip top> - <template #activator="{ on }"> - <v-chip - :close="removable" - :color="colour" - v-on="on" - @click:close="onClose" - > - {{ name }} - </v-chip> - </template> - <span> {{ description }} </span> - </v-tooltip> -</template> - -<script lang="ts"> -import Vue from 'vue' -import Component from 'vue-class-component' -import { Prop } from 'vue-property-decorator' - -@Component -export default class FeedbackLabel extends Vue { - @Prop({ type: Number, required :true }) readonly pk!: number - @Prop({ type: String, required: true }) readonly name!: string - @Prop({ type: String, required: true }) readonly description!: string - @Prop({ type: String, required: true }) readonly colour!: string - @Prop({ type: Boolean, default: false }) readonly removable!: boolean - - onClose() { - this.$emit('remove-clicked', this.pk) - } -} -</script> - -<style> - -</style> diff --git a/grady/frontend/src/components/feedback_labels/FeedbackLabelForm.vue b/grady/frontend/src/components/feedback_labels/FeedbackLabelForm.vue deleted file mode 100644 index ec67b057..00000000 --- a/grady/frontend/src/components/feedback_labels/FeedbackLabelForm.vue +++ /dev/null @@ -1,175 +0,0 @@ -<template> - <div> - <v-text-field - id="label-name" - v-model="mutableName" - label="Name" - /> - <v-textarea - id="label-description" - v-model="mutableDescription" - label="Description" - placeholder="The description can be seen when hovering above the label" - auto-grow - /> - <v-color-picker - v-model="mutableColour" - show-swatches - hide-canvas - hide-inputs - hide-sliders - hide-mode-switch - :swatches="swatches" - /> - <v-btn - v-if="!is_update" - id="create-label-btn" - :loading="loading" - color="teal" - @click="createLabel" - > - Create - </v-btn> - <v-btn - v-else - id="update-label-btn" - color="teal" - :loading="loading" - @click="updateLabel" - > - Update - </v-btn> - </div> -</template> - -<script lang="ts"> -import Vue from 'vue' -import Component from 'vue-class-component' -import { Prop, Watch } from 'vue-property-decorator' -import * as api from '@/api' -import { FeedbackLabels } from '@/store/modules/feedback-labels' - -@Component -export default class FeedbackLabelForm extends Vue { - @Prop({ type: String, default: '' }) readonly name!: string - @Prop({ type: String, default: '' }) readonly description!: string - @Prop({ type: String, default: '#4D4D4D' }) readonly colour!: string - @Prop({ type: Number, required: false }) readonly pk!: number - @Prop({ type: Boolean, default: false }) readonly is_update!: boolean - - swatches = [['#4b4b4b', '#323232', '#000000'], - ['#969696', '#7d7d7d', '#646464'], - ['#fafafa', '#c8c8c8', '#afafaf'], - ['#ef4c3a', '#cf3015', '#9c0500'], - ['#f98f00', '#de7100', '#c04f00'], - ['#f7d800', '#f7c000', '#f69b00'], - ['#d7db00', '#adb800', '#7d8600'], - ['#a1d900', '#66b800', '#194d32'], - ['#66c8c6', '#16a2a2', '#0c777b'], - ['#71d4fa', '#0099dc', '#0060ae'], - ['#ab9efa', '#7962fa', '#633191'], - ['#f89efa', '#f527fa', '#a8149b']] - - mutableColour = this.colour - mutableName = this.name - mutableDescription = this.description - - loading = false - - @Watch('pk') - onPkChange() { this.resetFields() } - - resetFields () { - this.mutableName = this.name - this.mutableDescription = this.description - this.mutableColour = this.colour - } - - get label () { - return { - name: this.mutableName, - description: this.mutableDescription, - // @ts-ignore - colour: this.mutableColour.hex || this.mutableColour // hex may be undefined when colour comes from the updater - } - } - - get feedbackLabels () { - return FeedbackLabels.availableLabels - } - - async createLabel () { - this.loading = true - - const duplicate = this.feedbackLabels.find((val) => { - return val.name === this.label.name - }) - - if (duplicate) { - this.$notify({ - title: 'Label creation error', - text: 'A label with the same name already exists. ' + - 'You can, however, update the label', - type: 'error', - duration: -1 - }) - this.resetFields() - this.loading = false - return - } - - let res - try { - res = await api.createLabel(this.label) - this.notifySuccess() - } catch (ex) { - // user will be notified by the interceptor - this.resetFields() - this.loading = false - return - } - - FeedbackLabels.ADD_LABEL(res) - this.resetFields() - this.loading = false - } - - async updateLabel () { - this.loading = true - const label = { - ...this.label, - pk: this.pk, - } - - let res - try { - res = await api.updateLabel(label) - this.notifySuccess(true) - } catch (ex) { - // user will be notified by the interceptor - this.loading = false - return - } - - FeedbackLabels.UPDATE_LABEL(label) - this.$emit('label-updated', label.pk) - this.loading = false - } - - notifySuccess (updated = false) { - const msg = updated ? 'updated' : 'created' - - this.$notify({ - group: 'msg', - title: 'Success', - text: 'The label was <b>' + msg + '</b> successfully.', - type: 'success', - duration: 5 * 1e3, - }) - } -} -</script> - -<style> - -</style> diff --git a/grady/frontend/src/components/feedback_labels/FeedbackLabelList.vue b/grady/frontend/src/components/feedback_labels/FeedbackLabelList.vue deleted file mode 100644 index aad407c2..00000000 --- a/grady/frontend/src/components/feedback_labels/FeedbackLabelList.vue +++ /dev/null @@ -1,36 +0,0 @@ -<template> - <div> - <div - v-for="label in labels" - :key="label.pk" - class="label" - > - <feedback-label - v-bind="label" - class="label" - /> - </div> - </div> -</template> - -<script lang="ts"> - -import FeedbackLabel from './FeedbackLabel.vue' -import { FeedbackLabels } from '@/store/modules/feedback-labels' - -export default { - components: { - FeedbackLabel - }, - computed: { - labels: () => { return FeedbackLabels.availableLabels }, - } -} -</script> - -<style scoped> -div.label { - display: inline-block; - margin: 0 8px 8px 0; -} -</style> diff --git a/grady/frontend/src/components/feedback_labels/FeedbackLabelTab.vue b/grady/frontend/src/components/feedback_labels/FeedbackLabelTab.vue deleted file mode 100644 index 93da0293..00000000 --- a/grady/frontend/src/components/feedback_labels/FeedbackLabelTab.vue +++ /dev/null @@ -1,115 +0,0 @@ -<template> - <v-card> - <v-toolbar - color="teal" - :dense="sidebar" - > - <v-app-bar-nav-icon> - <v-icon>label</v-icon> - </v-app-bar-nav-icon> - <v-toolbar-title - v-if="showDetail" - style="min-width: fit-content;" - > - Labels - </v-toolbar-title> - <v-spacer /> - <v-btn - icon - @click="refreshLabels" - > - <v-icon v-if="!updating"> - refresh - </v-icon> - <v-progress-circular - v-else - indeterminate - color="black" - size="20" - /> - </v-btn> - </v-toolbar> - <v-tabs - v-if="showDetail" - grow - color="black" - background-color="teal lighten-1" - > - <v-tab id="list-labels-section"> - List - </v-tab> - <v-tab id="create-label-section"> - Create - </v-tab> - <v-tab id="update-label-section"> - Update - </v-tab> - <v-tab-item> - <v-container> - <feedback-label-list /> - </v-container> - </v-tab-item> - <v-tab-item> - <v-container> - <feedback-label-form /> - </v-container> - </v-tab-item> - <v-tab-item> - <v-container> - <feedback-label-updater /> - </v-container> - </v-tab-item> - </v-tabs> - </v-card> -</template> - -<script lang="ts"> -import Vue from 'vue' -import Component from 'vue-class-component' -import { Prop } from 'vue-property-decorator' -import { getLabels } from '@/api' -import { FeedbackLabels } from '@/store/modules/feedback-labels' -import { UI } from '@/store/modules/ui' -import FeedbackLabelList from './FeedbackLabelList.vue' -import FeedbackLabelForm from './FeedbackLabelForm.vue' -import FeedbackLabelUpdater from './FeedbackLabelUpdater.vue' - -@Component({ - components: { - FeedbackLabelList, - FeedbackLabelForm, - FeedbackLabelUpdater, - } -}) -export default class FeedbackLabelsList extends Vue { - @Prop({type: Boolean, default: false}) sidebar!: boolean - - updating = false - timerId = -1 - - get showDetail () { - return !this.sidebar || (this.sidebar && !UI.state.sideBarCollapsed) - } - - // fetch labels once, then every 10 seconds - created () { - this.refreshLabels() - this.timerId = setInterval(this.refreshLabels, 10 * 1e3) - } - - destroyed () { - clearInterval(this.timerId) - } - - refreshLabels() { - this.updating = true - FeedbackLabels.getLabels().finally(() => { - this.updating = false - }) - } -} -</script> - -<style> - -</style> diff --git a/grady/frontend/src/components/feedback_labels/FeedbackLabelUpdater.vue b/grady/frontend/src/components/feedback_labels/FeedbackLabelUpdater.vue deleted file mode 100644 index b26e45af..00000000 --- a/grady/frontend/src/components/feedback_labels/FeedbackLabelUpdater.vue +++ /dev/null @@ -1,70 +0,0 @@ -<template> - <div> - <v-autocomplete - id="label-update-autocomplete" - :items="feedbackLabels" - item-text="name" - item-value="pk" - append-icon="search" - placeholder="search for keywords" - @input="setLabel" - > - <template #item="{ item }"> - <div class="label-updater-item"> - <feedback-label-component v-bind="item" /> - </div> - </template> - </v-autocomplete> - <feedback-label-form - v-if="label.pk !== -1" - is_update - v-bind="currentLabel" - @label-updated="setLabel" - /> - </div> -</template> - -<script lang="ts"> -import Vue from 'vue' -import Component from 'vue-class-component' -import { FeedbackLabels } from '@/store/modules/feedback-labels' -import FeedbackLabelForm from './FeedbackLabelForm.vue' -import { FeedbackLabel } from '../../models' -import FeedbackLabelComponent from '@/components/feedback_labels/FeedbackLabel.vue' - -@Component({ - components: { - FeedbackLabelForm, - FeedbackLabelComponent, - } -}) -export default class FeedbackLabelUpdater extends Vue { - label: FeedbackLabel = { - pk: -1, - name: '', - description: '', - colour: '#4d4d4d', - } - loading = false - - get currentLabel () { return this.label } - - get feedbackLabels() { - return FeedbackLabels.availableLabels - } - - setLabel (pk: number) { - const label = this.feedbackLabels.find((val: FeedbackLabel) => { - return val.pk === pk - }) - - if (label !== undefined) { - this.label = label - } - } -} -</script> - -<style> - -</style> diff --git a/grady/frontend/src/components/feedback_labels/LabelSelector.vue b/grady/frontend/src/components/feedback_labels/LabelSelector.vue deleted file mode 100644 index ee88c72a..00000000 --- a/grady/frontend/src/components/feedback_labels/LabelSelector.vue +++ /dev/null @@ -1,229 +0,0 @@ -<template> - <v-card> - <v-card-title>Assign labels</v-card-title> - <v-divider /> - <v-card-text> - <v-autocomplete - id="label-add-autocomplete" - :items="feedbackLabels" - item-text="name" - item-value="pk" - append-icon="search" - placeholder="search for keywords" - @keyup.enter.ctrl.exact="submitFeedback" - @input="addLabel" - > - <template #item="{ item }"> - <div class="label-adder-item"> - <feedback-label v-bind="item" /> - </div> - </template> - </v-autocomplete> - <v-row> - <v-col md="4"> - <div> - CURRENT LABELS - </div> - <feedback-label - v-for="label in unchangedMapped" - :key="label.pk" - removable - v-bind="label" - @remove-clicked="removeLabel" - /> - </v-col> - <v-col md="4"> - <div> - WILL BE REMOVED - </div> - <feedback-label - v-for="label in removedMapped" - :key="label.pk" - removable - v-bind="label" - @remove-clicked="addLabel" - /> - </v-col> - <v-col md="4"> - <div> - WILL BE ADDED - </div> - <feedback-label - v-for="label in addedMapped" - :key="label.pk" - removable - v-bind="label" - @remove-clicked="removeLabel" - /> - </v-col> - </v-row> - </v-card-text> - </v-card> -</template> - -<script lang="ts"> -import Vue from 'vue' -import Component from 'vue-class-component' -import { Prop } from 'vue-property-decorator' -import { FeedbackLabels } from '@/store/modules/feedback-labels' -import { SubmissionNotes } from '@/store/modules/submission-notes' -import FeedbackLabel from '@/components/feedback_labels/FeedbackLabel.vue' -import { FeedbackComment, SubmissionType } from '../../models' - -@Component({ - components: { - FeedbackLabel, - } -}) -export default class LabelSelector extends Vue { - @Prop({ type: String }) readonly lineNo!: string - @Prop({ type: Boolean, required: true }) readonly assignedToFeedback!: boolean - @Prop({ type: Array }) readonly labelsUnchanged!: number[] - @Prop({ type: Array }) readonly labelsAdded!: number[] - @Prop({ type: Array }) readonly labelsRemoved!: number[] - - get feedbackLabels () { - return FeedbackLabels.availableLabels - } - - get unchangedMapped() { - if (this.assignedToFeedback) { - return this.mapPksToLabelObj(this.unchangedFeedbackLabels()) - } else { - return this.mapPksToLabelObj(this.labelsUnchanged) - } - } - - get removedMapped() { - if (this.assignedToFeedback) { - return this.mapPksToLabelObj(this.removedFeedbackLabels()) - } else { - return this.mapPksToLabelObj(this.labelsRemoved) - } - } - - get addedMapped() { - if (this.assignedToFeedback) { - return this.mapPksToLabelObj(this.addedFeedbackLabels()) - } else { - return this.mapPksToLabelObj(this.labelsAdded) - } - } - - /** - * Returns an array of label pk's that have not changed from origFeedback to updatedFeedback - */ - unchangedFeedbackLabels() { - const labelsOrig = SubmissionNotes.state.origFeedback.labels - if (labelsOrig === undefined) return new Array() - - const labelsDeleted = this.removedFeedbackLabels() - const labelsAdded = this.addedFeedbackLabels() - - return labelsOrig.filter((label) => { - return !labelsAdded.includes(label) && !labelsDeleted.includes(label) - }) - } - - /** - * Returns an array of label pk's that have been removed in updatedFeedback - * but exist in origFeedback - */ - removedFeedbackLabels() { - if (!SubmissionNotes.state.changedLabels) return new Array() - - const labelsOrig = SubmissionNotes.state.origFeedback.labels - const labelsUpdated = SubmissionNotes.state.updatedFeedback.labels - - if (labelsOrig === undefined) return new Array() - - return labelsOrig.filter((label) => { - return !labelsUpdated.includes(label) - }) - } - - /** - * Returns an array of label pk's that have been added in updatedFeedback - * but do not exist in origFeedback - */ - addedFeedbackLabels() { - const labelsOrig = SubmissionNotes.state.origFeedback.labels - const labelsUpdated = SubmissionNotes.state.updatedFeedback.labels - - if (labelsOrig === undefined) return new Array() - - return labelsUpdated.filter((label) => { - return !labelsOrig.includes(label) - }) - } - - /** - * Maps label pk's to the objects stored in vuex store - */ - mapPksToLabelObj(pkArr: number[]): FeedbackLabel[] { - const mappedLabels = pkArr.map((val) => { - const label = FeedbackLabels.availableLabels.find((label) => { - return label.pk === val - }) - - if (!label) return - return { - pk: val, - name: label.name, - description: label.description, - colour: label.colour - } - }) - - return mappedLabels ? mappedLabels : new Array() - } - - /** - * Removes given label from the feedback or fires an event - * to remove the label from a comment - */ - removeLabel(pk: number) { - if (this.assignedToFeedback) { - if (!SubmissionNotes.state.changedLabels) { - SubmissionNotes.SET_FEEDBACK_LABELS([...SubmissionNotes.state.origFeedback.labels]) - } - - SubmissionNotes.REMOVE_FEEDBACK_LABEL(pk) - } else { - this.$emit('label-removed', pk) - } - } - - /** - * Adds the given label to the feedback or fires an event - * to add the label to a comment - * Calling this with an already added label will instead remove the label - */ - addLabel(pk: number) { - if (this.assignedToFeedback) { - if (!this.unchangedFeedbackLabels().includes(pk) && - !this.addedFeedbackLabels().includes(pk)) - { - if (!SubmissionNotes.state.changedLabels) { - SubmissionNotes.SET_FEEDBACK_LABELS([...SubmissionNotes.state.origFeedback.labels]) - } - - SubmissionNotes.ADD_FEEDBACK_LABEL(pk) - } - } else { - this.$emit('label-added', pk) - } - } - - /** - * Emits an event which tells the parent that - * the submit shortcut was pressed - */ - submitFeedback() { - this.$emit('submit-shortcut') - } -} -</script> - -<style> -</style> diff --git a/grady/frontend/src/components/feedback_list/FeedbackListHelpCard.vue b/grady/frontend/src/components/feedback_list/FeedbackListHelpCard.vue deleted file mode 100644 index 7487e5bc..00000000 --- a/grady/frontend/src/components/feedback_list/FeedbackListHelpCard.vue +++ /dev/null @@ -1,58 +0,0 @@ -<template> - <v-row justify="center"> - <v-card - v-if="isReviewer" - class="mt-5" - > - <v-card-title class="title"> - This is the history of all the feedback! - </v-card-title> - <v-card-text> - To the left you see all the submissions everyone corrected including the score, final status, etc. You can do the following:<br><br> - <ol style="padding-left: 30px;"> - <li>click on one of the rows to see the submission, including the feedback.</li> - <li>sort the table via clicking on the table headers</li> - <li> - search the type names and also the <b>content</b> of the feedback that was written<br> - (e.g. you're looking for a feedback where someone mentioned a segmentation fault, just type it into the search!) - </li> - <li>filter by assigned labels</li> - <li>filter by the tutors that worked on a submission</li> - </ol> - </v-card-text> - </v-card> - <v-card v-else> - <v-card-title class="title"> - This is the history of your feedback! - </v-card-title> - <v-card-text> - To the left you see all the submissions you've corrected including the score, final status, etc. You can do the following:<br><br> - <ol style="padding-left: 30px;"> - <li>click on one of the rows tp see the submission, including your feedback and potentially a second tutor's feedback.</li> - <li>sort the table via clicking on the table headers</li> - <li> - search the type names and also the <b>content</b> of the feedback that you wrote<br> - (e.g. you're looking for a feedback where you mentioned a segmentation fault, just type it into the search!) - </li> - </ol> - </v-card-text> - </v-card> - </v-row> -</template> - -<script lang="ts"> -import Vue from 'vue' -import Component from 'vue-class-component' -import { Authentication } from '../../store/modules/authentication' - -@Component -export default class FeedbackListHelpCard extends Vue { - get isReviewer () { - return Authentication.isReviewer - } -} -</script> - -<style scoped> - -</style> diff --git a/grady/frontend/src/components/feedback_list/FeedbackSearchOptions.vue b/grady/frontend/src/components/feedback_list/FeedbackSearchOptions.vue deleted file mode 100644 index 8d518bc6..00000000 --- a/grady/frontend/src/components/feedback_list/FeedbackSearchOptions.vue +++ /dev/null @@ -1,192 +0,0 @@ -<template> - <v-container class="pt-0"> - <v-row> - <v-col class="py-0"> - <v-text-field - v-model="model.searchString" - append-icon="search" - label="Search" - single-line - hide-details - class="py-0 my-0" - @input="$emit('input', model)" - /> - </v-col> - </v-row> - <v-row> - <v-col class="pt-0"> - <v-checkbox - id="show-final-checkbox" - v-model="model.showFinal" - label="show final" - hide-details - @click="$emit('input', model)" - /> - </v-col> - <v-col class="pt-0"> - <v-checkbox - v-model="model.caseSensitive" - label="case sensitive" - hide-details - @click="$emit('input', model)" - /> - </v-col> - <v-col class="pt-0"> - <v-checkbox - v-model="model.useRegex" - hide-details - @click="$emit('input', model)" - > - <template #label> - use RegEx - <v-tooltip top> - <template #activator="{ on }"> - <a - href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#character-classes" - target="_blank" - v-on="on" - > - <v-icon>help</v-icon> - </a> - </template> - <span>Go to RegEx documentation</span> - </v-tooltip> - </template> - </v-checkbox> - </v-col> - </v-row> - <v-row> - <v-col> - <v-select - v-model="model.filterByLabels" - label="Label" - :items="labels" - return-object - item-text="name" - multiple - hint="Filter by label" - persistent-hint - clearable - @change="$emit('input', model)" - /> - </v-col> - <v-col> - <v-select - v-model="model.filterByExcludingLabels" - label="Exclude label" - :items="labels" - item-text="name" - return-object - multiple - hint="Filter by excluding labels" - persistent-hint - clearable - @change="$emit('input', model)" - /> - </v-col> - </v-row> - <v-row> - <v-col - v-if="isReviewer" - md="6" - > - <v-select - v-model="model.filterByTutors" - label="Tutors" - :items="tutors" - item-text="username" - return-object - multiple - hint="Filter by tutors" - persistent-hint - clearable - @change="$emit('input', model)" - /> - </v-col> - <v-col - v-if="model.filterByTutors.length > 0" - md="6" - > - <v-select - v-model="model.filterByStage" - label="Stage" - :items="feedbackStages" - placeholder="All" - hint="Filter after initial feedback or validated" - persistent-hint - clearable - @change="$emit('input', model)" - /> - </v-col> - </v-row> - </v-container> -</template> - -<script lang="ts"> -import Vue, { PropType } from 'vue' -import Component from 'vue-class-component' -import { Authentication } from '@/store/modules/authentication' -import { TutorOverview } from '@/store/modules/tutor-overview' -import { FeedbackLabels } from '@/store/modules/feedback-labels' -import { Tutor, FeedbackLabel, FeedbackStageEnum, Exam } from '@/models' - -export type FeedbackSearchOptionsModel = { - searchString: string, - showFinal: boolean, - caseSensitive: boolean, - useRegex: boolean, - filterByExams: Exam[], - filterByTutors: Tutor[], - filterByStage: FeedbackStageEnum | undefined, - filterByLabels: FeedbackLabel[], - filterByExcludingLabels: FeedbackLabel[], -} - -const FeedbackSearchOptionsProps = Vue.extend({ - props: { - model: { - type: Object as PropType<FeedbackSearchOptionsModel>, - default: () => { - return { - searchString: '', - showFinal: true, - caseSensitive: false, - useRegex: false, - filterByExams: [], - filterByTutors: [], - filterByStage: undefined, - filterByLabels: [], - filterByExcludingLabels: [], - } - } - } - } -}) - -@Component -export default class FeedbackSearchOptions extends FeedbackSearchOptionsProps { - feedbackStages = Object.entries(FeedbackStageEnum).map(([key, value]) => ({text: key, value})) - - get tutors() { return TutorOverview.state.tutors } - get isReviewer() { return Authentication.isReviewer } - - get labels() { - return FeedbackLabels.state.labels - } - - loadTutors() { - if (this.tutors.length === 0 && this.isReviewer) { - TutorOverview.getTutors() - } - } - - created () { - this.loadTutors() - } -} -</script> - -<style scoped> - -</style> - diff --git a/grady/frontend/src/components/feedback_list/FeedbackTable.vue b/grady/frontend/src/components/feedback_list/FeedbackTable.vue deleted file mode 100644 index 311d6273..00000000 --- a/grady/frontend/src/components/feedback_list/FeedbackTable.vue +++ /dev/null @@ -1,203 +0,0 @@ -<template> - <v-card> - <v-card-title class="title"> - <span v-if="isTutor">Your</span><span>All</span> feedback history - </v-card-title> - <v-data-table - :headers="headers" - :items="filteredFeedback" - sort-by="student" - > - <template #top> - <feedback-search-options - v-model="searchOptions" - /> - </template> - <template #item="{ item }"> - <tr - class="feedback-row" - @click="showSubmission(item)" - > - <td>{{ item.ofSubmissionType.name }}</td> - <td v-if="exerciseMode"> - {{ item.ofStudent }} - </td> - <td>{{ item.score }}</td> - <td>{{ new Date(item.created).toLocaleString() }}</td> - <td>{{ new Date(item.modified).toLocaleString() }}</td> - <td> - <v-icon v-if="item.isFinal"> - check - </v-icon> - <v-icon v-else> - clear - </v-icon> - </td> - <td> - <v-btn - icon - :color="item.mark" - @click="changeMark(item.ofSubmission, item.mark)" - /> - </td> - </tr> - </template> - </v-data-table> - </v-card> -</template> - -<script lang="ts"> -import Vue from 'vue' -import { mapState, mapGetters } from 'vuex' -import Component from 'vue-class-component' -import { getObjectValueByPath } from '@/util/helpers' -import FeedbackSearchOptions, { FeedbackSearchOptionsModel } from '@/components/feedback_list/FeedbackSearchOptions.vue' -import { FeedbackTable as FeedbackModule, FeedbackHistoryItem } from '@/store/modules/feedback_list/feedback-table' -import { FeedbackStageEnum, Feedback, FeedbackLabel } from '@/models' -import { actions } from '@/store/actions' -import { getters } from '@/store/getters' -import { Authentication } from '../../store/modules/authentication' -import { ConfigModule } from '../../store/modules/config' -import SubmissionType from '../submission_type/SubmissionType.vue' -import ax, { fetchSubmissionType } from '@/api' -import { SubmissionNotes } from '@/store/modules/submission-notes' - -function extractLabelsFromFeedback(feedback: FeedbackHistoryItem): Set<number> { - let labels: Set<number> = new Set(feedback.labels) - - Object.values(feedback.feedbackLines || {}).forEach(comments => { - comments.forEach(comment => { - if (!comment.visibleToStudent) { - return - } - comment.labels.forEach(label => { - labels.add(label) - }) - }) - }) - - return labels -} - -@Component({ - components: { - FeedbackSearchOptions - } -}) -export default class FeedbackTable extends Vue { - get isTutor () { return Authentication.isTutor } - get exerciseMode () { return ConfigModule.state.config.instanceSettings.exerciseMode } - - get headers(): {text: string, value: string, align?: string}[] { - return [ - { text: 'Type', align: 'left', value: 'ofSubmissionType.name' }, - ...(this.exerciseMode ? [{ text: 'Student', value: 'ofStudent' }] : []), - { text: 'score', value: 'score' }, - { text: 'Created', value: 'created' }, - { text: 'Modified', value: 'modified', }, - { text: 'Final', value: 'final' }, - { text: 'Mark', value: 'mark' } - ] - } - - get feedback () { - return Object.values(FeedbackModule.state.feedbackHist) - } - - searchOptions: FeedbackSearchOptionsModel = { - searchString: '', - showFinal: true, - caseSensitive: false, - useRegex: false, - filterByExams: [], - filterByTutors: [], - filterByStage: undefined, - filterByLabels: [], - filterByExcludingLabels: [], - } - - get queryFoundInString(): (s: string) => boolean { - if (this.searchOptions.useRegex) { - const flags = this.searchOptions.caseSensitive ? 'u' : 'iu' - try { - const re = new RegExp(this.searchOptions.searchString , flags) - return s => re.test(s) - } catch { - return _ => true - } - } else { - if (this.searchOptions.caseSensitive) - return s => s.includes(this.searchOptions.searchString) - else - return s => s.toLowerCase().includes(this.searchOptions.searchString.toLowerCase()) - } - } - - queryFoundInFields(f: Feedback): boolean { - return f.ofSubmissionType.name !== undefined && this.queryFoundInString(f.ofSubmissionType.name) || - f.created !== undefined && this.queryFoundInString(f.created) || - f.modified !== undefined && this.queryFoundInString(f.modified) - } - - queryFoundInComments(feedback: Feedback): boolean { - return Object.values(feedback.feedbackLines ?? {}) - .some(line => line.map(comment => comment.text).some(this.queryFoundInString)) - } - - allLabelsFromFilterFoundOn(f: Feedback): boolean { - const fLabels = extractLabelsFromFeedback(f) - return this.searchOptions.filterByLabels.every(l => fLabels.has(l.pk)) - } - - noExcludedLabelFoundOn(f: Feedback): boolean { - const fLabels = extractLabelsFromFeedback(f) - return this.searchOptions.filterByExcludingLabels.every(l => !fLabels.has(l.pk)) - } - - // TODO: it is possible that a user is not assigned to the feedback, but still made a comment on it - // this happens when a reviewer adds a comment to a feedback that he has never corrected himself - // we could either ignore this case or add every user that has made a comment to a feedback - // to the list of associated users in the filteredTutorsContributedToFeedback method - - filteredTutorsContributedToFeedback(f: FeedbackHistoryItem): boolean { - if (this.searchOptions.filterByTutors.length === 0) - return true - - const stages = this.searchOptions.filterByStage ? [this.searchOptions.filterByStage] - : Object.values(FeedbackStageEnum) - const associatedTutors = stages.map(stage => f.history?.[stage]?.ofTutor).filter(x => !!x) - return this.searchOptions.filterByTutors.some(tutor => associatedTutors.includes(tutor.username)) - } - - feedbackIsForCurrentExam(f: Feedback): boolean { - return f.ofSubmissionType.examType.moduleReference === ConfigModule.state.config.currentExam - } - - get filteredFeedback() { - return this.feedback.filter(f => { - return (!f.isFinal || this.searchOptions.showFinal) && - (this.queryFoundInFields(f) || this.queryFoundInComments(f)) && - this.feedbackIsForCurrentExam(f) && - this.allLabelsFromFilterFoundOn(f) && - this.noExcludedLabelFoundOn(f) && - this.filteredTutorsContributedToFeedback(f) - }) - } - - showSubmission (feedback: Feedback) { - this.$router.push(`/feedback/${feedback.ofSubmission}`) - } - - changeMark(submissionPk: string, currColor: string) { - const colorArr = ['red lighten-2', 'blue lighten-2', 'green lighten-2', 'transparent'] - const newColor = colorArr[(colorArr.indexOf(currColor) + 1) % colorArr.length] - FeedbackModule.SET_MARK_COLOR({submissionPk, color: newColor}) - } -} -</script> - -<style scoped> - .feedback-row { - cursor: pointer; - } -</style> diff --git a/grady/frontend/src/components/instance_config/ConfigDialog.vue b/grady/frontend/src/components/instance_config/ConfigDialog.vue deleted file mode 100644 index 414f270b..00000000 --- a/grady/frontend/src/components/instance_config/ConfigDialog.vue +++ /dev/null @@ -1,110 +0,0 @@ -<template> - <v-dialog - v-model="show" - width="50%" - > - <v-card> - <v-card-title class="title"> - Configure instance - </v-card-title> - <v-card-text> - <div> - In this section you can configure the running instance. - Any changes you make are immediately applied, but it is required that every user - logs out and in again to make sure that all users receive the new configuration. - </div> - <v-row> - <v-col - v-for="(setting, i) in Object.keys(instanceSettings)" - :key="i" - cols="6" - > - <v-checkbox - v-model="selected" - :label="snakeUpperCaseSetting(setting)" - :value="setting" - /> - </v-col> - </v-row> - </v-card-text> - <v-card-actions> - <v-btn - color="red" - @click="$emit('hide')" - > - Cancel - </v-btn> - <v-btn - @click="submitChange" - > - Change settings - </v-btn> - </v-card-actions> - </v-card> - </v-dialog> -</template> - -<script> -import { ConfigModule } from '@/store/modules/config' -import * as api from '@/api' - -export default { - name: 'ConfigDialog', - data() { - return { - loading: true, - show: true, - selected: [], - - // config fields that should be ignored entirely go here - ignoredFields: ['registrationPassword'] - } - }, - computed: { - instanceSettings: function () { - const filtered = Object.entries(ConfigModule.state.config.instanceSettings) - .filter(([key,]) => !this.ignoredFields.includes(key)) - return Object.fromEntries(filtered) - }, - }, - watch: { - show (val) { - if (!val) { - this.$emit('hide') - } - } - }, - mounted() { - ConfigModule.getConfig().then(() => { - this.loading = false - this.selected = Object.entries(this.instanceSettings) - .filter(([key, value]) => value) - .map(([key, value]) => key) - }) - }, - methods: { - submitChange() { - let conf = {} - - // initially set all settings to false, then set selected ones to true - for (const cur of Object.keys(this.instanceSettings)) { - conf = {...conf, [cur]: false} - } - for (const cur of this.selected) { - conf = {...conf, [cur]: true} - } - - this.$emit('hide') - api.patchInstanceSettings(conf) - ConfigModule.getConfig() - }, - snakeUpperCaseSetting(setting) { - // converts given string to from camelCase to uppercase snake case - return setting.split('').reduce((acc, curr) => { - return curr === curr.toUpperCase() ? acc + '_' + curr : acc + curr - }).toUpperCase() - } - } - -} -</script> diff --git a/grady/frontend/src/components/mixins/commentLabelSelector.ts b/grady/frontend/src/components/mixins/commentLabelSelector.ts deleted file mode 100644 index b37a2761..00000000 --- a/grady/frontend/src/components/mixins/commentLabelSelector.ts +++ /dev/null @@ -1,132 +0,0 @@ -import Vue from 'vue' -import Component from 'vue-class-component' -import { Prop } from 'vue-property-decorator' -import { SubmissionNotes } from '@/store/modules/submission-notes' -import { FeedbackComment, FeedbackLabel } from '@/models' -import { FeedbackLabels } from '@/store/modules/feedback-labels' - -enum FeedbackType { - original = 'origFeedback', - updated = 'updatedFeedback', -} - -@Component -export default class commentLabelSelector extends Vue { - @Prop({ type: String, required: true }) readonly lineNo!: string - - /** - * Returns array of label pk's where feedbackType is - * either "origFeedback" or "updatedFeedback" - * - * Will return null when labels property does not exist on the requested state's comment - * This is the case when the labels have not been updated, as we don't want to have - * the labels field in the object if the labels have not changed. - */ - copyStateLabels(feedbackType: FeedbackType): number[] | null { - const currentLine = this.getFeedbackLine(feedbackType) - if (currentLine && currentLine.labels) { - return currentLine.labels - } else { - return null - } - } - - /** - * Gets the latest feedback line object for the current lineNo and the given feedbackType - * @param feedbackType The type to get the latest line from - */ - getFeedbackLine (feedbackType: FeedbackType): FeedbackComment | undefined { - - // helper used to determine the correct type to reduce redundancy - function isArray(val: FeedbackComment | FeedbackComment[]): val is FeedbackComment[] { - return (val as FeedbackComment[]).length !== undefined - } - - const stateLines = SubmissionNotes.state[feedbackType].feedbackLines - if (stateLines && Object.keys(stateLines).length > 0) { - let lines = stateLines[Number(this.lineNo)] - if (!lines) return undefined - - if (isArray(lines)) { - return lines.length > 0 ? lines[lines.length-1] : undefined - } else { - return lines - } - } - - return undefined - } - - getUnchangedLabels() { - const labelsOrig = this.copyStateLabels(FeedbackType.original) - if (labelsOrig === null || labelsOrig.length === 0) { - return new Array () - } - const removedLabels = this.getRemovedLabels() - const addedLabels = this.getAddedLabels() - - return labelsOrig.filter((val) => { - return !removedLabels.includes(val) && !addedLabels.includes(val) - }) - } - - getRemovedLabels() { - const currentLine = this.getFeedbackLine(FeedbackType.updated) - if (currentLine === undefined) return new Array() - - const labelsOrig = this.copyStateLabels(FeedbackType.original) - const labelsUpdated = this.copyStateLabels(FeedbackType.updated) - - if (labelsOrig === null || labelsUpdated === null) { - return new Array() - } - - return labelsOrig.filter((val) => { - return !labelsUpdated.includes(val) - }) - } - - getAddedLabels() { - const labelsOrig = this.copyStateLabels(FeedbackType.original) - const labelsUpdated = this.copyStateLabels(FeedbackType.updated) - - if (labelsUpdated === null) { - return new Array() - } - - if (labelsOrig === null) { - return labelsUpdated ? labelsUpdated : new Array() - } - - return labelsUpdated.filter((val) => { - return !labelsOrig.includes(val) - }) - } - - /** - * Maps label pk's to the objects stored in vuex store - */ - mapPksToLabelObj(pkArr: number[]): FeedbackLabel[] { - const mappedLabels = pkArr.map((val) => { - const label = FeedbackLabels.availableLabels.find((label) => { - return label.pk === val - }) - - if (!label) return undefined - return { - pk: val, - name: label.name, - description: label.description, - colour: label.colour - } - }).filter((val): val is FeedbackLabel => { - if (!val) { - return false - } - - return true - }) - - return mappedLabels - } -} diff --git a/grady/frontend/src/components/mixins/exportMixin.ts b/grady/frontend/src/components/mixins/exportMixin.ts deleted file mode 100644 index b68131f1..00000000 --- a/grady/frontend/src/components/mixins/exportMixin.ts +++ /dev/null @@ -1,100 +0,0 @@ -import Vue from 'vue' -import Component, { mixins } from 'vue-class-component' -import { fetchStudentExportData, StudentExportItem, InstanceExportData, fetchInstanceExportData } from '@/api' -import { getters } from '@/store/getters' -import { mutations as mut } from '@/store/mutations' -import { saveAs } from 'file-saver' - -let download = saveAs - -export enum ExportType { - JSON = 'application/json', -} - -export function mock(mockedDownload?: () => boolean) { - download = mockedDownload || saveAs -} - -@Component -export class exportMixin extends Vue { - exportDialog = true - mapFile: File | null = null - setPasswords = false - exportType = ExportType.JSON - loading = false - - get mapFileLoaded () { - return Object.keys(getters.state.studentMap).length > 0 - } - - async getExportFile (type: string) { - this.loading = true - - let studentData - if (type === 'data') { - studentData = await fetchStudentExportData({ setPasswords: this.setPasswords }) - } else if (type === 'instance') { - studentData = await fetchInstanceExportData() - } else { - throw new Error('Unsupported export type') - } - - if (this.mapFile || this.mapFileLoaded) { - this.getMappedExportFile(studentData) - } else { - this.optionalConvertAndCreatePopup(studentData) - } - } - - optionalConvertAndCreatePopup (studentData: StudentExportItem[] | InstanceExportData) { - const convertedData = JSON.stringify(studentData) - const filename = 'export.json' - download(new Blob([convertedData], { type: this.exportType }), filename) - this.loading = false - } - - async getMappedExportFile (studentData: StudentExportItem[] | InstanceExportData) { - if (!this.mapFile && !this.mapFileLoaded) { - throw new Error('Either mapFile must be selected or already loaded ' + - 'to call getMappedExportFile') - } - if (this.mapFile) { - await this.readMapFileAndCommit() - } - this.applyMapping(studentData) - this.optionalConvertAndCreatePopup(studentData) - } - - readMapFileAndCommit (): Promise<void> { - const fileReader = new FileReader() - return new Promise((resolve, reject) => { - fileReader.onload = event => { - // @ts-ignore typings of EventTarget seem to be wrong - const studentMap = JSON.parse(event.target.result) - mut.SET_STUDENT_MAP(studentMap) - resolve() - } - fileReader.onerror = () => { - fileReader.abort() - reject(new Error('Problem parsing input file.')) - } - - if (!this.mapFile) { - reject(new Error('Can only call' + - ' readMapFileAndCommit when mapFile is not undefined')) - } else { - fileReader.readAsText(this.mapFile) - } - }) - } - - hide () { - this.$emit('hide') - } - - showDialog () { - this.exportDialog = true - } - - applyMapping (exportData: StudentExportItem[] | InstanceExportData): void { throw new Error('Not implemented.') } -} diff --git a/grady/frontend/src/components/student/ExamInformation.vue b/grady/frontend/src/components/student/ExamInformation.vue deleted file mode 100644 index d1448b08..00000000 --- a/grady/frontend/src/components/student/ExamInformation.vue +++ /dev/null @@ -1,40 +0,0 @@ -<template> - <table class="table table-info rounded exam-table"> - <tbody v-if="!exam"> - No exam information present - </tbody> - <tbody v-else> - <tr> - <th>Module</th> - <td>{{ exam.moduleReference }}</td> - </tr> - <tr> - <th>Pass score</th> - <td>{{ exam.passScore }}</td> - </tr> - <tr v-if="exam.passOnly"> - <th>Pass only exam!</th> - </tr> - <tr> - <th>Total score</th> - <td>{{ exam.totalScore }}</td> - </tr> - </tbody> - </table> -</template> - -<script lang="ts"> -import { Vue, Component, Prop } from 'vue-property-decorator' -import { Exam } from '@/models' - -@Component -export default class ExamInformation extends Vue { - @Prop(Object) exam!: Exam -} -</script> - -<style> -.exam-table { - width: 100% -} -</style> diff --git a/grady/frontend/src/components/student/SubmissionList.vue b/grady/frontend/src/components/student/SubmissionList.vue deleted file mode 100644 index 00615c7a..00000000 --- a/grady/frontend/src/components/student/SubmissionList.vue +++ /dev/null @@ -1,76 +0,0 @@ -<template> - <div class="row my-2 justify-content-center"> - <v-data-table - hide-default-footer - :headers="headers" - :items="submissions" - item-key="type.pk" - > - <template #item.feedback.score="{ item }"> - {{ item.feedback ? item.feedback.score : 'N/A' }} - </template> - <template #item.view="{ item }"> - <v-btn - :to="`/submission/${item.type.pk}`" - color="orange lighten-2" - > - <v-icon>chevron_right</v-icon> - </v-btn> - </template> - </v-data-table> - <v-alert color="info"> - You reached <b>{{ sumScore }}</b> of <b>{{ sumFullScore }}</b> possible points ({{ pointRatio }}%). - </v-alert> - </div> -</template> - -<script> -export default { - name: 'SubmissionList', - props: { - submissions: { - type: Array, - required: true - } - }, - data () { - return { - headers: [ - { - text: 'Task', - align: 'left', - value: 'type.name', - sortable: true - }, - { - text: 'Score', - align: 'right', - value: 'feedback.score' - }, - { - text: 'Maximum Score', - align: 'right', - value: 'type.fullScore' - }, - { - text: 'View', - align: 'center', - value: 'view', - sortable: false - } - ] - } - }, - computed: { - sumScore () { - return this.submissions.map(a => a.feedback && a.feedback.score).reduce((a, b) => a + b) || 0 - }, - sumFullScore () { - return this.submissions.map(a => a.type.fullScore).reduce((a, b) => a + b) - }, - pointRatio () { - return ((this.sumScore / this.sumFullScore) * 100).toFixed(2) - } - } -} -</script> diff --git a/grady/frontend/src/components/student_list/StudentList.vue b/grady/frontend/src/components/student_list/StudentList.vue deleted file mode 100644 index 40f8fcc4..00000000 --- a/grady/frontend/src/components/student_list/StudentList.vue +++ /dev/null @@ -1,324 +0,0 @@ -<template> - <v-card> - <v-toolbar flat> - <v-toolbar-title> - Participants - </v-toolbar-title> - <v-spacer /> - <v-toolbar-items /> - <v-select - v-model="selectedGroup" - :items="groups" - item-text="name" - label="Group" - single-line - return-object - hide-details - clearable - flat - class="mr-6" - /> - <v-text-field - v-model="search" - append-icon="search" - label="Search" - single-line - hide-details - class="mr-6" - /> - <student-list-reverse-mapper /> - <v-btn - icon - @click="refresh" - > - <v-icon>refresh</v-icon> - </v-btn> - <student-list-menu /> - </v-toolbar> - <v-divider /> - <v-data-table - :headers="headers" - :items="studentListItems" - :search="search" - sort-by="name" - :loading="loading" - item-key="name" - show-expand - must-sort - > - <template #item="{ expand, isExpanded, item }"> - <tr> - <td> - <v-btn - small - icon - @click="expand(!isExpanded)" - > - <v-icon v-if="isExpanded"> - keyboard_arrow_up - </v-icon> - <v-icon v-else> - keyboard_arrow_down - </v-icon> - </v-btn> - </td> - <td> - {{ item.name }} - </td> - <td> - <v-tooltip top> - <template #activator="{ on }"> - <div v-on="on"> - <v-icon - v-if="item.isActive" - small - > - lock_open - </v-icon> - <v-icon - v-else - small - > - lock - </v-icon> - </div> - </template> - <span v-if="!item.isActive">Participant doesn't have access.</span> - <span v-else>Participant has access.</span> - </v-tooltip> - </td> - <td - v-for="type in submissionTypeHeaders" - :key="type.pk" - class="text-right" - > - <v-btn - v-if="item[type.pk]" - small - rounded - outlined - class="submission-button" - exact - :to="{name: 'submission-side-view', params: { - studentPk: item.pk, - submissionPk: item[type.pk].pk - }}" - :color="item[type.pk].final ? 'green darken-2' : 'grey'" - @click="showSubmissionDetails" - > - {{ item[type.pk].score }} - </v-btn> - <span v-else>N.A</span> - </td> - <td class="text-right"> - {{ item.total }} - </td> - </tr> - </template> - <template #expanded-item="{ headers, item }"> - <td :colspan="headers.length"> - <v-btn - v-if="isReviever" - @click="changeActiveStatus(item)" - > - {{ item.isActive ? 'Revoke access' : 'Grant access' }} - </v-btn> - <ul class="student-info-list"> - <li> - <b>Modul:</b> {{ item.exam }} - </li> - <li> - <b>MatrikelNr:</b> {{ item.matrikelNo }} - </li> - </ul> - </td> - </template> - </v-data-table> - </v-card> -</template> - -<script> -import { mapActions, mapState } from 'vuex' -import StudentListMenu from '@/components/student_list/StudentListMenu' -import StudentListReverseMapper from '@/components/student_list/StudentListReverseMapper' -import { changeActiveForUser, fetchUser } from '@/api' -import { getters } from '@/store/getters' -import { Authentication } from '@/store/modules/authentication' -import { ConfigModule } from '../../store/modules/config' -import * as api from '@/api' -import { Assignments } from '@/store/modules/assignments' - - -export default { - name: 'StudentList', - components: { - StudentListReverseMapper, - StudentListMenu }, - data () { - return { - loading: true, - search: '', - selectedGroup: null, - userData: [], - userMap: null - } - }, - computed: { - ...mapState([ - 'students' - ]), - isReviever() { - return Authentication.isReviewer - }, - submissionTypeHeaders () { - const subTypes = Object.values(getters.state.submissionTypes) - return subTypes - .filter(submissionType => { - return submissionType.examType.moduleReference === ConfigModule.state.config.currentExam - }) - .sort((a, b) => a.name.localeCompare(b.name)) - .map(type => { - return { - pk: type.pk, - text: type.name.substr(0, 5), - value: `${type.pk}.score`, - align: 'right' - } - }) - }, - headers () { - return [ - { - text: 'Name', - align: 'left', - value: 'name', - }, - { - text: 'Has Access', - align: 'left', - value: 'isActive', - }, - ...this.submissionTypeHeaders, - { - text: 'Total', - align: 'right', - value: 'total', - }, - ] - }, - studentListItems () { - if (!this.loading) { - let filteredStudents = this.students - if (this.selectedGroup !== null) { - filteredStudents = Object.values(filteredStudents).filter(student => { - let userGroups = this.userMap.get(student.userPk) - return userGroups.some(group => group.pk === this.selectedGroup.pk) - }) - } - return Object.values(filteredStudents).map(student => { - return { - pk: student.pk, - user: student.user, - userPk: student.userPk, - exam: student.exam, - name: student.name, - isActive: student.isActive, - matrikelNo: student.matrikelNo, - ...this.reduceArrToDict(student.submissions, 'type'), - total: this.sumSubmissionScores(student.submissions) - } - }) - } - - return [] - }, - groups () { - if (Authentication.isTutor) { - return Authentication.state.user.exerciseGroups.filter( group => { - return group.exam === null || group.exam.pk === ConfigModule.state.config.examId - }) - } - else if (Authentication.isReviewer) { - return Assignments.state.groups.filter( group => { - return group.exam === null || group.exam.pk === ConfigModule.state.config.examId - }) - } - else { - return [] - } - }, - }, - created () { - this.getUserData() - this.getStudents().then(() => { this.loading = false }) - const groups = Assignments.getGroups() - }, - methods: { - ...mapActions([ - 'getStudents' - ]), - reduceArrToDict (arr, key) { - return arr.reduce((acc, curr) => { - const keyInDict = curr[key] - acc[keyInDict] = curr - return acc - }, {}) - }, - changeActiveStatus (student) { - changeActiveForUser(student.userPk, !student.isActive).then(() => { - this.getStudents({ studentPks: [student.pk] }) - }).catch(() => { - this.$notify({ - title: 'Error', - text: `Unable to change active status of ${student.user}`, - type: 'error' - }) - }) - }, - sumSubmissionScores (submissions) { - submissions = submissions.filter(submission => { - var subType = Object.values(getters.state.submissionTypes).filter(submissionType => { - return submissionType.pk === submission.type - })[0] - return subType.examType.moduleReference === ConfigModule.state.config.currentExam - }) - return submissions.reduce((acc, curr) => { - if (curr.score) { - acc += curr.score - } - return acc - }, 0) - }, - refresh (opts = { silent: false }) { - if (!opts.silent) { - this.loading = true - } - this.getStudents().then(() => { this.loading = false }) - }, - showSubmissionDetails () { - this.$emit('detail-click') - }, - async getUserData() { - this.userMap = new Map() - this.userData = await api.fetchUsers() - var that = this // javascript this is not the same in forEach - this.userData.forEach(user => { - that.userMap.set(user.pk, user.exerciseGroups) - }) - } - }, -} -</script> - -<style scoped> - .submission-button { - min-width: 40px; - } - .student-info-list li { - display: inline; - margin-right: 20px; - } - .student-info-list { - display: inline; - } -</style> diff --git a/grady/frontend/src/components/student_list/StudentListHelpCard.vue b/grady/frontend/src/components/student_list/StudentListHelpCard.vue deleted file mode 100644 index a676d9c0..00000000 --- a/grady/frontend/src/components/student_list/StudentListHelpCard.vue +++ /dev/null @@ -1,31 +0,0 @@ -<template> - <v-row justify="center"> - <v-card class="mt-5"> - <v-card-title class="title"> - This is the student overview page! - </v-card-title> - <v-card-text> - To the left you see all students as well as their scores - per task type. You can do the following:<br><br> - <ol style="padding-left: 30px;"> - <li>click the little arrow on the left to see additional student information (matrikel no., module, etc.)</li> - <li>click on a students score to see their submission including feedback, tests, etc.<br>(You can even create Feedback here!)</li> - <li>sort the table via clicking on the table headers</li> - <li>search for a student via the search bar</li> - </ol> - </v-card-text> - </v-card> - </v-row> -</template> - -<script> -export default { - name: 'StudentListHelpCard' -} -</script> - -<style scoped> - /* .mg-bottom { - margin-bottom: 25px; - } */ -</style> diff --git a/grady/frontend/src/components/student_list/StudentListMenu.vue b/grady/frontend/src/components/student_list/StudentListMenu.vue deleted file mode 100644 index e528cc98..00000000 --- a/grady/frontend/src/components/student_list/StudentListMenu.vue +++ /dev/null @@ -1,94 +0,0 @@ -<template> - <v-menu - v-if="isReviewer" - open-on-hover - bottom - offset-y - > - <template #activator="{ on }"> - <v-btn - icon - v-on="on" - > - <v-icon>menu</v-icon> - </v-btn> - </template> - <v-list> - <v-list-item - v-for="item in items" - :key="item.title" - @click="item.action" - > - <v-list-item-title>{{ item.title }}</v-list-item-title> - </v-list-item> - </v-list> - </v-menu> -</template> - -<script> -import { activateAllStudentAccess, - deactivateAllStudentAccess } from '@/api' -import { actions } from '@/store/actions' -import { Authentication } from '@/store/modules/authentication' - -export default { - name: 'StudentListMenu', - computed: { - studentsActive () { - const firstStudent = Object.values(this.$store.state.students)[0] - return firstStudent ? firstStudent.isActive === true : false - }, - isReviewer () { - return Authentication.isReviewer - }, - items () { - return [ - { - title: this.studentsActive - ? 'Remove participant access' - : 'Grant participant access', - action: this.changeStudentsAccess - } - ] - } - }, - methods: { - updateStudentData () { - actions.getStudents().catch(() => { - this.$notify({ - title: 'ERROR', - text: 'Unable to update student data!', - type: 'error' - }) - }) - }, - changeStudentsAccess () { - if (this.studentsActive) { - deactivateAllStudentAccess().then(() => { - this.updateStudentData() - }).catch(() => { - this.$notify({ - title: 'ERROR', - text: 'Unable to disable access', - type: 'error' - }) - }) - } else { - activateAllStudentAccess().then(() => { - this.updateStudentData() - }).catch(() => { - this.$notify({ - title: 'ERROR', - text: 'Unable to activate access', - type: 'error' - }) - }) - } - } - } -} -</script> - -<style scoped> - -</style> diff --git a/grady/frontend/src/components/student_list/StudentListReverseMapper.vue b/grady/frontend/src/components/student_list/StudentListReverseMapper.vue deleted file mode 100644 index 8fed9671..00000000 --- a/grady/frontend/src/components/student_list/StudentListReverseMapper.vue +++ /dev/null @@ -1,45 +0,0 @@ -<template> - <v-tooltip top> - <template #activator="{ on }"> - <div v-on="on"> - <v-file-input - v-model="file" - hide-input - prepend-icon="vpn_key" - accept="application/JSON" - @change="readMapFileAndApply" - /> - </div> - </template> - <span>Apply mapping</span> - </v-tooltip> -</template> - -<script> -export default { - name: 'StudentListReverseMapper', - data () { - return { - file: null, - fileReader: new FileReader() - } - }, - methods: { - readMapFileAndApply () { - this.fileReader.onload = event => { - const studentMap = JSON.parse(event.target.result) - this.reverseMapStudents(studentMap) - } - this.fileReader.readAsText(this.file) - }, - reverseMapStudents (studentMap) { - this.$store.commit('SET_STUDENT_MAP', studentMap) - this.$store.commit('SET_STUDENTS', Object.values(this.$store.state.students)) - } - } -} -</script> - -<style scoped> - -</style> diff --git a/grady/frontend/src/components/submission_notes/CorrectionHelpCard.vue b/grady/frontend/src/components/submission_notes/CorrectionHelpCard.vue deleted file mode 100644 index 0be45efe..00000000 --- a/grady/frontend/src/components/submission_notes/CorrectionHelpCard.vue +++ /dev/null @@ -1,37 +0,0 @@ -<template> - <v-card class="help-card"> - <v-card-title> - <v-icon>help_outline</v-icon> - <h3>Tips on using the correction interface</h3> - </v-card-title> - <v-card-text> - Never trade an ale. - The sea-dog leads with yellow fever, crush the captain's quarters until it waves.<br> - Ho-ho-ho! malaria of life.<br> - Halitosis, adventure, and yellow fever.<br> - The girl drinks with halitosis, pull the galley before it laughs.<br> - The moon fires with life, vandalize the bikini atoll before it travels.<br> - The tuna blows with fight, haul the freighter before it whines.<br> - The cannibal robs with hunger, fire the lighthouse until it whines.<br> - The captain loves with death, vandalize the lighthouse before it whines.<br> - The anchor loots with treasure, raid the freighter before it grows.<br> - The reef commands with endurance, view the quarter-deck until it whines.<br> - The scallywag loots with passion, crush the bikini atoll before it falls.<br> - The sea leads with treasure, ransack the brig until it dies.<br> - The parrot robs with desolation, view the seychelles before it screams.<br> - The warm anchor quirky blows the landlubber.<br> - </v-card-text> - </v-card> -</template> - -<script> -export default { - name: 'CorrectionHelpCard' -} -</script> - -<style scoped> - .help-card { - width: fit-content; - } -</style> diff --git a/grady/frontend/src/components/submission_notes/RouteChangeConfirmation.vue b/grady/frontend/src/components/submission_notes/RouteChangeConfirmation.vue deleted file mode 100644 index 9c89fcce..00000000 --- a/grady/frontend/src/components/submission_notes/RouteChangeConfirmation.vue +++ /dev/null @@ -1,70 +0,0 @@ -<template> - <v-dialog - v-model="dialog" - max-width="30%" - > - <v-card class="text-center"> - <v-card-title class="title"> - Are you sure? - </v-card-title> - <v-card-text> - Not submitted feedback will be lost! - </v-card-text> - <v-card-actions> - <v-btn - text - outlined - color="red lighten-1" - @click="changeRoute" - > - Change page - </v-btn> - <v-btn - text - outlined - @click="dialog = false" - > - Stay here - </v-btn> - </v-card-actions> - </v-card> - </v-dialog> -</template> - -<script> -import { SubmissionNotes } from '@/store/modules/submission-notes' - -export default { - name: 'RouteChangeConfirmation', - props: { - nextRoute: { - type: Function, - default: null - } - }, - data () { - return { - dialog: false - } - }, - watch: { - nextRoute (newVal, oldVal) { - if (newVal !== oldVal && SubmissionNotes.workInProgress) { - this.dialog = true - } else { - this.nextRoute() - } - } - }, - methods: { - changeRoute () { - this.nextRoute() - this.dialog = false - } - } -} -</script> - -<style scoped> - -</style> diff --git a/grady/frontend/src/components/submission_notes/SubmissionCorrection.vue b/grady/frontend/src/components/submission_notes/SubmissionCorrection.vue deleted file mode 100644 index d3c9e736..00000000 --- a/grady/frontend/src/components/submission_notes/SubmissionCorrection.vue +++ /dev/null @@ -1,257 +0,0 @@ -<template> - <div> - <base-annotated-submission> - <template #header> - <annotated-submission-top-toolbar - v-model="mathIsRendered" - :of-student="submissionObj && submissionObj.ofStudent" - :show-clipboard="true" - :show-correction-help="true" - :source-code-available="sourceCodeAvailable" - :submission="submission" - :submission-type="submission.type" - :feedback="feedback" - :is-markdown="isMarkdown" - /> - </template> - <template - id="sub-lines" - #table-content - > - <tr - v-for="(code, lineNo) in submission" - :id="`sub-line-${lineNo}`" - :key="`${submissionObj.pk}${lineNo}`" - > - <math-renderer :enabled="mathIsRendered"> - <submission-line - :hint="hasHiddenComment(lineNo)" - :code="code" - :line-no="lineNo" - @toggleEditor="toggleEditorOnLine(lineNo)" - > - <template v-if="showFeedback"> - <div v-if="origFeedback[lineNo]"> - <feedback-comment - v-for="(comment, index) in getSortedComments(lineNo)" - :key="index" - v-bind="comment" - :visible-to-student-bool="updatedFeedback[lineNo] ? false : comment.visibleToStudent" - :line-no="lineNo" - :deletable="comment.ofTutor === user || isReviewer" - @click.native="toggleEditorOnLine(lineNo, comment)" - /> - </div> - <feedback-comment - v-if="updatedFeedback[lineNo]" - v-bind="updatedFeedback[lineNo]" - :line-no="lineNo" - :deletable="true" - @click.native="toggleEditorOnLine(lineNo, updatedFeedback[lineNo])" - /> - </template> - <comment-form - v-if="showEditorOnLine[lineNo]" - :feedback="selectedComment[lineNo].text" - :line-no="lineNo" - @collapseFeedbackForm="toggleEditorOnLine(lineNo)" - /> - </submission-line> - </math-renderer> - </tr> - </template> - <template #labels> - <label-selector - id="feedback-label-selector" - :assigned-to-feedback="true" - class="mt-1 elevation-1" - /> - </template> - <template #footer> - <annotated-submission-bottom-toolbar - class="mt-1 elevation-1" - :loading="loading" - :full-score="submissionObj['fullScore']" - :skippable="assignment !== undefined" - :feedback="feedbackObj ? feedbackObj : {}" - @submitFeedback="submitFeedback" - /> - </template> - </base-annotated-submission> - </div> -</template> - -<script> -import { mapState, mapGetters } from 'vuex' -import CommentForm from '@/components/submission_notes/base/CommentForm.vue' -import FeedbackComment from '@/components/submission_notes/base/FeedbackComment.vue' -import AnnotatedSubmissionTopToolbar from '@/components/submission_notes/toolbars/AnnotatedSubmissionTopToolbar' -import AnnotatedSubmissionBottomToolbar from '@/components/submission_notes/toolbars/AnnotatedSubmissionBottomToolbar' -import BaseAnnotatedSubmission from '@/components/submission_notes/base/BaseAnnotatedSubmission' -import FeedbackLabel from '@/components/feedback_labels/FeedbackLabel.vue' -import { FeedbackLabels as Labels } from '@/store/modules/feedback-labels' -import LabelSelector from '@/components/feedback_labels/LabelSelector.vue' -import SubmissionLine from '@/components/submission_notes/base/SubmissionLine' -import { SubmissionNotes, subNotesEventBus } from '@/store/modules/submission-notes' -import { SubmissionType } from '@/models' -import { Authentication } from '@/store/modules/authentication' -import { actions } from '@/store/actions' -import { fetchFeedback } from '@/api' -import MathRenderer from '@/components/MathRenderer.vue' - -export default { - name: 'SubmissionCorrection', - components: { - SubmissionLine, - BaseAnnotatedSubmission, - AnnotatedSubmissionBottomToolbar, - AnnotatedSubmissionTopToolbar, - FeedbackComment, - LabelSelector, - CommentForm, - MathRenderer }, - props: { - assignment: { - default: () => {}, - type: Object - }, - // either pass in an assignment or a submission and feedback - submissionWithoutAssignment: { - default: () => {}, - type: Object - }, - feedback: { - default: () => {}, - type: Object - }, - ignoreHiddenState: { - type: Boolean, - default: false, - } - }, - data () { - return { - loading: false, - feedbackShortPollInterval: null, - mathIsRendered: true, - } - }, - computed: { - showEditorOnLine () { return SubmissionNotes.state.ui.showEditorOnLine }, - selectedComment () { return SubmissionNotes.state.ui.selectedCommentOnLine }, - origFeedback () { return SubmissionNotes.state.origFeedback.feedbackLines }, - updatedFeedback () { return SubmissionNotes.state.updatedFeedback.feedbackLines }, - showFeedback () { return SubmissionNotes.state.ui.showFeedback }, - - workInProgress () { return SubmissionNotes.workInProgress }, - - sourceCodeAvailable () { - return SubmissionNotes.state.submission.sourceCodeAvailable - }, - - isStudent () { return Authentication.isStudent }, - isTutor () { return Authentication.isTutor }, - isReviewer () { return Authentication.isReviewer }, - user () { return Authentication.state.user.username }, - submission () { - return SubmissionNotes.submission - }, - isMarkdown () { - const lang = SubmissionNotes.submissionType.programmingLanguage - return lang === SubmissionType.ProgrammingLanguageEnum.Markdown - }, - submissionObj () { - return this.assignment ? this.assignment.submission : this.submissionWithoutAssignment - }, - feedbackObj () { - return this.assignment ? this.assignment.feedback : this.feedback - } - }, - watch: { - assignment: function (newVar, oldVar) { - this.init() - }, - submissionWithoutAssignment: function () { - this.init() - }, - submission: function (oldVal, newVal) { - if (JSON.stringify(oldVal) !== JSON.stringify(newVal)) { - subNotesEventBus.$emit('submissionChanged') - } - } - }, - created () { - this.init() - this.shortPollOrigFeedback() - }, - beforeDestroy () { - clearInterval(this.feedbackShortPollInterval) - }, - methods: { - toggleEditorOnLine (lineNo, comment = '') { - SubmissionNotes.TOGGLE_EDITOR_ON_LINE({ lineNo, comment }) - }, - submitFeedback ({ isFinal }) { - this.loading = true - SubmissionNotes.submitFeedback({ - isFinal: isFinal - }).then(_ => { - SubmissionNotes.RESET_UPDATED_FEEDBACK() - this.$emit('feedbackCreated') - this.$emit('feedbackChanged') - SubmissionNotes.RESET_MARKED_COMMENTS_FOR_DELETE() - }).catch(err => { - // ignore trivial errors as those are handled - // by an interceptor - if (err.message.includes('Request failed')) return - - this.$notify({ - title: 'Feedback creation Error!', - text: err.message, - type: 'error', - duration: -1 - }) - }).finally(() => { - this.loading = false - }) - }, - shortPollOrigFeedback () { - this.feedbackShortPollInterval = setInterval(() => { - if (this.feedbackObj && this.feedbackObj.ofSubmission) { - fetchFeedback({ ofSubmission: this.feedbackObj.ofSubmission }).then(feedback => { - SubmissionNotes.SET_ORIG_FEEDBACK(feedback) - }) - } - }, 5e3) - }, - getSortedComments (lineNo) { - if (!this.origFeedback || (!this.origFeedback && !this.origFeedback[lineNo])) return new Array() - let feedback = [...this.origFeedback[lineNo]] - - return feedback.sort((a, b) => { - const da = new Date(a.modified) - const db = new Date(b.modified) - return da.getTime() - db.getTime() - }) - }, - hasHiddenComment (lineNo) { - const hasOrigComment = this.origFeedback && this.origFeedback[lineNo] - && this.origFeedback[lineNo].length > 0 - - const hasUpdatedComment = this.updatedFeedback && this.updatedFeedback[lineNo] - - return !this.showFeedback && (hasOrigComment || !!hasUpdatedComment) - }, - init () { - SubmissionNotes.RESET_STATE() - SubmissionNotes.SET_SUBMISSION(this.submissionObj) - SubmissionNotes.SET_ORIG_FEEDBACK(this.feedbackObj) - SubmissionNotes.SET_SHOW_FEEDBACK(this.ignoreHiddenState ? true : !SubmissionNotes.state.hasOrigFeedback) - } - } -} -</script> - -<style scoped> - -</style> diff --git a/grady/frontend/src/components/submission_notes/base/BaseAnnotatedSubmission.vue b/grady/frontend/src/components/submission_notes/base/BaseAnnotatedSubmission.vue deleted file mode 100644 index 1be4eb9c..00000000 --- a/grady/frontend/src/components/submission_notes/base/BaseAnnotatedSubmission.vue +++ /dev/null @@ -1,38 +0,0 @@ -<template> - <div> - <slot name="header" /> - <table - id="submission-table" - class="submission-table elevation-1" - :class="{latex: isMarkdown}" - > - <slot name="table-content" /> - </table> - <slot name="labels" /> - <slot name="footer" /> - </div> -</template> - -<script> -import { SubmissionNotes } from '@/store/modules/submission-notes' -import store from '@/store/store' -import { SubmissionType } from '@/models' -export default { - name: 'BaseAnnotatedSubmission', - computed: { - isMarkdown () { - const typePk = SubmissionNotes.state.submission.type - const type = store.state.submissionTypes[typePk] - return type && type.programmingLanguage === SubmissionType.ProgrammingLanguageEnum.Markdown - } - } -} -</script> - -<style scoped> - .submission-table { - table-layout: fixed; - border-collapse: collapse; - width: 100%; - } -</style> diff --git a/grady/frontend/src/components/submission_notes/base/CommentForm.vue b/grady/frontend/src/components/submission_notes/base/CommentForm.vue deleted file mode 100644 index f815936d..00000000 --- a/grady/frontend/src/components/submission_notes/base/CommentForm.vue +++ /dev/null @@ -1,154 +0,0 @@ -<template> - <v-container> - <v-row> - <v-col> - <v-textarea - v-model="currentFeedback" - name="feedback-input" - label="Please provide your feedback here" - rows="2" - outlined - autofocus - auto-grow - hide-details - @keyup.enter.ctrl.exact="submitFeedback" - @keyup.esc="collapseTextField" - /> - </v-col> - </v-row> - <v-row> - <v-col> - <label-selector - id="comment-label-selector" - :assigned-to-feedback="false" - :line-no="lineNo" - :labels-unchanged="labelsUnchanged" - :labels-added="labelsAdded" - :labels-removed="labelsRemoved" - @label-added="labelAdded" - @label-removed="labelRemoved" - @submit-shortcut="submitFeedback" - /> - </v-col> - </v-row> - <v-row> - <v-col> - <v-btn - id="submit-comment" - color="success" - @click="submitFeedback" - > - <v-icon>check</v-icon>Submit - </v-btn> - <v-btn - id="cancel-comment" - @click="collapseTextField" - > - <v-icon>cancel</v-icon>cancel - </v-btn> - </v-col> - </v-row> - </v-container> -</template> - -<script lang="ts"> -import Vue from 'vue' -import Component, { mixins } from 'vue-class-component' -import { Prop, Watch } from 'vue-property-decorator' -import { SubmissionNotes, subNotesEventBus } from '@/store/modules/submission-notes' -import LabelSelector from '@/components/feedback_labels/LabelSelector.vue' -import { FeedbackComment, SubmissionType } from '@/models' -import commentLabelSelector from '@/components/mixins/commentLabelSelector' - -@Component({ - components: { - LabelSelector - } -}) -export default class CommentForm extends mixins(commentLabelSelector) { - @Prop({ type: String, default: '' }) readonly feedback!: string - @Prop({ type: String, required: true }) readonly lineNo!: string - - currentFeedback = this.feedback - labelsUnchanged: number[] = this.getUnchangedLabels() - labelsAdded: number[] = this.getAddedLabels() - labelsRemoved: number[] = this.getRemovedLabels() - - selectInput (event: Event) { - if (event !== null) { - const target = event.target as HTMLTextAreaElement - target.select() - } - } - - collapseTextField () { - this.$emit('collapseFeedbackForm') - subNotesEventBus.$emit('submissionChanged') - } - - /** - * Adds label pk to the array of added labels - * or adds already removed labels to unchanged array - */ - labelAdded (pk: number) { - if (this.labelsRemoved.includes(pk)) { - this.labelsUnchanged.push(pk) - this.labelsRemoved = this.labelsRemoved.filter((val) => { - return val !== pk - }) - } else if (!this.labelsAdded.includes(pk) && - !this.labelsUnchanged.includes(pk)) - { - this.labelsAdded.push(pk) - } - } - - /** - * Adds label pk to the array of removed labels - * or removes already added labels from the list of added labels - */ - labelRemoved (pk: number) { - if (this.labelsAdded.includes(pk)) { - this.labelsAdded = this.labelsAdded.filter((val) => { - return val !== pk - }) - } else if (!this.labelsRemoved.includes(pk)) { - this.labelsRemoved.push(pk) - this.labelsUnchanged = this.labelsUnchanged.filter((val) => { - return val !== pk - }) - } - } - - submitFeedback () { - const text = this.currentFeedback - const labels = this.labelsUnchanged.concat(this.labelsAdded) - - if (text === '' && labels.length === 0) { - return this.collapseTextField() - } - - const payload: {lineNo: number, comment: Partial<FeedbackComment>} = { - lineNo: Number(this.lineNo), - comment: { - text: text, - labels: labels, - } - } - - if (this.labelsAdded.length === 0 && this.labelsRemoved.length === 0) { - delete payload.comment.labels - } - - SubmissionNotes.UPDATE_FEEDBACK_LINE(payload) - this.collapseTextField() - } -} - -</script> - -<style scoped> - v-text-field { - padding-top: 0px; - } -</style> diff --git a/grady/frontend/src/components/submission_notes/base/FeedbackComment.vue b/grady/frontend/src/components/submission_notes/base/FeedbackComment.vue deleted file mode 100644 index 4f6b1bec..00000000 --- a/grady/frontend/src/components/submission_notes/base/FeedbackComment.vue +++ /dev/null @@ -1,340 +0,0 @@ -<template> - <div class="dialog-box"> - <div - v-if="commentDisplayable" - class="body elevation-1" - :style="{borderColor: borderColor}" - > - <span - class="tip tip-up" - :style="{borderBottomColor: borderColor}" - /> - <span - v-if="ofTutor" - class="of-tutor" - >Of tutor: {{ ofTutor }}</span> - <span class="comment-created">{{ parsedCreated }}</span> - <div - v-if="showVisibilityIcon" - class="visibility-icon" - > - <v-tooltip - v-if="visibleToStudentBool" - top - size="20px" - > - <template #activator="{ on }"> - <v-icon - size="20px" - v-on="on" - > - visibility - </v-icon> - </template> - <span>Will be visible to student</span> - </v-tooltip> - <v-tooltip - v-else - top - > - <template #activator="{ on }"> - <v-icon - size="20px" - v-on="on" - > - visibility_off - </v-icon> - </template> - <span>Won't be visible to student</span> - </v-tooltip> - </div> - <!-- eslint-disable-next-line vue/singleline-html-element-content-newline vue/max-attributes-per-line--> - <div :key="key" class="message">{{ text }}</div> - <v-btn - v-if="deletable" - text - icon - absolute - class="delete-button" - @click.stop="toggleDeleteComment" - > - <v-icon - v-if="!markedForDeletion.hasOwnProperty(pk)" - color="grey darken-1" - size="20px" - > - delete_forever - </v-icon> - <v-icon - v-else - size="20px" - > - restore - </v-icon> - </v-btn> - </div> - <v-row - v-if="showLabels && correctorView" - class="ml-2" - > - <v-col sm="4"> - <v-col sm="12"> - CURRENT LABELS - </v-col> - <feedback-label - v-for="label in unchangedLabels" - :key="label.pk" - removable - v-bind="label" - @remove-clicked="deleteAction" - /> - </v-col> - <v-col sm="4"> - <v-col sm="12"> - WILL BE REMOVED - </v-col> - <feedback-label - v-for="label in removedLabels" - :key="label.pk" - removable - v-bind="label" - @remove-clicked="deleteAction" - /> - </v-col> - <v-col sm="4"> - <v-col sm="12"> - WILL BE ADDED - </v-col> - <feedback-label - v-for="label in addedLabels" - :key="label.pk" - removable - v-bind="label" - @remove-clicked="deleteAction" - /> - </v-col> - </v-row> - <template - v-if="!correctorView" - row - wrap - align-center - > - <v-row - v-for="label in unchangedLabels" - :key="label.pk" - - - align="center" - > - <v-col sm="6"> - <feedback-label - v-bind="label" - /> - </v-col> - <v-col sm="6"> - <span><b>Description: </b>{{ label.description }}</span> - </v-col> - </v-row> - </template> - </div> -</template> - -<script> -import { mapState } from 'vuex' -import { UI } from '@/store/modules/ui' -import { SubmissionNotes, subNotesEventBus } from '@/store/modules/submission-notes' -import FeedbackLabel from '@/components/feedback_labels/FeedbackLabel.vue' -import { FeedbackLabels as Labels } from '@/store/modules/feedback-labels' -import commentLabelSelector from '@/components/mixins/commentLabelSelector' - -export default { - name: 'FeedbackComment', - components: { - FeedbackLabel, - }, - mixins: [ - commentLabelSelector, - ], - props: { - pk: { - default: '', - type: String, - required: false - }, - text: { - type: String, - required: true - }, - modified: { - default: '', - type: String, - required: false - }, - ofTutor: { - default: '', - type: String, - required: false - }, - lineNo: { - type: String, - required: true - }, - deletable: { - type: Boolean, - default: false - }, - visibleToStudentBool: { - type: Boolean, - default: true - }, - showVisibilityIcon: { - type: Boolean, - default: true - }, - correctorView: { - type: Boolean, - default: true - } - }, - data () { - return { - key: 0 - } - }, - computed: { - commentDisplayable () { return this.text !== '' }, - showLabels () { - return this.visibleToStudentBool && - (this.getUnchangedLabels().length > 0 || - this.getAddedLabels().length > 0 || - this.getRemovedLabels().length > 0) - }, - markedForDeletion () { return SubmissionNotes.state.commentsMarkedForDeletion }, - parsedCreated () { - if (this.modified) { - return new Date(this.modified).toLocaleString() - } else { - return 'Just now' - } - }, - borderColor () { - if (this.pk) { - return this.markedForDeletion.hasOwnProperty(this.pk) ? '#B5B5B5' : '#3D8FC1' - } - return 'orange' - }, - unchangedLabels() { - return this.mapPksToLabelObj(this.getUnchangedLabels()) - }, - addedLabels() { - return this.mapPksToLabelObj(this.getAddedLabels()) - }, - removedLabels() { - return this.mapPksToLabelObj(this.getRemovedLabels()) - } - }, - created() { - subNotesEventBus.$on('submissionChanged', () => { - this.key++ - }) - subNotesEventBus.$on('resetSubmission', () => { - this.key++ - }) - }, - methods: { - deleteAction (pk) { - let labels - const concated = this.getUnchangedLabels().concat(this.getAddedLabels()) - if (this.getUnchangedLabels().includes(pk)) { - labels = concated.filter((val) => { - return val !== pk - }) - } else if (this.getAddedLabels().includes(pk)) { - labels = concated.filter((val) => { - return val !== pk - }) - } else if (this.getRemovedLabels().includes(pk)) { - concated.push(pk) - labels = concated - } - - if (labels.length > 0 || SubmissionNotes.state.hasOrigFeedback || this.commentDisplayable) { - SubmissionNotes.UPDATE_FEEDBACK_LINE({ - lineNo: Number(this.lineNo), - comment: { - text: this.text || '', - labels: labels, - } - }) - } else { - SubmissionNotes.DELETE_FEEDBACK_LINE(Number(this.lineNo)) - } - }, - toggleDeleteComment () { - if (this.pk) { - if (!this.markedForDeletion.hasOwnProperty(this.pk)) { - SubmissionNotes.MARK_COMMENT_FOR_DELETION({ pk: this.pk }) - } else { - SubmissionNotes.UN_MARK_COMMENT_FOR_DELETION({ pk: this.pk }) - } - } - SubmissionNotes.DELETE_FEEDBACK_LINE(this.lineNo) - } - } -} -</script> - -<style scoped> - .tip { - width: 0px; - height: 0px; - position: absolute; - background: transparent; - border: 10px solid; - } - .tip-up { - top: -22px; /* Same as body margin top + border */ - left: 10px; - border-right-color: transparent; - border-left-color: transparent; - border-top-color: transparent; - } - .dialog-box .body { - cursor: pointer; - position: relative; - height: auto; - margin: 20px 10px 10px 10px; - padding: 5px; - border-radius: 0px; - border: 2px solid; - } - .body .message { - white-space: pre-line; - min-height: 30px; - border-radius: 3px; - font-size: 14px; - line-height: 1.5; - } - .delete-button { - bottom: -12px; - left: -42px; - } - .comment-created { - position: absolute; - font-size: 10px; - right: 4px; - top: -20px; - } - .of-tutor { - position: absolute; - font-size: 13px; - top: -20px; - left: 50px; - } - .visibility-icon { - position: absolute; - top: -4px; - left: -34px; - } -</style> diff --git a/grady/frontend/src/components/submission_notes/base/SubmissionLine.vue b/grady/frontend/src/components/submission_notes/base/SubmissionLine.vue deleted file mode 100644 index ee553796..00000000 --- a/grady/frontend/src/components/submission_notes/base/SubmissionLine.vue +++ /dev/null @@ -1,90 +0,0 @@ -<template> - <div> - <td - :style="backgroundColor" - class="line-number-cell" - > - <v-btn - text - block - depressed - class="line-number-btn" - @click="toggleEditor" - > - {{ lineNo }} - </v-btn> - </td> - <td class="code-cell-content pl-2"> - <!-- eslint-disable-next-line --> - <span class="code-line" :key="key" v-html="code"/> - <slot /> - </td> - </div> -</template> - -<script> -import { subNotesEventBus } from '../../../store/modules/submission-notes' -export default { - name: 'SubmissionLine', - props: { - lineNo: { - type: String, - required: true - }, - code: { - type: String, - required: true - }, - codeLanguage: { - type: String, - default: 'lang-c' - }, - hint: { - type: Boolean, - default: false, - }, - }, - data () { - return { - key: 0 - } - }, - computed: { - backgroundColor() { - return this.hint ? 'background-color: #F44336;' : 'background-color: transparent;' - } - }, - created () { - subNotesEventBus.$on('resetSubmission', () => { - this.key++ - }) - }, - methods: { - toggleEditor () { - this.$emit('toggleEditor') - } - } -} -</script> - -<style scoped> - .line-number-cell { - vertical-align: top; - } - - .code-cell-content { - width: 100%; - } - - .code-line { - white-space: pre-wrap; - font-family: monospace; - } - - .line-number-btn { - height: fit-content; - min-width: 50px; - margin: 0; - border-radius: 0; - } -</style> diff --git a/grady/frontend/src/components/submission_notes/toolbars/AnnotatedSubmissionBottomToolbar.vue b/grady/frontend/src/components/submission_notes/toolbars/AnnotatedSubmissionBottomToolbar.vue deleted file mode 100644 index ac7879e9..00000000 --- a/grady/frontend/src/components/submission_notes/toolbars/AnnotatedSubmissionBottomToolbar.vue +++ /dev/null @@ -1,227 +0,0 @@ -<template> - <v-card> - <v-card-text> - <v-form - ref="scoreForm" - v-model="scoreIsValid" - lazy-validation - @submit.prevent="submit" - > - <v-text-field - id="score-input" - v-model="score" - v-shortkey="'numeric'" - type="number" - step="0.5" - label="Score" - :suffix="`/${fullScore}`" - :rules="scoreRules" - min="0" - :max="fullScore" - @shortkey="handleKeypress" - /> - <div class="suggestion-chips"> - <v-chip - id="score-zero" - small - color="error" - outlined - @click="score=0" - > - 0 - </v-chip> - <v-chip - id="score-full" - small - color="success" - outlined - @click="score=fullScore" - > - {{ fullScore }} - </v-chip> - </div> - </v-form> - </v-card-text> - <v-divider /> - <v-card-actions> - <v-tooltip - v-if="showFinalCheckbox" - top - > - <template #activator="{ on }"> - <div v-on="on"> - <v-checkbox - v-model="isFinal" - label="Final" - class="final-checkbox" - hide-details - /> - </div> - </template> - <span>If unchecked this submission will be marked for review by the lecturer</span> - </v-tooltip> - <v-spacer /> - <v-tooltip - v-if="skippable" - top - > - <template #activator="{ on }"> - <v-btn - id="skip-submission" - text - v-on="on" - @click="skipSubmission" - > - Skip - </v-btn> - </template> - <span>Skip this submission</span> - </v-tooltip> - <v-tooltip top> - <template #activator="{ on }"> - <v-btn - id="submit-feedback" - color="primary" - :loading="loading" - :disabled="!scoreIsValid" - v-on="on" - @click="submit" - > - Submit - </v-btn> - </template> - <span>Submit and continue</span> - </v-tooltip> - </v-card-actions> - </v-card> -</template> - -<script> -import { SubmissionNotes } from '@/store/modules/submission-notes' -import { Authentication } from '@/store/modules/authentication' -import { Assignments } from '@/store/modules/assignments' -import { mapState } from 'vuex' - -export default { - name: 'AnnotatedSubmissionBottomToolbar', - props: { - fullScore: { - type: Number, - required: true - }, - loading: { - type: Boolean, - required: true - }, - skippable: { - type: Boolean, - default: false - }, - feedback: { - type: Object, - default: () => {} - } - }, - data () { - return { - scoreIsValid: true, - isFinal: this.initialFinalStatus(), - scoreRules: [ - score => score !== undefined || - 'Score is required.', - score => !isNaN(parseFloat(score)) || - 'Score must be a number.', - score => parseFloat(score) >= 0 && parseFloat(score) <= this.fullScore || - `Score must be between 0 and ${this.fullScore}.`, - score => parseFloat(score) === this.fullScore || this.hasFeedbackOrLabel || - 'Add a comment or label explaining why this submission doesn\'t get full score.' - ] - } - }, - computed: { - hasFeedbackOrLabel: function() { - return Object.keys(SubmissionNotes.state.updatedFeedback.feedbackLines).length > 0 || - SubmissionNotes.state.updatedFeedback.labels.length > 0 || - Object.keys(SubmissionNotes.state.origFeedback.feedbackLines).length > 0 || - SubmissionNotes.state.origFeedback.labels.length > 0 - }, - score: { - get: function () { - return SubmissionNotes.score - }, - set: function (score) { - SubmissionNotes.UPDATE_FEEDBACK_SCORE(Number(score)) - } - }, - showFinalCheckbox () { - // show always on feedback history and participants overview - if (this.$route.name !== 'correction') { - return true - } - - return !SubmissionNotes.isFeedbackCreation || - Authentication.isReviewer && !SubmissionNotes.isConflictResolution - } - }, - watch: { - feedback: { - handler: function (val) { - this.isFinal = this.initialFinalStatus() - }, - deep: true - }, - hasFeedbackOrLabel: function (newValue) { - if (this.score !== undefined) - this.$refs.scoreForm.validate() - } - }, - methods: { - initialFinalStatus () { - if (this.$route.name === 'correction') { - return !SubmissionNotes.isFeedbackCreation || Authentication.isReviewer - } else { - if (this.feedback.hasOwnProperty('isFinal') && !SubmissionNotes.isConflictResolution) { - return this.feedback.isFinal - } else { - return !SubmissionNotes.isFeedbackCreation || Authentication.isReviewer - } - } - }, - submit () { - if (this.$refs.scoreForm.validate()) - this.$emit('submitFeedback', { isFinal: this.isFinal }) - }, - skipSubmission () { - if (this.skippable) { - Assignments.skipAssignment().catch(() => { - this.$notify({ - title: 'Unable to skip submission', - type: 'error' - }) - }) - } else { - throw new Error('Can\'t skip submission when skippable is false for AnnotatedSubmissionBottomToolbar.') - } - }, - handleKeypress (event) { - // only handle keypress if nothing is focused - if (document.activeElement.tagName === 'BODY') { - this.score = event.key - const scoreInput = document.getElementById('score-input') - scoreInput.scrollIntoView() - scoreInput.focus() - } - } - } -} -</script> - -<style scoped> - .suggestion-chips { - margin: 0 -4px; - } - .final-checkbox { - margin: 0; - padding: 0; - } -</style> diff --git a/grady/frontend/src/components/submission_notes/toolbars/AnnotatedSubmissionTopToolbar.vue b/grady/frontend/src/components/submission_notes/toolbars/AnnotatedSubmissionTopToolbar.vue deleted file mode 100644 index 4f42298d..00000000 --- a/grady/frontend/src/components/submission_notes/toolbars/AnnotatedSubmissionTopToolbar.vue +++ /dev/null @@ -1,239 +0,0 @@ -<template> - <v-toolbar - dense - > - <v-app-bar-nav-icon - v-if="showCorrectionHelp" - @click.stop="helpDialog=true" - > - <v-icon>help_outline</v-icon> - </v-app-bar-nav-icon> - <v-dialog - v-model="helpDialog" - scrollable - max-width="fit-content" - > - <correction-help-card /> - </v-dialog> - <span v-if="score < 0">Submission of {{ ofStudent }}</span> - <span - v-else - class="title" - > - Score: {{ score }} </span> - <v-spacer /> - <toggle-feedback-visibility-button /> - <div v-if="isMarkdown"> - <v-btn @click="$emit('input', !mathIsRendered)"> - {{ mathIsRendered ? 'Reset Math' : 'Render Math' }} - </v-btn> - </div> - <v-spacer /> - <v-tooltip - v-if="sourceCodeAvailable" - top - > - <template #activator="{ on }"> - <v-btn - icon - v-on="on" - @click="downloadSourceCode" - > - <v-icon> - cloud_download - </v-icon> - </v-btn> - </template> - <span>Download original source code (.ipynb, etc.)</span> - </v-tooltip> - <v-btn - v-if="notebookAvailable" - text - class="blue-grey lighten-2" - @click="showOriginalSubmission" - > - VIEW ORIGINAL SUBMISSION - </v-btn> - <v-tooltip top> - <template #activator="{ on }"> - <v-btn - v-if="showClipboard" - icon - v-on="on" - @click="copyToClipboard" - > - <v-icon>content_copy</v-icon> - </v-btn> - </template> - <span>{{ copyMessage }}</span> - </v-tooltip> - <v-tooltip - v-if="solutionHidden" - top - > - <template #activator="{ on }"> - <v-btn - icon - v-on="on" - @click="showSolution" - > - <v-icon> - keyboard_arrow_left - </v-icon> - </v-btn> - </template> - <span>Show Solution</span> - </v-tooltip> - - <v-dialog - v-model="originalSubmissionDialog" - fullscreen - hide-overlay - > - <v-card> - <v-toolbar - dark - color="#1a237e" - > - <v-btn - icon - dark - @click="originalSubmissionDialog = false" - > - <v-icon>close</v-icon> - </v-btn> - <v-toolbar-title>Original notebook</v-toolbar-title> - <v-spacer /> - </v-toolbar> - - <v-card-text> - <iframe - :srcdoc="originalSubmission" - class="origNotebookFrame" - /> - </v-card-text> - </v-card> - </v-dialog> - </v-toolbar> -</template> - -<script> -import CorrectionHelpCard from '@/components/submission_notes/CorrectionHelpCard' -import { mapState } from 'vuex' -import ToggleFeedbackVisibilityButton from '@/components/submission_notes/toolbars/ToggleFeedbackVisibilityButton' -import { SubmissionNotes, subNotesEventBus } from '@/store/modules/submission-notes' -import { StudentPage } from '@/store/modules/student-page' -import {fetchSubmissionSourceCode} from '@/api.ts' -import { fetchNotebookSubmissionAsHtml } from '@/api.ts' -import {saveAs} from 'file-saver' -import store from '../../../store/store' -import { SubmissionType } from '../../../models' -import Vue from 'vue' -import { UI } from '@/store/modules/ui' - -export default { - name: 'AnnotatedSubmissionTopToolbar', - components: { - ToggleFeedbackVisibilityButton, - CorrectionHelpCard }, - props: { - ofStudent: { - type: String, - default: 'Participant' - }, - showClipboard: { - type: Boolean, - default: false - }, - score: { - type: Number, - default: -1 - }, - showCorrectionHelp: { - type: Boolean, - default: false - }, - sourceCodeAvailable: { - type: Boolean, - default: false - }, - isMarkdown: { - type: Boolean, - default: false - }, - notebookAvailable: { - type: Boolean, - default: false - }, - submission: { - type: Object, - default: null - }, - submissionType: { - type: Object, - default: null - }, - feedback: { - type: Object, - default: null - }, - submissionLanguage: { - type: String, - default: null - }, - value: { - type: Boolean, - default: true - } - }, - data () { - return { - helpDialog: false, - copyMessage: 'Copy to clipboard', - originalSubmissionDialog: false, - originalSubmission: '', - } - }, - computed: { - solutionHidden () { - return UI.state.showSubmissionType === false - }, - mathIsRendered() { - return this.value - } - }, - methods: { - resetSubmission () { - subNotesEventBus.$emit('resetSubmission') - }, - async showOriginalSubmission () { - if (!this.originalSubmission) { - const notebook = await fetchNotebookSubmissionAsHtml(this.submission.pk) - this.originalSubmission = notebook - } - this.originalSubmissionDialog = true - }, - async downloadSourceCode () { - const data = await fetchSubmissionSourceCode(SubmissionNotes.state.submission.pk) - saveAs(new Blob([data.sourceCode], {type: 'application/json'}), 'notebook.ipynb') - }, - copyToClipboard () { - this.$clipboard(SubmissionNotes.state.submission.text) - this.copyMessage = 'Copied!' - setTimeout(() => { - this.copyMessage = 'Copy to clipboard' - }, 2500) - }, - showSolution () { - UI.SET_SHOW_SUBMISSIONTYPE(true) - } - } -} -</script> - -<style scoped> - .origNotebookFrame { - width: 100%; - min-height: 85vh; - } -</style> diff --git a/grady/frontend/src/components/submission_notes/toolbars/ToggleFeedbackVisibilityButton.vue b/grady/frontend/src/components/submission_notes/toolbars/ToggleFeedbackVisibilityButton.vue deleted file mode 100644 index 453a5ea8..00000000 --- a/grady/frontend/src/components/submission_notes/toolbars/ToggleFeedbackVisibilityButton.vue +++ /dev/null @@ -1,39 +0,0 @@ -<template> - <v-btn - id="feedback-visibility-toggle" - text - color="info" - @click="showFeedback = !showFeedback" - > - <div v-if="showFeedback"> - Hide Feedback - </div> - <div v-else> - Show Feedback - </div> - </v-btn> -</template> - -<script lang="ts"> -import Vue from 'vue' -import { SubmissionNotes } from '@/store/modules/submission-notes' -import { createComputedGetterSetter } from '@/util/helpers' -import { getters } from '@/store/getters' -import Component from 'vue-class-component' - -@Component -export default class ToggleFeedbackVisibilityButton extends Vue { - get showFeedback () { - return getters.state.SubmissionNotes.ui.showFeedback - } - - set showFeedback (val) { - SubmissionNotes.SET_SHOW_FEEDBACK(val) - } -} -</script> - - -<style scoped> - -</style> diff --git a/grady/frontend/src/components/submission_type/SubmissionType.vue b/grady/frontend/src/components/submission_type/SubmissionType.vue deleted file mode 100644 index 3e845b98..00000000 --- a/grady/frontend/src/components/submission_type/SubmissionType.vue +++ /dev/null @@ -1,174 +0,0 @@ -<template> - <v-card id="submission-type"> - <v-toolbar> - <span class="title">{{ name }} - Full score: {{ fullScore }}</span> - <v-spacer /> - <v-btn - v-if="closeable" - icon - @click="close" - > - <v-icon>close</v-icon> - </v-btn> - </v-toolbar> - <v-expansion-panels - v-model="expanded" - multiple - accordion - > - <v-expansion-panel - v-for="(item, i) in typeItems" - :key="i" - > - <v-expansion-panel-header> - <b>{{ item.title }}</b> - <v-btn - v-if="item.title == 'Solution'" - color="info" - text - @click.stop="showSolutionComments = !showSolutionComments" - > - Toggle Comments - </v-btn> - </v-expansion-panel-header> - <v-expansion-panel-content - v-if="item.title === 'Description'" - class="type-description" - > - <math-renderer> - <!-- eslint-disable-next-line --> - <div class="description-content" v-html="item.text" /> - </math-renderer> - </v-expansion-panel-content> - <v-expansion-panel-content v-else-if="item.title === 'Solution'"> - <solution - :pk="pk" - :solution="solution" - :programming-language="programmingLanguage" - :solution-comments="solutionComments" - :show-solution-comments="showSolutionComments" - :editable="allowEditSolutionComments" - /> - </v-expansion-panel-content> - </v-expansion-panel> - </v-expansion-panels> - </v-card> -</template> - -<script lang="ts"> -import Vue from 'vue' -import Component from 'vue-class-component' -import { Prop, Watch } from 'vue-property-decorator' -import { highlight } from 'highlight.js' -import { UI } from '@/store/modules/ui' -import { SolutionComment } from '../../models' -import Solution from '@/components/submission_type/solution/Solution.vue' -import { Authentication } from '@/store/modules/authentication' -import MathRenderer from '@/components/MathRenderer.vue' - -@Component({ - components: { Solution, MathRenderer } -}) -export default class SubmissionType extends Vue { - @Prop({ - type: String, - required: true, - }) pk!: string - @Prop({ - type: String, - required: true - }) name!: string - @Prop({ - type: String, - required: true - }) description!: string - @Prop({ - type: String, - required: false, - default: '' - }) solution!: string - @Prop({ - type: Number, - required: true - }) fullScore!: number - @Prop({ - type: String, - default: 'c' - }) programmingLanguage!: string - @Prop({ - type: Boolean, - default: false - }) reverse!: boolean - @Prop({ - type: Object, - default: () => {return {}}, - }) solutionComments!: {[ofLine: number]: SolutionComment[]} - @Prop({ - type: Object, - default: function () { - return { - Description: true, - Solution: true - } - } - }) expandedByDefault!: {Description: boolean, Solution: boolean} - @Prop({ - type: Boolean, - default: true - }) closeable!: boolean - - expanded = [ - ...(this.expandedByDefault.Description ? [this.reverse ? 0 : 1] : []), - ...(this.expandedByDefault.Solution ? [this.reverse ? 1 : 0] : []) - ] - - showSolutionComments = true - - get allowEditSolutionComments () { - return Authentication.isTutorOrReviewer - } - - get typeItems () { - let items = [ - { - title: 'Description', - text: this.description - } - ] - if (this.solution) { - items.push({ - title: 'Solution', - text: this.solution - }) - } - if (this.reverse) { - return items.reverse() - } else { - return items - } - } - get highlightedSolution () { - return highlight(this.programmingLanguage, this.solution, true).value - } - - close() { - UI.SET_SHOW_SUBMISSIONTYPE(false) - } - - mounted () { - window.MathJax.typeset() - } -} -</script> - -<style> - .description-content pre { - overflow-x: auto; - } - - .v-expansion-panel { - /* Vuetify limits the height by default. We don't want that.*/ - max-height: initial; - } -</style> - diff --git a/grady/frontend/src/components/submission_type/SubmissionTypesOverview.vue b/grady/frontend/src/components/submission_type/SubmissionTypesOverview.vue deleted file mode 100644 index 64d8e385..00000000 --- a/grady/frontend/src/components/submission_type/SubmissionTypesOverview.vue +++ /dev/null @@ -1,85 +0,0 @@ -<template> - <v-card> - <v-card-title class="title"> - Task types - </v-card-title> - <v-row> - <v-col cols="3"> - <v-list id="submission-types-list"> - <v-list-item - v-for="submissionType in sortedSubmissionTypes" - :key="submissionType.pk" - @click="selectedSubmissionType = submissionType" - > - <v-list-item-content> - {{ submissionType.name }} - </v-list-item-content> - </v-list-item> - </v-list> - </v-col> - <v-col cols="9"> - <v-row - v-if="!selectedSubmissionType" - justify="center" - > - <strong>Select a task type on the left to see the description and solution.</strong> - </v-row> - <submission-type - v-else - :closeable="false" - class="mr-2 mb-2" - v-bind="selectedSubmissionType" - /> - </v-col> - </v-row> - </v-card> -</template> - -<script> -import SubmissionType from '@/components/submission_type/SubmissionType' -import { ConfigModule } from '../../store/modules/config' -import store from '@/store/store' - -export default { - name: 'SubmissionTypesOverview', - components: { SubmissionType }, - data () { - return { - selectedSubmissionTypePk: null - } - }, - computed: { - submissionTypes () { - let types = Object.values(store.state.submissionTypes) - return types.filter(submissionType => { - return submissionType.examType.moduleReference === ConfigModule.state.config.currentExam - }) - }, - // needed to keep selectedSubmissionType reactive - selectedSubmissionType: { - get: function () { - return store.state.submissionTypes[this.selectedSubmissionTypePk] - }, - set: function (newSubType) { - this.selectedSubmissionTypePk = newSubType.pk - } - }, - sortedSubmissionTypes () { - return Object.values(this.submissionTypes).sort((t1, t2) => { - let lowerName1 = t1.name.toLowerCase() - let lowerName2 = t2.name.toLowerCase() - if (lowerName1 < lowerName2) { - return -1 - } else if (lowerName1 > lowerName2) { - return 1 - } - return 0 - }) - } - } -} -</script> - -<style scoped> - -</style> diff --git a/grady/frontend/src/components/submission_type/solution/Solution.vue b/grady/frontend/src/components/submission_type/solution/Solution.vue deleted file mode 100644 index 54e1ab25..00000000 --- a/grady/frontend/src/components/submission_type/solution/Solution.vue +++ /dev/null @@ -1,219 +0,0 @@ -<template> - <table class="solution-table"> - <tr - v-for="(code, lineNo) in highlightedSolution" - :id="`solution-line-${lineNo}`" - :key="`${pk}:${lineNo}`" - > - <td - class="line-number-cell" - :style="backgroundColor(lineNo)" - > - <v-btn - text - block - depressed - class="line-number-btn" - @click="toggleEditor(lineNo)" - > - {{ lineNo }} - </v-btn> - </td> - <td class="code-cell-content pl-2"> - <!-- eslint-disable-next-line --> - <span class="code-line" v-html="code"/> - <template - v-if="solutionComments[lineNo] && solutionComments[lineNo].length && showSolutionComments" - > - <solution-comment - v-for="comment in solutionComments[lineNo]" - :key="comment.pk" - v-bind="comment" - @update-submission-type="updateSubmissionType" - @toggle-editor="toggleEditor(lineNo)" - @toggle-eidt-editor="toggleEditor(lineNo)" - /> - </template> - <template v-if="showEditorOnline[lineNo]"> - <v-textarea - v-model="editedSolutionComments[lineNo]" - name="solution-comment-input" - label="Here you can comment the solution. Other tutors will see those comments." - rows="2" - outlined - autofocus - auto-grow - hide-details - class="mx-2" - @keyup.enter.ctrl.exact="submitSolutionComment(lineNo)" - @keyup.esc="collapseTextField(lineNo)" - @focus="selectInput($event)" - /> - <v-btn - id="submit-comment" - color="success" - @click="submitSolutionComment(lineNo)" - > - <v-icon>check</v-icon>Submit - </v-btn> - <v-btn - id="cancel-comment" - @click="toggleEditor(lineNo)" - > - <v-icon>cancel</v-icon>cancel - </v-btn> - </template> - </td> - </tr> - </table> -</template> - -<script lang="ts"> - import { Vue, Component, Prop } from 'vue-property-decorator' - import { SolutionComment, FeedbackComment } from '../../../models' - import { highlight } from 'highlight.js' - import { syntaxPostProcess, objectifyArray } from '../../../util/helpers' - import SolutionCommentComponent from '@/components/submission_type/solution/SolutionComment.vue' - import * as api from '@/api' - import { actions } from '../../../store/actions' - - @Component({ - components: {'SolutionComment': SolutionCommentComponent} - }) - export default class Solution extends Vue { - @Prop({ - type: String, - required: true - }) - pk!: string - @Prop({ - type: String, - required: false, - default: '' - }) - solution!: string - @Prop({ - type: String, - default: 'c' - }) - programmingLanguage!: string - @Prop({ - type: Object, - default: {} - }) - solutionComments!: { [ofLine: number]: SolutionComment[] } - @Prop({ - type: Boolean, - default: true - }) - showSolutionComments!: boolean - @Prop({ - type: Boolean, - default: true - }) - editable!: boolean - - timer = 0 - showEditorOnline: {[ofLine: number]: boolean} = {} - editedSolutionComments: {[ofLine: number]: string} = {} - - get highlightedSolution() { - const highlighted = highlight(this.programmingLanguage, this.solution, true) - .value - const postprocessed = syntaxPostProcess(highlighted) - return postprocessed - .split('\n') - .reduce((acc: { [k: number]: string }, curr, index) => { - acc[index + 1] = curr - return acc - }, {}) - } - - get lineNoHint() { - if (this.showSolutionComments) { - // will return a falsy value if indexed with a line number - // meaning no hint will be displayed - return {} - } else { - // returning the solutionComments will return a truthy value - // if indexed with the line number where comments are located - return this.solutionComments - } - } - - backgroundColor(lineNo: number) { - if (this.lineNoHint[lineNo]) { - return 'backgroundColor: #64B5F6;' - } else { - 'backgroundColor: transparent;' - } - } - - selectInput (event: Event) { - if (event !== null) { - const target = event.target as HTMLTextAreaElement - target.select() - } - } - - toggleEditor(lineNo: number) { - if (this.editable) { - Vue.set(this.showEditorOnline, lineNo, !this.showEditorOnline[lineNo]) - } - } - - async submitSolutionComment(lineNo: number) { - const comment = { - text: this.editedSolutionComments[lineNo], - ofLine: lineNo, - ofSubmissionType: this.pk - } - await api.createSolutionComment(comment) - await actions.updateSubmissionType(this.pk) - this.toggleEditor(lineNo) - this.editedSolutionComments[lineNo] = '' - } - - updateSubmissionType() { - actions.updateSubmissionType(this.pk) - } - - mounted() { - this.timer = setInterval(() => { - actions.updateSubmissionType(this.pk) - }, 10 * 1e3) - } - - beforeDestroy() { - clearInterval(this.timer) - } - } -</script> - -<style scoped> - .solution-table { - table-layout: auto; - border-collapse: collapse; - width: 100%; - } - - .line-number-cell { - vertical-align: top - } - - .code-cell-content { - width: 100% - } - - .code-line { - white-space: pre-wrap; - font-family: monospace; - } - - .line-number-btn { - height: fit-content; - min-width: 50px; - margin: 0; - border-radius: 0px; - } -</style> diff --git a/grady/frontend/src/components/submission_type/solution/SolutionComment.vue b/grady/frontend/src/components/submission_type/solution/SolutionComment.vue deleted file mode 100644 index 34239c3c..00000000 --- a/grady/frontend/src/components/submission_type/solution/SolutionComment.vue +++ /dev/null @@ -1,238 +0,0 @@ -<template> - <div> - <div - class="dialog-box" - @click="$emit('toggle-editor')" - > - <div - class="body elevation-1" - :style="{borderColor: '#3D8FC1'}" - > - <span - class="tip tip-up" - :style="{borderBottomColor: '#3D8FC1'}" - /> - <span - v-if="ofUser" - class="of-user" - >Of user: {{ ofUser }}</span> - <span class="comment-created">{{ parsedCreated }}</span> - <div class="message"> - {{ text }} - </div> - <v-btn - v-if="deletable" - text - icon - absolute - class="delete-button" - @click.stop="deleteConfirmation = true" - > - <v-icon - color="grey darken-1" - size="20px" - > - delete_forever - </v-icon> - </v-btn> - <v-btn - v-if="editable" - text - icon - absolute - class="edit-button" - @click.stop="toggleEditing()" - > - <v-icon - color="grey darken-1" - size="20px" - > - edit - </v-icon> - </v-btn> - </div> - </div> - <template v-if="editing"> - <v-textarea - v-model="editedText" - name="solution-comment-edit" - label="Here you can edit your comment" - rows="2" - outlined - autofocus - auto-grow - hide-details - class="mx-2" - @keyup.enter.ctrl.exact="submitEdit" - @keyup.esc="editing = false" - @focus="selectInput($event)" - /> - <v-btn - id="submit-comment" - color="success" - @click="submitEdit" - > - <v-icon>check</v-icon>Submit - </v-btn> - <v-btn - id="cancel-comment" - @click="editing = false" - > - <v-icon>cancel</v-icon>cancel - </v-btn> - </template> - - <v-dialog - v-model="deleteConfirmation" - max-width="max-content" - > - <v-card - class="text-center pa-2" - > - <v-card-title class="title"> - Delete permanently? - </v-card-title> - <v-card-actions> - <v-btn - :id="`confirm-delete-comment`" - color="red lighten-1" - @click="deleteComment" - > - delete - </v-btn> - <v-btn @click="deleteConfirmation = false"> - cancel - </v-btn> - </v-card-actions> - </v-card> - </v-dialog> - </div> -</template> - -<script lang="ts"> -import {Vue, Component, Prop, Provide} from 'vue-property-decorator' -import { UI } from '@/store/modules/ui' -import { SubmissionNotes } from '@/store/modules/submission-notes' -import { Authentication } from '../../../store/modules/authentication' -import * as api from '@/api' -import { actions } from '@/store/actions' - -@Component -export default class SolutionComment extends Vue { - @Prop({ - type: Number, - required: true - }) pk!: number - @Prop({ - type: String, - required: true - }) text!: string - @Prop({ - type: String, - required: false - }) created?: string - @Prop({ - type: String, - required: true - }) ofUser!: string - @Prop({ - type: Number, - required: true - }) ofLine!: number - - editing: boolean = false - editedText: string = '' - deleteConfirmation: boolean = false - - get parsedCreated() { - if (this.created) { - return new Date(this.created).toLocaleString() - } else { - return 'Just now' - } - } - - get deletable() { - return Authentication.state.user.username === this.ofUser || Authentication.isReviewer - } - - get editable() { - return Authentication.state.user.username === this.ofUser - } - - toggleEditing() { - this.editing = !this.editing - this.editedText = this.text - } - - async deleteComment() { - await api.deleteSolutionComment(this.pk) - this.$emit('update-submission-type') - } - - async submitEdit() { - await api.patchSolutionComment({pk: this.pk, text: this.editedText}) - this.editing = false - this.$emit('update-submission-type') - } - - selectInput (event: Event) { - if (event !== null) { - const target = event.target as HTMLTextAreaElement - target.select() - } - } -} -</script> - -<style scoped> - .tip { - width: 0px; - height: 0px; - position: absolute; - background: transparent; - border: 10px solid; - } - .tip-up { - top: -22px; /* Same as body margin top + border */ - left: 10px; - border-right-color: transparent; - border-left-color: transparent; - border-top-color: transparent; - } - .dialog-box .body { - cursor: pointer; - position: relative; - height: auto; - margin: 20px 10px 10px 10px; - padding: 5px; - border-radius: 0px; - border: 2px solid; - } - .body .message { - min-height: 30px; - border-radius: 3px; - font-size: 14px; - line-height: 1.5; - } - .delete-button { - bottom: -12px; - left: -42px; - } - .edit-button { - bottom: 15px; - left: -42px; - } - .comment-created { - position: absolute; - font-size: 10px; - right: 4px; - top: -20px; - } - .of-user { - position: absolute; - font-size: 13px; - top: -20px; - left: 50px; - } -</style> diff --git a/grady/frontend/src/components/subscriptions/SubscriptionEnded.vue b/grady/frontend/src/components/subscriptions/SubscriptionEnded.vue deleted file mode 100644 index d3e6d667..00000000 --- a/grady/frontend/src/components/subscriptions/SubscriptionEnded.vue +++ /dev/null @@ -1,43 +0,0 @@ -<template> - <v-card - id="subscription-ended" - class="mx-auto center-page" - > - <v-card-title class="title"> - No submissions left - </v-card-title> - <v-card-text> - All submissions of this type in the current stage have been corrected. If you've - been validating feedback or <br> - reviewing, new submissions might be available in the future. - If that is the case they will appear clickable in the sidebar again. - </v-card-text> - <v-card-actions class="text-center"> - <v-btn to="/home"> - Overview - </v-btn> - <v-btn to="/feedback"> - Feedback History - </v-btn> - </v-card-actions> - </v-card> -</template> - -<script lang="ts"> - -import Vue from 'vue' -import Component from 'vue-class-component' -import store from '@/store/store' - -@Component -export default class SubscriptionEnded extends Vue { -} - -</script> - -<style scoped> - .center-page { - width: fit-content; - top: 30vh; - } -</style> diff --git a/grady/frontend/src/components/subscriptions/SubscriptionForList.vue b/grady/frontend/src/components/subscriptions/SubscriptionForList.vue deleted file mode 100644 index 688f8add..00000000 --- a/grady/frontend/src/components/subscriptions/SubscriptionForList.vue +++ /dev/null @@ -1,74 +0,0 @@ -<template> - <v-list-item - exact - :to="correctionRoute" - style="width: 100%" - > - <!-- dynamically set css class depending on active --> - <v-list-item-content - :class="{'inactive-subscription': !active}" - class="mr-3 subscription" - > - {{ name }} - </v-list-item-content> - <v-list-item-action-text> - left: {{ available }} - </v-list-item-action-text> - </v-list-item> -</template> - -<script lang="ts"> -import Vue from 'vue' -import Component from 'vue-class-component' -import { Prop } from 'vue-property-decorator' -import { Assignment , FeedbackStageEnum } from '@/models' -import { Assignments } from '@/store/modules/assignments' - -@Component -export default class SubscriptionForList extends Vue { - @Prop({ type: String, required: true }) name!: string - @Prop({ type: String, required: true }) sub_type_pk!: string - - get active () { - return !!this.available - } - - get available () { - const stage = Assignments.state.assignmentCreation.stage - const sub_type = this.sub_type_pk - const forSubType = Assignments.state.submissionsLeft[sub_type] - const forStage = forSubType !== undefined ? forSubType[stage] : undefined - return forStage - } - - get correctionRoute() { - if (!this.active) - return undefined - - const group = Assignments.state.assignmentCreation.group - const group_pk = group !== undefined ? group.pk : undefined - - return { - name: 'correction', - params: { - sub_type: this.sub_type_pk, - stage: Assignments.state.assignmentCreation.stage, - group: group_pk || undefined, - } - } - } -} -</script> - -<style scoped> - .inactive-subscription { - cursor: default; - color: #B5B5B5; - } - - .subscription { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - } -</style> diff --git a/grady/frontend/src/components/subscriptions/SubscriptionList.vue b/grady/frontend/src/components/subscriptions/SubscriptionList.vue deleted file mode 100644 index 9aff883b..00000000 --- a/grady/frontend/src/components/subscriptions/SubscriptionList.vue +++ /dev/null @@ -1,189 +0,0 @@ -<template> - <v-card name="subscription-list"> - <v-toolbar - color="teal" - :dense="sidebar" - > - <v-app-bar-nav-icon><v-icon>assignment</v-icon></v-app-bar-nav-icon> - <v-toolbar-title - v-if="!sidebar" - style="min-width: fit-content;" - > - Tasks - </v-toolbar-title> - <v-spacer /> - <v-select - v-model="selectedGroup" - :items="groups" - item-text="name" - return-object - hide-details - solo - flat - background-color="teal" - /> - <v-btn - icon - @click="getAvailableSubmissionCount(false)" - > - <v-icon v-if="!updating"> - refresh - </v-icon> - <v-progress-circular - v-else - indeterminate - color="black" - size="20" - /> - </v-btn> - </v-toolbar> - <v-tabs - v-if="showDetail" - v-model="selectedStage" - grow - color="black" - background-color="teal lighten-1" - > - <v-tab - v-for="(item, i) in stagesReadable" - :key="i" - > - {{ item }} - </v-tab> - <v-tab-item - v-for="(stage, i) in stages" - :key="i" - > - <subscriptions-for-stage - :id="`stage-${i}`" - :stage="stage" - /> - </v-tab-item> - </v-tabs> - </v-card> -</template> - -<script lang="ts"> -import Vue from 'vue' -import Component from 'vue-class-component' -import { Prop, Watch } from 'vue-property-decorator' -import { mapGetters, mapActions, mapState } from 'vuex' -import { UI } from '@/store/modules/ui' -import { actions } from '@/store/actions' -import SubscriptionForList from '@/components/subscriptions/SubscriptionForList.vue' -import SubscriptionsForStage from '@/components/subscriptions/SubscriptionsForStage.vue' -import { Assignments } from '@/store/modules/assignments' -import store from '../../store/store' -import { FeedbackStageEnum, Group } from '../../models' -import { Authentication } from '../../store/modules/authentication' -import { ConfigModule } from '../../store/modules/config' - -@Component({ - name: 'subscription-list', - components: { - SubscriptionsForStage, - SubscriptionForList, - }, -}) -export default class SubscriptionList extends Vue { - @Prop({type: Boolean, default: false}) sidebar!: boolean - - updating = false - timer = 0 - - get stages () { return Assignments.availableStages } - get stagesReadable () { return Assignments.availableStagesReadable } - get showDetail () { - return !this.sidebar || (this.sidebar && !UI.state.sideBarCollapsed) - } - get groups () { - return Assignments.state.groups.slice() - .filter(group => { - return group.exam === null || group.exam.pk === ConfigModule.state.config.examId - }) - .sort((a, b) => { - const matches_a = a.name.match(/(\d+)/) - const number_a = Number(matches_a === null ? 0 : matches_a[1]) - - const matches_b = b.name.match(/(\d+)/) - const number_b = Number(matches_b === null ? 0 : matches_b[1]) - - return (number_a<number_b?-1:(number_a>number_b?1:0)) - }) - } - - get selectedStage() { - const val = Assignments.state.assignmentCreation.stage - switch (val) { - case FeedbackStageEnum.Creation: return 0 - case FeedbackStageEnum.Validation: return 1 - case FeedbackStageEnum.Review: return 2 - default: - throw new Error(`Illegal value ${val} in get selectedStage`) - } - } - - set selectedStage(val) { - const map_number_to_stage = (val: number): FeedbackStageEnum => { - switch (val) { - case 0: return FeedbackStageEnum.Creation - case 1: return FeedbackStageEnum.Validation - case 2: return FeedbackStageEnum.Review - default: - throw new Error(`Illegal value ${val} in set selectedStage`) - } - } - Assignments.SET_CREATE_STAGE(map_number_to_stage(val)) - } - - get selectedGroup() { - return Assignments.state.assignmentCreation.group - } - - set selectedGroup(val: Group | undefined) { - if (val === undefined) { - throw new Error('Setting create group to undefined is not allowed') - } - Assignments.SET_CREATE_GROUP(val) - Assignments.getAvailableSubmissionCounts() - } - - - async getAvailableSubmissionCount (silent: boolean) { - if (silent === false) { - this.updating = true - } - await Assignments.getAvailableSubmissionCounts() - this.updating = false - } - - beforeDestroy() { - clearInterval(this.timer) - } - - created() { - const ownGroup = Authentication.state.user.exerciseGroups[0] - if (ownGroup !== undefined) { - this.selectedGroup = ownGroup - } - - const submissionTypes = actions.updateSubmissionTypes() - const groups = Assignments.getGroups() - Promise.all([submissionTypes, groups]).then(() => { - this.getAvailableSubmissionCount(false) - - this.timer = setInterval(() => { - this.getAvailableSubmissionCount(true) - }, 30 * 1e3) - }) - - Promise.all([submissionTypes]).then(() => { - Assignments.cleanAssignments() - }) - } -} -</script> - -<style scoped> - -</style> diff --git a/grady/frontend/src/components/subscriptions/SubscriptionsForStage.vue b/grady/frontend/src/components/subscriptions/SubscriptionsForStage.vue deleted file mode 100644 index e6ab066d..00000000 --- a/grady/frontend/src/components/subscriptions/SubscriptionsForStage.vue +++ /dev/null @@ -1,48 +0,0 @@ -<template> - <v-list :dense="dense"> - <div> - <div - v-for="subType in submissionTypes" - :key="subType.pk" - > - <subscription-for-list - :name="subType.name" - :sub_type_pk="subType.pk" - :available="1" - /> - </div> - </div> - </v-list> -</template> - -<script> -import SubscriptionForList from '@/components/subscriptions/SubscriptionForList' -import { Assignments } from '@/store/modules/assignments' -import store from '../../store/store' -import { ConfigModule } from '../../store/modules/config' -export default { - name: 'SubscriptionsForStage', - components: { - SubscriptionForList - }, - props: { - stage: { - type: String, - required: true - }, - dense: { - type: Boolean, - default: false - } - }, - computed: { - submissionTypes () { return Object.values(store.state.submissionTypes).filter(submissionType => { - return submissionType.examType.moduleReference === ConfigModule.state.config.currentExam - })} - } -} -</script> - -<style scoped> - -</style> diff --git a/grady/frontend/src/components/tutor_list/RoleSelect.vue b/grady/frontend/src/components/tutor_list/RoleSelect.vue deleted file mode 100644 index e5236334..00000000 --- a/grady/frontend/src/components/tutor_list/RoleSelect.vue +++ /dev/null @@ -1,48 +0,0 @@ -<template> - <v-select - v-model="value" - :items="roleOptions" - filled - dense - hide-details - :loading="loading" - :disabled="isForSelf" - @change="updateRole" - /> -</template> - -<script lang="ts"> -import Vue from 'vue' -import Component from 'vue-class-component' -import { Prop, Watch } from 'vue-property-decorator' -import { Tutor, UserAccount } from '@/models' -import { changeUserRole } from '@/api' -import { Authentication } from '@/store/modules/authentication' - -@Component -export default class RoleSelect extends Vue { - @Prop({ type: Object, required: true }) readonly tutor!: Tutor - - roleOptions = [UserAccount.RoleEnum.Reviewer, UserAccount.RoleEnum.Tutor] - value = this.tutor.role - previousValue = this.value - loading = false - - get isForSelf() { - return Authentication.state.user.pk === this.tutor.pk - } - - async updateRole(newRole: UserAccount.RoleEnum) { - this.loading = true - try { - await changeUserRole(this.tutor.pk, newRole) - this.previousValue = newRole - } catch (error) { - this.value = this.previousValue - } finally { - this.loading = false - } - } -} -</script> - diff --git a/grady/frontend/src/components/tutor_list/TutorList.vue b/grady/frontend/src/components/tutor_list/TutorList.vue deleted file mode 100644 index 229d0427..00000000 --- a/grady/frontend/src/components/tutor_list/TutorList.vue +++ /dev/null @@ -1,224 +0,0 @@ -<template> - <v-card> - <v-card-title class="title"> - Tutors - <v-spacer /> - <v-btn - icon - @click="refresh" - > - <v-icon>refresh</v-icon> - </v-btn> - </v-card-title> - <v-data-table - :headers="headers" - :items="tutors" - item-key="pk" - > - <template #item.reservedSubmissions="{ item }"> - {{ item.reservedSubmissions }} - <v-tooltip - v-if="item.reservedSubmissions" - top - > - <template #activator="{ on }"> - <v-icon - small - v-on="on" - @click="deleteAssignmentsOfTutor(item)" - > - clear - </v-icon> - </template> - <span>Free locked submissions</span> - </v-tooltip> - </template> - <template #item.exerciseGroups="{ item }"> - <v-select - v-model="item.exerciseGroups" - item-text="name" - item-value="pk" - :items="groups" - label="Set Groups" - single-line - return-object - multiple - chips - dense - hide-details - filled - @change="setExerciseGroups($event, item)" - /> - </template> - <template #item.isActive="{ item }"> - <v-btn - v-if="canRevokeAccess(item.username)" - icon - @click="changeActiveStatus(item)" - > - <v-tooltip top> - <template #activator="{ on }"> - <v-icon - v-if="item.isActive" - small - v-on="on" - > - lock_open - </v-icon> - <v-icon - v-else - small - v-on="on" - > - lock - </v-icon> - </template> - <span v-if="item.isActive">Revoke access</span> - <span v-else>Grant access</span> - </v-tooltip> - </v-btn> - </template> - <template #item.role="{ item }"> - <role-select :tutor="item" /> - </template> - </v-data-table> - </v-card> -</template> - -<script lang="ts"> -import Vue from 'vue' -import Component from 'vue-class-component' -import { changeActiveForUser, setGroups, fetchUserGroups, fetchUser } from '@/api' -import { actions } from '@/store/actions' -import { Authentication } from '@/store/modules/authentication' -import { TutorOverview } from '@/store/modules/tutor-overview' -import { Group, Tutor, UserAccount } from '@/models' -import { Assignments } from '@/store/modules/assignments' -import RoleSelect from './RoleSelect.vue' -import { ConfigModule } from '@/store/modules/config' - -@Component({ components: { RoleSelect } }) -export default class TutorList extends Vue { - headers = [ - { - text: 'Name', - align: 'left', - value: 'username' - }, - { - text: '# created', - align: 'right', - value: 'feedbackCreated' - }, - { - text: '# validated', - align: 'right', - value: 'feedbackValidated' - }, - { - text: '# locked submissions', - align: 'right', - value: 'reservedSubmissions' - }, - { - text: 'Exercise Groups', - align: 'right', - value: 'exerciseGroups' - }, - { - text: 'Has Access', - align: 'right', - value: 'isActive' - }, - { - text: 'Role', - value: 'role' - } - ] - - get tutors () { - var tlist = TutorOverview.state.tutors.map(tutor => { - var groups: Group[] = [] - this.userAccountGroups(tutor).then(function(value) { - groups = value // Success! - }, (reason) => { - this.$notify({ - title: 'Error', - text: `Unable to fetch tutors: ${reason}`, - type: 'error' - }) - return [] - }) - const reservedSubmissions = TutorOverview.state.activeAssignments[tutor.pk] - return { - ...tutor, - reservedSubmissions: reservedSubmissions ? reservedSubmissions.length : 0, - } - }) - return tlist - } - - get groups () { - return Assignments.state.groups.slice() - .filter(group => { - return group.exam === null || group.exam.pk === ConfigModule.state.config.examId - }) - .sort((a, b) => { - const matches_a = a.name.match(/(\d+)/) - const number_a = Number(matches_a === null ? 0 : matches_a[1]) - - const matches_b = b.name.match(/(\d+)/) - const number_b = Number(matches_b === null ? 0 : matches_b[1]) - - return (number_a<number_b?-1:(number_a>number_b?1:0)) - }) - } - - - async userAccountGroups(tutor: Tutor) { - const groups = await (await fetchUser(tutor.pk)).exerciseGroups - return groups - } - - changeActiveStatus (tutor: Tutor) { - changeActiveForUser(tutor.pk, !tutor.isActive).then(() => { - TutorOverview.getTutors() - }).catch(() => { - this.$notify({ - title: 'Error', - text: `Unable to change active status of ${tutor.username}`, - type: 'error' - }) - }) - } - - setExerciseGroups (groups: Group[], tutor: Tutor){ - setGroups(tutor.pk, groups).then(() => { - TutorOverview.getTutors() - }).catch(() => { - this.$notify({ - title: 'Error', - text: `Unable to change exercise-groups of ${tutor.username}`, - type: 'error' - }) - }) - } - - deleteAssignmentsOfTutor (tutor: Tutor) { - TutorOverview.deleteActiveAssignmentsOfTutor(tutor) - } - - refresh () { - TutorOverview.getTutors() - TutorOverview.getActiveAssignments() - } - - canRevokeAccess (username: string) { - return Authentication.state.user.username !== username - } -} -</script> - -<style scoped> - -</style> diff --git a/grady/frontend/src/main.ts b/grady/frontend/src/main.ts deleted file mode 100644 index ec119eaa..00000000 --- a/grady/frontend/src/main.ts +++ /dev/null @@ -1,38 +0,0 @@ - -import './class-component-hooks' - -import Vue from 'vue' -import store from './store/store' -import App from './App.vue' -import router from './router/index' -import Vuetify from 'vuetify' -import Notifications from 'vue-notification' -import Clipboard from 'v-clipboard' - -import 'vuetify/dist/vuetify.min.css' -import 'highlight.js/styles/atom-one-light.css' - -import '@/util/shortkeys' - -Vue.use(Vuetify) - -Vue.use(Clipboard) -Vue.use(Notifications) - -Vue.config.productionTip = false - -const el = process.env.NODE_ENV === 'test' ? undefined : '#app' - -const vuetify = new Vuetify({ - icons: { - iconfont: 'md', - }, -}) - -export default new Vue({ - vuetify, - el: el, - router: router, - store, - render: h => h(App) -}).$mount(el) diff --git a/grady/frontend/src/models.ts b/grady/frontend/src/models.ts deleted file mode 100644 index eb2d840d..00000000 --- a/grady/frontend/src/models.ts +++ /dev/null @@ -1,922 +0,0 @@ -export interface Config { - timeDelta: number - version: string, - currentExam: string, - examId: string, - instanceSettings: { - [config: string]: boolean, - } -} - -export interface Group { - pk: string, - name: string, - exam: Exam -} - -export interface CreateAssignment { - submissionType: string - group?: string - stage: FeedbackStageEnum -} - -/** - * - * @export - * @interface Assignment - */ -export interface Assignment { - /** - * - * @type {string} - * @memberof Assignment - */ - pk: string - /** - * - * @type {string} - * @memberof Assignment - */ - submission?: string | SubmissionAssignment - /** - * - * @type {boolean} - * @memberof Assignment - */ - isDone?: boolean - /** - * - * @type {string} - * @memberof Assignment - */ - owner?: string - /** - * - * @type {string} - * @memberof Assignment - */ - stage?: FeedbackStageEnum - - ofTutor?: string - - feedback?: Feedback - -} - -export interface SubmissionAssignment { - text: string, - type: string - full_score: number, - tests: Test[] -} - -/** - * - * @export - * @interface Exam - */ -export interface Exam { - /** - * - * @type {string} - * @memberof Exam - */ - pk: string - /** - * - * @type {string} - * @memberof Exam - */ - moduleReference: string - /** - * - * @type {number} - * @memberof Exam - */ - totalScore: number - /** - * - * @type {number} - * @memberof Exam - */ - passScore: number - /** - * - * @type {boolean} - * @memberof Exam - */ - passOnly?: boolean -} - -/** - * - * @export - * @interface Feedback - */ -export interface Feedback { - /** - * - * @type {number} - * @memberof Feedback - */ - pk: number - /** - * - * @type {string} - * @memberof Feedback - */ - ofSubmission?: string - /** - * - * @type {boolean} - * @memberof Feedback - */ - ofStudent?: string - isFinal?: boolean - /** - * - * @type {number} - * @memberof Feedback - */ - score?: number - /** - * - * @type {Array<FeedbackComment>} - * @memberof Feedback - */ - feedbackLines?: {[lineNo: number]: FeedbackComment[]} - /** - * - * @type {Date} - * @memberof Feedback - */ - created?: string - /** - * - * @type {Date} - * @memberof Feedback - */ - modified?: string - /** - * - * @type {string} - * @memberof Feedback - */ - ofSubmissionType: SubmissionType - /** - * - * @type {SubmissionType} - * @memberof Feedback - */ - feedbackStageForUser?: string, - labels: number[], -} - -/** - * - * @export - * @interface CreateUpdateFeedback - */ -export interface CreateUpdateFeedback { - /** - * - * @type {number} - * @memberof Feedback - */ - pk: number - /** - * - * @type {string} - * @memberof Feedback - */ - ofSubmission?: string - /** - * - * @type {boolean} - * @memberof Feedback - */ - isFinal?: boolean - /** - * - * @type {number} - * @memberof Feedback - */ - score?: number - /** - * - * @type {Array<FeedbackComment>} - * @memberof Feedback - */ - feedbackLines: {[lineNo: number]: FeedbackComment} - /** - * - * @type {Date} - * @memberof Feedback - */ - created?: string - /** - * - * @type {string} - * @memberof Feedback - */ - ofSubmissionType?: string - /** - * - * @type {string} - * @memberof Feedback - */ - feedbackStageForUser?: string, - labels: number[], -} - -/** - * - * @export - * @Comment - */ -export interface FeedbackComment { - /** - * - * @type {string} - * @memberof FeedbackComment - */ - pk: string - /** - * - * @type {string} - * @memberof FeedbackComment - */ - text: string - /** - * - * @type {Date} - * @memberof FeedbackComment - */ - modified?: string - /** - * - * @type {string} - * @memberof FeedbackComment - */ - ofTutor?: string - /** - * - * @type {number} - * @memberof FeedbackComment - */ - ofLine?: number - /** - * - * @type {boolean} - * @memberof FeedbackComment - */ - visibleToStudent?: boolean - labels: number[] - updated?: boolean -} - -/** - * - * @export - * @interface FeedbackLabel - */ -export interface FeedbackLabel { - pk: number - name: string - description: string - colour: string -} - -/** - * - * @export - * @interface Credentials - */ -export interface Credentials { - /** - * - * @type {string} - * @memberof JSONWebToken - */ - username: string - /** - * - * @type {string} - * @memberof JSONWebToken - */ - password: string -} - -export interface JSONWebToken { - token: string -} - -export interface Statistics { - submissionsPerType: number, - submissionsPerStudent: number, - currentMeanScore: number, - submissionTypeProgress: Array<SubmissionTypeProgress> -} - -export interface LabelStatisticsForSubType { - /** Contains the count of the different labels under their pk */ - [label_pk: number]: number, - /** The pk of the corresponding SubmissionType */ - pk: string -} - -/** - * - * @export - * @interface StudentInfo - */ -export interface StudentInfo { - /** - * - * @type {string} - * @memberof StudentInfo - */ - pk: string - /** - * - * @type {string} - * @memberof StudentInfo - */ - name?: string - /** - * - * @type {string} - * @memberof StudentInfo - */ - user: string - /** - * - * @type {string} - * @memberof StudentInfo - */ - matrikelNo?: string - /** - * - * @type {Exam} - * @memberof StudentInfo - */ - exam: Exam - /** - * - * @type {Array<SubmissionList>} - * @memberof StudentInfo - */ - submissions: Array<SubmissionList> - /** - * - * @type {boolean} - * @memberof StudentInfo - */ - passesExam?: boolean -} - -/** - * - * @export - * @interface StudentInfoForListView - */ -export interface StudentInfoForListView { - /** - * - * @type {string} - * @memberof StudentInfoForListView - */ - pk: string - /** - * - * @type {string} - * @memberof StudentInfoForListView - */ - name?: string - /** - * - * @type {string} - * @memberof StudentInfoForListView - */ - user?: string - /** - * - * @type {string} - * @memberof StudentInfoForListView - */ - userPk?: string - /** - * - * @type {string} - * @memberof StudentInfoForListView - */ - exam?: string - /** - * - * @type {Array<SubmissionNoTextFields>} - * @memberof StudentInfoForListView - */ - submissions: Array<SubmissionNoTextFields> - /** - * - * @type {string} - * @memberof StudentInfoForListView - */ - matrikelNo?: string - /** - * - * @type {boolean} - * @memberof StudentInfoForListView - */ - passesExam?: boolean - /** - * - * @type {boolean} - * @memberof StudentInfoForListView - */ - isActive: boolean -} - -/** - * - * @export - * @interface Submission - */ -export interface Submission { - /** - * - * @type {string} - * @memberof Submission - */ - pk: string - /** - * - * @type {SubmissionType} - * @memberof Submission - */ - type: SubmissionType - /** - * - * @type {string} - * @memberof Submission - */ - text?: string - /** - * - * @type {VisibleCommentFeedback} - * @memberof Submission - */ - feedback: VisibleCommentFeedback - /** - * - * @type {Array<Test>} - * @memberof Submission - */ - tests: Array<Test>, - - sourceCodeAvailable: boolean -} - -/** - * - * @export - * @interface SubmissionList - */ -export interface SubmissionList { - /** - * - * @type {string} - * @memberof SubmissionList - */ - pk: string - /** - * - * @type {SubmissionTypeList} - * @memberof SubmissionList - */ - type: SubmissionTypeList - /** - * - * @type {Feedback} - * @memberof SubmissionList - */ - feedback: Feedback -} - -/** - * - * @export - * @interface SubmissionNoTextFields - */ -export interface SubmissionNoTextFields { - /** - * - * @type {string} - * @memberof SubmissionNoTextFields - */ - pk: string - /** - * - * @type {string} - * @memberof SubmissionNoTextFields - */ - type: string - /** - * - * @type {string} - * @memberof SubmissionNoTextFields - */ - score?: string - /** - * - * @type {string} - * @memberof SubmissionNoTextFields - */ - final?: string - /** - * - * @type {string} - * @memberof SubmissionNoTextFields - */ - fullScore?: string -} - -/** - * - * @export - * @interface SubmissionNoType - */ -export interface SubmissionNoType { - /** - * - * @type {string} - * @memberof SubmissionNoType - */ - pk: string - /** - * - * @type {string} - * @memberof SubmissionNoType - */ - type: string - /** - * - * @type {string} - * @memberof SubmissionNoType - */ - fullScore?: string - /** - * - * @type {string} - * @memberof SubmissionNoType - */ - text?: string - /** - * - * @type {Feedback} - * @memberof SubmissionNoType - */ - feedback?: Feedback - ofStudent?:string - /** - * - * @type {Array<Test>} - * @memberof SubmissionNoType - */ - tests: Array<Test>, - - sourceCodeAvailable: boolean -} - -/** - * - * @export - * @interface SubmissionType - */ -export interface SubmissionType { - /** - * - * @type {string} - * @memberof SubmissionType - */ - pk: string - /** - * - * @type {string} - * @memberof SubmissionType - */ - name: string - /** - * - * @type {number} - * @memberof SubmissionType - */ - examType: Exam - /** - * - * @type {Exam} - * @memberof SubmissionType - */ - fullScore?: number - /** - * - * @type {string} - * @memberof SubmissionType - */ - description: string - /** - * - * @type {string} - * @memberof SubmissionType - */ - solution?: string - /** - * - * @type {string} - * @memberof SubmissionType - */ - programmingLanguage?: SubmissionType.ProgrammingLanguageEnum - - solutionComments: {[ofLine: number]: SolutionComment[]} -} - -export interface AvailableSubmissionCounts { - [submissionType: string]: { - [stage: string]: number - } -} - -export interface SolutionComment { - pk: number, - created: string, - ofLine: number, - ofSubmissionType: string, - ofUser: string, - text: string -} - -/** - * @export - * @namespace SubmissionType - */ -export namespace SubmissionType { - /** - * @export - * @enum {string} - */ - export enum ProgrammingLanguageEnum { - C = 'c', - Java = 'java', - Markdown = 'markdown' - } -} - -/** - * - * @export - * @interface SubmissionTypeList - */ -export interface SubmissionTypeList { - /** - * - * @type {string} - * @memberof SubmissionTypeList - */ - pk: string - - /** - * - * @type {string} - * @memberof SubmissionTypeList - */ - name: string - /** - * - * @type {number} - * @memberof SubmissionTypeList - */ - fullScore?: number -} - -export interface SubmissionTypeProgress { - pk: string - name: string - feedbackFinal: number - feedbackInValidation: number - feedbackInConflict: number - submissionCount: number -} - - -/** - * @export - * @enum {string} - */ -export enum FeedbackStageEnum { - Creation = 'feedback-creation', - Validation = 'feedback-validation', - Review = 'feedback-review' -} - -/** - * - * @export - * @interface Test - */ -export interface Test { - /** - * - * @type {string} - * @memberof Test - */ - pk: string - /** - * - * @type {string} - * @memberof Test - */ - name: string - /** - * - * @type {string} - * @memberof Test - */ - label: string - /** - * - * @type {string} - * @memberof Test - */ - annotation: string -} - -/** - * - * @export - * @interface Tutor - */ -export interface Tutor { - /** - * - * @type {string} - * @memberof Tutor - */ - pk: string - /** - * - * @type {string} - * @memberof Tutor - */ - password?: string - /** - * Designates whether this user should be treated as active. Unselect this instead of deleting accounts. - * @type {boolean} - * @memberof Tutor - */ - isActive?: boolean - /** - * Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only. - * @type {string} - * @memberof Tutor - */ - username: string - /** - * - * @type {string} - * @memberof Tutor - */ - feedbackCreated?: string - /** - * - * @type {string} - * @memberof Tutor - */ - feedbackValidated?: string - /** - * - * @type {Group} - * @memberof Tutor - */ - exerciseGroups: Group[] - - /** - * @type {string} - * @memberof Tutor - */ - role: UserAccount.RoleEnum -} - -/** - * - * @export - * @interface UserAccount - */ -export interface UserAccount { - /** - * - * @type {string} - * @memberof UserAccount - */ - pk: string - /** - * Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only. - * @type {string} - * @memberof UserAccount - */ - username?: string - /** - * - * @type {string} - * @memberof UserAccount - */ - role?: UserAccount.RoleEnum - /** - * - * @type {boolean} - * @memberof UserAccount - */ - isAdmin?: boolean - /** - * - * @type {string} - * @memberof UserAccount - */ - password?: string - exerciseGroups: Group[] -} - -/** - * @export - * @namespace UserAccount - */ -export namespace UserAccount { - /** - * @export - * @enum {string} - */ - export enum RoleEnum { - Student = 'Student', - Tutor = 'Tutor', - Reviewer = 'Reviewer' - } -} - -/** - * - * @export - * @interface VisibleCommentFeedback - */ -export interface VisibleCommentFeedback { - /** - * - * @type {number} - * @memberof VisibleCommentFeedback - */ - pk: number - /** - * - * @type {string} - * @memberof VisibleCommentFeedback - */ - ofSubmission: string - /** - * - * @type {boolean} - * @memberof VisibleCommentFeedback - */ - isFinal?: boolean - /** - * - * @type {number} - * @memberof VisibleCommentFeedback - */ - score?: number - /** - * - * @type {string} - * @memberof VisibleCommentFeedback - */ - feedbackLines?: string - /** - * - * @type {Date} - * @memberof VisibleCommentFeedback - */ - created?: Date - /** - * - * @type {string} - * @memberof VisibleCommentFeedback - */ - ofSubmissionType?: string - - labels: number[] -} - -export interface GitlabRelease { - - tag_name: string - - description_html: string - -} diff --git a/grady/frontend/src/pages/ExamSelectionPage.vue b/grady/frontend/src/pages/ExamSelectionPage.vue deleted file mode 100644 index fcfc1e58..00000000 --- a/grady/frontend/src/pages/ExamSelectionPage.vue +++ /dev/null @@ -1,121 +0,0 @@ -<template> - <v-container fill-height> - <v-app-bar - app - dense - fixed - dark - color="indigo darken-4" - class="grady-toolbar" - > - <router-link to="/home"> - <v-app-bar-title>Grady</v-app-bar-title> - </router-link> - <span class="pl-2 grady-speak">{{ gradySpeak }}</span> - <v-spacer /> - <v-divider vertical /> - <user-options /> - </v-app-bar> - <v-layout - align-center - justify-center - > - <v-card - class="mx-auto" - max-width="600" - min-width="500" - > - <v-card-title> - <h1>Select Exam<br></h1> - </v-card-title> - <v-card-text> - <p style="color:grey;"> - You can always come back and change your selection - </p> - </v-card-text> - <v-list> - <v-list-item - v-for="examType in examTypes" - id="listItem" - :key="examType.pk" - @click="selectExamType(examType)" - > - {{ examType.moduleReference }} - </v-list-item> - </v-list> - </v-card> - </v-layout> - </v-container> -</template> - -<script> -import { mapActions, mapState } from 'vuex' -import RegisterDialog from '@/components/RegisterDialog' -import { Authentication as Auth } from '@/store/modules/authentication' -import { ConfigModule } from '../store/modules/config' -import store from '@/store/store' -import { getters } from '@/store/getters' -import { actions } from '@/store/actions' -import ax, { fetchExamTypes } from '@/api' -import { Config } from '@/models' -import UserOptions from '@/components/UserOptions' - - -export default { - name: 'ExamSelection', - components: { UserOptions }, - data () { - return { - examTypes: [], - } - }, - computed: { - msg () { return Auth.state.message }, - userRole () { return Auth.state.user.role }, - gradySpeak () { return Auth.gradySpeak }, - }, - created () { - this.loadExamTypes() - }, - methods: { - selectExamType (examType) { - ConfigModule.SET_CURRENT_EXAM(examType.moduleReference) - ConfigModule.SET_CURRENT_EXAM_ID(examType.pk) - this.$router.push({ name: 'home' }) - }, - logout () { - actions.logout() - }, - async loadExamTypes () { - try { - const response = (await ax.get('/api/examtype/')).data - this.examTypes = response - if (this.examTypes.length === 0) { - this.$router.push({ name: 'home' }) - } - else if (this.examTypes.length === 1) { - this.selectExamType(this.examTypes[0]) - } - } catch (ex) { - console.log(ex) - } - }, - } -} -</script> - -<style scoped> - .v-btn { - margin: 0px; - } - - .btn-container { - display: flex; - flex-wrap: nowrap; - justify-content: space-around; - } - - .grady-toolbar { - font-weight: bold; - } -</style> diff --git a/grady/frontend/src/pages/LayoutSelector.vue b/grady/frontend/src/pages/LayoutSelector.vue deleted file mode 100644 index bb2e9d04..00000000 --- a/grady/frontend/src/pages/LayoutSelector.vue +++ /dev/null @@ -1,58 +0,0 @@ -<template> - <div> - <component :is="layout" /> - <v-main class="main-content"> - <router-view /> - </v-main> - </div> -</template> - -<script> -import { mapGetters } from 'vuex' -import TutorLayout from '@/pages/tutor/TutorLayout' -import StudentLayout from '@/pages/student/StudentLayout' -import ReviewerLayout from '@/pages/reviewer/ReviewerLayout' -import { Authentication } from '@/store/modules/authentication' - -export default { - name: 'LayoutSelector', - components: { - ReviewerLayout, - StudentLayout, - TutorLayout }, - computed: { - isStudent () { return Authentication.isStudent }, - isTutor () { return Authentication.isTutor }, - isReviewer () { return Authentication.isReviewer }, - layout () { - if (this.isStudent) { - return 'student-layout' - } else if (this.isTutor) { - return 'tutor-layout' - } else if (this.isReviewer) { - return 'reviewer-layout' - } - - return undefined - } - } -} -</script> - -<style> - html { - /* Vuetify always shows the scrollbar by default. This disables it. */ - overflow-y: auto !important; - } -</style> - -<style scoped> - /* Move the scrollbar below the header so it doesn't jump around when no scrollbar is shown. */ - .main-content { - /* 48px is the vuetify header size. */ - height: calc(100vh - 48px); - margin-top: 48px; - padding-top: 0 !important; - overflow: auto; - } -</style> diff --git a/grady/frontend/src/pages/Login.vue b/grady/frontend/src/pages/Login.vue deleted file mode 100644 index 846f8c4d..00000000 --- a/grady/frontend/src/pages/Login.vue +++ /dev/null @@ -1,158 +0,0 @@ -<template> - <v-container class="fill-height"> - <v-row - align="center" - justify="center" - > - <v-dialog - v-model="registerDialog" - class="pa-4" - scrollable - max-width="600" - > - <register-dialog @registered="registered($event)" /> - </v-dialog> - <v-col - cols="12" - sm="12" - md="10" - lg="7" - > - <img - src="https://grady.informatik.uni-goettingen.de/static/img/brand.svg" - class="grady-logo" - > - </v-col> - <v-divider - vertical - inset - class="ma-4" - /> - <v-col - class="text-center" - cols="8" - sm="6" - md="4" - lg="2" - > - <h2 class="pt-3"> - Log in - </h2> - <v-alert - :value="msg.length !== 0" - outlined - color="error" - transition="fade-transition" - > - {{ msg }} - </v-alert> - <p v-if="msg.length === 0"> - But I corrected them, sir. - </p> - <v-form - @submit.prevent="submit" - > - <v-text-field - id="username" - v-model="credentials.username" - label="Username" - required - autofocus - /> - <v-text-field - id="password" - v-model="credentials.password" - label="Password" - type="password" - required - /> - <v-row class="btn-container"> - <v-btn - id="register" - @click="registerDialog = true" - > - Register - </v-btn> - <v-btn - :loading="loading" - type="submit" - color="primary" - > - Access - </v-btn> - </v-row> - </v-form> - </v-col> - </v-row> - </v-container> -</template> - -<script> -import { mapActions, mapState } from 'vuex' -import RegisterDialog from '@/components/RegisterDialog' -import { Authentication as Auth } from '@/store/modules/authentication' -import { ConfigModule } from '../store/modules/config' - -export default { - name: 'GradyLogin', - components: { RegisterDialog }, - data () { - return { - credentials: { - username: '', - password: '' - }, - registerDialog: false, - loading: false - } - }, - computed: { - msg () { return Auth.state.message }, - userRole () { return Auth.state.user.role }, - }, - methods: { - submit () { - this.loading = true - Auth.getJWT(this.credentials).then(() => { - return Promise.all([ - Auth.getUser(), - ConfigModule.getConfig() - ]) - }).then(() => { - this.$router.push({ name: 'exam-selection' }) - this.loading = false - }).catch((err) => { - let msg = 'Login failed. Please try again.' - if (typeof err === 'string') { - msg = err - } - - Auth.SET_MESSAGE(msg) - this.loading = false - }) - }, - registered (credentials) { - this.registerDialog = false - this.credentials.username = credentials.username - this.credentials.password = credentials.password - Auth.SET_MESSAGE('Your account is being activated. Please wait.') - } - } -} -</script> - -<style scoped> - .v-btn { - margin: 0px; - } - - .btn-container { - display: flex; - flex-wrap: nowrap; - justify-content: space-around; - } - - .grady-logo { - width: 100%; - } -</style> diff --git a/grady/frontend/src/pages/PageNotFound.vue b/grady/frontend/src/pages/PageNotFound.vue deleted file mode 100644 index 4e8debf6..00000000 --- a/grady/frontend/src/pages/PageNotFound.vue +++ /dev/null @@ -1,46 +0,0 @@ -<template> - <v-container class="fill-height"> - <v-row - align="center" - justify="center" - > - <v-card - dark - width="80%" - height="80%" - > - <v-card-title style="font-size: 350%"> - The content you're requesting is not available in your country. - </v-card-title> - <v-divider class="px-5" /> - <v-col - cols="10" - offset="2" - > - <v-card-text class="no-content-text"> - <v-icon - size="200px" - color="deep-orange accent-4" - > - play_circle_outline - </v-icon> - <span style="font-size: xx-large">We're sorry about that ¯\_(ツ)_/¯</span> - </v-card-text> - </v-col> - </v-card> - </v-row> - </v-container> -</template> - -<script> -export default { - name: 'PageNotFound' -} -</script> - -<style scoped> - .no-content-text { - position: absolute; - top: 40%; - } -</style> diff --git a/grady/frontend/src/pages/StartPageSelector.vue b/grady/frontend/src/pages/StartPageSelector.vue deleted file mode 100644 index 85edbc66..00000000 --- a/grady/frontend/src/pages/StartPageSelector.vue +++ /dev/null @@ -1,39 +0,0 @@ -<template> - <component :is="startPage" /> -</template> - -<script> -import { mapGetters } from 'vuex' -import TutorStartPage from '@/pages/tutor/TutorStartPage' -import StudentPage from '@/pages/student/StudentPage' -import ReviewerStartPage from '@/pages/reviewer/ReviewerStartPage' -import { Authentication } from '@/store/modules/authentication' -export default { - name: 'StartPageSelector', - components: { - ReviewerStartPage, - StudentPage, - TutorStartPage - }, - computed: { - isStudent () { return Authentication.isStudent }, - isTutor () { return Authentication.isTutor }, - isReviewer () { return Authentication.isReviewer }, - startPage () { - if (this.isStudent) { - return 'student-page' - } else if (this.isTutor) { - return 'tutor-start-page' - } else if (this.isReviewer) { - return 'reviewer-start-page' - } - - return undefined - } - } -} -</script> - -<style scoped> - -</style> diff --git a/grady/frontend/src/pages/Statistics.vue b/grady/frontend/src/pages/Statistics.vue deleted file mode 100644 index 52f71f03..00000000 --- a/grady/frontend/src/pages/Statistics.vue +++ /dev/null @@ -1,29 +0,0 @@ -<template> - <v-container> - <v-row> - <v-col> - <label-statistics /> - </v-col> - <v-col> - <correction-statistics /> - </v-col> - </v-row> - </v-container> -</template> - -<script lang="ts"> -import Vue from 'vue' -import Component from 'vue-class-component' - -import CorrectionStatistics from '@/components/CorrectionStatistics.vue' -import LabelStatistics from '@/components/LabelStatistics.vue' - - -@Component({ - components: {CorrectionStatistics, LabelStatistics} -}) -export default class Statistics extends Vue { - - -} -</script> diff --git a/grady/frontend/src/pages/StudentSubmissionSideView.vue b/grady/frontend/src/pages/StudentSubmissionSideView.vue deleted file mode 100644 index ef863ba4..00000000 --- a/grady/frontend/src/pages/StudentSubmissionSideView.vue +++ /dev/null @@ -1,109 +0,0 @@ -<template> - <div> - <route-change-confirmation :next-route="nextRoute" /> - <submission-correction - :submission-without-assignment="submission" - :feedback="submission.feedback" - :ignore-hidden-state="true" - @feedbackCreated="refresh" - @feedbackChanged="refresh" - /> - <submission-tests - :tests="submission.tests" - class="mt-4" - /> - <submission-type - :key="submissionType.pk" - v-bind="submissionType" - :reverse="true" - :expanded-by-default="{ Description: true, Solution: true }" - class="mt-1" - /> - </div> -</template> - -<script> -import store from '@/store/store' -import VueInstance from '@/main' -import SubmissionCorrection from '@/components/submission_notes/SubmissionCorrection' -import SubmissionTests from '@/components/SubmissionTests' -import SubmissionType from '@/components/submission_type/SubmissionType' -import RouteChangeConfirmation from '@/components/submission_notes/RouteChangeConfirmation' -import { actions } from '@/store/actions' - -function onRouteEnterOrUpdate (to, from, next) { - const toIsSubmissionSideView = to.matched.some(route => route.meta.submissionSideView) - if (toIsSubmissionSideView) { - let submission = store.state.submissions[to.params.submissionPk] - if (!submission) { - store.dispatch('getSubmissionFeedbackTest', { pk: to.params.submissionPk }).then(() => { - VueInstance.$nextTick(() => { - next() - }) - }).catch(() => { - VueInstance.$notify({ - title: 'Error', - text: 'Unable to fetch student data', - type: 'error' - }) - next(false) - }) - } else { - next() - } - } else { - next() - } -} - -export default { - name: 'StudentSubmissionSideView', - components: { - RouteChangeConfirmation, - SubmissionType, - SubmissionTests, - SubmissionCorrection }, - data () { - return { - nextRoute: null - } - }, - computed: { - submissionPk () { - return this.$route.params['submissionPk'] - }, - submission () { - return this.$store.state.submissions[this.submissionPk] - }, - submissionType () { - return this.$store.state.submissionTypes[this.submission.type] - } - }, - methods: { - refresh () { - this.$emit('refresh') - const studentPk = this.$route.params.studentPk - if (studentPk) { - actions.getStudents({ studentPks: [studentPk] }) - } - const submissionPk = this.$route.params.submissionPk - actions.getSubmissionFeedbackTest({ pk: submissionPk }) - } - }, - beforeRouteEnter (to, from, next) { - onRouteEnterOrUpdate(to, from, next) - }, - beforeRouteUpdate (to, from, next) { - this.nextRoute = () => { - onRouteEnterOrUpdate(to, from, next) - } - }, - beforeRouteLeave (to, from, next) { - this.nextRoute = next - } -} -</script> - -<style scoped> - -</style> diff --git a/grady/frontend/src/pages/SubscriptionWorkPage.vue b/grady/frontend/src/pages/SubscriptionWorkPage.vue deleted file mode 100644 index e3f6b154..00000000 --- a/grady/frontend/src/pages/SubscriptionWorkPage.vue +++ /dev/null @@ -1,124 +0,0 @@ -<template> - <two-pane-layout - ref="layout" - :show-right-pane="showSubmissionType" - > - <template #left> - <v-container> - <route-change-confirmation :next-route="nextRoute" /> - <submission-correction - :key="currentAssignment.pk" - :assignment="currentAssignment" - @feedbackCreated="startWorkOnNextAssignment" - /> - <submission-tests - :tests="submission.tests" - :expand="true" - /> - </v-container> - </template> - <template #right> - <submission-type - :key="submissionType.pk" - v-bind="submissionType" - :expanded-by-default="{ Description: true, Solution: true }" - /> - </template> - </two-pane-layout> -</template> - -<script lang="ts"> -import { Vue, Component, Watch } from 'vue-property-decorator' -import { Route, NavigationGuard } from 'vue-router' -import SubmissionCorrection from '@/components/submission_notes/SubmissionCorrection.vue' -import SubmissionType from '@/components/submission_type/SubmissionType.vue' -import store from '@/store/store' -import { SubmissionNotes } from '@/store/modules/submission-notes' -import SubmissionTests from '@/components/SubmissionTests.vue' -import { Assignments } from '@/store/modules/assignments' -import RouteChangeConfirmation from '@/components/submission_notes/RouteChangeConfirmation.vue' -import { getters } from '@/store/getters' -import { SubmissionAssignment } from '@/models' -import { UI } from '@/store/modules/ui' -import TwoPaneLayout from '@/components/TwoPaneLayout.vue' - -const onRouteEnterOrUpdate: NavigationGuard = function (to, from, next) { - Assignments.changeAssignment(to).then(() => { - if (from === to) { - return - } - next() - }) -} - -@Component({ - components: { - RouteChangeConfirmation, - SubmissionTests, - SubmissionType, - SubmissionCorrection, - TwoPaneLayout, - } -}) -export default class SubscriptionWorkPage extends Vue { - $refs!: { - layout: TwoPaneLayout - } - - subscriptionActive = false - nextRoute = () => {} - - get showSubmissionType () { - return UI.state.showSubmissionType - } - - get currentAssignment () { - return Assignments.state.currentAssignment - } - - get submission () { - return this.currentAssignment && this.currentAssignment.submission - } - - get submissionType () { - if (this.submission && (this.submission as SubmissionAssignment).type) { - return getters.state.submissionTypes[(this.submission as SubmissionAssignment).type] - } - } - - beforeRouteEnter (to: Route, from: Route, next: (to?: any) => void ) { - onRouteEnterOrUpdate(to, from, next) - } - - beforeRouteUpdate (this: SubscriptionWorkPage, to: Route, from: Route, next: (to?: any) => void) { - this.nextRoute = () => { - onRouteEnterOrUpdate(to, from, next) - } - } - - beforeRouteLeave (this: SubscriptionWorkPage, to: Route, from: Route, next: (to?: any) => void) { - if (to.name === 'correction-ended') { - next() - } else { - this.nextRoute = () => { - next() - Assignments.deleteCurrentAssignment() - } - } - } - - startWorkOnNextAssignment () { - Assignments.createNextAssignment().then(() => { - Assignments.getAvailableSubmissionCounts() - }).catch(() => { - Assignments.SET_CURRENT_ASSIGNMENT(undefined) - this.$router.replace({name: 'correction-ended'}) - }) - } - - @Watch('currentAssignment') - onCurrentAssignmentChanged() { - this.$refs.layout.leftPane().scrollTop = 0 - } -} -</script> diff --git a/grady/frontend/src/pages/base/FeedbackHistoryPage.vue b/grady/frontend/src/pages/base/FeedbackHistoryPage.vue deleted file mode 100644 index 313494d9..00000000 --- a/grady/frontend/src/pages/base/FeedbackHistoryPage.vue +++ /dev/null @@ -1,35 +0,0 @@ -<template> - <two-pane-layout> - <template #left> - <router-view name="left" /> - </template> - <template #right> - <v-container> - <router-view - name="right" - @refresh="refresh" - /> - </v-container> - </template> - </two-pane-layout> -</template> - -<script lang="ts"> -import Vue from 'vue' -import Component from 'vue-class-component' -import { FeedbackTable } from '@/store/modules/feedback_list/feedback-table' -import TwoPaneLayout from '@/components/TwoPaneLayout.vue' - -@Component({ - components: { TwoPaneLayout } -}) -export default class FeedbackHistoryPage extends Vue { - refresh () { - FeedbackTable.getFeedbackHistory() - } - - created () { - FeedbackTable.getFeedbackHistory() - } -} -</script> diff --git a/grady/frontend/src/pages/base/TutorReviewerBaseLayout.vue b/grady/frontend/src/pages/base/TutorReviewerBaseLayout.vue deleted file mode 100644 index 8016a37a..00000000 --- a/grady/frontend/src/pages/base/TutorReviewerBaseLayout.vue +++ /dev/null @@ -1,79 +0,0 @@ -<template> - <base-layout> - <template #header> - Grady - </template> - - <template #sidebar-content> - <v-list dense> - <v-list-item - v-for="(item, i) in generalNavItems" - :key="i" - :to="item.route" - > - <v-list-item-action> - <v-icon>{{ item.icon }}</v-icon> - </v-list-item-action> - <v-list-item-content> - <v-list-item-title :id="item.tagId"> - {{ item.name }} - </v-list-item-title> - </v-list-item-content> - </v-list-item> - </v-list> - <v-divider /> - <slot name="above-subscriptions" /> - <subscription-list - v-if="!mini" - :sidebar="true" - /> - <feedback-label-tab v-if="!mini" /> - <slot name="below-subscriptions" /> - </template> - </base-layout> -</template> - -<script> -import { UI } from '@/store/modules/ui' -import BaseLayout from '@/components/BaseLayout' -import SubscriptionList from '@/components/subscriptions/SubscriptionList' -import FeedbackLabelTab from '@/components/feedback_labels/FeedbackLabelTab.vue' - -export default { - name: 'TutorReviewerBaseLayout', - components: { - SubscriptionList, - FeedbackLabelTab, - BaseLayout }, - data () { - return { - generalNavItems: [ - { - name: 'Overview', - icon: 'home', - route: '/home', - tagId: 'overview' - }, - { - name: 'Feedback History', - icon: 'feedback', - route: '/feedback', - tagId: 'feedback' - }, - { - name: 'Statistics', - icon: 'bar_chart', - route: '/statistics', - tagId: 'statistics' - } - ] - } - }, - computed: { - mini () { return UI.state.sideBarCollapsed }, - } -} -</script> - -<style scoped> -</style> diff --git a/grady/frontend/src/pages/reviewer/ReviewerLayout.vue b/grady/frontend/src/pages/reviewer/ReviewerLayout.vue deleted file mode 100644 index 18767de2..00000000 --- a/grady/frontend/src/pages/reviewer/ReviewerLayout.vue +++ /dev/null @@ -1,52 +0,0 @@ -<template> - <tutor-reviewer-base-layout> - <template #above-subscriptions> - <v-list - dense - > - <v-list-item - v-for="(item, i) in subGeneralNavItems" - :key="i" - :to="item.route" - > - <v-list-item-action> - <v-icon>{{ item.icon }}</v-icon> - </v-list-item-action> - <v-list-item-content> - <v-list-item-title> - {{ item.name }} - </v-list-item-title> - </v-list-item-content> - </v-list-item> - </v-list> - </template> - </tutor-reviewer-base-layout> -</template> - -<script> -import TutorReviewerBaseLayout from '@/pages/base/TutorReviewerBaseLayout' - -export default { - name: 'ReviewerLayout', - components: { TutorReviewerBaseLayout }, - data () { - return { - subGeneralNavItems: [ - { - name: 'Participants', - route: '/participant-overview', - icon: 'people' - }, - { - name: 'Tutors', - route: { name: 'tutor-overview' }, - icon: 'people' - } - ] - } - } -} -</script> - -<style scoped> -</style> diff --git a/grady/frontend/src/pages/reviewer/ReviewerStartPage.vue b/grady/frontend/src/pages/reviewer/ReviewerStartPage.vue deleted file mode 100644 index b902a3d3..00000000 --- a/grady/frontend/src/pages/reviewer/ReviewerStartPage.vue +++ /dev/null @@ -1,93 +0,0 @@ -<template> - <v-container v-if="dataLoaded"> - <v-row> - <v-col - lg="6" - md="12" - > - <change-log /> - </v-col> - <v-col - lg="6" - md="12" - > - <correction-statistics /> - </v-col> - <v-col> - <SubmissionTypesOverview /> - </v-col> - </v-row> - </v-container> - <v-row - v-else - justify="center" - class="mt-4 pt-4" - > - <import-dialog - v-if="showImportDialog" - @hide="showImportDialog = false" - @imported="importDone" - /> - <v-card class="import-card"> - <v-card-title class="title"> - Import data - </v-card-title> - <v-card-text> - It looks like this instance doesn't contain any data. - Would you like to import some? - </v-card-text> - <v-card-actions class="justify-center"> - <v-btn - class="info" - @click="showImportDialog = true" - > - Import data - </v-btn> - </v-card-actions> - </v-card> - </v-row> -</template> - -<script> -import CorrectionStatistics from '@/components/CorrectionStatistics' -import ImportDialog from '@/components/ImportDialog' -import ChangeLog from '@/components/ChangeLog' -import SubmissionTypesOverview from '@/components/submission_type/SubmissionTypesOverview' -import { getters } from '../../store/getters' -import { Assignments } from '@/store/modules/assignments' - -export default { - name: 'ReviewerStartPage', - name: 'reviewer-start-page', - components: { - ImportDialog, - SubmissionTypesOverview, - ChangeLog, - CorrectionStatistics }, - data: () => { - return { - showImportDialog: false, - dataImported: false - } - }, - computed: { - dataLoaded () { - return Object.keys(getters.state.submissionTypes).length !== 0 || this.dataImported - } - }, - methods: { - importDone() { - this.dataImported = true - Assignments.RESET_STATE() - } - } -} -</script> - -<style scoped> - -.import-card { - width: 30%; -} - -</style> diff --git a/grady/frontend/src/pages/reviewer/StudentOverviewPage.vue b/grady/frontend/src/pages/reviewer/StudentOverviewPage.vue deleted file mode 100644 index f062dce5..00000000 --- a/grady/frontend/src/pages/reviewer/StudentOverviewPage.vue +++ /dev/null @@ -1,74 +0,0 @@ -<template> - <v-container> - <v-row v-if="this.$vuetify.breakpoint.xl"> - <v-col md="6"> - <student-list /> - </v-col> - <v-col - md="6" - class="right-view" - > - <router-view /> - </v-col> - </v-row> - <v-row v-else> - <v-col> - <student-list @detail-click="openDialog" /> - </v-col> - <v-dialog - v-model="dialog" - fullscreen - hide-overlay - > - <v-card> - <v-toolbar - dark - color="#1a237e" - > - <v-btn - icon - dark - @click="dialog = false" - > - <v-icon>close</v-icon> - </v-btn> - <v-toolbar-title>Submission details</v-toolbar-title> - <v-spacer /> - </v-toolbar> - <v-card-text> - <router-view @refresh="dialog = false" /> - </v-card-text> - </v-card> - </v-dialog> - </v-row> - </v-container> -</template> - -<script> -import StudentList from '@/components/student_list/StudentList' -import StudentListHelpCard from '@/components/student_list/StudentListHelpCard' - -export default { - name: 'StudentOverviewPage', - components: { StudentList }, - data: () => { - return { - dialog: false - } - }, - methods: { - openDialog () { - this.dialog = true - } - } -} -</script> - -<style scoped> - .right-view { - position: sticky; - top: 80px; - overflow-y: scroll; - height: 90vh; - } -</style> diff --git a/grady/frontend/src/pages/reviewer/TutorOverviewPage.vue b/grady/frontend/src/pages/reviewer/TutorOverviewPage.vue deleted file mode 100644 index b0b98e30..00000000 --- a/grady/frontend/src/pages/reviewer/TutorOverviewPage.vue +++ /dev/null @@ -1,24 +0,0 @@ -<template> - <tutor-list class="ma-2 elevation-1" /> -</template> - -<script> -import store from '@/store/store' -import TutorList from '@/components/tutor_list/TutorList' -import { actions } from '@/store/actions' -import { TutorOverview } from '@/store/modules/tutor-overview' - -export default { - name: 'TutorOverviewPage', - components: { TutorList }, - beforeRouteEnter (to, from, next) { - TutorOverview.getTutors() - TutorOverview.getActiveAssignments() - next() - } -} -</script> - -<style scoped> - -</style> diff --git a/grady/frontend/src/pages/student/StudentLayout.vue b/grady/frontend/src/pages/student/StudentLayout.vue deleted file mode 100644 index b11687b5..00000000 --- a/grady/frontend/src/pages/student/StudentLayout.vue +++ /dev/null @@ -1,95 +0,0 @@ -<template> - <base-layout> - <template #sidebar-content> - <v-list dense> - <v-list-item - v-for="(item, i) in generalNavItems" - :key="i" - exact - :to="item.route" - > - <v-list-item-action> - <v-icon>{{ item.icon }}</v-icon> - </v-list-item-action> - <v-list-item-content> - <v-list-item-title> - {{ item.name }} - </v-list-item-title> - </v-list-item-content> - </v-list-item> - - <v-divider /> - - <exam-information - v-if="!mini" - :exam="exam" - class="elevation-1 exam-info ma-1" - /> - <v-list-item - v-for="item in submissionNavItems" - :key="item.route" - exact - :to="item.route" - > - <v-list-item-action> - <v-icon v-if="!visited[item.id]"> - assignment - </v-icon> - <v-icon v-else> - check - </v-icon> - </v-list-item-action> - <v-list-item-content> - <v-list-item-title> - {{ item.name }} - </v-list-item-title> - </v-list-item-content> - </v-list-item> - </v-list> - </template> - </base-layout> -</template> - -<script> -import { UI } from '@/store/modules/ui' -import BaseLayout from '@/components/BaseLayout' -import ExamInformation from '@/components/student/ExamInformation' -import { StudentPage } from '@/store/modules/student-page' -export default { - name: 'StudentLayout', - components: { BaseLayout, ExamInformation }, - data () { - return { - generalNavItems: [ - { - name: 'Overview', - icon: 'home', - route: '/home' - } - ] - } - }, - computed: { - submissions () { return StudentPage.state.submissionsForList }, - exam () { return StudentPage.state.exam }, - visited () { return StudentPage.state.visited }, - moduleReference () { return this.exam ? this.exam.moduleReference : 'No exam information' }, - - mini () { return UI.state.sideBarCollapsed }, - - submissionNavItems () { - return this.submissions.map((sub, index) => { - return { - name: sub.type.name, - id: sub.type.pk, - route: `/submission/${sub.type.pk}` - } - }) - } - } -} -</script> - -<style scoped> - -</style> diff --git a/grady/frontend/src/pages/student/StudentPage.vue b/grady/frontend/src/pages/student/StudentPage.vue deleted file mode 100644 index a9b289a1..00000000 --- a/grady/frontend/src/pages/student/StudentPage.vue +++ /dev/null @@ -1,47 +0,0 @@ -<template> - <v-container fluid> - <v-row - class="center" - justify - > - <template v-if="loaded"> - <v-col - class="mt-5" - md="10" - offset="1" - > - <h2>Your submissions:</h2> - <submission-list :submissions="submissions" /> - </v-col> - </template> - </v-row> - </v-container> -</template> - -<script> -import SubmissionList from '@/components/student/SubmissionList.vue' -import { StudentPage } from '@/store/modules/student-page' -import { FeedbackLabels } from '@/store/modules/feedback-labels' - -export default { - name: 'StudentPage', - components: { - SubmissionList - }, - computed: { - submissions () { return StudentPage.state.submissionsForList }, - loaded () { return StudentPage.state.loaded } - }, - created: function () { - if (!this.loaded) { - StudentPage.getStudentData().then(() => { - FeedbackLabels.getLabels() - StudentPage.getStudentSubmissions() - }) - } - } -} -</script> - -<style scoped> -</style> diff --git a/grady/frontend/src/pages/student/StudentSubmissionPage.vue b/grady/frontend/src/pages/student/StudentSubmissionPage.vue deleted file mode 100644 index fb800b4c..00000000 --- a/grady/frontend/src/pages/student/StudentSubmissionPage.vue +++ /dev/null @@ -1,195 +0,0 @@ -<template> - <v-container> - <v-row v-if="!feedback"> - <v-col> - <v-alert type="info"> - This submission hasn't been corrected due to this being a pass only exam. - </v-alert> - </v-col> - </v-row> - <v-row v-if="feedback && !feedback.isFinal"> - <v-col> - <v-alert type="info"> - This feedback is not final! Changes will likely occur! - </v-alert> - </v-col> - </v-row> - <v-row> - <v-col :md="solutionHidden ? 12 : 6"> - <base-annotated-submission> - <template #header> - <annotated-submission-top-toolbar - v-if="feedback" - v-model="mathIsRendered" - :score="feedback.score" - :notebook-available="notebookAvailable" - :submission="submission" - :submission-type="submissionType" - :feedback="feedback" - :is-markdown="isMarkdown" - /> - </template> - <template #table-content> - <tr - v-for="(code, lineNo) in submissionText" - :key="lineNo" - > - <math-renderer :enabled="mathIsRendered"> - <submission-line - :code="code" - :line-no="lineNo" - > - <template v-if="feedback"> - <template v-for="(comment, index) in feedback.feedbackLines[lineNo]"> - <feedback-comment - v-if="showFeedback" - :key="comment.pk + index" - v-bind="comment" - :line-no="lineNo" - :show-visibility-icon="false" - :corrector-view="false" - /> - </template> - </template> - </submission-line> - </math-renderer> - </tr> - </template> - </base-annotated-submission> - <v-card> - <v-card-title>Labels:</v-card-title> - <v-card-text> - <v-row - v-for="label in mappedLabels" - :key="'global' + label.pk" - align="center" - > - <v-col sm="6"> - <feedback-label - v-bind="label" - /> - </v-col> - <v-col sm="6"> - <span><b>Description: </b>{{ label.description }}</span> - </v-col> - </v-row> - </v-card-text> - </v-card> - <submission-tests - :tests="tests" - :expand="true" - class="mt-3" - /> - </v-col> - <v-col - class="pl-3" - lg="6" - md="12" - > - <submission-type - v-bind="submissionType" - /> - </v-col> - </v-row> - </v-container> -</template> - -<script> -import { mapState, mapGetters } from 'vuex' -import AnnotatedSubmission from '@/components/submission_notes/SubmissionCorrection' -import SubmissionType from '@/components/submission_type/SubmissionType' -import BaseAnnotatedSubmission from '@/components/submission_notes/base/BaseAnnotatedSubmission' -import AnnotatedSubmissionTopToolbar from '@/components/submission_notes/toolbars/AnnotatedSubmissionTopToolbar' -import SubmissionLine from '@/components/submission_notes/base/SubmissionLine' -import FeedbackComment from '@/components/submission_notes/base/FeedbackComment' -import { StudentPage } from '@/store/modules/student-page' -import { SubmissionNotes } from '@/store/modules/submission-notes' -import SubmissionTests from '@/components/SubmissionTests' -import { FeedbackLabels } from '@/store/modules/feedback-labels' -import FeedbackLabel from '@/components/feedback_labels/FeedbackLabel.vue' -import { fetchNotebookSubmissionAsHtml } from '@/api.ts' -import store from '@/store/store' -import { SubmissionType as SubType } from '@/models' -import { UI } from '@/store/modules/ui' -import MathRenderer from '@/components/MathRenderer.vue' - -export default { - name: 'StudentSubmissionPage', - components: { - SubmissionTests, - FeedbackComment, - SubmissionLine, - BaseAnnotatedSubmission, - AnnotatedSubmissionTopToolbar, - FeedbackLabel, - SubmissionType, - MathRenderer }, - data () { - return { - originalSubmissionDialog: false, - originalSubmission: '', - mathIsRendered: false, - } - }, - computed: { - id: function () { - return this.$route.params.id - }, - isMarkdown () { - const typePk = SubmissionNotes.state.submission.type - const type = store.state.submissionTypes[typePk] - return type && type.programmingLanguage === SubType.ProgrammingLanguageEnum.Markdown - }, - submissionText () { return SubmissionNotes.submission }, - tests () { return SubmissionNotes.state.submission.tests }, - showFeedback: function (state) { return SubmissionNotes.state.ui.showFeedback }, - submission () { return StudentPage.state.submissionData[this.id] }, - submissionType () { return StudentPage.state.submissionData[this.id].type }, - feedback () { return StudentPage.state.submissionData[this.$route.params.id].feedback }, - mappedLabels () { - if (!this.feedback) { - return [] - } - return this.feedback.labels.map(entry => { - return FeedbackLabels.state.labels.find(label => { - return label.pk === entry - }) - }) - }, - notebookAvailable () { - return this.submission.sourceCodeAvailable - }, - solutionHidden () { - return UI.state.showSubmissionType === false - } - }, - mounted () { - this.onRouteMountOrUpdate(this.id) - }, - methods: { - onRouteMountOrUpdate (routeId) { - StudentPage.SET_VISITED({ index: routeId, visited: true }) - let submission = {...StudentPage.state.submissionData[routeId]} - submission.type = submission.type.pk - SubmissionNotes.SET_SUBMISSION(submission) - this.mathIsRendered = true - }, - }, - beforeRouteUpdate (to, from, next) { - this.onRouteMountOrUpdate(to.params.id) - next() - } -} -</script> - - -<style scoped> -.origNotebookFrame { - width: 100%; - height: 800px; -} - -.v-alert { - margin: 0; -} -</style> diff --git a/grady/frontend/src/pages/tutor/TutorLayout.vue b/grady/frontend/src/pages/tutor/TutorLayout.vue deleted file mode 100644 index fbfd73af..00000000 --- a/grady/frontend/src/pages/tutor/TutorLayout.vue +++ /dev/null @@ -1,37 +0,0 @@ -<template> - <tutor-reviewer-base-layout> - <template #above-subscriptions> - <v-list - v-if="isInExerciseMode" - dense - > - <v-list-item :to="'/participant-overview'"> - <v-list-item-action> - <v-icon> people </v-icon> - </v-list-item-action> - <v-list-item-content> - <v-list-item-title> - {{ "Participants" }} - </v-list-item-title> - </v-list-item-content> - </v-list-item> - </v-list> - </template> - </tutor-reviewer-base-layout> -</template> - -<script> - -import TutorReviewerBaseLayout from '@/pages/base/TutorReviewerBaseLayout' -import { ConfigModule } from '@/store/modules/config' - -export default { - name: 'TutorLayout', - components: { - TutorReviewerBaseLayout - }, - computed: { - isInExerciseMode: () => { return ConfigModule.state.config.instanceSettings['exerciseMode'] } - } -} -</script> diff --git a/grady/frontend/src/pages/tutor/TutorStartPage.vue b/grady/frontend/src/pages/tutor/TutorStartPage.vue deleted file mode 100644 index 26c458b8..00000000 --- a/grady/frontend/src/pages/tutor/TutorStartPage.vue +++ /dev/null @@ -1,39 +0,0 @@ -<template> - <v-container> - <v-row> - <v-col - lg="6" - md="12" - > - <change-log /> - </v-col> - <v-col - lg="6" - md="12" - > - <correction-statistics /> - </v-col> - <v-col> - <SubmissionTypesOverview /> - </v-col> - </v-row> - </v-container> -</template> - -<script> -import ChangeLog from '@/components/ChangeLog' -import CorrectionStatistics from '@/components/CorrectionStatistics' -import SubmissionTypesOverview from '@/components/submission_type/SubmissionTypesOverview' - -export default { - name: 'TutorStartPage', - components: { - SubmissionTypesOverview, - CorrectionStatistics, - ChangeLog } -} -</script> - -<style scoped> - -</style> diff --git a/grady/frontend/src/router/index.ts b/grady/frontend/src/router/index.ts deleted file mode 100644 index df44c88c..00000000 --- a/grady/frontend/src/router/index.ts +++ /dev/null @@ -1,191 +0,0 @@ -import Vue from 'vue' -import Router, { RawLocation, Route, NavigationGuard } from 'vue-router' -import Login from '@/pages/Login.vue' -import ExamSelection from '@/pages/ExamSelectionPage.vue' -import StudentSubmissionPage from '@/pages/student/StudentSubmissionPage.vue' -import StudentOverviewPage from '@/pages/reviewer/StudentOverviewPage.vue' -import TutorOverviewPage from '@/pages/reviewer/TutorOverviewPage.vue' -import SubscriptionWorkPage from '@/pages/SubscriptionWorkPage.vue' -import SubscriptionEnded from '@/components/subscriptions/SubscriptionEnded.vue' -import PageNotFound from '@/pages/PageNotFound.vue' -import StartPageSelector from '@/pages/StartPageSelector.vue' -import Statistics from '@/pages/Statistics.vue' -import LayoutSelector from '@/pages/LayoutSelector.vue' -import StudentSubmissionSideView from '@/pages/StudentSubmissionSideView.vue' -import StudentListHelpCard from '@/components/student_list/StudentListHelpCard.vue' -import FeedbackHistoryPage from '@/pages/base/FeedbackHistoryPage.vue' -import FeedbackTable from '@/components/feedback_list/FeedbackTable.vue' -import FeedbackListHelpCard from '@/components/feedback_list/FeedbackListHelpCard.vue' -import VueInstance from '@/main' -import { Authentication } from '@/store/modules/authentication' -import { ConfigModule } from '@/store/modules/config' - -Vue.use(Router) - -type rerouteFunc = (to?: RawLocation | false | ((vm: Vue) => any) | void) => void - -function denyAccess (next: rerouteFunc, redirect: Route) { - next(redirect.path) - VueInstance.$notify({ - title: 'Access denied', - text: 'You don\'t have permission to view this.', - type: 'error' - }) -} - -let tutorOrReviewerOnly: NavigationGuard = function (to, from, next) { - if (Authentication.isTutorOrReviewer) { - next() - } else { - denyAccess(next, from) - } -} - -let reviewerOnly: NavigationGuard = function (to, from, next) { - if (Authentication.isReviewer) { - next() - } else { - denyAccess(next, from) - } -} - -const reviewerOrTutorInExerciseMode: NavigationGuard = function (to, from, next) { - if (Authentication.isReviewer) { - next() - } else if (Authentication.isTutor && ConfigModule.state.config.instanceSettings.exerciseMode) { - next() - } else { - denyAccess(next, from) - } -} - -let studentOnly: NavigationGuard = function (to, from, next) { - if (Authentication.isStudent) { - next() - } else { - next(false) - } -} - -let checkLoggedIn: NavigationGuard = function (to, from, next) { - if (Authentication.isLoggedIn) { - next() - } else { - next('/login/') - } -} - -const router = new Router({ - routes: [ - { - path: '/login/', - name: 'login', - component: Login - }, - { - path: '/exam_selection/', - name: 'exam-selection', - beforeEnter: checkLoggedIn, - component: ExamSelection - }, - { - path: '', - redirect: 'home', - beforeEnter: checkLoggedIn, - component: LayoutSelector, - children: [ - { - path: 'home', - name: 'home', - component: StartPageSelector - }, - { - path: 'correction/:sub_type/:stage/:group?', - name: 'correction', - beforeEnter: tutorOrReviewerOnly, - component: SubscriptionWorkPage - }, - { - path: 'correction/ended', - name: 'correction-ended', - component: SubscriptionEnded - }, - { - path: 'statistics', - name: 'statistics', - component: Statistics - }, - { - path: 'feedback', - beforeEnter: tutorOrReviewerOnly, - component: FeedbackHistoryPage, - children: [ - { - path: '', - name: 'feedback', - components: { - left: FeedbackTable, - right: FeedbackListHelpCard - } - }, - { - path: ':submissionPk', - components: { - left: FeedbackTable, - right: StudentSubmissionSideView - }, - meta: { - submissionSideView: true - } - }, - { - path: ':id/detail', - components: { - left: FeedbackTable, - right: PageNotFound - } - } - ] - }, - { - path: 'participant-overview', - beforeEnter: reviewerOrTutorInExerciseMode, - component: StudentOverviewPage, - children: [ - { - path: '', - name: 'participant-overview', - component: StudentListHelpCard - }, - { - path: 'participant/:studentPk/submission/:submissionPk', - name: 'submission-side-view', - component: StudentSubmissionSideView, - meta: { - submissionSideView: true - } - } - ] - }, - { - path: 'tutor-overview', - name: 'tutor-overview', - beforeEnter: reviewerOnly, - component: TutorOverviewPage - }, - { - path: 'submission/:id', - beforeEnter: studentOnly, - component: StudentSubmissionPage - } - ] - }, - { - path: '*', - name: 'page-not-found', - component: PageNotFound - } - ] -}) - -export default router diff --git a/grady/frontend/src/shims-tsx.d.ts b/grady/frontend/src/shims-tsx.d.ts deleted file mode 100644 index cbc02136..00000000 --- a/grady/frontend/src/shims-tsx.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import Vue, { VNode } from 'vue' - -declare global { - namespace JSX { - // tslint:disable no-empty-interface - interface Element extends VNode {} - // tslint:disable no-empty-interface - interface ElementClass extends Vue {} - interface IntrinsicElements { - [elem: string]: any - } - } - interface Window { MathJax: any; } -} diff --git a/grady/frontend/src/shims-vue.d.ts b/grady/frontend/src/shims-vue.d.ts deleted file mode 100644 index d9f24faa..00000000 --- a/grady/frontend/src/shims-vue.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare module '*.vue' { - import Vue from 'vue' - export default Vue -} diff --git a/grady/frontend/src/store/actions.ts b/grady/frontend/src/store/actions.ts deleted file mode 100644 index 68297e51..00000000 --- a/grady/frontend/src/store/actions.ts +++ /dev/null @@ -1,103 +0,0 @@ -import { ActionContext } from 'vuex' -import { BareActionContext, getStoreBuilder } from 'vuex-typex' - -import { mutations as mut } from './mutations' -import { Authentication } from '@/store/modules/authentication' -import { SubmissionNotes } from '@/store/modules/submission-notes' -import * as api from '@/api' -import router from '@/router/index' -import { RootState } from '@/store/store' -import { FeedbackTable } from '@/store/modules/feedback_list/feedback-table' -import { Assignments } from '@/store/modules/assignments' -import { TutorOverview } from './modules/tutor-overview' -import { StudentPage } from './modules/student-page' -import { ConfigModule } from './modules/config' - -async function getExamTypes (context: BareActionContext<RootState, RootState>) { - const examTypes = await api.fetchExamTypes() - mut.SET_EXAM_TYPES(examTypes) -} -async function updateSubmissionTypes (){ - const submissionTypes = await api.fetchSubmissionTypes() - submissionTypes.forEach(type => { - mut.UPDATE_SUBMISSION_TYPE(type) - }) -} - -async function updateSubmissionType ( - context: BareActionContext<RootState, RootState>, - pk: string -) { - const submissionType = await api.fetchSubmissionType(pk) - mut.UPDATE_SUBMISSION_TYPE(submissionType) -} - -async function getStudents ( - context: BareActionContext<RootState, RootState>, - opt: { studentPks: Array<string>} = { - studentPks: [] - } -) { - if (opt.studentPks.length === 0) { - const students = await api.fetchAllStudents() - mut.SET_STUDENTS(students) - return students - } else { - const students = await Promise.all( - opt.studentPks.map((pk: string) => - api.fetchStudent({ pk }) - ) - ) - students.forEach(student => mut.SET_STUDENT(student)) - return students - } -} -async function getSubmissionFeedbackTest ( - context: BareActionContext<RootState, RootState>, - submissionPkObj: { pk: string } -) { - const submission = await api.fetchSubmissionFeedbackTests(submissionPkObj) - mut.SET_SUBMISSION(submission) -} -async function getStatistics () { - const statistics = await api.fetchStatistics(ConfigModule.state.config.examId) - mut.SET_STATISTICS(statistics) -} - -function resetState ({ message }: {message: string}) { - FeedbackTable.RESET_STATE() - Assignments.RESET_STATE() - SubmissionNotes.RESET_STATE() - StudentPage.RESET_STATE() - Authentication.RESET_STATE() - Authentication.SET_MESSAGE(message) - TutorOverview.RESET_STATE() - mut.RESET_STATE() -} - -function logout ( - context: BareActionContext<RootState, RootState>, - message = '' -) { - if (Authentication.isStudent && !ConfigModule.state.config.instanceSettings.exerciseMode) { - Authentication.deactivateUserAccount() - } - if (Authentication.isTutorOrReviewer) { - Assignments.cleanAssignments() - } - router.push({ name: 'login' }, () => { - resetState({ message }) - }) -} - -const mb = getStoreBuilder<RootState>() - -export const actions = { - updateSubmissionTypes: mb.dispatch(updateSubmissionTypes), - updateSubmissionType: mb.dispatch(updateSubmissionType), - getExamTypes: mb.dispatch(getExamTypes), - getStudents: mb.dispatch(getStudents), - getSubmissionFeedbackTest: mb.dispatch(getSubmissionFeedbackTest), - getStatistics: mb.dispatch(getStatistics), - logout: mb.dispatch(logout) -} diff --git a/grady/frontend/src/store/getters.ts b/grady/frontend/src/store/getters.ts deleted file mode 100644 index 2ea338f6..00000000 --- a/grady/frontend/src/store/getters.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { RootState } from '@/store/store' -import { getStoreBuilder } from 'vuex-typex' - -const mb = getStoreBuilder<RootState>() - -const stateGetter = mb.state() - -const correctedGetter = mb.read(function corrected (state) { - const progresses = state.statistics.submissionTypeProgress - return progresses.length > 0 && progresses.every(progress => { - return progress.feedbackFinal === progress.submissionCount - }) -}) -const submissionGetter = mb.read(function submission (state) { - return (pk: string) => { - return state.submissions[pk] - } -}) -const submissionTypeGetter = mb.read(function submissionType (state) { - return (pk: string) => { - return state.submissionTypes[pk] - } -}) - -export const getters = { - get state () { return stateGetter() }, - get corrected () { return correctedGetter() }, - get submission () { return submissionGetter() }, - get submissionType () { return submissionTypeGetter() } -} diff --git a/grady/frontend/src/store/grady_speak.ts b/grady/frontend/src/store/grady_speak.ts deleted file mode 100644 index 6ae7abba..00000000 --- a/grady/frontend/src/store/grady_speak.ts +++ /dev/null @@ -1,25 +0,0 @@ -const gradySays = [ - 'Now let\'s see if we can improve this with a little water, sir.', - 'Won\'t keep you a moment, sir.', - 'Grady, sir. Delbert Grady.', - 'Yes, sir.', - 'That\'s right, sir.', - 'Why no, sir. I don\'t believe so.', - 'Ah ha, it\'s coming off now, sir.', - 'Why no, sir. I don\'t believe so.', - 'Yes, sir. I have a wife and two daughters, sir.', - 'Oh, they\'re somewhere around. I\'m not quite sure at the moment, sir.', - 'That\'s strange, sir. I don\'t have any recollection of that at all.', - 'I\'m sorry to differ with you, sir, but you are the caretaker.', - 'You have always been the caretaker, I should know, sir.', - 'I\'ve always been here.', - 'Indeed, he is, Mr. Torrance. A very willful boy. ', - 'A rather naughty boy, if I may be so bold, sir.', - 'Perhaps they need a good talking to, if you don\'t mind my saying so. Perhaps a bit more.', - 'My girls, sir, they didn\'t care for the Overlook at first.', - 'One of them actually stole a packet of matches and tried to burn it down.', - 'But I corrected them, sir.', - 'And when my wife tried to prevent me from doing my duty... I corrected her.' -] - -export default gradySays diff --git a/grady/frontend/src/store/modules/assignments.ts b/grady/frontend/src/store/modules/assignments.ts deleted file mode 100644 index d5039942..00000000 --- a/grady/frontend/src/store/modules/assignments.ts +++ /dev/null @@ -1,193 +0,0 @@ -import Vue from 'vue' -import * as api from '@/api' -import { cartesian, flatten, once } from '@/util/helpers' -import { Assignment, FeedbackStageEnum, CreateAssignment, AvailableSubmissionCounts, Group} from '@/models' -import { RootState } from '@/store/store' -import { Authentication } from '@/store/modules/authentication' -import { getStoreBuilder, BareActionContext } from 'vuex-typex' -import router from '@/router' -import { Route } from 'vue-router' - -export interface AssignmentsState { - currentAssignment?: Assignment - assignmentCreation: { - submissionType?: string - stage: FeedbackStageEnum - group?: Group - }, - submissionsLeft: AvailableSubmissionCounts, - groups: Group[], - loading: boolean -} - -function initialState (): AssignmentsState { - return { - currentAssignment: undefined, - loading: false, - assignmentCreation: { - stage: FeedbackStageEnum.Creation, - group: undefined, - submissionType: undefined - }, - submissionsLeft: {}, - groups: [] - } -} - -const mb = getStoreBuilder<RootState>().module('Assignments', initialState()) - -const stateGetter = mb.state() - - -const availableStagesGetter = mb.read(function availableStages (state, getters) { - let stages = [FeedbackStageEnum.Creation, FeedbackStageEnum.Validation] - if (Authentication.isReviewer) { - stages.push(FeedbackStageEnum.Review) - } - return stages -}) - -const availableStagesReadableGetter = mb.read(function availableStagesReadable (state, getters) { - let stages = ['initial', 'validate'] - if (Authentication.isReviewer) { - stages.push('review') - } - return stages -}) - -const availableSubmissionTypeQueryKeysGetter = mb.read(function availableSubmissionTypeQueryKeys (state, getters, rootState) { - return Object.values(rootState.submissionTypes).map((subType: any) => subType.pk) -}) - -const availableExamTypeQueryKeysGetter = mb.read(function availableExamTypeQueryKeys (state, getters, rootState) { - return Object.values(rootState.examTypes).map((examType: any) => examType.pk) -}) - - -function SET_CURRENT_ASSIGNMENT (state: AssignmentsState, assignment?: Assignment): void { - state.currentAssignment = assignment -} - -function SET_CREATE_SUBMISSION_TYPE (state: AssignmentsState, submissionType: string): void { - state.assignmentCreation.submissionType = submissionType -} - -function SET_CREATE_STAGE (state: AssignmentsState, stage: FeedbackStageEnum): void { - state.assignmentCreation.stage = stage -} - -function SET_CREATE_GROUP (state: AssignmentsState, group: Group): void { - state.assignmentCreation.group = group -} - -function SET_SUBMISSION_LEFT (state: AssignmentsState, availableSubmissions: AvailableSubmissionCounts): void { - state.submissionsLeft = availableSubmissions -} - -function SET_GROUPS (state: AssignmentsState, groups: Group[]): void { - state.groups = groups -} - -function UPDATE_CREATE_PARAMETERS_FROM_URL(state: AssignmentsState, route: Route) { - const submissionType = route.params['sub_type'] - const stage = route.params['stage'] as FeedbackStageEnum - const group_par = route.params['group'] - - state.assignmentCreation.submissionType = submissionType - state.assignmentCreation.stage = stage - const group = state.groups.find((group) => group.pk === group_par) - if (group === undefined && state.groups.length > 0) { - throw new Error(`Group ${group_par} appeared in parameter but not available in ${state.groups}`) - } - state.assignmentCreation.group = group -} - -function RESET_STATE (state: AssignmentsState): void { - Object.assign(state, initialState()) -} - -async function createNextAssignment({ state }: BareActionContext<AssignmentsState, RootState>) { - const createAssignment = state.assignmentCreation - if (createAssignment.submissionType === undefined ) { - throw new Error('SET_CREATE_SUBMISSION_TYPE needs to be called before createNextAssignment') - } - - const data = { - stage: createAssignment.stage, - submissionType: createAssignment.submissionType!, - group: createAssignment.group !== undefined ? createAssignment.group.pk : undefined - } - - Assignments.SET_CURRENT_ASSIGNMENT(await api.createAssignment(data)) -} - -async function cleanAssignments -({ state }: BareActionContext<AssignmentsState, RootState>) { - await api.releaseUndoneAssignments() -} - -async function changeAssignment -({ state }: BareActionContext<AssignmentsState, RootState>, route: Route) { - Assignments.UPDATE_CREATE_PARAMETERS_FROM_URL(route) - if (state.currentAssignment) { - await Assignments.deleteCurrentAssignment() - } - await Assignments.createNextAssignment() -} - -async function skipAssignment ({ state }: BareActionContext<AssignmentsState, RootState>) { - if (!state.currentAssignment) { - throw new Error('skipAssignment can only be called with active assignment') - } - - const oldAssignment = state.currentAssignment - await Assignments.createNextAssignment() - await api.deleteAssignment({assignment: oldAssignment }) - -} - -async function deleteCurrentAssignment ({ state }: BareActionContext<AssignmentsState - , RootState>) { - if (!state.currentAssignment) { - throw new Error('No active assignment to delete') - } - await api.deleteAssignment({assignment: state.currentAssignment}) - Assignments.SET_CURRENT_ASSIGNMENT(undefined) -} - -async function getAvailableSubmissionCounts({ state }: BareActionContext<AssignmentsState, RootState>) { - const counts = await api.fetchAvailableSubmissionCounts(state.assignmentCreation.group) - Assignments.SET_SUBMISSION_LEFT(counts) -} - -async function getGroups() { - const groups = await api.fetchGroups() - Assignments.SET_GROUPS(groups) -} - - -export const Assignments = { - get state () { return stateGetter() }, - get availableStages () { return availableStagesGetter() }, - get availableStagesReadable () { return availableStagesReadableGetter() }, - get availableSubmissionTypeQueryKeys () { return availableSubmissionTypeQueryKeysGetter() }, - get availableExamTypeQueryKeys () { return availableExamTypeQueryKeysGetter() }, - - SET_CURRENT_ASSIGNMENT: mb.commit(SET_CURRENT_ASSIGNMENT), - SET_CREATE_SUBMISSION_TYPE: mb.commit(SET_CREATE_SUBMISSION_TYPE), - SET_CREATE_STAGE: mb.commit(SET_CREATE_STAGE), - SET_CREATE_GROUP: mb.commit(SET_CREATE_GROUP), - SET_SUBMISSION_LEFT: mb.commit(SET_SUBMISSION_LEFT), - SET_GROUPS: mb.commit(SET_GROUPS), - UPDATE_CREATE_PARAMETERS_FROM_URL: mb.commit(UPDATE_CREATE_PARAMETERS_FROM_URL), - RESET_STATE: mb.commit(RESET_STATE), - - - cleanAssignments: mb.dispatch(cleanAssignments), - changeAssignment: mb.dispatch(changeAssignment), - createNextAssignment: mb.dispatch(createNextAssignment), - skipAssignment: mb.dispatch(skipAssignment), - deleteCurrentAssignment: mb.dispatch(deleteCurrentAssignment), - getAvailableSubmissionCounts: mb.dispatch(getAvailableSubmissionCounts), - getGroups: mb.dispatch(getGroups) -} diff --git a/grady/frontend/src/store/modules/authentication.ts b/grady/frontend/src/store/modules/authentication.ts deleted file mode 100644 index 9444cdb2..00000000 --- a/grady/frontend/src/store/modules/authentication.ts +++ /dev/null @@ -1,143 +0,0 @@ -import * as api from '@/api' -import gradySays from '../grady_speak' -import { BareActionContext, getStoreBuilder } from 'vuex-typex' -import { UserAccount } from '@/models' -import { RootState } from '@/store/store' - -export interface Credentials { - username: string, - password: string -} - -export interface AuthState { - token: string, - lastTokenRefreshTry: number, - refreshingToken: boolean, - message: string, - user: UserAccount -} -function initialState (): AuthState { - return { - token: '', - lastTokenRefreshTry: Date.now(), - refreshingToken: false, - message: '', - user: { - pk: '', - username: '', - isAdmin: false, - exerciseGroups: [] - } - } -} - -const mb = getStoreBuilder<RootState>().module('Authentication', initialState()) - -const stateGetter = mb.state() - -const gradySpeakGetter = mb.read(function gradySpeak () { - return gradySays[Math.floor(Math.random() * gradySays.length)] -}) -const isStudentGetter = mb.read(function isStudent (state: AuthState) { - return state.user.role === UserAccount.RoleEnum.Student -}) -const isTutorGetter = mb.read(function isTutor (state: AuthState) { - return state.user.role === UserAccount.RoleEnum.Tutor -}) -const isReviewerGetter = mb.read(function isReviewer (state: AuthState) { - return state.user.role === UserAccount.RoleEnum.Reviewer -}) -const isTutorOrReviewerGetter = mb.read(function isTutorOrReviewer (state: AuthState, getters) { - return getters.isTutor || getters.isReviewer -}) -const isLoggedInGetter = mb.read(function isLoggedIn (state: AuthState) { - return !!state.token -}) - -function SET_MESSAGE (state: AuthState, message: string) { - state.message = message -} -function SET_JWT_TOKEN (state: AuthState, token: string) { - api.default.defaults.headers['Authorization'] = `JWT ${token}` - state.token = token -} -function SET_USER (state: AuthState, user: UserAccount) { - state.user = user -} -function SET_REFRESHING_TOKEN (state: AuthState, refreshing: boolean) { - state.refreshingToken = refreshing -} -function SET_LAST_TOKEN_REFRESH_TRY (state: AuthState) { - state.lastTokenRefreshTry = Date.now() -} -function RESET_STATE (state: AuthState) { - Object.assign(state, initialState()) -} - -async function getJWT (context: BareActionContext<AuthState, RootState>, credentials: Credentials) { - try { - const token = await api.fetchJWT(credentials) - Authentication.SET_JWT_TOKEN(token.token) - } catch (error: any) { - let errorMsg - if (!error.response) { - errorMsg = 'Cannot reach server.' - } else if (error.response.status === 400) { - errorMsg = 'Unable to log in with provided credentials.' - } else if (error.response.status === 429) { - errorMsg = error.response.data.detail - } - Authentication.SET_MESSAGE(errorMsg) - throw errorMsg - } finally { - Authentication.SET_LAST_TOKEN_REFRESH_TRY() - } -} -async function refreshJWT ({ state }: BareActionContext<AuthState, RootState>) { - Authentication.SET_REFRESHING_TOKEN(true) - try { - const token = await api.refreshJWT(state.token) - Authentication.SET_JWT_TOKEN(token.token) - } finally { - Authentication.SET_REFRESHING_TOKEN(false) - Authentication.SET_LAST_TOKEN_REFRESH_TRY() - } -} -async function getUser () { - try { - const user = await api.getOwnUser() - Authentication.SET_USER(user) - } catch (err) { - Authentication.SET_MESSAGE('Unable to fetch user.') - } -} - -/** - * Deactivates the current user's account. - * They will not be able to login again until activated again. - */ -async function deactivateUserAccount ({ state }: BareActionContext<AuthState, RootState>) { - api.changeActiveForUser(state.user.pk, false) -} - -export const Authentication = { - get state () { return stateGetter() }, - get gradySpeak () { return gradySpeakGetter() }, - get isStudent () { return isStudentGetter() }, - get isTutor () { return isTutorGetter() }, - get isReviewer () { return isReviewerGetter() }, - get isTutorOrReviewer () { return isTutorOrReviewerGetter() }, - get isLoggedIn () { return isLoggedInGetter() }, - - SET_MESSAGE: mb.commit(SET_MESSAGE), - SET_JWT_TOKEN: mb.commit(SET_JWT_TOKEN), - SET_USER: mb.commit(SET_USER), - SET_REFRESHING_TOKEN: mb.commit(SET_REFRESHING_TOKEN), - SET_LAST_TOKEN_REFRESH_TRY: mb.commit(SET_LAST_TOKEN_REFRESH_TRY), - RESET_STATE: mb.commit(RESET_STATE), - - getJWT: mb.dispatch(getJWT), - refreshJWT: mb.dispatch(refreshJWT), - getUser: mb.dispatch(getUser), - deactivateUserAccount: mb.dispatch(deactivateUserAccount), -} diff --git a/grady/frontend/src/store/modules/config.ts b/grady/frontend/src/store/modules/config.ts deleted file mode 100644 index 8f29aaa1..00000000 --- a/grady/frontend/src/store/modules/config.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { getStoreBuilder } from 'vuex-typex' -import { RootState } from '@/store/store' -import { Config } from '@/models' -import * as api from '@/api' - -export interface ConfigState { - config: Config -} - -function initialState (): ConfigState { - return { - config: { - timeDelta: 0, - currentExam: '', - examId: '', - version: '', - instanceSettings: { - exerciseMode: false, - singleCorrection: false, - stopOnPass: false, - showSolutionToStudents: false, - } - } - } -} - -const mb = getStoreBuilder<RootState>().module('ConfigModule', initialState()) - -const stateGetter = mb.state() - -function SET_CONFIG (state: ConfigState, config: Config) { - let exam_tmp = state.config.currentExam - let examId_tmp = state.config.examId - state.config = config - state.config.currentExam = exam_tmp - state.config.examId = examId_tmp -} - -function SET_CURRENT_EXAM (state: ConfigState, exam: string) { - state.config.currentExam = exam -} - -function SET_CURRENT_EXAM_ID (state: ConfigState, pk: string) { - state.config.examId = pk -} - -async function getConfig() { - const config = await api.fetchConfig() - ConfigModule.SET_CONFIG(config) -} - - -export const ConfigModule = { - get state () { return stateGetter() }, - - SET_CONFIG: mb.commit(SET_CONFIG), - SET_CURRENT_EXAM: mb.commit(SET_CURRENT_EXAM), - SET_CURRENT_EXAM_ID: mb.commit(SET_CURRENT_EXAM_ID), - - getConfig: mb.dispatch(getConfig) -} diff --git a/grady/frontend/src/store/modules/feedback-labels.ts b/grady/frontend/src/store/modules/feedback-labels.ts deleted file mode 100644 index ebf22ed8..00000000 --- a/grady/frontend/src/store/modules/feedback-labels.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { FeedbackLabel } from '@/models' -import { getStoreBuilder } from 'vuex-typex' -import { RootState } from '../store' -import * as api from '@/api' -import Vue from 'vue' - -export interface FeedbackLabelsState { - labels: FeedbackLabel[] -} - -function initialState(): FeedbackLabelsState { - return { - labels: [] - } -} - -const mb = getStoreBuilder<RootState>().module('FeedbackLabels', initialState()) - -const stateGetter = mb.state() - -const availableLabelsGetter = mb.read(function labels(state) { - return state.labels -}) - -function SET_LABELS(state: FeedbackLabelsState, labels: FeedbackLabel[]) { - state.labels = labels -} - -function ADD_LABEL(state: FeedbackLabelsState, label: FeedbackLabel) { - state.labels.push(label) -} - -function REMOVE_LABEL(state: FeedbackLabelsState, label: FeedbackLabel) { - state.labels = state.labels.filter((val) => { - return val.pk !== label.pk - }) -} - -function UPDATE_LABEL(state: FeedbackLabelsState, label: FeedbackLabel) { - REMOVE_LABEL(state, label) - ADD_LABEL(state, label) -} - -async function getLabels() { - const labels = await api.getLabels() - FeedbackLabels.SET_LABELS(labels) -} - -export const FeedbackLabels = { - get state() { return stateGetter() }, - get availableLabels() { return availableLabelsGetter() }, - - SET_LABELS: mb.commit(SET_LABELS), - ADD_LABEL: mb.commit(ADD_LABEL), - REMOVE_LABEL: mb.commit(REMOVE_LABEL), - UPDATE_LABEL: mb.commit(UPDATE_LABEL), - - getLabels: mb.dispatch(getLabels) -} - diff --git a/grady/frontend/src/store/modules/feedback_list/feedback-table.ts b/grady/frontend/src/store/modules/feedback_list/feedback-table.ts deleted file mode 100644 index 3c115886..00000000 --- a/grady/frontend/src/store/modules/feedback_list/feedback-table.ts +++ /dev/null @@ -1,108 +0,0 @@ -import { fetchAllFeedback, fetchAllAssignments } from '@/api' -import { objectifyArray } from '@/util/helpers' -import { Assignment, Feedback, FeedbackStageEnum, SubmissionType } from '@/models' -import { RootState } from '@/store/store' -import { getters } from '@/store/getters' -import { getStoreBuilder, BareActionContext } from 'vuex-typex' -import { Authentication } from '@/store/modules/authentication' - -export interface FeedbackHistoryItem extends Feedback { - history?: { - [key in FeedbackStageEnum]?: { - ofTutor: string - isDone: boolean - } - } - mark?: string // not the grade, but the color of the highlighting tool on feedbackHist page -} - -export interface FeedbackTableState { - feedbackHist: {[submissionPk: string]: FeedbackHistoryItem} -} - -function initialState (): FeedbackTableState { - return { - feedbackHist: {} - } -} - -const mb = getStoreBuilder<RootState>().module('FeedbackTable', initialState()) - -const stateGetter = mb.state() - -function SET_FEEDBACK_HISTORY (state: FeedbackTableState, val: Array<Feedback>) { - let feedbackList: FeedbackHistoryItem[] = val.map(feedback => { - return { - ...feedback, - mark: 'transparent', - } - }) - state.feedbackHist = objectifyArray(feedbackList, 'ofSubmission') -} -function ADD_ASSIGNMENTS_INFO (state: FeedbackTableState, assignments: Array<Assignment>) { - const doneAssignments = assignments.filter(assignment => assignment.isDone) - for (const assignment of doneAssignments) { - if (!assignment.submission || !assignment.stage) { - throw Error() - } - const feedback = state.feedbackHist[assignment.submission as string] - feedback.history = { - ...feedback.history, - [assignment.stage]: { - ofTutor: assignment.ofTutor, - isDone: assignment.isDone - } - } - } -} -function SET_FEEDBACK_OF_SUBMISSION_TYPE (state: FeedbackTableState, { feedback, type }: -{feedback: Feedback, type: SubmissionType}) { - if (!feedback.ofSubmission) { - throw new Error('Feedback must have ofSubmission present') - } - state.feedbackHist[feedback.ofSubmission].ofSubmissionType = type -} -function SET_MARK_COLOR (state: FeedbackTableState, {submissionPk, color}: -{submissionPk: string, color: string}) { - state.feedbackHist[submissionPk].mark=color -} -function RESET_STATE (state: FeedbackTableState) { Object.assign(state, initialState()) } - -function mapFeedbackHistExam ({ state }: BareActionContext<FeedbackTableState, RootState>) { - for (const feedback of Object.values(state.feedbackHist)) { - const type = getters.state.examTypes - } -} - -function mapFeedbackHistOfSubmissionType ({ state }: BareActionContext<FeedbackTableState, RootState>) { - for (const feedback of Object.values(state.feedbackHist)) { - const type = getters.submissionType((feedback as any).ofSubmissionType) - FeedbackTable.SET_FEEDBACK_OF_SUBMISSION_TYPE({ feedback, type }) - } -} -async function getFeedbackHistory () { - let data: [Promise<Feedback[]>, Promise<Assignment[]> | undefined] = - [fetchAllFeedback(), Authentication.isReviewer ? fetchAllAssignments() : undefined] - - Promise.all<Feedback[], Assignment[] | undefined>(data) - .then(([feedbacks, assignments]: [Feedback[], Assignment[]?]) => { - FeedbackTable.SET_FEEDBACK_HISTORY(feedbacks) - FeedbackTable.mapFeedbackHistOfSubmissionType() - if (assignments) { - FeedbackTable.ADD_ASSIGNMENTS_INFO(assignments) - } - }) -} - -export const FeedbackTable = { - get state () { return stateGetter() }, - - SET_FEEDBACK_HISTORY: mb.commit(SET_FEEDBACK_HISTORY), - ADD_ASSIGNMENTS_INFO: mb.commit(ADD_ASSIGNMENTS_INFO), - SET_FEEDBACK_OF_SUBMISSION_TYPE: mb.commit(SET_FEEDBACK_OF_SUBMISSION_TYPE), - SET_MARK_COLOR: mb.commit(SET_MARK_COLOR), - RESET_STATE: mb.commit(RESET_STATE), - - mapFeedbackHistOfSubmissionType: mb.dispatch(mapFeedbackHistOfSubmissionType), - getFeedbackHistory: mb.dispatch(getFeedbackHistory) -} diff --git a/grady/frontend/src/store/modules/student-page.ts b/grady/frontend/src/store/modules/student-page.ts deleted file mode 100644 index 03bf0490..00000000 --- a/grady/frontend/src/store/modules/student-page.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { fetchStudentSelfData, fetchStudentSubmissions } from '@/api' -import { Exam, Submission, SubmissionList } from '@/models' -import { RootState } from '@/store/store' -import { Module } from 'vuex' -import { getStoreBuilder } from 'vuex-typex' -import { mutations } from '../mutations' - -export interface StudentPageState { - studentName: string - exam?: Exam - submissionsForList: Array<SubmissionList> - submissionData: {[typePk: string]: Submission} - visited: {[typePk: string]: boolean} - loaded: boolean -} - -function initialState (): StudentPageState { - return { - studentName: '', - exam: undefined, - submissionsForList: [], - submissionData: {}, - visited: {}, - loaded: false - } -} - -const mb = getStoreBuilder<RootState>().module('SutdenPage', initialState()) - -const stateGetter = mb.state() - -function SET_STUDENT_NAME (state: StudentPageState, name: string) { - state.studentName = name -} -function SET_EXAM (state: StudentPageState, exam: Exam) { - state.exam = exam -} -function SET_SUBMISSIONS_FOR_LIST (state: StudentPageState, submissions: SubmissionList[]) { - state.submissionsForList = submissions -} -/** - * Reduces the array submissionData returned by the /api/student-submissions - * into an object where the keys are the SubmissionType id's and the values - * the former array elements. This is done to have direct access to the data - * via the SubmissionType id. - */ -function SET_FULL_SUBMISSION_DATA (state: StudentPageState, submissionData: Array<Submission>) { - state.submissionData = submissionData.reduce((acc: {[pk: string]: Submission}, cur) => { - acc[cur.type.pk] = cur - return acc - }, {}) -} -function SET_VISITED (state: StudentPageState, visited: {index: string, visited: boolean}) { - state.visited = { ...state.visited, [visited.index]: visited.visited } -} -function SET_LOADED (state: StudentPageState, loaded: boolean) { - state.loaded = loaded -} -function RESET_STATE (state: StudentPageState) { - Object.assign(state, initialState()) -} - -async function getStudentData () { - const studentData = await fetchStudentSelfData() - StudentPage.SET_STUDENT_NAME(studentData.name || '') - StudentPage.SET_EXAM(studentData.exam) - StudentPage.SET_SUBMISSIONS_FOR_LIST(studentData.submissions) - StudentPage.SET_LOADED(true) -} - -async function getStudentSubmissions () { - const submissions = await fetchStudentSubmissions() - StudentPage.SET_FULL_SUBMISSION_DATA(submissions) - for (const submission of submissions) { - mutations.UPDATE_SUBMISSION_TYPE(submission.type) - } -} - -export const StudentPage = { - get state () { return stateGetter() }, - - SET_STUDENT_NAME: mb.commit(SET_STUDENT_NAME), - SET_EXAM: mb.commit(SET_EXAM), - SET_SUBMISSIONS_FOR_LIST: mb.commit(SET_SUBMISSIONS_FOR_LIST), - SET_FULL_SUBMISSION_DATA: mb.commit(SET_FULL_SUBMISSION_DATA), - SET_VISITED: mb.commit(SET_VISITED), - SET_LOADED: mb.commit(SET_LOADED), - RESET_STATE: mb.commit(RESET_STATE), - - getStudentData: mb.dispatch(getStudentData), - getStudentSubmissions: mb.dispatch(getStudentSubmissions) -} diff --git a/grady/frontend/src/store/modules/submission-notes.ts b/grady/frontend/src/store/modules/submission-notes.ts deleted file mode 100644 index dfac0cc6..00000000 --- a/grady/frontend/src/store/modules/submission-notes.ts +++ /dev/null @@ -1,266 +0,0 @@ -import Vue from 'vue' -import * as hljs from 'highlight.js' -import * as api from '@/api' -import { Feedback, FeedbackComment, SubmissionNoType, CreateUpdateFeedback, SubmissionType } from '@/models' -import { RootState } from '@/store/store' -import { getStoreBuilder, BareActionContext } from 'vuex-typex' -import { syntaxPostProcess } from '@/util/helpers' -import { AxiosResponse } from 'axios' -import { Assignments } from './assignments' - -export const subNotesEventBus = new Vue() - -export interface SubmissionNotesState { - submission: SubmissionNoType - ui: { - showEditorOnLine: { [lineNo: number]: boolean } - selectedCommentOnLine: { [lineNo: number]: FeedbackComment } - showFeedback: boolean - }, - hasOrigFeedback: boolean - origFeedback: Feedback - updatedFeedback: CreateUpdateFeedback - commentsMarkedForDeletion: { [pk: string]: FeedbackComment } - changedLabels: boolean -} - -function initialState (): SubmissionNotesState { - return { - submission: { - text: '', - pk: '', - type: '', - tests: [], - sourceCodeAvailable: false - }, - ui: { - showEditorOnLine: {}, - selectedCommentOnLine: {}, - showFeedback: true - }, - hasOrigFeedback: false, - origFeedback: { - pk: 0, - ofSubmissionType: { - pk: '', - name: '', - examType: { - pk: '', - moduleReference: '', - totalScore: 0, - passScore: 0 - }, - description: '', - solutionComments: {} - }, - score: undefined, - isFinal: false, - feedbackLines: {}, - labels: [], - }, - updatedFeedback: { - pk: 0, - score: undefined, - feedbackLines: {}, - labels: [], - }, - commentsMarkedForDeletion: {}, - changedLabels: false - } -} - -const mb = getStoreBuilder<RootState>().module('SubmissionNotes', initialState()) - -const stateGetter = mb.state() - -const submissionTypeGetter = mb.read(function submissionType(state, getters, rootState) { - return rootState.submissionTypes[state.submission.type] -}) -// highlight the submission the reduce the string -// submission.text into an object where the keys are the -// line indexes starting at one and the values the corresponding submission line -// this makes iterating over the submission much more pleasant -const submissionGetter = mb.read(function submission(state, getters) { - const language = getters.submissionType - ? getters.submissionType.programmingLanguage - : 'c' - let highlighted = state.submission.text || '' - if (language !== SubmissionType.ProgrammingLanguageEnum.Markdown) { - highlighted = hljs.highlight(language, highlighted, true).value - } else if (language === SubmissionType.ProgrammingLanguageEnum.Markdown) { - highlighted = hljs.highlight('plaintext', highlighted, true).value - } - // const highlighted = state.submission.text || '' - const postProcessed = syntaxPostProcess(highlighted) - const splitted = postProcessed.split('\n').reduce((acc: { [k: number]: string }, cur, index) => { - acc[index + 1] = cur - return acc - }, {}) - return splitted -}) -const scoreGetter = mb.read(function score(state) { - return state.updatedFeedback.score !== undefined ? state.updatedFeedback.score : state.origFeedback.score -}) -const workInProgressGetter = mb.read(function workInProgress(state) { - const openEditor = Object.values(state.ui.showEditorOnLine).reduce((acc, curr) => acc || curr, false) - const feedbackWritten = Object.entries(state.updatedFeedback.feedbackLines || {}).length > 0 - return openEditor || feedbackWritten || state.changedLabels -}) -const isFeedbackCreationGetter = mb.read(function isFeedbackCreation(state) { - return !state.origFeedback['feedbackStageForUser'] || - state.origFeedback['feedbackStageForUser'] === 'feedback-creation' -}) - -/** - * Getter function to determine if the current stage is feedback review / conflict resolution. - */ -const isConflictResolution = mb.read(function isConflictResolution(state) { - return state.origFeedback['feedbackStageForUser'] && - state.origFeedback['feedbackStageForUser'] === 'feedback-review' -}) - -function SET_SUBMISSION(state: SubmissionNotesState, submission: SubmissionNoType) { - state.submission = submission - if (submission.feedback !== undefined) { - SET_ORIG_FEEDBACK(state, submission.feedback) - } -} -function SET_ORIG_FEEDBACK(state: SubmissionNotesState, feedback: Feedback) { - if (feedback) { - state.origFeedback = feedback - state.hasOrigFeedback = true - } -} -function SET_SHOW_FEEDBACK(state: SubmissionNotesState, val: boolean) { - state.ui.showFeedback = val -} -function UPDATE_FEEDBACK_LINE(state: SubmissionNotesState, feedback: { lineNo: number, comment: Partial<FeedbackComment> }) { - // explicit .toString() on lineNo is necessary because of Vue.set typings - if (state.updatedFeedback.feedbackLines) { - Vue.set(state.updatedFeedback.feedbackLines, feedback.lineNo.toString(), feedback.comment) - } -} -function SET_FEEDBACK_LABELS(state: SubmissionNotesState, labels: number[]) { - state.changedLabels = true - state.updatedFeedback.labels = labels -} -function ADD_FEEDBACK_LABEL(state: SubmissionNotesState, label: number) { - state.changedLabels = true - state.updatedFeedback.labels.push(label) -} -function REMOVE_FEEDBACK_LABEL(state: SubmissionNotesState, label: number) { - state.changedLabels = true - const tmp = state.updatedFeedback.labels.filter((val) => { - return val !== label - }) - state.updatedFeedback.labels = tmp -} -function UPDATE_FEEDBACK_SCORE(state: SubmissionNotesState, score: number) { - state.updatedFeedback.score = score -} -function DELETE_FEEDBACK_LINE(state: SubmissionNotesState, lineNo: number) { - if (state.updatedFeedback.feedbackLines) { - // Vue dosn't like objects that are indexed with numbers... - Vue.delete(state.updatedFeedback.feedbackLines, lineNo as unknown as string) - } -} -function TOGGLE_EDITOR_ON_LINE(state: SubmissionNotesState, { lineNo, comment }: { lineNo: number, comment: FeedbackComment }) { - Vue.set(state.ui.selectedCommentOnLine, lineNo as unknown as string, comment) - Vue.set(state.ui.showEditorOnLine, lineNo as unknown as string, !state.ui.showEditorOnLine[lineNo]) -} -function MARK_COMMENT_FOR_DELETION(state: SubmissionNotesState, comment: FeedbackComment) { - Vue.set(state.commentsMarkedForDeletion, comment.pk, comment) -} -function UN_MARK_COMMENT_FOR_DELETION(state: SubmissionNotesState, comment: FeedbackComment) { - Vue.delete(state.commentsMarkedForDeletion, comment.pk) -} -function RESET_MARKED_COMMENTS_FOR_DELETE(state: SubmissionNotesState) { - state.commentsMarkedForDeletion = {} -} -function RESET_UPDATED_FEEDBACK(state: SubmissionNotesState) { - state.updatedFeedback = initialState().updatedFeedback -} -function RESET_STATE(state: SubmissionNotesState) { - Object.assign(state, initialState()) -} - -async function deleteComments({ state }: BareActionContext<SubmissionNotesState, RootState>) { - return Promise.all( - Object.values(state.commentsMarkedForDeletion).map(comment => { - return api.deleteComment(comment) - }) - ) -} -async function submitFeedback( -{ state }: BareActionContext<SubmissionNotesState, RootState>, -{ isFinal = false}): -Promise<AxiosResponse<void>[]> { - - let feedback: Partial<CreateUpdateFeedback> = { - isFinal: isFinal, - ofSubmission: state.submission.pk, - ofSubmissionType: state.submission.type, - feedbackLines: {}, - labels: state.updatedFeedback.labels - } - - // omit labels for the request - if (!state.changedLabels) { - delete feedback.labels - } - - if (state.updatedFeedback.score !== undefined) { - feedback.score = state.updatedFeedback.score - } else { - feedback.score = state.origFeedback.score - } - - // set the comments for the feedback lines accordingly - for (const key of Object.keys(state.updatedFeedback.feedbackLines)) { - const numKey = Number(key) - - numKey && feedback.feedbackLines - && (feedback.feedbackLines[numKey] = state.updatedFeedback.feedbackLines[numKey]) - } - - const assignment = Assignments.state.currentAssignment - if (assignment) { - await api.submitFeedbackForAssignment({ feedback , assignment}) - } else if (state.hasOrigFeedback) { - feedback.pk = state.origFeedback.pk - await api.submitUpdatedFeedback({ feedback } as { feedback: CreateUpdateFeedback }) - } else { - await api.submitFeedback({feedback} as { feedback: CreateUpdateFeedback }) - } - // delete those comments that have been marked for deletion - return SubmissionNotes.deleteComments() -} - -export const SubmissionNotes = { - get state() { return stateGetter() }, - get submissionType() { return submissionTypeGetter() }, - get submission() { return submissionGetter() }, - get score() { return scoreGetter() }, - get workInProgress() { return workInProgressGetter() }, - get isFeedbackCreation() { return isFeedbackCreationGetter() }, - get isConflictResolution() { return isFeedbackCreationGetter() }, - - SET_SUBMISSION: mb.commit(SET_SUBMISSION), - SET_ORIG_FEEDBACK: mb.commit(SET_ORIG_FEEDBACK), - SET_SHOW_FEEDBACK: mb.commit(SET_SHOW_FEEDBACK), - SET_FEEDBACK_LABELS: mb.commit(SET_FEEDBACK_LABELS), - ADD_FEEDBACK_LABEL: mb.commit(ADD_FEEDBACK_LABEL), - REMOVE_FEEDBACK_LABEL: mb.commit(REMOVE_FEEDBACK_LABEL), - UPDATE_FEEDBACK_LINE: mb.commit(UPDATE_FEEDBACK_LINE), - UPDATE_FEEDBACK_SCORE: mb.commit(UPDATE_FEEDBACK_SCORE), - DELETE_FEEDBACK_LINE: mb.commit(DELETE_FEEDBACK_LINE), - TOGGLE_EDITOR_ON_LINE: mb.commit(TOGGLE_EDITOR_ON_LINE), - MARK_COMMENT_FOR_DELETION: mb.commit(MARK_COMMENT_FOR_DELETION), - UN_MARK_COMMENT_FOR_DELETION: mb.commit(UN_MARK_COMMENT_FOR_DELETION), - RESET_MARKED_COMMENTS_FOR_DELETE: mb.commit(RESET_MARKED_COMMENTS_FOR_DELETE), - RESET_UPDATED_FEEDBACK: mb.commit(RESET_UPDATED_FEEDBACK), - RESET_STATE: mb.commit(RESET_STATE), - - deleteComments: mb.dispatch(deleteComments), - submitFeedback: mb.dispatch(submitFeedback) -} diff --git a/grady/frontend/src/store/modules/tutor-overview.ts b/grady/frontend/src/store/modules/tutor-overview.ts deleted file mode 100644 index 6e562e49..00000000 --- a/grady/frontend/src/store/modules/tutor-overview.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { fetchAllTutors, fetchActiveAssignments, deleteAssignment } from '@/api' -import { Tutor, Assignment } from '@/models' -import { RootState } from '../store' -import { getStoreBuilder, BareActionContext } from 'vuex-typex' -import { objectifyArray } from '@/util/helpers' - -export interface TutorOverviewState { - tutors: Tutor[], - activeAssignments: {[ownerName: string]: Assignment[]} -} - -function initialState (): TutorOverviewState { - return { - tutors: [], - activeAssignments: {} - } -} - -type Context = BareActionContext<TutorOverviewState, RootState> - -const mb = getStoreBuilder<RootState>().module('TutorOverview', initialState()) - -const stateGetter = mb.state() - -function SET_TUTORS (state: TutorOverviewState, tutors: Tutor[]) { - state.tutors = tutors -} - -function SET_ASSIGNMENTS (state: TutorOverviewState, assignments: Assignment[]) { - state.activeAssignments = assignments.reduce((acc: {[ownerName: string]: Assignment[]}, curr) => { - if (!curr.owner) { - throw new Error('Assignments must have owner information') - } - acc[curr.owner] ? acc[curr.owner].push(curr) : acc[curr.owner] = [curr] - return acc - }, {}) -} - -function RESET_STATE (state: TutorOverviewState) { - Object.assign(state, initialState()) -} - -async function getTutors () { - const tutors = await fetchAllTutors() - TutorOverview.SET_TUTORS(tutors) -} - -async function getActiveAssignments () { - const assignments = await fetchActiveAssignments() - TutorOverview.SET_ASSIGNMENTS(assignments) -} - -async function deleteActiveAssignmentsOfTutor ({ state }: Context, tutor: Tutor) { - const assignments = state.activeAssignments[tutor.pk] - const promises = assignments.map(assignment => { return deleteAssignment({ assignment }) }) - Promise.all(promises).finally(() => { - TutorOverview.getActiveAssignments() - }) -} - -export const TutorOverview = { - get state () { return stateGetter() }, - - SET_TUTORS: mb.commit(SET_TUTORS), - SET_ASSIGNMENTS: mb.commit(SET_ASSIGNMENTS), - RESET_STATE: mb.commit(RESET_STATE), - - getTutors: mb.dispatch(getTutors), - getActiveAssignments: mb.dispatch(getActiveAssignments), - deleteActiveAssignmentsOfTutor: mb.dispatch(deleteActiveAssignmentsOfTutor) -} diff --git a/grady/frontend/src/store/modules/ui.ts b/grady/frontend/src/store/modules/ui.ts deleted file mode 100644 index 7e3849be..00000000 --- a/grady/frontend/src/store/modules/ui.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { getStoreBuilder } from 'vuex-typex' -import { RootState } from '@/store/store' - -export interface UIState { - sideBarCollapsed: boolean - showJumbotron: boolean, - showSubmissionType: boolean, -} - -function initialState (): UIState { - return { - sideBarCollapsed: false, - showJumbotron: true, - showSubmissionType: true, - } -} - -const mb = getStoreBuilder<RootState>().module('UI', initialState()) - -const stateGetter = mb.state() - -function SET_SIDEBAR_COLLAPSED (state: UIState, collapsed: boolean) { - state.sideBarCollapsed = collapsed -} -function SET_SHOW_JUMBOTRON (state: UIState, val: boolean) { - state.showJumbotron = val -} -function SET_SHOW_SUBMISSIONTYPE (state: UIState, val: boolean) { - state.showSubmissionType = val -} - -export const UI = { - get state () { return stateGetter() }, - - SET_SIDEBAR_COLLAPSED: mb.commit(SET_SIDEBAR_COLLAPSED), - SET_SHOW_JUMBOTRON: mb.commit(SET_SHOW_JUMBOTRON), - SET_SHOW_SUBMISSIONTYPE: mb.commit(SET_SHOW_SUBMISSIONTYPE), -} diff --git a/grady/frontend/src/store/mutations.ts b/grady/frontend/src/store/mutations.ts deleted file mode 100644 index 8be94088..00000000 --- a/grady/frontend/src/store/mutations.ts +++ /dev/null @@ -1,85 +0,0 @@ -import Vue from 'vue' -import { getStoreBuilder } from 'vuex-typex' - -import { initialState, RootState } from '@/store/store' -import { Exam, Statistics, StudentInfoForListView, SubmissionNoType, SubmissionType} from '@/models' - -export const mb = getStoreBuilder<RootState>() - -function SET_EXAM_TYPES (state: RootState, examTypes: Array<Exam>) { - state.examTypes = examTypes.reduce((acc: {[pk: string]: Exam}, curr) => { - acc[curr.pk] = curr - return acc - }, {}) -} -function SET_STUDENTS (state: RootState, students: Array<StudentInfoForListView>) { - state.students = students.reduce((acc: {[pk: string]: StudentInfoForListView}, curr) => { - acc[curr.pk] = mapStudent(curr, state.studentMap) - return acc - }, {}) -} -function SET_STUDENT (state: RootState, student: StudentInfoForListView) { - Vue.set(state.students, student.pk, mapStudent({ - ...state.students[student.pk], - ...student - }, state.studentMap)) -} -// TODO proper types for student map -export interface StudentMap { - [pseudoMatrikelNo: string]: { - matrikelNo: string, - name: string, - email: string - } -} -function SET_STUDENT_MAP (state: RootState, map: StudentMap) { - state.studentMap = map -} -function SET_SUBMISSION (state: RootState, submission: SubmissionNoType) { - Vue.set(state.submissions, submission.pk, submission) -} -function SET_STATISTICS (state: RootState, statistics: Statistics) { - state.statistics = { - ...state.statistics, - ...statistics - } -} -function UPDATE_SUBMISSION_TYPE (state: RootState, submissionType: SubmissionType) { - const updatedSubmissionType = { - ...state.submissionTypes[submissionType.pk], - ...submissionType - } - Vue.set(state.submissionTypes, submissionType.pk, updatedSubmissionType) -} -// this func is being exported to use it's name in the latInteractionPlugin -export function SET_LAST_INTERACTION (state: RootState) { - state.lastAppInteraction = Date.now() -} -function RESET_STATE (state: RootState) { - Object.assign(state, initialState()) -} - -function mapStudent (student: StudentInfoForListView, map: any) { - if (Object.keys(map).length > 0) { - if (!student.matrikelNo) { - throw Error('Student objects need matrikelNo key in order to apply mapping') - } - return { - ...student, - ...map[student.matrikelNo] - } - } - return student -} - -export const mutations = { - SET_LAST_INTERACTION: mb.commit(SET_LAST_INTERACTION), - SET_EXAM_TYPES: mb.commit(SET_EXAM_TYPES), - SET_STUDENTS: mb.commit(SET_STUDENTS), - SET_STUDENT: mb.commit(SET_STUDENT), - SET_STUDENT_MAP: mb.commit(SET_STUDENT_MAP), - SET_SUBMISSION: mb.commit(SET_SUBMISSION), - SET_STATISTICS: mb.commit(SET_STATISTICS), - UPDATE_SUBMISSION_TYPE: mb.commit(UPDATE_SUBMISSION_TYPE), - RESET_STATE: mb.commit(RESET_STATE) -} diff --git a/grady/frontend/src/store/store.ts b/grady/frontend/src/store/store.ts deleted file mode 100644 index 32f7c915..00000000 --- a/grady/frontend/src/store/store.ts +++ /dev/null @@ -1,94 +0,0 @@ -import Vuex, { Plugin } from 'vuex' -import Vue from 'vue' -import { getStoreBuilder } from 'vuex-typex' - -// @ts-ignore -import './modules/ui' -// @ts-ignore -import './modules/authentication' -// @ts-ignore -import './modules/feedback_list/feedback-table' -// @ts-ignore -import './modules/assignments' -// @ts-ignore -import './modules/submission-notes' -// @ts-ignore -import './modules/student-page' -// @ts-ignore -import './modules/tutor-overview' -// @ts-ignore -import './modules/config' - -import './mutations' -import './actions' -import './getters' - -import { UIState } from './modules/ui' -import { AuthState } from './modules/authentication' -import { AssignmentsState } from './modules/assignments' -import { FeedbackTableState } from './modules/feedback_list/feedback-table' -import { SubmissionNotesState } from './modules/submission-notes' -import { StudentPageState } from './modules/student-page' -import { TutorOverviewState } from './modules/tutor-overview' - -import { - Exam, - Statistics, - StudentInfoForListView, - SubmissionNoType, - SubmissionType, -} from '@/models' -import { FeedbackLabelsState } from './modules/feedback-labels' -import { ConfigState } from './modules/config' -import { StudentMap } from './mutations' - -Vue.use(Vuex) - -export interface RootInitialState { - lastAppInteraction: number - examTypes: {[pk: string]: Exam} - submissionTypes: {[pk: string]: SubmissionType} - submissions: {[pk: string]: SubmissionNoType} - students: {[pk: string]: StudentInfoForListView} - studentMap: StudentMap // is used to map obfuscated student data back to the original - statistics: Statistics -} - -export interface RootState extends RootInitialState{ - UI: UIState, - Authentication: AuthState, - FeedbackTable: FeedbackTableState, - Assignments: AssignmentsState, - SubmissionNotes: SubmissionNotesState, - StudentPage: StudentPageState, - TutorOverview: TutorOverviewState, - FeedbackLabels: FeedbackLabelsState - ConfigModule: ConfigState -} - -export function initialState (): RootInitialState { - return { - lastAppInteraction: Date.now(), - examTypes: {}, - submissionTypes: {}, - submissions: {}, - students: {}, - studentMap: {}, // is used to map obfuscated student data back to the original - statistics: { - submissionsPerType: 0, - submissionsPerStudent: 0, - currentMeanScore: 0, - submissionTypeProgress: [] - } - } -} - -export const persistedStateKey = 'grady' - -const store = getStoreBuilder<RootState>().vuexStore({ - strict: process.env.NODE_ENV === 'development', - // TODO is there a better way than casting the initialState ? - state: initialState() as RootState -}) - -export default store diff --git a/grady/frontend/src/util/form-rules.ts b/grady/frontend/src/util/form-rules.ts deleted file mode 100644 index 7eb32321..00000000 --- a/grady/frontend/src/util/form-rules.ts +++ /dev/null @@ -1,5 +0,0 @@ -type Rule = (value: unknown) => true | string - -export const required: Rule = function (v) { - return !!v || 'This field is required.' -} diff --git a/grady/frontend/src/util/helpers.ts b/grady/frontend/src/util/helpers.ts deleted file mode 100644 index 314db84f..00000000 --- a/grady/frontend/src/util/helpers.ts +++ /dev/null @@ -1,173 +0,0 @@ -import { AxiosError, AxiosResponse } from 'axios' -import { Dispatch } from 'vuex' -import { MutationHandler } from 'vuex-typex' - -export function nameSpacer (namespace: string) { - return function (commitType: string) { - return namespace + commitType - } -} - -export function getObjectValueByPath (obj: any, path: string): any { - // credit: http://stackoverflow.com/questions/6491463/accessing-nested-javascript-objects-with-string-key#comment55278413_6491621 - if (!path || path.constructor !== String) return - path = path.replace(/\[(\w+)\]/g, '.$1') // convert indexes to properties - path = path.replace(/^\./, '') // strip a leading dot - const a = path.split('.') - for (let i = 0, n = a.length; i < n; ++i) { - const k = a[i] - if (obj instanceof Object && k in obj) { - obj = obj[k] - } else { - return - } - } - return obj -} - -interface GetSetPair<P> { - get: () => any, - set: (val: P) => void -} - -/** - * Use this method to generate a computed property accessing the store for a Vue instance. - * The get method will return the value at this.$store.state.<path>. - * The set method will commit the passed value as payload for the specified mutation - * @param path to the store variable/object being returned - * @param mutation name of mutation type - * @param namespace to prepend the mutation type with - * @returns {*} - */ -export function createComputedGetterSetter<P> ( - { path, mutation, namespace }: - {path: string, mutation: string | ((payload?: P) => void), namespace:string}): GetSetPair<P> { - return { - get (): any { - return getObjectValueByPath((this as any).$store.state, path) - }, - set (val: P): void { - if (typeof mutation === 'string') { - (this as any).$store.commit(`${namespace ? namespace + '/' : ''}${mutation}`, val) - } else { - mutation(val) - } - } - } -} - -interface StateMapperItem { - name: string, - mutation: string, - path?: string -} - -interface MappedState { - [key: string]: GetSetPair<any> -} - -/** - * Returns an object of generated computed getter/setter pairs. - * Can be used to quickly bind a stores state and corresponding setters to a vue component - * @param namespace optional namespace of mutations - * @param pathPrefix if set, all items path will be prepended by the path prefix - * @param items array that contains objects {name, path, mutation} - */ -export function mapStateToComputedGetterSetter ( - { namespace = '', pathPrefix = '', items = [] }: - {namespace: string, pathPrefix: string, items: StateMapperItem[]}): MappedState { - return items.reduce((acc: MappedState, curr) => { - // if no path is give, use name - const itemPath = curr.path || curr.name - const path = pathPrefix ? `${pathPrefix}.${itemPath}` : itemPath - acc[curr.name] = createComputedGetterSetter({ mutation: curr.mutation, path, namespace }) - return acc - }, {}) -} - -// thanks to rsp -// https://stackoverflow.com/questions/12303989/cartesian-product-of-multiple-arrays-in-javascript/43053803#43053803 -function cartesianHelper (a: Array<any>, b: Array<any>): Array<Array<any>> { - return ([] as Array<any>).concat(...a.map((a: any) => b.map((b: any) => [].concat(a, b)))) -} -export function cartesian (a: Array<any>, b?: Array<any>, ...c: Array<Array<any>>): Array<Array<any>> { - return b ? cartesian(cartesianHelper(a, b), ...c) : a -} - -// flatten an array -export function flatten (list: any[]): any[] { - return list.reduce( - (a, b) => a.concat(Array.isArray(b) ? flatten(b) : b), [] - ) -} - -export function objectifyArray<T, P extends keyof T> (arr: T[], key: P): {[index: string]: T} { - return arr.reduce((acc: any, curr) => { - acc[curr[key]] = curr - return acc - }, {}) -} - -interface OnceFunc { - (): any - reset: () => void -} - -export function once (fn: Function, context?: object): OnceFunc { - let result: any - let wrapped = function (this: any) { - if (!result) { - result = fn.apply(context || this, arguments) - } - return result - } as OnceFunc - wrapped.reset = function () { result = undefined } - return wrapped -} - -export function syntaxPostProcess (code: string): string { - const spanPrefix = '<span class="hljs-comment">' - const spanSuffix = '</span>' - - code = code.replace(/(<span class="hljs-comment">)([\s\S]*?)(<\/span>)/gim, (match, p1, p2, p3) => { - const splitted = p2.split(/\n/) - for (let i = 0; i < splitted.length; i++) { - splitted[i] = spanPrefix + splitted[i] + spanSuffix - } - - return splitted.join('\n') - }) - return code -} - -export function parseBlacklist (blacklist: Array<string>): string { - return blacklist.reduce((acc, curr) => { - return acc + '|' + curr - }) -} - -export function parseErrorNotification (response: AxiosResponse): string { - if (!response.data || Object.keys(response.data).length === 0) { - return 'There is no useful error data. Please ask the staff for help.' - } else { - let msg = '<ul>' - function pickRecursive(obj: any) { - if (obj instanceof Object) { - for (let k of Object.keys(obj)) { - pickRecursive(obj[k]) - } - } else { - msg += '<li>' + obj + '</li>' - } - } - pickRecursive(response.data) - msg += '</ul>' - - if (response.status === 404) { - msg += '<br/>If you experience unusual behaviour, finish all unfinished work and relog.' + - ' If not, this is probably not a critical error.' - } - - return msg - } -} diff --git a/grady/frontend/src/util/interceptor.ts b/grady/frontend/src/util/interceptor.ts deleted file mode 100644 index 109706fe..00000000 --- a/grady/frontend/src/util/interceptor.ts +++ /dev/null @@ -1,23 +0,0 @@ -import instance from '@/main' -import { parseErrorNotification, parseBlacklist } from '@/util/helpers' - - -const errorUrlBlacklist = [ - '/api/get-token/', - '/api/.*/change_password/', - '/api/corrector/register/', - '/api/assignment/' -] -const blackListRegExp = new RegExp(parseBlacklist(errorUrlBlacklist), 'g') - -export function errorInterceptor (error: any): any { - if (!error.response.request.responseURL.match(blackListRegExp)) { - instance.$notify({ - title: 'Request failed.', - text: parseErrorNotification(error.response), - type: 'error', - duration: -1 - }) - } - return Promise.reject(error) -} diff --git a/grady/frontend/src/util/shortkeys.ts b/grady/frontend/src/util/shortkeys.ts deleted file mode 100644 index 996c04d2..00000000 --- a/grady/frontend/src/util/shortkeys.ts +++ /dev/null @@ -1,26 +0,0 @@ -import Vue from 'vue' - -const shortkeyTypes = { - numeric: (key: string) => { return Number(key) >= 0 && Number(key) <= 9 } -} - -const handlerFunc = (el: any, bind: any) => { - return (event: KeyboardEvent) => { - // handle numeric key press - if (bind.value === 'numeric' && shortkeyTypes.numeric(event.key)) { - const e = new KeyboardEvent('shortkey', { bubbles: false, key: event.key }) - el.dispatchEvent(e) - } - } -} - -// add the v-shortkey directive to Vue -// usage: <tag v-shortkey="<shortkeyType>" @shortkey="<handlerFunc>"></tag> -Vue.directive('shortkey', { - bind: (el, bind) => { - window.addEventListener('keypress', handlerFunc(el, bind)) - }, - unbind: (el, bind) => { - window.removeEventListener('keypress', handlerFunc(el, bind)) - } -}) \ No newline at end of file diff --git a/grady/frontend/tsconfig.json b/grady/frontend/tsconfig.json deleted file mode 100644 index 8e57f591..00000000 --- a/grady/frontend/tsconfig.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "compilerOptions": { - "target": "es2018", - "module": "esnext", - "strict": true, - "jsx": "preserve", - "importHelpers": true, - "moduleResolution": "node", - "experimentalDecorators": true, - "esModuleInterop": true, - "sourceMap": true, - "baseUrl": ".", - "types": [ - "webpack-env", - "mocha", - "chai" - ], - "paths": { - "@/*": [ - "src/*" - ] - }, - "lib": [ - "es2017", - "es2018.promise", - "dom", - "dom.iterable", - "scripthost" - ] - }, - "include": [ - "@types/", - "src/**/*.ts", - "src/**/*.tsx", - "src/**/*.vue", - "tests/**/*.ts", - "tests/**/*.tsx" - ], - "exclude": [ - "node_modules" - ] -} diff --git a/grady/frontend/vue.config.js b/grady/frontend/vue.config.js deleted file mode 100644 index 74cd1213..00000000 --- a/grady/frontend/vue.config.js +++ /dev/null @@ -1,23 +0,0 @@ -const path = require('path') - -const projectRoot = path.resolve(__dirname) - -module.exports = { - assetsDir: 'static', - devServer: { - allowedHosts: ['localhost'], - host: 'localhost' - }, - configureWebpack: config => { - config.resolve.alias['@'] = `${projectRoot}/src` - - if (process.env.NODE_ENV === 'development') { - config.devtool = 'source-map' - } - - // keep_fnames ist set to true because vuex-typex is dependant on the function names - if (process.env.NODE_ENV === 'production') { - config.optimization.minimizer[0].options.terserOptions.keep_fnames = true - } - } -} diff --git a/grady/frontend/yarn.lock b/grady/frontend/yarn.lock deleted file mode 100644 index f13a22aa..00000000 --- a/grady/frontend/yarn.lock +++ /dev/null @@ -1,8283 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.8.3": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.0.tgz#0dfc80309beec8411e65e706461c408b0bb9b431" - integrity sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA== - dependencies: - "@babel/highlight" "^7.16.0" - -"@babel/generator@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.0.tgz#d40f3d1d5075e62d3500bccb67f3daa8a95265b2" - integrity sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew== - dependencies: - "@babel/types" "^7.16.0" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/helper-function-name@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz#b7dd0797d00bbfee4f07e9c4ea5b0e30c8bb1481" - integrity sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog== - dependencies: - "@babel/helper-get-function-arity" "^7.16.0" - "@babel/template" "^7.16.0" - "@babel/types" "^7.16.0" - -"@babel/helper-get-function-arity@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz#0088c7486b29a9cb5d948b1a1de46db66e089cfa" - integrity sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ== - dependencies: - "@babel/types" "^7.16.0" - -"@babel/helper-hoist-variables@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz#4c9023c2f1def7e28ff46fc1dbcd36a39beaa81a" - integrity sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg== - dependencies: - "@babel/types" "^7.16.0" - -"@babel/helper-split-export-declaration@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz#29672f43663e936df370aaeb22beddb3baec7438" - integrity sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw== - dependencies: - "@babel/types" "^7.16.0" - -"@babel/helper-validator-identifier@^7.15.7": - version "7.15.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" - integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== - -"@babel/highlight@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a" - integrity sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g== - dependencies: - "@babel/helper-validator-identifier" "^7.15.7" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.16.0", "@babel/parser@^7.7.0": - version "7.16.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.2.tgz#3723cd5c8d8773eef96ce57ea1d9b7faaccd12ac" - integrity sha512-RUVpT0G2h6rOZwqLDTrKk7ksNv7YpAilTnYe1/Q+eDjxEceRMKVWbCsX7t8h6C1qCFi/1Y8WZjcEPBAFG27GPw== - -"@babel/template@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.0.tgz#d16a35ebf4cd74e202083356fab21dd89363ddd6" - integrity sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A== - dependencies: - "@babel/code-frame" "^7.16.0" - "@babel/parser" "^7.16.0" - "@babel/types" "^7.16.0" - -"@babel/traverse@^7.7.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.0.tgz#965df6c6bfc0a958c1e739284d3c9fa4a6e3c45b" - integrity sha512-qQ84jIs1aRQxaGaxSysII9TuDaguZ5yVrEuC0BN2vcPlalwfLovVmCjbFDPECPXcYM/wLvNFfp8uDOliLxIoUQ== - dependencies: - "@babel/code-frame" "^7.16.0" - "@babel/generator" "^7.16.0" - "@babel/helper-function-name" "^7.16.0" - "@babel/helper-hoist-variables" "^7.16.0" - "@babel/helper-split-export-declaration" "^7.16.0" - "@babel/parser" "^7.16.0" - "@babel/types" "^7.16.0" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.16.0", "@babel/types@^7.7.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba" - integrity sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg== - dependencies: - "@babel/helper-validator-identifier" "^7.15.7" - to-fast-properties "^2.0.0" - -"@hapi/address@2.x.x": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5" - integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ== - -"@hapi/bourne@1.x.x": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a" - integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA== - -"@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06" - integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow== - -"@hapi/joi@^15.0.1": - version "15.1.1" - resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz#c675b8a71296f02833f8d6d243b34c57b8ce19d7" - integrity sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ== - dependencies: - "@hapi/address" "2.x.x" - "@hapi/bourne" "1.x.x" - "@hapi/hoek" "8.x.x" - "@hapi/topo" "3.x.x" - -"@hapi/topo@3.x.x": - version "3.1.6" - resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29" - integrity sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ== - dependencies: - "@hapi/hoek" "^8.3.0" - -"@intervolga/optimize-cssnano-plugin@^1.0.5": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz#be7c7846128b88f6a9b1d1261a0ad06eb5c0fdf8" - integrity sha512-zN69TnSr0viRSU6cEDIcuPcP67QcpQ6uHACg58FiN9PDrU6SLyGW3MR4tiISbYxy1kDWAVPwD+XwQTWE5cigAA== - dependencies: - cssnano "^4.0.0" - cssnano-preset-default "^4.0.0" - postcss "^7.0.0" - -"@mrmlnc/readdir-enhanced@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" - integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== - dependencies: - call-me-maybe "^1.0.1" - glob-to-regexp "^0.3.0" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.stat@^1.1.2": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" - integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@soda/friendly-errors-webpack-plugin@^1.7.1": - version "1.8.0" - resolved "https://registry.yarnpkg.com/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.0.tgz#84751d82a93019d5c92c0cf0e45ac59087cd2240" - integrity sha512-RLotfx6k1+nfLacwNCenj7VnTMPxVwYKoGOcffMFoJDKM8tXzBiCN0hMHFJNnoAojduYAsxuiMm0EOMixgiRow== - dependencies: - chalk "^2.4.2" - error-stack-parser "^2.0.2" - string-width "^2.0.0" - strip-ansi "^5" - -"@types/eslint-visitor-keys@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" - integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== - -"@types/file-saver@^2.0.1": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/file-saver/-/file-saver-2.0.3.tgz#b734c4f5a04d20615eaed3dc106e2ab321082009" - integrity sha512-MBIou8pd/41jkff7s97B47bc9+p0BszqqDJsO51yDm49uUxeKzrfuNl5fSLC6BpLEWKA8zlwyqALVmXrFwoBHQ== - -"@types/glob@^7.1.1": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" - integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== - dependencies: - "@types/minimatch" "*" - "@types/node" "*" - -"@types/highlight.js@^9.12.3": - version "9.12.4" - resolved "https://registry.yarnpkg.com/@types/highlight.js/-/highlight.js-9.12.4.tgz#8c3496bd1b50cc04aeefd691140aa571d4dbfa34" - integrity sha512-t2szdkwmg2JJyuCM20e8kR2X59WCE5Zkl4bzm1u1Oukjm79zpbiAv+QjnwLnuuV0WHEcX2NgUItu0pAMKuOPww== - -"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7": - version "7.0.9" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" - integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== - -"@types/minimatch@*": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" - integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== - -"@types/node@*": - version "16.11.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.7.tgz#36820945061326978c42a01e56b61cd223dfdc42" - integrity sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw== - -"@types/normalize-package-data@^2.4.0": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" - integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== - -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - -"@types/q@^1.5.1": - version "1.5.5" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df" - integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ== - -"@types/webpack-env@^1.15.2": - version "1.16.3" - resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.16.3.tgz#b776327a73e561b71e7881d0cd6d34a1424db86a" - integrity sha512-9gtOPPkfyNoEqCQgx4qJKkuNm/x0R2hKR7fdl7zvTJyHnIisuE/LfvXOsYWL0o3qq6uiBnKZNNNzi3l0y/X+xw== - -"@typescript-eslint/eslint-plugin@^1.1.0": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.13.0.tgz#22fed9b16ddfeb402fd7bcde56307820f6ebc49f" - integrity sha512-WQHCozMnuNADiqMtsNzp96FNox5sOVpU8Xt4meaT4em8lOG1SrOv92/mUbEHQVh90sldKSfcOc/I0FOb/14G1g== - dependencies: - "@typescript-eslint/experimental-utils" "1.13.0" - eslint-utils "^1.3.1" - functional-red-black-tree "^1.0.1" - regexpp "^2.0.1" - tsutils "^3.7.0" - -"@typescript-eslint/eslint-plugin@^4.13.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz#c24dc7c8069c7706bc40d99f6fa87edcb2005276" - integrity sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg== - dependencies: - "@typescript-eslint/experimental-utils" "4.33.0" - "@typescript-eslint/scope-manager" "4.33.0" - debug "^4.3.1" - functional-red-black-tree "^1.0.1" - ignore "^5.1.8" - regexpp "^3.1.0" - semver "^7.3.5" - tsutils "^3.21.0" - -"@typescript-eslint/experimental-utils@1.13.0": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz#b08c60d780c0067de2fb44b04b432f540138301e" - integrity sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg== - dependencies: - "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "1.13.0" - eslint-scope "^4.0.0" - -"@typescript-eslint/experimental-utils@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz#6f2a786a4209fa2222989e9380b5331b2810f7fd" - integrity sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q== - dependencies: - "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.33.0" - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/typescript-estree" "4.33.0" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - -"@typescript-eslint/parser@^1.1.0": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-1.13.0.tgz#61ac7811ea52791c47dc9fd4dd4a184fae9ac355" - integrity sha512-ITMBs52PCPgLb2nGPoeT4iU3HdQZHcPaZVw+7CsFagRJHUhyeTgorEwHXhFf3e7Evzi8oujKNpHc8TONth8AdQ== - dependencies: - "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "1.13.0" - "@typescript-eslint/typescript-estree" "1.13.0" - eslint-visitor-keys "^1.0.0" - -"@typescript-eslint/parser@^4.13.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.33.0.tgz#dfe797570d9694e560528d18eecad86c8c744899" - integrity sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA== - dependencies: - "@typescript-eslint/scope-manager" "4.33.0" - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/typescript-estree" "4.33.0" - debug "^4.3.1" - -"@typescript-eslint/scope-manager@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz#d38e49280d983e8772e29121cf8c6e9221f280a3" - integrity sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ== - dependencies: - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/visitor-keys" "4.33.0" - -"@typescript-eslint/types@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" - integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== - -"@typescript-eslint/typescript-estree@1.13.0": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz#8140f17d0f60c03619798f1d628b8434913dc32e" - integrity sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw== - dependencies: - lodash.unescape "4.0.1" - semver "5.5.0" - -"@typescript-eslint/typescript-estree@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz#0dfb51c2908f68c5c08d82aefeaf166a17c24609" - integrity sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA== - dependencies: - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/visitor-keys" "4.33.0" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" - tsutils "^3.21.0" - -"@typescript-eslint/visitor-keys@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz#2a22f77a41604289b7a186586e9ec48ca92ef1dd" - integrity sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg== - dependencies: - "@typescript-eslint/types" "4.33.0" - eslint-visitor-keys "^2.0.0" - -"@vue/cli-overlay@^3.12.1": - version "3.12.1" - resolved "https://registry.yarnpkg.com/@vue/cli-overlay/-/cli-overlay-3.12.1.tgz#bdfde8f7123561ab06e4e4c60b854cc5092f5ab1" - integrity sha512-Bym92EN+lj+cNRN2ozbYyH+V8DMXWGbCDUk+hiJ4EYDBZfBkZKvalk1/mOBFwyxiopnnbOEBAAhL/UuMQ1xARg== - -"@vue/cli-plugin-eslint@^3.11.0": - version "3.12.1" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-eslint/-/cli-plugin-eslint-3.12.1.tgz#302c463867f38e790bb996eafdf7159c782dc8cf" - integrity sha512-tVTZlEZsy3sQbO4LLWFK11yzlWwqVAqaM+IY+BeWHITBzEJKh2KmouG+x6x/reXiU3qROsMJ4Ej3Hs8buSMWyQ== - dependencies: - "@vue/cli-shared-utils" "^3.12.1" - babel-eslint "^10.0.1" - eslint-loader "^2.1.2" - globby "^9.2.0" - webpack "^4.0.0" - yorkie "^2.0.0" - optionalDependencies: - eslint "^4.19.1" - eslint-plugin-vue "^4.7.1" - -"@vue/cli-plugin-typescript@^4.5.10": - version "4.5.15" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-typescript/-/cli-plugin-typescript-4.5.15.tgz#14ba0ddcf3b94e73148ff84ac904fbc5346c14d1" - integrity sha512-g2HDBwWBboTzNvVrS+w4Ctl7CCErboTlx7PyQrXgY+7uGdPVUT9PWuv4DjaZhosSk7WI3qSIpruCBIkdHX5bwQ== - dependencies: - "@types/webpack-env" "^1.15.2" - "@vue/cli-shared-utils" "^4.5.15" - cache-loader "^4.1.0" - fork-ts-checker-webpack-plugin "^3.1.1" - globby "^9.2.0" - thread-loader "^2.1.3" - ts-loader "^6.2.2" - tslint "^5.20.1" - webpack "^4.0.0" - yorkie "^2.0.0" - optionalDependencies: - fork-ts-checker-webpack-plugin-v5 "npm:fork-ts-checker-webpack-plugin@^5.0.11" - -"@vue/cli-service@^3.11.0": - version "3.12.1" - resolved "https://registry.yarnpkg.com/@vue/cli-service/-/cli-service-3.12.1.tgz#13220b1c189254e7c003390df329086f9b6e77e6" - integrity sha512-PDxNrTGnSKzeV1ruFlsRIAO8JcPizwT0EJXq9GeyooU+p+sOkv7aKkCBJQVYNjZapD1NOGWx6CvAAC/wAW+gew== - dependencies: - "@intervolga/optimize-cssnano-plugin" "^1.0.5" - "@soda/friendly-errors-webpack-plugin" "^1.7.1" - "@vue/cli-overlay" "^3.12.1" - "@vue/cli-shared-utils" "^3.12.1" - "@vue/component-compiler-utils" "^3.0.0" - "@vue/preload-webpack-plugin" "^1.1.0" - "@vue/web-component-wrapper" "^1.2.0" - acorn "^6.1.1" - acorn-walk "^6.1.1" - address "^1.0.3" - autoprefixer "^9.5.1" - browserslist "^4.5.4" - cache-loader "^2.0.1" - case-sensitive-paths-webpack-plugin "^2.2.0" - chalk "^2.4.2" - cli-highlight "^2.1.0" - clipboardy "^2.0.0" - cliui "^5.0.0" - copy-webpack-plugin "^4.6.0" - css-loader "^1.0.1" - cssnano "^4.1.10" - current-script-polyfill "^1.0.0" - debug "^4.1.1" - default-gateway "^5.0.2" - dotenv "^7.0.0" - dotenv-expand "^5.1.0" - escape-string-regexp "^1.0.5" - file-loader "^3.0.1" - fs-extra "^7.0.1" - globby "^9.2.0" - hash-sum "^1.0.2" - html-webpack-plugin "^3.2.0" - launch-editor-middleware "^2.2.1" - lodash.defaultsdeep "^4.6.1" - lodash.mapvalues "^4.6.0" - lodash.transform "^4.6.0" - mini-css-extract-plugin "^0.8.0" - minimist "^1.2.0" - ora "^3.4.0" - portfinder "^1.0.20" - postcss-loader "^3.0.0" - read-pkg "^5.0.0" - semver "^6.0.0" - slash "^2.0.0" - source-map-url "^0.4.0" - ssri "^6.0.1" - string.prototype.padend "^3.0.0" - terser-webpack-plugin "^1.2.3" - thread-loader "^2.1.2" - url-loader "^1.1.2" - vue-loader "^15.7.0" - webpack "^4.0.0" - webpack-bundle-analyzer "^3.3.0" - webpack-chain "^4.11.0" - webpack-dev-server "^3.4.1" - webpack-merge "^4.2.1" - -"@vue/cli-shared-utils@^3.12.1": - version "3.12.1" - resolved "https://registry.yarnpkg.com/@vue/cli-shared-utils/-/cli-shared-utils-3.12.1.tgz#bcf076287ddadeebbb97c6a748dfe9ff50ec8df0" - integrity sha512-jFblzRFjutGwu5utOKdVlPlsbA1lBUNNQlAThzNqej+JtTKJjnvjlhjKX0Gq0oOny5FjKWhoyfQ74p9h1qE6JQ== - dependencies: - "@hapi/joi" "^15.0.1" - chalk "^2.4.1" - execa "^1.0.0" - launch-editor "^2.2.1" - lru-cache "^5.1.1" - node-ipc "^9.1.1" - open "^6.3.0" - ora "^3.4.0" - request "^2.87.0" - request-promise-native "^1.0.7" - semver "^6.0.0" - string.prototype.padstart "^3.0.0" - -"@vue/cli-shared-utils@^4.5.15": - version "4.5.15" - resolved "https://registry.yarnpkg.com/@vue/cli-shared-utils/-/cli-shared-utils-4.5.15.tgz#dba3858165dbe3465755f256a4890e69084532d6" - integrity sha512-SKaej9hHzzjKSOw1NlFmc6BSE0vcqUQMQiv1cxQ2DhVyy4QxZXBmzmiLBUBe+hYZZs1neXW7n//udeN9bCAY+Q== - dependencies: - "@hapi/joi" "^15.0.1" - chalk "^2.4.2" - execa "^1.0.0" - launch-editor "^2.2.1" - lru-cache "^5.1.1" - node-ipc "^9.1.1" - open "^6.3.0" - ora "^3.4.0" - read-pkg "^5.1.1" - request "^2.88.2" - semver "^6.1.0" - strip-ansi "^6.0.0" - -"@vue/component-compiler-utils@^3.0.0", "@vue/component-compiler-utils@^3.1.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz#f9f5fb53464b0c37b2c8d2f3fbfe44df60f61dc9" - integrity sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ== - dependencies: - consolidate "^0.15.1" - hash-sum "^1.0.2" - lru-cache "^4.1.2" - merge-source-map "^1.1.0" - postcss "^7.0.36" - postcss-selector-parser "^6.0.2" - source-map "~0.6.1" - vue-template-es2015-compiler "^1.9.0" - optionalDependencies: - prettier "^1.18.2 || ^2.0.0" - -"@vue/eslint-config-typescript@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@vue/eslint-config-typescript/-/eslint-config-typescript-4.0.0.tgz#a202983598a4a826460cbb8ee43826875b0f6673" - integrity sha512-uSMAMgw4xDgVdZQhpbtJRo8nMV4oOy3Ht8olfOo7xvYFYLMF2JZ1tDRKd9/NSusxA72O2Vma+HzmyzDHg9evcQ== - dependencies: - "@typescript-eslint/eslint-plugin" "^1.1.0" - "@typescript-eslint/parser" "^1.1.0" - -"@vue/preload-webpack-plugin@^1.1.0": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.2.tgz#ceb924b4ecb3b9c43871c7a429a02f8423e621ab" - integrity sha512-LIZMuJk38pk9U9Ur4YzHjlIyMuxPlACdBIHH9/nGYVTsaGKOSnSuELiE8vS9wa+dJpIYspYUOqk+L1Q4pgHQHQ== - -"@vue/web-component-wrapper@^1.2.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz#b6b40a7625429d2bd7c2281ddba601ed05dc7f1a" - integrity sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA== - -"@webassemblyjs/ast@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" - integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== - dependencies: - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" - -"@webassemblyjs/floating-point-hex-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" - integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== - -"@webassemblyjs/helper-api-error@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" - integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== - -"@webassemblyjs/helper-buffer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" - integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== - -"@webassemblyjs/helper-code-frame@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" - integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== - dependencies: - "@webassemblyjs/wast-printer" "1.9.0" - -"@webassemblyjs/helper-fsm@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" - integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== - -"@webassemblyjs/helper-module-context@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" - integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== - dependencies: - "@webassemblyjs/ast" "1.9.0" - -"@webassemblyjs/helper-wasm-bytecode@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" - integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== - -"@webassemblyjs/helper-wasm-section@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" - integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - -"@webassemblyjs/ieee754@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" - integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" - integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" - integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== - -"@webassemblyjs/wasm-edit@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" - integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/helper-wasm-section" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-opt" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - "@webassemblyjs/wast-printer" "1.9.0" - -"@webassemblyjs/wasm-gen@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" - integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" - -"@webassemblyjs/wasm-opt@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" - integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - -"@webassemblyjs/wasm-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" - integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" - -"@webassemblyjs/wast-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" - integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/floating-point-hex-parser" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-code-frame" "1.9.0" - "@webassemblyjs/helper-fsm" "1.9.0" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/wast-printer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" - integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" - "@xtuc/long" "4.2.2" - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - -accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" - integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== - dependencies: - mime-types "~2.1.24" - negotiator "0.6.2" - -acorn-jsx@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" - integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s= - dependencies: - acorn "^3.0.4" - -acorn-jsx@^5.0.0: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn-walk@^6.1.1: - version "6.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" - integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== - -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - -acorn@^3.0.4: - version "3.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" - integrity sha1-ReN/s56No/JbruP/U2niu18iAXo= - -acorn@^5.5.0: - version "5.7.4" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" - integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== - -acorn@^6.0.2, acorn@^6.0.7, acorn@^6.1.1, acorn@^6.4.1: - version "6.4.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" - integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== - -acorn@^7.1.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -address@^1.0.3: - version "1.1.2" - resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" - integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== - -ajv-errors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" - integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== - -ajv-keywords@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" - integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I= - -ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv@^5.2.3, ajv@^5.3.0: - version "5.5.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" - integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= - dependencies: - co "^4.6.0" - fast-deep-equal "^1.0.0" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" - -ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.9.1: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -alphanum-sort@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" - integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= - -ansi-colors@^3.0.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" - integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== - -ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - -ansi-html-community@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" - integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -aproba@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - -arch@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" - integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= - -array-flatten@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - -array-union@^1.0.1, array-union@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= - dependencies: - array-uniq "^1.0.1" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -asn1.js@^5.2.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - safer-buffer "^2.1.0" - -asn1@~0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -assert@^1.1.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" - integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== - dependencies: - object-assign "^4.1.1" - util "0.10.3" - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - -async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== - -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - -async@^2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" - integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== - dependencies: - lodash "^4.17.14" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -autoprefixer@^9.5.1: - version "9.8.8" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.8.tgz#fd4bd4595385fa6f06599de749a4d5f7a474957a" - integrity sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA== - dependencies: - browserslist "^4.12.0" - caniuse-lite "^1.0.30001109" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - picocolors "^0.2.1" - postcss "^7.0.32" - postcss-value-parser "^4.1.0" - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" - integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== - -axios@^0.18.0: - version "0.18.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.1.tgz#ff3f0de2e7b5d180e757ad98000f1081b87bcea3" - integrity sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g== - dependencies: - follow-redirects "1.5.10" - is-buffer "^2.0.2" - -babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - -babel-eslint@^10.0.1: - version "10.1.0" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" - integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.7.0" - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" - eslint-visitor-keys "^1.0.0" - resolve "^1.12.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.0.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -batch@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" - integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - -bfj@^6.1.1: - version "6.1.2" - resolved "https://registry.yarnpkg.com/bfj/-/bfj-6.1.2.tgz#325c861a822bcb358a41c78a33b8e6e2086dde7f" - integrity sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw== - dependencies: - bluebird "^3.5.5" - check-types "^8.0.3" - hoopy "^0.1.4" - tryer "^1.0.1" - -big.js@^3.1.3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" - integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -bluebird@^3.1.1, bluebird@^3.5.1, bluebird@^3.5.5: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.0.0, bn.js@^5.1.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" - integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== - -body-parser@1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" - integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== - dependencies: - bytes "3.1.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.2" - http-errors "1.7.2" - iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.7.0" - raw-body "2.4.0" - type-is "~1.6.17" - -bonjour@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" - integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= - dependencies: - array-flatten "^2.1.0" - deep-equal "^1.0.1" - dns-equal "^1.0.0" - dns-txt "^2.0.2" - multicast-dns "^6.0.1" - multicast-dns-service-types "^1.1.0" - -boolbase@^1.0.0, boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^2.3.1, braces@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -braces@^3.0.1, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -brorand@^1.0.1, brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= - -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" - integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== - dependencies: - bn.js "^5.0.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" - integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== - dependencies: - bn.js "^5.1.1" - browserify-rsa "^4.0.1" - create-hash "^1.2.0" - create-hmac "^1.1.7" - elliptic "^6.5.3" - inherits "^2.0.4" - parse-asn1 "^5.1.5" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -browserify-zlib@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== - dependencies: - pako "~1.0.5" - -browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.5.4: - version "4.17.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.6.tgz#c76be33e7786b497f66cad25a73756c8b938985d" - integrity sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw== - dependencies: - caniuse-lite "^1.0.30001274" - electron-to-chromium "^1.3.886" - escalade "^3.1.1" - node-releases "^2.0.1" - picocolors "^1.0.0" - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer-indexof@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" - integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== - -buffer-json@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/buffer-json/-/buffer-json-2.0.0.tgz#f73e13b1e42f196fe2fd67d001c7d7107edd7c23" - integrity sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw== - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= - -buffer@^4.3.0: - version "4.9.2" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" - integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -builtin-modules@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= - -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= - -bytes@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== - -cacache@^10.0.4: - version "10.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460" - integrity sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA== - dependencies: - bluebird "^3.5.1" - chownr "^1.0.1" - glob "^7.1.2" - graceful-fs "^4.1.11" - lru-cache "^4.1.1" - mississippi "^2.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.2" - ssri "^5.2.4" - unique-filename "^1.1.0" - y18n "^4.0.0" - -cacache@^12.0.2: - version "12.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" - integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== - dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" - glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" - unique-filename "^1.1.1" - y18n "^4.0.0" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -cache-loader@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/cache-loader/-/cache-loader-2.0.1.tgz#5758f41a62d7c23941e3c3c7016e6faeb03acb07" - integrity sha512-V99T3FOynmGx26Zom+JrVBytLBsmUCzVG2/4NnUKgvXN4bEV42R1ERl1IyiH/cvFIDA1Ytq2lPZ9tXDSahcQpQ== - dependencies: - loader-utils "^1.1.0" - mkdirp "^0.5.1" - neo-async "^2.6.0" - normalize-path "^3.0.0" - schema-utils "^1.0.0" - -cache-loader@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cache-loader/-/cache-loader-4.1.0.tgz#9948cae353aec0a1fcb1eafda2300816ec85387e" - integrity sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw== - dependencies: - buffer-json "^2.0.0" - find-cache-dir "^3.0.0" - loader-utils "^1.2.3" - mkdirp "^0.5.1" - neo-async "^2.6.1" - schema-utils "^2.0.0" - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -call-me-maybe@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" - integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= - -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= - dependencies: - callsites "^2.0.0" - -caller-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" - integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8= - dependencies: - callsites "^0.2.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= - dependencies: - caller-callsite "^2.0.0" - -callsites@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" - integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo= - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camel-case@3.0.x: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" - integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= - dependencies: - no-case "^2.2.0" - upper-case "^1.1.1" - -camelcase@^5.0.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -caniuse-api@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" - integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== - dependencies: - browserslist "^4.0.0" - caniuse-lite "^1.0.0" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001274: - version "1.0.30001279" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001279.tgz#eb06818da481ef5096a3b3760f43e5382ed6b0ce" - integrity sha512-VfEHpzHEXj6/CxggTwSFoZBBYGQfQv9Cf42KPlO79sWXCD1QNKWKsKzFeWL7QpZHJQYAvocqV6Rty1yJMkqWLQ== - -case-sensitive-paths-webpack-plugin@^2.2.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4" - integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - -chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chardet@^0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" - integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -check-types@^8.0.3: - version "8.0.3" - resolved "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552" - integrity sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ== - -chokidar@^2.1.8: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" - -chokidar@^3.3.0, chokidar@^3.4.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" - integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chownr@^1.0.1, chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== - -ci-info@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" - integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -circular-json@^0.3.1: - version "0.3.3" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" - integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -clean-css@4.2.x: - version "4.2.4" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.4.tgz#733bf46eba4e607c6891ea57c24a989356831178" - integrity sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A== - dependencies: - source-map "~0.6.0" - -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - dependencies: - restore-cursor "^2.0.0" - -cli-highlight@^2.1.0: - version "2.1.11" - resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf" - integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg== - dependencies: - chalk "^4.0.0" - highlight.js "^10.7.1" - mz "^2.4.0" - parse5 "^5.1.1" - parse5-htmlparser2-tree-adapter "^6.0.0" - yargs "^16.0.0" - -cli-spinners@^2.0.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" - integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== - -cli-width@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" - integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== - -clipboardy@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-2.3.0.tgz#3c2903650c68e46a91b388985bc2774287dba290" - integrity sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ== - dependencies: - arch "^2.1.1" - execa "^1.0.0" - is-wsl "^2.1.1" - -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= - -coa@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" - integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== - dependencies: - "@types/q" "^1.5.1" - chalk "^2.4.1" - q "^1.1.2" - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0, color-convert@^1.9.3: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@^1.0.0, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-string@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.6.0.tgz#c3915f61fe267672cb7e1e064c9d692219f6c312" - integrity sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^3.0.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" - integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== - dependencies: - color-convert "^1.9.3" - color-string "^1.6.0" - -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@2.17.x: - version "2.17.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" - integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== - -commander@^2.12.1, commander@^2.18.0, commander@^2.20.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@~2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" - integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= - -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - -compressible@~2.0.16: - version "2.0.18" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - -compression@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -concat-stream@^1.5.0, concat-stream@^1.6.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -connect-history-api-fallback@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" - integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== - -console-browserify@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" - integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== - -consolidate@^0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.15.1.tgz#21ab043235c71a07d45d9aad98593b0dba56bab7" - integrity sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw== - dependencies: - bluebird "^3.1.1" - -constants-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= - -content-disposition@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" - integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== - dependencies: - safe-buffer "5.1.2" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= - -cookie@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" - integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== - -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - -copy-webpack-plugin@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz#e7f40dd8a68477d405dd1b7a854aae324b158bae" - integrity sha512-Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA== - dependencies: - cacache "^10.0.4" - find-cache-dir "^1.0.0" - globby "^7.1.1" - is-glob "^4.0.0" - loader-utils "^1.1.0" - minimatch "^3.0.4" - p-limit "^1.0.0" - serialize-javascript "^1.4.0" - -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cosmiconfig@^5.0.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.0" - -cosmiconfig@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" - integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.1.0" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.7.2" - -create-ecdh@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" - integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== - dependencies: - bn.js "^4.1.0" - elliptic "^6.5.3" - -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -cross-spawn@^5.0.1, cross-spawn@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^6.0.0, cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^7.0.0: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - -css-color-names@0.0.4, css-color-names@^0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= - -css-declaration-sorter@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" - integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== - dependencies: - postcss "^7.0.1" - timsort "^0.3.0" - -css-loader@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-1.0.1.tgz#6885bb5233b35ec47b006057da01cc640b6b79fe" - integrity sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw== - dependencies: - babel-code-frame "^6.26.0" - css-selector-tokenizer "^0.7.0" - icss-utils "^2.1.0" - loader-utils "^1.0.2" - lodash "^4.17.11" - postcss "^6.0.23" - postcss-modules-extract-imports "^1.2.0" - postcss-modules-local-by-default "^1.2.0" - postcss-modules-scope "^1.1.0" - postcss-modules-values "^1.3.0" - postcss-value-parser "^3.3.0" - source-list-map "^2.0.0" - -css-select-base-adapter@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" - integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== - -css-select@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" - integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== - dependencies: - boolbase "^1.0.0" - css-what "^3.2.1" - domutils "^1.7.0" - nth-check "^1.0.2" - -css-select@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.1.3.tgz#a70440f70317f2669118ad74ff105e65849c7067" - integrity sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA== - dependencies: - boolbase "^1.0.0" - css-what "^5.0.0" - domhandler "^4.2.0" - domutils "^2.6.0" - nth-check "^2.0.0" - -css-selector-tokenizer@^0.7.0: - version "0.7.3" - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz#735f26186e67c749aaf275783405cf0661fae8f1" - integrity sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg== - dependencies: - cssesc "^3.0.0" - fastparse "^1.1.2" - -css-tree@1.0.0-alpha.37: - version "1.0.0-alpha.37" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" - integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== - dependencies: - mdn-data "2.0.4" - source-map "^0.6.1" - -css-tree@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" - integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== - dependencies: - mdn-data "2.0.14" - source-map "^0.6.1" - -css-what@^3.2.1: - version "3.4.2" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" - integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== - -css-what@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.1.0.tgz#3f7b707aadf633baf62c2ceb8579b545bb40f7fe" - integrity sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -cssnano-preset-default@^4.0.0, cssnano-preset-default@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz#920622b1fc1e95a34e8838203f1397a504f2d3ff" - integrity sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ== - dependencies: - css-declaration-sorter "^4.0.1" - cssnano-util-raw-cache "^4.0.1" - postcss "^7.0.0" - postcss-calc "^7.0.1" - postcss-colormin "^4.0.3" - postcss-convert-values "^4.0.1" - postcss-discard-comments "^4.0.2" - postcss-discard-duplicates "^4.0.2" - postcss-discard-empty "^4.0.1" - postcss-discard-overridden "^4.0.1" - postcss-merge-longhand "^4.0.11" - postcss-merge-rules "^4.0.3" - postcss-minify-font-values "^4.0.2" - postcss-minify-gradients "^4.0.2" - postcss-minify-params "^4.0.2" - postcss-minify-selectors "^4.0.2" - postcss-normalize-charset "^4.0.1" - postcss-normalize-display-values "^4.0.2" - postcss-normalize-positions "^4.0.2" - postcss-normalize-repeat-style "^4.0.2" - postcss-normalize-string "^4.0.2" - postcss-normalize-timing-functions "^4.0.2" - postcss-normalize-unicode "^4.0.1" - postcss-normalize-url "^4.0.1" - postcss-normalize-whitespace "^4.0.2" - postcss-ordered-values "^4.1.2" - postcss-reduce-initial "^4.0.3" - postcss-reduce-transforms "^4.0.2" - postcss-svgo "^4.0.3" - postcss-unique-selectors "^4.0.1" - -cssnano-util-get-arguments@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" - integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= - -cssnano-util-get-match@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" - integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= - -cssnano-util-raw-cache@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" - integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== - dependencies: - postcss "^7.0.0" - -cssnano-util-same-parent@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" - integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== - -cssnano@^4.0.0, cssnano@^4.1.10: - version "4.1.11" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.11.tgz#c7b5f5b81da269cb1fd982cb960c1200910c9a99" - integrity sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g== - dependencies: - cosmiconfig "^5.0.0" - cssnano-preset-default "^4.0.8" - is-resolvable "^1.0.0" - postcss "^7.0.0" - -csso@^4.0.2: - version "4.2.0" - resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" - integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== - dependencies: - css-tree "^1.1.2" - -current-script-polyfill@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/current-script-polyfill/-/current-script-polyfill-1.0.0.tgz#f31cf7e4f3e218b0726e738ca92a02d3488ef615" - integrity sha1-8xz35PPiGLBybnOMqSoC00iO9hU= - -cyclist@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" - integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -de-indent@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" - integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0= - -debug@2.6.9, debug@^2.2.0, debug@^2.3.3: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@=3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@^3.1.0, debug@^3.1.1, debug@^3.2.6: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" - integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== - dependencies: - ms "2.1.2" - -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - -deep-equal@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" - integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== - dependencies: - is-arguments "^1.0.4" - is-date-object "^1.0.1" - is-regex "^1.0.4" - object-is "^1.0.1" - object-keys "^1.1.1" - regexp.prototype.flags "^1.2.0" - -deep-is@~0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -deepmerge@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753" - integrity sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ== - -deepmerge@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" - integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== - -deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== - -default-gateway@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" - integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== - dependencies: - execa "^1.0.0" - ip-regex "^2.1.0" - -default-gateway@^5.0.2: - version "5.0.5" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-5.0.5.tgz#4fd6bd5d2855d39b34cc5a59505486e9aafc9b10" - integrity sha512-z2RnruVmj8hVMmAnEJMTIJNijhKCDiGjbLP+BHJFOT7ld3Bo5qcIBpVYDniqhbMIIf+jZDlkP2MkPXiQy/DBLA== - dependencies: - execa "^3.3.0" - -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= - dependencies: - clone "^1.0.2" - -define-properties@^1.1.2, define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -del@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" - integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== - dependencies: - "@types/glob" "^7.1.1" - globby "^6.1.0" - is-path-cwd "^2.0.0" - is-path-in-cwd "^2.0.0" - p-map "^2.0.0" - pify "^4.0.1" - rimraf "^2.6.3" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -des.js@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" - integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= - -detect-node@^2.0.4: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" - integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -dir-glob@^2.0.0, dir-glob@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" - integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== - dependencies: - path-type "^3.0.0" - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= - -dns-packet@^1.3.1: - version "1.3.4" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.4.tgz#e3455065824a2507ba886c55a89963bb107dec6f" - integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA== - dependencies: - ip "^1.1.0" - safe-buffer "^5.0.1" - -dns-txt@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" - integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= - dependencies: - buffer-indexof "^1.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dom-converter@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" - integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== - dependencies: - utila "~0.4" - -dom-serializer@0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - -dom-serializer@^1.0.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" - integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.0" - entities "^2.0.0" - -domain-browser@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== - -domelementtype@1, domelementtype@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - -domelementtype@^2.0.1, domelementtype@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" - integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== - -domhandler@^4.0.0, domhandler@^4.2.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.2.tgz#e825d721d19a86b8c201a35264e226c678ee755f" - integrity sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w== - dependencies: - domelementtype "^2.2.0" - -domutils@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^2.5.2, domutils@^2.6.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" - integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.2.0" - -dot-prop@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - -dotenv-expand@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" - integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== - -dotenv@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-7.0.0.tgz#a2be3cd52736673206e8a85fb5210eea29628e7c" - integrity sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g== - -duplexer@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -easy-stack@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/easy-stack/-/easy-stack-1.0.1.tgz#8afe4264626988cabb11f3c704ccd0c835411066" - integrity sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w== - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - -ejs@^2.6.1: - version "2.7.4" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" - integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== - -electron-to-chromium@^1.3.886: - version "1.3.892" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.892.tgz#0e3f5bb1de577e2e5a6dffd5a4b278c4a735cd39" - integrity sha512-YDW4yIjdfMnbRoBjRZ/aNQYmT6JgQFLwmTSDRJMQdrY4MByEzppdXp3rnJ0g4LBWcsYTUvwKKClYN1ofZ0COOQ== - -elliptic@^6.5.3: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= - -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= - -end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enhanced-resolve@^4.0.0, enhanced-resolve@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" - integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.5.0" - tapable "^1.0.0" - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -errno@^0.1.3, errno@~0.1.7: - version "0.1.8" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" - integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== - dependencies: - prr "~1.0.1" - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -error-stack-parser@^2.0.2: - version "2.0.6" - resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8" - integrity sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ== - dependencies: - stackframe "^1.1.1" - -es-abstract@^1.17.2, es-abstract@^1.19.1: - version "1.19.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3" - integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - get-intrinsic "^1.1.1" - get-symbol-description "^1.0.0" - has "^1.0.3" - has-symbols "^1.0.2" - internal-slot "^1.0.3" - is-callable "^1.2.4" - is-negative-zero "^2.0.1" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.1" - is-string "^1.0.7" - is-weakref "^1.0.1" - object-inspect "^1.11.0" - object-keys "^1.1.1" - object.assign "^4.1.2" - string.prototype.trimend "^1.0.4" - string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.1" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -eslint-loader@^2.1.2: - version "2.2.1" - resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.2.1.tgz#28b9c12da54057af0845e2a6112701a2f6bf8337" - integrity sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg== - dependencies: - loader-fs-cache "^1.0.0" - loader-utils "^1.0.2" - object-assign "^4.0.1" - object-hash "^1.1.4" - rimraf "^2.6.1" - -eslint-plugin-vue@^4.7.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-4.7.1.tgz#c829b9fc62582c1897b5a0b94afd44ecca511e63" - integrity sha512-esETKhVMI7Vdli70Wt4bvAwnZBJeM0pxVX9Yb0wWKxdCJc2EADalVYK/q2FzMw8oKN0wPMdqVCKS8kmR89recA== - dependencies: - vue-eslint-parser "^2.0.3" - -eslint-plugin-vue@^5.0.0: - version "5.2.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-5.2.3.tgz#3ee7597d823b5478804b2feba9863b1b74273961" - integrity sha512-mGwMqbbJf0+VvpGR5Lllq0PMxvTdrZ/ZPjmhkacrCHbubJeJOt+T6E3HUzAifa2Mxi7RSdJfC9HFpOeSYVMMIw== - dependencies: - vue-eslint-parser "^5.0.0" - -eslint-scope@^3.7.1: - version "3.7.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535" - integrity sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-scope@^4.0.0, eslint-scope@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" - integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-utils@^1.3.1: - version "1.4.3" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" - integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint@^4.19.1: - version "4.19.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" - integrity sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ== - dependencies: - ajv "^5.3.0" - babel-code-frame "^6.22.0" - chalk "^2.1.0" - concat-stream "^1.6.0" - cross-spawn "^5.1.0" - debug "^3.1.0" - doctrine "^2.1.0" - eslint-scope "^3.7.1" - eslint-visitor-keys "^1.0.0" - espree "^3.5.4" - esquery "^1.0.0" - esutils "^2.0.2" - file-entry-cache "^2.0.0" - functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^11.0.1" - ignore "^3.3.3" - imurmurhash "^0.1.4" - inquirer "^3.0.6" - is-resolvable "^1.0.0" - js-yaml "^3.9.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.4" - minimatch "^3.0.2" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - pluralize "^7.0.0" - progress "^2.0.0" - regexpp "^1.0.1" - require-uncached "^1.0.3" - semver "^5.3.0" - strip-ansi "^4.0.0" - strip-json-comments "~2.0.1" - table "4.0.2" - text-table "~0.2.0" - -eslint@^5.16.0: - version "5.16.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" - integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== - dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.9.1" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^4.0.1" - doctrine "^3.0.0" - eslint-scope "^4.0.3" - eslint-utils "^1.3.1" - eslint-visitor-keys "^1.0.0" - espree "^5.0.1" - esquery "^1.0.1" - esutils "^2.0.2" - file-entry-cache "^5.0.1" - functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^11.7.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - inquirer "^6.2.2" - js-yaml "^3.13.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.11" - minimatch "^3.0.4" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - progress "^2.0.0" - regexpp "^2.0.1" - semver "^5.5.1" - strip-ansi "^4.0.0" - strip-json-comments "^2.0.1" - table "^5.2.3" - text-table "^0.2.0" - -espree@^3.5.2, espree@^3.5.4: - version "3.5.4" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" - integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A== - dependencies: - acorn "^5.5.0" - acorn-jsx "^3.0.0" - -espree@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-4.1.0.tgz#728d5451e0fd156c04384a7ad89ed51ff54eb25f" - integrity sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w== - dependencies: - acorn "^6.0.2" - acorn-jsx "^5.0.0" - eslint-visitor-keys "^1.0.0" - -espree@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" - integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== - dependencies: - acorn "^6.0.7" - acorn-jsx "^5.0.0" - eslint-visitor-keys "^1.0.0" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.0.0, esquery@^1.0.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.1.0, esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= - -event-pubsub@4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/event-pubsub/-/event-pubsub-4.3.0.tgz#f68d816bc29f1ec02c539dc58c8dd40ce72cb36e" - integrity sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ== - -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -events@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -eventsource@^1.0.7: - version "1.1.0" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.0.tgz#00e8ca7c92109e94b0ddf32dac677d841028cfaf" - integrity sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg== - dependencies: - original "^1.0.0" - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -execa@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" - integrity sha1-2NdrvBtVIX7RkP1t1J08d07PyNo= - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^3.3.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" - integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - p-finally "^2.0.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -express@^4.16.3, express@^4.17.1: - version "4.17.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" - integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== - dependencies: - accepts "~1.3.7" - array-flatten "1.1.1" - body-parser "1.19.0" - content-disposition "0.5.3" - content-type "~1.0.4" - cookie "0.4.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~1.1.2" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "~1.1.2" - fresh "0.5.2" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.5" - qs "6.7.0" - range-parser "~1.2.1" - safe-buffer "5.1.2" - send "0.17.1" - serve-static "1.14.1" - setprototypeof "1.1.1" - statuses "~1.5.0" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -external-editor@^2.0.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" - integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== - dependencies: - chardet "^0.4.0" - iconv-lite "^0.4.17" - tmp "^0.0.33" - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" - integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== - -fast-deep-equal@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" - integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= - -fast-deep-equal@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^2.2.6: - version "2.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" - integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== - dependencies: - "@mrmlnc/readdir-enhanced" "^2.2.1" - "@nodelib/fs.stat" "^1.1.2" - glob-parent "^3.1.0" - is-glob "^4.0.0" - merge2 "^1.2.3" - micromatch "^3.1.10" - -fast-glob@^3.1.1: - version "3.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" - integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== - dependencies: - "@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" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fastparse@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" - integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== - -fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== - dependencies: - reusify "^1.0.4" - -faye-websocket@^0.11.3: - version "0.11.4" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" - integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== - dependencies: - websocket-driver ">=0.5.1" - -figgy-pudding@^3.5.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" - integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" - integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E= - dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" - -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== - dependencies: - flat-cache "^2.0.1" - -file-loader@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-3.0.1.tgz#f8e0ba0b599918b51adfe45d66d1e771ad560faa" - integrity sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw== - dependencies: - loader-utils "^1.0.2" - schema-utils "^1.0.0" - -file-saver@^2.0.2: - version "2.0.5" - resolved "https://registry.yarnpkg.com/file-saver/-/file-saver-2.0.5.tgz#d61cfe2ce059f414d899e9dd6d4107ee25670c38" - integrity sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA== - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -filesize@^3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" - integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.3" - statuses "~1.5.0" - unpipe "~1.0.0" - -find-cache-dir@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" - integrity sha1-yN765XyKUqinhPnjHFfHQumToLk= - dependencies: - commondir "^1.0.1" - mkdirp "^0.5.1" - pkg-dir "^1.0.0" - -find-cache-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" - integrity sha1-kojj6ePMN0hxfTnq3hfPcfww7m8= - dependencies: - commondir "^1.0.1" - make-dir "^1.0.0" - pkg-dir "^2.0.0" - -find-cache-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" - integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== - dependencies: - commondir "^1.0.1" - make-dir "^2.0.0" - pkg-dir "^3.0.0" - -find-cache-dir@^3.0.0: - version "3.3.2" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" - integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -flat-cache@^1.2.1: - version "1.3.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f" - integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg== - dependencies: - circular-json "^0.3.1" - graceful-fs "^4.1.2" - rimraf "~2.6.2" - write "^0.2.1" - -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== - dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" - -flatted@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== - -flush-write-stream@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" - -follow-redirects@1.5.10: - version "1.5.10" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" - integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== - dependencies: - debug "=3.1.0" - -follow-redirects@^1.0.0: - version "1.14.5" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.5.tgz#f09a5848981d3c772b5392309778523f8d85c381" - integrity sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA== - -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -"fork-ts-checker-webpack-plugin-v5@npm:fork-ts-checker-webpack-plugin@^5.0.11": - version "5.2.1" - resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-5.2.1.tgz#79326d869797906fa8b24e2abcf9421fc805450d" - integrity sha512-SVi+ZAQOGbtAsUWrZvGzz38ga2YqjWvca1pXQFUArIVXqli0lLoDQ8uS0wg0kSpcwpZmaW5jVCZXQebkyUQSsw== - dependencies: - "@babel/code-frame" "^7.8.3" - "@types/json-schema" "^7.0.5" - chalk "^4.1.0" - cosmiconfig "^6.0.0" - deepmerge "^4.2.2" - fs-extra "^9.0.0" - memfs "^3.1.2" - minimatch "^3.0.4" - schema-utils "2.7.0" - semver "^7.3.2" - tapable "^1.0.0" - -fork-ts-checker-webpack-plugin@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-3.1.1.tgz#a1642c0d3e65f50c2cc1742e9c0a80f441f86b19" - integrity sha512-DuVkPNrM12jR41KM2e+N+styka0EgLkTnXmNcXdgOM37vtGeY+oCBK/Jx0hzSeEU6memFCtWb4htrHPMDfwwUQ== - dependencies: - babel-code-frame "^6.22.0" - chalk "^2.4.1" - chokidar "^3.3.0" - micromatch "^3.1.10" - minimatch "^3.0.4" - semver "^5.6.0" - tapable "^1.0.0" - worker-rpc "^0.1.0" - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= - -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - -fs-extra@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^9.0.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-monkey@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" - integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== - -fs-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= - dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@^1.2.7: - version "1.2.13" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" - integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" - -fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -get-caller-file@^2.0.1, get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= - -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-to-regexp@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" - integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= - -glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^11.0.1, globals@^11.1.0, globals@^11.7.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globby@^11.0.3: - version "11.0.4" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" - integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" - slash "^3.0.0" - -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -globby@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" - integrity sha1-+yzP+UAfhgCUXfral0QMypcrhoA= - dependencies: - array-union "^1.0.1" - dir-glob "^2.0.0" - glob "^7.1.2" - ignore "^3.3.5" - pify "^3.0.0" - slash "^1.0.0" - -globby@^9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" - integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg== - dependencies: - "@types/glob" "^7.1.1" - array-union "^1.0.2" - dir-glob "^2.2.2" - fast-glob "^2.2.6" - glob "^7.1.3" - ignore "^4.0.3" - pify "^4.0.1" - slash "^2.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.8" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" - integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== - -gzip-size@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" - integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== - dependencies: - duplexer "^0.1.1" - pify "^4.0.1" - -handle-thing@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" - integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= - dependencies: - ansi-regex "^2.0.0" - -has-bigints@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" - integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-symbols@^1.0.1, has-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" - integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.0, has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash-sum@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04" - integrity sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ= - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -he@1.2.x, he@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -hex-color-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" - integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== - -highlight.js@^10.7.1: - version "10.7.3" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" - integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== - -highlight.js@^9.12.0: - version "9.18.5" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.18.5.tgz#d18a359867f378c138d6819edfc2a8acd5f29825" - integrity sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA== - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -hoopy@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" - integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== - -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -hpack.js@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" - integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= - dependencies: - inherits "^2.0.1" - obuf "^1.0.0" - readable-stream "^2.0.1" - wbuf "^1.1.0" - -hsl-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" - integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= - -hsla-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" - integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= - -html-entities@^1.3.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" - integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== - -html-minifier@^3.2.3: - version "3.5.21" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c" - integrity sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA== - dependencies: - camel-case "3.0.x" - clean-css "4.2.x" - commander "2.17.x" - he "1.2.x" - param-case "2.1.x" - relateurl "0.2.x" - uglify-js "3.4.x" - -html-webpack-plugin@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz#b01abbd723acaaa7b37b6af4492ebda03d9dd37b" - integrity sha1-sBq71yOsqqeze2r0SS69oD2d03s= - dependencies: - html-minifier "^3.2.3" - loader-utils "^0.2.16" - lodash "^4.17.3" - pretty-error "^2.0.2" - tapable "^1.0.0" - toposort "^1.0.0" - util.promisify "1.0.0" - -htmlparser2@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" - integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.0.0" - domutils "^2.5.2" - entities "^2.0.0" - -http-deceiver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" - integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= - -http-errors@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" - integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-parser-js@>=0.5.1: - version "0.5.3" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" - integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== - -http-proxy-middleware@0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" - integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== - dependencies: - http-proxy "^1.17.0" - is-glob "^4.0.0" - lodash "^4.17.11" - micromatch "^3.1.10" - -http-proxy@^1.17.0: - version "1.18.1" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" - integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== - dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= - -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== - -iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -icss-replace-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" - integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= - -icss-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962" - integrity sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI= - dependencies: - postcss "^6.0.1" - -ieee754@^1.1.4: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= - -ignore@^3.3.3, ignore@^3.3.5: - version "3.3.10" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" - integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== - -ignore@^4.0.3, ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.1.4, ignore@^5.1.8: - version "5.1.9" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.9.tgz#9ec1a5cbe8e1446ec60d4420060d43aa6e7382fb" - integrity sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ== - -import-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" - integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= - dependencies: - import-from "^2.1.0" - -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" - -import-fresh@^3.0.0, import-fresh@^3.1.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-from@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" - integrity sha1-M1238qev/VOqpHHUuAId7ja387E= - dependencies: - resolve-from "^3.0.0" - -import-local@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" - integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== - dependencies: - pkg-dir "^3.0.0" - resolve-cwd "^2.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= - -infer-owner@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -inquirer@^3.0.6: - version "3.3.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" - integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ== - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.0" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^2.0.4" - figures "^2.0.0" - lodash "^4.3.0" - mute-stream "0.0.7" - run-async "^2.2.0" - rx-lite "^4.0.8" - rx-lite-aggregates "^4.0.8" - string-width "^2.1.0" - strip-ansi "^4.0.0" - through "^2.3.6" - -inquirer@^6.2.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" - integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== - dependencies: - ansi-escapes "^3.2.0" - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.12" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" - strip-ansi "^5.1.0" - through "^2.3.6" - -internal-ip@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" - integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== - dependencies: - default-gateway "^4.2.0" - ipaddr.js "^1.9.0" - -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== - dependencies: - get-intrinsic "^1.1.0" - has "^1.0.3" - side-channel "^1.0.4" - -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= - -ip@^1.1.0, ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= - -ipaddr.js@1.9.1, ipaddr.js@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-absolute-url@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" - integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= - -is-absolute-url@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" - integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - -is-arguments@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= - dependencies: - binary-extensions "^1.0.0" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-buffer@^2.0.2: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - -is-callable@^1.1.4, is-callable@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" - integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== - -is-ci@^1.0.10: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" - integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== - dependencies: - ci-info "^1.5.0" - -is-color-stop@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" - integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= - dependencies: - css-color-names "^0.0.4" - hex-color-regex "^1.1.0" - hsl-regex "^1.0.0" - hsla-regex "^1.0.0" - rgb-regex "^1.0.1" - rgba-regex "^1.0.0" - -is-core-module@^2.2.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548" - integrity sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw== - dependencies: - has "^1.0.3" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= - -is-docker@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-negative-zero@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" - integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== - -is-number-object@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" - integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== - dependencies: - has-tostringtag "^1.0.0" - -is-negative-zero@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" - integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== - -is-number-object@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" - integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== - -is-negative-zero@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" - integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== - -is-number-object@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" - integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== - -is-negative-zero@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" - integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== - -is-number-object@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" - integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== - -is-negative-zero@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" - integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== - -is-number-object@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" - integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-path-cwd@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -is-path-in-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" - integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== - dependencies: - is-path-inside "^2.1.0" - -is-path-inside@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" - integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== - dependencies: - path-is-inside "^1.0.2" - -is-plain-obj@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= - -is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-regex@^1.0.4, is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-resolvable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== - -is-shared-array-buffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6" - integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA== - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-weakref@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.1.tgz#842dba4ec17fa9ac9850df2d6efbc1737274f2a2" - integrity sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ== - dependencies: - call-bind "^1.0.0" - -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= - -is-wsl@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - -javascript-stringify@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-1.6.0.tgz#142d111f3a6e3dae8f4a9afd77d45855b5a9cce3" - integrity sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM= - -js-message@1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/js-message/-/js-message-1.0.7.tgz#fbddd053c7a47021871bb8b2c95397cc17c20e47" - integrity sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA== - -js-queue@2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/js-queue/-/js-queue-2.0.2.tgz#0be590338f903b36c73d33c31883a821412cd482" - integrity sha512-pbKLsbCfi7kriM3s1J4DDCo7jQkI58zPLHi0heXPzPlj0hjUsm+FesPUbE0DSbIVIK503A36aUBoCN7eMFedkA== - dependencies: - easy-stack "^1.0.1" - -js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.9.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-traverse@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" - integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -json3@^3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" - integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== - -json5@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= - -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== - dependencies: - minimist "^1.2.0" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -killable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" - integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -launch-editor-middleware@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/launch-editor-middleware/-/launch-editor-middleware-2.2.1.tgz#e14b07e6c7154b0a4b86a0fd345784e45804c157" - integrity sha512-s0UO2/gEGiCgei3/2UN3SMuUj1phjQN8lcpnvgLSz26fAzNWPQ6Nf/kF5IFClnfU2ehp6LrmKdMU/beveO+2jg== - dependencies: - launch-editor "^2.2.1" - -launch-editor@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.2.1.tgz#871b5a3ee39d6680fcc26d37930b6eeda89db0ca" - integrity sha512-On+V7K2uZK6wK7x691ycSUbLD/FyKKelArkbaAMSSJU8JmqmhwN2+mnJDNINuJWSrh2L0kDk+ZQtbC/gOWUwLw== - dependencies: - chalk "^2.3.0" - shell-quote "^1.6.1" - -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= - -loader-fs-cache@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz#f08657646d607078be2f0a032f8bd69dd6f277d9" - integrity sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA== - dependencies: - find-cache-dir "^0.1.1" - mkdirp "^0.5.1" - -loader-runner@^2.3.1, loader-runner@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" - integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== - -loader-utils@^0.2.16: - version "0.2.17" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" - integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g= - dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - object-assign "^4.0.1" - -loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" - integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^1.0.1" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lodash.defaultsdeep@^4.6.1: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6" - integrity sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA== - -lodash.mapvalues@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" - integrity sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw= - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= - -lodash.transform@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.transform/-/lodash.transform-4.6.0.tgz#12306422f63324aed8483d3f38332b5f670547a0" - integrity sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A= - -lodash.unescape@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" - integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw= - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= - -lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.3.0: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== - dependencies: - chalk "^2.0.1" - -loglevel@^1.6.8: - version "1.7.1" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" - integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== - -lower-case@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" - integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= - -lru-cache@^4.0.1, lru-cache@^4.1.1, lru-cache@^4.1.2: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== - dependencies: - pify "^3.0.0" - -make-dir@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -make-dir@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -mdn-data@2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" - integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== - -mdn-data@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" - integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= - -memfs@^3.1.2: - version "3.3.0" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.3.0.tgz#4da2d1fc40a04b170a56622c7164c6be2c4cbef2" - integrity sha512-BEE62uMfKOavX3iG7GYX43QJ+hAeeWnwIAuJ/R6q96jaMtiLzhsxHJC8B1L7fK7Pt/vXDRwb3SG/yBpNGDPqzg== - dependencies: - fs-monkey "1.0.3" - -memory-fs@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -memory-fs@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" - integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= - -merge-source-map@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" - integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== - dependencies: - source-map "^0.6.1" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.2.3, merge2@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= - -microevent.ts@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0" - integrity sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g== - -micromatch@^3.1.10, micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -micromatch@^4.0.0, micromatch@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" - integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== - dependencies: - braces "^3.0.1" - picomatch "^2.2.3" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -mime-db@1.51.0, "mime-db@>= 1.43.0 < 2": - version "1.51.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" - integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== - -mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.34" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" - integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== - dependencies: - mime-db "1.51.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mime@^2.0.3, mime@^2.4.4: - version "2.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" - integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mini-css-extract-plugin@^0.8.0: - version "0.8.2" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.2.tgz#a875e169beb27c88af77dd962771c9eedc3da161" - integrity sha512-a3Y4of27Wz+mqK3qrcd3VhYz6cU0iW5x3Sgvqzbj+XmlrSizmvu8QQMl5oMYJjgHOC4iyt+w7l4umP+dQeW3bw== - dependencies: - loader-utils "^1.1.0" - normalize-url "1.9.1" - schema-utils "^1.0.0" - webpack-sources "^1.1.0" - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= - -minimatch@^3.0.2, minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.0, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -mississippi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f" - integrity sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw== - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^2.0.1" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mississippi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" - integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^3.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -multicast-dns-service-types@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" - integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= - -multicast-dns@^6.0.1: - version "6.2.3" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" - integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== - dependencies: - dns-packet "^1.3.1" - thunky "^1.0.2" - -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= - -mz@^2.4.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -nan@^2.12.1: - version "2.15.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" - integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -negotiator@0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" - integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== - -neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -no-case@^2.2.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" - integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== - dependencies: - lower-case "^1.1.1" - -node-forge@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" - integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== - -node-ipc@^9.1.1: - version "9.2.1" - resolved "https://registry.yarnpkg.com/node-ipc/-/node-ipc-9.2.1.tgz#b32f66115f9d6ce841dc4ec2009d6a733f98bb6b" - integrity sha512-mJzaM6O3xHf9VT8BULvJSbdVbmHUKRNOH7zDDkCrA1/T+CVjq2WVIDfLt0azZRXpgArJtl3rtmEozrbXPZ9GaQ== - dependencies: - event-pubsub "4.3.0" - js-message "1.0.7" - js-queue "2.0.2" - -node-libs-browser@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" - integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== - dependencies: - assert "^1.1.1" - browserify-zlib "^0.2.0" - buffer "^4.3.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "^3.11.0" - domain-browser "^1.1.1" - events "^3.0.0" - https-browserify "^1.0.0" - os-browserify "^0.3.0" - path-browserify "0.0.1" - process "^0.11.10" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.3.3" - stream-browserify "^2.0.1" - stream-http "^2.7.2" - string_decoder "^1.0.0" - timers-browserify "^2.0.4" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.11.0" - vm-browserify "^1.0.1" - -node-releases@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" - integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== - -normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" - integrity sha1-MtDkcvkf80VwHBWoMRAY07CpA3k= - -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= - -normalize-url@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" - integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= - dependencies: - object-assign "^4.0.1" - prepend-http "^1.0.0" - query-string "^4.1.0" - sort-keys "^1.0.0" - -normalize-url@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" - integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - -npm-run-path@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -nth-check@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - -nth-check@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" - integrity sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w== - dependencies: - boolbase "^1.0.0" - -num2fraction@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-hash@^1.1.4: - version "1.3.1" - resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" - integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== - -object-inspect@^1.11.0, object-inspect@^1.9.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" - integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== - -object-is@^1.0.1: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -object-keys@^1.0.12, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - -object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" - -object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: - version "2.1.3" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz#b223cf38e17fefb97a63c10c91df72ccb386df9e" - integrity sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - -object.values@^1.1.0: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" - integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - -obuf@^1.0.0, obuf@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" - integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - -onetime@^5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -open@^6.3.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" - integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg== - dependencies: - is-wsl "^1.1.0" - -opener@^1.5.1: - version "1.5.2" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" - integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== - -opn@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" - integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== - dependencies: - is-wsl "^1.1.0" - -optionator@^0.8.2: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - -ora@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318" - integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg== - dependencies: - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-spinners "^2.0.0" - log-symbols "^2.2.0" - strip-ansi "^5.2.0" - wcwidth "^1.0.1" - -original@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" - integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== - dependencies: - url-parse "^1.4.3" - -os-browserify@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - -p-finally@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" - integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== - -p-limit@^1.0.0, p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-limit@^2.0.0, p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-map@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== - -p-retry@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" - integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== - dependencies: - retry "^0.12.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -pako@~1.0.5: - version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - -parallel-transform@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" - integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== - dependencies: - cyclist "^1.0.1" - inherits "^2.0.3" - readable-stream "^2.1.5" - -param-case@2.1.x: - version "2.1.1" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" - integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= - dependencies: - no-case "^2.2.0" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-asn1@^5.0.0, parse-asn1@^5.1.5: - version "5.1.6" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" - integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== - dependencies: - asn1.js "^5.2.0" - browserify-aes "^1.0.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parse5-htmlparser2-tree-adapter@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" - integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== - dependencies: - parse5 "^6.0.1" - -parse5@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" - integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== - -parse5@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - -parseurl@~1.3.2, parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -path-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" - integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= - dependencies: - pinkie-promise "^2.0.0" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pbkdf2@^3.0.3: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" - integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - -picocolors@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" - integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" - integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - -pkg-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" - integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q= - dependencies: - find-up "^1.0.0" - -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= - dependencies: - find-up "^2.1.0" - -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.0.0" - -pkg-dir@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -pluralize@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" - integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow== - -portfinder@^1.0.20, portfinder@^1.0.26: - version "1.0.28" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" - integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== - dependencies: - async "^2.6.2" - debug "^3.1.1" - mkdirp "^0.5.5" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - -postcss-calc@^7.0.1: - version "7.0.5" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.5.tgz#f8a6e99f12e619c2ebc23cf6c486fdc15860933e" - integrity sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg== - dependencies: - postcss "^7.0.27" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.0.2" - -postcss-colormin@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" - integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== - dependencies: - browserslist "^4.0.0" - color "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-convert-values@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" - integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-discard-comments@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" - integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== - dependencies: - postcss "^7.0.0" - -postcss-discard-duplicates@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" - integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== - dependencies: - postcss "^7.0.0" - -postcss-discard-empty@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" - integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== - dependencies: - postcss "^7.0.0" - -postcss-discard-overridden@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" - integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== - dependencies: - postcss "^7.0.0" - -postcss-load-config@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a" - integrity sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw== - dependencies: - cosmiconfig "^5.0.0" - import-cwd "^2.0.0" - -postcss-loader@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" - integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== - dependencies: - loader-utils "^1.1.0" - postcss "^7.0.0" - postcss-load-config "^2.0.0" - schema-utils "^1.0.0" - -postcss-merge-longhand@^4.0.11: - version "4.0.11" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" - integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== - dependencies: - css-color-names "0.0.4" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - stylehacks "^4.0.0" - -postcss-merge-rules@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" - integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== - dependencies: - browserslist "^4.0.0" - caniuse-api "^3.0.0" - cssnano-util-same-parent "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - vendors "^1.0.0" - -postcss-minify-font-values@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" - integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-minify-gradients@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" - integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== - dependencies: - cssnano-util-get-arguments "^4.0.0" - is-color-stop "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-minify-params@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" - integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== - dependencies: - alphanum-sort "^1.0.0" - browserslist "^4.0.0" - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - uniqs "^2.0.0" - -postcss-minify-selectors@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" - integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== - dependencies: - alphanum-sort "^1.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - -postcss-modules-extract-imports@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz#dc87e34148ec7eab5f791f7cd5849833375b741a" - integrity sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw== - dependencies: - postcss "^6.0.1" - -postcss-modules-local-by-default@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" - integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk= - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - -postcss-modules-scope@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" - integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A= - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - -postcss-modules-values@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" - integrity sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA= - dependencies: - icss-replace-symbols "^1.1.0" - postcss "^6.0.1" - -postcss-normalize-charset@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" - integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== - dependencies: - postcss "^7.0.0" - -postcss-normalize-display-values@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" - integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== - dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-positions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" - integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== - dependencies: - cssnano-util-get-arguments "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-repeat-style@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" - integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== - dependencies: - cssnano-util-get-arguments "^4.0.0" - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-string@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" - integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== - dependencies: - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-timing-functions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" - integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== - dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-unicode@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" - integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== - dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-url@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" - integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== - dependencies: - is-absolute-url "^2.0.0" - normalize-url "^3.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-whitespace@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" - integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-ordered-values@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" - integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== - dependencies: - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-reduce-initial@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" - integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== - dependencies: - browserslist "^4.0.0" - caniuse-api "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - -postcss-reduce-transforms@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" - integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== - dependencies: - cssnano-util-get-match "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-selector-parser@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" - integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== - dependencies: - dot-prop "^5.2.0" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-selector-parser@^6.0.2: - version "6.0.6" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz#2c5bba8174ac2f6981ab631a42ab0ee54af332ea" - integrity sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-svgo@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.3.tgz#343a2cdbac9505d416243d496f724f38894c941e" - integrity sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - svgo "^1.0.0" - -postcss-unique-selectors@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" - integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== - dependencies: - alphanum-sort "^1.0.0" - postcss "^7.0.0" - uniqs "^2.0.0" - -postcss-value-parser@^3.0.0, postcss-value-parser@^3.3.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" - integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== - -postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" - integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== - -postcss@^6.0.1, postcss@^6.0.23: - version "6.0.23" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" - integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== - dependencies: - chalk "^2.4.1" - source-map "^0.6.1" - supports-color "^5.4.0" - -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.36: - version "7.0.39" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309" - integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== - dependencies: - picocolors "^0.2.1" - source-map "^0.6.1" - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -prepend-http@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= - -"prettier@^1.18.2 || ^2.0.0": - version "2.4.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.4.1.tgz#671e11c89c14a4cfc876ce564106c4a6726c9f5c" - integrity sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA== - -pretty-error@^2.0.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" - integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw== - dependencies: - lodash "^4.17.20" - renderkid "^2.0.4" - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= - -proxy-addr@~2.0.5: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - -psl@^1.1.28: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== - -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - -pump@^2.0.0, pump@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^1.3.3: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= - -punycode@^1.2.4: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - -punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -q@^1.1.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= - -qs@6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" - integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== - -qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== - -query-string@^4.1.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" - integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= - dependencies: - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - -querystring-es3@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= - -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -range-parser@^1.2.1, range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" - integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== - dependencies: - bytes "3.1.0" - http-errors "1.7.2" - iconv-lite "0.4.24" - unpipe "1.0.0" - -read-pkg@^5.0.0, read-pkg@^5.1.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.0.6, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexp.prototype.flags@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" - integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -regexpp@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab" - integrity sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw== - -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== - -regexpp@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -relateurl@0.2.x: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -renderkid@^2.0.4: - version "2.0.7" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.7.tgz#464f276a6bdcee606f4a15993f9b29fc74ca8609" - integrity sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ== - dependencies: - css-select "^4.1.3" - dom-converter "^0.2.0" - htmlparser2 "^6.1.0" - lodash "^4.17.21" - strip-ansi "^3.0.1" - -repeat-element@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" - integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -request-promise-core@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" - integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== - dependencies: - lodash "^4.17.19" - -request-promise-native@^1.0.7: - version "1.0.9" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" - integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== - dependencies: - request-promise-core "1.1.4" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - -request@^2.87.0, request@^2.88.2: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -require-uncached@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" - integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM= - dependencies: - caller-path "^0.1.0" - resolve-from "^1.0.0" - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= - -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= - dependencies: - resolve-from "^3.0.0" - -resolve-from@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" - integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY= - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@^1.10.0, resolve@^1.12.0, resolve@^1.3.2: - version "1.20.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== - dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rgb-regex@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" - integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= - -rgba-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" - integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= - -rimraf@2.6.3, rimraf@~2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -run-async@^2.2.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= - dependencies: - aproba "^1.1.1" - -rx-lite-aggregates@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" - integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74= - dependencies: - rx-lite "*" - -rx-lite@*, rx-lite@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" - integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= - -rxjs@^6.4.0: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sax@~1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - -schema-utils@2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" - integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== - dependencies: - "@types/json-schema" "^7.0.4" - ajv "^6.12.2" - ajv-keywords "^3.4.1" - -schema-utils@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" - integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== - dependencies: - ajv "^6.1.0" - ajv-errors "^1.0.0" - ajv-keywords "^3.1.0" - -schema-utils@^2.0.0: - version "2.7.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" - integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== - dependencies: - "@types/json-schema" "^7.0.5" - ajv "^6.12.4" - ajv-keywords "^3.5.2" - -select-hose@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" - integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= - -selfsigned@^1.10.8: - version "1.10.11" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.11.tgz#24929cd906fe0f44b6d01fb23999a739537acbe9" - integrity sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA== - dependencies: - node-forge "^0.10.0" - -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" - integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== - -semver@^6.0.0, semver@^6.1.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.3.2, semver@^7.3.5: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - -send@0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" - integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== - dependencies: - debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.7.2" - mime "1.6.0" - ms "2.1.1" - on-finished "~2.3.0" - range-parser "~1.2.1" - statuses "~1.5.0" - -serialize-javascript@^1.4.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb" - integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A== - -serialize-javascript@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== - dependencies: - randombytes "^2.1.0" - -serve-index@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= - dependencies: - accepts "~1.3.4" - batch "0.6.1" - debug "2.6.9" - escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" - -serve-static@1.14.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" - integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.17.1" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setimmediate@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== - -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== - -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shell-quote@^1.6.1: - version "1.7.3" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" - integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.5" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.5.tgz#9e3e8cc0c75a99472b44321033a7702e7738252f" - integrity sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ== - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= - dependencies: - is-arrayish "^0.3.1" - -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= - -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" - integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" - integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== - dependencies: - is-fullwidth-code-point "^2.0.0" - -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -sockjs-client@^1.5.0: - version "1.5.2" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.5.2.tgz#4bc48c2da9ce4769f19dc723396b50f5c12330a3" - integrity sha512-ZzRxPBISQE7RpzlH4tKJMQbHM9pabHluk0WBaxAQ+wm/UieeBVBou0p4wVnSQGN9QmpAZygQ0cDIypWuqOFmFQ== - dependencies: - debug "^3.2.6" - eventsource "^1.0.7" - faye-websocket "^0.11.3" - inherits "^2.0.4" - json3 "^3.3.3" - url-parse "^1.5.3" - -sockjs@^0.3.21: - version "0.3.21" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.21.tgz#b34ffb98e796930b60a0cfa11904d6a339a7d417" - integrity sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw== - dependencies: - faye-websocket "^0.11.3" - uuid "^3.4.0" - websocket-driver "^0.7.4" - -sort-keys@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" - integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= - dependencies: - is-plain-obj "^1.0.0" - -source-list-map@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== - -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@~0.5.12: - version "0.5.20" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.20.tgz#12166089f8f5e5e8c56926b377633392dd2cb6c9" - integrity sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" - integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== - -source-map@^0.5.0, source-map@^0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.10" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz#0d9becccde7003d6c658d487dd48a32f0bf3014b" - integrity sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA== - -spdy-transport@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" - integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== - dependencies: - debug "^4.1.0" - detect-node "^2.0.4" - hpack.js "^2.1.6" - obuf "^1.1.2" - readable-stream "^3.0.6" - wbuf "^1.7.3" - -spdy@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" - integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== - dependencies: - debug "^4.1.0" - handle-thing "^2.0.0" - http-deceiver "^1.2.7" - select-hose "^2.0.0" - spdy-transport "^3.0.0" - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -ssri@^5.2.4: - version "5.3.0" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.3.0.tgz#ba3872c9c6d33a0704a7d71ff045e5ec48999d06" - integrity sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ== - dependencies: - safe-buffer "^5.1.1" - -ssri@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" - integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== - dependencies: - figgy-pudding "^3.5.1" - -stable@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" - integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== - -stackframe@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303" - integrity sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA== - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= - -stream-browserify@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" - integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - -stream-each@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" - integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-http@^2.7.2: - version "2.8.3" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" - integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.6" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= - -string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.1.0, string-width@^4.2.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string.prototype.padend@^3.0.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz#997a6de12c92c7cb34dc8a201a6c53d9bd88a5f1" - integrity sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - -string.prototype.padstart@^3.0.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/string.prototype.padstart/-/string.prototype.padstart-3.1.3.tgz#4551d0117d9501692ec6000b15056ac3f816cfa5" - integrity sha512-NZydyOMtYxpTjGqp0VN5PYUF/tsU15yDMZnUdj16qRUIUiMJkHHSDElYyQFrMu+/WloTpA7MQSiADhBicDfaoA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - -string.prototype.trimend@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" - integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -string.prototype.trimstart@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" - integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -string_decoder@^1.0.0, string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5, strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-indent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" - integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= - -strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -stylehacks@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" - integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== - dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= - -supports-color@^5.3.0, supports-color@^5.4.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -svgo@^1.0.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" - integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== - dependencies: - chalk "^2.4.1" - coa "^2.0.2" - css-select "^2.0.0" - css-select-base-adapter "^0.1.1" - css-tree "1.0.0-alpha.37" - csso "^4.0.2" - js-yaml "^3.13.1" - mkdirp "~0.5.1" - object.values "^1.1.0" - sax "~1.2.4" - stable "^0.1.8" - unquote "~1.1.1" - util.promisify "~1.0.0" - -table@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" - integrity sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA== - dependencies: - ajv "^5.2.3" - ajv-keywords "^2.1.0" - chalk "^2.1.0" - lodash "^4.17.4" - slice-ansi "1.0.0" - string-width "^2.1.1" - -table@^5.2.3: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== - dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" - -tapable@^1.0.0, tapable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" - integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== - -terser-webpack-plugin@^1.2.3, terser-webpack-plugin@^1.4.3: - version "1.4.5" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" - integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== - dependencies: - cacache "^12.0.2" - find-cache-dir "^2.1.0" - is-wsl "^1.1.0" - schema-utils "^1.0.0" - serialize-javascript "^4.0.0" - source-map "^0.6.1" - terser "^4.1.2" - webpack-sources "^1.4.0" - worker-farm "^1.7.0" - -terser@^4.1.2: - version "4.8.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" - integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== - dependencies: - commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" - -text-table@^0.2.0, text-table@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - -thread-loader@^2.1.2, thread-loader@^2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/thread-loader/-/thread-loader-2.1.3.tgz#cbd2c139fc2b2de6e9d28f62286ab770c1acbdda" - integrity sha512-wNrVKH2Lcf8ZrWxDF/khdlLlsTMczdcwPA9VEK4c2exlEPynYWxi9op3nPTo5lAnDIkE0rQEB3VBP+4Zncc9Hg== - dependencies: - loader-runner "^2.3.1" - loader-utils "^1.1.0" - neo-async "^2.6.0" - -through2@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -thunky@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" - integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== - -timers-browserify@^2.0.4: - version "2.0.12" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" - integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== - dependencies: - setimmediate "^1.0.4" - -timsort@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" - integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== - -toposort@^1.0.0: - version "1.0.7" - resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" - integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk= - -tough-cookie@^2.3.3, tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -tryer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" - integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== - -ts-loader@^6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-6.2.2.tgz#dffa3879b01a1a1e0a4b85e2b8421dc0dfff1c58" - integrity sha512-HDo5kXZCBml3EUPcc7RlZOV/JGlLHwppTLEHb3SHnr5V7NXD4klMEkrhJe5wgRbaWsSXi+Y1SIBN/K9B6zWGWQ== - dependencies: - chalk "^2.3.0" - enhanced-resolve "^4.0.0" - loader-utils "^1.0.2" - micromatch "^4.0.0" - semver "^6.0.0" - -tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslint@^5.20.1: - version "5.20.1" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.20.1.tgz#e401e8aeda0152bc44dd07e614034f3f80c67b7d" - integrity sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg== - dependencies: - "@babel/code-frame" "^7.0.0" - builtin-modules "^1.1.1" - chalk "^2.3.0" - commander "^2.12.1" - diff "^4.0.1" - glob "^7.1.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - mkdirp "^0.5.1" - resolve "^1.3.2" - semver "^5.3.0" - tslib "^1.8.0" - tsutils "^2.29.0" - -tsutils@^2.29.0: - version "2.29.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" - integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== - dependencies: - tslib "^1.8.1" - -tsutils@^3.21.0, tsutils@^3.7.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-is@~1.6.17, type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - -typescript@^4.1.3: - version "4.4.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.4.tgz#2cd01a1a1f160704d3101fd5a58ff0f9fcb8030c" - integrity sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA== - -uglify-js@3.4.x: - version "3.4.10" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f" - integrity sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw== - dependencies: - commander "~2.19.0" - source-map "~0.6.1" - -unbox-primitive@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" - integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== - dependencies: - function-bind "^1.1.1" - has-bigints "^1.0.1" - has-symbols "^1.0.2" - which-boxed-primitive "^1.0.2" - -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= - -uniqs@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" - integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= - -unique-filename@^1.1.0, unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= - -unquote@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" - integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -upath@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - -upper-case@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" - integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -url-loader@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-1.1.2.tgz#b971d191b83af693c5e3fea4064be9e1f2d7f8d8" - integrity sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg== - dependencies: - loader-utils "^1.1.0" - mime "^2.0.3" - schema-utils "^1.0.0" - -url-parse@^1.4.3, url-parse@^1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.3.tgz#71c1303d38fb6639ade183c2992c8cc0686df862" - integrity sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - -url@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -util.promisify@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" - integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== - dependencies: - define-properties "^1.1.2" - object.getownpropertydescriptors "^2.0.3" - -util.promisify@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" - integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.2" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.0" - -util@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= - dependencies: - inherits "2.0.1" - -util@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" - integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== - dependencies: - inherits "2.0.3" - -utila@~0.4: - version "0.4.0" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= - -uuid@^3.3.2, uuid@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -v-clipboard@^2.0.1: - version "2.2.3" - resolved "https://registry.yarnpkg.com/v-clipboard/-/v-clipboard-2.2.3.tgz#f5db3d7004145041b6d7d06ca48236de4cee3a41" - integrity sha512-Wg+ObZoYK6McHb5OOCFWvm0R7xHp0/p0G1ocx/8bO22jvA/yVY05rADbfiztwCokXBNfQuGv/XSd1ozcTFgekw== - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= - -vendors@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" - integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -vm-browserify@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" - integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== - -vue-class-component@^6.0.0, vue-class-component@^6.2.0: - version "6.3.2" - resolved "https://registry.yarnpkg.com/vue-class-component/-/vue-class-component-6.3.2.tgz#e6037e84d1df2af3bde4f455e50ca1b9eec02be6" - integrity sha512-cH208IoM+jgZyEf/g7mnFyofwPDJTM/QvBNhYMjqGB8fCsRyTf68rH2ISw/G20tJv+5mIThQ3upKwoL4jLTr1A== - -vue-eslint-parser@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz#c268c96c6d94cfe3d938a5f7593959b0ca3360d1" - integrity sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw== - dependencies: - debug "^3.1.0" - eslint-scope "^3.7.1" - eslint-visitor-keys "^1.0.0" - espree "^3.5.2" - esquery "^1.0.0" - lodash "^4.17.4" - -vue-eslint-parser@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-5.0.0.tgz#00f4e4da94ec974b821a26ff0ed0f7a78402b8a1" - integrity sha512-JlHVZwBBTNVvzmifwjpZYn0oPWH2SgWv5dojlZBsrhablDu95VFD+hriB1rQGwbD+bms6g+rAFhQHk6+NyiS6g== - dependencies: - debug "^4.1.0" - eslint-scope "^4.0.0" - eslint-visitor-keys "^1.0.0" - espree "^4.1.0" - esquery "^1.0.1" - lodash "^4.17.11" - -vue-hot-reload-api@^2.3.0: - version "2.3.4" - resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2" - integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog== - -vue-loader@^15.7.0: - version "15.9.8" - resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.9.8.tgz#4b0f602afaf66a996be1e534fb9609dc4ab10e61" - integrity sha512-GwSkxPrihfLR69/dSV3+5CdMQ0D+jXg8Ma1S4nQXKJAznYFX14vHdc/NetQc34Dw+rBbIJyP7JOuVb9Fhprvog== - dependencies: - "@vue/component-compiler-utils" "^3.1.0" - hash-sum "^1.0.2" - loader-utils "^1.1.0" - vue-hot-reload-api "^2.3.0" - vue-style-loader "^4.1.0" - -vue-notification@^1.3.12: - version "1.3.20" - resolved "https://registry.yarnpkg.com/vue-notification/-/vue-notification-1.3.20.tgz#d85618127763b46f3e25b8962b857947d5a97cbe" - integrity sha512-vPj67Ah72p8xvtyVE8emfadqVWguOScAjt6OJDEUdcW5hW189NsqvfkOrctxHUUO9UYl9cTbIkzAEcPnHu+zBQ== - -vue-property-decorator@^7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/vue-property-decorator/-/vue-property-decorator-7.3.0.tgz#d50d67f0b0f1c814f9f2fba36d6eeccbcc62dbb6" - integrity sha512-HarXfTQ/Nxm4s/APpAaGIGHq5ZzslApImQy8ZrtkfGamw8rUFAVgMS5C50/AQ80+wfw3Wpnf4bNzbmj75m/k2Q== - dependencies: - vue-class-component "^6.2.0" - -vue-router@^3.0.1: - version "3.5.3" - resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.5.3.tgz#041048053e336829d05dafacf6a8fb669a2e7999" - integrity sha512-FUlILrW3DGitS2h+Xaw8aRNvGTwtuaxrRkNSHWTizOfLUie7wuYwezeZ50iflRn8YPV5kxmU2LQuu3nM/b3Zsg== - -vue-style-loader@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz#6d55863a51fa757ab24e89d9371465072aa7bc35" - integrity sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg== - dependencies: - hash-sum "^1.0.2" - loader-utils "^1.0.2" - -vue-template-compiler@^2.6.12: - version "2.6.14" - resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.14.tgz#a2f0e7d985670d42c9c9ee0d044fed7690f4f763" - integrity sha512-ODQS1SyMbjKoO1JBJZojSw6FE4qnh9rIpUZn2EUT86FKizx9uH5z6uXiIrm4/Nb/gwxTi/o17ZDEGWAXHvtC7g== - dependencies: - de-indent "^1.0.2" - he "^1.1.0" - -vue-template-es2015-compiler@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825" - integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw== - -vue@^2.6.12: - version "2.6.14" - resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.14.tgz#e51aa5250250d569a3fbad3a8a5a687d6036e235" - integrity sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ== - -vuetify@^2.4.5: - version "2.5.14" - resolved "https://registry.yarnpkg.com/vuetify/-/vuetify-2.5.14.tgz#0545355fdea0ac2b37dbcb1dca405b62041f551c" - integrity sha512-3efk3WnOvh+r9muZ4Ie0FVfFVmPS/ag+l/20qGA45lXZAJuyLeYxJ5gXs5xnCpml1g8xmJfDQPvi8xC6DDuCdg== - -"vuex-typex@https://github.com/robinhundt/vuex-typex.git": - version "3.0.1" - resolved "https://github.com/robinhundt/vuex-typex.git#3e0da4d1e01eef6e0eed609ef97cb036ca8a692f" - dependencies: - deepmerge "^2.1.1" - vuex "^3.0.0" - -vuex@^3.0.0, vuex@^3.0.1: - version "3.6.2" - resolved "https://registry.yarnpkg.com/vuex/-/vuex-3.6.2.tgz#236bc086a870c3ae79946f107f16de59d5895e71" - integrity sha512-ETW44IqCgBpVomy520DT5jf8n0zoCac+sxWnn+hMe/CzaSejb/eVw2YToiXYX+Ex/AuHHia28vWTq4goAexFbw== - -watchpack-chokidar2@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" - integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== - dependencies: - chokidar "^2.1.8" - -watchpack@^1.7.4: - version "1.7.5" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" - integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== - dependencies: - graceful-fs "^4.1.2" - neo-async "^2.5.0" - optionalDependencies: - chokidar "^3.4.1" - watchpack-chokidar2 "^2.0.1" - -wbuf@^1.1.0, wbuf@^1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" - integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== - dependencies: - minimalistic-assert "^1.0.0" - -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= - dependencies: - defaults "^1.0.3" - -webpack-bundle-analyzer@^3.3.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz#f6f94db108fb574e415ad313de41a2707d33ef3c" - integrity sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA== - dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" - bfj "^6.1.1" - chalk "^2.4.1" - commander "^2.18.0" - ejs "^2.6.1" - express "^4.16.3" - filesize "^3.6.1" - gzip-size "^5.0.0" - lodash "^4.17.19" - mkdirp "^0.5.1" - opener "^1.5.1" - ws "^6.0.0" - -webpack-chain@^4.11.0: - version "4.12.1" - resolved "https://registry.yarnpkg.com/webpack-chain/-/webpack-chain-4.12.1.tgz#6c8439bbb2ab550952d60e1ea9319141906c02a6" - integrity sha512-BCfKo2YkDe2ByqkEWe1Rw+zko4LsyS75LVr29C6xIrxAg9JHJ4pl8kaIZ396SUSNp6b4815dRZPSTAS8LlURRQ== - dependencies: - deepmerge "^1.5.2" - javascript-stringify "^1.6.0" - -webpack-dev-middleware@^3.7.2: - version "3.7.3" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" - integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== - dependencies: - memory-fs "^0.4.1" - mime "^2.4.4" - mkdirp "^0.5.1" - range-parser "^1.2.1" - webpack-log "^2.0.0" - -webpack-dev-server@^3.4.1: - version "3.11.3" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.3.tgz#8c86b9d2812bf135d3c9bce6f07b718e30f7c3d3" - integrity sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA== - dependencies: - ansi-html-community "0.0.8" - bonjour "^3.5.0" - chokidar "^2.1.8" - compression "^1.7.4" - connect-history-api-fallback "^1.6.0" - debug "^4.1.1" - del "^4.1.1" - express "^4.17.1" - html-entities "^1.3.1" - http-proxy-middleware "0.19.1" - import-local "^2.0.0" - internal-ip "^4.3.0" - ip "^1.1.5" - is-absolute-url "^3.0.3" - killable "^1.0.1" - loglevel "^1.6.8" - opn "^5.5.0" - p-retry "^3.0.1" - portfinder "^1.0.26" - schema-utils "^1.0.0" - selfsigned "^1.10.8" - semver "^6.3.0" - serve-index "^1.9.1" - sockjs "^0.3.21" - sockjs-client "^1.5.0" - spdy "^4.0.2" - strip-ansi "^3.0.1" - supports-color "^6.1.0" - url "^0.11.0" - webpack-dev-middleware "^3.7.2" - webpack-log "^2.0.0" - ws "^6.2.1" - yargs "^13.3.2" - -webpack-log@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" - integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== - dependencies: - ansi-colors "^3.0.0" - uuid "^3.3.2" - -webpack-merge@^4.2.1: - version "4.2.2" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" - integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== - dependencies: - lodash "^4.17.15" - -webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1: - version "1.4.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" - integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack@^4.0.0, webpack@^4.41.0: - version "4.46.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.46.0.tgz#bf9b4404ea20a073605e0a011d188d77cb6ad542" - integrity sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/wasm-edit" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - acorn "^6.4.1" - ajv "^6.10.2" - ajv-keywords "^3.4.1" - chrome-trace-event "^1.0.2" - enhanced-resolve "^4.5.0" - eslint-scope "^4.0.3" - json-parse-better-errors "^1.0.2" - loader-runner "^2.4.0" - loader-utils "^1.2.3" - memory-fs "^0.4.1" - micromatch "^3.1.10" - mkdirp "^0.5.3" - neo-async "^2.6.1" - node-libs-browser "^2.2.1" - schema-utils "^1.0.0" - tapable "^1.1.3" - terser-webpack-plugin "^1.4.3" - watchpack "^1.7.4" - webpack-sources "^1.4.1" - -websocket-driver@>=0.5.1, websocket-driver@^0.7.4: - version "0.7.4" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" - integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== - dependencies: - http-parser-js ">=0.5.1" - safe-buffer ">=5.1.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" - integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - -which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -word-wrap@~1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -worker-farm@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" - integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== - dependencies: - errno "~0.1.7" - -worker-rpc@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/worker-rpc/-/worker-rpc-0.1.1.tgz#cb565bd6d7071a8f16660686051e969ad32f54d5" - integrity sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg== - dependencies: - microevent.ts "~0.1.1" - -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" - -write@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" - integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c= - dependencies: - mkdirp "^0.5.1" - -ws@^6.0.0, ws@^6.2.1: - version "6.2.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" - integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== - dependencies: - async-limiter "~1.0.0" - -xtend@^4.0.0, xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^1.7.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs@^13.3.2: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" - -yargs@^16.0.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yorkie@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yorkie/-/yorkie-2.0.0.tgz#92411912d435214e12c51c2ae1093e54b6bb83d9" - integrity sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw== - dependencies: - execa "^0.8.0" - is-ci "^1.0.10" - normalize-path "^1.0.0" - strip-indent "^2.0.0" diff --git a/grady/functional_tests/.gitignore b/grady/functional_tests/.gitignore deleted file mode 100644 index 975c04db..00000000 --- a/grady/functional_tests/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -export.json -export.csv -screenshots diff --git a/grady/functional_tests/__init__.py b/grady/functional_tests/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/grady/functional_tests/data/hektor.json b/grady/functional_tests/data/hektor.json deleted file mode 100644 index 435d147f..00000000 --- a/grady/functional_tests/data/hektor.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "meta": { - "version": "6.0.0" - }, - "data": { - "module": { - "module_reference": "B.Inf.1801", - "total_score": 50, - "pass_score": 25, - "pass_only": false - }, - "submission_types": [ - { - "name": "Eine Bibliothek für Permutationen (I1-ID: l120mlc005h0)", - "full_score": 50, - "description": "A <b>description</b>!", - "solution": "Blub", - "programming_language": "java" - } - ], - "students": [ - { - "fullname": "Test, User", - "identifier": "20000000", - "username": "TU20000000", - "submissions": [ - { - "code": "234;", - "type": "Eine Bibliothek für Permutationen (I1-ID: l120mlc005h0)", - "tests": {} - } - ] - } - ] - } -} diff --git a/grady/functional_tests/test_auto_logout.py b/grady/functional_tests/test_auto_logout.py deleted file mode 100644 index ba936bbf..00000000 --- a/grady/functional_tests/test_auto_logout.py +++ /dev/null @@ -1,66 +0,0 @@ -import datetime -import logging -from selenium.webdriver.common.by import By -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as ec -from selenium.webdriver.common.action_chains import ActionChains - -from core.models import UserAccount -from functional_tests.util import (GradyTestCase, login, reset_browser_after_test) -from util import factory_boys as fact - -from rest_framework_jwt.settings import api_settings - -log = logging.getLogger(__name__) - - -class TestAutoLogout(GradyTestCase): - username = None - password = None - role = None - - def setUp(self): - self.username = 'reviewer' - self.password = 'p' - self.role = UserAccount.TUTOR - fact.UserAccountFactory( - username=self.username, - password=self.password, - role=self.role - ) - - def tearDown(self): - api_settings.reload() - self.saveScreenshots() - reset_browser_after_test(self.browser, self.live_server_url) - - def _login(self): - login(self.browser, self.live_server_url, self.username, self.password) - - def test_auto_logout_can_continue(self): - with self.settings(JWT_AUTH={ - 'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=15), - 'JWT_ALLOW_REFRESH': True, - } - ): - self._login() - initial_token = self.browser.execute_script( - 'return document.getElementById("app").__vue__.$store' - '._modules.root.state.Authentication.token' - ) - logout_dialog = self.browser.find_element_by_id('logout-dialog') - WebDriverWait(self.browser, 15, 0.2).until( - ec.visibility_of_element_located((By.ID, 'logout-dialog'))) - # the below line should work for clicking the button, but something - # obscures it, thus the workaround below the comment - # logout_dialog.find_element_by_id('continue-btn').click() - continue_btn = logout_dialog.find_element_by_id('continue-btn') - ActionChains(self.browser).move_to_element(continue_btn).click().perform() - WebDriverWait(self.browser, 15, 0.2).until( - ec.invisibility_of_element_located((By.ID, 'logout-dialog'))) - self.assertNotIn('login', self.browser.current_url) - new_token = self.browser.execute_script( - 'return document.getElementById("app").__vue__.$store.' - '_modules.root.state.Authentication.token' - ) - self.assertNotEqual(initial_token, new_token) diff --git a/grady/functional_tests/test_export_modal.py b/grady/functional_tests/test_export_modal.py deleted file mode 100644 index 61387780..00000000 --- a/grady/functional_tests/test_export_modal.py +++ /dev/null @@ -1,143 +0,0 @@ -import json -import os -from pathlib import Path -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.common.action_chains import ActionChains - - -from core.models import UserAccount -from functional_tests.util import GradyTestCase, login, reset_browser_after_test -from util import factory_boys as fact - - -def expect_file_to_be_downloaded(path): - """ - Checks if a file has finished downloading by checking if a file exists at the path and - no `.part` file is present in the directory containing path - :param path: path to check - :return: - """ - def condition(*args): - file_present = Path(path).is_file() - partial_file_present = any(dir_path.suffix == ".part" for - dir_path in Path(path).parent.iterdir()) - return file_present and not partial_file_present - return condition - - -JSON_EXPORT_FILE = os.path.join(os.path.dirname(__file__), 'export.json') - - -class ExportTestModal(GradyTestCase): - username = None - password = None - role = None - - def setUp(self): - self.username = 'reviewer' - self.password = 'p' - self.role = UserAccount.REVIEWER - fact.UserAccountFactory( - username=self.username, - password=self.password, - role=self.role - ) - - def tearDown(self): - self.saveScreenshots() - reset_browser_after_test(self.browser, self.live_server_url) - - def _login(self): - login(self.browser, self.live_server_url, self.username, self.password) - - def test_export_red_uncorrected_submissions(self): - def export_btn_is_not_green(*args): - exports_btn = self.browser.find_element_by_id('export-btn') - return 'success' not in exports_btn.get_attribute('class') - - fact.SubmissionFactory() - self._login() - WebDriverWait(self.browser, 10).until(export_btn_is_not_green) - - def test_export_warning_tooltip_uncorrected_submissions(self): - fact.SubmissionFactory() - self._login() - self.browser.execute_script( - "document.getElementById('export-btn').dispatchEvent(new Event('mouseenter'));" - ) - tooltip_uncorrected = self.browser.find_element_by_id('uncorrected-tooltip') - self.assertNotEqual(None, tooltip_uncorrected) - self.assertRaises(Exception, self.browser.find_element_by_id, 'corrected-tooltip') - - def test_export_green_all_corrected(self): - def export_btn_is_green(*args): - exports_btn = self.browser.find_element_by_id('export-btn') - return 'success' in exports_btn.get_attribute('class') - - fact.SubmissionTypeFactory() - self._login() - WebDriverWait(self.browser, 10).until(export_btn_is_green) - - def test_export_all_good_tooltip_all_corrected(self): - fact.SubmissionTypeFactory() - self._login() - self.browser.execute_script( - "document.getElementById('export-btn').dispatchEvent(new Event('mouseenter'));" - ) - tooltip_corrected = self.browser.find_element_by_id('corrected-tooltip') - self.assertNotEqual(None, tooltip_corrected) - self.assertRaises(Exception, self.browser.find_element_by_id, 'uncorrected-tooltip') - - def test_export_list_popup_contains_correct_items(self): - self._login() - export_btn = self.browser.find_element_by_id('export-btn') - export_btn.click() - export_menu = self.browser.find_element_by_class_name('menuable__content__active') - export_list = export_menu.find_element_by_class_name('v-list') - list_elements = export_list.find_elements_by_tag_name('div') - self.assertEqual(2, len(list_elements)) - self.assertEqual('Export student scores', list_elements[0].text) - self.assertEqual('Export whole instance data', list_elements[1].text) - - def test_export_student_scores_as_json(self): - fact.StudentInfoFactory() - fact.SubmissionFactory() - self._login() - export_btn = self.browser.find_element_by_id('export-btn') - export_btn.click() - export_scores = self.browser.find_element_by_id('export-list0') - export_scores.click() - data_export_modal = self.browser.find_element_by_id('data-export-modal') - data_export_btn = data_export_modal.find_element_by_id('export-data-download-btn') - ActionChains(self.browser).move_to_element(data_export_btn).click().perform() - WebDriverWait(self.browser, 10).until(expect_file_to_be_downloaded(JSON_EXPORT_FILE)) - try: - with open(JSON_EXPORT_FILE) as f: - data = json.load(f) - - self.assertEqual('B.Inf.4242 Test Module', - data[0]['Exams'][0]['exam']['moduleReference']) - except Exception as e: - print(data) - raise e - finally: - os.remove(JSON_EXPORT_FILE) - - def test_export_instance(self): - fact.SubmissionFactory() - self._login() - self.browser.find_element_by_id('export-btn').click() - self.browser.find_element_by_id('export-list1').click() - instance_export_modal = self.browser.find_element_by_id('instance-export-modal') - # instance_export_modal.find_element_by_id('instance-export-dl').click() - export_btn = instance_export_modal.find_element_by_id('instance-export-dl') - ActionChains(self.browser).move_to_element(export_btn).click().perform() - WebDriverWait(self.browser, 10).until(expect_file_to_be_downloaded(JSON_EXPORT_FILE)) - try: - with open(JSON_EXPORT_FILE) as f: - data = json.load(f) - self.assertEqual('B.Inf.4242 Test Module', data['examTypes'][0]['moduleReference']) - except Exception as e: - raise e - finally: - os.remove(JSON_EXPORT_FILE) diff --git a/grady/functional_tests/test_feedback_creation.py b/grady/functional_tests/test_feedback_creation.py deleted file mode 100644 index 4bfcfb97..00000000 --- a/grady/functional_tests/test_feedback_creation.py +++ /dev/null @@ -1,357 +0,0 @@ -from selenium.webdriver import ActionChains -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as ec -from selenium.webdriver.common.by import By - -from core.models import UserAccount, Submission, FeedbackComment -from functional_tests.util import (GradyTestCase, login, reset_browser_after_test, - go_to_subscription, wait_until_code_changes, - correct_some_submission, assertion_is_true, - reconstruct_submission_code, wait_until_element_count_equals, - reconstruct_solution_code) -from util import factory_boys as fact - - -class UntestedParent: - class TestFeedbackCreationGeneric(GradyTestCase): - username = None - password = None - role = None - - def setUp(self): - self.sub_type = fact.SubmissionTypeFactory.create() - fact.SubmissionFactory.create_batch(2, type=self.sub_type) - - def tearDown(self): - self.saveScreenshots() - reset_browser_after_test(self.browser, self.live_server_url) - - def _login(self): - login(self.browser, self.live_server_url, self.username, self.password) - - def write_comments_on_lines(self, line_comment_tuples): - """ line_comment_tuples is an iterable containing tuples of - (line_no, comment) where the line number starts at 1 - """ - - sub_table = self.browser.find_element_by_class_name('submission-table') - lines = sub_table.find_elements_by_tag_name('tr') - - for (line_no, comment) in line_comment_tuples: - line = lines[line_no-1] - line.find_element_by_tag_name('button').click() - textarea = line.find_element_by_tag_name('textarea') - textarea.send_keys(comment) - line.find_element_by_id('submit-comment').click() - - def test_student_text_is_correctly_displayed(self): - self._login() - go_to_subscription(self) - code = reconstruct_submission_code(self) - # query db for Submission with seen code, throws if not present and test fails - Submission.objects.get(text=code) - - def test_submission_type_is_correctly_displayed(self): - self._login() - go_to_subscription(self) - sub_type_el = self.browser.find_element_by_id('submission-type') - title = sub_type_el.find_element_by_class_name('title') - self.assertEqual( - f'{self.sub_type.name} - Full score: {self.sub_type.full_score}', - title.text - ) - solution = reconstruct_solution_code(self) - self.assertEqual(self.sub_type.solution, solution) - description = sub_type_el.find_element_by_class_name('type-description') - html_el_in_desc = description.find_element_by_tag_name('h1') - self.assertEqual('This', html_el_in_desc.text) - - def test_test_output_is_displayed(self): - # create a test for every submission - test = None - for submission in Submission.objects.all(): - test = fact.TestFactory.create(submission=submission, annotation='This is a test') - self._login() - go_to_subscription(self) - tests = self.browser.find_element_by_id('submission-tests') - name_label = tests.find_element_by_name('test-name-label') - name_label.click() - self.assertIn(test.name, name_label.text) - self.assertIn(test.label, name_label.text) - test_output = tests.find_element_by_class_name('test-output') - WebDriverWait(self.browser, 10).until(ec.visibility_of(test_output)) - self.assertEqual(test.annotation, test_output.text) - - def test_can_give_max_score(self): - self._login() - go_to_subscription(self) - code = correct_some_submission(self) - submission_for_code = Submission.objects.get(text=code) - self.assertEqual(self.sub_type.full_score, submission_for_code.feedback.score) - - def test_zero_score_without_warning_gives_error(self): - self._login() - go_to_subscription(self) - self.browser.find_element_by_id('score-zero').click() - submit_btn = self.browser.find_element_by_id('submit-feedback') - assert submit_btn.get_attribute('disabled') - - def test_can_give_zero_score(self): - self._login() - go_to_subscription(self) - code = reconstruct_submission_code(self) - self.browser.find_element_by_id('score-zero').click() - self.write_comments_on_lines([(0, 'A comment')]) - self.browser.find_element_by_id('submit-feedback').click() - WebDriverWait(self.browser, 10).until(wait_until_code_changes(self, code)) - submission_for_code = Submission.objects.get(text=code) - self.assertEqual(0, submission_for_code.feedback.score) - - def test_can_give_comments_and_decreased_score(self): - self._login() - go_to_subscription(self) - code = reconstruct_submission_code(self) - - # give half full score - score_input = self.browser.find_element_by_id('score-input') - score_input.send_keys(self.sub_type.full_score // 2) - - # give feedback on first and last line of submission - comment_text = 'This is feedback' - self.write_comments_on_lines([ - (1, comment_text), (0, comment_text) # 0 corresponds to the last line - ]) - - submit_btn = self.browser.find_element_by_id('submit-feedback') - submit_btn.click() - WebDriverWait(self.browser, 10).until( - wait_until_code_changes(self, code) - ) - submission_for_code = Submission.objects.get(text=code) - self.assertEqual(self.sub_type.full_score // 2, submission_for_code.feedback.score) - self.assertEqual(2, submission_for_code.feedback.feedback_lines.count()) - fst_comment = FeedbackComment.objects.get( - of_feedback=submission_for_code.feedback, - of_line=1 - ) - self.assertEqual(comment_text, fst_comment.text) - last_line_of_sub = len(submission_for_code.text.split('\n')) - snd_comment = FeedbackComment.objects.get( - of_feedback=submission_for_code.feedback, - of_line=last_line_of_sub - ) - self.assertEqual(comment_text, snd_comment.text) - - def test_can_skip_submission(self): - self._login() - go_to_subscription(self) - code = reconstruct_submission_code(self) - self.browser.find_element_by_id('skip-submission').click() - WebDriverWait(self.browser, 10).until(wait_until_code_changes(self, code)) - - def test_can_validate_submission(self): - self._login() - go_to_subscription(self) - - def correct(): - code = reconstruct_submission_code(self) - self.write_comments_on_lines([(0, 'A comment by me')]) - self.browser.find_element_by_id('score-zero').click() - self.browser.find_element_by_id('submit-feedback').click() - return code - code = correct() - WebDriverWait(self.browser, 10).until(wait_until_code_changes(self, code)) - correct() - - sub_url = 'correction/ended' - WebDriverWait(self.browser, 10).until(ec.url_contains(sub_url)) - - reset_browser_after_test(self.browser, self.live_server_url) # logs out user - - user_snd = 'tutor_snd' - password = 'p' - fact.UserAccountFactory(username=user_snd, password=password) - - login(self.browser, self.live_server_url, user_snd, password) - go_to_subscription(self, stage='validate') - self.write_comments_on_lines([(0, 'I disagree'), (1, 'Full points!')]) - code_final = reconstruct_submission_code(self) - self.browser.find_element_by_id('score-full').click() - self.browser.find_element_by_id('submit-feedback').click() - - WebDriverWait(self.browser, 10).until(wait_until_code_changes(self, code_final)) - code_non_final = reconstruct_submission_code(self) - self.browser.find_element_by_class_name('final-checkbox').click() - self.browser.find_element_by_id('submit-feedback').click() - - sub_url = 'correction/ended' - WebDriverWait(self.browser, 10).until(ec.url_contains(sub_url)) - - reset_browser_after_test(self.browser, self.live_server_url) - - user_rev = 'rev' - password = 'p' - role = UserAccount.REVIEWER - fact.UserAccountFactory(username=user_rev, password=password, role=role) - login(self.browser, self.live_server_url, user_rev, password) - - go_to_subscription(self, 'review') - code = reconstruct_submission_code(self) - self.assertEqual(code, code_non_final) - - submission_for_code = Submission.objects.get(text=code_final) - self.assertEqual(self.sub_type.full_score, submission_for_code.feedback.score) - self.assertEqual(3, submission_for_code.feedback.feedback_lines.count()) - - submission_for_code = Submission.objects.get(text=code_non_final) - self.assertEqual(0, submission_for_code.feedback.score) - self.assertEqual(1, submission_for_code.feedback.feedback_lines.count()) - - def test_final_button_not_present_in_review_stage(self): - self._login() - go_to_subscription(self) - - def correct(): - code = reconstruct_submission_code(self) - self.write_comments_on_lines([(0, 'Some comment')]) - self.browser.find_element_by_id('score-zero').click() - self.browser.find_element_by_id('submit-feedback').click() - return code - - code = correct() - WebDriverWait(self.browser, 10).until(wait_until_code_changes(self, code)) - correct() - - sub_url = 'correction/ended' - WebDriverWait(self.browser, 10).until(ec.url_contains(sub_url)) - - reset_browser_after_test(self.browser, self.live_server_url) # logs out user - - user_snd = 'tutor_snd' - password = 'p' - fact.UserAccountFactory(username=user_snd, password=password) - - login(self.browser, self.live_server_url, user_snd, password) - go_to_subscription(self, stage='validate') - self.write_comments_on_lines([(0, 'I disagree'), (1, 'Full points!')]) - code_final = reconstruct_submission_code(self) - self.browser.find_element_by_id('score-full').click() - self.browser.find_element_by_id('submit-feedback').click() - - WebDriverWait(self.browser, 10).until(wait_until_code_changes(self, code_final)) - self.browser.find_element_by_class_name('final-checkbox').click() - self.browser.find_element_by_id('submit-feedback').click() - - sub_url = 'correction/ended' - WebDriverWait(self.browser, 10).until(ec.url_contains(sub_url)) - - reset_browser_after_test(self.browser, self.live_server_url) - - user_rev = 'rev' - password = 'p' - role = UserAccount.REVIEWER - fact.UserAccountFactory(username=user_rev, password=password, role=role) - login(self.browser, self.live_server_url, user_rev, password) - - go_to_subscription(self, 'review') - try: - WebDriverWait(self.browser, 10).until( - ec.presence_of_element_located((By.CLASS_NAME, "final-checkbox")) - ) - not_found = False - except Exception: - not_found = True - - assert not_found - - def test_comments_are_sorted_by_last_updated(self): - self._login() - go_to_subscription(self) - - code = reconstruct_submission_code(self) - self.browser.find_element_by_id('score-full').click() - - # give feedback on first line - self.write_comments_on_lines([(1, 'first ever comment')]) - - submit_btn = self.browser.find_element_by_id('submit-feedback') - submit_btn.click() - - WebDriverWait(self.browser, 10).until( - wait_until_code_changes(self, code) - ) - - reset_browser_after_test(self.browser, self.live_server_url) # logs out user - - user_snd = 'tutor_snd' - password = 'p' - fact.UserAccountFactory(username=user_snd, password=password) - - login(self.browser, self.live_server_url, user_snd, password) - go_to_subscription(self, stage='validate') - - self.write_comments_on_lines([(1, 'the second comment')]) - self.browser.find_element_by_id('score-full').click() - self.browser.find_element_by_class_name('final-checkbox').click() - self.browser.find_element_by_id('submit-feedback').click() - - sub_url = 'correction/ended' - WebDriverWait(self.browser, 10).until(ec.url_contains(sub_url)) - - reset_browser_after_test(self.browser, self.live_server_url) # logs out user - self._login() - - # goto history - self.browser.find_element_by_id('feedback').click() - feedback_entry = self.browser.find_element_by_class_name('feedback-row') - ActionChains(self.browser).move_to_element(feedback_entry).click().perform() - - # validate that second comment is under the first comment - comments = self.browser.find_elements_by_class_name('dialog-box') - first_text = comments[0].find_element_by_class_name('message') - second_text = comments[1].find_element_by_class_name('message') - - self.assertEqual(len(comments), 2) - self.assertEqual(first_text.text, 'first ever comment') - self.assertEqual(second_text.text, 'the second comment') - - # give feedback on first line - self.write_comments_on_lines([(1, 'first comment updated')]) - self.browser.find_element_by_id('score-full').click() - self.browser.find_element_by_id('submit-feedback').click() - - WebDriverWait(self.browser, 5).until( - wait_until_element_count_equals(self, By.CLASS_NAME, "dialog-box", 2) - ) - - # validate that the edited first comment is under the second comment - comments = self.browser.find_elements_by_class_name('dialog-box') - first_text = comments[0].find_element_by_class_name('message') - second_text = comments[1].find_element_by_class_name('message') - - def assertion_one(): - return self.assertEqual(first_text.text, 'the second comment') - - def assertion_two(): - return self.assertEqual(second_text.text, 'first comment updated') - - # comments are sorted after about 0.5s of delay - WebDriverWait(self.browser, 2).until( - assertion_is_true(assertion_one) - ) - WebDriverWait(self.browser, 2).until( - assertion_is_true(assertion_two) - ) - - -class TestFeedbackCreationTutor(UntestedParent.TestFeedbackCreationGeneric): - def setUp(self): - super().setUp() - self.username = 'tutor' - self.password = 'p' - self.role = UserAccount.TUTOR - fact.UserAccountFactory( - username=self.username, - password=self.password, - role=self.role - ) diff --git a/grady/functional_tests/test_feedback_label_system.py b/grady/functional_tests/test_feedback_label_system.py deleted file mode 100644 index b990a2d5..00000000 --- a/grady/functional_tests/test_feedback_label_system.py +++ /dev/null @@ -1,386 +0,0 @@ -from selenium.common.exceptions import NoSuchElementException -from selenium.webdriver.common.by import By -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as ec - -from core.models import FeedbackLabel -from functional_tests.util import (GradyTestCase, login, reset_browser_after_test, - query_returns_object, go_to_subscription, - reconstruct_submission_code, wait_until_code_changes) -from util import factory_boys as fact - - -class FeedbackLabelSystemTest(GradyTestCase): - username = None - password = None - role = None - - def setUp(self): - super().setUp() - self.username = 'tut' - self.password = 'p' - fact.UserAccountFactory( - username=self.username, - password=self.password, - ) - self.sub_type = fact.SubmissionTypeFactory.create() - fact.SubmissionFactory.create_batch(2, type=self.sub_type) - - def tearDown(self): - self.saveScreenshots() - reset_browser_after_test(self.browser, self.live_server_url) - - def _login(self): - login(self.browser, self.live_server_url, self.username, self.password) - - # creates a new label where colour_num is - # the index of the colour to click on the colour picker - def create_label(self, name, description, colour_num): - self.browser.find_element_by_id('create-label-section').click() - WebDriverWait(self.browser, 2).until( - ec.element_to_be_clickable((By.ID, 'label-name')) - ) - self.browser.find_element_by_id('label-name').send_keys(name) - self.browser.find_element_by_id('label-description').send_keys(description) - self.browser.find_elements_by_class_name('v-color-picker__color')[colour_num].click() - self.browser.find_element_by_id('create-label-btn').click() - WebDriverWait(self.browser, 10).until(query_returns_object(FeedbackLabel, name=name)) - self.browser.find_element_by_class_name('notification-title').click() - - # updates an already existing label with the given arguments - def update_label(self, old_name, new_name, description, colour_num): - self.browser.find_element_by_id('update-label-section').click() - WebDriverWait(self.browser, 2).until( - ec.element_to_be_clickable((By.ID, 'label-update-autocomplete')) - ) - old_name_input = self.browser.find_element_by_id('label-update-autocomplete') - old_name_input.click() - old_name_input.send_keys(old_name) - self.browser.find_element_by_class_name('label-updater-item').click() - self.browser.find_element_by_xpath( - '//div[contains(@class, "v-window-item--active")]//input[@id="label-name"]' - ).send_keys(new_name) - - self.browser.find_element_by_xpath( - '//div[contains(@class, "v-window-item--active")]//textarea[@id="label-description"]' - ).send_keys(description) - - self.browser.find_elements_by_xpath( - '//div[contains(@class, "v-window-item--active")]' - '//div[contains(@class, "v-color-picker__color")]' - )[colour_num].click() - self.browser.find_element_by_id('update-label-btn').click() - WebDriverWait(self.browser, 10).until( - query_returns_object(FeedbackLabel, name=old_name + new_name) - ) - self.browser.find_element_by_class_name('notification-title').click() - - def assign_label_to_feedback(self, name): - label_input = self.browser.find_element_by_xpath( - '//div[@id="feedback-label-selector"]//input[@id="label-add-autocomplete"]' - ) - label_input.click() - label_input.send_keys(name) - self.browser.find_element_by_class_name('label-adder-item').click() - - def remove_label_from_feedback(self, name): - self.browser.find_element_by_xpath( - f'//div[@id="feedback-label-selector"]//span[contains(@class, "v-chip__content") ' - f'and contains(text(), "{name}")]//button[contains(@class, "v-chip__close")]' - ).click() - - def assign_label_to_comment_line(self, line, name): - self.browser.find_element_by_xpath( - f'//span[contains(@class, "v-btn__content") and contains(text(), "{line}")]' - ).click() - label_input = self.browser.find_element_by_xpath( - '//div[@id="comment-label-selector"]//input[@id="label-add-autocomplete"]' - ) - label_input.click() - label_input.send_keys(name) - self.browser.find_element_by_class_name('label-adder-item').click() - self.browser.find_element_by_id('submit-comment').click() - - def remove_label_from_comment_line(self, line, name): - self.browser.find_element_by_xpath( - f'//tr[@id="sub-line-{line}"]//span[contains(text(), "{name}")]' - '//button[contains(@class, "v-chip__close")]' - ).click() - - # Removes any notification that could obstruct buttons. - def check_for_notification(self): - try: - self.browser.find_element_by_class_name('notification').click() - except NoSuchElementException: - pass - - def test_can_create_label(self): - self._login() - label_name = 'test name' - label_desc = 'test description' - self.create_label(label_name, label_desc, 3) - created_label = FeedbackLabel.objects.get(name='test name') - - self.assertEqual(created_label.name, label_name) - self.assertEqual(created_label.description, label_desc) - - def test_can_not_create_duplicate_label(self): - self._login() - label_name = 'duplicate' - label_desc = 'duplicate test' - self.create_label(label_name, label_desc, 3) - self.create_label(label_name, label_desc, 3) - WebDriverWait(self.browser, 2).until( - ec.visibility_of_element_located((By.CLASS_NAME, 'notification-content')) - ) - notification = self.browser.find_element_by_class_name('notification-content') - - labels = FeedbackLabel.objects.all() - self.assertIn('already exists', notification.text) - self.assertEqual(len(labels), 1) - - def test_can_update_label(self): - self._login() - self.create_label('test', 'some desc', 1) - self.update_label('test', 'updated', 'updated desc', 3) - - label = FeedbackLabel.objects.get(name='testupdated') - - self.assertEqual(label.name, 'testupdated') - self.assertEqual(label.description, 'some descupdated desc') - - def test_can_assign_label_to_feedback_draft(self): - self._login() - self.create_label('test', 'some desc', 1) - go_to_subscription(self) - code = reconstruct_submission_code(self) - self.assign_label_to_feedback('test') - labels = self.browser.find_elements_by_xpath( - '//div[@id="feedback-label-selector"]//div[contains(text(), "WILL BE ADDED")]/..//*' - ) - self.assertGreater(len(labels), 1) - - self.browser.find_element_by_id('score-full').click() - self.browser.find_element_by_id('submit-feedback').click() - WebDriverWait(self.browser, 10).until( - wait_until_code_changes(self, code) - ) - - label = FeedbackLabel.objects.get(name='test') - self.assertEqual(len(label.feedback.all()), 1) - - def test_can_remove_label_from_feedback_draft(self): - self._login() - self.create_label('test', 'some desc', 1) - go_to_subscription(self) - self.assign_label_to_feedback('test') - self.remove_label_from_feedback('test') - labels = self.browser.find_elements_by_xpath( - '//div[@id="feedback-label-selector"]//div[contains(text(), "WILL BE ADDED")]/..//*' - ) - - self.assertEqual(len(labels), 1) - - def test_can_remove_label_from_submitted_feedback(self): - self._login() - self.create_label('test', 'some desc', 1) - go_to_subscription(self) - code = reconstruct_submission_code(self) - self.assign_label_to_feedback('test') - self.browser.find_element_by_id('score-full').click() - self.browser.find_element_by_id('submit-feedback').click() - WebDriverWait(self.browser, 10).until( - wait_until_code_changes(self, code) - ) - - # logs out user - reset_browser_after_test(self.browser, self.live_server_url) - - username = 'tut_snd' - password = 'p' - fact.UserAccountFactory(username=username, password=password) - login(self.browser, self.live_server_url, username, password) - - go_to_subscription(self, stage='validate') - self.remove_label_from_feedback('test') - added = self.browser.find_elements_by_xpath( - '//div[@id="feedback-label-selector"]//div[contains(text(), "WILL BE ADDED")]/..//*' - ) - removed = self.browser.find_elements_by_xpath( - '//div[@id="feedback-label-selector"]//div[contains(text(), "WILL BE REMOVED")]/..//*' - ) - current = self.browser.find_elements_by_xpath( - '//div[@id="feedback-label-selector"]//div[contains(text(), "CURRENT LABELS")]/..//*' - ) - - self.assertGreater(len(removed), 1) - self.assertEqual(len(current), 1) - self.assertEqual(len(added), 1) - - self.browser.find_element_by_id('submit-feedback').click() - sub_url = 'correction/ended' - WebDriverWait(self.browser, 10).until(ec.url_contains(sub_url)) - label = FeedbackLabel.objects.get(name='test') - - self.assertEqual(len(label.feedback.all()), 0) - - def test_can_add_label_to_submitted_feedback(self): - self._login() - self.create_label('test', 'some test dec', 1) - self.create_label('add', 'add test dec', 4) - go_to_subscription(self) - code = reconstruct_submission_code(self) - self.assign_label_to_feedback('test') - self.browser.find_element_by_id('score-full').click() - self.browser.find_element_by_id('submit-feedback').click() - WebDriverWait(self.browser, 10).until( - wait_until_code_changes(self, code) - ) - - # logs out user - reset_browser_after_test(self.browser, self.live_server_url) - - username = 'tut_snd' - password = 'p' - fact.UserAccountFactory(username=username, password=password) - login(self.browser, self.live_server_url, username, password) - go_to_subscription(self, stage='validate') - - self.assign_label_to_feedback('add') - added = self.browser.find_elements_by_xpath( - '//div[@id="feedback-label-selector"]//div[contains(text(), "WILL BE ADDED")]/..//*' - ) - removed = self.browser.find_elements_by_xpath( - '//div[@id="feedback-label-selector"]//div[contains(text(), "WILL BE REMOVED")]/..//*' - ) - current = self.browser.find_elements_by_xpath( - '//div[@id="feedback-label-selector"]//div[contains(text(), "CURRENT LABELS")]/..//*' - ) - - self.assertEqual(len(removed), 1) - self.assertGreater(len(added), 1) - self.assertGreater(len(current), 1) - - self.browser.find_element_by_id('submit-feedback').click() - sub_url = 'correction/ended' - WebDriverWait(self.browser, 10).until(ec.url_contains(sub_url)) - new_label = FeedbackLabel.objects.get(name='add') - old_label = FeedbackLabel.objects.get(name='test') - - self.assertEqual(len(old_label.feedback.all()), 1) - self.assertEqual(len(new_label.feedback.all()), 1) - - def test_can_assign_label_to_comment(self): - self._login() - self.create_label('test', 'some desc', 1) - go_to_subscription(self) - code = reconstruct_submission_code(self) - comment_line = 1 - self.assign_label_to_comment_line(comment_line, 'test') - added = self.browser.find_elements_by_xpath( - f'//tr[@id="sub-line-{comment_line}"]//div[contains(text(), "WILL BE ADDED")]/..//*' - ) - self.assertGreater(len(added), 1) - - self.browser.find_element_by_id('score-full').click() - self.browser.find_element_by_id('submit-feedback').click() - WebDriverWait(self.browser, 10).until( - wait_until_code_changes(self, code) - ) - - label = FeedbackLabel.objects.get(name='test') - self.assertEqual(len(label.feedback_comments.all()), 1) - - def test_can_remove_label_from_submitted_comment(self): - self._login() - self.create_label('test', 'some desc', 1) - go_to_subscription(self) - code = reconstruct_submission_code(self) - comment_line = 1 - self.assign_label_to_comment_line(comment_line, 'test') - self.browser.find_element_by_id('score-full').click() - self.browser.find_element_by_id('submit-feedback').click() - WebDriverWait(self.browser, 10).until( - wait_until_code_changes(self, code) - ) - - # logs out user - reset_browser_after_test(self.browser, self.live_server_url) - - username = 'tut_snd' - password = 'p' - fact.UserAccountFactory(username=username, password=password) - login(self.browser, self.live_server_url, username, password) - - go_to_subscription(self, stage='validate') - self.browser.find_element_by_id('feedback-visibility-toggle').click() - - self.remove_label_from_comment_line(comment_line, 'test') - added = self.browser.find_elements_by_xpath( - f'//tr[@id="sub-line-{comment_line}"]//div[contains(text(), "WILL BE ADDED")]/..//*' - ) - removed = self.browser.find_elements_by_xpath( - f'//tr[@id="sub-line-{comment_line}"]//div[contains(text(), "WILL BE REMOVED")]/..//*' - ) - current = self.browser.find_elements_by_xpath( - f'//tr[@id="sub-line-{comment_line}"]//div[contains(text(), "CURRENT LABELS")]/..//*' - ) - - self.assertGreater(len(removed), 1) - self.assertEqual(len(added), 1) - self.assertEqual(len(current), 1) - - self.browser.find_element_by_id('submit-feedback').click() - sub_url = 'correction/ended' - WebDriverWait(self.browser, 10).until(ec.url_contains(sub_url)) - label = FeedbackLabel.objects.get(name='test') - - # comment still exists but is now invisible - self.assertEqual(label.feedback_comments.all()[0].visible_to_student, False) - - def test_can_add_label_to_submitted_comment(self): - self._login() - self.create_label('test', 'some desc', 1) - self.create_label('add', 'add test desc', 4) - go_to_subscription(self) - code = reconstruct_submission_code(self) - comment_line = 1 - self.assign_label_to_comment_line(comment_line, 'test') - self.browser.find_element_by_id('score-full').click() - self.browser.find_element_by_id('submit-feedback').click() - WebDriverWait(self.browser, 10).until( - wait_until_code_changes(self, code) - ) - - # logs out user - reset_browser_after_test(self.browser, self.live_server_url) - - username = 'tut_snd' - password = 'p' - fact.UserAccountFactory(username=username, password=password) - login(self.browser, self.live_server_url, username, password) - - go_to_subscription(self, stage='validate') - self.browser.find_element_by_id('feedback-visibility-toggle').click() - self.assign_label_to_comment_line(comment_line, 'add') - added = self.browser.find_elements_by_xpath( - f'//tr[@id="sub-line-{comment_line}"]//div[contains(text(), "WILL BE ADDED")]/..//*' - ) - removed = self.browser.find_elements_by_xpath( - f'//tr[@id="sub-line-{comment_line}"]//div[contains(text(), "WILL BE REMOVED")]/..//*' - ) - current = self.browser.find_elements_by_xpath( - f'//tr[@id="sub-line-{comment_line}"]//div[contains(text(), "CURRENT LABELS")]/..//*' - ) - - self.assertEqual(len(removed), 1) - self.assertGreater(len(current), 1) - self.assertGreater(len(added), 1) - - self.browser.find_element_by_id('submit-feedback').click() - sub_url = 'correction/ended' - WebDriverWait(self.browser, 10).until(ec.url_contains(sub_url)) - label = FeedbackLabel.objects.get(name='add') - - # comment still exists but is now invisible - self.assertEqual(len(label.feedback_comments.all()), 1) diff --git a/grady/functional_tests/test_feedback_update.py b/grady/functional_tests/test_feedback_update.py deleted file mode 100644 index b25c8ad3..00000000 --- a/grady/functional_tests/test_feedback_update.py +++ /dev/null @@ -1,80 +0,0 @@ -from selenium.webdriver import ActionChains -from selenium.webdriver.support import expected_conditions as ec -from selenium.webdriver.common.by import By - -from selenium.webdriver.support.ui import WebDriverWait - -from core.models import UserAccount -from functional_tests.util import (GradyTestCase, login, go_to_subscription, - reconstruct_submission_code, correct_some_submission, - reset_browser_after_test) -from util import factory_boys as fact - - -class TestFeedbackUpdate(GradyTestCase): - username = None - password = None - - def setUp(self): - super().setUp() - self.username = 'tut' - self.password = 'p' - fact.UserAccountFactory( - username=self.username, - password=self.password, - role=UserAccount.TUTOR - ) - self.sub_type = fact.SubmissionTypeFactory.create() - fact.SubmissionFactory.create_batch(2, type=self.sub_type) - - def tearDown(self): - self.saveScreenshots() - reset_browser_after_test(self.browser, self.live_server_url) - - def _login(self): - login(self.browser, self.live_server_url, self.username, self.password) - - def test_updating_own_feedback_doesnt_invalidate_other_tutors_assignment(self): - # First correct some submission as the first tutor - self._login() - code = correct_some_submission(self) - first_tab = self.browser.current_window_handle - - # open a new tab and go to the validation page of the just corrected submission - self.browser.execute_script('window.open()') - self.browser.switch_to.window(self.browser.window_handles[-1]) - self.browser.get(self.live_server_url) - second_tab = self.browser.current_window_handle - username = 'other_tut' - password = 'p' - fact.UserAccountFactory( - username=username, - password=password, - role=UserAccount.TUTOR - ) - login(self.browser, self.live_server_url, username, password) - go_to_subscription(self, stage='validate') - other_code = reconstruct_submission_code(self) - - # The submission to be validated should be the same as the one that has been corrected - self.assertEqual( - code, other_code, - "Code for validation submissions is different than initial") - - # Go to first tab and update the submission as the first tutor via the Feedback History page - self.browser.switch_to.window(first_tab) - self.browser.find_element_by_partial_link_text('Feedback History').click() - WebDriverWait(self.browser, 15, 0.2).until( - ec.visibility_of_element_located((By.CLASS_NAME, 'feedback-row'))) - feedback_entry = self.browser.find_element_by_class_name('feedback-row') - ActionChains(self.browser).move_to_element(feedback_entry).click().perform() - - self.browser.find_element_by_id('submit-feedback').click() - - # as the second tutor, submit the validated feedback - self.browser.switch_to.window(second_tab) - self.browser.find_element_by_id('submit-feedback').click() - WebDriverWait(self.browser, 10).until( - ec.url_contains('ended'), - 'Browser is not on Subscription ended site, therefore Feedback could not be submitted' - ) diff --git a/grady/functional_tests/test_front_pages.py b/grady/functional_tests/test_front_pages.py deleted file mode 100644 index 35bef4e3..00000000 --- a/grady/functional_tests/test_front_pages.py +++ /dev/null @@ -1,100 +0,0 @@ -from selenium.webdriver.support.ui import WebDriverWait - -from core import models -from core.models import UserAccount -from functional_tests.util import (GradyTestCase, login, subscriptions_loaded_cond, - extract_hrefs_hashes, reset_browser_after_test) -from util import factory_boys as fact - - -# This is a little hack to have Super test class which implements common behaviour -# and tests but is not executed. In order to have the testrunner ignore the -# FrontPageTestsTutorReviewer class we need to define it within a class which does not inherit from -# unittest -class UntestedParent: - class FrontPageTestsTutorReviewer(GradyTestCase): - username = None - password = None - role = None - - def setUp(self): - fact.SubmissionFactory.create_batch(4) - - def tearDown(self): - self.saveScreenshots() - reset_browser_after_test(self.browser, self.live_server_url) - - def _login(self): - login(self.browser, self.live_server_url, self.username, self.password) - - def test_statistics_are_shown(self): - self._login() - statistics = self.browser.find_element_by_id('correction-statistics') - title = statistics.find_element_by_class_name('title') - self.assertEqual('Statistics', title.text) - - def test_available_tasks_are_shown(self): - self._login() - WebDriverWait(self.browser, 10).until(subscriptions_loaded_cond(self.browser)) - tasks = self.browser.find_element_by_name('subscription-list') - submission_type_links = extract_hrefs_hashes( - tasks.find_elements_by_tag_name('a') - ) - sub_types = models.SubmissionType.objects.all() - default_group = models.Group.objects.first() - for sub_type in sub_types: - self.assertIn(f'/correction/{sub_type.pk}/feedback-creation/{default_group.pk}', - submission_type_links) - - -class FrontPageTestsTutor(UntestedParent.FrontPageTestsTutorReviewer): - def setUp(self): - super().setUp() - self.username = 'tutor' - self.password = 'p' - self.role = UserAccount.TUTOR - fact.UserAccountFactory( - username=self.username, - password=self.password - ) - - def tearDown(self): - reset_browser_after_test(self.browser, self.live_server_url) - - def test_side_bar_contains_correct_items(self): - self._login() - drawer = self.browser.find_element_by_class_name('v-navigation-drawer') - links = extract_hrefs_hashes(drawer.find_elements_by_tag_name('a')) - print(links) - self.assertTrue(all(link in links for link in ['/home', '/feedback'])) - footer = drawer.find_element_by_class_name('sidebar-footer') - feedback_link = footer.find_element_by_css_selector('#feedback-btn') - self.assertEqual('https://gitlab.gwdg.de/j.michal/grady/issues', - feedback_link.get_attribute('href')) - - -class FrontPageTestsReviewer(UntestedParent.FrontPageTestsTutorReviewer): - def setUp(self): - super().setUp() - self.username = 'reviewer' - self.password = 'p' - self.role = UserAccount.REVIEWER - fact.UserAccountFactory( - username=self.username, - password=self.password, - role=self.role - ) - - def tearDown(self): - reset_browser_after_test(self.browser, self.live_server_url) - - def test_side_bar_contains_correct_items(self): - self._login() - drawer = self.browser.find_element_by_class_name('v-navigation-drawer') - links = extract_hrefs_hashes(drawer.find_elements_by_tag_name('a')) - self.assertTrue(all(link in links for link in - ['/home', '/feedback', '/participant-overview', '/tutor-overview'])) - footer = drawer.find_element_by_class_name('sidebar-footer') - feedback_link = footer.find_element_by_css_selector('#feedback-btn') - self.assertEqual('https://gitlab.gwdg.de/j.michal/grady/issues', - feedback_link.get_attribute('href')) diff --git a/grady/functional_tests/test_import.py b/grady/functional_tests/test_import.py deleted file mode 100644 index bd7cb109..00000000 --- a/grady/functional_tests/test_import.py +++ /dev/null @@ -1,45 +0,0 @@ -import os -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.common.action_chains import ActionChains - - -from core import models -from functional_tests.util import (GradyTestCase, login, query_returns_object, - reset_browser_after_test) -from util import factory_boys as fact - - -JSON_EXPORT_FILE = os.path.join(os.path.dirname(__file__), 'data/hektor.json') - - -class TestImport(GradyTestCase): - username = None - password = None - role = None - - def setUp(self): - super().setUp() - self.username = 'rev' - self.password = 'p' - fact.UserAccountFactory( - username=self.username, - password=self.password, - role=models.UserAccount.REVIEWER - ) - - def tearDown(self): - self.saveScreenshots() - reset_browser_after_test(self.browser, self.live_server_url) - - def _login(self): - login(self.browser, self.live_server_url, self.username, self.password) - - def test_reviewer_can_import_data(self): - self._login() - self.browser.find_element_by_id("import-data-list-item").click() - file_input = self.browser.find_element_by_id("file-input") - file_input.send_keys(JSON_EXPORT_FILE) - # self.browser.find_element_by_id("submit-import").click() - import_btn = self.browser.find_element_by_id('submit-import') - ActionChains(self.browser).move_to_element(import_btn).click().perform() - WebDriverWait(self.browser, 20).until(query_returns_object(models.SubmissionType)) diff --git a/grady/functional_tests/test_login_page.py b/grady/functional_tests/test_login_page.py deleted file mode 100644 index f99d47c4..00000000 --- a/grady/functional_tests/test_login_page.py +++ /dev/null @@ -1,160 +0,0 @@ -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.support import expected_conditions as ec -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.common.action_chains import ActionChains - -from constance.test import override_config -from core.models import UserAccount -from util.factories import make_test_data, make_exams -from functional_tests.util import GradyTestCase, reset_browser_after_test - - -class LoginPageTest(GradyTestCase): - - def setUp(self): - exams = make_exams([{ - 'module_reference': 'Test Exam 01', - 'total_score': 100, - 'pass_score': 60, - }] - ) - self.test_data = make_test_data(data_dict={ - 'exams': [{ - 'module_reference': 'Test Exam 01', - 'total_score': 100, - 'pass_score': 60, - 'exam_type_id': exams[0].exam_type_id - }], - 'submission_types': [ - { - 'name': '01. Sort this or that', - 'full_score': 35, - 'description': 'Very complicated', - 'solution': 'Trivial!', - 'exam_type': exams[0] - }, - { - 'name': '02. Merge this or that or maybe even this', - 'full_score': 35, - 'description': 'Very complicated', - 'solution': 'Trivial!', - 'exam_type': exams[0] - } - ], - 'students': [ - { - 'username': 'student01', - 'password': 'p', - 'exam': 'Test Exam 01' - }, - { - 'username': 'student02', - 'password': 'p', - 'exam': 'Test Exam 01' - } - ], - 'tutors': [ - {'username': 'tutor01', 'password': 'p'}, - {'username': 'tutor02', 'password': 'p'} - ], - 'reviewers': [ - {'username': 'reviewer', 'password': 'p'} - ], - 'submissions': [ - { - 'text': 'function blabl\n' - ' on multi lines\n' - ' for blabla in bla:\n' - ' lorem ipsum und so\n', - 'type': '01. Sort this or that', - 'user': 'student01', - 'feedback': { - 'score': 5, - 'is_final': True, - 'feedback_lines': { - '1': [{ - 'text': 'This is very bad!', - 'of_tutor': 'tutor01' - }], - } - - } - }, - { - 'text': 'function blabl\n' - ' asasxasx\n' - ' lorem ipsum und so\n', - 'type': '02. Merge this or that or maybe even this', - 'user': 'student01' - }, - { - 'text': 'function blabl\n' - ' on multi lines\n' - ' asasxasx\n' - ' lorem ipsum und so\n', - 'type': '01. Sort this or that', - 'user': 'student02' - }, - { - 'text': 'function lorem ipsum etc\n', - 'type': '02. Merge this or that or maybe even this', - 'user': 'student02' - }, - ]} - ) - - def tearDown(self): - self.saveScreenshots() - reset_browser_after_test(self.browser, self.live_server_url) - - def _login(self, account): - self.browser.get(self.live_server_url) - username_input = self.browser.find_element_by_xpath('//input[@id="username"]') - username_input.send_keys(account.username) - password_input = self.browser.find_element_by_xpath('//input[@id="password"]') - password_input.send_keys('p') - self.browser.find_element_by_xpath('//button[@type="submit"]').send_keys(Keys.ENTER) - WebDriverWait(self.browser, 10).until(ec.url_contains('/home')) - - def test_tutor_can_login(self): - tutor = self.test_data['tutors'][0] - self._login(tutor) - self.assertTrue(self.browser.current_url.endswith('#/home')) - - def test_reviewer_can_login(self): - reviewer = self.test_data['reviewers'][0] - self._login(reviewer) - self.assertTrue(self.browser.current_url.endswith('#/home')) - - def test_student_can_login(self): - student = self.test_data['students'][0] - self._login(student) - self.assertTrue(self.browser.current_url.endswith('#/home')) - - @override_config(REGISTRATION_PASSWORD='pw') - def test_can_register_account(self): - username = 'danny' - password = 'redrum-is-murder-reversed' - instance_password = 'pw' - self.browser.get(self.live_server_url) - self.browser.find_element_by_id('register').click() - self.browser.find_element_by_id('gdpr-notice') - # self.browser.find_element_by_id('accept-gdpr-notice').click() - accept_btn = self.browser.find_element_by_id('accept-gdpr-notice') - ActionChains(self.browser).move_to_element(accept_btn).click().perform() - username_input = self.browser.find_element_by_id('input-register-username') - username_input.send_keys(username) - instance_password_input = self.browser.find_element_by_id( - 'input-register-instance-password' - ) - instance_password_input.send_keys(instance_password) - password_input = self.browser.find_element_by_id('input-register-password') - password_input.send_keys(password) - password_repeat_input = self.browser.find_element_by_id('input-register-password-repeat') - password_repeat_input.send_keys(password) - register_submit_el = self.browser.find_element_by_id('register-submit') - register_submit_el.click() - WebDriverWait(self.browser, 10).until_not(ec.visibility_of(register_submit_el)) - tutor = UserAccount.objects.get(username=username) - self.assertEqual(UserAccount.TUTOR, tutor.role) - self.assertFalse(tutor.is_active, "Tutors should be inactive after registered") diff --git a/grady/functional_tests/test_multiple_exams.py b/grady/functional_tests/test_multiple_exams.py deleted file mode 100644 index 5729a45e..00000000 --- a/grady/functional_tests/test_multiple_exams.py +++ /dev/null @@ -1,161 +0,0 @@ -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.support import expected_conditions as ec -from selenium.webdriver.support.ui import WebDriverWait - -from util.factories import make_test_data, make_exams -from functional_tests.util import GradyTestCase, reset_browser_after_test - - -class TestMultipleExams(GradyTestCase): - - def setUp(self): - exams = make_exams([{ - 'module_reference': 'Test Exam 01', - 'total_score': 100, - 'pass_score': 60, - }, { - 'module_reference': 'Test Exam 02', - 'total_score': 120, - 'pass_score': 75}] - ) - - self.test_data = make_test_data(data_dict={ - 'exams': [{ - 'module_reference': 'Test Exam 01', - 'total_score': 100, - 'pass_score': 60, - 'exam_type_id': exams[0].exam_type_id - }, { - 'module_reference': 'Test Exam 02', - 'total_score': 120, - 'pass_score': 75, - 'exam_type_id': exams[1].exam_type_id - }], - 'submission_types': [ - { - 'name': '01. Sort this or that', - 'full_score': 35, - 'description': 'Very complicated', - 'solution': 'Trivial!', - 'exam_type': exams[0] - }, - { - 'name': '02. Merge this or that or maybe even this', - 'full_score': 35, - 'description': 'Very complicated', - 'solution': 'Trivial!', - 'exam_type': exams[0] - }, - { - 'name': '05', - 'full_score': 35, - 'description': 'It is not a story the jedi would tell you', - 'solution': 'Trivial!', - 'exam_type': exams[1] - } - ], - 'students': [ - { - 'username': 'student01', - 'password': 'p', - 'exam': 'Test Exam 01' - }, - { - 'username': 'student02', - 'password': 'p', - 'exam': 'Test Exam 01' - }, - { - 'username': 'student03', - 'password': 'p', - 'exam': 'Test Exam 02' - - }, - { - 'username': 'student04', - 'password': 'p', - 'exam': 'Test Exam 02' - } - ], - 'tutors': [ - {'username': 'tutor01', 'password': 'p'}, - {'username': 'tutor02', 'password': 'p'} - ], - 'reviewers': [ - {'username': 'reviewer', 'password': 'p'} - ], - 'submissions': [ - { - 'text': 'function blabl\n' - ' on multi lines\n' - ' for blabla in bla:\n' - ' lorem ipsum und so\n', - 'type': '01. Sort this or that', - 'user': 'student01', - 'feedback': { - 'score': 5, - 'is_final': True, - 'feedback_lines': { - '1': [{ - 'text': 'This is very bad!', - 'of_tutor': 'tutor01' - }], - } - - } - }, - { - 'text': 'function blabl\n' - ' asasxasx\n' - ' lorem ipsum und so\n', - 'type': '02. Merge this or that or maybe even this', - 'user': 'student01' - }, - { - 'text': 'function blabl\n' - ' on multi lines\n' - ' asasxasx\n' - ' lorem ipsum und so\n', - 'type': '01. Sort this or that', - 'user': 'student02' - }, - { - 'text': 'function lorem ipsum etc\n', - 'type': '02. Merge this or that or maybe even this', - 'user': 'student02' - } - ]} - ) - - def tearDown(self): - self.saveScreenshots() - reset_browser_after_test(self.browser, self.live_server_url) - - def _login(self, account): - self.browser.get(self.live_server_url) - username_input = self.browser.find_element_by_xpath('//input[@id="username"]') - username_input.send_keys(account.username) - password_input = self.browser.find_element_by_xpath('//input[@id="password"]') - password_input.send_keys('p') - self.browser.find_element_by_xpath('//button[@type="submit"]').send_keys(Keys.ENTER) - WebDriverWait(self.browser, 10).until(ec.url_contains('/exam_selection')) - - def test_selection_page(self): - reviewer = self.test_data['reviewers'][0] - self._login(reviewer) - self.assertTrue(self.browser.current_url.endswith('#/exam_selection')) - - def test_selection_of_exams(self): - testBool = True - reviewer = self.test_data['reviewers'][0] - self._login(reviewer) - items = self.browser.find_elements_by_id("listItem") - for i in range(len(items)): - itemText = items[i].text - items[i].click() - testBool = itemText == self.browser.find_element_by_class_name("title").text - if(not testBool): - break - self.browser.find_element_by_id("examsButton").click() - items = self.browser.find_elements_by_id("listItem") - self.assertTrue(testBool) diff --git a/grady/functional_tests/test_solution_comments.py b/grady/functional_tests/test_solution_comments.py deleted file mode 100644 index 0fa7e54f..00000000 --- a/grady/functional_tests/test_solution_comments.py +++ /dev/null @@ -1,141 +0,0 @@ -from selenium.webdriver.common.by import By -from selenium.webdriver.remote.webelement import WebElement -from selenium.webdriver.support import expected_conditions as ec -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.common.action_chains import ActionChains - - -from core import models -from functional_tests.util import (GradyTestCase, login, query_returns_object, - reset_browser_after_test, assertion_is_true) -from util import factory_boys as fact - - -class TestSolutionComments(GradyTestCase): - username = None - password = None - role = None - - def setUp(self): - super().setUp() - self.username = 'tut' - self.password = 'p' - fact.UserAccountFactory( - username=self.username, - password=self.password, - ) - self.sub_type = fact.SubmissionTypeFactory.create() - - def tearDown(self): - self.saveScreenshots() - reset_browser_after_test(self.browser, self.live_server_url) - - def _login(self): - login(self.browser, self.live_server_url, self.username, self.password) - - def _write_comment(self, text="A comment", line_no=1): - sub_types = self.browser.find_element_by_id('submission-types-list') - sub_types.find_element_by_tag_name('div').click() - solution_table = self.browser.find_element_by_class_name('solution-table') - tr_of_line = solution_table.find_element_by_id(f'solution-line-{line_no}') - tr_of_line.find_element_by_class_name('line-number-btn').click() - comment_input = tr_of_line.find_element_by_name('solution-comment-input') - comment_input.send_keys(text) - solution_table.find_element_by_id('submit-comment').click() - - def _edit_comment(self, old_text, new_text) -> WebElement: - solution_table = self.browser.find_element_by_class_name('solution-table') - comment = solution_table.find_element_by_xpath( - f"//div[@class='dialog-box' and .//*[contains(text(), '{old_text}')]]" - ) - comment.find_element_by_class_name('edit-button').click() - comment_input = solution_table.find_element_by_name('solution-comment-edit') - comment_input.send_keys(new_text) - solution_table.find_element_by_id('submit-comment').click() - return comment - - def test_tutor_can_add_comment(self): - self._login() - comment_text = 'A comment!' - self._write_comment(comment_text, 1) - solution_table = self.browser.find_element_by_class_name('solution-table') - displayed_text = solution_table.find_element_by_class_name('message').text - self.assertEqual(comment_text, displayed_text) - comment_obj = models.SolutionComment.objects.first() - self.assertEqual(comment_text, comment_obj.text) - self.assertEqual(1, comment_obj.of_line) - - def test_tutor_can_delete_own_comment(self): - self._login() - self._write_comment() - solution_table = self.browser.find_element_by_class_name('solution-table') - solution_table.find_element_by_class_name('delete-button').click() - # self.browser.find_element_by_id('confirm-delete-comment').click() - delete_btn = self.browser.find_element_by_id('confirm-delete-comment') - ActionChains(self.browser).move_to_element(delete_btn).click().perform() - WebDriverWait(self.browser, 10).until_not( - query_returns_object(models.SolutionComment), - "Solution comment not deleted." - ) - - def test_tutor_can_edit_own_comment(self): - self._login() - old_text = 'A comment' - new_text = 'A new text' - self._write_comment(old_text) - WebDriverWait(self.browser, 10).until(query_returns_object(models.SolutionComment)) - comment_obj = models.SolutionComment.objects.first() - self.assertEqual(old_text, comment_obj.text) - comment_el = self._edit_comment(old_text, new_text) - - def text_is_updated(): - displayed_text = comment_el.find_element_by_class_name('message').text - return self.assertEqual(new_text, displayed_text) - - WebDriverWait(self.browser, 3).until(assertion_is_true(text_is_updated)) - comment_obj.refresh_from_db() - self.assertEqual(new_text, comment_obj.text) - - def test_tutor_can_not_delete_edit_other_comment(self): - self._login() - self._write_comment() - username = 'tut2' - password = 'p' - fact.UserAccountFactory(username=username, password=password) - reset_browser_after_test(self.browser, self.live_server_url) - login(self.browser, self.live_server_url, username, password) - sub_types = self.browser.find_element_by_id('submission-types-list') - sub_types.find_element_by_tag_name('div').click() - solution_table = self.browser.find_element_by_class_name('solution-table') - # Set the implicit wait for those to shorter, to reduce test run time - self.browser.implicitly_wait(2) - edit_buttons = solution_table.find_elements_by_class_name('edit-button') - delete_buttons = solution_table.find_elements_by_class_name('delete-button') - self.browser.implicitly_wait(10) - self.assertEqual(0, len(edit_buttons)) - self.assertEqual(0, len(delete_buttons)) - - def test_reviewer_can_delete_tutor_comment(self): - self._login() - self._write_comment() - username = 'rev' - password = 'p' - fact.UserAccountFactory( - username=username, password=password, role=models.UserAccount.REVIEWER - ) - reset_browser_after_test(self.browser, self.live_server_url) - login(self.browser, self.live_server_url, username, password) - sub_types = self.browser.find_element_by_id('submission-types-list') - sub_types.find_element_by_tag_name('div').click() - solution_table = self.browser.find_element_by_class_name('solution-table') - solution_table.find_element_by_class_name('delete-button').click() - # self.browser.find_element_by_id('confirm-delete-comment').click() - delete_btn = self.browser.find_element_by_id('confirm-delete-comment') - ActionChains(self.browser).move_to_element(delete_btn).click().perform() - WebDriverWait(self.browser, 10).until_not( - ec.presence_of_element_located((By.CLASS_NAME, 'dialog-box')) - ) - WebDriverWait(self.browser, 10).until_not( - query_returns_object(models.SolutionComment), - "Solution comment not deleted." - ) diff --git a/grady/functional_tests/util.py b/grady/functional_tests/util.py deleted file mode 100644 index 920e06d3..00000000 --- a/grady/functional_tests/util.py +++ /dev/null @@ -1,221 +0,0 @@ -import os -from itertools import islice -from typing import Sequence -import time - -from selenium import webdriver -from selenium.webdriver import FirefoxProfile -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.firefox.options import Options -from selenium.webdriver.remote.webelement import WebElement -from selenium.webdriver.support import expected_conditions as ec -from selenium.webdriver.support.ui import WebDriverWait -from selenium.common.exceptions import StaleElementReferenceException, NoSuchElementException -from selenium.webdriver.common.by import By -from django.core.exceptions import ObjectDoesNotExist -from django.test import LiveServerTestCase - -SCREENSHOTS = os.path.join(os.path.dirname(__file__), 'screenshots') - - -class GradyTestCase(LiveServerTestCase): - browser: webdriver.Firefox = None - - @classmethod - def setUpClass(cls): - super().setUpClass() - cls.browser = create_browser() - - @classmethod - def tearDownClass(cls): - super().tearDownClass() - cls.browser.quit() - - def saveScreenshots(self): - try: - os.mkdir(SCREENSHOTS) - except FileExistsError: - pass - for method, error in self._outcome.errors: - if error: - self.browser.get_screenshot_as_file( - os.path.join(SCREENSHOTS, self.id() + ".png") - ) - - -def create_browser() -> webdriver.Firefox: - options = Options() - options.headless = bool(os.environ.get('HEADLESS_TESTS', False)) - options.set_capability('unhandledPromptBehavior', 'accept') - options.set_capability('strictFileInteractability', False) - profile = FirefoxProfile() - profile.set_preference("dom.disable_beforeunload", True) - profile.set_preference("browser.download.folderList", 2) - profile.set_preference("browser.download.dir", os.path.dirname(__file__)) - profile.set_preference("browser.download.useDownloadDir", True) - profile.set_preference("browser.download.panel.shown", False) - profile.set_preference("browser.helperApps.neverAsk.saveToDisk", 'application/vnd.hzn-3d-crossword;video/3gpp;video/3gpp2;application/vnd.mseq;application/vnd.3m.post-it-notes;application/vnd.3gpp.pic-bw-large;application/vnd.3gpp.pic-bw-small;application/vnd.3gpp.pic-bw-var;application/vnd.3gp2.tcap;application/x-7z-compressed;application/x-abiword;application/x-ace-compressed;application/vnd.americandynamics.acc;application/vnd.acucobol;application/vnd.acucorp;audio/adpcm;application/x-authorware-bin;application/x-athorware-map;application/x-authorware-seg;application/vnd.adobe.air-application-installer-package+zip;application/x-shockwave-flash;application/vnd.adobe.fxp;application/pdf;application/vnd.cups-ppd;application/x-director;applicaion/vnd.adobe.xdp+xml;application/vnd.adobe.xfdf;audio/x-aac;application/vnd.ahead.space;application/vnd.airzip.filesecure.azf;application/vnd.airzip.filesecure.azs;application/vnd.amazon.ebook;application/vnd.amiga.ami;applicatin/andrew-inset;application/vnd.android.package-archive;application/vnd.anser-web-certificate-issue-initiation;application/vnd.anser-web-funds-transfer-initiation;application/vnd.antix.game-component;application/vnd.apple.installe+xml;application/applixware;application/vnd.hhe.lesson-player;application/vnd.aristanetworks.swi;text/x-asm;application/atomcat+xml;application/atomsvc+xml;application/atom+xml;application/pkix-attr-cert;audio/x-aiff;video/x-msvieo;application/vnd.audiograph;image/vnd.dxf;model/vnd.dwf;text/plain-bas;application/x-bcpio;application/octet-stream;image/bmp;application/x-bittorrent;application/vnd.rim.cod;application/vnd.blueice.multipass;application/vnd.bm;application/x-sh;image/prs.btif;application/vnd.businessobjects;application/x-bzip;application/x-bzip2;application/x-csh;text/x-c;application/vnd.chemdraw+xml;text/css;chemical/x-cdx;chemical/x-cml;chemical/x-csml;application/vn.contact.cmsg;application/vnd.claymore;application/vnd.clonk.c4group;image/vnd.dvb.subtitle;application/cdmi-capability;application/cdmi-container;application/cdmi-domain;application/cdmi-object;application/cdmi-queue;applicationvnd.cluetrust.cartomobile-config;application/vnd.cluetrust.cartomobile-config-pkg;image/x-cmu-raster;model/vnd.collada+xml;text/csv;application/mac-compactpro;application/vnd.wap.wmlc;image/cgm;x-conference/x-cooltalk;image/x-cmx;application/vnd.xara;application/vnd.cosmocaller;application/x-cpio;application/vnd.crick.clicker;application/vnd.crick.clicker.keyboard;application/vnd.crick.clicker.palette;application/vnd.crick.clicker.template;application/vn.crick.clicker.wordbank;application/vnd.criticaltools.wbs+xml;application/vnd.rig.cryptonote;chemical/x-cif;chemical/x-cmdf;application/cu-seeme;application/prs.cww;text/vnd.curl;text/vnd.curl.dcurl;text/vnd.curl.mcurl;text/vnd.crl.scurl;application/vnd.curl.car;application/vnd.curl.pcurl;application/vnd.yellowriver-custom-menu;application/dssc+der;application/dssc+xml;application/x-debian-package;audio/vnd.dece.audio;image/vnd.dece.graphic;video/vnd.dec.hd;video/vnd.dece.mobile;video/vnd.uvvu.mp4;video/vnd.dece.pd;video/vnd.dece.sd;video/vnd.dece.video;application/x-dvi;application/vnd.fdsn.seed;application/x-dtbook+xml;application/x-dtbresource+xml;application/vnd.dvb.ait;applcation/vnd.dvb.service;audio/vnd.digital-winds;image/vnd.djvu;application/xml-dtd;application/vnd.dolby.mlp;application/x-doom;application/vnd.dpgraph;audio/vnd.dra;application/vnd.dreamfactory;audio/vnd.dts;audio/vnd.dts.hd;imag/vnd.dwg;application/vnd.dynageo;application/ecmascript;application/vnd.ecowin.chart;image/vnd.fujixerox.edmics-mmr;image/vnd.fujixerox.edmics-rlc;application/exi;application/vnd.proteus.magazine;application/epub+zip;message/rfc82;application/vnd.enliven;application/vnd.is-xpr;image/vnd.xiff;application/vnd.xfdl;application/emma+xml;application/vnd.ezpix-album;application/vnd.ezpix-package;image/vnd.fst;video/vnd.fvt;image/vnd.fastbidsheet;application/vn.denovo.fcselayout-link;video/x-f4v;video/x-flv;image/vnd.fpx;image/vnd.net-fpx;text/vnd.fmi.flexstor;video/x-fli;application/vnd.fluxtime.clip;application/vnd.fdf;text/x-fortran;application/vnd.mif;application/vnd.framemaker;imae/x-freehand;application/vnd.fsc.weblaunch;application/vnd.frogans.fnc;application/vnd.frogans.ltf;application/vnd.fujixerox.ddd;application/vnd.fujixerox.docuworks;application/vnd.fujixerox.docuworks.binder;application/vnd.fujitu.oasys;application/vnd.fujitsu.oasys2;application/vnd.fujitsu.oasys3;application/vnd.fujitsu.oasysgp;application/vnd.fujitsu.oasysprs;application/x-futuresplash;application/vnd.fuzzysheet;image/g3fax;application/vnd.gmx;model/vn.gtw;application/vnd.genomatix.tuxedo;application/vnd.geogebra.file;application/vnd.geogebra.tool;model/vnd.gdl;application/vnd.geometry-explorer;application/vnd.geonext;application/vnd.geoplan;application/vnd.geospace;applicatio/x-font-ghostscript;application/x-font-bdf;application/x-gtar;application/x-texinfo;application/x-gnumeric;application/vnd.google-earth.kml+xml;application/vnd.google-earth.kmz;application/vnd.grafeq;image/gif;text/vnd.graphviz;aplication/vnd.groove-account;application/vnd.groove-help;application/vnd.groove-identity-message;application/vnd.groove-injector;application/vnd.groove-tool-message;application/vnd.groove-tool-template;application/vnd.groove-vcar;video/h261;video/h263;video/h264;application/vnd.hp-hpid;application/vnd.hp-hps;application/x-hdf;audio/vnd.rip;application/vnd.hbci;application/vnd.hp-jlyt;application/vnd.hp-pcl;application/vnd.hp-hpgl;application/vnd.yamaha.h-script;application/vnd.yamaha.hv-dic;application/vnd.yamaha.hv-voice;application/vnd.hydrostatix.sof-data;application/hyperstudio;application/vnd.hal+xml;text/html;application/vnd.ibm.rights-management;application/vnd.ibm.securecontainer;text/calendar;application/vnd.iccprofile;image/x-icon;application/vnd.igloader;image/ief;application/vnd.immervision-ivp;application/vnd.immervision-ivu;application/reginfo+xml;text/vnd.in3d.3dml;text/vnd.in3d.spot;mode/iges;application/vnd.intergeo;application/vnd.cinderella;application/vnd.intercon.formnet;application/vnd.isac.fcs;application/ipfix;application/pkix-cert;application/pkixcmp;application/pkix-crl;application/pkix-pkipath;applicaion/vnd.insors.igm;application/vnd.ipunplugged.rcprofile;application/vnd.irepository.package+xml;text/vnd.sun.j2me.app-descriptor;application/java-archive;application/java-vm;application/x-java-jnlp-file;application/java-serializd-object;text/x-java-source,java;application/javascript;application/json;application/vnd.joost.joda-archive;video/jpm;image/jpeg;video/jpeg;application/vnd.kahootz;application/vnd.chipnuts.karaoke-mmd;application/vnd.kde.karbon;aplication/vnd.kde.kchart;application/vnd.kde.kformula;application/vnd.kde.kivio;application/vnd.kde.kontour;application/vnd.kde.kpresenter;application/vnd.kde.kspread;application/vnd.kde.kword;application/vnd.kenameaapp;applicatin/vnd.kidspiration;application/vnd.kinar;application/vnd.kodak-descriptor;application/vnd.las.las+xml;application/x-latex;application/vnd.llamagraphics.life-balance.desktop;application/vnd.llamagraphics.life-balance.exchange+xml;application/vnd.jam;application/vnd.lotus-1-2-3;application/vnd.lotus-approach;application/vnd.lotus-freelance;application/vnd.lotus-notes;application/vnd.lotus-organizer;application/vnd.lotus-screencam;application/vnd.lotus-wordro;audio/vnd.lucent.voice;audio/x-mpegurl;video/x-m4v;application/mac-binhex40;application/vnd.macports.portpkg;application/vnd.osgeo.mapguide.package;application/marc;application/marcxml+xml;application/mxf;application/vnd.wolfrm.player;application/mathematica;application/mathml+xml;application/mbox;application/vnd.medcalcdata;application/mediaservercontrol+xml;application/vnd.mediastation.cdkey;application/vnd.mfer;application/vnd.mfmp;model/mesh;appliation/mads+xml;application/mets+xml;application/mods+xml;application/metalink4+xml;application/vnd.ms-powerpoint.template.macroenabled.12;application/vnd.ms-word.document.macroenabled.12;application/vnd.ms-word.template.macroenabed.12;application/vnd.mcd;application/vnd.micrografx.flo;application/vnd.micrografx.igx;application/vnd.eszigno3+xml;application/x-msaccess;video/x-ms-asf;application/x-msdownload;application/vnd.ms-artgalry;application/vnd.ms-ca-compressed;application/vnd.ms-ims;application/x-ms-application;application/x-msclip;image/vnd.ms-modi;application/vnd.ms-fontobject;application/vnd.ms-excel;application/vnd.ms-excel.addin.macroenabled.12;application/vnd.ms-excelsheet.binary.macroenabled.12;application/vnd.ms-excel.template.macroenabled.12;application/vnd.ms-excel.sheet.macroenabled.12;application/vnd.ms-htmlhelp;application/x-mscardfile;application/vnd.ms-lrm;application/x-msmediaview;aplication/x-msmoney;application/vnd.openxmlformats-officedocument.presentationml.presentation;application/vnd.openxmlformats-officedocument.presentationml.slide;application/vnd.openxmlformats-officedocument.presentationml.slideshw;application/vnd.openxmlformats-officedocument.presentationml.template;application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;application/vnd.openxmlformats-officedocument.spreadsheetml.template;application/vnd.openxmformats-officedocument.wordprocessingml.document;application/vnd.openxmlformats-officedocument.wordprocessingml.template;application/x-msbinder;application/vnd.ms-officetheme;application/onenote;audio/vnd.ms-playready.media.pya;vdeo/vnd.ms-playready.media.pyv;application/vnd.ms-powerpoint;application/vnd.ms-powerpoint.addin.macroenabled.12;application/vnd.ms-powerpoint.slide.macroenabled.12;application/vnd.ms-powerpoint.presentation.macroenabled.12;appliation/vnd.ms-powerpoint.slideshow.macroenabled.12;application/vnd.ms-project;application/x-mspublisher;application/x-msschedule;application/x-silverlight-app;application/vnd.ms-pki.stl;application/vnd.ms-pki.seccat;application/vn.visio;video/x-ms-wm;audio/x-ms-wma;audio/x-ms-wax;video/x-ms-wmx;application/x-ms-wmd;application/vnd.ms-wpl;application/x-ms-wmz;video/x-ms-wmv;video/x-ms-wvx;application/x-msmetafile;application/x-msterminal;application/msword;application/x-mswrite;application/vnd.ms-works;application/x-ms-xbap;application/vnd.ms-xpsdocument;audio/midi;application/vnd.ibm.minipay;application/vnd.ibm.modcap;application/vnd.jcp.javame.midlet-rms;application/vnd.tmobile-ivetv;application/x-mobipocket-ebook;application/vnd.mobius.mbk;application/vnd.mobius.dis;application/vnd.mobius.plc;application/vnd.mobius.mqy;application/vnd.mobius.msl;application/vnd.mobius.txf;application/vnd.mobius.daf;tex/vnd.fly;application/vnd.mophun.certificate;application/vnd.mophun.application;video/mj2;audio/mpeg;video/vnd.mpegurl;video/mpeg;application/mp21;audio/mp4;video/mp4;application/mp4;application/vnd.apple.mpegurl;application/vnd.msician;application/vnd.muvee.style;application/xv+xml;application/vnd.nokia.n-gage.data;application/vnd.nokia.n-gage.symbian.install;application/x-dtbncx+xml;application/x-netcdf;application/vnd.neurolanguage.nlu;application/vnd.na;application/vnd.noblenet-directory;application/vnd.noblenet-sealer;application/vnd.noblenet-web;application/vnd.nokia.radio-preset;application/vnd.nokia.radio-presets;text/n3;application/vnd.novadigm.edm;application/vnd.novadim.edx;application/vnd.novadigm.ext;application/vnd.flographit;audio/vnd.nuera.ecelp4800;audio/vnd.nuera.ecelp7470;audio/vnd.nuera.ecelp9600;application/oda;application/ogg;audio/ogg;video/ogg;application/vnd.oma.dd2+xml;applicatin/vnd.oasis.opendocument.text-web;application/oebps-package+xml;application/vnd.intu.qbo;application/vnd.openofficeorg.extension;application/vnd.yamaha.openscoreformat;audio/webm;video/webm;application/vnd.oasis.opendocument.char;application/vnd.oasis.opendocument.chart-template;application/vnd.oasis.opendocument.database;application/vnd.oasis.opendocument.formula;application/vnd.oasis.opendocument.formula-template;application/vnd.oasis.opendocument.grapics;application/vnd.oasis.opendocument.graphics-template;application/vnd.oasis.opendocument.image;application/vnd.oasis.opendocument.image-template;application/vnd.oasis.opendocument.presentation;application/vnd.oasis.opendocumen.presentation-template;application/vnd.oasis.opendocument.spreadsheet;application/vnd.oasis.opendocument.spreadsheet-template;application/vnd.oasis.opendocument.text;application/vnd.oasis.opendocument.text-master;application/vnd.asis.opendocument.text-template;image/ktx;application/vnd.sun.xml.calc;application/vnd.sun.xml.calc.template;application/vnd.sun.xml.draw;application/vnd.sun.xml.draw.template;application/vnd.sun.xml.impress;application/vnd.sun.xl.impress.template;application/vnd.sun.xml.math;application/vnd.sun.xml.writer;application/vnd.sun.xml.writer.global;application/vnd.sun.xml.writer.template;application/x-font-otf;application/vnd.yamaha.openscoreformat.osfpvg+xml;application/vnd.osgi.dp;application/vnd.palm;text/x-pascal;application/vnd.pawaafile;application/vnd.hp-pclxl;application/vnd.picsel;image/x-pcx;image/vnd.adobe.photoshop;application/pics-rules;image/x-pict;application/x-chat;aplication/pkcs10;application/x-pkcs12;application/pkcs7-mime;application/pkcs7-signature;application/x-pkcs7-certreqresp;application/x-pkcs7-certificates;application/pkcs8;application/vnd.pocketlearn;image/x-portable-anymap;image/-portable-bitmap;application/x-font-pcf;application/font-tdpfr;application/x-chess-pgn;image/x-portable-graymap;image/png;image/x-portable-pixmap;application/pskc+xml;application/vnd.ctc-posml;application/postscript;application/xfont-type1;application/vnd.powerbuilder6;application/pgp-encrypted;application/pgp-signature;application/vnd.previewsystems.box;application/vnd.pvi.ptid1;application/pls+xml;application/vnd.pg.format;application/vnd.pg.osasli;tex/prs.lines.tag;application/x-font-linux-psf;application/vnd.publishare-delta-tree;application/vnd.pmi.widget;application/vnd.quark.quarkxpress;application/vnd.epson.esf;application/vnd.epson.msf;application/vnd.epson.ssf;applicaton/vnd.epson.quickanime;application/vnd.intu.qfx;video/quicktime;application/x-rar-compressed;audio/x-pn-realaudio;audio/x-pn-realaudio-plugin;application/rsd+xml;application/vnd.rn-realmedia;application/vnd.realvnc.bed;applicatin/vnd.recordare.musicxml;application/vnd.recordare.musicxml+xml;application/relax-ng-compact-syntax;application/vnd.data-vision.rdz;application/rdf+xml;application/vnd.cloanto.rp9;application/vnd.jisp;application/rtf;text/richtex;application/vnd.route66.link66+xml;application/rss+xml;application/shf+xml;application/vnd.sailingtracker.track;image/svg+xml;application/vnd.sus-calendar;application/sru+xml;application/set-payment-initiation;application/set-reistration-initiation;application/vnd.sema;application/vnd.semd;application/vnd.semf;application/vnd.seemail;application/x-font-snf;application/scvp-vp-request;application/scvp-vp-response;application/scvp-cv-request;application/svp-cv-response;application/sdp;text/x-setext;video/x-sgi-movie;application/vnd.shana.informed.formdata;application/vnd.shana.informed.formtemplate;application/vnd.shana.informed.interchange;application/vnd.shana.informed.package;application/thraud+xml;application/x-shar;image/x-rgb;application/vnd.epson.salt;application/vnd.accpac.simply.aso;application/vnd.accpac.simply.imp;application/vnd.simtech-mindmapper;application/vnd.commonspace;application/vnd.ymaha.smaf-audio;application/vnd.smaf;application/vnd.yamaha.smaf-phrase;application/vnd.smart.teacher;application/vnd.svd;application/sparql-query;application/sparql-results+xml;application/srgs;application/srgs+xml;application/sml+xml;application/vnd.koan;text/sgml;application/vnd.stardivision.calc;application/vnd.stardivision.draw;application/vnd.stardivision.impress;application/vnd.stardivision.math;application/vnd.stardivision.writer;application/vnd.tardivision.writer-global;application/vnd.stepmania.stepchart;application/x-stuffit;application/x-stuffitx;application/vnd.solent.sdkm+xml;application/vnd.olpc-sugar;audio/basic;application/vnd.wqd;application/vnd.symbian.install;application/smil+xml;application/vnd.syncml+xml;application/vnd.syncml.dm+wbxml;application/vnd.syncml.dm+xml;application/x-sv4cpio;application/x-sv4crc;application/sbml+xml;text/tab-separated-values;image/tiff;application/vnd.to.intent-module-archive;application/x-tar;application/x-tcl;application/x-tex;application/x-tex-tfm;application/tei+xml;text/plain;application/vnd.spotfire.dxp;application/vnd.spotfire.sfs;application/timestamped-data;applicationvnd.trid.tpt;application/vnd.triscape.mxs;text/troff;application/vnd.trueapp;application/x-font-ttf;text/turtle;application/vnd.umajin;application/vnd.uoml+xml;application/vnd.unity;application/vnd.ufdl;text/uri-list;application/nd.uiq.theme;application/x-ustar;text/x-uuencode;text/x-vcalendar;text/x-vcard;application/x-cdlink;application/vnd.vsf;model/vrml;application/vnd.vcx;model/vnd.mts;model/vnd.vtu;application/vnd.visionary;video/vnd.vivo;applicatin/ccxml+xml,;application/voicexml+xml;application/x-wais-source;application/vnd.wap.wbxml;image/vnd.wap.wbmp;audio/x-wav;application/davmount+xml;application/x-font-woff;application/wspolicy+xml;image/webp;application/vnd.webturb;application/widget;application/winhlp;text/vnd.wap.wml;text/vnd.wap.wmlscript;application/vnd.wap.wmlscriptc;application/vnd.wordperfect;application/vnd.wt.stf;application/wsdl+xml;image/x-xbitmap;image/x-xpixmap;image/x-xwindowump;application/x-x509-ca-cert;application/x-xfig;application/xhtml+xml;application/xml;application/xcap-diff+xml;application/xenc+xml;application/patch-ops-error+xml;application/resource-lists+xml;application/rls-services+xml;aplication/resource-lists-diff+xml;application/xslt+xml;application/xop+xml;application/x-xpinstall;application/xspf+xml;application/vnd.mozilla.xul+xml;chemical/x-xyz;text/yaml;application/yang;application/yin+xml;application/vnd.ul;application/zip;application/vnd.handheld-entertainment+xml;application/vnd.zzazz.deck+xml') # noqa - browser = webdriver.Firefox(firefox_profile=profile, options=options) - browser.implicitly_wait(10) - browser.set_window_size(1920, 1080) - return browser - - -def login(browser, live_server_url, username, password='p'): - browser.get(live_server_url) - username_input = browser.find_element_by_xpath('//input[@id="username"]') - username_input.send_keys(username) - password_input = browser.find_element_by_xpath('//input[@id="password"]') - password_input.send_keys(password) - browser.find_element_by_xpath('//button[@type="submit"]').send_keys(Keys.ENTER) - WebDriverWait(browser, 20).until(ec.url_contains('/home')) - - -def logout(browser: webdriver.Firefox): - browser.find_element_by_id('logout').click() - - -def reset_browser_after_test(browser: webdriver.Firefox, live_server_url): - while len(browser.window_handles) > 1: - browser.close() - browser.switch_to.window(browser.window_handles[-1]) - browser.get(live_server_url) - - -def nth(iterable, n, default=None): - "Returns the nth item or a default value" - return next(islice(iterable, n, None), default) - - -def extract_hrefs_hashes(web_elements: Sequence[WebElement]): - return [nth(el.get_attribute('href').split('#'), 1, '') - for el in web_elements if el.get_attribute('href')] - - -# A function that takes the a browser client -# and returns a function that can be used as a condition for -# WebDriverWait -def subscriptions_loaded_cond(browser): - def loaded(*args): - for i in range(2): - try: - tasks_el = browser.find_element_by_name('subscription-list') - tasks_el.find_element_by_class_name('v-progress-circular') - except StaleElementReferenceException: - pass - except NoSuchElementException: - return True - return False - return loaded - - -# returns a function that can be used as a callback for WebDriverWait -# the resulting functions returns True if the given query would return at least one object -def query_returns_object(model_class, **kwargs): - def query(*args): - try: - model_class.objects.get(**kwargs) - except ObjectDoesNotExist: - return False - return True - return query - - -# stage can be 'initial', 'validate', or 'conflict' -def go_to_subscription(test_class_instance, stage='initial', sub_type=None): - WebDriverWait(test_class_instance.browser, 10).until( - subscriptions_loaded_cond(test_class_instance.browser), - ) - tasks = test_class_instance.browser.find_element_by_name('subscription-list') - tab = tasks.find_element_by_xpath(f'//*[contains(text(), "{stage}")]') - tab.click() - - # sleep here because the animation takes some time to finish - time.sleep(1) - - sub_type = sub_type if sub_type is not None else test_class_instance.sub_type - - sub_type_xpath = f'//*[contains(text(), "{sub_type.name}") ' \ - f'and not(contains(@class, "inactive-subscription")) ' \ - f'and contains(@class, "subscription") ' \ - f'and not(ancestor::div[contains(@style,"display: none;")])]' - - WebDriverWait(test_class_instance.browser, 10).until( - ec.element_to_be_clickable((By.XPATH, sub_type_xpath)), - message="SubmissionType not clickable" - ) - sub_type_el = tasks.find_element_by_xpath(sub_type_xpath) - sub_type_el.click() - WebDriverWait(test_class_instance.browser, 10).until( - ec.url_contains('correction'), - message='URL not change to correction URL' - ) - - -def correct_some_submission(test_class_instance): - go_to_subscription(test_class_instance) - code = reconstruct_submission_code(test_class_instance) - test_class_instance.browser.find_element_by_id('score-full').click() - submit_btn = test_class_instance.browser.find_element_by_id('submit-feedback') - submit_btn.click() - WebDriverWait(test_class_instance.browser, 10).until( - wait_until_code_changes(test_class_instance, code) - ) - return code - - -def reconstruct_submission_code(test_class_instance): - sub_table = test_class_instance.browser.find_element_by_class_name('submission-table') - return reconstruct_code_from_table(sub_table) - - -def reconstruct_solution_code(test_class_instance): - solution_table = test_class_instance.browser.find_element_by_class_name('solution-table') - return reconstruct_code_from_table(solution_table) - - -def reconstruct_code_from_table(table_el): - lines = table_el.find_elements_by_tag_name('tr') - line_no_code_pairs = [ - (line.get_attribute('id'), - # call get_attribute here to get non normalized text - # https://github.com/SeleniumHQ/selenium/issues/2608 - line.find_element_by_class_name('code-cell-content') - .find_element_by_class_name('code-line') - .get_attribute('textContent')) - for line in lines - ] - line_no_code_pairs.sort(key=lambda x: x[0]) # sort by ids - code_lines = list(zip(*line_no_code_pairs))[1] - return '\n'.join(code_lines) - - -def wait_until_code_changes(test_class_instance, code): - def condition(*args): - try: - # code might change during the call resulting in the exception - new_code = reconstruct_submission_code(test_class_instance) - except StaleElementReferenceException: - return False - return code != new_code - return condition - - -def wait_until_element_count_equals(test_class_instance, by, selector, count): - def condition(*args): - try: - elements = test_class_instance.browser.find_elements(by, selector) - except Exception: - return False - return len(elements) == count - return condition - - -def assertion_is_true(assertion_func): - def condition(*args): - try: - assertion_func() - except Exception: - return False - return True - return condition diff --git a/grady/grady/settings/__init__.py b/grady/grady/settings/__init__.py deleted file mode 100644 index cdbdbdff..00000000 --- a/grady/grady/settings/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -from .default import * # noqa -import os - -dev = os.environ.get('DJANGO_DEV', False) - -if not dev: - from .live import * # noqa - from .url_hack import * # noqa diff --git a/grady/grady/settings/default.py b/grady/grady/settings/default.py deleted file mode 100644 index e3a6457c..00000000 --- a/grady/grady/settings/default.py +++ /dev/null @@ -1,230 +0,0 @@ -""" -Django settings for grady project. - -Generated by 'django-admin startproject' using Django 1.10.6. - -For more information on this file, see -https://docs.djangoproject.com/en/1.10/topics/settings/ - -For the full list of settings and their values, see -https://docs.djangoproject.com/en/1.10/ref/settings/ -""" - -import datetime -import os - -# Build paths inside the project like this: os.path.join(BASE_DIR, ...) -BASE_DIR = os.path.dirname(os.path.dirname( - os.path.dirname(os.path.abspath(__file__)))) - -# Quick-start development settings - unsuitable for production -# See https://docs.djangoproject.com/en/1.10/howto/deployment/checklist/ - -# SECURITY WARNING: keep the secret key used in production secret! - -SECRET_KEY = '0*h29pqq9n_&5gtcd8qd2mb^uaf8ydo+ck*p72gg18jrrve(ap' - -# SECURITY WARNING: don't run with debug turned on in production! -DEBUG = True - -ALLOWED_HOSTS = [] - -# Application definition - -INSTALLED_APPS = [ - 'django.contrib.admin', - 'django.contrib.auth', - 'django.contrib.contenttypes', - 'django.contrib.sessions', - 'django.contrib.messages', - 'whitenoise.runserver_nostatic', - 'django.contrib.staticfiles', - 'django_extensions', - 'rest_framework', - 'corsheaders', - 'drf_yasg', - 'silk', - 'core', - 'constance', - 'constance.backends.database', -] - -MIDDLEWARE = [ - 'corsheaders.middleware.CorsMiddleware', - 'django.middleware.common.CommonMiddleware', - 'django.middleware.security.SecurityMiddleware', - 'django.contrib.sessions.middleware.SessionMiddleware', - 'django.middleware.common.CommonMiddleware', - 'django.middleware.csrf.CsrfViewMiddleware', - 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.messages.middleware.MessageMiddleware', - 'django.middleware.clickjacking.XFrameOptionsMiddleware', - 'whitenoise.middleware.WhiteNoiseMiddleware', - 'silk.middleware.SilkyMiddleware', -] - -ROOT_URLCONF = 'grady.urls' - -TEMPLATES = [ - { - 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [], - 'APP_DIRS': True, - 'OPTIONS': { - 'context_processors': [ - 'django.template.context_processors.debug', - 'django.template.context_processors.request', - 'django.contrib.auth.context_processors.auth', - 'django.contrib.messages.context_processors.messages', - ], - }, - }, -] - - -WSGI_APPLICATION = 'grady.wsgi.application' - - -# Database -# https://docs.djangoproject.com/en/1.10/ref/settings/#databases - -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.postgresql_psycopg2', - 'NAME': os.environ.get('DB_NAME', 'postgres'), - 'USER': os.environ.get('DB_USER', 'postgres'), - 'PASSWORD': os.environ.get('DB_PASSWORD', 'postgres'), - 'HOST': os.environ.get('DB_HOST', 'localhost'), - 'PORT': os.environ.get('DB_PORT', '5432'), - 'ATOMIC_REQUESTS': True - }, -} - - -# Internationalization -# https://docs.djangoproject.com/en/1.10/topics/i18n/ - -LANGUAGE_CODE = 'en-us' -TIME_ZONE = 'UTC' -USE_I18N = True -USE_L10N = True -USE_TZ = True - - -# Static files (CSS, JavaScript, Images) -# https://docs.djangoproject.com/en/1.10/howto/static-files/ -STATIC_URL = '/static/' -STATIC_ROOT = os.path.join(BASE_DIR, 'static') -STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage' -STATICFILES_FINDERS = ( - 'django.contrib.staticfiles.finders.FileSystemFinder', - 'django.contrib.staticfiles.finders.AppDirectoriesFinder', -) -STATICFILES_DIRS = ( - 'frontend/dist/static', -) - - -LOGIN_REDIRECT_URL = '/' -LOGIN_URL = '/' - -AUTH_USER_MODEL = 'core.UserAccount' -AUTH_PASSWORD_VALIDATORS = [ - {'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator'}, - {'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator'}, - {'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator'}, - {'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator'} -] - -CORS_ORIGIN_WHITELIST = ( - 'http://localhost:8080', - 'http://localhost:8000' -) - -REST_FRAMEWORK = { - 'TEST_REQUEST_DEFAULT_FORMAT': 'json', - 'DEFAULT_PERMISSION_CLASSES': ( - 'rest_framework.permissions.IsAuthenticated', - ), - 'DEFAULT_AUTHENTICATION_CLASSES': ( - 'rest_framework_jwt.authentication.JSONWebTokenAuthentication', - 'rest_framework.authentication.SessionAuthentication', - 'rest_framework.authentication.BasicAuthentication', - ), - 'DEFAULT_RENDERER_CLASSES': ( - 'djangorestframework_camel_case.render.CamelCaseJSONRenderer', - ), - - 'DEFAULT_PARSER_CLASSES': ( - 'djangorestframework_camel_case.parser.CamelCaseJSONParser', - ), - 'COERCE_DECIMAL_TO_STRING': False, -} - -JSON_CAMEL_CASE = { - 'JSON_UNDERSCOREIZE': { - 'no_underscore_before_number': True, - }, -} - -JWT_AUTH = { - 'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=18000), - 'JWT_ALLOW_REFRESH': True, -} - - -LOG_LEVEL = os.environ.get('GRADY_LOG_LEVEL', 'DEBUG') -LOG_FORMAT = os.environ.get('GRADY_LOG_FORMAT', 'default-format') -LOGGING = { - "version": 1, - "disable_existing_loggers": not DEBUG, - "formatters": { - 'default-format': { - # 'datefmt': the default is ISO8601 which is what we want - 'format': '[%(asctime)s] [%(levelname)s] %(name)-20s %(message)s', - }, - 'json': { - '()': 'json_log_formatter.JSONFormatter', - }, - }, - 'handlers': { - 'console': { - 'level': LOG_LEVEL, - 'class': 'logging.StreamHandler', - 'formatter': LOG_FORMAT - }, - }, - 'loggers': { - 'django': { - 'handlers': ['console'], - }, - 'django.request': { - 'handlers': ['console'], - }, - 'gunicorn.error': { - 'handlers': ['console'], - }, - 'gunicorn.access': { - 'handlers': ['console'], - }, - 'core': { - 'handlers': ['console'], - 'level': LOG_LEVEL, - } - } -} - - -CONSTANCE_BACKEND = 'constance.backends.database.DatabaseBackend' -CONSTANCE_CONFIG = { - 'STOP_ON_PASS': (False, "Stop correction when for pass " - "only students when they reach pass score"), - 'SINGLE_CORRECTION': (False, "Set submitted feedback immediately to final and skip validation"), - 'EXERCISE_MODE': (False, "Whether the application runs in exercise mode. " - "Gives tutors access to options normally reserved to reviewers"), - "SHOW_SOLUTION_TO_STUDENTS": (False, "Whether or not the students should be allowed to see the solutions"), - 'REGISTRATION_PASSWORD': ("", "The registration password to use.") -} - -# Allow request bodies up to 100MB -DATA_UPLOAD_MAX_MEMORY_SIZE = 104857600 diff --git a/grady/grady/settings/live.py b/grady/grady/settings/live.py deleted file mode 100644 index 8ac84849..00000000 --- a/grady/grady/settings/live.py +++ /dev/null @@ -1,70 +0,0 @@ -import secrets -import string - -from .default import REST_FRAMEWORK - -""" A live configuration for enhanced security """ -CSRF_COOKIE_SECURE = True -CSRF_COOKIE_HTTPONLY = True -SESSION_COOKIE_SECURE = True -SECURE_CONTENT_TYPE_NOSNIFF = True -SECURE_BROWSER_XSS_FILTER = True -X_FRAME_OPTIONS = 'DENY' - - -# SECURITY WARNING: don't run with debug turned on in production! -DEBUG = False - -# Read a new SECRET_KEY or generate a new one -SECRET_FILE = 'secret' -try: - SECRET_KEY = open(SECRET_FILE).read().strip() - if len(SECRET_KEY) == 0: - raise Exception -except (IOError, Exception): - try: - SECRET_KEY = ''.join(secrets.choice(string.printable) - for i in range(50)) - with open(SECRET_FILE, 'w') as secret: - secret.write(SECRET_KEY) - except IOError: - Exception('Please create a %s file with random characters \ - to generate your secret key!' % SECRET_FILE) - -# adjust this setting to your needs -ALLOWED_HOSTS = [ - 'localhost', '.grady.janmax.org', 'grady.informatik.uni-goettingen.de' -] - -# sample postgres sql database configuration -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.postgresql_psycopg2', - 'NAME': 'postgres', - 'USER': 'postgres', - 'PASSWORD': 'postgres', - 'HOST': 'postgres', - 'PORT': '5432', - 'ATOMIC_REQUESTS': True - }, -} - -# Password validation -# https://docs.djangoproject.com/en/1.10/ref/settings/#auth-password-validators - -AUTH_PASSWORD_VALIDATORS = [ - {'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator'}, - {'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator'}, - {'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator'}, - {'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator'} -] - -REST_FRAMEWORK = { - **REST_FRAMEWORK, - 'DEFAULT_THROTTLE_CLASSES': ( - 'rest_framework.throttling.AnonRateThrottle', - ), - 'DEFAULT_THROTTLE_RATES': { - 'anon': '300/day', - } -} diff --git a/grady/grady/settings/test.py b/grady/grady/settings/test.py deleted file mode 100644 index d8eca64b..00000000 --- a/grady/grady/settings/test.py +++ /dev/null @@ -1,4 +0,0 @@ -from .default import * -from .live import * - -REST_FRAMEWORK['DEFAULT_THROTTLE_RATES']['anon'] = '1000/minute' diff --git a/grady/grady/settings/url_hack.py b/grady/grady/settings/url_hack.py deleted file mode 100644 index a4443f3e..00000000 --- a/grady/grady/settings/url_hack.py +++ /dev/null @@ -1,17 +0,0 @@ -""" Ok, what the hell? This is especially ugly, hence I keep it hidden in -this file. We have the requirement that the application instances should -run under http://$host/$instancename/. And therefore the frontend, whitenoise, -django, gunicorn and the top http proxy all have to handle this stuff. - -Usage: Just set the SCRIPT_NAME env variable to /<name of your instance> - and things will work. """ - -import os - -FORCE_SCRIPT_NAME = os.environ.get('SCRIPT_NAME', '') -if FORCE_SCRIPT_NAME: - FORCE_SCRIPT_NAME += '/' - -STATIC_URL_BASE = '/static/' -STATIC_URL = os.path.join(FORCE_SCRIPT_NAME + STATIC_URL_BASE) -WHITENOISE_STATIC_PREFIX = STATIC_URL_BASE diff --git a/grady/grady/urls.py b/grady/grady/urls.py deleted file mode 100644 index 30c8dad1..00000000 --- a/grady/grady/urls.py +++ /dev/null @@ -1,16 +0,0 @@ -from django.conf import settings -from django.contrib import admin -from django.urls import include, path -from django.views.generic.base import TemplateView -from rest_framework_jwt.views import obtain_jwt_token, refresh_jwt_token - -urlpatterns = [ - path('admin/', admin.site.urls), - path('api/', include('core.urls')), - path('api/get-token/', obtain_jwt_token), - path('api/refresh-token/', refresh_jwt_token), - path('api-auth/', include('rest_framework.urls', - namespace='rest_framework')), - path('', TemplateView.as_view(template_name='index.html')), - path('silk/', include('silk.urls', namespace='silk')), -] diff --git a/grady/grady/wsgi.py b/grady/grady/wsgi.py deleted file mode 100644 index 012844d1..00000000 --- a/grady/grady/wsgi.py +++ /dev/null @@ -1,16 +0,0 @@ -""" -WSGI config for grady project. - -It exposes the WSGI callable as a module-level variable named ``application``. - -For more information on this file, see -https://docs.djangoproject.com/en/1.10/howto/deployment/wsgi/ -""" - -import os - -from django.core.wsgi import get_wsgi_application - -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "grady.settings") - -application = get_wsgi_application() diff --git a/grady/manage.py b/grady/manage.py deleted file mode 100755 index bd8354c1..00000000 --- a/grady/manage.py +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env python -import os -import sys - -if __name__ == "__main__": - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "grady.settings") - try: - from django.core.management import execute_from_command_line - except ImportError: - # The above import may fail for some other reason. Ensure that the - # issue is really that Django is missing to avoid masking other - # exceptions on Python 2. - try: - import django - except ImportError: - raise ImportError( - "Couldn't import Django. Are you sure it's installed and " - "available on your PYTHONPATH environment variable? Did you " - "forget to activate a virtual environment?" - ) - raise - execute_from_command_line(sys.argv) diff --git a/grady/settings/live.py b/grady/settings/live.py index 405c0bed..8ac84849 100644 --- a/grady/settings/live.py +++ b/grady/settings/live.py @@ -32,7 +32,9 @@ except (IOError, Exception): to generate your secret key!' % SECRET_FILE) # adjust this setting to your needs -ALLOWED_HOSTS = [ 'localhost', '.informatik.uni-goettingen.de' ] +ALLOWED_HOSTS = [ + 'localhost', '.grady.janmax.org', 'grady.informatik.uni-goettingen.de' +] # sample postgres sql database configuration DATABASES = { diff --git a/grady/setup.cfg b/grady/setup.cfg deleted file mode 100644 index 68c89dfb..00000000 --- a/grady/setup.cfg +++ /dev/null @@ -1,7 +0,0 @@ -[flake8] - -max-line-length = 100 - -[pep8] - -max-line-length = 100 diff --git a/grady/swagger-api-specification.json b/grady/swagger-api-specification.json deleted file mode 100644 index 29c9f7d3..00000000 --- a/grady/swagger-api-specification.json +++ /dev/null @@ -1 +0,0 @@ -{"swagger": "2.0", "info": {"title": "Grady API", "description": "Blub", "version": "v1"}, "host": "localhost:8000", "schemes": ["http"], "basePath": "/api", "consumes": ["application/json"], "produces": ["application/json"], "securityDefinitions": {"basic": {"type": "basic"}}, "security": [{"basic": []}], "paths": {"/assignment/": {"get": {"operationId": "assignment_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Assignment"}}}}, "tags": ["assignment"]}, "post": {"operationId": "assignment_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Assignment"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Assignment"}}}, "tags": ["assignment"]}, "parameters": []}, "/assignment/{assignment_id}/": {"get": {"operationId": "assignment_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Assignment"}}}, "tags": ["assignment"]}, "delete": {"operationId": "assignment_delete", "description": "Stop working on the assignment before it is finished", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["assignment"]}, "parameters": [{"name": "assignment_id", "in": "path", "description": "A UUID string identifying this tutor submission assignment.", "required": true, "type": "string", "format": "uuid"}]}, "/examtype/": {"get": {"operationId": "examtype_list", "description": "Gets a list of an individual exam by Id if provided", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Exam"}}}}, "tags": ["examtype"]}, "parameters": []}, "/examtype/{exam_type_id}/": {"get": {"operationId": "examtype_read", "description": "Gets a list of an individual exam by Id if provided", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Exam"}}}, "tags": ["examtype"]}, "parameters": [{"name": "exam_type_id", "in": "path", "description": "A UUID string identifying this ExamType.", "required": true, "type": "string", "format": "uuid"}]}, "/export/csv/": {"get": {"operationId": "export_csv_list", "description": "", "parameters": [], "responses": {"200": {"description": ""}}, "produces": ["text/csv"], "tags": ["export"]}, "parameters": []}, "/feedback-comment/{comment_id}/": {"patch": {"operationId": "feedback-comment_partial_update", "description": "Gets a list of an individual exam by Id if provided", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/FeedbackComment"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/FeedbackComment"}}}, "tags": ["feedback-comment"]}, "delete": {"operationId": "feedback-comment_delete", "description": "Gets a list of an individual exam by Id if provided", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["feedback-comment"]}, "parameters": [{"name": "comment_id", "in": "path", "description": "A UUID string identifying this Feedback Comment.", "required": true, "type": "string", "format": "uuid"}]}, "/feedback/": {"get": {"operationId": "feedback_list", "description": "Gets a list of an individual exam by Id if provided", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Feedback"}}}}, "tags": ["feedback"]}, "post": {"operationId": "feedback_create", "description": "Gets a list of an individual exam by Id if provided", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Feedback"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Feedback"}}}, "tags": ["feedback"]}, "parameters": []}, "/feedback/{submission_pk}/": {"get": {"operationId": "feedback_read", "description": "Gets a list of an individual exam by Id if provided", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Feedback"}}}, "tags": ["feedback"]}, "patch": {"operationId": "feedback_partial_update", "description": "Gets a list of an individual exam by Id if provided", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Feedback"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Feedback"}}}, "tags": ["feedback"]}, "parameters": [{"name": "submission_pk", "in": "path", "required": true, "type": "string"}]}, "/get-token/": {"post": {"operationId": "get-token_create", "description": "API View that receives a POST with a user's username and password.\n\nReturns a JSON Web Token that can be used for authenticated requests.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/JSONWebToken"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/JSONWebToken"}}}, "tags": ["get-token"]}, "parameters": []}, "/jwt-time-delta/": {"get": {"operationId": "jwt-time-delta_list", "description": "", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["jwt-time-delta"]}, "parameters": []}, "/refresh-token/": {"post": {"operationId": "refresh-token_create", "description": "API View that returns a refreshed token (with new expiration) based on\nexisting token\n\nIf 'orig_iat' field (original issued-at-time) is found, will first check\nif it's within expiration window, then copy it to the new token", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/RefreshJSONWebToken"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/RefreshJSONWebToken"}}}, "tags": ["refresh-token"]}, "parameters": []}, "/statistics/": {"get": {"operationId": "statistics_list", "description": "", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["statistics"]}, "parameters": []}, "/student-page/": {"get": {"operationId": "student-page_read", "description": "Gets all data that belongs to one student", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/StudentInfo"}}}, "tags": ["student-page"]}, "parameters": []}, "/student-submissions/": {"get": {"operationId": "student-submissions_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Submission"}}}}, "tags": ["student-submissions"]}, "parameters": []}, "/student/": {"get": {"operationId": "student_list", "description": "Gets a list of all students without individual submissions", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/StudentInfoForListView"}}}}, "tags": ["student"]}, "parameters": []}, "/student/activate/": {"post": {"operationId": "student_activate", "description": "Gets a list of all students without individual submissions", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/StudentInfoForListView"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/StudentInfoForListView"}}}, "tags": ["student"]}, "parameters": []}, "/student/deactivate/": {"post": {"operationId": "student_deactivate", "description": "Gets a list of all students without individual submissions", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/StudentInfoForListView"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/StudentInfoForListView"}}}, "tags": ["student"]}, "parameters": []}, "/student/{student_id}/": {"get": {"operationId": "student_read", "description": "Gets a list of all students without individual submissions", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/StudentInfoForListView"}}}, "tags": ["student"]}, "parameters": [{"name": "student_id", "in": "path", "description": "A UUID string identifying this Student.", "required": true, "type": "string", "format": "uuid"}]}, "/submission/": {"get": {"operationId": "submission_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/SubmissionNoType"}}}}, "tags": ["submission"]}, "parameters": []}, "/submission/{submission_id}/": {"get": {"operationId": "submission_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/SubmissionNoType"}}}, "tags": ["submission"]}, "parameters": [{"name": "submission_id", "in": "path", "description": "A UUID string identifying this Submission.", "required": true, "type": "string", "format": "uuid"}]}, "/submissiontype/": {"get": {"operationId": "submissiontype_list", "description": "Gets a list or a detail view of a single SubmissionType", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/SubmissionType"}}}}, "tags": ["submissiontype"]}, "parameters": []}, "/submissiontype/{submission_type_id}/": {"get": {"operationId": "submissiontype_read", "description": "Gets a list or a detail view of a single SubmissionType", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/SubmissionType"}}}, "tags": ["submissiontype"]}, "parameters": [{"name": "submission_type_id", "in": "path", "description": "A UUID string identifying this SubmissionType.", "required": true, "type": "string", "format": "uuid"}]}, "/subscription/": {"get": {"operationId": "subscription_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Subscription"}}}}, "tags": ["subscription"]}, "post": {"operationId": "subscription_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Subscription"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Subscription"}}}, "tags": ["subscription"]}, "parameters": []}, "/subscription/{subscription_id}/": {"get": {"operationId": "subscription_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Subscription"}}}, "tags": ["subscription"]}, "delete": {"operationId": "subscription_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["subscription"]}, "parameters": [{"name": "subscription_id", "in": "path", "description": "A UUID string identifying this submission subscription.", "required": true, "type": "string", "format": "uuid"}]}, "/tutor/": {"get": {"operationId": "tutor_list", "description": "Api endpoint for creating, listing, viewing or deleting tutors", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Tutor"}}}}, "tags": ["tutor"]}, "post": {"operationId": "tutor_create", "description": "Api endpoint for creating, listing, viewing or deleting tutors", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Tutor"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Tutor"}}}, "tags": ["tutor"]}, "parameters": []}, "/tutor/register/": {"post": {"operationId": "tutor_register", "description": "Api endpoint for creating, listing, viewing or deleting tutors", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Tutor"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Tutor"}}}, "tags": ["tutor"]}, "parameters": []}, "/tutor/{user_id}/": {"get": {"operationId": "tutor_read", "description": "Api endpoint for creating, listing, viewing or deleting tutors", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Tutor"}}}, "tags": ["tutor"]}, "put": {"operationId": "tutor_update", "description": "Api endpoint for creating, listing, viewing or deleting tutors", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Tutor"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Tutor"}}}, "tags": ["tutor"]}, "patch": {"operationId": "tutor_partial_update", "description": "Api endpoint for creating, listing, viewing or deleting tutors", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Tutor"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Tutor"}}}, "tags": ["tutor"]}, "delete": {"operationId": "tutor_delete", "description": "Api endpoint for creating, listing, viewing or deleting tutors", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["tutor"]}, "parameters": [{"name": "user_id", "in": "path", "description": "A UUID string identifying this user.", "required": true, "type": "string", "format": "uuid"}]}, "/user-role/": {"get": {"operationId": "user-role_list", "description": "", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["user-role"]}, "parameters": []}, "/user/": {"get": {"operationId": "user_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/UserAccount"}}}}, "tags": ["user"]}, "parameters": []}, "/user/me/": {"get": {"operationId": "user_me", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/UserAccount"}}}}, "tags": ["user"]}, "parameters": []}, "/user/{user_id}/": {"get": {"operationId": "user_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserAccount"}}}, "tags": ["user"]}, "parameters": [{"name": "user_id", "in": "path", "description": "A UUID string identifying this user.", "required": true, "type": "string", "format": "uuid"}]}, "/user/{user_id}/change_active/": {"patch": {"operationId": "user_change_active", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserAccount"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserAccount"}}}, "tags": ["user"]}, "parameters": [{"name": "user_id", "in": "path", "description": "A UUID string identifying this user.", "required": true, "type": "string", "format": "uuid"}]}, "/user/{user_id}/change_password/": {"patch": {"operationId": "user_change_password", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserAccount"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/UserAccount"}}}, "tags": ["user"]}, "parameters": [{"name": "user_id", "in": "path", "description": "A UUID string identifying this user.", "required": true, "type": "string", "format": "uuid"}]}}, "definitions": {"Assignment": {"type": "object", "properties": {"pk": {"title": "Assignment id", "type": "string", "format": "uuid", "readOnly": true}, "submission": {"title": "Submission", "type": "string", "format": "uuid", "readOnly": true}, "isDone": {"title": "Is done", "type": "boolean", "readOnly": true}, "owner": {"title": "Owner", "type": "string", "readOnly": true}, "stage": {"title": "Stage", "type": "string", "readOnly": true}}}, "Exam": {"required": ["moduleReference", "totalScore", "passScore"], "type": "object", "properties": {"pk": {"title": "Exam type id", "type": "string", "format": "uuid", "readOnly": true}, "moduleReference": {"title": "Module reference", "type": "string", "maxLength": 50, "minLength": 1}, "totalScore": {"title": "Total score", "type": "integer", "maximum": 2147483647, "minimum": 0}, "passScore": {"title": "Pass score", "type": "integer", "maximum": 2147483647, "minimum": 0}, "passOnly": {"title": "Pass only", "type": "boolean"}}}, "FeedbackComment": {"required": ["text"], "type": "object", "properties": {"pk": {"title": "Comment id", "type": "string", "format": "uuid", "readOnly": true}, "text": {"title": "Text", "type": "string", "minLength": 1}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "ofTutor": {"title": "Of tutor", "type": "string", "readOnly": true}, "ofLine": {"title": "Of line", "type": "integer", "maximum": 2147483647, "minimum": 0}, "visibleToStudent": {"title": "Visible to student", "type": "boolean"}}}, "Feedback": {"required": ["ofSubmission"], "type": "object", "properties": {"pk": {"title": "ID", "type": "integer", "readOnly": true}, "ofSubmission": {"title": "Of submission", "type": "string", "format": "uuid"}, "isFinal": {"title": "Is final", "type": "boolean"}, "score": {"title": "Score", "type": "integer", "maximum": 2147483647, "minimum": 0}, "feedbackLines": {"type": "array", "items": {"$ref": "#/definitions/FeedbackComment"}}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "ofSubmissionType": {"title": "Of submission type", "type": "string", "readOnly": true}, "feedbackStageForUser": {"title": "Feedback stage for user", "type": "string", "readOnly": true}}}, "JSONWebToken": {"required": ["username", "password"], "type": "object", "properties": {"username": {"title": "Username", "type": "string", "minLength": 1}, "password": {"title": "Password", "type": "string", "minLength": 1}}}, "RefreshJSONWebToken": {"required": ["token"], "type": "object", "properties": {"token": {"title": "Token", "type": "string", "minLength": 1}}}, "SubmissionTypeList": {"title": "Type", "required": ["name"], "type": "object", "properties": {"pk": {"title": "Submission type id", "type": "string", "format": "uuid", "readOnly": true}, "name": {"title": "Name", "type": "string", "maxLength": 100, "minLength": 1}, "fullScore": {"title": "Full score", "type": "integer", "maximum": 2147483647, "minimum": 0}}}, "SubmissionList": {"required": ["type", "feedback"], "type": "object", "properties": {"pk": {"title": "Submission id", "type": "string", "format": "uuid", "readOnly": true}, "type": {"$ref": "#/definitions/SubmissionTypeList"}, "feedback": {"$ref": "#/definitions/Feedback"}}}, "StudentInfo": {"required": ["user", "exam", "submissions"], "type": "object", "properties": {"pk": {"title": "Student id", "type": "string", "format": "uuid", "readOnly": true}, "name": {"title": "Name", "type": "string", "readOnly": true}, "user": {"title": "User", "type": "string", "format": "uuid"}, "matrikelNo": {"title": "Matrikel no", "type": "string", "readOnly": true}, "exam": {"$ref": "#/definitions/Exam"}, "submissions": {"type": "array", "items": {"$ref": "#/definitions/SubmissionList"}}, "passesExam": {"title": "Passes exam", "type": "boolean"}}}, "SubmissionType": {"title": "Type", "required": ["name", "description", "solution"], "type": "object", "properties": {"pk": {"title": "Submission type id", "type": "string", "format": "uuid", "readOnly": true}, "name": {"title": "Name", "type": "string", "maxLength": 100, "minLength": 1}, "fullScore": {"title": "Full score", "type": "integer", "maximum": 2147483647, "minimum": 0}, "description": {"title": "Description", "type": "string", "minLength": 1}, "solution": {"title": "Solution", "type": "string", "minLength": 1}, "programmingLanguage": {"title": "Programming language", "type": "string", "enum": ["c", "java"]}}}, "VisibleCommentFeedback": {"title": "Feedback", "required": ["ofSubmission"], "type": "object", "properties": {"pk": {"title": "ID", "type": "integer", "readOnly": true}, "ofSubmission": {"title": "Of submission", "type": "string", "format": "uuid"}, "isFinal": {"title": "Is final", "type": "boolean"}, "score": {"title": "Score", "type": "integer", "maximum": 2147483647, "minimum": 0}, "feedbackLines": {"title": "Feedback lines", "type": "string", "readOnly": true}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "ofSubmissionType": {"title": "Of submission type", "type": "string", "readOnly": true}}}, "Test": {"required": ["name", "label", "annotation"], "type": "object", "properties": {"pk": {"title": "Test id", "type": "string", "format": "uuid", "readOnly": true}, "name": {"title": "Name", "type": "string", "maxLength": 30, "minLength": 1}, "label": {"title": "Label", "type": "string", "maxLength": 50, "minLength": 1}, "annotation": {"title": "Annotation", "type": "string", "minLength": 1}}}, "Submission": {"required": ["type", "feedback", "tests"], "type": "object", "properties": {"pk": {"title": "Submission id", "type": "string", "format": "uuid", "readOnly": true}, "type": {"$ref": "#/definitions/SubmissionType"}, "text": {"title": "Text", "type": "string"}, "feedback": {"$ref": "#/definitions/VisibleCommentFeedback"}, "tests": {"type": "array", "items": {"$ref": "#/definitions/Test"}}}}, "SubmissionNoTextFields": {"required": ["type"], "type": "object", "properties": {"pk": {"title": "Submission id", "type": "string", "format": "uuid", "readOnly": true}, "type": {"title": "Type", "type": "string", "format": "uuid"}, "score": {"title": "Score", "type": "string", "readOnly": true}, "final": {"title": "Final", "type": "string", "readOnly": true}, "fullScore": {"title": "Full score", "type": "string", "readOnly": true}}}, "StudentInfoForListView": {"required": ["submissions", "isActive"], "type": "object", "properties": {"pk": {"title": "Student id", "type": "string", "format": "uuid", "readOnly": true}, "name": {"title": "Name", "type": "string", "readOnly": true}, "user": {"title": "User", "type": "string", "readOnly": true}, "userPk": {"title": "User pk", "type": "string", "readOnly": true}, "exam": {"title": "Exam", "type": "string", "readOnly": true}, "submissions": {"type": "array", "items": {"$ref": "#/definitions/SubmissionNoTextFields"}}, "matrikelNo": {"title": "Matrikel no", "type": "string", "maxLength": 30, "minLength": 1}, "passesExam": {"title": "Passes exam", "type": "boolean"}, "isActive": {"title": "Is active", "type": "boolean"}}}, "SubmissionNoType": {"required": ["type", "feedback", "tests"], "type": "object", "properties": {"pk": {"title": "Submission id", "type": "string", "format": "uuid", "readOnly": true}, "type": {"title": "Type", "type": "string", "format": "uuid"}, "fullScore": {"title": "Full score", "type": "string", "readOnly": true}, "text": {"title": "Text", "type": "string"}, "feedback": {"$ref": "#/definitions/Feedback"}, "tests": {"type": "array", "items": {"$ref": "#/definitions/Test"}}}}, "Subscription": {"type": "object", "properties": {"pk": {"title": "Subscription id", "type": "string", "format": "uuid", "readOnly": true}, "owner": {"title": "Owner", "type": "string", "readOnly": true}, "queryType": {"title": "Query type", "type": "string", "enum": ["random", "student", "exam", "submission_type"], "default": "random"}, "queryKey": {"title": "Query key", "type": "string", "format": "uuid"}, "feedbackStage": {"title": "Feedback stage", "type": "string", "enum": ["feedback-creation", "feedback-validation", "feedback-conflict-resolution"], "default": "feedback-creation"}, "deactivated": {"title": "Deactivated", "type": "boolean", "readOnly": true}, "assignments": {"title": "Assignments", "type": "string", "readOnly": true}, "remaining": {"title": "Remaining", "type": "string", "readOnly": true}, "available": {"title": "Available", "type": "string", "readOnly": true}}}, "Tutor": {"required": ["username"], "type": "object", "properties": {"pk": {"title": "User id", "type": "string", "format": "uuid", "readOnly": true}, "password": {"title": "Password", "type": "string", "minLength": 1}, "isActive": {"title": "Active", "description": "Designates whether this user should be treated as active. Unselect this instead of deleting accounts.", "type": "boolean"}, "username": {"title": "Username", "description": "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.", "type": "string", "pattern": "^[\\w.@+-]+$", "maxLength": 150, "minLength": 1}, "feedbackCreated": {"title": "Feedback created", "type": "string", "readOnly": true}, "feedbackValidated": {"title": "Feedback validated", "type": "string", "readOnly": true}}}, "UserAccount": {"required": ["password"], "type": "object", "properties": {"pk": {"title": "User id", "type": "string", "format": "uuid", "readOnly": true}, "username": {"title": "Username", "description": "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.", "type": "string", "readOnly": true, "minLength": 1}, "role": {"title": "Role", "type": "string", "enum": ["Student", "Tutor", "Reviewer"], "readOnly": true}, "isAdmin": {"title": "Is admin", "type": "boolean", "readOnly": true}, "password": {"title": "Password", "type": "string", "maxLength": 128, "minLength": 1}}}}} \ No newline at end of file diff --git a/grady/util/__init__.py b/grady/util/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/grady/util/factories.py b/grady/util/factories.py deleted file mode 100644 index d8dd98da..00000000 --- a/grady/util/factories.py +++ /dev/null @@ -1,525 +0,0 @@ -import configparser -from xkcdpass import xkcd_password as xp - -from core import models -from core.models import (ExamType, Feedback, StudentInfo, Submission, - SubmissionType, UserAccount, Group) - -STUDENTS = 'students' -TUTORS = 'tutors' -REVIEWERS = 'reviewers' - -PASSWORDS = '.importer_passwords' - -words = xp.generate_wordlist(wordfile=xp.locate_wordfile(), min_length=5, max_length=8) - - -def get_random_password(numwords=4): - """ Returns a cryptographically random string of specified length """ - return xp.generate_xkcdpassword(words, numwords=numwords, delimiter='-') - - -def store_password(username, groupname, password): - storage = configparser.ConfigParser() - storage.read(PASSWORDS) - - if groupname not in storage: - storage[groupname] = {} - - storage[groupname][username] = password - - with open(PASSWORDS, 'w') as passwd_file: - storage.write(passwd_file) - - -class GradyUserFactory: - - def __init__(self, - make_password=get_random_password, - password_storge=store_password, - *args, **kwargs): - self.make_password = make_password - self.password_storge = password_storge - - def _get_random_name(self, prefix='', suffix='', k=4): - return ''.join((prefix, self.make_password(k), suffix)) - - def _get_group_for_user_role(self, role): - """ Returns the groupname for a role """ - return { - 'Student': 'students', - 'Tutor': 'tutors', - 'Reviewer': 'reviewers' - }[role] - - def _make_base_user(self, username, role, password=None, - store_pw=False, fullname='', exam=None, exercise_groups=None, **kwargs): - """ This is a specific wrapper for the django update_or_create method of - objects. - * If now username is passed, a generic one will be generated - * A new user is created and password and role are set accordingly - * If the user was there before password IS changed - * A user must only have one role. - - Returns: - (User object, str): The user object that was added to the role and - the password of that user if it was created. - """ - if not username: - username = self._get_random_name(prefix=role.lower() + '_') - - username = username.strip() - - user, created = UserAccount.objects.update_or_create( - username=username, - fullname=fullname, - role=role, - defaults=kwargs) - - if exercise_groups is None: - exercise_groups = [] - - groups_in_db = [] - for group in exercise_groups: - groups_in_db.append(Group.objects.get_or_create(name=group, exam=exam)[0].pk) - - user.set_groups(groups_in_db) - - if created or password is not None: - password = self.make_password() if password is None else password - user.set_password(password) - user.save() - - if created and store_pw: - self.password_storge( - username, - self._get_group_for_user_role(role), - password) - - return user - - def make_student(self, username=None, identifier=None, - exam=None, submissions=None, **kwargs): - """ Creates a student. Defaults can be passed via kwargs like in - relation managers objects.update method. """ - user = self._make_base_user(username, 'Student', exam=exam, **kwargs) - student_info = StudentInfo.objects.get_or_create(user=user)[0] - student_info.add_exam(exam) - if identifier: - student_info.matrikel_no = identifier - student_info.save() - return user - - def make_tutor(self, username=None, exam=None, **kwargs): - """ Creates or updates a tutor if needed with defaults """ - return self._make_base_user(username, 'Tutor', exam=exam, **kwargs) - - def make_reviewer(self, username=None, exam=None, **kwargs): - """ Creates or updates a reviewer if needed with defaults """ - return self._make_base_user(username, 'Reviewer', exam=exam, **kwargs) - - -def make_exams(exams=None, **kwargs): - if exams is None: - exams = [] - - return [ExamType.objects.get_or_create( - module_reference=exam['module_reference'], - defaults=exam)[0] for exam in exams] - - -def make_groups(groups=None, **kwargs): - if groups is None: - groups = [] - - return [Group.objects.get_or_create( - name=group['name'], - exam=group['exam'])[0] for group in groups] - - -def make_submission_types(type_id=None, submission_types=[], **kwargs): - return [SubmissionType.objects.get_or_create( - name=submission_type['name'], exam_type=type_id, - defaults=submission_type)[0] - for submission_type in submission_types] - - -def make_students(students=None, **kwargs): - if students is None: - students = [] - - return [GradyUserFactory().make_student( - username=student['username'], - exam=ExamType.objects.get( - module_reference=student['exam']) if 'exam' in student else None, - password=student.get('password'), - exercise_groups=student.get('exercise_groups') - ) for student in students] - - -def make_tutors(tutors=None, **kwargs): - if tutors is None: - tutors = [] - - return [GradyUserFactory().make_tutor(**tutor) - for tutor in tutors] - - -def make_reviewers(reviewers=None, **kwargs): - if reviewers is None: - reviewers = [] - - return [GradyUserFactory().make_reviewer(**reviewer) - for reviewer in reviewers] - - -def make_feedback(feedback, submission_object): - feedback_obj = Feedback.objects.update_or_create( - of_submission=submission_object, - score=feedback['score'], - is_final=feedback.get('is_final', False) - )[0] - for line_index, comment_list in feedback['feedback_lines'].items(): - for comment in comment_list: - tutor = models.UserAccount.objects.get( - username=comment.pop('of_tutor')) - ret, c = models.FeedbackComment.objects.update_or_create( - of_line=line_index, - of_feedback=feedback_obj, - of_tutor=tutor, - defaults=comment - ) - - -def make_submissions(type_id=None, submissions=[], **kwargs): - submission_objects = [] - for submission in submissions: - submission_type, _ = SubmissionType.objects.get_or_create( - name=submission.get('type', 'Auto generated type'), exam_type=type_id) - student, _ = StudentInfo.objects.get_or_create( - user=UserAccount.objects.get( - username=submission.get('user', 'default_user'))) - submission_object, _ = Submission.objects.get_or_create( - type=submission_type, student=student, defaults={ - 'seen_by_student': submission.get('seen_by_student', False), - 'text': submission.get('text', ''), - }) - if 'feedback' in submission: - make_feedback(submission['feedback'], submission_object) - submission_objects.append(submission_object) - return submission_objects - - -def make_test_data(data_dict): - type_id = (make_exams(**data_dict))[0].exam_type_id - return { - 'exams': make_exams(**data_dict), - 'submission_types': make_submission_types(type_id, **data_dict), - 'students': make_students(**data_dict), - 'tutors': make_tutors(**data_dict), - 'reviewers': make_reviewers(**data_dict), - 'submissions': make_submissions(type_id, **data_dict) - } - - -def init_test_instance(): - return make_test_data( - data_dict={ - 'exams': [{ - 'module_reference': 'Test Exam 01', - 'total_score': 100, - 'pass_score': 60, - }], - 'submission_types': [ - { - 'name': '01. Sort this or that', - 'full_score': 35, - 'description': 'Very complicated', - 'solution': 'Trivial!' - }, - { - 'name': '02. Merge this or that or maybe even this', - 'full_score': 35, - 'description': 'Very complicated', - 'solution': 'Trivial!' - }, - { - 'name': '03. This one exists for the sole purpose to test', - 'full_score': 30, - 'description': 'Very complicated', - 'solution': 'Trivial!' - } - ], - 'students': [ - { - 'username': 'student01', - 'exam': 'Test Exam 01', - 'password': 'p' - }, - { - 'username': 'student02', - 'exam': 'Test Exam 01', - 'password': 'p' - }, - { - 'username': 'student03', - 'exam': 'Test Exam 01', - 'password': 'p' - }, - { - 'username': 'student04', - 'exam': 'Test Exam 01', - 'password': 'p' - }, - { - 'username': 'student05', - 'exam': 'Test Exam 01', - 'password': 'p' - }, - { - 'username': 'student06', - 'exam': 'Test Exam 01', - 'password': 'p' - }, - { - 'username': 'student07', - 'exam': 'Test Exam 01', - 'password': 'p' - }, - ], - 'tutors': [ - { - 'username': 'tutor01', - 'password': 'p' - }, - { - 'username': 'tutor02', - 'password': 'p' - } - ], - 'reviewers': [{ - 'username': 'reviewer01', - 'password': 'p' - }], - 'submissions': [ - { - 'text': 'function blabl\n' - ' on multi lines\n' - ' for blabla in bla:\n' - ' arrrgh\n' - ' asasxasx\n' - ' lorem ipsum und so\n', - 'type': '01. Sort this or that', - 'user': 'student01', - 'feedback': { - 'score': 5, - 'is_final': True, - 'feedback_lines': { - '1': [ - { - 'text': 'This is very bad!', - 'of_tutor': 'tutor01' - }, - { - 'text': 'I agree', - 'of_tutor': 'tutor02' - } - ], - '3': [ - { - 'text': 'Even worse!', - 'of_tutor': 'tutor02' - } - ] - } - } - }, - { - 'text': 'function blabl\n' - ' on multi lines\n' - ' for blabla in bla:\n' - ' arrrgh\n' - ' asasxasx\n' - ' lorem ipsum und so\n', - 'type': '02. Merge this or that or maybe even this', - 'user': 'student01', - 'feedback': { - 'score': 5, - 'is_final': True, - 'feedback_lines': { - '1': [ - { - 'text': 'This is very bad!', - 'of_tutor': 'tutor01' - }, - { - 'text': 'I agree', - 'of_tutor': 'tutor02' - } - ], - '3': [ - { - 'text': 'Even worse!', - 'of_tutor': 'tutor02' - } - ] - } - } - }, - { - 'text': 'function blabl\n' - ' on multi lines\n' - ' for blabla in bla:\n' - ' arrrgh\n' - ' asasxasx\n' - ' lorem ipsum und so\n', - 'type': '03. This one exists for the sole purpose to test', - 'user': 'student01', - 'feedback': { - 'score': 5, - 'is_final': True, - 'feedback_lines': { - '1': [ - { - 'text': 'This is very bad!', - 'of_tutor': 'tutor01' - }, - { - 'text': 'I agree', - 'of_tutor': 'tutor02' - } - ], - '3': [ - { - 'text': 'Even worse!', - 'of_tutor': 'tutor02' - } - ] - } - } - }, - - { - 'text': 'function blabl\n' - ' on multi lines\n' - ' for blabla in bla:\n' - ' arrrgh\n' - ' asasxasx\n' - ' lorem ipsum und so\n', - 'type': '01. Sort this or that', - 'user': 'student02', - }, - { - 'text': 'function blabl\n' - ' on multi lines\n' - ' for blabla in bla:\n' - ' arrrgh\n' - ' asasxasx\n' - ' lorem ipsum und so\n', - 'type': '02. Merge this or that or maybe even this', - 'user': 'student02', - }, - { - 'text': 'function blabl\n' - ' on multi lines\n' - ' for blabla in bla:\n' - ' arrrgh\n' - ' asasxasx\n' - ' lorem ipsum und so\n', - 'type': '03. This one exists for the sole purpose to test', - 'user': 'student02', - }, - { - 'text': 'function blabl\n' - ' on multi lines\n' - ' for blabla in bla:\n' - ' arrrgh\n' - ' asasxasx\n' - ' lorem ipsum und so\n', - 'type': '01. Sort this or that', - 'user': 'student03', - }, - { - 'text': 'function blabl\n' - ' on multi lines\n' - ' for blabla in bla:\n' - ' arrrgh\n' - ' asasxasx\n' - ' lorem ipsum und so\n', - 'type': '02. Merge this or that or maybe even this', - 'user': 'student03', - }, - { - 'text': 'function blabl\n' - ' on multi lines\n' - ' for blabla in bla:\n' - ' arrrgh\n' - ' asasxasx\n' - ' lorem ipsum und so\n', - 'type': '03. This one exists for the sole purpose to test', - 'user': 'student03', - }, - - { - 'text': 'function blabl\n' - ' on multi lines\n' - ' for blabla in bla:\n' - ' arrrgh\n' - ' asasxasx\n' - ' lorem ipsum und so\n', - 'type': '01. Sort this or that', - 'user': 'student04', - }, - { - 'text': 'function blabl\n' - ' on multi lines\n' - ' for blabla in bla:\n' - ' arrrgh\n' - ' asasxasx\n' - ' lorem ipsum und so\n', - 'type': '02. Merge this or that or maybe even this', - 'user': 'student04', - }, - { - 'text': 'function blabl\n' - ' on multi lines\n' - ' for blabla in bla:\n' - ' arrrgh\n' - ' asasxasx\n' - ' lorem ipsum und so\n', - 'type': '03. This one exists for the sole purpose to test', - 'user': 'student04', - }, - - { - 'text': 'function blabl\n' - ' on multi lines\n' - ' for blabla in bla:\n' - ' arrrgh\n' - ' asasxasx\n' - ' lorem ipsum und so\n', - 'type': '01. Sort this or that', - 'user': 'student05', - }, - { - 'text': 'function blabl\n' - ' on multi lines\n' - ' for blabla in bla:\n' - ' arrrgh\n' - ' asasxasx\n' - ' lorem ipsum und so\n', - 'type': '02. Merge this or that or maybe even this', - 'user': 'student05', - }, - { - 'text': 'function blabl\n' - ' on multi lines\n' - ' for blabla in bla:\n' - ' arrrgh\n' - ' asasxasx\n' - ' lorem ipsum und so\n', - 'type': '03. This one exists for the sole purpose to test', - 'user': 'student05', - }, - ]} - ) diff --git a/grady/util/factory_boys.py b/grady/util/factory_boys.py deleted file mode 100644 index 75faa8ae..00000000 --- a/grady/util/factory_boys.py +++ /dev/null @@ -1,115 +0,0 @@ -import factory -from factory.django import DjangoModelFactory -from faker import Faker -from core import models - -Faker.seed(42) -fake = Faker() - - -class ExamTypeFactory(DjangoModelFactory): - class Meta: - model = models.ExamType - django_get_or_create = ('module_reference',) - - module_reference = 'B.Inf.4242 Test Module' - total_score = 90 - pass_score = 45 - pass_only = False - - -class SubmissionTypeFactory(DjangoModelFactory): - class Meta: - model = models.SubmissionType - name = factory.Sequence(lambda n: f"[{n}] Example submission type") - full_score = 15 - description = factory.Sequence( - lambda n: f'Type {n} \n<h1>This</h1> is a description containing html') - solution = factory.Sequence(lambda n: f'//This is a solution\n#include<stdio.h>\n\nint main() {{\n\tprintf("Hello World\\n");\n\treturn {n};\n}}') # noqa - programming_language = models.SubmissionType.C - exam_type = factory.SubFactory(ExamTypeFactory) - - -class GroupFactory(DjangoModelFactory): - class Meta: - model = models.Group - name = factory.Sequence(lambda n: f"Group [{n}]") - exam = factory.SubFactory(ExamTypeFactory) - - -class UserAccountFactory(DjangoModelFactory): - class Meta: - model = models.UserAccount - django_get_or_create = ('username',) - - role = models.UserAccount.TUTOR - fullname = fake.name - username = factory.Sequence(lambda n: f"{fake.user_name()}-{n}") - password = factory.PostGenerationMethodCall('set_password', 'redrum-is-murder-reversed') - - @factory.post_generation - def exercise_groups(self, create, extracted, **kwargs): - name = "Default Group: " - default_group, _ = models.Group.objects.get_or_create(name=name) - self.exercise_groups.add(default_group) - - -class ExamInfoFactory(DjangoModelFactory): - class Meta: - model = models.ExamInfo - - exam = factory.SubFactory(ExamTypeFactory) - total_score = 90 - passes_exam = True - - -class StudentInfoFactory(DjangoModelFactory): - class Meta: - model = models.StudentInfo - - student_info = factory.RelatedFactory( - ExamInfoFactory, - factory_related_name='student', - ) - user = factory.SubFactory(UserAccountFactory, role=models.UserAccount.STUDENT) - - -class TestFactory(DjangoModelFactory): - class Meta: - model = models.Test - - name = 'EmptyTest' - label = 'Empty' - annotation = factory.Sequence(lambda n: f'Test: {n} This is an annotation') - - -class SubmissionFactory(DjangoModelFactory): - class Meta: - model = models.Submission - - text = factory.Sequence(lambda n: f'#include<stdio.h>\n\nint main() {{\n\tprintf("Hello World\\n");\n\treturn {n};\n}}') # noqa - type = factory.SubFactory(SubmissionTypeFactory) - student = factory.SubFactory(StudentInfoFactory) - - -class FeedbackFactory(DjangoModelFactory): - class Meta: - model = models.Feedback - - of_submission = factory.SubFactory(SubmissionTypeFactory) - - -class FeedbackCommentFactory(DjangoModelFactory): - class Meta: - model = models.FeedbackComment - - text = 'Well, this is bad...' - of_tutor = factory.SubFactory(UserAccountFactory) - of_feedback = factory.SubFactory(FeedbackFactory) - - -class TutorSubmissionAssignmentFactory(DjangoModelFactory): - class Meta: - model = models.TutorSubmissionAssignment - - submission = factory.SubFactory(SubmissionFactory) diff --git a/grady/util/format_index.py b/grady/util/format_index.py deleted file mode 100644 index e6ef6a5f..00000000 --- a/grady/util/format_index.py +++ /dev/null @@ -1,16 +0,0 @@ -import fileinput -import sys -import re - -file = 'core/templates/index.html' - -STATIC_FILES_REGEX = re.compile("=/static/(.*?)([ >])") -SUB_PATTERN = r"={% static '\1' %}\2" - -with open(file, "r+") as f: - s = f.read() - f.seek(0) - f.write("{% load static %}\n" + s) - -for line in fileinput.input(file, inplace=1): - sys.stdout.write(STATIC_FILES_REGEX.sub(SUB_PATTERN, line)) diff --git a/grady/util/importer.py b/grady/util/importer.py deleted file mode 100644 index 04b474fa..00000000 --- a/grady/util/importer.py +++ /dev/null @@ -1,225 +0,0 @@ -import json -import os -import readline -import logging -import constance - -from rest_framework.exceptions import ValidationError -from util.messages import warn -from core.models import ExamType, Feedback, Submission, SubmissionType, Test, FeedbackLabel -from core.models import UserAccount as User -from util.factories import GradyUserFactory - -import xkcdpass.xkcd_password as xp -import semver - -log = logging.getLogger(__name__) -config = constance.config - -WELCOME = r''' - ______ __ ____ __ - / ____/________ _____/ /_ __ / _/___ ___ ____ ____ _____/ /____ _____ - / / __/ ___/ __ `/ __ / / / / / // __ `__ \/ __ \/ __ \/ ___/ __/ _ \/ ___/ -/ /_/ / / / /_/ / /_/ / /_/ / _/ // / / / / / /_/ / /_/ / / / /_/ __/ / -\____/_/ \__,_/\__,_/\__, / /___/_/ /_/ /_/ .___/\____/_/ \__/\___/_/ - /____/ /_/ -''' - -HISTFILE = '.importer_history' -PASSWORDS = '.importer_passwords' - -YES = 'Y/n' -NO = 'y/N' - -RUSTY_HEKTOR_MIN_VER = ">=6.0.0" -RUSTY_HEKTOR_MAX_VER = "<7.0.0" - -valid = {"yes": True, "y": True, "ye": True, "no": False, "n": False} - -user_factory = GradyUserFactory() -words = xp.generate_wordlist(wordfile=xp.locate_wordfile(), min_length=5, max_length=8) - - -def start(): - - if os.path.exists(HISTFILE): - readline.read_history_file(HISTFILE) - - print(WELCOME + ''' - - Welcome to the Grady import script! - - This script aims at making the setup of the database as easy as possible. - At the same time it serves as a documentation on how data is imported into - Grady. Let\'s dive right in.\n''') - - try: - print('The following sub importers are available:\n') - for fid, func in enumerate(call_order): - print(f'\t[{fid}] {func.__name__}') - print('\t[q] exit') - print() - - fid = i('Choose a number or hit enter to start at the beginning') - - if not fid: - for func in call_order: - func() - elif fid in ('q', 'quit', 'exit'): - return - elif not 0 <= int(fid) < len(call_order): - warn('There is no loader with this number') - else: - call_order[int(fid)]() - - except (EOFError, KeyboardInterrupt): - print() - return - except FileNotFoundError: - raise - except Exception: - import traceback - traceback.print_exc() - finally: - readline.write_history_file(HISTFILE) - - -def i(prompt: str, default: str = '', is_path: bool = False, is_file: bool = False): - if default is YES or default is NO: - answer = valid[input(f'[Q] {prompt} ({default}): ').lower() or ( - 'y' if YES == default else 'n')] - elif default: - answer = input(f'[Q] {prompt} ({default}): ') or default - else: - answer = input(f'[Q] {prompt}: ') - - if (is_path or is_file) and \ - not os.path.exists(answer) or is_file and \ - not os.path.isfile(answer): - path_or_type = "path" if is_path else "file" - warn(f'The {path_or_type} does not exist. Please try again.') - return i(prompt, default, is_path, is_file) - - return answer - - -def load_hektor_json(): - file = i('Get me the file with the output from rusty-hektor', - 'submissions.json', is_file=True) - - with open(file, 'r') as f: - hektor_data = json.JSONDecoder().decode(f.read()) - - parse_and_import_hektor_json(hektor_data) - - -def parse_and_import_hektor_json(hektor_data): - hektor_version = hektor_data['meta']['version'] - if not (semver.match(hektor_version, RUSTY_HEKTOR_MIN_VER) and - semver.match(hektor_version, RUSTY_HEKTOR_MAX_VER)): - raise ValidationError( - f'The data you\'re trying to import has the wrong version {hektor_version}\n' - f'Requirements: {RUSTY_HEKTOR_MIN_VER}, {RUSTY_HEKTOR_MAX_VER}' - ) - - exam_data = hektor_data['data'] - - exam, _ = ExamType.objects.get_or_create(**exam_data['module']) - - for submission_type in exam_data['submission_types']: - _, created = SubmissionType.objects.update_or_create( - name=submission_type['name'], exam_type=exam, defaults=submission_type) - if not created: - raise ValidationError(f"Updated submission type: {submission_type['name']}") - - for student in exam_data['students']: - # student accounts will be automatically enabled when in exercise mode - student_obj = user_factory.make_student(exam=exam, is_active=config.EXERCISE_MODE, - **student).student - for submission_obj in student['submissions']: - add_submission(student_obj, **submission_obj) - - -def load_reviewers(): - print('Please import reviewer users by providing one name per line') - reviewers = i('List of reviewers', 'reviewers', is_file=True) - - with open(reviewers) as reviewers_f: - for reviewer in reviewers_f: - rev = reviewer.strip() - if len(rev) > 0: - user_factory.make_reviewer(rev, - is_staff=True, - store_pw=True) - - -def set_registration_password(): - pw = xp.generate_xkcdpassword(words, numwords=4, delimiter='-') - setattr(config, 'REGISTRATION_PASSWORD', pw) - print('The password will be set to', pw) - - -def add_submission(student_obj, code, tests, type=None, source_code=None): - submission_type_obj = SubmissionType.objects.get(name=type) - - submission_obj, _ = Submission.objects.update_or_create( - type=submission_type_obj, - student=student_obj, - defaults={ - 'text': code, - 'source_code': source_code, - 'source_code_available': source_code is not None - } - ) - - if tests: - add_tests(submission_obj, tests) - - -def add_tests(submission_obj, tests): - auto_correct, _ = User.objects.get_or_create( - username='auto_correct', - defaults={'is_active': False} - ) - - for test_data in tests: - test_obj, created = Test.objects.update_or_create( - name=test_data['name'], - submission=submission_obj, - defaults={ - 'label': test_data['label'], - 'annotation': test_data['annotation'], - } - ) - add_feedback_if_test_recommends_it(test_obj) - add_label_to_feedback_if_test_recommends_it(test_obj) - - -def add_feedback_if_test_recommends_it(test_obj): - # TODO rework this brittle code - if (test_obj.label == 'EMPTY' or test_obj.label == 'COMPILATION_FAILED') \ - and not hasattr(test_obj.submission, 'feedback'): - return Feedback.objects.update_or_create( - of_submission=test_obj.submission, - defaults={ - 'score': 0, - 'is_final': True, - } - ) - - -def add_label_to_feedback_if_test_recommends_it(test_obj): - if (test_obj.label == 'EMPTY' or test_obj.label == 'COMPILATION_FAILED') \ - and hasattr(test_obj.submission, 'feedback'): - feedback = test_obj.submission.feedback - label, _ = FeedbackLabel.objects.get_or_create( - name=test_obj.label, - defaults={'description': test_obj.label}) - feedback.labels.add(label) - - -call_order = [ - load_hektor_json, - load_reviewers, - set_registration_password, -] diff --git a/grady/util/messages.py b/grady/util/messages.py deleted file mode 100644 index 7f1aeac4..00000000 --- a/grady/util/messages.py +++ /dev/null @@ -1,26 +0,0 @@ -import sys - - -def warn(*message): - print('[W]', *message) - - -def debug(*message): - print('[DEBUG]', *message) - - -def info(*message): - print('[I]', *message) - - -def error(*message): - print('[E]', *message) - - -def abort(*message): - print('[FATAL]', *message) - sys.exit('exiting...') - - -def exit(message='exiting...'): - sys.exit(*message) diff --git a/grady/yarn.lock b/grady/yarn.lock deleted file mode 100644 index fb57ccd1..00000000 --- a/grady/yarn.lock +++ /dev/null @@ -1,4 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -- GitLab